From 2a3581c9a5e6d18b3cd0ea2fe523063a116af8f8 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 2 May 2016 09:47:14 +0200 Subject: Working on clip erase basic work done but broken (bzr r14865.1.1) --- src/sp-lpe-item.cpp | 36 ++++++++------ src/ui/tools/eraser-tool.cpp | 109 +++++++++++++++++++++++++++++++++++------ src/widgets/eraser-toolbar.cpp | 30 +++++++----- 3 files changed, 134 insertions(+), 41 deletions(-) diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp index fdc2949d5..5753e9307 100644 --- a/src/sp-lpe-item.cpp +++ b/src/sp-lpe-item.cpp @@ -349,10 +349,10 @@ sp_lpe_item_create_original_path_recursive(SPLPEItem *lpeitem) { sp_lpe_item_create_original_path_recursive(SP_LPE_ITEM(mask->firstChild())); } - SPClipPath * clipPath = lpeitem->clip_ref->getObject(); - if(clipPath) + SPClipPath * clip_path = lpeitem->clip_ref->getObject(); + if(clip_path) { - sp_lpe_item_create_original_path_recursive(SP_LPE_ITEM(clipPath->firstChild())); + sp_lpe_item_create_original_path_recursive(SP_LPE_ITEM(clip_path->firstChild())); } if (SP_IS_GROUP(lpeitem)) { std::vector item_list = sp_item_group_item_list(SP_GROUP(lpeitem)); @@ -383,10 +383,10 @@ sp_lpe_item_cleanup_original_path_recursive(SPLPEItem *lpeitem) { sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(mask->firstChild())); } - SPClipPath * clipPath = lpeitem->clip_ref->getObject(); - if(clipPath) + SPClipPath * clip_path = lpeitem->clip_ref->getObject(); + if(clip_path) { - sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(clipPath->firstChild())); + sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(clip_path->firstChild())); } } std::vector item_list = sp_item_group_item_list(SP_GROUP(lpeitem)); @@ -405,10 +405,10 @@ sp_lpe_item_cleanup_original_path_recursive(SPLPEItem *lpeitem) { sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(mask->firstChild())); } - SPClipPath * clipPath = lpeitem->clip_ref->getObject(); - if(clipPath) + SPClipPath * clip_path = lpeitem->clip_ref->getObject(); + if(clip_path) { - sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(clipPath->firstChild())); + sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(clip_path->firstChild())); } repr->setAttribute("d", repr->attribute("inkscape:original-d")); repr->setAttribute("inkscape:original-d", NULL); @@ -640,10 +640,13 @@ bool SPLPEItem::hasPathEffectRecursive() const void SPLPEItem::apply_to_clippath(SPItem *item) { - SPClipPath *clipPath = item->clip_ref->getObject(); - if(clipPath) { - SPObject * clip_data = clipPath->firstChild(); - apply_to_clip_or_mask(SP_ITEM(clip_data), item); + SPClipPath *clip_path = item->clip_ref->getObject(); + if(clip_path) { + std::vector clip_path_list = clip_path->childList(true); + for ( std::vector::const_iterator iter=clip_path_list.begin();iter!=clip_path_list.end();++iter) { + SPObject * clip_data = *iter; + apply_to_clip_or_mask(SP_ITEM(clip_data), item); + } } if(SP_IS_GROUP(item)){ std::vector item_list = sp_item_group_item_list(SP_GROUP(item)); @@ -659,8 +662,11 @@ SPLPEItem::apply_to_mask(SPItem *item) { SPMask *mask = item->mask_ref->getObject(); if(mask) { - SPObject *mask_data = mask->firstChild(); - apply_to_clip_or_mask(SP_ITEM(mask_data), item); + std::vector mask_list = mask->childList(true); + for ( std::vector::const_iterator iter=mask_list.begin();iter!=mask_list.end();++iter) { + SPObject * mask_data = *iter; + apply_to_clip_or_mask(SP_ITEM(mask_data), item); + } } if(SP_IS_GROUP(item)){ std::vector item_list = sp_item_group_item_list(SP_GROUP(item)); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 6b32b5901..38e599c05 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -58,6 +58,8 @@ #include "sp-item-group.h" #include "sp-shape.h" #include "sp-path.h" +#include "sp-clippath.h" +#include "sp-rect.h" #include "sp-text.h" #include "display/canvas-bpath.h" #include "display/canvas-arena.h" @@ -69,6 +71,7 @@ #include <2geom/math-utils.h> #include <2geom/pathvector.h> #include "path-chemistry.h" +#include "selection-chemistry.h" #include "display/curve.h" #include "ui/tools/eraser-tool.h" @@ -380,7 +383,7 @@ void EraserTool::cancel() { bool EraserTool::root_handler(GdkEvent* event) { gint ret = FALSE; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gint eraserMode = prefs->getBool("/tools/eraser/mode") ? 1 : 0; + gint eraser_mode = prefs->getInt("/tools/eraser/mode", 2); switch (event->type) { case GDK_BUTTON_PRESS: if (event->button.button == 1 && !this->space_panning) { @@ -400,7 +403,7 @@ bool EraserTool::root_handler(GdkEvent* event) { if (this->repr) { this->repr = NULL; } - if ( ! eraserMode ) { + if ( eraser_mode == 0 ) { Inkscape::Rubberband::get(desktop)->start(desktop, button_dt); Inkscape::Rubberband::get(desktop)->setMode(RUBBERBAND_MODE_TOUCHPATH); } @@ -448,7 +451,7 @@ bool EraserTool::root_handler(GdkEvent* event) { ret = TRUE; } - if ( !eraserMode ) { + if ( eraser_mode == 0 ) { this->accumulated->reset(); Inkscape::Rubberband::get(desktop)->move(motion_dt); } @@ -491,7 +494,7 @@ bool EraserTool::root_handler(GdkEvent* event) { ret = TRUE; } - if (!eraserMode && Inkscape::Rubberband::get(desktop)->is_started()) { + if (eraser_mode == 0 && Inkscape::Rubberband::get(desktop)->is_started()) { Inkscape::Rubberband::get(desktop)->stop(); } @@ -578,7 +581,7 @@ bool EraserTool::root_handler(GdkEvent* event) { break; case GDK_KEY_Escape: - if ( !eraserMode ) { + if ( eraser_mode == 0 ) { Inkscape::Rubberband::get(desktop)->stop(); } if (this->is_drawing) { @@ -640,7 +643,9 @@ void EraserTool::clear_current() { void EraserTool::set_to_accumulated() { bool workDone = false; - + SPDocument *document = this->desktop->doc(); +// bool has_undo_sensitive = DocumentUndo::getUndoSensitive(document); +// DocumentUndo::setUndoSensitive(document, false); if (!this->accumulated->is_empty()) { if (!this->repr) { /* Create object */ @@ -666,7 +671,7 @@ void EraserTool::set_to_accumulated() { bool wasSelection = false; Inkscape::Selection *selection = desktop->getSelection(); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gint eraserMode = prefs->getBool("/tools/eraser/mode") ? 1 : 0; + gint eraser_mode = prefs->getInt("/tools/eraser/mode", 2); Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); SPItem* acid = SP_ITEM(desktop->doc()->getObjectByRepr(this->repr)); @@ -674,7 +679,7 @@ void EraserTool::set_to_accumulated() { std::vector remainingItems; std::vector toWorkOn; if (selection->isEmpty()) { - if ( eraserMode ) { + if ( eraser_mode == 1 || eraser_mode == 2) { toWorkOn = desktop->getDocument()->getItemsPartiallyInBox(desktop->dkey, *eraserBbox); } else { Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop); @@ -682,7 +687,7 @@ void EraserTool::set_to_accumulated() { } toWorkOn.erase(std::remove(toWorkOn.begin(), toWorkOn.end(), acid), toWorkOn.end()); } else { - if ( !eraserMode ) { + if ( eraser_mode == 0 ) { Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop); std::vector touched; touched = desktop->getDocument()->getItemsAtPoints(desktop->dkey, r->getPoints()); @@ -698,7 +703,7 @@ void EraserTool::set_to_accumulated() { } if ( !toWorkOn.empty() ) { - if ( eraserMode ) { + if ( eraser_mode == 1 ) { for (std::vector::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){ SPItem *item = *i; SPUse *use = dynamic_cast(item); @@ -708,7 +713,6 @@ void EraserTool::set_to_accumulated() { item->deleteObject(true); sp_object_unref(item); workDone = true; - workDone = true; } else if (SP_IS_GROUP(item) || use ) { /*Do nothing*/ } else { @@ -755,6 +759,81 @@ void EraserTool::set_to_accumulated() { } } } + } else if ( eraser_mode == 2 ) { + for (std::vector::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){ + selection->clear(); + SPItem *item = *i; + Geom::OptRect bbox = item->desktopVisualBounds(); + Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); + Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); + SPRect * rect = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr)); + rect->updateRepr(); + rect->setPosition (bbox.min()[Geom::X], bbox.min()[Geom::Y], bbox.dimensions()[Geom::X], bbox.dimensions()[Geom::Y]); + rect->doWriteTransform(rect_repr, SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse() * this->desktop->dt2doc()); + Inkscape::GC::release(rect_repr); + + + Inkscape::XML::Node *rect_repr2 = xml_doc->createElement("svg:rect"); + SPRect * rect2 = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr2)); + rect2->updateRepr(); + sp_desktop_apply_style_tool (desktop, rect_repr2, "/tools/shapes/rect", false); + rect2->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); + rect->doWriteTransform(rect_repr, SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse() * this->desktop->dt2doc()); + Inkscape::GC::release(rect_repr2); + + + Inkscape::XML::Node *rect_repr3 = xml_doc->createElement("svg:rect"); + SPRect * rect3 = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr3)); + rect3->updateRepr(); + sp_desktop_apply_style_tool (desktop, rect_repr3, "/tools/shapes/rect", false); + rect3->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); + rect->doWriteTransform(rect_repr3, SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse() * this->desktop->doc2dt()); + Inkscape::GC::release(rect_repr3); + + + + + + Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc); + this->repr->parent()->appendChild(dup); + Inkscape::GC::release(dup); // parent takes over + selection->set(dup); + sp_selected_path_union_skip_undo(selection, this->desktop); + sp_selection_raise_to_top(selection, this->desktop); + if (bbox && bbox->intersects(*eraserBbox)) { + SPClipPath *clip_path = item->clip_ref->getObject(); + if (clip_path) { + SPObject *clip_data = clip_path->firstChild(); + Inkscape::XML::Node *dup_clip = clip_data->getRepr()->duplicate(xml_doc); + if (dup_clip) { + this->repr->parent()->appendChild(dup_clip); + sp_object_ref(clip_data, 0); + clip_data->deleteObject(true); + sp_object_unref(clip_data); + sp_selection_raise_to_top(selection, this->desktop); + selection->add(dup_clip); + } + } else { + selection->add(rect); + } + sp_selected_path_diff_skip_undo(selection, this->desktop); + sp_selection_raise_to_top(selection, this->desktop); + selection->add(item); + sp_selection_set_mask(this->desktop, true, false); + } else { + SPItem *erase_clip = selection->singleItem(); + if (erase_clip) { + sp_object_ref(erase_clip, 0); + erase_clip->deleteObject(true); + sp_object_unref(erase_clip); + } + } + workDone = true; + } + selection->clear(); + if (wasSelection) { + selection->setList(toWorkOn); + } } else { for (std::vector ::const_iterator i = toWorkOn.begin();i!=toWorkOn.end();++i) { sp_object_ref( *i, 0 ); @@ -768,7 +847,7 @@ void EraserTool::set_to_accumulated() { } } - if ( !eraserMode ) { + if ( eraser_mode == 0 ) { //sp_selection_delete(desktop); remainingItems.clear(); } @@ -792,7 +871,7 @@ void EraserTool::set_to_accumulated() { } } - +// DocumentUndo::setUndoSensitive(document, has_undo_sensitive); if ( workDone ) { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke")); } else { @@ -987,7 +1066,7 @@ void EraserTool::fit_and_split(bool release) { g_print("[%d]Yup\n", this->npoints); #endif if (!release) { - gint eraserMode = prefs->getBool("/tools/eraser/mode") ? 1 : 0; + gint eraser_mode = prefs->getInt("/tools/eraser/mode",2); g_assert(!this->currentcurve->is_empty()); SPCanvasItem *cbp = sp_canvas_item_new(desktop->getSketch(), SP_TYPE_CANVAS_BPATH, NULL); @@ -1009,7 +1088,7 @@ void EraserTool::fit_and_split(bool release) { this->segments = g_slist_prepend(this->segments, cbp); - if ( !eraserMode ) { + if ( eraser_mode == 0 ) { sp_canvas_item_hide(cbp); sp_canvas_item_hide(this->currentshape); } diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp index 45989936f..5b883905b 100644 --- a/src/widgets/eraser-toolbar.cpp +++ b/src/widgets/eraser-toolbar.cpp @@ -67,15 +67,15 @@ static void sp_erc_mass_value_changed( GtkAdjustment *adj, GObject* tbl ) static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl ) { SPDesktop *desktop = static_cast(g_object_get_data( tbl, "desktop" )); - bool eraserMode = ege_select_one_action_get_active( act ) != 0; + guint eraser_mode = ege_select_one_action_get_active( act ); if (DocumentUndo::getUndoSensitive(desktop->getDocument())) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - prefs->setBool( "/tools/eraser/mode", eraserMode ); + prefs->setInt( "/tools/eraser/mode", eraser_mode ); } GtkAction *split = GTK_ACTION( g_object_get_data(tbl, "split") ); GtkAction *mass = GTK_ACTION( g_object_get_data(tbl, "mass") ); GtkAction *width = GTK_ACTION( g_object_get_data(tbl, "width") ); - if(eraserMode == TRUE){ + if(eraser_mode != 0){ gtk_action_set_visible( split, TRUE ); gtk_action_set_visible( mass, TRUE ); gtk_action_set_visible( width, TRUE ); @@ -90,7 +90,7 @@ static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl ) g_object_set_data( tbl, "freeze", GINT_TO_POINTER(TRUE) ); /* - if ( eraserMode != 0 ) { + if ( eraser_mode != 0 ) { } else { } */ @@ -111,7 +111,7 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb { Inkscape::IconSize secondarySize = ToolboxFactory::prefToSize("/toolbox/secondary", 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - gint eraserMode = FALSE; + gint eraser_mode = FALSE; { GtkListStore* model = gtk_list_store_new( 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING ); GtkTreeIter iter; @@ -125,10 +125,17 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb gtk_list_store_append( model, &iter ); gtk_list_store_set( model, &iter, 0, _("Cut"), - 1, _("Cut out from objects"), + 1, _("Cut out from paths and shapes"), 2, INKSCAPE_ICON("path-difference"), -1 ); + gtk_list_store_append( model, &iter ); + gtk_list_store_set( model, &iter, + 0, _("Clip"), + 1, _("Clip from objects"), + 2, INKSCAPE_ICON("path-intersection"), + -1 ); + EgeSelectOneAction* act = ege_select_one_action_new( "EraserModeAction", (""), (""), NULL, GTK_TREE_MODEL(model) ); g_object_set( act, "short_label", _("Mode:"), NULL ); gtk_action_group_add_action( mainActions, GTK_ACTION(act) ); @@ -137,12 +144,13 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb ege_select_one_action_set_appearance( act, "full" ); ege_select_one_action_set_radio_action_type( act, INK_RADIO_ACTION_TYPE ); g_object_set( G_OBJECT(act), "icon-property", "iconId", NULL ); - ege_select_one_action_set_icon_column( act, 2 ); - ege_select_one_action_set_tooltip_column( act, 1 ); + ege_select_one_action_set_icon_column( act, 2); + ege_select_one_action_set_icon_size( act, secondarySize ); + ege_select_one_action_set_tooltip_column( act, 1); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); - eraserMode = prefs->getBool("/tools/eraser/mode") ? TRUE : FALSE; - ege_select_one_action_set_active( act, eraserMode ); + eraser_mode = prefs->getInt("/tools/eraser/mode", 2); + ege_select_one_action_set_active( act, eraser_mode ); g_signal_connect_after( G_OBJECT(act), "changed", G_CALLBACK(sp_erasertb_mode_changed), holder ); } @@ -195,7 +203,7 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb GtkAction *split = GTK_ACTION( g_object_get_data(holder, "split") ); GtkAction *mass = GTK_ACTION( g_object_get_data(holder, "mass") ); GtkAction *width = GTK_ACTION( g_object_get_data(holder, "width") ); - if(eraserMode == TRUE){ + if (eraser_mode != 0) { gtk_action_set_visible( split, TRUE ); gtk_action_set_visible( mass, TRUE ); gtk_action_set_visible( width, TRUE ); -- cgit v1.2.3 From c425407979c2eca1a6fe6858923619de18c8d058 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Fri, 6 May 2016 22:56:57 +0200 Subject: Finishing eraser tool. TODO undo work (bzr r14865.1.2) --- src/document-undo.cpp | 21 +++++++---- src/document-undo.h | 4 +- src/ui/tools/eraser-tool.cpp | 90 ++++++++++++++++++++++---------------------- 3 files changed, 61 insertions(+), 54 deletions(-) diff --git a/src/document-undo.cpp b/src/document-undo.cpp index eb0ac7707..f6bcf3ab2 100644 --- a/src/document-undo.cpp +++ b/src/document-undo.cpp @@ -328,28 +328,35 @@ gboolean Inkscape::DocumentUndo::redo(SPDocument *doc) return ret; } -void Inkscape::DocumentUndo::clearUndo(SPDocument *doc) +void Inkscape::DocumentUndo::clearUndo(SPDocument *doc, size_t limit) { if (! doc->priv->undo.empty()) doc->priv->undoStackObservers.notifyClearUndoEvent(); - while (! doc->priv->undo.empty()) { + if (limit == 0) { + limit = doc->priv->undo.size(); + } + while (! doc->priv->undo.empty() && limit > 0) { Inkscape::Event *e = doc->priv->undo.back(); doc->priv->undo.pop_back(); delete e; doc->priv->history_size--; + limit--; } } -void Inkscape::DocumentUndo::clearRedo(SPDocument *doc) +void Inkscape::DocumentUndo::clearRedo(SPDocument *doc, size_t limit) { - if (!doc->priv->redo.empty()) - doc->priv->undoStackObservers.notifyClearRedoEvent(); - - while (! doc->priv->redo.empty()) { + if (!doc->priv->redo.empty()) + doc->priv->undoStackObservers.notifyClearRedoEvent(); + if (limit == 0) { + limit = doc->priv->undo.size(); + } + while (! doc->priv->redo.empty() && limit > 0) { Inkscape::Event *e = doc->priv->redo.back(); doc->priv->redo.pop_back(); delete e; doc->priv->history_size--; + limit--; } } diff --git a/src/document-undo.h b/src/document-undo.h index 85b44d562..559036458 100644 --- a/src/document-undo.h +++ b/src/document-undo.h @@ -33,9 +33,9 @@ public: static bool getUndoSensitive(SPDocument const *document); - static void clearUndo(SPDocument *document); + static void clearUndo(SPDocument *document, size_t limit = 0); - static void clearRedo(SPDocument *document); + static void clearRedo(SPDocument *document, size_t limit = 0); static void done(SPDocument *document, unsigned int event_type, Glib::ustring const &event_description); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 38e599c05..f1c7306b4 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -644,8 +644,6 @@ void EraserTool::clear_current() { void EraserTool::set_to_accumulated() { bool workDone = false; SPDocument *document = this->desktop->doc(); -// bool has_undo_sensitive = DocumentUndo::getUndoSensitive(document); -// DocumentUndo::setUndoSensitive(document, false); if (!this->accumulated->is_empty()) { if (!this->repr) { /* Create object */ @@ -657,11 +655,11 @@ void EraserTool::set_to_accumulated() { this->repr = repr; } - SPItem *item = SP_ITEM(desktop->currentLayer()->appendChildRepr(this->repr)); + SPItem *item_repr = SP_ITEM(desktop->currentLayer()->appendChildRepr(this->repr)); Inkscape::GC::release(this->repr); - item->updateRepr(); + item_repr->updateRepr(); Geom::PathVector pathv = this->accumulated->get_pathvector() * desktop->dt2doc(); - pathv *= item->i2doc_affine().inverse(); + pathv *= item_repr->i2doc_affine().inverse(); gchar *str = sp_svg_write_path(pathv); g_assert( str != NULL ); this->repr->setAttribute("d", str); @@ -760,66 +758,68 @@ void EraserTool::set_to_accumulated() { } } } else if ( eraser_mode == 2 ) { + remainingItems.clear(); for (std::vector::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){ selection->clear(); + size_t n_undo = 0; SPItem *item = *i; Geom::OptRect bbox = item->desktopVisualBounds(); Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); + sp_desktop_apply_style_tool (desktop, rect_repr, "/tools/eraser", false); SPRect * rect = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr)); - rect->updateRepr(); - rect->setPosition (bbox.min()[Geom::X], bbox.min()[Geom::Y], bbox.dimensions()[Geom::X], bbox.dimensions()[Geom::Y]); - rect->doWriteTransform(rect_repr, SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse() * this->desktop->dt2doc()); Inkscape::GC::release(rect_repr); - - Inkscape::XML::Node *rect_repr2 = xml_doc->createElement("svg:rect"); - SPRect * rect2 = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr2)); - rect2->updateRepr(); - sp_desktop_apply_style_tool (desktop, rect_repr2, "/tools/shapes/rect", false); - rect2->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); - rect->doWriteTransform(rect_repr, SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse() * this->desktop->dt2doc()); - Inkscape::GC::release(rect_repr2); - - - Inkscape::XML::Node *rect_repr3 = xml_doc->createElement("svg:rect"); - SPRect * rect3 = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr3)); - rect3->updateRepr(); - sp_desktop_apply_style_tool (desktop, rect_repr3, "/tools/shapes/rect", false); - rect3->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); - rect->doWriteTransform(rect_repr3, SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse() * this->desktop->doc2dt()); - Inkscape::GC::release(rect_repr3); - - - - - + rect->updateRepr(); + rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); + rect->transform = SP_ITEM(desktop->currentLayer())->i2dt_affine().inverse(); + Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc); this->repr->parent()->appendChild(dup); Inkscape::GC::release(dup); // parent takes over selection->set(dup); sp_selected_path_union_skip_undo(selection, this->desktop); sp_selection_raise_to_top(selection, this->desktop); + n_undo++; if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); if (clip_path) { - SPObject *clip_data = clip_path->firstChild(); - Inkscape::XML::Node *dup_clip = clip_data->getRepr()->duplicate(xml_doc); - if (dup_clip) { - this->repr->parent()->appendChild(dup_clip); - sp_object_ref(clip_data, 0); - clip_data->deleteObject(true); - sp_object_unref(clip_data); - sp_selection_raise_to_top(selection, this->desktop); - selection->add(dup_clip); + SPPath *clip_data = SP_PATH(clip_path->firstChild()); + if (clip_data) { + Inkscape::XML::Node *dup_clip = SP_OBJECT(clip_data)->getRepr()->duplicate(xml_doc); + if (dup_clip) { + SPItem * dup_clip_obj = SP_ITEM(item_repr->parent->appendChildRepr(dup_clip)); + if (dup_clip_obj) { + dup_clip_obj->doWriteTransform(dup_clip, item->transform); + sp_object_ref(clip_data, 0); + clip_data->deleteObject(true); + sp_object_unref(clip_data); + sp_object_ref(clip_path, 0); + clip_path->deleteObject(true); + sp_object_unref(clip_path); + sp_object_ref(rect, 0); + rect->deleteObject(true); + sp_object_unref(rect); + sp_selection_raise_to_top(selection, this->desktop); + n_undo++; + selection->add(dup_clip); + sp_selected_path_diff_skip_undo(selection, this->desktop); + n_undo++; + SPItem * clip = SP_ITEM(selection->itemList()[0]); + } + } } } else { selection->add(rect); + sp_selected_path_diff_skip_undo(selection, this->desktop); + n_undo++; } - sp_selected_path_diff_skip_undo(selection, this->desktop); sp_selection_raise_to_top(selection, this->desktop); + n_undo++; selection->add(item); sp_selection_set_mask(this->desktop, true, false); + n_undo++; + DocumentUndo::clearUndo(document, n_undo); } else { SPItem *erase_clip = selection->singleItem(); if (erase_clip) { @@ -829,11 +829,12 @@ void EraserTool::set_to_accumulated() { } } workDone = true; + selection->clear(); + if (wasSelection) { + remainingItems.push_back(item); + } } - selection->clear(); - if (wasSelection) { - selection->setList(toWorkOn); - } + } else { for (std::vector ::const_iterator i = toWorkOn.begin();i!=toWorkOn.end();++i) { sp_object_ref( *i, 0 ); @@ -871,7 +872,6 @@ void EraserTool::set_to_accumulated() { } } -// DocumentUndo::setUndoSensitive(document, has_undo_sensitive); if ( workDone ) { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke")); } else { -- cgit v1.2.3 From 72610e6bbd79b3a3e9a980980ebc2f533ea8056d Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 7 May 2016 01:37:50 +0200 Subject: working on undo (bzr r14865.1.4) --- src/document-undo.cpp | 23 ++++++++--------------- src/document-undo.h | 4 ++-- src/ui/tools/eraser-tool.cpp | 21 ++++++--------------- 3 files changed, 16 insertions(+), 32 deletions(-) diff --git a/src/document-undo.cpp b/src/document-undo.cpp index f6bcf3ab2..7e6fe5df1 100644 --- a/src/document-undo.cpp +++ b/src/document-undo.cpp @@ -141,7 +141,7 @@ void Inkscape::DocumentUndo::maybeDone(SPDocument *doc, const gchar *key, const { g_assert (doc != NULL); g_assert (doc->priv != NULL); - g_assert (doc->priv->sensitive); + //g_assert (doc->priv->sensitive); if ( key && !*key ) { g_warning("Blank undo key specified."); } @@ -328,35 +328,28 @@ gboolean Inkscape::DocumentUndo::redo(SPDocument *doc) return ret; } -void Inkscape::DocumentUndo::clearUndo(SPDocument *doc, size_t limit) +void Inkscape::DocumentUndo::clearUndo(SPDocument *doc) { if (! doc->priv->undo.empty()) doc->priv->undoStackObservers.notifyClearUndoEvent(); - if (limit == 0) { - limit = doc->priv->undo.size(); - } - while (! doc->priv->undo.empty() && limit > 0) { + while (! doc->priv->undo.empty()) { Inkscape::Event *e = doc->priv->undo.back(); doc->priv->undo.pop_back(); delete e; doc->priv->history_size--; - limit--; } } -void Inkscape::DocumentUndo::clearRedo(SPDocument *doc, size_t limit) +void Inkscape::DocumentUndo::clearRedo(SPDocument *doc) { - if (!doc->priv->redo.empty()) - doc->priv->undoStackObservers.notifyClearRedoEvent(); - if (limit == 0) { - limit = doc->priv->undo.size(); - } - while (! doc->priv->redo.empty() && limit > 0) { + if (!doc->priv->redo.empty()) + doc->priv->undoStackObservers.notifyClearRedoEvent(); + + while (! doc->priv->redo.empty()) { Inkscape::Event *e = doc->priv->redo.back(); doc->priv->redo.pop_back(); delete e; doc->priv->history_size--; - limit--; } } diff --git a/src/document-undo.h b/src/document-undo.h index 559036458..85b44d562 100644 --- a/src/document-undo.h +++ b/src/document-undo.h @@ -33,9 +33,9 @@ public: static bool getUndoSensitive(SPDocument const *document); - static void clearUndo(SPDocument *document, size_t limit = 0); + static void clearUndo(SPDocument *document); - static void clearRedo(SPDocument *document, size_t limit = 0); + static void clearRedo(SPDocument *document); static void done(SPDocument *document, unsigned int event_type, Glib::ustring const &event_description); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index f1c7306b4..b62f68a5f 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -721,7 +721,7 @@ void EraserTool::set_to_accumulated() { Inkscape::GC::release(dup); // parent takes over selection->set(dup); if (!this->nowidth) { - sp_selected_path_union_skip_undo(selection, desktop); + sp_selected_path_union(selection, desktop); } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ @@ -732,9 +732,9 @@ void EraserTool::set_to_accumulated() { css = 0; } if (this->nowidth) { - sp_selected_path_cut_skip_undo(selection, desktop); + sp_selected_path_cut(selection, desktop); } else { - sp_selected_path_diff_skip_undo(selection, desktop); + sp_selected_path_diff(selection, desktop); } workDone = true; // TODO set this only if something was cut. bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); @@ -761,7 +761,6 @@ void EraserTool::set_to_accumulated() { remainingItems.clear(); for (std::vector::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){ selection->clear(); - size_t n_undo = 0; SPItem *item = *i; Geom::OptRect bbox = item->desktopVisualBounds(); Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); @@ -778,9 +777,8 @@ void EraserTool::set_to_accumulated() { this->repr->parent()->appendChild(dup); Inkscape::GC::release(dup); // parent takes over selection->set(dup); - sp_selected_path_union_skip_undo(selection, this->desktop); + sp_selected_path_union(selection, this->desktop); sp_selection_raise_to_top(selection, this->desktop); - n_undo++; if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); if (clip_path) { @@ -801,25 +799,19 @@ void EraserTool::set_to_accumulated() { rect->deleteObject(true); sp_object_unref(rect); sp_selection_raise_to_top(selection, this->desktop); - n_undo++; selection->add(dup_clip); - sp_selected_path_diff_skip_undo(selection, this->desktop); - n_undo++; + sp_selected_path_diff(selection, this->desktop); SPItem * clip = SP_ITEM(selection->itemList()[0]); } } } } else { selection->add(rect); - sp_selected_path_diff_skip_undo(selection, this->desktop); - n_undo++; + sp_selected_path_diff(selection, this->desktop); } sp_selection_raise_to_top(selection, this->desktop); - n_undo++; selection->add(item); sp_selection_set_mask(this->desktop, true, false); - n_undo++; - DocumentUndo::clearUndo(document, n_undo); } else { SPItem *erase_clip = selection->singleItem(); if (erase_clip) { @@ -871,7 +863,6 @@ void EraserTool::set_to_accumulated() { this->repr = 0; } } - if ( workDone ) { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke")); } else { -- cgit v1.2.3 From 2d2718e48ee56f975342f0329b98f892f118d85e Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 00:03:52 +0200 Subject: Fixing undo thing (bzr r14865.1.5) --- src/document-private.h | 57 +++++---- src/document-undo.cpp | 298 ++++++++++++++++++++++++------------------- src/document-undo.h | 4 + src/document.cpp | 1 + src/selection-chemistry.cpp | 31 +++-- src/selection-chemistry.h | 6 +- src/ui/tools/eraser-tool.cpp | 29 ++++- 7 files changed, 243 insertions(+), 183 deletions(-) diff --git a/src/document-private.h b/src/document-private.h index eaed0020e..6ec535b87 100644 --- a/src/document-private.h +++ b/src/document-private.h @@ -37,43 +37,44 @@ class Event; } struct SPDocumentPrivate { - typedef std::map IDChangedSignalMap; - typedef std::map ResourcesChangedSignalMap; + typedef std::map IDChangedSignalMap; + typedef std::map ResourcesChangedSignalMap; - std::map iddef; - std::map reprdef; + std::map iddef; + std::map reprdef; - unsigned long serial; + unsigned long serial; - /** Dictionary of signals for id changes */ - IDChangedSignalMap id_changed_signals; + /** Dictionary of signals for id changes */ + IDChangedSignalMap id_changed_signals; - /* Resources */ - std::map > resources; - ResourcesChangedSignalMap resources_changed_signals; + /* Resources */ + std::map > resources; + ResourcesChangedSignalMap resources_changed_signals; - sigc::signal destroySignal; - SPDocument::ModifiedSignal modified_signal; - SPDocument::URISetSignal uri_set_signal; - SPDocument::ResizedSignal resized_signal; - SPDocument::ReconstructionStart _reconstruction_start_signal; - SPDocument::ReconstructionFinish _reconstruction_finish_signal; - SPDocument::CommitSignal commit_signal; + sigc::signal destroySignal; + SPDocument::ModifiedSignal modified_signal; + SPDocument::URISetSignal uri_set_signal; + SPDocument::ResizedSignal resized_signal; + SPDocument::ReconstructionStart _reconstruction_start_signal; + SPDocument::ReconstructionFinish _reconstruction_finish_signal; + SPDocument::CommitSignal commit_signal; - /* Undo/Redo state */ - bool sensitive; /* If we save actions to undo stack */ - Inkscape::XML::Event * partial; /* partial undo log when interrupted */ - int history_size; - std::vector undo; /* Undo stack of reprs */ - std::vector redo; /* Redo stack of reprs */ + /* Undo/Redo state */ + bool sensitive; /* If we save actions to undo stack */ + bool join_undo; /* If we group actions to one undo stack */ + Inkscape::XML::Event * partial; /* partial undo log when interrupted */ + int history_size; + std::vector undo; /* Undo stack of reprs */ + std::vector redo; /* Redo stack of reprs */ - /* Undo listener */ - Inkscape::CompositeUndoStackObserver undoStackObservers; + /* Undo listener */ + Inkscape::CompositeUndoStackObserver undoStackObservers; - // XXX only for testing! - Inkscape::ConsoleOutputUndoObserver console_output_undo_observer; + // XXX only for testing! + Inkscape::ConsoleOutputUndoObserver console_output_undo_observer; - bool seeking; + bool seeking; sigc::connection selChangeConnection; sigc::connection desktopActivatedConnection; }; diff --git a/src/document-undo.cpp b/src/document-undo.cpp index 7e6fe5df1..1707fb6fa 100644 --- a/src/document-undo.cpp +++ b/src/document-undo.cpp @@ -62,22 +62,22 @@ void Inkscape::DocumentUndo::setUndoSensitive(SPDocument *doc, bool sensitive) { - g_assert (doc != NULL); - g_assert (doc->priv != NULL); - - if ( sensitive == doc->priv->sensitive ) - return; - - if (sensitive) { - sp_repr_begin_transaction (doc->rdoc); - } else { - doc->priv->partial = sp_repr_coalesce_log ( - doc->priv->partial, - sp_repr_commit_undoable (doc->rdoc) - ); - } - - doc->priv->sensitive = sensitive; + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + + if ( sensitive == doc->priv->sensitive ) + return; + + if (sensitive) { + sp_repr_begin_transaction (doc->rdoc); + } else { + doc->priv->partial = sp_repr_coalesce_log ( + doc->priv->partial, + sp_repr_commit_undoable (doc->rdoc) + ); + } + + doc->priv->sensitive = sensitive; } /*TODO: Throughout the inkscape code tree set/get_undo_sensitive are used for @@ -88,15 +88,49 @@ void Inkscape::DocumentUndo::setUndoSensitive(SPDocument *doc, bool sensitive) */ bool Inkscape::DocumentUndo::getUndoSensitive(SPDocument const *document) { - g_assert(document != NULL); - g_assert(document->priv != NULL); + g_assert(document != NULL); + g_assert(document->priv != NULL); + + return document->priv->sensitive; +} + +void Inkscape::DocumentUndo::setUndoJoined(SPDocument *doc, bool join_undo) +{ + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + if (join_undo) { + doc->collectOrphans(); + doc->ensureUpToDate(); + DocumentUndo::clearRedo(doc); + Inkscape::XML::Event *log = sp_repr_coalesce_log (doc->priv->partial, sp_repr_commit_undoable (doc->rdoc)); + doc->priv->partial = NULL; + if (!log) { + sp_repr_begin_transaction (doc->rdoc); + doc->priv->join_undo = join_undo; + return; + } + doc->virgin = FALSE; + doc->setModifiedSinceSave(); + sp_repr_begin_transaction (doc->rdoc); + doc->priv->commit_signal.emit(); + } + doc->priv->join_undo = join_undo; +} - return document->priv->sensitive; +bool Inkscape::DocumentUndo::getUndoJoined(SPDocument *doc) +{ + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + return doc->priv->join_undo; } void Inkscape::DocumentUndo::done(SPDocument *doc, const unsigned int event_type, Glib::ustring const &event_description) { - maybeDone(doc, NULL, event_type, event_description); + if (!getUndoJoined(doc)) { + maybeDone(doc, NULL, event_type, event_description); + } else { + sp_repr_commit_undoable (doc->rdoc); + } } void Inkscape::DocumentUndo::resetKey( SPDocument *doc ) @@ -139,82 +173,81 @@ public: void Inkscape::DocumentUndo::maybeDone(SPDocument *doc, const gchar *key, const unsigned int event_type, Glib::ustring const &event_description) { - g_assert (doc != NULL); - g_assert (doc->priv != NULL); - //g_assert (doc->priv->sensitive); - if ( key && !*key ) { - g_warning("Blank undo key specified."); - } + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + g_assert (doc->priv->sensitive); + if ( key && !*key ) { + g_warning("Blank undo key specified."); + } - Inkscape::Debug::EventTracker tracker(doc, key, event_type); + Inkscape::Debug::EventTracker tracker(doc, key, event_type); - doc->collectOrphans(); + doc->collectOrphans(); - doc->ensureUpToDate(); + doc->ensureUpToDate(); - DocumentUndo::clearRedo(doc); + DocumentUndo::clearRedo(doc); - Inkscape::XML::Event *log = sp_repr_coalesce_log (doc->priv->partial, sp_repr_commit_undoable (doc->rdoc)); - doc->priv->partial = NULL; + Inkscape::XML::Event *log = sp_repr_coalesce_log (doc->priv->partial, sp_repr_commit_undoable (doc->rdoc)); + doc->priv->partial = NULL; - if (!log) { - sp_repr_begin_transaction (doc->rdoc); - return; - } + if (!log) { + sp_repr_begin_transaction (doc->rdoc); + return; + } - if (key && !doc->actionkey.empty() && (doc->actionkey == key) && !doc->priv->undo.empty()) { - (doc->priv->undo.back())->event = - sp_repr_coalesce_log ((doc->priv->undo.back())->event, log); - } else { - Inkscape::Event *event = new Inkscape::Event(log, event_type, event_description); - doc->priv->undo.push_back(event); - doc->priv->history_size++; - doc->priv->undoStackObservers.notifyUndoCommitEvent(event); - } + if (key && !doc->actionkey.empty() && (doc->actionkey == key) && !doc->priv->undo.empty()) { + (doc->priv->undo.back())->event = sp_repr_coalesce_log ((doc->priv->undo.back())->event, log); + } else { + Inkscape::Event *event = new Inkscape::Event(log, event_type, event_description); + doc->priv->undo.push_back(event); + doc->priv->history_size++; + doc->priv->undoStackObservers.notifyUndoCommitEvent(event); + } - if ( key ) { - doc->actionkey = key; - } else { - doc->actionkey.clear(); - } + if ( key ) { + doc->actionkey = key; + } else { + doc->actionkey.clear(); + } - doc->virgin = FALSE; - doc->setModifiedSinceSave(); + doc->virgin = FALSE; + doc->setModifiedSinceSave(); - sp_repr_begin_transaction (doc->rdoc); + sp_repr_begin_transaction (doc->rdoc); - doc->priv->commit_signal.emit(); + doc->priv->commit_signal.emit(); } void Inkscape::DocumentUndo::cancel(SPDocument *doc) { - g_assert (doc != NULL); - g_assert (doc->priv != NULL); - g_assert (doc->priv->sensitive); + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + g_assert (doc->priv->sensitive); - sp_repr_rollback (doc->rdoc); + sp_repr_rollback (doc->rdoc); - if (doc->priv->partial) { - sp_repr_undo_log (doc->priv->partial); - sp_repr_free_log (doc->priv->partial); - doc->priv->partial = NULL; - } + if (doc->priv->partial) { + sp_repr_undo_log (doc->priv->partial); + sp_repr_free_log (doc->priv->partial); + doc->priv->partial = NULL; + } - sp_repr_begin_transaction (doc->rdoc); + sp_repr_begin_transaction (doc->rdoc); } static void finish_incomplete_transaction(SPDocument &doc) { - SPDocumentPrivate &priv=*doc.priv; - Inkscape::XML::Event *log=sp_repr_commit_undoable(doc.rdoc); - if (log || priv.partial) { - g_warning ("Incomplete undo transaction:"); - priv.partial = sp_repr_coalesce_log(priv.partial, log); - sp_repr_debug_print_log(priv.partial); + SPDocumentPrivate &priv=*doc.priv; + Inkscape::XML::Event *log=sp_repr_commit_undoable(doc.rdoc); + if (log || priv.partial) { + g_warning ("Incomplete undo transaction:"); + priv.partial = sp_repr_coalesce_log(priv.partial, log); + sp_repr_debug_print_log(priv.partial); Inkscape::Event *event = new Inkscape::Event(priv.partial); - priv.undo.push_back(event); + priv.undo.push_back(event); priv.undoStackObservers.notifyUndoCommitEvent(event); - priv.partial = NULL; - } + priv.partial = NULL; + } } static void perform_document_update(SPDocument &doc) { @@ -238,100 +271,101 @@ static void perform_document_update(SPDocument &doc) { gboolean Inkscape::DocumentUndo::undo(SPDocument *doc) { - using Inkscape::Debug::EventTracker; - using Inkscape::Debug::SimpleEvent; + using Inkscape::Debug::EventTracker; + using Inkscape::Debug::SimpleEvent; - gboolean ret; + gboolean ret; - EventTracker > tracker("undo"); + EventTracker > tracker("undo"); - g_assert (doc != NULL); - g_assert (doc->priv != NULL); - g_assert (doc->priv->sensitive); + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + g_assert (doc->priv->sensitive); - doc->priv->sensitive = FALSE; - doc->priv->seeking = true; + doc->priv->sensitive = FALSE; + doc->priv->seeking = true; - doc->actionkey.clear(); + doc->actionkey.clear(); - finish_incomplete_transaction(*doc); + finish_incomplete_transaction(*doc); - if (! doc->priv->undo.empty()) { - Inkscape::Event *log = doc->priv->undo.back(); - doc->priv->undo.pop_back(); - sp_repr_undo_log (log->event); - perform_document_update(*doc); + if (! doc->priv->undo.empty()) { + Inkscape::Event *log = doc->priv->undo.back(); + doc->priv->undo.pop_back(); + sp_repr_undo_log (log->event); + perform_document_update(*doc); - doc->priv->redo.push_back(log); + doc->priv->redo.push_back(log); - doc->setModifiedSinceSave(); - doc->priv->undoStackObservers.notifyUndoEvent(log); + doc->setModifiedSinceSave(); + doc->priv->undoStackObservers.notifyUndoEvent(log); - ret = TRUE; - } else { - ret = FALSE; - } + ret = TRUE; + } else { + ret = FALSE; + } - sp_repr_begin_transaction (doc->rdoc); + sp_repr_begin_transaction (doc->rdoc); - doc->priv->sensitive = TRUE; - doc->priv->seeking = false; + doc->priv->sensitive = TRUE; + doc->priv->seeking = false; - if (ret) - INKSCAPE.external_change(); + if (ret) + INKSCAPE.external_change(); - return ret; + return ret; } gboolean Inkscape::DocumentUndo::redo(SPDocument *doc) { - using Inkscape::Debug::EventTracker; - using Inkscape::Debug::SimpleEvent; + using Inkscape::Debug::EventTracker; + using Inkscape::Debug::SimpleEvent; - gboolean ret; + gboolean ret; - EventTracker > tracker("redo"); + EventTracker > tracker("redo"); - g_assert (doc != NULL); - g_assert (doc->priv != NULL); - g_assert (doc->priv->sensitive); + g_assert (doc != NULL); + g_assert (doc->priv != NULL); + g_assert (doc->priv->sensitive); - doc->priv->sensitive = FALSE; - doc->priv->seeking = true; + doc->priv->sensitive = FALSE; + doc->priv->seeking = true; - doc->actionkey.clear(); + doc->actionkey.clear(); - finish_incomplete_transaction(*doc); + finish_incomplete_transaction(*doc); - if (! doc->priv->redo.empty()) { - Inkscape::Event *log = doc->priv->redo.back(); - doc->priv->redo.pop_back(); - sp_repr_replay_log (log->event); - doc->priv->undo.push_back(log); + if (! doc->priv->redo.empty()) { + Inkscape::Event *log = doc->priv->redo.back(); + doc->priv->redo.pop_back(); + sp_repr_replay_log (log->event); + doc->priv->undo.push_back(log); - doc->setModifiedSinceSave(); - doc->priv->undoStackObservers.notifyRedoEvent(log); + doc->setModifiedSinceSave(); + doc->priv->undoStackObservers.notifyRedoEvent(log); - ret = TRUE; - } else { - ret = FALSE; - } + ret = TRUE; + } else { + ret = FALSE; + } - sp_repr_begin_transaction (doc->rdoc); + sp_repr_begin_transaction (doc->rdoc); - doc->priv->sensitive = TRUE; - doc->priv->seeking = false; + doc->priv->sensitive = TRUE; + doc->priv->seeking = false; - if (ret) - INKSCAPE.external_change(); + if (ret) + INKSCAPE.external_change(); - return ret; + return ret; } void Inkscape::DocumentUndo::clearUndo(SPDocument *doc) { if (! doc->priv->undo.empty()) doc->priv->undoStackObservers.notifyClearUndoEvent(); + while (! doc->priv->undo.empty()) { Inkscape::Event *e = doc->priv->undo.back(); doc->priv->undo.pop_back(); @@ -342,8 +376,8 @@ void Inkscape::DocumentUndo::clearUndo(SPDocument *doc) void Inkscape::DocumentUndo::clearRedo(SPDocument *doc) { - if (!doc->priv->redo.empty()) - doc->priv->undoStackObservers.notifyClearRedoEvent(); + if (!doc->priv->redo.empty()) + doc->priv->undoStackObservers.notifyClearRedoEvent(); while (! doc->priv->redo.empty()) { Inkscape::Event *e = doc->priv->redo.back(); diff --git a/src/document-undo.h b/src/document-undo.h index 85b44d562..b80b176d3 100644 --- a/src/document-undo.h +++ b/src/document-undo.h @@ -33,6 +33,10 @@ public: static bool getUndoSensitive(SPDocument const *document); + static void setUndoJoined(SPDocument *doc, bool join_undo); + + static bool getUndoJoined(SPDocument *doc); + static void clearUndo(SPDocument *document); static void clearRedo(SPDocument *document); diff --git a/src/document.cpp b/src/document.cpp index 7086fc0be..87f13f749 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -121,6 +121,7 @@ SPDocument::SPDocument() : p->serial = next_serial++; p->sensitive = false; + p->join_undo = false; p->partial = NULL; p->history_size = 0; p->seeking = false; diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 7d32477a1..2c93c5496 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -1031,7 +1031,7 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) C_("Undo action", "Raise")); } -void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop, bool skip_undo) { SPDocument *document = selection->layers()->getDocument(); @@ -1055,9 +1055,10 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto Inkscape::XML::Node *repr =(*l); repr->setPosition(-1); } - - DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, - _("Raise to top")); + if (!skip_undo) { + DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, + _("Raise to top")); + } } void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) @@ -1115,7 +1116,7 @@ void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) C_("Undo action", "Lower")); } -void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop, bool skip_undo) { SPDocument *document = selection->layers()->getDocument(); @@ -1149,9 +1150,10 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des } repr->setPosition(minpos); } - - DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK, - _("Lower to bottom")); + if (!skip_undo) { + DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK, + _("Lower to bottom")); + } } void @@ -3859,7 +3861,7 @@ void sp_selection_set_clipgroup(SPDesktop *desktop) * If \a apply_clip_path parameter is true, clipPath is created, otherwise mask * */ -void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer) +void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer, bool skip_undo) { if (desktop == NULL) { return; @@ -4021,11 +4023,12 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ } selection->addList(items_to_select); - - if (apply_clip_path) { - DocumentUndo::done(doc, SP_VERB_OBJECT_SET_CLIPPATH, _("Set clipping path")); - } else { - DocumentUndo::done(doc, SP_VERB_OBJECT_SET_MASK, _("Set mask")); + if (!skip_undo) { + if (apply_clip_path) { + DocumentUndo::done(doc, SP_VERB_OBJECT_SET_CLIPPATH, _("Set clipping path")); + } else { + DocumentUndo::done(doc, SP_VERB_OBJECT_SET_MASK, _("Set mask")); + } } } diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index 82b91c617..31c160bf9 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -79,9 +79,9 @@ void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop, bool skip_undo = false); void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop, bool skip_undo = false); SPCSSAttr *take_style_from_item (SPObject *object); @@ -157,7 +157,7 @@ void sp_document_get_export_hints (SPDocument * doc, Glib::ustring &filename, fl void sp_selection_create_bitmap_copy (SPDesktop *desktop); void sp_selection_set_clipgroup(SPDesktop *desktop); -void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer); +void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_to_layer, bool skip_undo = false); void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path); bool fit_canvas_to_selection(SPDesktop *, bool with_margins = false); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index b62f68a5f..60b8c2792 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -644,6 +644,8 @@ void EraserTool::clear_current() { void EraserTool::set_to_accumulated() { bool workDone = false; SPDocument *document = this->desktop->doc(); + bool saved = DocumentUndo::getUndoSensitive(document); + DocumentUndo::setUndoSensitive(document, false); if (!this->accumulated->is_empty()) { if (!this->repr) { /* Create object */ @@ -721,7 +723,9 @@ void EraserTool::set_to_accumulated() { Inkscape::GC::release(dup); // parent takes over selection->set(dup); if (!this->nowidth) { - sp_selected_path_union(selection, desktop); + DocumentUndo::setUndoSensitive(document, saved); + sp_selected_path_union_skip_undo(selection, desktop); + DocumentUndo::setUndoSensitive(document, false); } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ @@ -731,13 +735,16 @@ void EraserTool::set_to_accumulated() { sp_repr_css_attr_unref(css); css = 0; } + DocumentUndo::setUndoSensitive(document, saved); if (this->nowidth) { - sp_selected_path_cut(selection, desktop); + sp_selected_path_cut_skip_undo(selection, desktop); } else { - sp_selected_path_diff(selection, desktop); + sp_selected_path_diff_skip_undo(selection, desktop); } + DocumentUndo::setUndoSensitive(document, saved); workDone = true; // TODO set this only if something was cut. bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); + DocumentUndo::setUndoSensitive(document, saved); if(!break_apart){ sp_selected_path_combine(desktop, true); } else { @@ -745,6 +752,7 @@ void EraserTool::set_to_accumulated() { sp_selected_path_break_apart(desktop, true); } } + DocumentUndo::setUndoSensitive(document, saved); if ( !selection->isEmpty() ) { // If the item was not completely erased, track the new remainder. std::vector nowSel(selection->itemList()); @@ -777,7 +785,9 @@ void EraserTool::set_to_accumulated() { this->repr->parent()->appendChild(dup); Inkscape::GC::release(dup); // parent takes over selection->set(dup); - sp_selected_path_union(selection, this->desktop); + DocumentUndo::setUndoSensitive(document, saved); + sp_selected_path_union_skip_undo(selection, this->desktop); + DocumentUndo::setUndoSensitive(document, false); sp_selection_raise_to_top(selection, this->desktop); if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); @@ -800,14 +810,19 @@ void EraserTool::set_to_accumulated() { sp_object_unref(rect); sp_selection_raise_to_top(selection, this->desktop); selection->add(dup_clip); - sp_selected_path_diff(selection, this->desktop); + DocumentUndo::setUndoSensitive(document, saved); + sp_selected_path_diff_skip_undo(selection, this->desktop); + DocumentUndo::setUndoSensitive(document, saved); SPItem * clip = SP_ITEM(selection->itemList()[0]); + DocumentUndo::setUndoSensitive(document, false); } } } } else { selection->add(rect); - sp_selected_path_diff(selection, this->desktop); + DocumentUndo::setUndoSensitive(document, saved); + sp_selected_path_diff_skip_undo(selection, this->desktop); + DocumentUndo::setUndoSensitive(document, false); } sp_selection_raise_to_top(selection, this->desktop); selection->add(item); @@ -863,6 +878,8 @@ void EraserTool::set_to_accumulated() { this->repr = 0; } } + document->setModifiedSinceSave(); + DocumentUndo::setUndoSensitive(document, saved); if ( workDone ) { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke")); } else { -- cgit v1.2.3 From 3fcae9b041aae2e79732277cbcd20fc13a92d453 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 00:13:36 +0200 Subject: Fixing undo thing (bzr r14865.1.7) --- src/ui/tools/eraser-tool.cpp | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 60b8c2792..2896e7b3e 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -723,10 +723,8 @@ void EraserTool::set_to_accumulated() { Inkscape::GC::release(dup); // parent takes over selection->set(dup); if (!this->nowidth) { - DocumentUndo::setUndoSensitive(document, saved); sp_selected_path_union_skip_undo(selection, desktop); - DocumentUndo::setUndoSensitive(document, false); - } + } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ SPCSSAttr *css = sp_repr_css_attr_new(); @@ -735,16 +733,13 @@ void EraserTool::set_to_accumulated() { sp_repr_css_attr_unref(css); css = 0; } - DocumentUndo::setUndoSensitive(document, saved); if (this->nowidth) { sp_selected_path_cut_skip_undo(selection, desktop); } else { sp_selected_path_diff_skip_undo(selection, desktop); } - DocumentUndo::setUndoSensitive(document, saved); workDone = true; // TODO set this only if something was cut. bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); - DocumentUndo::setUndoSensitive(document, saved); if(!break_apart){ sp_selected_path_combine(desktop, true); } else { @@ -752,7 +747,6 @@ void EraserTool::set_to_accumulated() { sp_selected_path_break_apart(desktop, true); } } - DocumentUndo::setUndoSensitive(document, saved); if ( !selection->isEmpty() ) { // If the item was not completely erased, track the new remainder. std::vector nowSel(selection->itemList()); @@ -785,10 +779,8 @@ void EraserTool::set_to_accumulated() { this->repr->parent()->appendChild(dup); Inkscape::GC::release(dup); // parent takes over selection->set(dup); - DocumentUndo::setUndoSensitive(document, saved); sp_selected_path_union_skip_undo(selection, this->desktop); - DocumentUndo::setUndoSensitive(document, false); - sp_selection_raise_to_top(selection, this->desktop); + sp_selection_raise_to_top(selection, this->desktop, true); if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); if (clip_path) { @@ -808,23 +800,18 @@ void EraserTool::set_to_accumulated() { sp_object_ref(rect, 0); rect->deleteObject(true); sp_object_unref(rect); - sp_selection_raise_to_top(selection, this->desktop); + sp_selection_raise_to_top(selection, this->desktop, true); selection->add(dup_clip); - DocumentUndo::setUndoSensitive(document, saved); sp_selected_path_diff_skip_undo(selection, this->desktop); - DocumentUndo::setUndoSensitive(document, saved); SPItem * clip = SP_ITEM(selection->itemList()[0]); - DocumentUndo::setUndoSensitive(document, false); } } } } else { selection->add(rect); - DocumentUndo::setUndoSensitive(document, saved); sp_selected_path_diff_skip_undo(selection, this->desktop); - DocumentUndo::setUndoSensitive(document, false); } - sp_selection_raise_to_top(selection, this->desktop); + sp_selection_raise_to_top(selection, this->desktop, true); selection->add(item); sp_selection_set_mask(this->desktop, true, false); } else { -- cgit v1.2.3 From e2f3d8631f30db820029835ecc6cdc68d339cdc0 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 01:33:30 +0200 Subject: Working undo (bzr r14865.1.8) --- src/ui/tools/eraser-tool.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 2896e7b3e..40e13a9cd 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -644,8 +644,6 @@ void EraserTool::clear_current() { void EraserTool::set_to_accumulated() { bool workDone = false; SPDocument *document = this->desktop->doc(); - bool saved = DocumentUndo::getUndoSensitive(document); - DocumentUndo::setUndoSensitive(document, false); if (!this->accumulated->is_empty()) { if (!this->repr) { /* Create object */ @@ -680,17 +678,17 @@ void EraserTool::set_to_accumulated() { std::vector toWorkOn; if (selection->isEmpty()) { if ( eraser_mode == 1 || eraser_mode == 2) { - toWorkOn = desktop->getDocument()->getItemsPartiallyInBox(desktop->dkey, *eraserBbox); + toWorkOn = document->getItemsPartiallyInBox(desktop->dkey, *eraserBbox); } else { Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop); - toWorkOn = desktop->getDocument()->getItemsAtPoints(desktop->dkey, r->getPoints()); + toWorkOn = document->getItemsAtPoints(desktop->dkey, r->getPoints()); } toWorkOn.erase(std::remove(toWorkOn.begin(), toWorkOn.end(), acid), toWorkOn.end()); } else { if ( eraser_mode == 0 ) { Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop); std::vector touched; - touched = desktop->getDocument()->getItemsAtPoints(desktop->dkey, r->getPoints()); + touched = document->getItemsAtPoints(desktop->dkey, r->getPoints()); for (std::vector::const_iterator i = touched.begin();i!=touched.end();++i) { if(selection->includes(*i)){ toWorkOn.push_back((*i)); @@ -779,8 +777,8 @@ void EraserTool::set_to_accumulated() { this->repr->parent()->appendChild(dup); Inkscape::GC::release(dup); // parent takes over selection->set(dup); - sp_selected_path_union_skip_undo(selection, this->desktop); - sp_selection_raise_to_top(selection, this->desktop, true); + sp_selected_path_union_skip_undo(selection, desktop); + sp_selection_raise_to_top(selection, desktop, true); if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); if (clip_path) { @@ -800,20 +798,21 @@ void EraserTool::set_to_accumulated() { sp_object_ref(rect, 0); rect->deleteObject(true); sp_object_unref(rect); - sp_selection_raise_to_top(selection, this->desktop, true); + sp_selection_raise_to_top(selection, desktop, true); selection->add(dup_clip); - sp_selected_path_diff_skip_undo(selection, this->desktop); + sp_selected_path_diff_skip_undo(selection, desktop); SPItem * clip = SP_ITEM(selection->itemList()[0]); } } } } else { selection->add(rect); - sp_selected_path_diff_skip_undo(selection, this->desktop); + std::cout << "asasgfasfasfasfasfasf\n"; + sp_selected_path_diff_skip_undo(selection, desktop); } - sp_selection_raise_to_top(selection, this->desktop, true); + sp_selection_raise_to_top(selection, desktop, true); selection->add(item); - sp_selection_set_mask(this->desktop, true, false); + sp_selection_set_mask(desktop, true, false, true); } else { SPItem *erase_clip = selection->singleItem(); if (erase_clip) { @@ -843,7 +842,7 @@ void EraserTool::set_to_accumulated() { } if ( eraser_mode == 0 ) { - //sp_selection_delete(desktop); + sp_selection_delete(desktop); remainingItems.clear(); } @@ -865,12 +864,10 @@ void EraserTool::set_to_accumulated() { this->repr = 0; } } - document->setModifiedSinceSave(); - DocumentUndo::setUndoSensitive(document, saved); if ( workDone ) { - DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke")); + DocumentUndo::done(document, SP_VERB_CONTEXT_ERASER, _("Draw eraser stroke")); } else { - DocumentUndo::cancel(desktop->getDocument()); + DocumentUndo::cancel(document); } } -- cgit v1.2.3 From 331336b5f924ad3200a343f571178e19b55532a1 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 04:13:59 +0200 Subject: Clip eraser done! Thanks Doctormon! (bzr r14865.1.9) --- src/ui/tools/eraser-tool.cpp | 165 ++++++++++++++++++++--------------------- src/widgets/eraser-toolbar.cpp | 12 ++- src/widgets/toolbox.cpp | 3 +- 3 files changed, 94 insertions(+), 86 deletions(-) diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 40e13a9cd..c5a068dfc 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -647,48 +647,48 @@ void EraserTool::set_to_accumulated() { if (!this->accumulated->is_empty()) { if (!this->repr) { /* Create object */ - Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); + Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); Inkscape::XML::Node *repr = xml_doc->createElement("svg:path"); /* Set style */ - sp_desktop_apply_style_tool (desktop, repr, "/tools/eraser", false); + sp_desktop_apply_style_tool (this->desktop, repr, "/tools/eraser", false); this->repr = repr; } - SPItem *item_repr = SP_ITEM(desktop->currentLayer()->appendChildRepr(this->repr)); + SPItem *item_repr = SP_ITEM(this->desktop->currentLayer()->appendChildRepr(this->repr)); Inkscape::GC::release(this->repr); item_repr->updateRepr(); - Geom::PathVector pathv = this->accumulated->get_pathvector() * desktop->dt2doc(); + Geom::PathVector pathv = this->accumulated->get_pathvector() * this->desktop->dt2doc(); pathv *= item_repr->i2doc_affine().inverse(); gchar *str = sp_svg_write_path(pathv); g_assert( str != NULL ); this->repr->setAttribute("d", str); g_free(str); - + Geom::OptRect eraserBbox; if ( this->repr ) { bool wasSelection = false; - Inkscape::Selection *selection = desktop->getSelection(); + Inkscape::Selection *selection = this->desktop->getSelection(); Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gint eraser_mode = prefs->getInt("/tools/eraser/mode", 2); - Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); + Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); - SPItem* acid = SP_ITEM(desktop->doc()->getObjectByRepr(this->repr)); - Geom::OptRect eraserBbox = acid->desktopVisualBounds(); + SPItem* acid = SP_ITEM(this->desktop->doc()->getObjectByRepr(this->repr)); + eraserBbox = acid->desktopVisualBounds(); std::vector remainingItems; std::vector toWorkOn; if (selection->isEmpty()) { if ( eraser_mode == 1 || eraser_mode == 2) { - toWorkOn = document->getItemsPartiallyInBox(desktop->dkey, *eraserBbox); + toWorkOn = document->getItemsPartiallyInBox(this->desktop->dkey, *eraserBbox); } else { - Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop); - toWorkOn = document->getItemsAtPoints(desktop->dkey, r->getPoints()); + Inkscape::Rubberband *r = Inkscape::Rubberband::get(this->desktop); + toWorkOn = document->getItemsAtPoints(this->desktop->dkey, r->getPoints()); } toWorkOn.erase(std::remove(toWorkOn.begin(), toWorkOn.end(), acid), toWorkOn.end()); } else { if ( eraser_mode == 0 ) { - Inkscape::Rubberband *r = Inkscape::Rubberband::get(desktop); + Inkscape::Rubberband *r = Inkscape::Rubberband::get(this->desktop); std::vector touched; - touched = document->getItemsAtPoints(desktop->dkey, r->getPoints()); + touched = document->getItemsAtPoints(this->desktop->dkey, r->getPoints()); for (std::vector::const_iterator i = touched.begin();i!=touched.end();++i) { if(selection->includes(*i)){ toWorkOn.push_back((*i)); @@ -721,28 +721,28 @@ void EraserTool::set_to_accumulated() { Inkscape::GC::release(dup); // parent takes over selection->set(dup); if (!this->nowidth) { - sp_selected_path_union_skip_undo(selection, desktop); + sp_selected_path_union_skip_undo(selection, this->desktop); } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "fill-rule", "evenodd"); - sp_desktop_set_style(desktop, css); + sp_desktop_set_style(this->desktop, css); sp_repr_css_attr_unref(css); css = 0; } if (this->nowidth) { - sp_selected_path_cut_skip_undo(selection, desktop); + sp_selected_path_cut_skip_undo(selection, this->desktop); } else { - sp_selected_path_diff_skip_undo(selection, desktop); + sp_selected_path_diff_skip_undo(selection, this->desktop); } workDone = true; // TODO set this only if something was cut. bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); if(!break_apart){ - sp_selected_path_combine(desktop, true); + sp_selected_path_combine(this->desktop, true); } else { if(!this->nowidth){ - sp_selected_path_break_apart(desktop, true); + sp_selected_path_break_apart(this->desktop, true); } } if ( !selection->isEmpty() ) { @@ -758,76 +758,75 @@ void EraserTool::set_to_accumulated() { } } } else if ( eraser_mode == 2 ) { - remainingItems.clear(); - for (std::vector::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){ - selection->clear(); - SPItem *item = *i; - Geom::OptRect bbox = item->desktopVisualBounds(); - Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); - Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); - sp_desktop_apply_style_tool (desktop, rect_repr, "/tools/eraser", false); - SPRect * rect = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr)); - Inkscape::GC::release(rect_repr); - - rect->updateRepr(); - rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); - rect->transform = SP_ITEM(desktop->currentLayer())->i2dt_affine().inverse(); - - Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc); - this->repr->parent()->appendChild(dup); - Inkscape::GC::release(dup); // parent takes over - selection->set(dup); - sp_selected_path_union_skip_undo(selection, desktop); - sp_selection_raise_to_top(selection, desktop, true); - if (bbox && bbox->intersects(*eraserBbox)) { - SPClipPath *clip_path = item->clip_ref->getObject(); - if (clip_path) { - SPPath *clip_data = SP_PATH(clip_path->firstChild()); - if (clip_data) { - Inkscape::XML::Node *dup_clip = SP_OBJECT(clip_data)->getRepr()->duplicate(xml_doc); - if (dup_clip) { - SPItem * dup_clip_obj = SP_ITEM(item_repr->parent->appendChildRepr(dup_clip)); - if (dup_clip_obj) { - dup_clip_obj->doWriteTransform(dup_clip, item->transform); - sp_object_ref(clip_data, 0); - clip_data->deleteObject(true); - sp_object_unref(clip_data); - sp_object_ref(clip_path, 0); - clip_path->deleteObject(true); - sp_object_unref(clip_path); - sp_object_ref(rect, 0); - rect->deleteObject(true); - sp_object_unref(rect); - sp_selection_raise_to_top(selection, desktop, true); - selection->add(dup_clip); - sp_selected_path_diff_skip_undo(selection, desktop); - SPItem * clip = SP_ITEM(selection->itemList()[0]); + if (!this->nowidth) { + remainingItems.clear(); + for (std::vector::const_iterator i = toWorkOn.begin(); i != toWorkOn.end(); ++i){ + selection->clear(); + SPItem *item = *i; + Geom::OptRect bbox = item->desktopVisualBounds(); + Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); + Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); + sp_desktop_apply_style_tool (this->desktop, rect_repr, "/tools/eraser", false); + SPRect * rect = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr)); + Inkscape::GC::release(rect_repr); + rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); + rect->transform = SP_ITEM(this->desktop->currentLayer())->i2dt_affine().inverse(); + rect->updateRepr(); + this->desktop->canvas->endForcedFullRedraws(); + Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc); + this->repr->parent()->appendChild(dup); + Inkscape::GC::release(dup); // parent takes over + selection->set(dup); + sp_selected_path_union_skip_undo(selection, this->desktop); + sp_selection_raise_to_top(selection, this->desktop, true); + if (bbox && bbox->intersects(*eraserBbox)) { + SPClipPath *clip_path = item->clip_ref->getObject(); + if (clip_path) { + SPPath *clip_data = SP_PATH(clip_path->firstChild()); + if (clip_data) { + Inkscape::XML::Node *dup_clip = SP_OBJECT(clip_data)->getRepr()->duplicate(xml_doc); + if (dup_clip) { + SPItem * dup_clip_obj = SP_ITEM(item_repr->parent->appendChildRepr(dup_clip)); + if (dup_clip_obj) { + dup_clip_obj->doWriteTransform(dup_clip, item->transform); + sp_object_ref(clip_data, 0); + clip_data->deleteObject(true); + sp_object_unref(clip_data); + sp_object_ref(clip_path, 0); + clip_path->deleteObject(true); + sp_object_unref(clip_path); + sp_object_ref(rect, 0); + rect->deleteObject(true); + sp_object_unref(rect); + sp_selection_raise_to_top(selection, this->desktop, true); + selection->add(dup_clip); + sp_selected_path_diff_skip_undo(selection, this->desktop); + SPItem * clip = SP_ITEM(selection->itemList()[0]); + } } } + } else { + selection->add(rect); + sp_selected_path_diff_skip_undo(selection, this->desktop); } + sp_selection_raise_to_top(selection, this->desktop, true); + selection->add(item); + sp_selection_set_mask(this->desktop, true, false, true); } else { - selection->add(rect); - std::cout << "asasgfasfasfasfasfasf\n"; - sp_selected_path_diff_skip_undo(selection, desktop); + SPItem *erase_clip = selection->singleItem(); + if (erase_clip) { + sp_object_ref(erase_clip, 0); + erase_clip->deleteObject(true); + sp_object_unref(erase_clip); + } } - sp_selection_raise_to_top(selection, desktop, true); - selection->add(item); - sp_selection_set_mask(desktop, true, false, true); - } else { - SPItem *erase_clip = selection->singleItem(); - if (erase_clip) { - sp_object_ref(erase_clip, 0); - erase_clip->deleteObject(true); - sp_object_unref(erase_clip); + workDone = true; + selection->clear(); + if (wasSelection) { + remainingItems.push_back(item); } } - workDone = true; - selection->clear(); - if (wasSelection) { - remainingItems.push_back(item); - } } - } else { for (std::vector ::const_iterator i = toWorkOn.begin();i!=toWorkOn.end();++i) { sp_object_ref( *i, 0 ); @@ -842,7 +841,7 @@ void EraserTool::set_to_accumulated() { } if ( eraser_mode == 0 ) { - sp_selection_delete(desktop); + sp_selection_delete(this->desktop); remainingItems.clear(); } diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp index f69ac633f..482075dc6 100644 --- a/src/widgets/eraser-toolbar.cpp +++ b/src/widgets/eraser-toolbar.cpp @@ -76,7 +76,11 @@ static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl ) GtkAction *mass = GTK_ACTION( g_object_get_data(tbl, "mass") ); GtkAction *width = GTK_ACTION( g_object_get_data(tbl, "width") ); if(eraser_mode != 0){ - gtk_action_set_visible( split, TRUE ); + if(eraser_mode == 1) { + gtk_action_set_visible( split, TRUE ); + } else { + gtk_action_set_visible( split, FALSE ); + } gtk_action_set_visible( mass, TRUE ); gtk_action_set_visible( width, TRUE ); } else { @@ -204,7 +208,11 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb GtkAction *mass = GTK_ACTION( g_object_get_data(holder, "mass") ); GtkAction *width = GTK_ACTION( g_object_get_data(holder, "width") ); if (eraser_mode != 0) { - gtk_action_set_visible( split, TRUE ); + if(eraser_mode == 1) { + gtk_action_set_visible( split, TRUE ); + } else { + gtk_action_set_visible( split, FALSE ); + } gtk_action_set_visible( mass, TRUE ); gtk_action_set_visible( width, TRUE ); } else { diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index f7b5e585f..8113c9619 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -499,9 +499,10 @@ static gchar const * ui_descr = " " " " " " - " " " " " " + " " + " " " " " " -- cgit v1.2.3 From c230ee02c2732c7eb55c5bdc6ef846f88550eea3 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 17:44:25 +0200 Subject: first attem to work throught layers (bzr r14865.1.11) --- src/ui/tools/eraser-tool.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index c5a068dfc..02908fdf9 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -61,6 +61,7 @@ #include "sp-clippath.h" #include "sp-rect.h" #include "sp-text.h" +#include "sp-root.h" #include "display/canvas-bpath.h" #include "display/canvas-arena.h" #include "livarot/Shape.h" @@ -655,7 +656,7 @@ void EraserTool::set_to_accumulated() { this->repr = repr; } - SPItem *item_repr = SP_ITEM(this->desktop->currentLayer()->appendChildRepr(this->repr)); + SPItem *item_repr = SP_ITEM(SP_OBJECT(document->getRoot())->appendChildRepr(this->repr)); Inkscape::GC::release(this->repr); item_repr->updateRepr(); Geom::PathVector pathv = this->accumulated->get_pathvector() * this->desktop->dt2doc(); @@ -722,7 +723,7 @@ void EraserTool::set_to_accumulated() { selection->set(dup); if (!this->nowidth) { sp_selected_path_union_skip_undo(selection, this->desktop); - } + } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ SPCSSAttr *css = sp_repr_css_attr_new(); @@ -767,10 +768,10 @@ void EraserTool::set_to_accumulated() { Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); sp_desktop_apply_style_tool (this->desktop, rect_repr, "/tools/eraser", false); - SPRect * rect = SP_RECT(this->desktop->currentLayer()->appendChildRepr(rect_repr)); + SPRect * rect = SP_RECT(item_repr->parent->appendChildRepr(rect_repr)); Inkscape::GC::release(rect_repr); rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); - rect->transform = SP_ITEM(this->desktop->currentLayer())->i2dt_affine().inverse(); + rect->transform = SP_ITEM(rect->parent)->i2dt_affine().inverse(); rect->updateRepr(); this->desktop->canvas->endForcedFullRedraws(); Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc); -- cgit v1.2.3 From 2d1b3b926c94db73a3f5cb73071027b9ee348154 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 18:17:49 +0200 Subject: Speed improvements (bzr r14865.1.12) --- src/ui/tools/eraser-tool.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 02908fdf9..5cd04fa6f 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -766,20 +766,11 @@ void EraserTool::set_to_accumulated() { SPItem *item = *i; Geom::OptRect bbox = item->desktopVisualBounds(); Inkscape::XML::Document *xml_doc = this->desktop->doc()->getReprDoc(); - Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); - sp_desktop_apply_style_tool (this->desktop, rect_repr, "/tools/eraser", false); - SPRect * rect = SP_RECT(item_repr->parent->appendChildRepr(rect_repr)); - Inkscape::GC::release(rect_repr); - rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); - rect->transform = SP_ITEM(rect->parent)->i2dt_affine().inverse(); - rect->updateRepr(); - this->desktop->canvas->endForcedFullRedraws(); Inkscape::XML::Node* dup = this->repr->duplicate(xml_doc); this->repr->parent()->appendChild(dup); Inkscape::GC::release(dup); // parent takes over selection->set(dup); sp_selected_path_union_skip_undo(selection, this->desktop); - sp_selection_raise_to_top(selection, this->desktop, true); if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); if (clip_path) { @@ -790,15 +781,9 @@ void EraserTool::set_to_accumulated() { SPItem * dup_clip_obj = SP_ITEM(item_repr->parent->appendChildRepr(dup_clip)); if (dup_clip_obj) { dup_clip_obj->doWriteTransform(dup_clip, item->transform); - sp_object_ref(clip_data, 0); - clip_data->deleteObject(true); - sp_object_unref(clip_data); sp_object_ref(clip_path, 0); clip_path->deleteObject(true); sp_object_unref(clip_path); - sp_object_ref(rect, 0); - rect->deleteObject(true); - sp_object_unref(rect); sp_selection_raise_to_top(selection, this->desktop, true); selection->add(dup_clip); sp_selected_path_diff_skip_undo(selection, this->desktop); @@ -807,6 +792,15 @@ void EraserTool::set_to_accumulated() { } } } else { + Inkscape::XML::Node *rect_repr = xml_doc->createElement("svg:rect"); + sp_desktop_apply_style_tool (this->desktop, rect_repr, "/tools/eraser", false); + SPRect * rect = SP_RECT(item_repr->parent->appendChildRepr(rect_repr)); + Inkscape::GC::release(rect_repr); + rect->setPosition (bbox->left(), bbox->top(), bbox->width(), bbox->height()); + rect->transform = SP_ITEM(rect->parent)->i2dt_affine().inverse(); + rect->updateRepr(); + rect->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); + sp_selection_raise_to_top(selection, this->desktop, true); selection->add(rect); sp_selected_path_diff_skip_undo(selection, this->desktop); } -- cgit v1.2.3 From d7887bf24bbb703739e56fa9056e1c67d8483b4c Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 22 May 2016 20:44:21 +0200 Subject: Added some widgets from caligraphic tool (bzr r14865.1.13) --- src/widgets/eraser-toolbar.cpp | 113 ++++++++++++++++++++++++++++++++++++++++- src/widgets/toolbox.cpp | 7 +++ 2 files changed, 119 insertions(+), 1 deletion(-) diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp index 482075dc6..ddfe31d72 100644 --- a/src/widgets/eraser-toolbar.cpp +++ b/src/widgets/eraser-toolbar.cpp @@ -64,6 +64,28 @@ static void sp_erc_mass_value_changed( GtkAdjustment *adj, GObject* tbl ) update_presets_list(tbl); } +static void sp_erc_velthin_value_changed( GtkAdjustment *adj, GObject* tbl ) +{ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble("/tools/eraser/thinning", gtk_adjustment_get_value(adj) ); + update_presets_list(tbl); +} + +static void sp_erc_cap_rounding_value_changed( GtkAdjustment *adj, GObject* tbl ) +{ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble( "/tools/eraser/cap_rounding", gtk_adjustment_get_value(adj) ); + update_presets_list(tbl); +} + +static void sp_erc_tremor_value_changed( GtkAdjustment *adj, GObject* tbl ) +{ + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setDouble( "/tools/eraser/tremor", gtk_adjustment_get_value(adj) ); + update_presets_list(tbl); +} + + static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl ) { SPDesktop *desktop = static_cast(g_object_get_data( tbl, "desktop" )); @@ -75,15 +97,27 @@ static void sp_erasertb_mode_changed( EgeSelectOneAction *act, GObject *tbl ) GtkAction *split = GTK_ACTION( g_object_get_data(tbl, "split") ); GtkAction *mass = GTK_ACTION( g_object_get_data(tbl, "mass") ); GtkAction *width = GTK_ACTION( g_object_get_data(tbl, "width") ); - if(eraser_mode != 0){ + GtkAction *usepressure = GTK_ACTION( g_object_get_data(tbl, "usepressure") ); + GtkAction *cap_rounding = GTK_ACTION( g_object_get_data(tbl, "cap_rounding") ); + GtkAction *thinning = GTK_ACTION( g_object_get_data(tbl, "thinning") ); + GtkAction *tremor = GTK_ACTION( g_object_get_data(tbl, "tremor") ); + if (eraser_mode != 0) { if(eraser_mode == 1) { gtk_action_set_visible( split, TRUE ); } else { gtk_action_set_visible( split, FALSE ); } + gtk_action_set_visible(usepressure, TRUE ); + gtk_action_set_visible(tremor, TRUE ); + gtk_action_set_visible(cap_rounding, TRUE ); + gtk_action_set_visible(thinning, TRUE ); gtk_action_set_visible( mass, TRUE ); gtk_action_set_visible( width, TRUE ); } else { + gtk_action_set_visible(usepressure, FALSE ); + gtk_action_set_visible(tremor, FALSE ); + gtk_action_set_visible(cap_rounding, FALSE ); + gtk_action_set_visible(thinning, FALSE ); gtk_action_set_visible( split, FALSE ); gtk_action_set_visible( mass, FALSE ); gtk_action_set_visible( width, FALSE ); @@ -175,6 +209,71 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb g_object_set_data( holder, "width", eact ); gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); } + /* Use Pressure button */ + { + InkToggleAction* act = ink_toggle_action_new( "EraserPressureAction", + _("Eraser Pressure"), + _("Use the pressure of the input device to alter the width of the pen"), + INKSCAPE_ICON("draw-use-pressure"), + Inkscape::ICON_SIZE_DECORATION ); + gtk_action_group_add_action( mainActions, GTK_ACTION( act ) ); + PrefPusher *pusher = new PrefPusher(GTK_TOGGLE_ACTION(act), "/tools/eraser/usepressure", update_presets_list, holder); + g_signal_connect( holder, "destroy", G_CALLBACK(delete_prefspusher), pusher); + g_object_set_data( holder, "usepressure", act ); + } + { + + /* Thinning */ + gchar const* labels[] = {_("(speed blows up stroke)"), 0, 0, _("(slight widening)"), _("(constant width)"), _("(slight thinning, default)"), 0, 0, _("(speed deflates stroke)")}; + gdouble values[] = {-100, -40, -20, -10, 0, 10, 20, 40, 100}; + EgeAdjustmentAction* eact = create_adjustment_action( "EraserThinningAction", + _("Eraser Stroke Thinning"), _("Thinning:"), + _("How much velocity thins the stroke (> 0 makes fast strokes thinner, < 0 makes them broader, 0 makes width independent of velocity)"), + "/tools/eraser/thinning", 10, + GTK_WIDGET(desktop->canvas), holder, FALSE, NULL, + -100, 100, 1, 10.0, + labels, values, G_N_ELEMENTS(labels), + sp_erc_velthin_value_changed, NULL /*unit tracker*/, 1, 0); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + g_object_set_data( holder, "thinning", eact ); + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } + { + /* Cap Rounding */ + gchar const* labels[] = {_("(blunt caps, default)"), _("(slightly bulging)"), 0, 0, _("(approximately round)"), _("(long protruding caps)")}; + gdouble values[] = {0, 0.3, 0.5, 1.0, 1.4, 5.0}; + // TRANSLATORS: "cap" means "end" (both start and finish) here + EgeAdjustmentAction* eact = create_adjustment_action( "EraserCapRoundingAction", + _("Eraser Cap rounding"), _("Caps:"), + _("Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = round caps)"), + "/tools/eraser/cap_rounding", 0.0, + GTK_WIDGET(desktop->canvas), holder, FALSE, NULL, + 0.0, 5.0, 0.01, 0.1, + labels, values, G_N_ELEMENTS(labels), + sp_erc_cap_rounding_value_changed, NULL /*unit tracker*/, 0.01, 2 ); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + g_object_set_data( holder, "cap_rounding", eact ); + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } + + { + /* Tremor */ + gchar const* labels[] = {_("(smooth line)"), _("(slight tremor)"), _("(noticeable tremor)"), 0, 0, _("(maximum tremor)")}; + gdouble values[] = {0, 10, 20, 40, 60, 100}; + EgeAdjustmentAction* eact = create_adjustment_action( "EraserTremorAction", + _("EraserStroke Tremor"), _("Tremor:"), + _("Increase to make strokes rugged and trembling"), + "/tools/eraser/tremor", 0.0, + GTK_WIDGET(desktop->canvas), holder, FALSE, NULL, + 0.0, 100, 1, 10.0, + labels, values, G_N_ELEMENTS(labels), + sp_erc_tremor_value_changed, NULL /*unit tracker*/, 1, 0); + + ege_adjustment_action_set_appearance( eact, TOOLBAR_SLIDER_HINT ); + g_object_set_data( holder, "tremor", eact ); + gtk_action_group_add_action( mainActions, GTK_ACTION(eact) ); + gtk_action_set_sensitive( GTK_ACTION(eact), TRUE ); + } { /* Mass */ gchar const* labels[] = {_("(no inertia)"), _("(slight smoothing, default)"), _("(noticeable lagging)"), 0, 0, _("(maximum inertia)")}; @@ -207,15 +306,27 @@ void sp_eraser_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb GtkAction *split = GTK_ACTION( g_object_get_data(holder, "split") ); GtkAction *mass = GTK_ACTION( g_object_get_data(holder, "mass") ); GtkAction *width = GTK_ACTION( g_object_get_data(holder, "width") ); + GtkAction *usepressure = GTK_ACTION( g_object_get_data(holder, "usepressure") ); + GtkAction *cap_rounding = GTK_ACTION( g_object_get_data(holder, "cap_rounding") ); + GtkAction *thinning = GTK_ACTION( g_object_get_data(holder, "thinning") ); + GtkAction *tremor = GTK_ACTION( g_object_get_data(holder, "tremor") ); if (eraser_mode != 0) { if(eraser_mode == 1) { gtk_action_set_visible( split, TRUE ); } else { gtk_action_set_visible( split, FALSE ); } + gtk_action_set_visible(usepressure, TRUE ); + gtk_action_set_visible(tremor, TRUE ); + gtk_action_set_visible(cap_rounding, TRUE ); + gtk_action_set_visible(thinning, TRUE ); gtk_action_set_visible( mass, TRUE ); gtk_action_set_visible( width, TRUE ); } else { + gtk_action_set_visible(usepressure, FALSE ); + gtk_action_set_visible(tremor, FALSE ); + gtk_action_set_visible(cap_rounding, FALSE ); + gtk_action_set_visible(thinning, FALSE ); gtk_action_set_visible( split, FALSE ); gtk_action_set_visible( mass, FALSE ); gtk_action_set_visible( width, FALSE ); diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 8113c9619..52b31e4c5 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -499,6 +499,13 @@ static gchar const * ui_descr = " " " " " " + " " + " " + " " + " " + " " + " " + " " " " " " " " -- cgit v1.2.3 From 9abb5e658d005b3ac82afeec13fd59384a8e65eb Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sun, 5 Jun 2016 23:20:55 +0200 Subject: Added object set (bzr r14954.1.1) --- CMakeScripts/DefineDependsandFlags.cmake | 2 + src/CMakeLists.txt | 4 + src/object-set.cpp | 133 ++++++++++++++++++++++++ src/object-set.h | 58 +++++++++++ src/object.cpp | 50 +++++++++ src/object.h | 76 ++++++++++++++ test/CMakeLists.txt | 11 +- test/src/object-set-test.cpp | 173 +++++++++++++++++++++++++++++++ test/src/object-test.cpp | 56 ++++++++++ 9 files changed, 555 insertions(+), 8 deletions(-) create mode 100644 src/object-set.cpp create mode 100644 src/object-set.h create mode 100644 src/object.cpp create mode 100644 src/object.h create mode 100644 test/src/object-set-test.cpp create mode 100644 test/src/object-test.cpp diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 0f4ba46c6..bf3954a62 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -10,6 +10,8 @@ list(APPEND INKSCAPE_INCS ${PROJECT_SOURCE_DIR} # generated includes ${CMAKE_BINARY_DIR}/include ) +# TODO temporary flag +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # ---------------------------------------------------------------------------- # Files we include diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index df25728f4..802a79c4f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -229,7 +229,9 @@ set(inkscape_SRC message-context.cpp message-stack.cpp mod360.cpp + object.cpp object-hierarchy.cpp + object-set.cpp object-snapper.cpp path-chemistry.cpp persp3d-reference.cpp @@ -353,7 +355,9 @@ set(inkscape_SRC mod360-test.h mod360.h number-opt-number.h + object.h object-hierarchy.h + object-set.h object-snapper.h object-test.h path-chemistry.h diff --git a/src/object-set.cpp b/src/object-set.cpp new file mode 100644 index 000000000..f071aa4d6 --- /dev/null +++ b/src/object-set.cpp @@ -0,0 +1,133 @@ +/* + * Multiindex container for selection + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "object-set.h" + +bool ObjectSet::add(Object* object) { + // any ancestor is in the set - do nothing + if (_anyAncestorIsInSet(object)) { + return false; + } + + // check if there is mutual ancestor for some elements, which can replace all of them in the set + Object* o = _getMutualAncestor(object); + + // remove all descendants from the set + _removeDescendantsFromSet(o); + + _add(o); + return true; +} + +bool ObjectSet::remove(Object* object) { + // object is the top of subtree + if (contains(object)) { + _remove(object); + return true; + } + + // any ancestor of object is in the set + if (_anyAncestorIsInSet(object)) { + _removeAncestorsFromSet(object); + return true; + } + + // no object nor any parent in the set + return false; +} + +bool ObjectSet::contains(Object* object) { + return container.get().find(object) != container.get().end(); +} + +void ObjectSet::clear() { + for (auto object: container) { + _remove(object); + } +} + +int ObjectSet::size() { + return container.size(); +} + +bool ObjectSet::_anyAncestorIsInSet(Object *object) { + Object* o = object; + while (o != nullptr) { + if (contains(o)) { + return true; + } + o = o->getParent(); + } + + return false; +} + +void ObjectSet::_removeDescendantsFromSet(Object *object) { + for (auto& child: object->getChildren()) { + if (contains(&child)) { + _remove(&child); + // there is certainly no children of this child in the set + continue; + } + + _removeDescendantsFromSet(&child); + } +} + +void ObjectSet::_remove(Object *object) { + releaseConnections[object].disconnect(); + releaseConnections.erase(object); + container.get().erase(object); +} + +void ObjectSet::_add(Object *object) { + releaseConnections[object] = object->connectRelease(sigc::mem_fun(*this, &ObjectSet::remove)); + container.push_back(object); +} + +Object *ObjectSet::_getMutualAncestor(Object *object) { + Object *o = object; + + bool flag = true; + while (o->getParent() != nullptr) { + for (auto &child: o->getParent()->getChildren()) { + if(&child != o && !contains(&child)) { + flag = false; + break; + } + } + if (!flag) { + break; + } + o = o->getParent(); + } + return o; +} + +void ObjectSet::_removeAncestorsFromSet(Object *object) { + Object* o = object; + while (o->getParent() != nullptr) { + for (auto &child: o->getParent()->getChildren()) { + if (&child != o) { + _add(&child); + } + } + if (contains(o->getParent())) { + _remove(o->getParent()); + break; + } + o = o->getParent(); + } +} + +ObjectSet::~ObjectSet() { + clear(); +} diff --git a/src/object-set.h b/src/object-set.h new file mode 100644 index 000000000..a3962356b --- /dev/null +++ b/src/object-set.h @@ -0,0 +1,58 @@ +/* + * Multiindex container for selection + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef INKSCAPE_PROTOTYPE_OBJECTSET_H +#define INKSCAPE_PROTOTYPE_OBJECTSET_H + +#include "object.h" +#include +#include +#include +#include +#include +#include +#include + +struct hashed{}; + +typedef boost::multi_index_container< + Object*, + boost::multi_index::indexed_by< + boost::multi_index::sequenced<>, + boost::multi_index::hashed_unique< + boost::multi_index::tag, + boost::multi_index::identity> + >> multi_index_container; + +class ObjectSet { +public: + ObjectSet() {}; + ~ObjectSet(); + bool add(Object* object); + bool remove(Object* object); + bool contains(Object* object); + void clear(); + int size(); + +private: + void _add(Object* object); + void _remove(Object* object); + bool _anyAncestorIsInSet(Object *object); + void _removeDescendantsFromSet(Object *object); + void _removeAncestorsFromSet(Object *object); + Object *_getMutualAncestor(Object *object); + + multi_index_container container; + std::unordered_map releaseConnections; +}; + + +#endif //INKSCAPE_PROTOTYPE_OBJECTSET_H diff --git a/src/object.cpp b/src/object.cpp new file mode 100644 index 000000000..c05d50b3a --- /dev/null +++ b/src/object.cpp @@ -0,0 +1,50 @@ +/* + * Temporary file + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#include "object.h" + +Object::Object(std::string name) : name(name), parent(NULL) { } + +Object::~Object() { + // only for this prototype + // call destructor on every child + children.clear_and_dispose(delete_disposer()); + release_signal.emit(this); +} + +const std::string& Object::getName() const { + return name; +} + +Object *Object::getParent() { + return parent; +} + +bool Object::isDescendantOf(Object *o) { + Object* p = parent; + while(p != NULL) { + if (p == o) { + return true; + } + p = p->parent; + } + return false; +} + +void Object::addChild(Object* o) { + o->parent = this; + children.push_back(*o); +} + +sigc::connection Object::connectRelease(sigc::slot slot) { + return release_signal.connect(slot); +} + diff --git a/src/object.h b/src/object.h new file mode 100644 index 000000000..a5ad5692e --- /dev/null +++ b/src/object.h @@ -0,0 +1,76 @@ +/* + * Temporary file + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef INKSCAPE_PROTOTYPE_OBJECT_H +#define INKSCAPE_PROTOTYPE_OBJECT_H + +#include +#include +#include +#include + +// this causes some warning, but it's only for this prototype +class Object; +struct delete_disposer +{ + void operator()(Object *delete_this) { + delete delete_this; + } +}; + +class Object { +private: + std::string name; + Object* parent; + + typedef boost::intrusive::list_member_hook< + boost::intrusive::link_mode< + boost::intrusive::auto_unlink + >> list_hook; + list_hook child_hook; + + typedef boost::intrusive::list< + Object, + boost::intrusive::constant_time_size, + boost::intrusive::member_hook< + Object, + list_hook, + &Object::child_hook + >> list; + list children; + + sigc::signal release_signal; + +public: + Object(std::string name); + virtual ~Object(); + + list &getChildren() { + return children; + } + + const std::string &getName() const; + Object * getParent() ; + + sigc::connection connectRelease(sigc::slot slot); + void addChild(Object* o); + bool isDescendantOf(Object* o); + + bool operator==(Object o) { + return name == o.name; + } + + bool operator!=(Object o) { + return name != o.name; + } +}; + +#endif //INKSCAPE_PROTOTYPE_OBJECT_H diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8da39d627..26d3572e0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,7 +14,6 @@ set_source_files_properties( ${CMAKE_BINARY_DIR}/src/inkscape-version.cpp PROPERTIES GENERATED TRUE) -# include_directories(${CMAKE_CURRENT_BINARY_DIR}/__/src) include_directories(${CMAKE_BINARY_DIR}/src) add_executable(unittest @@ -23,10 +22,10 @@ add_executable(unittest src/attributes-test.cpp src/color-profile-test.cpp src/dir-util-test.cpp + src/object-test.cpp + src/object-set-test.cpp ) -target_link_libraries(unittest inkscape_base) - add_dependencies(unittest inkscape_version) set (_optional_unittest_libs ) @@ -37,9 +36,7 @@ endif() target_link_libraries(unittest gmock_main - - # order from automake - #sp_LIB + inkscape_base #inkscape_LIB #sp_LIB # annoying, we need both! @@ -63,5 +60,3 @@ target_link_libraries(unittest add_test(BaseTest ${EXECUTABLE_OUTPUT_PATH}/unittest) add_dependencies(check unittest) - -# diff --git a/test/src/object-set-test.cpp b/test/src/object-set-test.cpp new file mode 100644 index 000000000..20d0c9474 --- /dev/null +++ b/test/src/object-set-test.cpp @@ -0,0 +1,173 @@ +#include +#include "object-set.h" + +class ObjectSetTest: public testing::Test { +public: + ObjectSetTest() { + A = new Object("A"); + B = new Object("B"); + C = new Object("C"); + D = new Object("D"); + E = new Object("E"); + F = new Object("F"); + G = new Object("G"); + H = new Object("H"); + X = new Object("X"); + } + ~ObjectSetTest() { + delete X; + delete H; + delete G; + delete F; + delete E; + delete D; + delete C; + delete B; + delete A; + } + Object* A; + Object* B; + Object* C; + Object* D; + Object* E; + Object* F; + Object* G; + Object* H; + Object* X; + ObjectSet set; + ObjectSet set2; +}; + +TEST_F(ObjectSetTest, Basics) { + EXPECT_EQ(0, set.size()); + set.add(A); + EXPECT_EQ(1, set.size()); + EXPECT_TRUE(set.contains(A)); + set.add(B); + set.add(C); + EXPECT_EQ(3, set.size()); + EXPECT_TRUE(set.contains(B)); + EXPECT_TRUE(set.contains(C)); + EXPECT_FALSE(set.contains(D)); + EXPECT_FALSE(set.contains(X)); + set.remove(A); + EXPECT_EQ(2, set.size()); + EXPECT_FALSE(set.contains(A)); + set.clear(); + EXPECT_EQ(0, set.size()); +} + +TEST_F(ObjectSetTest, Autoremoving) { + Object* Q = new Object("Q"); + set.add(Q); + EXPECT_TRUE(set.contains(Q)); + EXPECT_EQ(1, set.size()); + delete Q; + EXPECT_EQ(0, set.size()); +} + +TEST_F(ObjectSetTest, BasicDescendants) { + A->addChild(B); + B->addChild(C); + A->addChild(D); + bool resultB = set.add(B); + bool resultB2 = set.add(B); + EXPECT_TRUE(resultB); + EXPECT_FALSE(resultB2); + EXPECT_TRUE(set.contains(B)); + bool resultC = set.add(C); + EXPECT_FALSE(resultC); + EXPECT_FALSE(set.contains(C)); + EXPECT_EQ(1, set.size()); + bool resultA = set.add(A); + EXPECT_TRUE(resultA); + EXPECT_EQ(1, set.size()); + EXPECT_TRUE(set.contains(A)); + EXPECT_FALSE(set.contains(B)); +} + +TEST_F(ObjectSetTest, AdvancedDescendants) { + A->addChild(B); + A->addChild(C); + A->addChild(X); + B->addChild(D); + B->addChild(E); + C->addChild(F); + C->addChild(G); + C->addChild(H); + set.add(A); + bool resultF = set.remove(F); + EXPECT_TRUE(resultF); + EXPECT_EQ(4, set.size()); + EXPECT_FALSE(set.contains(F)); + EXPECT_TRUE(set.contains(B)); + EXPECT_TRUE(set.contains(G)); + EXPECT_TRUE(set.contains(H)); + EXPECT_TRUE(set.contains(X)); + bool resultF2 = set.add(F); + EXPECT_TRUE(resultF2); + EXPECT_EQ(1, set.size()); + EXPECT_TRUE(set.contains(A)); +} + +TEST_F(ObjectSetTest, Removing) { + A->addChild(B); + A->addChild(C); + A->addChild(X); + B->addChild(D); + B->addChild(E); + C->addChild(F); + C->addChild(G); + C->addChild(H); + bool removeH = set.remove(H); + EXPECT_FALSE(removeH); + set.add(A); + bool removeX = set.remove(X); + EXPECT_TRUE(removeX); + EXPECT_EQ(2, set.size()); + EXPECT_TRUE(set.contains(B)); + EXPECT_TRUE(set.contains(C)); + EXPECT_FALSE(set.contains(X)); + EXPECT_FALSE(set.contains(A)); + bool removeX2 = set.remove(X); + EXPECT_FALSE(removeX2); + EXPECT_EQ(2, set.size()); + bool removeA = set.remove(A); + EXPECT_FALSE(removeA); + EXPECT_EQ(2, set.size()); + bool removeC = set.remove(C); + EXPECT_TRUE(removeC); + EXPECT_EQ(1, set.size()); + EXPECT_TRUE(set.contains(B)); + EXPECT_FALSE(set.contains(C)); +} + +TEST_F(ObjectSetTest, TwoSets) { + Object* Q = new Object("Q"); + A->addChild(B); + A->addChild(Q); + set.add(A); + set2.add(A); + EXPECT_EQ(1, set.size()); + EXPECT_EQ(1, set2.size()); + set.remove(B); + EXPECT_EQ(1, set.size()); + EXPECT_TRUE(set.contains(Q)); + EXPECT_EQ(1, set2.size()); + EXPECT_TRUE(set2.contains(A)); + delete Q; + EXPECT_EQ(0, set.size()); + EXPECT_EQ(1, set2.size()); + EXPECT_TRUE(set2.contains(A)); +} + +TEST_F(ObjectSetTest, SetRemoving) { + ObjectSet *objectSet = new ObjectSet(); + A->addChild(B); + objectSet->add(A); + objectSet->add(C); + EXPECT_EQ(2, objectSet->size()); + delete objectSet; + EXPECT_EQ("A", A->getName()); + EXPECT_EQ("C", C->getName()); +} diff --git a/test/src/object-test.cpp b/test/src/object-test.cpp new file mode 100644 index 000000000..83e90b2ec --- /dev/null +++ b/test/src/object-test.cpp @@ -0,0 +1,56 @@ +#include "gtest/gtest.h" +#include "object.h" + +class ObjectTest: public testing::Test { +public: + ObjectTest() { + object = new Object("parent"); + childOfChild = new Object("childOfChild"); + child = new Object("child"); + child2 = new Object("child2"); + object2 = new Object("object2"); + child3 = new Object("child3"); + } + ~ObjectTest() { + delete child3; + delete child2; + delete childOfChild; + delete child; + delete object2; + delete object; + } + Object* object; + Object* object2; + Object* child; + Object* childOfChild; + Object* child2; + Object* child3; +}; + +TEST_F(ObjectTest, AddChild) { + EXPECT_EQ(0, object->getChildren().size()); + object->addChild(child); + EXPECT_EQ(1, object->getChildren().size()); + EXPECT_EQ(child, &(object->getChildren().front())); + EXPECT_EQ(object, child->getParent()); +} + +TEST_F(ObjectTest, IsDescendantOf) { + object->addChild(child); + child->addChild(childOfChild); + object->addChild(child2); + object2->addChild(child3); + EXPECT_TRUE(child->isDescendantOf(object)); + EXPECT_TRUE(childOfChild->isDescendantOf(child)); + EXPECT_TRUE(childOfChild->isDescendantOf(object)); + EXPECT_TRUE(child2->isDescendantOf(object)); + EXPECT_TRUE(child3->isDescendantOf(object2)); + EXPECT_FALSE(child->isDescendantOf(child2)); + EXPECT_FALSE(child2->isDescendantOf(child)); + EXPECT_FALSE(object->isDescendantOf(childOfChild)); + EXPECT_FALSE(object->isDescendantOf(child)); + EXPECT_FALSE(object->isDescendantOf(object2)); + EXPECT_FALSE(object2->isDescendantOf(object)); + EXPECT_FALSE(child2->isDescendantOf(child3)); + EXPECT_FALSE(child3->isDescendantOf(child2)); +} -- cgit v1.2.3 From 32e046d9c5ef4e8b689e4bc8d1e99a5178fbc485 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 5 Jun 2016 16:35:43 -0500 Subject: Initial build to get the binaries installed, needs more work (bzr r14950.1.1) --- snapcraft.sh | 6 ++++++ snapcraft.yaml | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100755 snapcraft.sh create mode 100644 snapcraft.yaml diff --git a/snapcraft.sh b/snapcraft.sh new file mode 100755 index 000000000..7e12fe964 --- /dev/null +++ b/snapcraft.sh @@ -0,0 +1,6 @@ +#!/bin/sh -e + +export INKSCAPE_PORTABLE_PROFILE_DIR="${SNAP_USER_DATA}" +export INKSCAPE_LOCALEDIR="${SNAP}/share/locale/" + +exec $@ diff --git a/snapcraft.yaml b/snapcraft.yaml new file mode 100644 index 000000000..fc290a80f --- /dev/null +++ b/snapcraft.yaml @@ -0,0 +1,31 @@ +name: inkscape +version: 0.91+devel +summary: Vector Graphics Editor +description: | + An Open Source vector graphics editor, with capabilities similar to + Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector + Graphics (SVG) file format. + + Inkscape supports many advanced SVG features (markers, clones, alpha blending, + etc.) and great care is taken in designing a streamlined interface. + It is very easy to edit nodes, perform complex path operations, trace + bitmaps and much more. + + We also aim to maintain a thriving user and developer community by using + open, community-oriented development. +confinement: devmode # use "strict" to enforce system access only via declared interfaces + +parts: + inkscape: + plugin: cmake + source: . + snapcraft-wrapper: + plugin: copy + files: + snapcraft.sh: snapcraft.sh + +apps: + inkscape: + command: snapcraft.sh inkscape + viewer: + command: snapcraft.sh inkview -- cgit v1.2.3 From 973c1766a7ea118fca959c0895bfc52915abdb57 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sun, 5 Jun 2016 17:28:30 -0500 Subject: Try binreloc (bzr r14950.1.2) --- CMakeLists.txt | 10 ++++++++++ snapcraft.yaml | 1 + 2 files changed, 11 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a68b678c1..119a0fb7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -102,6 +102,8 @@ option(WITH_LIBWPG "Compile with support of libwpg for WordPerfect Graphics" ON) option(WITH_NLS "Compile with Native Language Support (using gettext)" ON) option(WITH_GTK3_EXPERIMENTAL "Enable compilation with GTK+3 (EXPERIMENTAL!)" OFF) +option(ENABLE_BINRELOC "Enable relocatable binaries" OFF) + include(CMakeScripts/ConfigPaths.cmake) # Installation Paths include(CMakeScripts/DefineDependsandFlags.cmake) # Includes, Compiler Flags, and Link Libraries include(CMakeScripts/HelperMacros.cmake) # Misc Utility Macros @@ -121,6 +123,14 @@ endif() # end badness # ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# Relocatable Binary +# ----------------------------------------------------------------------------- + +if (ENABLE_BINRELOC) + add_definitions(-DENABLE_BINRELOC) +endif() + # ----------------------------------------------------------------------------- # Dist Target # ----------------------------------------------------------------------------- diff --git a/snapcraft.yaml b/snapcraft.yaml index fc290a80f..99a1ee7af 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -19,6 +19,7 @@ parts: inkscape: plugin: cmake source: . + configflags: ['-DENABLE_BINRELOC=ON'] snapcraft-wrapper: plugin: copy files: -- cgit v1.2.3 From ac25f7827cc250eb47eedf1bd3aa5ec8438fc0e5 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Tue, 7 Jun 2016 01:35:26 +0200 Subject: Add measure Over Item by a vlada idea on IRC (bzr r14957.1.1) --- src/ui/tools/measure-tool.cpp | 112 ++++++++++++++++++++++++++++++++++++++++++ src/ui/tools/measure-tool.h | 9 ++++ 2 files changed, 121 insertions(+) diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp index 287828d32..8b2a734ff 100644 --- a/src/ui/tools/measure-tool.cpp +++ b/src/ui/tools/measure-tool.cpp @@ -394,6 +394,10 @@ MeasureTool::~MeasureTool() sp_canvas_item_destroy(measure_tmp_items[idx]); } measure_tmp_items.clear(); + for (size_t idx = 0; idx < measure_item.size(); ++idx) { + sp_canvas_item_destroy(measure_item[idx]); + } + measure_item.clear(); for (size_t idx = 0; idx < measure_phantom_items.size(); ++idx) { sp_canvas_item_destroy(measure_phantom_items[idx]); } @@ -608,6 +612,12 @@ bool MeasureTool::root_handler(GdkEvent* event) snap_manager.preSnap(scp); snap_manager.unSetup(); } + Geom::Point const motion_w(event->motion.x, event->motion.y); + if(event->motion.state & GDK_SHIFT_MASK) { + showInfoBox(motion_w, true); + } else { + showInfoBox(motion_w, false); + } } else { ret = TRUE; Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -1128,6 +1138,108 @@ void MeasureTool::setMeasureCanvasControlLine(Geom::Point start, Geom::Point end } } +void MeasureTool::showItemInfoText(Geom::Point pos, gchar *measure_str, double fontsize) +{ + SPCanvasText *canvas_tooltip = sp_canvastext_new(desktop->getTempGroup(), + desktop, + pos, + measure_str); + sp_canvastext_set_fontsize(canvas_tooltip, fontsize); + canvas_tooltip->rgba = 0xffffffff; + canvas_tooltip->outline = false; + canvas_tooltip->background = true; + canvas_tooltip->anchor_position = TEXT_ANCHOR_LEFT; + canvas_tooltip->rgba_background = 0x00000099; + measure_item.push_back(SP_CANVAS_ITEM(canvas_tooltip)); + sp_canvas_item_show(SP_CANVAS_ITEM(canvas_tooltip)); +} + +void MeasureTool::showInfoBox(Geom::Point cursor, bool into_groups) +{ + SPDesktop *desktop = SP_ACTIVE_DESKTOP; + Inkscape::Util::Unit const * unit = desktop->getNamedView()->getDisplayUnit(); + for (size_t idx = 0; idx < measure_item.size(); ++idx) { + sp_canvas_item_destroy(measure_item[idx]); + } + measure_item.clear(); + + SPItem *newover = desktop->getItemAtPoint(cursor, into_groups); + if (newover) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + double fontsize = prefs->getDouble("/tools/measure/fontsize", 10.0); + double scale = prefs->getDouble("/tools/measure/scale", 100.0) / 100.0; + int precision = prefs->getInt("/tools/measure/precision", 2); + Glib::ustring unit_name = prefs->getString("/tools/measure/unit"); + if (!unit_name.compare("")) { + unit_name = "px"; + } + Geom::Scale zoom = Geom::Scale(Inkscape::Util::Quantity::convert(desktop->current_zoom(), "px", unit->abbr)).inverse(); + if(newover != over){ + over = newover; + Preferences *prefs = Preferences::get(); + int prefs_bbox = prefs->getBool("/tools/bounding_box", 0); + SPItem::BBoxType bbox_type = !prefs_bbox ? SPItem::VISUAL_BBOX : SPItem::GEOMETRIC_BBOX; + Geom::OptRect bbox = over->bounds(bbox_type); + if (bbox) { + + item_width = Inkscape::Util::Quantity::convert((*bbox).width() * scale, unit->abbr, unit_name); + item_height = Inkscape::Util::Quantity::convert((*bbox).height() * scale, unit->abbr, unit_name); + item_x = Inkscape::Util::Quantity::convert((*bbox).left(), unit->abbr, unit_name); + Geom::Point y_point(0,Inkscape::Util::Quantity::convert((*bbox).bottom() * scale, unit->abbr, "px")); + y_point *= desktop->doc2dt(); + item_y = Inkscape::Util::Quantity::convert(y_point[Geom::Y] * scale, "px", unit_name); + if (SP_IS_SHAPE(over)) { + Geom::PathVector shape = SP_SHAPE(over)->getCurve()->get_pathvector(); + item_length = Geom::length(paths_to_pw(shape)); + item_length = Inkscape::Util::Quantity::convert(item_length * scale, unit->abbr, unit_name); + } + } + } + gchar *measure_str = NULL; + std::stringstream precision_str; + precision_str.imbue(std::locale::classic()); + double origin = Inkscape::Util::Quantity::convert(14, "px", unit->abbr); + Geom::Point rel_position = Geom::Point(origin, origin); + Geom::Point pos = desktop->w2d(cursor); + double gap = Inkscape::Util::Quantity::convert(7 + fontsize, "px", unit->abbr); + if (SP_IS_SHAPE(over)) { + precision_str << _("Lenght") << ": %." << precision << "f %s"; + measure_str = g_strdup_printf(precision_str.str().c_str(), item_length, unit_name.c_str()); + precision_str.str(""); + showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); + rel_position = Geom::Point(rel_position[Geom::X], rel_position[Geom::Y] + gap); + } else if (SP_IS_GROUP(over)) { + measure_str = _("Shift to measure into group"); + showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); + rel_position = Geom::Point(rel_position[Geom::X], rel_position[Geom::Y] + gap); + } + + precision_str << "Y: %." << precision << "f %s"; + measure_str = g_strdup_printf(precision_str.str().c_str(), item_y, unit_name.c_str()); + precision_str.str(""); + showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); + rel_position = Geom::Point(rel_position[Geom::X], rel_position[Geom::Y] + gap); + + precision_str << "X: %." << precision << "f %s"; + measure_str = g_strdup_printf(precision_str.str().c_str(), item_x, unit_name.c_str()); + precision_str.str(""); + showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); + rel_position = Geom::Point(rel_position[Geom::X], rel_position[Geom::Y] + gap); + + precision_str << _("Height") << ": %." << precision << "f %s"; + measure_str = g_strdup_printf(precision_str.str().c_str(), item_height, unit_name.c_str()); + precision_str.str(""); + showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); + rel_position = Geom::Point(rel_position[Geom::X], rel_position[Geom::Y] + gap); + + precision_str << _("Width") << ": %." << precision << "f %s"; + measure_str = g_strdup_printf(precision_str.str().c_str(), item_width, unit_name.c_str()); + precision_str.str(""); + showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); + g_free(measure_str); + } +} + void MeasureTool::showCanvasItems(bool to_guides, bool to_item, bool to_phantom, Inkscape::XML::Node *measure_repr) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; diff --git a/src/ui/tools/measure-tool.h b/src/ui/tools/measure-tool.h index 14fc9f81a..42122dca1 100644 --- a/src/ui/tools/measure-tool.h +++ b/src/ui/tools/measure-tool.h @@ -54,6 +54,8 @@ public: virtual void setMarker(bool isStart); virtual const std::string& getPrefsPath(); Geom::Point readMeasurePoint(bool is_start); + void showInfoBox(Geom::Point cursor, bool into_groups); + void showItemInfoText(Geom::Point pos, gchar *measure_str, double fontsize); void writeMeasurePoint(Geom::Point point, bool is_start); void setGuide(Geom::Point origin, double angle, const char *label); void setPoint(Geom::Point origin, Inkscape::XML::Node *measure_repr); @@ -77,6 +79,13 @@ private: Geom::Point end_p; std::vector measure_tmp_items; std::vector measure_phantom_items; + std::vector measure_item; + double item_width; + double item_height; + double item_x; + double item_y; + double item_length; + SPItem *over; sigc::connection _knot_start_moved_connection; sigc::connection _knot_start_ungrabbed_connection; sigc::connection _knot_start_click_connection; -- cgit v1.2.3 From 5633812ca77f35e52db62e7b432761e0e59253fe Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 9 Jun 2016 17:19:23 +0200 Subject: Removed Object class and temporary test dependencies (bzr r14954.1.4) --- src/CMakeLists.txt | 2 -- src/object.cpp | 50 -------------------------- src/object.h | 76 --------------------------------------- src/sp-flowtext.h | 1 + testfiles/CMakeLists.txt | 1 - testfiles/src/object-set-test.cpp | 15 +++----- testfiles/src/object-test.cpp | 56 ----------------------------- testfiles/unittest.cpp | 13 ------- 8 files changed, 5 insertions(+), 209 deletions(-) delete mode 100644 src/object.cpp delete mode 100644 src/object.h delete mode 100644 testfiles/src/object-test.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 802a79c4f..92436ea9a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -229,7 +229,6 @@ set(inkscape_SRC message-context.cpp message-stack.cpp mod360.cpp - object.cpp object-hierarchy.cpp object-set.cpp object-snapper.cpp @@ -355,7 +354,6 @@ set(inkscape_SRC mod360-test.h mod360.h number-opt-number.h - object.h object-hierarchy.h object-set.h object-snapper.h diff --git a/src/object.cpp b/src/object.cpp deleted file mode 100644 index c05d50b3a..000000000 --- a/src/object.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Temporary file - * - * Authors: - * Adrian Boguszewski - * - * Copyright (C) 2016 Adrian Boguszewski - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#include "object.h" - -Object::Object(std::string name) : name(name), parent(NULL) { } - -Object::~Object() { - // only for this prototype - // call destructor on every child - children.clear_and_dispose(delete_disposer()); - release_signal.emit(this); -} - -const std::string& Object::getName() const { - return name; -} - -Object *Object::getParent() { - return parent; -} - -bool Object::isDescendantOf(Object *o) { - Object* p = parent; - while(p != NULL) { - if (p == o) { - return true; - } - p = p->parent; - } - return false; -} - -void Object::addChild(Object* o) { - o->parent = this; - children.push_back(*o); -} - -sigc::connection Object::connectRelease(sigc::slot slot) { - return release_signal.connect(slot); -} - diff --git a/src/object.h b/src/object.h deleted file mode 100644 index a5ad5692e..000000000 --- a/src/object.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Temporary file - * - * Authors: - * Adrian Boguszewski - * - * Copyright (C) 2016 Adrian Boguszewski - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifndef INKSCAPE_PROTOTYPE_OBJECT_H -#define INKSCAPE_PROTOTYPE_OBJECT_H - -#include -#include -#include -#include - -// this causes some warning, but it's only for this prototype -class Object; -struct delete_disposer -{ - void operator()(Object *delete_this) { - delete delete_this; - } -}; - -class Object { -private: - std::string name; - Object* parent; - - typedef boost::intrusive::list_member_hook< - boost::intrusive::link_mode< - boost::intrusive::auto_unlink - >> list_hook; - list_hook child_hook; - - typedef boost::intrusive::list< - Object, - boost::intrusive::constant_time_size, - boost::intrusive::member_hook< - Object, - list_hook, - &Object::child_hook - >> list; - list children; - - sigc::signal release_signal; - -public: - Object(std::string name); - virtual ~Object(); - - list &getChildren() { - return children; - } - - const std::string &getName() const; - Object * getParent() ; - - sigc::connection connectRelease(sigc::slot slot); - void addChild(Object* o); - bool isDescendantOf(Object* o); - - bool operator==(Object o) { - return name == o.name; - } - - bool operator!=(Object o) { - return name != o.name; - } -}; - -#endif //INKSCAPE_PROTOTYPE_OBJECT_H diff --git a/src/sp-flowtext.h b/src/sp-flowtext.h index 9ee676893..d0b0a19a4 100644 --- a/src/sp-flowtext.h +++ b/src/sp-flowtext.h @@ -8,6 +8,7 @@ #include "libnrtype/Layout-TNG.h" #include "sp-item.h" +#include "desktop.h" #define SP_FLOWTEXT(obj) (dynamic_cast((SPObject*)obj)) #define SP_IS_FLOWTEXT(obj) (dynamic_cast((SPObject*)obj) != NULL) diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt index 5bb7ed1e0..e764220bc 100644 --- a/testfiles/CMakeLists.txt +++ b/testfiles/CMakeLists.txt @@ -17,7 +17,6 @@ set(TEST_SOURCES attributes-test color-profile-test dir-util-test - object-test object-set-test) set (_optional_unittest_libs ) diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index ff341b162..b0d236128 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -9,11 +9,10 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #include +#include #include "object-set.h" -#include "document.h" -#include "xml/simple-document.h" -class ObjectSetTest: public testing::Test { +class ObjectSetTest: public DocPerCaseTest { public: ObjectSetTest() { A = new SPObject(); @@ -71,10 +70,7 @@ TEST_F(ObjectSetTest, Basics) { TEST_F(ObjectSetTest, Autoremoving) { SPObject* Q = new SPObject(); - // TODO temporary - SPDocument *document = new SPDocument(); - Inkscape::XML::Node *rroot = new Inkscape::XML::SimpleDocument(); - Q->invoke_build(document, rroot, 0); + Q->invoke_build(_doc, _doc->rroot, 1); set.add(Q); EXPECT_TRUE(set.contains(Q)); EXPECT_EQ(1, set.size()); @@ -172,10 +168,7 @@ TEST_F(ObjectSetTest, Removing) { TEST_F(ObjectSetTest, TwoSets) { SPObject* Q = new SPObject(); - // TODO temporary - SPDocument *document = new SPDocument(); - Inkscape::XML::Node *rroot = new Inkscape::XML::SimpleDocument(); - Q->invoke_build(document, rroot, 0); + Q->invoke_build(_doc, _doc->rroot, 1); A->attach(B, nullptr); A->attach(Q, nullptr); set.add(A); diff --git a/testfiles/src/object-test.cpp b/testfiles/src/object-test.cpp deleted file mode 100644 index 83e90b2ec..000000000 --- a/testfiles/src/object-test.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include "gtest/gtest.h" -#include "object.h" - -class ObjectTest: public testing::Test { -public: - ObjectTest() { - object = new Object("parent"); - childOfChild = new Object("childOfChild"); - child = new Object("child"); - child2 = new Object("child2"); - object2 = new Object("object2"); - child3 = new Object("child3"); - } - ~ObjectTest() { - delete child3; - delete child2; - delete childOfChild; - delete child; - delete object2; - delete object; - } - Object* object; - Object* object2; - Object* child; - Object* childOfChild; - Object* child2; - Object* child3; -}; - -TEST_F(ObjectTest, AddChild) { - EXPECT_EQ(0, object->getChildren().size()); - object->addChild(child); - EXPECT_EQ(1, object->getChildren().size()); - EXPECT_EQ(child, &(object->getChildren().front())); - EXPECT_EQ(object, child->getParent()); -} - -TEST_F(ObjectTest, IsDescendantOf) { - object->addChild(child); - child->addChild(childOfChild); - object->addChild(child2); - object2->addChild(child3); - EXPECT_TRUE(child->isDescendantOf(object)); - EXPECT_TRUE(childOfChild->isDescendantOf(child)); - EXPECT_TRUE(childOfChild->isDescendantOf(object)); - EXPECT_TRUE(child2->isDescendantOf(object)); - EXPECT_TRUE(child3->isDescendantOf(object2)); - EXPECT_FALSE(child->isDescendantOf(child2)); - EXPECT_FALSE(child2->isDescendantOf(child)); - EXPECT_FALSE(object->isDescendantOf(childOfChild)); - EXPECT_FALSE(object->isDescendantOf(child)); - EXPECT_FALSE(object->isDescendantOf(object2)); - EXPECT_FALSE(object2->isDescendantOf(object)); - EXPECT_FALSE(child2->isDescendantOf(child3)); - EXPECT_FALSE(child3->isDescendantOf(child2)); -} diff --git a/testfiles/unittest.cpp b/testfiles/unittest.cpp index 0ec8f0383..e33b4cb43 100644 --- a/testfiles/unittest.cpp +++ b/testfiles/unittest.cpp @@ -16,19 +16,6 @@ #include "inkgc/gc-core.h" #include "inkscape.h" -namespace { - -// Ensure that a known positive test works -TEST(PreTest, WorldIsSane) -{ - EXPECT_EQ(4, 2 + 2); -} - -// Example of type casting to avoid compile warnings. - - -} // namespace - int main(int argc, char **argv) { // setup general environment -- cgit v1.2.3 From 6d5d7e5421a5ac585814bde11866d796d81653cd Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 11 Jun 2016 14:04:09 +0200 Subject: Fix a typo pointed by CR (bzr r14957.1.2) --- src/ui/tools/measure-tool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp index 8b2a734ff..900274afc 100644 --- a/src/ui/tools/measure-tool.cpp +++ b/src/ui/tools/measure-tool.cpp @@ -1203,7 +1203,7 @@ void MeasureTool::showInfoBox(Geom::Point cursor, bool into_groups) Geom::Point pos = desktop->w2d(cursor); double gap = Inkscape::Util::Quantity::convert(7 + fontsize, "px", unit->abbr); if (SP_IS_SHAPE(over)) { - precision_str << _("Lenght") << ": %." << precision << "f %s"; + precision_str << _("Length") << ": %." << precision << "f %s"; measure_str = g_strdup_printf(precision_str.str().c_str(), item_length, unit_name.c_str()); precision_str.str(""); showItemInfoText(pos + (rel_position * zoom),measure_str,fontsize); -- cgit v1.2.3 From d0d3798c68ffc6fe7da70ff3ba22a36f163ee524 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 12:47:12 -0500 Subject: Add in the gtklaunch tool (bzr r14950.1.3) --- snapcraft.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/snapcraft.yaml b/snapcraft.yaml index 99a1ee7af..41d43cd3c 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -24,9 +24,12 @@ parts: plugin: copy files: snapcraft.sh: snapcraft.sh + gtklaunch: + plugin: make + source: https://github.com/dplanella/gtkconf.git apps: inkscape: - command: snapcraft.sh inkscape + command: snapcraft.sh gtk-launch inkscape viewer: - command: snapcraft.sh inkview + command: snapcraft.sh gtk-launch inkview -- cgit v1.2.3 From fb649c19d47e2d83c47fe31b508890d7c4c7393a Mon Sep 17 00:00:00 2001 From: Sebastien Bacher Date: Mon, 20 Jun 2016 12:49:45 -0500 Subject: A bunch more stage packages (bzr r14950.1.4) --- snapcraft.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/snapcraft.yaml b/snapcraft.yaml index 41d43cd3c..200811e96 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -20,6 +20,24 @@ parts: plugin: cmake source: . configflags: ['-DENABLE_BINRELOC=ON'] + stage-packages: + - libaspell15 + - libatkmm-1.6-1v5 + - libcairomm-1.0-1v5 + - libcdr-0.1-1 + - libglibmm-2.4-1v5 + - libgnomevfs2-0 + - libgtkmm-2.4-1v5 + - libgtkspell0 + - liblcms2-2 + - libmagick++-6.q16-5v5 + - libpangomm-1.4-1v5 + - libpoppler-glib8 + - librevenge-0.0-0 + - libvisio-0.1-1 + - libwpg-0.3-3 + - libglib2.0-bin + - light-themes snapcraft-wrapper: plugin: copy files: -- cgit v1.2.3 From 4ae1fc83fa9e0c7ec09cdb3be3dacb7a1877a499 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 12:50:00 -0500 Subject: Giving permissions to the apps (bzr r14950.1.5) --- snapcraft.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/snapcraft.yaml b/snapcraft.yaml index 200811e96..30d14acc3 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -49,5 +49,7 @@ parts: apps: inkscape: command: snapcraft.sh gtk-launch inkscape + plugs: [home, unity7] viewer: command: snapcraft.sh gtk-launch inkview + plugs: [home, unity7] -- cgit v1.2.3 From 3bb8a76358d1d30381e57a9db9dc5329d18011f3 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 20:29:40 -0500 Subject: Making sure to get some modules (bzr r14950.1.6) --- snapcraft.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/snapcraft.yaml b/snapcraft.yaml index 30d14acc3..74c09538a 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -25,6 +25,7 @@ parts: - libatkmm-1.6-1v5 - libcairomm-1.0-1v5 - libcdr-0.1-1 + - libgdk-pixbuf2.0-0 - libglibmm-2.4-1v5 - libgnomevfs2-0 - libgtkmm-2.4-1v5 @@ -38,6 +39,8 @@ parts: - libwpg-0.3-3 - libglib2.0-bin - light-themes + stage: + - -lib/inkscape snapcraft-wrapper: plugin: copy files: -- cgit v1.2.3 From dfbba183bcd15fca6508da6feecde95c0b4f4c20 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 21:54:26 -0500 Subject: Make the relocatable paths relative to the lib install (bzr r14950.1.7) --- src/path-prefix.h | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/path-prefix.h b/src/path-prefix.h index 7f9bcec51..d63fba7fc 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -21,28 +21,28 @@ //#endif /* __cplusplus */ #ifdef ENABLE_BINRELOC -# define INKSCAPE_APPICONDIR BR_DATADIR( "/pixmaps" ) -# define INKSCAPE_ATTRRELDIR BR_DATADIR( "/inkscape/attributes" ) -# define INKSCAPE_BINDDIR BR_DATADIR( "/inkscape/bind" ) -# define INKSCAPE_EXAMPLESDIR BR_DATADIR( "/inkscape/examples" ) -# define INKSCAPE_EXTENSIONDIR BR_DATADIR( "/inkscape/extensions" ) -# define INKSCAPE_FILTERDIR BR_DATADIR( "/inkscape/filters" ) -# define INKSCAPE_GRADIENTSDIR BR_DATADIR( "/inkscape/gradients" ) -# define INKSCAPE_KEYSDIR BR_DATADIR( "/inkscape/keys" ) -# define INKSCAPE_PIXMAPDIR BR_DATADIR( "/inkscape/icons" ) -# define INKSCAPE_MARKERSDIR BR_DATADIR( "/inkscape/markers" ) -# define INKSCAPE_PALETTESDIR BR_DATADIR( "/inkscape/palettes" ) -# define INKSCAPE_PATTERNSDIR BR_DATADIR( "/inkscape/patterns" ) -# define INKSCAPE_SCREENSDIR BR_DATADIR( "/inkscape/screens" ) -# define INKSCAPE_SYMBOLSDIR BR_DATADIR( "/inkscape/symbols" ) -# define INKSCAPE_THEMEDIR BR_DATADIR( "/icons" ) -# define INKSCAPE_TUTORIALSDIR BR_DATADIR( "/inkscape/tutorials" ) -# define INKSCAPE_TEMPLATESDIR BR_DATADIR( "/inkscape/templates" ) -# define INKSCAPE_UIDIR BR_DATADIR( "/inkscape/ui" ) +# define INKSCAPE_APPICONDIR BR_DATADIR( "/../share/pixmaps" ) +# define INKSCAPE_ATTRRELDIR BR_DATADIR( "/../share/inkscape/attributes" ) +# define INKSCAPE_BINDDIR BR_DATADIR( "/../share/inkscape/bind" ) +# define INKSCAPE_EXAMPLESDIR BR_DATADIR( "/../share/inkscape/examples" ) +# define INKSCAPE_EXTENSIONDIR BR_DATADIR( "/../share/inkscape/extensions" ) +# define INKSCAPE_FILTERDIR BR_DATADIR( "/../share/inkscape/filters" ) +# define INKSCAPE_GRADIENTSDIR BR_DATADIR( "/../share/inkscape/gradients" ) +# define INKSCAPE_KEYSDIR BR_DATADIR( "/../share/inkscape/keys" ) +# define INKSCAPE_PIXMAPDIR BR_DATADIR( "/../share/inkscape/icons" ) +# define INKSCAPE_MARKERSDIR BR_DATADIR( "/../share/inkscape/markers" ) +# define INKSCAPE_PALETTESDIR BR_DATADIR( "/../share/inkscape/palettes" ) +# define INKSCAPE_PATTERNSDIR BR_DATADIR( "/../share/inkscape/patterns" ) +# define INKSCAPE_SCREENSDIR BR_DATADIR( "/../share/inkscape/screens" ) +# define INKSCAPE_SYMBOLSDIR BR_DATADIR( "/../share/inkscape/symbols" ) +# define INKSCAPE_THEMEDIR BR_DATADIR( "/../share/icons" ) +# define INKSCAPE_TUTORIALSDIR BR_DATADIR( "/../share/inkscape/tutorials" ) +# define INKSCAPE_TEMPLATESDIR BR_DATADIR( "/../share/inkscape/templates" ) +# define INKSCAPE_UIDIR BR_DATADIR( "/../share/inkscape/ui" ) //CREATE V0.1 support -# define CREATE_GRADIENTSDIR BR_DATADIR( "/create/gradients/gimp" ) -# define CREATE_PALETTESDIR BR_DATADIR( "/create/swatches" ) -# define CREATE_PATTERNSDIR BR_DATADIR( "/create/patterns/vector" ) +# define CREATE_GRADIENTSDIR BR_DATADIR( "/../share/create/gradients/gimp" ) +# define CREATE_PALETTESDIR BR_DATADIR( "/../share/create/swatches" ) +# define CREATE_PATTERNSDIR BR_DATADIR( "/../share/create/patterns/vector" ) #else # ifdef WIN32 # define INKSCAPE_APPICONDIR WIN32_DATADIR("pixmaps") -- cgit v1.2.3 From 61343ac879caaf278c1b5e83c5f05d5798affae6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 22:37:49 -0500 Subject: Adjust directories to be lib based (bzr r14950.1.8) --- src/path-prefix.h | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/path-prefix.h b/src/path-prefix.h index d63fba7fc..3e226dd97 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -21,28 +21,29 @@ //#endif /* __cplusplus */ #ifdef ENABLE_BINRELOC -# define INKSCAPE_APPICONDIR BR_DATADIR( "/../share/pixmaps" ) -# define INKSCAPE_ATTRRELDIR BR_DATADIR( "/../share/inkscape/attributes" ) -# define INKSCAPE_BINDDIR BR_DATADIR( "/../share/inkscape/bind" ) -# define INKSCAPE_EXAMPLESDIR BR_DATADIR( "/../share/inkscape/examples" ) -# define INKSCAPE_EXTENSIONDIR BR_DATADIR( "/../share/inkscape/extensions" ) -# define INKSCAPE_FILTERDIR BR_DATADIR( "/../share/inkscape/filters" ) -# define INKSCAPE_GRADIENTSDIR BR_DATADIR( "/../share/inkscape/gradients" ) -# define INKSCAPE_KEYSDIR BR_DATADIR( "/../share/inkscape/keys" ) -# define INKSCAPE_PIXMAPDIR BR_DATADIR( "/../share/inkscape/icons" ) -# define INKSCAPE_MARKERSDIR BR_DATADIR( "/../share/inkscape/markers" ) -# define INKSCAPE_PALETTESDIR BR_DATADIR( "/../share/inkscape/palettes" ) -# define INKSCAPE_PATTERNSDIR BR_DATADIR( "/../share/inkscape/patterns" ) -# define INKSCAPE_SCREENSDIR BR_DATADIR( "/../share/inkscape/screens" ) -# define INKSCAPE_SYMBOLSDIR BR_DATADIR( "/../share/inkscape/symbols" ) -# define INKSCAPE_THEMEDIR BR_DATADIR( "/../share/icons" ) -# define INKSCAPE_TUTORIALSDIR BR_DATADIR( "/../share/inkscape/tutorials" ) -# define INKSCAPE_TEMPLATESDIR BR_DATADIR( "/../share/inkscape/templates" ) -# define INKSCAPE_UIDIR BR_DATADIR( "/../share/inkscape/ui" ) +# define INKSCAPE_LIBPREFIX "/../.." +# define INKSCAPE_APPICONDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/pixmaps" ) +# define INKSCAPE_ATTRRELDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/attributes" ) +# define INKSCAPE_BINDDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/bind" ) +# define INKSCAPE_EXAMPLESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/examples" ) +# define INKSCAPE_EXTENSIONDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/extensions" ) +# define INKSCAPE_FILTERDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/filters" ) +# define INKSCAPE_GRADIENTSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/gradients" ) +# define INKSCAPE_KEYSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/keys" ) +# define INKSCAPE_PIXMAPDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/icons" ) +# define INKSCAPE_MARKERSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/markers" ) +# define INKSCAPE_PALETTESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/palettes" ) +# define INKSCAPE_PATTERNSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/patterns" ) +# define INKSCAPE_SCREENSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/screens" ) +# define INKSCAPE_SYMBOLSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/symbols" ) +# define INKSCAPE_THEMEDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/icons" ) +# define INKSCAPE_TUTORIALSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/tutorials" ) +# define INKSCAPE_TEMPLATESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/templates" ) +# define INKSCAPE_UIDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/ui" ) //CREATE V0.1 support -# define CREATE_GRADIENTSDIR BR_DATADIR( "/../share/create/gradients/gimp" ) -# define CREATE_PALETTESDIR BR_DATADIR( "/../share/create/swatches" ) -# define CREATE_PATTERNSDIR BR_DATADIR( "/../share/create/patterns/vector" ) +# define CREATE_GRADIENTSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/create/gradients/gimp" ) +# define CREATE_PALETTESDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/create/swatches" ) +# define CREATE_PATTERNSDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/create/patterns/vector" ) #else # ifdef WIN32 # define INKSCAPE_APPICONDIR WIN32_DATADIR("pixmaps") -- cgit v1.2.3 From 882758ec9a24d6a13667c314eed46ba097a2d4ee Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 20 Jun 2016 22:38:08 -0500 Subject: Make sure that our share directory exits so that we can ../../ it (bzr r14950.1.9) --- snapcraft.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/snapcraft.yaml b/snapcraft.yaml index 74c09538a..3451607b8 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -39,12 +39,13 @@ parts: - libwpg-0.3-3 - libglib2.0-bin - light-themes - stage: - - -lib/inkscape + snap: + - -lib/inkscape/*.a snapcraft-wrapper: plugin: copy files: snapcraft.sh: snapcraft.sh + README: lib/share/README gtklaunch: plugin: make source: https://github.com/dplanella/gtkconf.git -- cgit v1.2.3 From 1a20f71053ab79c1f130ce592a2557a79d03b195 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 21 Jun 2016 08:08:22 -0500 Subject: Adding a comment to explain what we're doing (bzr r14950.1.10) --- src/path-prefix.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/path-prefix.h b/src/path-prefix.h index 3e226dd97..8a39ede84 100644 --- a/src/path-prefix.h +++ b/src/path-prefix.h @@ -21,6 +21,10 @@ //#endif /* __cplusplus */ #ifdef ENABLE_BINRELOC +/* The way that we're building now is with a shared library between Inkscape + and Inkview, and the code will find the path to the library then. But we + don't really want that. This prefix then pulls things out of the lib directory + and back into the root install dir. */ # define INKSCAPE_LIBPREFIX "/../.." # define INKSCAPE_APPICONDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/pixmaps" ) # define INKSCAPE_ATTRRELDIR BR_DATADIR( INKSCAPE_LIBPREFIX "/share/inkscape/attributes" ) -- cgit v1.2.3 From 1636c1dd1651780d01759676b194312529f211f7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sat, 25 Jun 2016 22:24:26 +0200 Subject: Moved next functions, added namespace, renamed range functions (bzr r14954.1.10) --- src/desktop-style.cpp | 6 +- src/extension/execution-env.cpp | 2 +- src/extension/implementation/implementation.cpp | 2 +- src/extension/implementation/script.cpp | 2 +- src/extension/internal/bitmap/imagemagick.cpp | 4 +- src/extension/internal/bluredge.cpp | 2 +- src/extension/internal/filter/filter.cpp | 2 +- src/extension/internal/grid.cpp | 2 +- src/extension/plugins/grid2/grid.cpp | 2 +- src/gradient-chemistry.cpp | 4 +- src/gradient-drag.cpp | 6 +- src/object-set.cpp | 31 +++++++--- src/object-set.h | 27 +++++++- src/path-chemistry.cpp | 10 +-- src/selcue.cpp | 8 +-- src/selection-chemistry.cpp | 82 ++++++++++++------------- src/selection-describer.cpp | 2 +- src/selection.cpp | 18 +----- src/selection.h | 16 ----- src/seltrans.cpp | 14 ++--- src/snap.cpp | 2 +- src/splivarot.cpp | 10 +-- src/text-chemistry.cpp | 24 ++++---- src/trace/trace.cpp | 2 +- src/ui/clipboard.cpp | 6 +- src/ui/dialog/align-and-distribute.cpp | 16 ++--- src/ui/dialog/clonetiler.cpp | 8 +-- src/ui/dialog/export.cpp | 14 ++--- src/ui/dialog/filter-effects-dialog.cpp | 6 +- src/ui/dialog/find.cpp | 2 +- src/ui/dialog/glyphs.cpp | 4 +- src/ui/dialog/grid-arrange-tab.cpp | 12 ++-- src/ui/dialog/icon-preview.cpp | 2 +- src/ui/dialog/objects.cpp | 2 +- src/ui/dialog/pixelartdialog.cpp | 2 +- src/ui/dialog/polar-arrange-tab.cpp | 2 +- src/ui/dialog/svg-fonts-dialog.cpp | 4 +- src/ui/dialog/swatches.cpp | 2 +- src/ui/dialog/tags.cpp | 4 +- src/ui/dialog/text-edit.cpp | 6 +- src/ui/dialog/transformation.cpp | 14 ++--- src/ui/interface.cpp | 2 +- src/ui/tools/connector-tool.cpp | 2 +- src/ui/tools/eraser-tool.cpp | 4 +- src/ui/tools/gradient-tool.cpp | 14 ++--- src/ui/tools/lpe-tool.cpp | 2 +- src/ui/tools/mesh-tool.cpp | 12 ++-- src/ui/tools/node-tool.cpp | 4 +- src/ui/tools/select-tool.cpp | 2 +- src/ui/tools/spray-tool.cpp | 10 +-- src/ui/tools/tool-base.cpp | 2 +- src/ui/tools/tweak-tool.cpp | 6 +- src/ui/widget/style-subject.cpp | 2 +- src/vanishing-point.cpp | 10 +-- src/widgets/arc-toolbar.cpp | 8 +-- src/widgets/connector-toolbar.cpp | 6 +- src/widgets/fill-style.cpp | 2 +- src/widgets/gradient-toolbar.cpp | 6 +- src/widgets/mesh-toolbar.cpp | 4 +- src/widgets/pencil-toolbar.cpp | 4 +- src/widgets/rect-toolbar.cpp | 4 +- src/widgets/spiral-toolbar.cpp | 4 +- src/widgets/star-toolbar.cpp | 12 ++-- src/widgets/stroke-style.cpp | 6 +- src/widgets/text-toolbar.cpp | 8 +-- testfiles/src/object-set-test.cpp | 6 +- 66 files changed, 270 insertions(+), 258 deletions(-) diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index 7f9b46c7d..6fab01f16 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -194,7 +194,7 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write sp_repr_css_merge(css_write, css); sp_css_attr_unset_uris(css_write); prefs->mergeStyle("/desktop/style", css_write); - std::vector const itemlist = desktop->selection->itemList(); + std::vector const itemlist = desktop->selection->items(); for (std::vector::const_iterator i = itemlist.begin(); i!= itemlist.end(); ++i) { /* last used styles for 3D box faces are stored separately */ SPObject *obj = *i; @@ -234,7 +234,7 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write sp_repr_css_merge(css_no_text, css); css_no_text = sp_css_attr_unset_text(css_no_text); - std::vector const itemlist = desktop->selection->itemList(); + std::vector const itemlist = desktop->selection->items(); for (std::vector::const_iterator i = itemlist.begin(); i!= itemlist.end(); ++i) { SPItem *item = *i; @@ -1917,7 +1917,7 @@ sp_desktop_query_style(SPDesktop *desktop, SPStyle *style, int property) // otherwise, do querying and averaging over selection if (desktop->selection != NULL) { - return sp_desktop_query_style_from_list (desktop->selection->itemList(), style, property); + return sp_desktop_query_style_from_list (desktop->selection->items(), style, property); } return QUERY_STYLE_NOTHING; diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp index d5c80f26e..2b0183d4b 100644 --- a/src/extension/execution-env.cpp +++ b/src/extension/execution-env.cpp @@ -58,7 +58,7 @@ ExecutionEnv::ExecutionEnv (Effect * effect, Inkscape::UI::View::View * doc, Imp sp_namedview_document_from_window(desktop); if (desktop != NULL) { - std::vector selected = desktop->getSelection()->itemList(); + std::vector selected = desktop->getSelection()->items(); for(std::vector::const_iterator x = selected.begin(); x != selected.end(); ++x){ Glib::ustring selected_id; selected_id = (*x)->getId(); diff --git a/src/extension/implementation/implementation.cpp b/src/extension/implementation/implementation.cpp index 92a8a2833..eb1213a84 100644 --- a/src/extension/implementation/implementation.cpp +++ b/src/extension/implementation/implementation.cpp @@ -46,7 +46,7 @@ Gtk::Widget *Implementation::prefs_effect(Inkscape::Extension::Effect *module, I SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node const* first_select = NULL; if (!selected.empty()) { const SPItem * item = selected[0]; diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp index 01323bee2..0acc99aed 100644 --- a/src/extension/implementation/script.cpp +++ b/src/extension/implementation/script.cpp @@ -690,7 +690,7 @@ void Script::effect(Inkscape::Extension::Effect *module, } std::vector selected = - desktop->getSelection()->itemList(); //desktop should not be NULL since doc was checked and desktop is a casted pointer + desktop->getSelection()->items(); //desktop should not be NULL since doc was checked and desktop is a casted pointer for(std::vector::const_iterator x = selected.begin(); x != selected.end(); ++x){ Glib::ustring selected_id; selected_id += "--id="; diff --git a/src/extension/internal/bitmap/imagemagick.cpp b/src/extension/internal/bitmap/imagemagick.cpp index a235dcb0f..707cd763d 100644 --- a/src/extension/internal/bitmap/imagemagick.cpp +++ b/src/extension/internal/bitmap/imagemagick.cpp @@ -65,7 +65,7 @@ ImageMagickDocCache::ImageMagickDocCache(Inkscape::UI::View::View * view) : _imageItems(NULL) { SPDesktop *desktop = (SPDesktop*)view; - const std::vector selectedItemList = desktop->selection->itemList(); + const std::vector selectedItemList = desktop->selection->items(); int selectCount = selectedItemList.size(); // Init the data-holders @@ -235,7 +235,7 @@ ImageMagick::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::Vie { SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node * first_select = NULL; if (!selected.empty()) { first_select = (selected.front())->getRepr(); diff --git a/src/extension/internal/bluredge.cpp b/src/extension/internal/bluredge.cpp index 4a04e3c33..6dc788f17 100644 --- a/src/extension/internal/bluredge.cpp +++ b/src/extension/internal/bluredge.cpp @@ -62,7 +62,7 @@ BlurEdge::effect (Inkscape::Extension::Effect *module, Inkscape::UI::View::View double old_offset = prefs->getDouble("/options/defaultoffsetwidth/value", 1.0, "px"); // TODO need to properly refcount the items, at least - std::vector items(selection->itemList()); + std::vector items(selection->items()); selection->clear(); for(std::vector::iterator item = items.begin(); diff --git a/src/extension/internal/filter/filter.cpp b/src/extension/internal/filter/filter.cpp index 25e89bbf3..acfcaed0e 100644 --- a/src/extension/internal/filter/filter.cpp +++ b/src/extension/internal/filter/filter.cpp @@ -125,7 +125,7 @@ void Filter::effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::Vie Inkscape::Selection * selection = ((SPDesktop *)document)->selection; // TODO need to properly refcount the items, at least - std::vector items(selection->itemList()); + std::vector items(selection->items()); Inkscape::XML::Document * xmldoc = document->doc()->getReprDoc(); Inkscape::XML::Node * defsrepr = document->doc()->getDefs()->getRepr(); diff --git a/src/extension/internal/grid.cpp b/src/extension/internal/grid.cpp index c766bd828..fd1b311a8 100644 --- a/src/extension/internal/grid.cpp +++ b/src/extension/internal/grid.cpp @@ -180,7 +180,7 @@ Grid::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View { SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node * first_select = NULL; if (!selected.empty()) { first_select = selected[0]->getRepr(); diff --git a/src/extension/plugins/grid2/grid.cpp b/src/extension/plugins/grid2/grid.cpp index 6880c574d..c938d1ec4 100644 --- a/src/extension/plugins/grid2/grid.cpp +++ b/src/extension/plugins/grid2/grid.cpp @@ -186,7 +186,7 @@ Grid::prefs_effect(Inkscape::Extension::Effect *module, Inkscape::UI::View::View { SPDocument * current_document = view->doc(); - std::vector selected = ((SPDesktop *)view)->getSelection()->itemList(); + std::vector selected = ((SPDesktop *) view)->getSelection()->items(); Inkscape::XML::Node * first_select = NULL; if (!selected.empty()) { first_select = selected[0]->getRepr(); diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index edeb523d7..698cf5012 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -1570,7 +1570,7 @@ void sp_gradient_invert_selected_gradients(SPDesktop *desktop, Inkscape::PaintTa { Inkscape::Selection *selection = desktop->getSelection(); - const std::vector list=selection->itemList(); + const std::vector list= selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { sp_item_gradient_invert_vector_color(*i, fill_or_stroke); } @@ -1595,7 +1595,7 @@ void sp_gradient_reverse_selected_gradients(SPDesktop *desktop) if (drag && !drag->selected.empty()) { drag->selected_reverse_vector(); } else { // If no drag or no dragger selected, act on selection (both fill and stroke gradients) - const std::vector list=selection->itemList(); + const std::vector list= selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { sp_item_gradient_reverse_vector(*i, Inkscape::FOR_FILL); sp_item_gradient_reverse_vector(*i, Inkscape::FOR_STROKE); diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 613dc2fc1..3d1cefd4f 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -2070,7 +2070,7 @@ void GrDrag::updateDraggers() this->draggers.clear(); g_return_if_fail(this->selection != NULL); - std::vector list = this->selection->itemList(); + std::vector list = this->selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { SPItem *item = *i; SPStyle *style = item->style; @@ -2138,7 +2138,7 @@ void GrDrag::updateLines() g_return_if_fail(this->selection != NULL); - std::vector list = this->selection->itemList(); + std::vector list = this->selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { SPItem *item = *i; @@ -2282,7 +2282,7 @@ void GrDrag::updateLevels() g_return_if_fail (this->selection != NULL); - std::vector list = this->selection->itemList(); + std::vector list = this->selection->items(); for (std::vector::const_iterator i = list.begin(); i != list.end(); ++i) { SPItem *item = *i; Geom::OptRect rect = item->desktopVisualBounds(); diff --git a/src/object-set.cpp b/src/object-set.cpp index d282e7894..627544a21 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -16,6 +16,7 @@ #include "persp3d.h" #include "preferences.h" +namespace Inkscape { bool ObjectSet::add(SPObject* object) { g_return_val_if_fail(object != NULL, false); @@ -202,7 +203,7 @@ SPItem *ObjectSet::largestItem(CompareSize compare) { } SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { - std::vector const items = itemList(); + std::vector const items = const_cast(this)->items(); gdouble max = sml ? 1e18 : 0; SPItem *ist = NULL; @@ -226,10 +227,10 @@ SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { return ist; } -SPObjectRange ObjectSet::range() { +SPObjectRange ObjectSet::objects() { return SPObjectRange(container.get().begin(), container.get().end()); } -std::vector ObjectSet::itemList() { +std::vector ObjectSet::items() { std::vector tmp = std::vector(container.begin(), container.end()); std::vector result; std::remove_if(tmp.begin(), tmp.end(), [](SPObject* o){return !SP_IS_ITEM(o);}); @@ -237,6 +238,18 @@ std::vector ObjectSet::itemList() { return result; } +std::vector ObjectSet::xmlNodes() { + std::vector list = items(); + std::vector result; + std::transform(list.begin(), list.end(), std::back_inserter(result), [](SPItem* item) { return item->getRepr(); }); + return result; +} + +Inkscape::XML::Node *ObjectSet::singleRepr() { + SPObject *obj = single(); + return obj ? obj->getRepr() : nullptr; +} + void ObjectSet::set(SPObject *object) { _clear(); _add(object); @@ -273,7 +286,7 @@ Geom::OptRect ObjectSet::bounds(SPItem::BBoxType type) const Geom::OptRect ObjectSet::geometricBounds() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); Geom::OptRect bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { @@ -284,7 +297,7 @@ Geom::OptRect ObjectSet::geometricBounds() const Geom::OptRect ObjectSet::visualBounds() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); Geom::OptRect bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { @@ -305,7 +318,7 @@ Geom::OptRect ObjectSet::preferredBounds() const Geom::OptRect ObjectSet::documentBounds(SPItem::BBoxType type) const { Geom::OptRect bbox; - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); if (items.empty()) return bbox; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { @@ -319,7 +332,7 @@ Geom::OptRect ObjectSet::documentBounds(SPItem::BBoxType type) const // If we have a selection of multiple items, then the center of the first item // will be returned; this is also the case in SelTrans::centerRequest() boost::optional ObjectSet::center() const { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); if (!items.empty()) { SPItem *first = items.back(); // from the first item in selection if (first->isCenterSet()) { // only if set explicitly @@ -381,4 +394,6 @@ void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { } _3dboxes.erase(b); } -} \ No newline at end of file +} + +} // namespace Inkscape diff --git a/src/object-set.h b/src/object-set.h index 05264a3ea..49a875562 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -28,6 +28,12 @@ class SPBox3D; class Persp3D; +namespace Inkscape { + +namespace XML { +class Node; +} + struct hashed{}; struct random_access{}; @@ -54,6 +60,12 @@ typedef boost::any_range< SPItem* const&, std::ptrdiff_t> SPItemRange; +typedef boost::any_range< + XML::Node*, + boost::random_access_traversal_tag, + XML::Node* const&, + std::ptrdiff_t> XMLNodeRange; + class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; @@ -144,10 +156,20 @@ public: SPItem *largestItem(CompareSize compare); /** Returns the list of selected objects. */ - SPObjectRange range(); + SPObjectRange objects(); /** Returns the list of selected SPItems. */ - std::vector itemList(); + std::vector items(); + + /** Returns a list of the xml nodes of all selected objects. */ + std::vector xmlNodes(); + + /** + * Returns a single selected object's xml node. + * + * @return NULL unless exactly one object is selected + */ + XML::Node *singleRepr(); /** * Selects exactly the specified objects. @@ -213,5 +235,6 @@ protected: }; +} // namespace Inkscape #endif //INKSCAPE_PROTOTYPE_OBJECTSET_H diff --git a/src/path-chemistry.cpp b/src/path-chemistry.cpp index 1a345b565..37d242b6b 100644 --- a/src/path-chemistry.cpp +++ b/src/path-chemistry.cpp @@ -57,7 +57,7 @@ sp_selected_path_combine(SPDesktop *desktop, bool skip_undo) Inkscape::Selection *selection = desktop->getSelection(); SPDocument *doc = desktop->getDocument(); - std::vector items(selection->itemList()); + std::vector items(selection->items()); if (items.size() < 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to combine.")); @@ -203,7 +203,7 @@ sp_selected_path_break_apart(SPDesktop *desktop, bool skip_undo) bool did = false; - std::vector itemlist(selection->itemList()); + std::vector itemlist(selection->items()); for (std::vector::const_iterator i = itemlist.begin(); i != itemlist.end(); ++i){ SPItem *item = *i; @@ -303,7 +303,7 @@ sp_selected_path_to_curves(Inkscape::Selection *selection, SPDesktop *desktop, b desktop->setWaitingCursor(); } - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); std::vector to_select; selection->clear(); std::vector items(selected); @@ -334,7 +334,7 @@ void sp_selected_to_lpeitems(SPDesktop *desktop) return; } - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); std::vector to_select; selection->clear(); std::vector items(selected); @@ -603,7 +603,7 @@ void sp_selected_path_reverse(SPDesktop *desktop) { Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->itemList(); + std::vector items = selection->items(); if (items.empty()) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select path(s) to reverse.")); diff --git a/src/selcue.cpp b/src/selcue.cpp index 297b9fffc..13248a553 100644 --- a/src/selcue.cpp +++ b/src/selcue.cpp @@ -96,14 +96,14 @@ void Inkscape::SelCue::_updateItemBboxes(Inkscape::Preferences *prefs) void Inkscape::SelCue::_updateItemBboxes(gint mode, int prefs_bbox) { - const std::vector items = _selection->itemList(); + const std::vector items = _selection->items(); if (_item_bboxes.size() != items.size()) { _newItemBboxes(); return; } int bcount = 0; - std::vector ll=_selection->itemList(); + std::vector ll= _selection->items(); for (std::vector::const_iterator l = ll.begin(); l != ll.end(); ++l) { SPItem *item = *l; SPCanvasItem* box = _item_bboxes[bcount ++]; @@ -146,7 +146,7 @@ void Inkscape::SelCue::_newItemBboxes() int prefs_bbox = prefs->getBool("/tools/bounding_box"); - std::vector ll=_selection->itemList(); + std::vector ll= _selection->items(); for (std::vector::const_iterator l = ll.begin(); l != ll.end(); ++l) { SPItem *item = *l; @@ -201,7 +201,7 @@ void Inkscape::SelCue::_newTextBaselines() } _text_baselines.clear(); - std::vector ll = _selection->itemList(); + std::vector ll = _selection->items(); for (std::vector::const_iterator l=ll.begin();l!=ll.end();++l) { SPItem *item = *l; diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index a13f3e64d..ded776fea 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -282,7 +282,7 @@ void SelectionHelper::fixSelection(SPDesktop *dt) std::vector items ; - std::vector const selList = selection->itemList(); + std::vector const selList = selection->items(); for( std::vector::const_reverse_iterator i = selList.rbegin(); i != selList.rend(); ++i ) { SPItem *item = *i; @@ -409,7 +409,7 @@ void sp_selection_delete(SPDesktop *desktop) desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Nothing was deleted.")); return; } - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); selection->clear(); sp_selection_delete_impl(selected); desktop->currentLayer()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); @@ -454,7 +454,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to duplicate.")); return; } - std::vector reprs(selection->reprList()); + std::vector reprs(selection->xmlNodes()); if(duplicateLayer){ reprs.clear(); @@ -624,7 +624,7 @@ static void sp_edit_select_all_full(SPDesktop *dt, bool force_all_layers, bool i std::vector exclude; if (invert) { - exclude = selection->itemList(); + exclude = selection->items(); } if (force_all_layers) @@ -763,7 +763,7 @@ void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) return; } - std::vector p (selection->reprList()); + std::vector p (selection->xmlNodes()); selection->clear(); @@ -798,7 +798,7 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("No objects selected to pop out of group.")); return; } - std::vector selection_list = selection->itemList(); + std::vector selection_list = selection->items(); std::vector::const_iterator item = selection_list.begin(); // leaving this because it will be useful for // future implementation of complex pop ungrouping @@ -831,7 +831,7 @@ void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) } // first check whether there is anything to ungroup - std::vector old_select = selection->itemList(); + std::vector old_select = selection->items(); std::vector new_select; GSList *groups = NULL; for (std::vector::const_iterator item = old_select.begin(); item!=old_select.end(); ++item) { @@ -983,7 +983,7 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) { - std::vector items= selection->itemList(); + std::vector items= selection->items(); if (items.empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); return; @@ -1040,7 +1040,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto return; } - std::vector items = selection->itemList(); + std::vector items = selection->items(); SPGroup const *group = sp_item_list_common_parent_group(items); if (!group) { @@ -1048,7 +1048,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto return; } - std::vector rl(selection->reprList()); + std::vector rl(selection->xmlNodes()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_iterator l=rl.begin(); l!=rl.end();++l) { @@ -1062,7 +1062,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); if (items.empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); return; @@ -1124,7 +1124,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des return; } - std::vector items =selection->itemList(); + std::vector items = selection->items(); SPGroup const *group = sp_item_list_common_parent_group(items); if (!group) { @@ -1132,7 +1132,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des return; } - std::vector rl(selection->reprList()); + std::vector rl(selection->xmlNodes()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { @@ -1287,7 +1287,7 @@ void sp_selection_remove_livepatheffect(SPDesktop *desktop) desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to remove live path effects from.")); return; } - std::vector list=selection->itemList(); + std::vector list= selection->items(); for ( std::vector::const_iterator itemlist=list.begin();itemlist!=list.end();++itemlist) { SPItem *item = *itemlist; @@ -1368,7 +1368,7 @@ void sp_selection_to_next_layer(SPDesktop *dt, bool suppressDone) return; } - std::vector items(selection->itemList()); + std::vector items(selection->items()); bool no_more = false; // Set to true, if no more layers above SPObject *next=Inkscape::next_layer(dt->currentRoot(), dt->currentLayer()); @@ -1412,7 +1412,7 @@ void sp_selection_to_prev_layer(SPDesktop *dt, bool suppressDone) return; } - const std::vector items(selection->itemList()); + const std::vector items(selection->items()); bool no_more = false; // Set to true, if no more layers below SPObject *next=Inkscape::previous_layer(dt->currentRoot(), dt->currentLayer()); @@ -1455,7 +1455,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone) return; } - std::vector items(selection->itemList()); + std::vector items(selection->items()); if (moveto) { selection->clear(); @@ -1506,7 +1506,7 @@ static bool selection_contains_both_clone_and_original(Inkscape::Selection *selection) { bool clone_with_original = false; - std::vector items = selection->itemList(); + std::vector items = selection->items(); for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if (item) { @@ -1551,7 +1551,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons persp3d_apply_affine_transformation(transf_persp, affine); } - std::vector items = selection->itemList(); + std::vector items = selection->items(); for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; @@ -1722,7 +1722,7 @@ void sp_selection_remove_transform(SPDesktop *desktop) Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->reprList(); + std::vector items = selection->xmlNodes(); for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { (*l)->setAttribute("transform", NULL, false); } @@ -1822,7 +1822,7 @@ void sp_selection_rotate_90(SPDesktop *desktop, bool ccw) if (selection->isEmpty()) return; - std::vector items = selection->itemList(); + std::vector items = selection->items(); Geom::Rotate const rot_90(Geom::Point(0, ccw ? 1 : -1)); // pos. or neg. rotation, depending on the value of ccw for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; @@ -1886,7 +1886,7 @@ void sp_select_same_fill_stroke_style(SPDesktop *desktop, gboolean fill, gboolea std::vector all_matches; Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->itemList(); + std::vector items = selection->items(); std::vector tmp; for (std::vector::const_iterator iter=all_list.begin();iter!=all_list.end();++iter) { @@ -1943,7 +1943,7 @@ void sp_select_same_object_type(SPDesktop *desktop) Inkscape::Selection *selection = desktop->getSelection(); - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator sel_iter=items.begin();sel_iter!=items.end();++sel_iter) { SPItem *sel = *sel_iter; if (sel) { @@ -2456,7 +2456,7 @@ sp_selection_item_next(SPDesktop *desktop) root = desktop->currentRoot(); } - SPItem *item=next_item_from_list(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); + SPItem *item=next_item_from_list(desktop, selection->items(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); if (item) { selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer); @@ -2486,7 +2486,7 @@ sp_selection_item_prev(SPDesktop *desktop) root = desktop->currentRoot(); } - SPItem *item=next_item_from_list(desktop, selection->itemList(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); + SPItem *item=next_item_from_list(desktop, selection->items(), root, SP_CYCLING == SP_CYCLE_VISIBLE, inlayer, onlyvisible, onlysensitive); if (item) { selection->set(item, PREFS_SELECTION_LAYER_RECURSIVE == inlayer); @@ -2603,7 +2603,7 @@ void sp_selection_clone(SPDesktop *desktop) return; } - std::vector reprs (selection->reprList()); + std::vector reprs (selection->xmlNodes()); selection->clear(); @@ -2662,7 +2662,7 @@ sp_selection_relink(SPDesktop *desktop) // Get a copy of current selection. bool relinked = false; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; @@ -2700,7 +2700,7 @@ sp_selection_unlink(SPDesktop *desktop) // Get a copy of current selection. std::vector new_select; bool unlinked = false; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_reverse_iterator i=items.rbegin();i!=items.rend();++i){ SPItem *item = *i; @@ -2767,7 +2767,7 @@ sp_select_clone_original(SPDesktop *desktop) // Check if other than two objects are selected - std::vector items=selection->itemList(); + std::vector items= selection->items(); if (items.size() != 1 || !item) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, error); return; @@ -2865,7 +2865,7 @@ void sp_selection_clone_original_path_lpe(SPDesktop *desktop) Inkscape::SVGOStringStream os; SPObject * firstItem = NULL; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_SHAPE(*i) || SP_IS_TEXT(*i)) { if (firstItem) { @@ -2950,7 +2950,7 @@ void sp_selection_to_marker(SPDesktop *desktop, bool apply) Geom::Point center( *c - corner ); // As defined by rotation center center[Geom::Y] = -center[Geom::Y]; - std::vector items(selection->itemList()); + std::vector items(selection->items()); //items = g_slist_sort(items, (GCompareFunc) sp_object_compare_position); // Why needed? @@ -3024,7 +3024,7 @@ void sp_selection_to_guides(SPDesktop *desktop) SPDocument *doc = desktop->getDocument(); Inkscape::Selection *selection = desktop->getSelection(); // we need to copy the list because it gets reset when objects are deleted - std::vector items(selection->itemList()); + std::vector items(selection->items()); if (items.empty()) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to convert to guides.")); @@ -3090,7 +3090,7 @@ void sp_selection_symbol(SPDesktop *desktop, bool /*apply*/ ) doc->ensureUpToDate(); - std::vector items(selection->range().begin(), selection->range().end()); + std::vector items(selection->objects().begin(), selection->objects().end()); sort(items.begin(),items.end(),sp_object_compare_position_bool); // Keep track of parent, this is where will be inserted. @@ -3302,7 +3302,7 @@ sp_selection_tile(SPDesktop *desktop, bool apply) move_p[Geom::Y] = -move_p[Geom::Y]; Geom::Affine move = Geom::Affine(Geom::Translate(move_p)); - std::vector items (selection->itemList()); + std::vector items (selection->items()); sort(items.begin(),items.end(),sp_object_compare_position_bool); @@ -3407,7 +3407,7 @@ void sp_selection_untile(SPDesktop *desktop) bool did = false; - std::vector items(selection->itemList()); + std::vector items(selection->items()); for (std::vector::const_reverse_iterator i=items.rbegin();i!=items.rend();++i){ SPItem *item = *i; @@ -3472,7 +3472,7 @@ void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring return; } - std::vector const reprlst = selection->reprList(); + std::vector const reprlst = selection->xmlNodes(); bool filename_search = TRUE; bool xdpi_search = TRUE; bool ydpi_search = TRUE; @@ -3564,7 +3564,7 @@ void sp_selection_create_bitmap_copy(SPDesktop *desktop) } // List of the items to show; all others will be hidden - std::vector items(selection->itemList()); + std::vector items(selection->items()); // Sort items so that the topmost comes last sort(items.begin(),items.end(),sp_item_repr_compare_position_bool); @@ -3765,7 +3765,7 @@ void sp_selection_set_clipgroup(SPDesktop *desktop) return; } - std::vector p(selection->reprList()); + std::vector p(selection->xmlNodes()); sort(p.begin(),p.end(),sp_repr_compare_position_bool); @@ -3875,7 +3875,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ if ( apply_to_layer && is_empty) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to create clippath or mask from.")); return; - } else if (!apply_to_layer && ( is_empty || selection->itemList().size()==1 )) { + } else if (!apply_to_layer && ( is_empty || selection->items().size()==1 )) { desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select mask object and object(s) to apply clippath or mask to.")); return; } @@ -3890,7 +3890,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ doc->ensureUpToDate(); - std::vector items(selection->itemList()); + std::vector items(selection->items()); sort(items.begin(),items.end(),sp_object_compare_position_bool); @@ -4052,7 +4052,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { gchar const *attributeName = apply_clip_path ? "clip-path" : "mask"; std::map referenced_objects; - std::vector items(selection->itemList()); + std::vector items(selection->items()); selection->clear(); GSList *items_to_ungroup = NULL; diff --git a/src/selection-describer.cpp b/src/selection-describer.cpp index ddc7a0d10..93808ed54 100644 --- a/src/selection-describer.cpp +++ b/src/selection-describer.cpp @@ -122,7 +122,7 @@ void SelectionDescriber::_selectionModified(Inkscape::Selection *selection, guin } void SelectionDescriber::_updateMessageFromSelection(Inkscape::Selection *selection) { - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); if (items.empty()) { // no items _context.set(Inkscape::NORMAL_MESSAGE, _when_nothing); diff --git a/src/selection.cpp b/src/selection.cpp index 32e27f2d4..94b64a7bc 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -130,25 +130,13 @@ void Selection::setReprList(std::vector const &list) { _emitChanged(); } -std::vector Selection::reprList() { - std::vector list = itemList(); - std::vector result; - std::transform(list.begin(), list.end(), std::back_inserter(result), [](SPItem* item) { return item->getRepr(); }); - return result; -} - -Inkscape::XML::Node *Selection::singleRepr() { - SPObject *obj = single(); - return obj ? obj->getRepr() : nullptr; -} - std::vector Selection::getSnapPoints(SnapPreferences const *snapprefs) const { std::vector p; if (snapprefs != NULL){ SnapPreferences snapprefs_dummy = *snapprefs; // create a local copy of the snapping prefs snapprefs_dummy.setTargetSnappable(Inkscape::SNAPTARGET_ROTATION_CENTER, false); // locally disable snapping to the item center - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *this_item = *iter; this_item->getSnappoints(p, &snapprefs_dummy); @@ -174,7 +162,7 @@ SPObject *Selection::_objectForXMLNode(Inkscape::XML::Node *repr) const { } size_t Selection::numberOfLayers() { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); std::set layers; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPObject *layer = _layers->layerForObject(*iter); @@ -185,7 +173,7 @@ size_t Selection::numberOfLayers() { } size_t Selection::numberOfParents() { - std::vector const items = const_cast(this)->itemList(); + std::vector const items = const_cast(this)->items(); std::set parents; for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPObject *parent = (*iter)->parent; diff --git a/src/selection.h b/src/selection.h index 8b1bb25fa..7027a388f 100644 --- a/src/selection.h +++ b/src/selection.h @@ -39,12 +39,6 @@ class Node; namespace Inkscape { -typedef boost::any_range< - XML::Node*, - boost::random_access_traversal_tag, - XML::Node* const&, - std::ptrdiff_t> XMLNodeRange; - /** * The set of selected SPObjects for a given document and layer model. * @@ -156,16 +150,6 @@ public: return includes(_objectForXMLNode(repr)); } - /** - * Returns a single selected object's xml node. - * - * @return NULL unless exactly one object is selected - */ - XML::Node *singleRepr(); - - /** Returns a list of the xml nodes of all selected objects. */ - std::vector reprList(); - /** Returns the number of layers in which there are selected objects. */ size_t numberOfLayers(); diff --git a/src/seltrans.cpp b/src/seltrans.cpp index b54525610..9fa6172ed 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -240,7 +240,7 @@ void Inkscape::SelTrans::setCenter(Geom::Point const &p) _center_is_set = true; // Write the new center position into all selected items - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = SP_ITEM(*iter); it->setCenter(p); @@ -270,7 +270,7 @@ void Inkscape::SelTrans::grab(Geom::Point const &p, gdouble x, gdouble y, bool s return; } - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = static_cast(sp_object_ref(*iter, NULL)); _items.push_back(it); @@ -492,7 +492,7 @@ void Inkscape::SelTrans::ungrab() if (_center_is_set) { // we were dragging center; update reprs and commit undoable action - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = *iter; it->updateRepr(); @@ -529,7 +529,7 @@ void Inkscape::SelTrans::stamp() l = _stamp_cache; } else { /* Build cache */ - l = selection->itemList(); + l = selection->items(); sort(l.begin(),l.end(),sp_object_compare_position_bool); _stamp_cache = l; } @@ -621,7 +621,7 @@ void Inkscape::SelTrans::_updateVolatileState() return; } - _strokewidth = stroke_average_width (selection->itemList()); + _strokewidth = stroke_average_width (selection->items()); } void Inkscape::SelTrans::_showHandles(SPSelTransType type) @@ -711,7 +711,7 @@ void Inkscape::SelTrans::handleClick(SPKnot */*knot*/, guint state, SPSelTransHa case HANDLE_CENTER: if (state & GDK_SHIFT_MASK) { // Unset the center position for all selected items - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for ( std::vector::const_iterator iter=items.begin();iter!=items.end(); ++iter) { SPItem *it = *iter; it->unsetCenter(); @@ -1287,7 +1287,7 @@ gboolean Inkscape::SelTrans::centerRequest(Geom::Point &pt, guint state) // items will share a single center. While dragging that single center, it should never snap to the // centers of any of the selected objects. Therefore we will have to pass the list of selected items // to the snapper, to avoid self-snapping of the rotation center - std::vector items = const_cast(_selection)->itemList(); + std::vector items = const_cast(_selection)->items(); SnapManager &m = _desktop->namedview->snap_manager; m.setup(_desktop); m.setRotationCenterSource(items); diff --git a/src/snap.cpp b/src/snap.cpp index 7f0e8d9dc..d1d15ca0c 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -708,7 +708,7 @@ void SnapManager::setupIgnoreSelection(SPDesktop const *desktop, _items_to_ignore.clear(); Inkscape::Selection *sel = _desktop->selection; - std::vector const items = sel->itemList(); + std::vector const items = sel->items(); for (std::vector::const_iterator i=items.begin();i!=items.end();++i) { _items_to_ignore.push_back(*i); } diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 1bc6da3e1..d4ef3f9c2 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -335,7 +335,7 @@ void sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, const Glib::ustring description) { SPDocument *doc = selection->layers()->getDocument(); - std::vector il= selection->itemList(); + std::vector il= selection->items(); // allow union on a single object for the purpose of removing self overlapse (svn log, revision 13334) if ( (il.size() < 2) && (bop != bool_op_union)) { @@ -689,7 +689,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool } } else { // find out the bottom object - std::vector sorted(selection->reprList()); + std::vector sorted(selection->xmlNodes()); sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); @@ -1157,7 +1157,7 @@ sp_selected_path_outline(SPDesktop *desktop) bool scale_stroke = prefs->getBool("/options/transform/stroke", true); prefs->setBool("/options/transform/stroke", true); bool did = false; - std::vector il(selection->itemList()); + std::vector il(selection->items()); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ SPItem *item = *l; @@ -1771,7 +1771,7 @@ sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset) } bool did = false; - std::vector il(selection->itemList()); + std::vector il(selection->items()); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ SPItem *item = *l; SPCurve *curve = NULL; @@ -2196,7 +2196,7 @@ sp_selected_path_simplify_selection(SPDesktop *desktop, float threshold, bool ju return; } - std::vector items(selection->itemList()); + std::vector items(selection->items()); bool didSomething = sp_selected_path_simplify_items(desktop, selection, items, threshold, diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index fbbbe5807..5565464a1 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -43,7 +43,7 @@ using Inkscape::DocumentUndo; static SPItem * flowtext_in_selection(Inkscape::Selection *selection) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_FLOWTEXT(*i)) return *i; @@ -54,7 +54,7 @@ flowtext_in_selection(Inkscape::Selection *selection) static SPItem * text_or_flowtext_in_selection(Inkscape::Selection *selection) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) return *i; @@ -65,7 +65,7 @@ text_or_flowtext_in_selection(Inkscape::Selection *selection) static SPItem * shape_in_selection(Inkscape::Selection *selection) { - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_SHAPE(*i)) return *i; @@ -87,7 +87,7 @@ text_put_on_path() Inkscape::XML::Document *xml_doc = desktop->doc()->getReprDoc(); - if (!text || !shape || selection->itemList().size() != 2) { + if (!text || !shape || selection->items().size() != 2) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select a text and a path to put text on path.")); return; } @@ -196,7 +196,7 @@ text_remove_from_path() } bool did = false; - std::vector items(selection->itemList()); + std::vector items(selection->items()); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *obj = *i; @@ -214,7 +214,7 @@ text_remove_from_path() } else { DocumentUndo::done(desktop->getDocument(), SP_VERB_CONTEXT_TEXT, _("Remove text from path")); - selection->setList(selection->itemList()); // reselect to update statusbar description + selection->setList(selection->items()); // reselect to update statusbar description } } @@ -260,7 +260,7 @@ text_remove_all_kerns() bool did = false; - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *obj = *i; @@ -296,7 +296,7 @@ text_flow_into_shape() SPItem *text = text_or_flowtext_in_selection(selection); SPItem *shape = shape_in_selection(selection); - if (!text || !shape || selection->itemList().size() < 2) { + if (!text || !shape || selection->items().size() < 2) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select a text and one or more paths or shapes to flow text into frame.")); return; } @@ -320,7 +320,7 @@ text_flow_into_shape() g_return_if_fail(SP_IS_FLOWREGION(object)); /* Add clones */ - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; if (SP_IS_SHAPE(item)){ @@ -387,7 +387,7 @@ text_unflow () Inkscape::Selection *selection = desktop->getSelection(); - if (!flowtext_in_selection(selection) || selection->itemList().size() < 1) { + if (!flowtext_in_selection(selection) || selection->items().size() < 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select a flowed text to unflow it.")); return; } @@ -395,7 +395,7 @@ text_unflow () std::vector new_objs; GSList *old_objs = NULL; - std::vector items = selection->itemList(); + std::vector items = selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (!SP_IS_FLOWTEXT(*i)) { @@ -480,7 +480,7 @@ flowtext_to_text() bool did = false; std::vector reprs; - std::vector items(selection->itemList()); + std::vector items(selection->items()); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; diff --git a/src/trace/trace.cpp b/src/trace/trace.cpp index 379682668..f0fa61b89 100644 --- a/src/trace/trace.cpp +++ b/src/trace/trace.cpp @@ -65,7 +65,7 @@ SPImage *Tracer::getSelectedSPImage() if (sioxEnabled) { SPImage *img = NULL; - std::vector const list = sel->itemList(); + std::vector const list = sel->items(); std::vector items; sioxShapes.clear(); diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index d581dbf7e..b1a946db2 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -522,7 +522,7 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a // resize each object in the selection if (separately) { - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (item) { @@ -578,7 +578,7 @@ bool ClipboardManagerImpl::pastePathEffect(SPDesktop *desktop) desktop->doc()->importDefs(tempdoc); // make sure all selected items are converted to paths first (i.e. rectangles) sp_selected_to_lpeitems(desktop); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; _applyPathEffect(item, effectstack); @@ -661,7 +661,7 @@ Glib::ustring ClipboardManagerImpl::getShapeOrTextObjectId(SPDesktop *desktop) void ClipboardManagerImpl::_copySelection(Inkscape::Selection *selection) { // copy the defs used by all items - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); cloned_elements.clear(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 8f87932b8..b7b5b96cd 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -133,7 +133,7 @@ void ActionAlign::do_action(SPDesktop *desktop, int index) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool sel_as_group = prefs->getBool("/dialogs/align/sel-as-groups"); - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; const Coeffs &a = _allCoeffs[index]; @@ -293,7 +293,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; //Check 2 or more selected objects @@ -499,7 +499,7 @@ private : // xGap and yGap are the minimum space required between bounding rectangles. double const xGap = removeOverlapXGap.get_value(); double const yGap = removeOverlapYGap.get_value(); - removeoverlap(_dialog.getDesktop()->getSelection()->itemList(), xGap, yGap); + removeoverlap(_dialog.getDesktop()->getSelection()->items(), xGap, yGap); // restore compensation setting prefs->setInt("/options/clonecompensation/value", saved_compensation); @@ -530,7 +530,7 @@ private : int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); - graphlayout(_dialog.getDesktop()->getSelection()->itemList()); + graphlayout(_dialog.getDesktop()->getSelection()->items()); // restore compensation setting prefs->setInt("/options/clonecompensation/value", saved_compensation); @@ -590,7 +590,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; //Check 2 or more selected objects @@ -656,7 +656,7 @@ private : Inkscape::Preferences *prefs = Inkscape::Preferences::get(); int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); - std::vector x(_dialog.getDesktop()->getSelection()->itemList()); + std::vector x(_dialog.getDesktop()->getSelection()->items()); unclump (x); // restore compensation setting @@ -687,7 +687,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; //Check 2 or more selected objects @@ -785,7 +785,7 @@ private : Inkscape::Selection *selection = desktop->getSelection(); if (!selection) return; - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); //Check 2 or more selected objects if (selected.size() < 2) return; diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index b727c87ee..7ce937de7 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -1376,7 +1376,7 @@ void CloneTiler::clonetiler_change_selection(Inkscape::Selection *selection, Gtk return; } - if (selection->itemList().size() > 1) { + if (selection->items().size() > 1) { gtk_widget_set_sensitive (buttons, FALSE); gtk_label_set_markup (GTK_LABEL(status), _("More than one object selected.")); return; @@ -2113,7 +2113,7 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) Inkscape::Selection *selection = desktop->getSelection(); // check if something is selected - if (selection->isEmpty() || selection->itemList().size() > 1) { + if (selection->isEmpty() || selection->items().size() > 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select one object whose tiled clones to unclump.")); return; } @@ -2162,7 +2162,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d Inkscape::Selection *selection = desktop->getSelection(); // check if something is selected - if (selection->isEmpty() || selection->itemList().size() > 1) { + if (selection->isEmpty() || selection->items().size() > 1) { desktop->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select one object whose tiled clones to remove.")); return; } @@ -2240,7 +2240,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) } // Check if more than one object is selected. - if (selection->itemList().size() > 1) { + if (selection->items().size() > 1) { desktop->getMessageStack()->flash(Inkscape::ERROR_MESSAGE, _("If you want to clone several objects, group them and clone the group.")); return; } diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 2fb5f9e3b..6d2842511 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -608,7 +608,7 @@ void Export::onBatchClicked () void Export::updateCheckbuttons () { - gint num = SP_ACTIVE_DESKTOP->getSelection()->itemList().size(); + gint num = SP_ACTIVE_DESKTOP->getSelection()->items().size(); if (num >= 2) { batch_export.set_sensitive(true); batch_export.set_label(g_strdup_printf (ngettext("B_atch export %d selected object","B_atch export %d selected objects",num), num)); @@ -820,7 +820,7 @@ void Export::onAreaToggled () one that's nice */ if (filename.empty()) { const gchar * id = "object"; - const std::vector reprlst = SP_ACTIVE_DESKTOP->getSelection()->reprList(); + const std::vector reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes(); for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; if (repr->attribute("id")) { @@ -1015,7 +1015,7 @@ void Export::onExport () if (batch_export.get_active ()) { // Batch export of selected objects - gint num = (desktop->getSelection()->itemList()).size(); + gint num = (desktop->getSelection()->items()).size(); gint n = 0; if (num < 1) { @@ -1029,7 +1029,7 @@ void Export::onExport () gint export_count = 0; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i = itemlist.begin();i!=itemlist.end() && !interrupted ;++i){ SPItem *item = *i; @@ -1075,7 +1075,7 @@ void Export::onExport () nv->pagecolor, onProgressCallback, (void*)prog_dlg, TRUE, // overwrite without asking - hide ? (desktop->getSelection()->itemList()) : x + hide ? (desktop->getSelection()->items()) : x )) { gchar * error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile); @@ -1165,7 +1165,7 @@ void Export::onExport () nv->pagecolor, onProgressCallback, (void*)prog_dlg, FALSE, - hide ? (desktop->getSelection()->itemList()) : x + hide ? (desktop->getSelection()->items()) : x ); if (status == EXPORT_ERROR) { gchar * safeFile = Inkscape::IO::sanitizeString(path.c_str()); @@ -1237,7 +1237,7 @@ void Export::onExport () bool saved = DocumentUndo::getUndoSensitive(doc); DocumentUndo::setUndoSensitive(doc, false); - reprlst = desktop->getSelection()->reprList(); + reprlst = desktop->getSelection()->xmlNodes(); for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index d3ad5d1da..dfc19f3cc 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -691,7 +691,7 @@ private: void select_svg_element(){ Inkscape::Selection* sel = _desktop->getSelection(); if (sel->isEmpty()) return; - Inkscape::XML::Node* node = sel->reprList()[0]; + Inkscape::XML::Node* node = sel->xmlNodes()[0]; if (!node || !node->matchAttributeName("id")) return; std::ostringstream xlikhref; @@ -1474,7 +1474,7 @@ void FilterEffectsDialog::FilterModifier::update_selection(Selection *sel) } std::set used; - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { SPObject *obj = *i; SPStyle *style = obj->style; @@ -1555,7 +1555,7 @@ void FilterEffectsDialog::FilterModifier::on_selection_toggled(const Glib::ustri if((*iter)[_columns.sel] == 1) filter = 0; - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { SPItem * item = *i; SPStyle *style = item->style; diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index 0f368c5ac..8424dd7f5 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -761,7 +761,7 @@ std::vector &Find::all_items (SPObject *r, std::vector &l, boo std::vector &Find::all_selection_items (Inkscape::Selection *s, std::vector &l, SPObject *ancestor, bool hidden, bool locked) { - std::vector itemlist=s->itemList(); + std::vector itemlist= s->items(); for(std::vector::const_reverse_iterator i=itemlist.rbegin(); itemlist.rend() != i; ++i) { SPObject *obj = *i; SPItem *item = dynamic_cast(obj); diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp index 56b001291..30b0f8df7 100644 --- a/src/ui/dialog/glyphs.cpp +++ b/src/ui/dialog/glyphs.cpp @@ -578,7 +578,7 @@ void GlyphsPanel::setTargetDesktop(SPDesktop *desktop) void GlyphsPanel::insertText() { SPItem *textItem = 0; - std::vector itemlist=targetDesktop->selection->itemList(); + std::vector itemlist= targetDesktop->selection->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) { textItem = *i; @@ -688,7 +688,7 @@ void GlyphsPanel::selectionModifiedCB(guint flags) void GlyphsPanel::calcCanInsert() { int items = 0; - std::vector itemlist=targetDesktop->selection->itemList(); + std::vector itemlist= targetDesktop->selection->items(); for(std::vector::const_iterator i=itemlist.begin(); itemlist.end() != i; ++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) { ++items; diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 639e463ea..ddcc20cb7 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -163,7 +163,7 @@ void GridArrangeTab::arrange() desktop->getDocument()->ensureUpToDate(); Inkscape::Selection *selection = desktop->getSelection(); - const std::vector items = selection ? selection->itemList() : std::vector(); + const std::vector items = selection ? selection->items() : std::vector(); for(std::vector::const_iterator i = items.begin();i!=items.end(); ++i){ SPItem *item = *i; Geom::OptRect b = item->documentVisualBounds(); @@ -192,7 +192,7 @@ void GridArrangeTab::arrange() // require the sorting done before we can calculate row heights etc. g_return_if_fail(selection); - std::vector sorted(selection->itemList()); + std::vector sorted(selection->items()); sort(sorted.begin(),sorted.end(),sp_compare_y_position); sort(sorted.begin(),sorted.end(),sp_compare_x_position); @@ -368,7 +368,7 @@ void GridArrangeTab::on_row_spinbutton_changed() Inkscape::Selection *selection = desktop ? desktop->selection : 0; g_return_if_fail( selection ); - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); int selcount = items.size(); double PerCol = ceil(selcount / NoOfColsSpinner.get_value()); @@ -394,7 +394,7 @@ void GridArrangeTab::on_col_spinbutton_changed() Inkscape::Selection *selection = desktop ? desktop->selection : 0; g_return_if_fail(selection); - int selcount = selection->itemList().size(); + int selcount = selection->items().size(); double PerRow = ceil(selcount / NoOfRowsSpinner.get_value()); NoOfColsSpinner.set_value(PerRow); @@ -531,7 +531,7 @@ void GridArrangeTab::updateSelection() updating = true; SPDesktop *desktop = Parent->getDesktop(); Inkscape::Selection *selection = desktop ? desktop->selection : 0; - std::vector const items = selection ? selection->itemList() : std::vector(); + std::vector const items = selection ? selection->items() : std::vector(); if (!items.empty()) { int selcount = items.size(); @@ -602,7 +602,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) g_return_if_fail( selection ); int selcount = 1; if (!selection->isEmpty()) { - selcount = selection->itemList().size(); + selcount = selection->items().size(); } diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp index 83656a1f2..173a964e9 100644 --- a/src/ui/dialog/icon-preview.cpp +++ b/src/ui/dialog/icon-preview.cpp @@ -362,7 +362,7 @@ void IconPreviewPanel::refreshPreview() if ( sel ) { //g_message("found a selection to play with"); - std::vector const items = sel->itemList(); + std::vector const items = sel->items(); for(std::vector::const_iterator i=items.begin();!target && i!=items.end();++i){ SPItem* item = *i; gchar const *id = item->getId(); diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 27694a9ac..df32f73cf 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -478,7 +478,7 @@ void ObjectsPanel::_objectsSelected( Selection *sel ) { _selectedConnection.block(); _tree.get_selection()->unselect_all(); SPItem *item = NULL; - std::vector const items = sel->itemList(); + std::vector const items = sel->items(); for(std::vector::const_iterator i=items.begin(); i!=items.end(); ++i){ item = *i; if (setOpacity) diff --git a/src/ui/dialog/pixelartdialog.cpp b/src/ui/dialog/pixelartdialog.cpp index f557ff0fc..ed62e26b0 100644 --- a/src/ui/dialog/pixelartdialog.cpp +++ b/src/ui/dialog/pixelartdialog.cpp @@ -372,7 +372,7 @@ void PixelArtDialogImpl::vectorize() return; } - std::vector const items = desktop->selection->itemList(); + std::vector const items = desktop->selection->items(); for(std::vector::const_iterator i=items.begin(); i!=items.end();++i){ if ( !SP_IS_IMAGE(*i) ) continue; diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp index 5ec1285c1..c160c269f 100644 --- a/src/ui/dialog/polar-arrange-tab.cpp +++ b/src/ui/dialog/polar-arrange-tab.cpp @@ -297,7 +297,7 @@ static void moveToPoint(int anchor, SPItem *item, Geom::Point p) void PolarArrangeTab::arrange() { Inkscape::Selection *selection = parent->getDesktop()->getSelection(); - const std::vector tmp(selection->itemList()); + const std::vector tmp(selection->items()); SPGenericEllipse *referenceEllipse = NULL; // Last ellipse in selection bool arrangeOnEllipse = !arrangeOnParametersRadio.get_active(); diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 790c0e5fb..100a620fa 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -524,7 +524,7 @@ void SvgFontsDialog::set_glyph_description_from_selected_path(){ return; } - Inkscape::XML::Node* node = sel->reprList().front(); + Inkscape::XML::Node* node = sel->xmlNodes().front(); if (!node) return;//TODO: should this be an assert? if (!node->matchAttributeName("d") || !node->attribute("d")){ char *msg = _("The selected object does not have a path description."); @@ -566,7 +566,7 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){ return; } - Inkscape::XML::Node* node = sel->reprList().front(); + Inkscape::XML::Node* node = sel->xmlNodes().front(); if (!node) return;//TODO: should this be an assert? if (!node->matchAttributeName("d") || !node->attribute("d")){ char *msg = _("The selected object does not have a path description."); diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 6577c8d4e..2573719ac 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -123,7 +123,7 @@ static void editGradientImpl( SPDesktop* desktop, SPGradient* gr ) bool shown = false; if ( desktop && desktop->doc() ) { Inkscape::Selection *selection = desktop->getSelection(); - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); if (!items.empty()) { SPStyle query( desktop->doc() ); int result = objects_query_fillstroke((items), &query, true); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index affbe0a3b..98b0f9502 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -348,7 +348,7 @@ void TagsPanel::_objectsSelected( Selection *sel ) { _selectedConnection.block(); _tree.get_selection()->unselect_all(); - auto tmp = sel->range(); + auto tmp = sel->objects(); for(auto i = tmp.begin(); i != tmp.end(); ++i) { SPObject *obj = *i; @@ -646,7 +646,7 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event) if (col == _tree.get_column(COL_ADD - 1) && down_at_add) { if (SP_IS_TAG(obj)) { bool wasadded = false; - std::vector items=_desktop->selection->itemList(); + std::vector items= _desktop->selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *newobj = *i; bool addchild = true; diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index c01da8864..355bd16d1 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -443,7 +443,7 @@ SPItem *TextEdit::getSelectedTextItem (void) if (!SP_ACTIVE_DESKTOP) return NULL; - std::vector tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList(); + std::vector tmp= SP_ACTIVE_DESKTOP->getSelection()->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) @@ -461,7 +461,7 @@ unsigned TextEdit::getSelectedTextCount (void) unsigned int items = 0; - std::vector tmp=SP_ACTIVE_DESKTOP->getSelection()->itemList(); + std::vector tmp= SP_ACTIVE_DESKTOP->getSelection()->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i) { if (SP_IS_TEXT(*i) || SP_IS_FLOWTEXT(*i)) @@ -568,7 +568,7 @@ void TextEdit::onApply() SPDesktop *desktop = SP_ACTIVE_DESKTOP; unsigned items = 0; - const std::vector item_list = desktop->getSelection()->itemList(); + const std::vector item_list = desktop->getSelection()->items(); SPCSSAttr *css = fillTextStyle (); sp_desktop_set_style(desktop, css, true); diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index b7638e8c1..f11ac1ebe 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -650,7 +650,7 @@ void Transformation::updatePageTransform(Inkscape::Selection *selection) { if (selection && !selection->isEmpty()) { if (_check_replace_matrix.get_active()) { - Geom::Affine current (selection->itemList()[0]->transform); // take from the first item in selection + Geom::Affine current (selection->items()[0]->transform); // take from the first item in selection Geom::Affine new_displayed = current; @@ -735,7 +735,7 @@ void Transformation::applyPageMove(Inkscape::Selection *selection) if (_check_move_relative.get_active()) { // shift each object relatively to the previous one - std::vector selected(selection->itemList()); + std::vector selected(selection->items()); if (selected.empty()) return; if (fabs(x) > 1e-6) { @@ -810,7 +810,7 @@ void Transformation::applyPageScale(Inkscape::Selection *selection) bool transform_stroke = prefs->getBool("/options/transform/stroke", true); bool preserve = prefs->getBool("/options/preservetransform/value", false); if (prefs->getBool("/dialogs/transformation/applyseparately")) { - std::vector tmp=selection->itemList(); + std::vector tmp= selection->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i){ SPItem *item = *i; Geom::OptRect bbox_pref = item->desktopPreferredBounds(); @@ -874,7 +874,7 @@ void Transformation::applyPageRotate(Inkscape::Selection *selection) } if (prefs->getBool("/dialogs/transformation/applyseparately")) { - std::vector tmp=selection->itemList(); + std::vector tmp= selection->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i){ SPItem *item = *i; sp_item_rotate_rel(item, Geom::Rotate (angle*M_PI/180.0)); @@ -894,7 +894,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/dialogs/transformation/applyseparately")) { - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i = items.begin();i!=items.end();++i){ SPItem *item = *i; @@ -996,7 +996,7 @@ void Transformation::applyPageTransform(Inkscape::Selection *selection) } if (_check_replace_matrix.get_active()) { - std::vector tmp=selection->itemList(); + std::vector tmp= selection->items(); for(std::vector::const_iterator i=tmp.begin();i!=tmp.end();++i){ SPItem *item = *i; item->set_item_transform(displayed); @@ -1149,7 +1149,7 @@ void Transformation::onReplaceMatrixToggled() double f = _scalar_transform_f.getValue(); Geom::Affine displayed (a, b, c, d, e, f); - Geom::Affine current = selection->itemList()[0]->transform; // take from the first item in selection + Geom::Affine current = selection->items()[0]->transform; // take from the first item in selection Geom::Affine new_displayed; if (_check_replace_matrix.get_active()) { diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index ab29471ed..7bbf588a7 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -2096,7 +2096,7 @@ void ContextMenu::ImageEdit(void) } #endif - std::vector itemlist=_desktop->selection->itemList(); + std::vector itemlist= _desktop->selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ Inkscape::XML::Node *ir = (*i)->getRepr(); const gchar *href = ir->attribute("xlink:href"); diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index 74f2664fe..52ddd589c 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -1306,7 +1306,7 @@ void cc_selection_set_avoid(bool const set_avoid) int changes = 0; - std::vector l = selection->itemList(); + std::vector l = selection->items(); for(std::vector::const_iterator i=l.begin();i!=l.end(); ++i) { SPItem *item = *i; diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index cb7747b2b..a81161ea9 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -692,7 +692,7 @@ void EraserTool::set_to_accumulated() { } } } else { - toWorkOn = selection->itemList(); + toWorkOn = selection->items(); } wasSelection = true; } @@ -744,7 +744,7 @@ void EraserTool::set_to_accumulated() { } if ( !selection->isEmpty() ) { // If the item was not completely erased, track the new remainder. - std::vector nowSel(selection->itemList()); + std::vector nowSel(selection->items()); for (std::vector::const_iterator i2 = nowSel.begin();i2!=nowSel.end();++i2) { remainingItems.push_back(*i2); } diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp index 9d8101cc4..e2bb0dc07 100644 --- a/src/ui/tools/gradient-tool.cpp +++ b/src/ui/tools/gradient-tool.cpp @@ -106,7 +106,7 @@ void GradientTool::selection_changed(Inkscape::Selection*) { if (selection == NULL) { return; } - guint n_obj = selection->itemList().size(); + guint n_obj = selection->items().size(); if (!drag->isNonEmpty() || selection->isEmpty()) return; @@ -492,9 +492,9 @@ bool GradientTool::root_handler(GdkEvent* event) { if (over_line) { // we take the first item in selection, because with doubleclick, the first click // always resets selection to the single object under cursor - sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->itemList().front()), this->mousepoint_doc, event->button.time); + sp_gradient_context_add_stop_near_point(this, SP_ITEM(selection->items().front()), this->mousepoint_doc, event->button.time); } else { - std::vector items=selection->itemList(); + std::vector items= selection->items(); for (std::vector::const_iterator i = items.begin();i!=items.end();++i) { SPItem *item = *i; SPGradientType new_type = (SPGradientType) prefs->getInt("/tools/gradient/newgradient", SP_GRADIENT_TYPE_LINEAR); @@ -897,7 +897,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta } else { // Starting from empty space: // Sort items so that the topmost comes last - std::vector items(selection->itemList()); + std::vector items(selection->items()); sort(items.begin(),items.end(),sp_item_repr_compare_position); // take topmost vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke); @@ -907,7 +907,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "fill-opacity", "1.0"); - std::vector itemlist = selection->itemList(); + std::vector itemlist = selection->items(); for (std::vector::const_iterator i = itemlist.begin();i!=itemlist.end();++i) { //FIXME: see above @@ -931,7 +931,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta ec->_grdrag->local_change = true; // give the grab out-of-bounds values of xp/yp because we're already dragging // and therefore are already out of tolerance - ec->_grdrag->grabKnot (selection->itemList()[0], + ec->_grdrag->grabKnot (selection->items()[0], type == SP_GRADIENT_TYPE_LINEAR? POINT_LG_END : POINT_RG_R1, -1, // ignore number (though it is always 1) fill_or_stroke, 99999, 99999, etime); @@ -940,7 +940,7 @@ static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*sta // status text; we do not track coords because this branch is run once, not all the time // during drag - int n_objects = selection->itemList().size(); + int n_objects = selection->items().size(); rc.message_context->setF(Inkscape::NORMAL_MESSAGE, ngettext("Gradient for %d object; with Ctrl to snap angle", "Gradient for %d objects; with Ctrl to snap angle", n_objects), diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp index 9bbc1ac20..ebcac2279 100644 --- a/src/ui/tools/lpe-tool.cpp +++ b/src/ui/tools/lpe-tool.cpp @@ -396,7 +396,7 @@ lpetool_create_measuring_items(LpeTool *lc, Inkscape::Selection *selection) SPCanvasGroup *tmpgrp = lc->desktop->getTempGroup(); gchar *arc_length; double lengthval; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ if (SP_IS_PATH(*i)) { path = SP_PATH(*i); diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index 47927667c..9aaa0c14e 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -103,7 +103,7 @@ void MeshTool::selection_changed(Inkscape::Selection* /*sel*/) { return; } - guint n_obj = selection->itemList().size(); + guint n_obj = selection->items().size(); if (!drag->isNonEmpty() || selection->isEmpty()) { return; @@ -467,10 +467,10 @@ bool MeshTool::root_handler(GdkEvent* event) { if (over_line) { // We take the first item in selection, because with doubleclick, the first click // always resets selection to the single object under cursor - sp_mesh_context_split_near_point(this, selection->itemList()[0], this->mousepoint_doc, event->button.time); + sp_mesh_context_split_near_point(this, selection->items()[0], this->mousepoint_doc, event->button.time); } else { // Create a new gradient with default coordinates. - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPItem *item = *i; SPGradientType new_type = SP_GRADIENT_TYPE_MESH; @@ -945,7 +945,7 @@ static void sp_mesh_end_drag(MeshTool &rc) { } else { // Starting from empty space: // Sort items so that the topmost comes last - std::vector items(selection->itemList()); + std::vector items(selection->items()); sort(items.begin(),items.end(),sp_item_repr_compare_position); // take topmost vector = sp_gradient_vector_for_object(document, desktop, SP_ITEM(items.back()), fill_or_stroke); @@ -955,7 +955,7 @@ static void sp_mesh_end_drag(MeshTool &rc) { SPCSSAttr *css = sp_repr_css_attr_new(); sp_repr_css_set_property(css, "fill-opacity", "1.0"); - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ //FIXME: see above @@ -972,7 +972,7 @@ static void sp_mesh_end_drag(MeshTool &rc) { // status text; we do not track coords because this branch is run once, not all the time // during drag - int n_objects = selection->itemList().size(); + int n_objects = selection->items().size(); rc.message_context->setF(Inkscape::NORMAL_MESSAGE, ngettext("Gradient for %d object; with Ctrl to snap angle", "Gradient for %d objects; with Ctrl to snap angle", n_objects), diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 23aaf6bb1..f7a725794 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -407,7 +407,7 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) { std::set shapes; - std::vector items=sel->itemList(); + std::vector items= sel->items(); for(std::vector::const_iterator i=items.begin();i!=items.end();++i){ SPObject *obj = *i; @@ -444,7 +444,7 @@ void NodeTool::selection_changed(Inkscape::Selection *sel) { } _previous_selection = _current_selection; - _current_selection = sel->itemList(); + _current_selection = sel->items(); this->_multipath->setItems(shapes); this->update_tip(NULL); diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index b5ec3d88e..676a41eaa 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -477,7 +477,7 @@ bool SelectTool::root_handler(GdkEvent* event) { case GDK_2BUTTON_PRESS: if (event->button.button == 1) { if (!selection->isEmpty()) { - SPItem *clicked_item = selection->itemList()[0]; + SPItem *clicked_item = selection->items()[0]; if (dynamic_cast(clicked_item) && !dynamic_cast(clicked_item)) { // enter group if it's not a 3D box desktop->setCurrentLayer(clicked_item); diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index 9adaf3879..4f36a827f 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -210,7 +210,7 @@ void SprayTool::update_cursor(bool /*with_shift*/) { gchar *sel_message = NULL; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); sel_message = g_strdup_printf(ngettext("%i object selected","%i objects selected",num), num); } else { sel_message = g_strdup_printf("%s", _("Nothing selected")); @@ -591,7 +591,7 @@ static bool fit_item(SPDesktop *desktop, if (selection->isEmpty()) { return false; } - std::vector const items_selected(selection->itemList()); + std::vector const items_selected(selection->items()); std::vector items_down_erased; for (std::vector::const_iterator i=items_down.begin(); i!=items_down.end(); ++i) { SPItem *item_down = *i; @@ -1002,7 +1002,7 @@ static bool sp_spray_recursive(SPDesktop *desktop, SPItem *unionResult = NULL; // Previous union int i=1; - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator it=items.begin();it!=items.end(); ++it){ SPItem *item1 = *it; if (i == 1) { @@ -1170,7 +1170,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point double move_standard_deviation = get_move_standard_deviation(tc); { - std::vector const items(selection->itemList()); + std::vector const items(selection->items()); for(std::vector::const_iterator i=items.begin();i!=items.end(); ++i){ SPItem *item = *i; @@ -1299,7 +1299,7 @@ bool SprayTool::root_handler(GdkEvent* event) { guint num = 0; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); } if (num == 0) { this->message_context->flash(Inkscape::ERROR_MESSAGE, _("Nothing selected! Select objects to spray.")); diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 36fe26e76..6da6526bc 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -1158,7 +1158,7 @@ SPItem *sp_event_context_find_item(SPDesktop *desktop, Geom::Point const &p, if (select_under) { SPItem *selected_at_point = desktop->getItemFromListAtPointBottom( - desktop->selection->itemList(), p); + desktop->selection->items(), p); item = desktop->getItemAtPoint(p, into_groups, selected_at_point); if (item == NULL) { // we may have reached bottom, flip over to the top item = desktop->getItemAtPoint(p, into_groups, NULL); diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 39a7a3f0b..4da8060e2 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -153,7 +153,7 @@ void TweakTool::update_cursor (bool with_shift) { gchar *sel_message = NULL; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); sel_message = g_strdup_printf(ngettext("%i object selected","%i objects selected",num), num); } else { sel_message = g_strdup_printf("%s", _("Nothing selected")); @@ -1076,7 +1076,7 @@ sp_tweak_dilate (TweakTool *tc, Geom::Point event_p, Geom::Point p, Geom::Point double move_force = get_move_force(tc); double color_force = MIN(sqrt(path_force)/20.0, 1); - std::vector items=selection->itemList(); + std::vector items= selection->items(); for(std::vector::const_iterator i=items.begin();i!=items.end(); ++i){ SPItem *item = *i; @@ -1185,7 +1185,7 @@ bool TweakTool::root_handler(GdkEvent* event) { guint num = 0; if (!desktop->selection->isEmpty()) { - num = desktop->selection->itemList().size(); + num = desktop->selection->items().size(); } if (num == 0) { this->message_context->flash(Inkscape::ERROR_MESSAGE, _("Nothing selected! Select objects to tweak.")); diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp index 5f697e420..059d1a4e3 100644 --- a/src/ui/widget/style-subject.cpp +++ b/src/ui/widget/style-subject.cpp @@ -58,7 +58,7 @@ Inkscape::Selection *StyleSubject::Selection::_getSelection() const { std::vector StyleSubject::Selection::list() { Inkscape::Selection *selection = _getSelection(); if(selection) { - return std::vector(selection->range().begin(), selection->range().end()); + return std::vector(selection->objects().begin(), selection->objects().end()); } return std::vector(); diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp index 32ccbad93..a6be353f8 100644 --- a/src/vanishing-point.cpp +++ b/src/vanishing-point.cpp @@ -258,7 +258,7 @@ VanishingPoint::set_pos(Proj::Pt2 const &pt) { std::list VanishingPoint::selectedBoxes(Inkscape::Selection *sel) { std::list sel_boxes; - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -397,7 +397,7 @@ VPDragger::VPsOfSelectedBoxes() { VanishingPoint *vp; // FIXME: Should we take the selection from the parent VPDrag? I guess it shouldn't make a difference. Inkscape::Selection *sel = SP_ACTIVE_DESKTOP->getSelection(); - std::vector itemlist=sel->itemList(); + std::vector itemlist= sel->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -575,7 +575,7 @@ VPDrag::updateDraggers () g_return_if_fail (this->selection != NULL); - std::vector itemlist=this->selection->itemList(); + std::vector itemlist= this->selection->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -607,7 +607,7 @@ VPDrag::updateLines () g_return_if_fail (this->selection != NULL); - std::vector itemlist=this->selection->itemList(); + std::vector itemlist= this->selection->items(); for (std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i) { SPItem *item = *i; SPBox3D *box = dynamic_cast(item); @@ -625,7 +625,7 @@ VPDrag::updateBoxHandles () // FIXME: Is there a way to update the knots without accessing the // (previously) statically linked function KnotHolder::update_knots? - std::vector sel = selection->itemList(); + std::vector sel = selection->items(); if (sel.empty()) return; // no selection diff --git a/src/widgets/arc-toolbar.cpp b/src/widgets/arc-toolbar.cpp index 7b872e8b1..5db714f85 100644 --- a/src/widgets/arc-toolbar.cpp +++ b/src/widgets/arc-toolbar.cpp @@ -97,7 +97,7 @@ sp_arctb_startend_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const *v gchar* namespaced_name = g_strconcat("sodipodi:", value_name, NULL); bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { @@ -163,7 +163,7 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl ) bool modmade = false; if ( ege_select_one_action_get_active(act) != 0 ) { - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { @@ -174,7 +174,7 @@ static void sp_arctb_open_state_changed( EgeSelectOneAction *act, GObject *tbl ) } } } else { - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { @@ -264,7 +264,7 @@ static void sp_arc_toolbox_selection_changed(Inkscape::Selection *selection, GOb purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_GENERICELLIPSE(item)) { diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp index 733fb34e8..54b4be547 100644 --- a/src/widgets/connector-toolbar.cpp +++ b/src/widgets/connector-toolbar.cpp @@ -97,7 +97,7 @@ static void sp_connector_orthogonal_toggled( GtkToggleAction* act, GObject *tbl gchar *value = is_orthog ? orthog_str : polyline_str ; bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; @@ -144,7 +144,7 @@ static void connector_curvature_changed(GtkAdjustment *adj, GObject* tbl) g_ascii_dtostr(value, G_ASCII_DTOSTR_BUF_SIZE, newValue); bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; @@ -227,7 +227,7 @@ static void sp_connector_graph_layout(void) int saved_compensation = prefs->getInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); prefs->setInt("/options/clonecompensation/value", SP_CLONE_COMPENSATION_UNMOVED); - graphlayout(SP_ACTIVE_DESKTOP->getSelection()->itemList()); + graphlayout(SP_ACTIVE_DESKTOP->getSelection()->items()); prefs->setInt("/options/clonecompensation/value", saved_compensation); diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index a96776894..8c3a0a0a8 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -476,7 +476,7 @@ void FillNStroke::updateFromPaint() SPDocument *document = desktop->getDocument(); Inkscape::Selection *selection = desktop->getSelection(); - std::vector const items = selection->itemList(); + std::vector const items = selection->items(); switch (psel->mode) { case SPPaintSelector::MODE_EMPTY: diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index a44e9962e..ab345b73f 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -116,7 +116,7 @@ void gr_apply_gradient(Inkscape::Selection *selection, GrDrag *drag, SPGradient } // If no drag or no dragger selected, act on selection - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ gr_apply_gradient_to_item(*i, gr, initialType, initialMode, initialMode); } @@ -216,7 +216,7 @@ void gr_get_dt_selected_gradient(Inkscape::Selection *selection, SPGradient *&gr { SPGradient *gradient = 0; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i;// get the items gradient, not the getVector() version SPStyle *style = item->style; @@ -284,7 +284,7 @@ void gr_read_selection( Inkscape::Selection *selection, } // If no selected dragger, read desktop selection - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; SPStyle *style = item->style; diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp index 3643ce00c..5d326253c 100644 --- a/src/widgets/mesh-toolbar.cpp +++ b/src/widgets/mesh-toolbar.cpp @@ -89,7 +89,7 @@ void ms_read_selection( Inkscape::Selection *selection, bool first = true; ms_type = SP_MESH_TYPE_COONS; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; SPStyle *style = item->style; @@ -216,7 +216,7 @@ void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMesh *&ms_sel { SPMesh *gradient = 0; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i;// get the items gradient, not the getVector() version SPStyle *style = item->style; diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp index 55127206c..34cebbe1b 100644 --- a/src/widgets/pencil-toolbar.cpp +++ b/src/widgets/pencil-toolbar.cpp @@ -240,7 +240,7 @@ static void sp_pencil_tb_defaults(GtkWidget * /*widget*/, GObject *obj) static void sp_simplify_flatten(GtkWidget * /*widget*/, GObject *obj) { SPDesktop *desktop = static_cast(g_object_get_data(obj, "desktop")); - std::vector selected = desktop->getSelection()->itemList(); + std::vector selected = desktop->getSelection()->items(); for (std::vector::iterator it(selected.begin()); it != selected.end(); ++it){ SPLPEItem* lpeitem = dynamic_cast(*it); if (lpeitem && lpeitem->hasPathEffect()){ @@ -285,7 +285,7 @@ static void sp_pencil_tb_tolerance_value_changed(GtkAdjustment *adj, GObject *tb gtk_adjustment_get_value(adj)); g_object_set_data( tbl, "freeze", GINT_TO_POINTER(FALSE) ); SPDesktop *desktop = static_cast(g_object_get_data(tbl, "desktop")); - std::vector selected = desktop->getSelection()->itemList(); + std::vector selected = desktop->getSelection()->items(); for (std::vector::iterator it(selected.begin()); it != selected.end(); ++it){ SPLPEItem* lpeitem = dynamic_cast(*it); if (lpeitem && lpeitem->hasPathEffect()){ diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp index bc27d003c..2ee38608b 100644 --- a/src/widgets/rect-toolbar.cpp +++ b/src/widgets/rect-toolbar.cpp @@ -106,7 +106,7 @@ static void sp_rtb_value_changed(GtkAdjustment *adj, GObject *tbl, gchar const * bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ if (SP_IS_RECT(*i)) { if (gtk_adjustment_get_value(adj) != 0) { @@ -243,7 +243,7 @@ static void sp_rect_toolbox_selection_changed(Inkscape::Selection *selection, GO } purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ if (SP_IS_RECT(*i)) { n_selected++; diff --git a/src/widgets/spiral-toolbar.cpp b/src/widgets/spiral-toolbar.cpp index 7e7398091..8f5f10bf8 100644 --- a/src/widgets/spiral-toolbar.cpp +++ b/src/widgets/spiral-toolbar.cpp @@ -79,7 +79,7 @@ static void sp_spl_tb_value_changed(GtkAdjustment *adj, GObject *tbl, Glib::ustr gchar* namespaced_name = g_strconcat("sodipodi:", value_name.data(), NULL); bool modmade = false; - std::vector itemlist=desktop->getSelection()->itemList(); + std::vector itemlist= desktop->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ SPItem *item = *i; if (SP_IS_SPIRAL(item)) { @@ -195,7 +195,7 @@ static void sp_spiral_toolbox_selection_changed(Inkscape::Selection *selection, purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ SPItem *item = *i; if (SP_IS_SPIRAL(item)) { diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp index 982a3c854..fc8757162 100644 --- a/src/widgets/star-toolbar.cpp +++ b/src/widgets/star-toolbar.cpp @@ -83,7 +83,7 @@ static void sp_stb_magnitude_value_changed( GtkAdjustment *adj, GObject *dataKlu bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -128,7 +128,7 @@ static void sp_stb_proportion_value_changed( GtkAdjustment *adj, GObject *dataKl bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -185,7 +185,7 @@ static void sp_stb_sides_flat_state_changed( EgeSelectOneAction *act, GObject *d gtk_action_set_visible( prop_action, !flat ); } - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -224,7 +224,7 @@ static void sp_stb_rounded_value_changed( GtkAdjustment *adj, GObject *dataKludg bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -264,7 +264,7 @@ static void sp_stb_randomized_value_changed( GtkAdjustment *adj, GObject *dataKl bool modmade = false; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { @@ -367,7 +367,7 @@ sp_star_toolbox_selection_changed(Inkscape::Selection *selection, GObject *tbl) purge_repr_listener( tbl, tbl ); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (SP_IS_STAR(item)) { diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 84a6e77ad..7ed2c3180 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -515,7 +515,7 @@ void StrokeStyle::markerSelectCB(MarkerComboBox *marker_combo, StrokeStyle *spw, //spw->updateMarkerHist(which); Inkscape::Selection *selection = spw->desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end();++i){ SPItem *item = *i; if (!SP_IS_SHAPE(item) || SP_IS_RECT(item)) { // can't set marker to rect, until it's converted to using @@ -988,7 +988,7 @@ StrokeStyle::updateLine() if (!sel || sel->isEmpty()) return; - std::vector const objects = sel->itemList(); + std::vector const objects = sel->items(); SPObject * const object = objects[0]; SPStyle * const style = object->style; @@ -1044,7 +1044,7 @@ StrokeStyle::scaleLine() SPDocument *document = desktop->getDocument(); Inkscape::Selection *selection = desktop->getSelection(); - std::vector items=selection->itemList(); + std::vector items= selection->items(); /* TODO: Create some standardized method */ SPCSSAttr *css = sp_repr_css_attr_new(); diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 23acb74af..3d08b04f1 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -378,7 +378,7 @@ static void sp_text_align_mode_changed( EgeSelectOneAction *act, GObject *tbl ) // move the x of all texts to preserve the same bbox Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ if (SP_IS_TEXT(*i)) { SPItem *item = *i; @@ -560,7 +560,7 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl ) // Only need to save for undo if a text item has been changed. Inkscape::Selection *selection = desktop->getSelection(); bool modmade = false; - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ if (SP_IS_TEXT (*i)) { modmade = true; @@ -625,7 +625,7 @@ static void sp_text_lineheight_unit_changed( gpointer /* */, GObject *tbl ) SPDesktop *desktop = SP_ACTIVE_DESKTOP; Inkscape::Selection *selection = desktop->getSelection(); - std::vector itemlist=selection->itemList(); + std::vector itemlist= selection->items(); // Convert between units if ((unit->abbr == "" || unit->abbr == "em") && old_unit == SP_CSS_UNIT_EX) { @@ -1120,7 +1120,7 @@ static void sp_text_toolbox_selection_changed(Inkscape::Selection */*selection*/ // Only flowed text can be justified, only normal text can be kerned... // Find out if we have flowed text now so we can use it several places gboolean isFlow = false; - std::vector itemlist=SP_ACTIVE_DESKTOP->getSelection()->itemList(); + std::vector itemlist= SP_ACTIVE_DESKTOP->getSelection()->items(); for(std::vector::const_iterator i=itemlist.begin();i!=itemlist.end(); ++i){ // const gchar* id = reinterpret_cast(items->data)->getId(); // std::cout << " " << id << std::endl; diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index e319a1a6b..ea953ac27 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -12,6 +12,8 @@ #include #include "object-set.h" +using namespace Inkscape; + class ObjectSetTest: public DocPerCaseTest { public: ObjectSetTest() { @@ -196,11 +198,11 @@ TEST_F(ObjectSetTest, SetOrder) { set->add(E); set->add(C); EXPECT_EQ(5, set->size()); - auto it = set->range().begin(); + auto it = set->objects().begin(); EXPECT_EQ(A, *it++); EXPECT_EQ(D, *it++); EXPECT_EQ(B, *it++); EXPECT_EQ(E, *it++); EXPECT_EQ(C, *it++); - EXPECT_EQ(set->range().end(), it); + EXPECT_EQ(set->objects().end(), it); } \ No newline at end of file -- cgit v1.2.3 From a51df2ab1eb079b2588ccb9398440f403d11c34d Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 27 Jun 2016 16:59:48 +0200 Subject: Added more tests (bzr r14954.1.11) --- CMakeScripts/ConfigCompileFlags.cmake | 4 +- CMakeScripts/DefineDependsandFlags.cmake | 2 - src/object-set.cpp | 28 +-------- src/object-set.h | 26 +++++++- testfiles/src/object-set-test.cpp | 105 ++++++++++++++++++++++++++----- 5 files changed, 116 insertions(+), 49 deletions(-) diff --git a/CMakeScripts/ConfigCompileFlags.cmake b/CMakeScripts/ConfigCompileFlags.cmake index 453ceef21..602886219 100644 --- a/CMakeScripts/ConfigCompileFlags.cmake +++ b/CMakeScripts/ConfigCompileFlags.cmake @@ -1,6 +1,8 @@ set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}") add_definitions(-Wall -Wformat-security -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch) -add_definitions(-O2) +# TODO temporary flag +add_definitions(-O0) +add_definitions(-std=c++11) # Define the flags for profiling if desired: if(WITH_PROFILING) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 9c4d6b085..706860a00 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -10,8 +10,6 @@ list(APPEND INKSCAPE_INCS ${PROJECT_SOURCE_DIR} # generated includes ${CMAKE_BINARY_DIR}/include ) -# TODO temporary flag -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") # ---------------------------------------------------------------------------- # Files we include diff --git a/src/object-set.cpp b/src/object-set.cpp index 627544a21..518ce15a3 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -174,13 +174,8 @@ bool ObjectSet::isEmpty() { return container.size() == 0; } - SPObject *ObjectSet::single() { - if (container.size() == 1) { - return *container.begin(); - } - - return nullptr; + return container.size() == 1 ? *container.begin() : nullptr; } SPItem *ObjectSet::singleItem() { @@ -257,27 +252,6 @@ void ObjectSet::set(SPObject *object) { // _emitSignals(); } -void ObjectSet::setList(const std::vector &objs) { - _clear(); - addList(objs); -} - -void ObjectSet::addList(const std::vector &objs) { - for (std::vector::const_iterator iter = objs.begin(); iter != objs.end(); ++iter) { - SPObject *obj = *iter; - if (!includes(obj)) { - add(obj); - } - } -} - -void ObjectSet::add(const std::vector::iterator& from, const std::vector::iterator& to) { - for(auto it = from; it != to; ++it) { - _add(*it); - } -} - - Geom::OptRect ObjectSet::bounds(SPItem::BBoxType type) const { return (type == SPItem::GEOMETRIC_BBOX) ? diff --git a/src/object-set.h b/src/object-set.h index 49a875562..29083863b 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include "sp-object.h" #include "sp-item.h" @@ -84,7 +86,12 @@ public: * \param from the begin iterator * \param to the end iterator */ - void add(const std::vector::iterator& from, const std::vector::iterator& to); + template + void add(InputIterator from, InputIterator to) { + for(auto it = from; it != to; ++it) { + _add(*it); + } + } /** * Removes an item from the set of selected objects. @@ -176,14 +183,27 @@ public: * * @param objs the objects to select */ - void setList(const std::vector &objs); + template + typename boost::enable_if, void>::type + setList(const std::vector &objs) { + _clear(); + addList(objs); + } /** * Adds the specified objects to selection, without deselecting first. * * @param objs the objects to select */ - void addList(std::vector const &objs); + template + typename boost::enable_if, void>::type + addList(const std::vector &objs) { + for (auto obj: objs) { + if (!includes(obj)) { + add(obj); + } + } + } /** Returns the bounding rectangle of the selection. */ Geom::OptRect bounds(SPItem::BBoxType type) const; diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index ea953ac27..e294a5a51 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -10,6 +10,8 @@ */ #include #include +#include +#include #include "object-set.h" using namespace Inkscape; @@ -67,11 +69,98 @@ TEST_F(ObjectSetTest, Basics) { EXPECT_TRUE(set->includes(C)); EXPECT_FALSE(set->includes(D)); EXPECT_FALSE(set->includes(X)); + EXPECT_FALSE(set->includes(nullptr)); set->remove(A); EXPECT_EQ(2, set->size()); EXPECT_FALSE(set->includes(A)); set->clear(); EXPECT_EQ(0, set->size()); + bool resultNull = set->add(nullptr); + EXPECT_FALSE(resultNull); + EXPECT_EQ(0, set->size()); + bool resultNull2 = set->remove(nullptr); + EXPECT_FALSE(resultNull2); +} + +TEST_F(ObjectSetTest, Advanced) { + set->add(A); + set->add(B); + set->add(C); + EXPECT_TRUE(set->includes(C)); + set->toggle(C); + EXPECT_EQ(2, set->size()); + EXPECT_FALSE(set->includes(C)); + set->toggle(D); + EXPECT_EQ(3, set->size()); + EXPECT_TRUE(set->includes(D)); + set->toggle(D); + EXPECT_EQ(2, set->size()); + EXPECT_FALSE(set->includes(D)); + EXPECT_EQ(nullptr, set->single()); + set->set(X); + EXPECT_EQ(1, set->size()); + EXPECT_TRUE(set->includes(X)); + EXPECT_EQ(X, set->single()); + EXPECT_FALSE(set->isEmpty()); + set->clear(); + EXPECT_TRUE(set->isEmpty()); + std::vector list1 {A, B, C, D}; + std::vector list2 {E, F}; + set->addList(list1); + EXPECT_EQ(4, set->size()); + set->addList(list2); + EXPECT_EQ(6, set->size()); + EXPECT_TRUE(set->includes(A)); + EXPECT_TRUE(set->includes(B)); + EXPECT_TRUE(set->includes(C)); + EXPECT_TRUE(set->includes(D)); + EXPECT_TRUE(set->includes(E)); + EXPECT_TRUE(set->includes(F)); + set->setList(list2); + EXPECT_EQ(2, set->size()); + EXPECT_TRUE(set->includes(E)); + EXPECT_TRUE(set->includes(F)); +} + +TEST_F(ObjectSetTest, Items) { + SPRect* rect10x100 = (SPRect *) SPFactory::createObject("svg:rect"); +// rect10x100->invoke_build(_doc, _doc->rroot, 1); + SPRect* rect20x40 = (SPRect *) SPFactory::createObject("svg:rect"); +// rect20x40->invoke_build(_doc, _doc->rroot, 1); +// SPRect* rect30x30 = (SPRect *) SPFactory::createObject("svg:rect"); +// rect30x30->invoke_build(_doc, _doc->rroot, 1); +// rect10x100->width = 10; +// rect10x100->height = 100; +// rect20x40->width = 20; +// rect20x40->height = 40; +// rect30x30->width = 30; +// rect30x30->height = 30; + set->add(rect10x100); + EXPECT_EQ(rect10x100, set->singleItem()); + EXPECT_EQ(rect10x100->getRepr(), set->singleRepr()); + set->add(rect20x40); + EXPECT_EQ(nullptr, set->singleItem()); + EXPECT_EQ(nullptr, set->singleRepr()); +// set->add(rect30x30); +// EXPECT_EQ(3, set->size()); +// EXPECT_EQ(rect10x100, set->smallestItem(ObjectSet::CompareSize::HORIZONTAL)); +// EXPECT_EQ(rect30x30, set->smallestItem(ObjectSet::CompareSize::VERTICAL)); +// EXPECT_EQ(rect20x40, set->smallestItem(ObjectSet::CompareSize::AREA)); +// EXPECT_EQ(rect30x30, set->largestItem(ObjectSet::CompareSize::HORIZONTAL)); +// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::VERTICAL)); +// EXPECT_EQ(rect10x100, set->largestItem(ObjectSet::CompareSize::AREA)); +} + +TEST_F(ObjectSetTest, Ranges) { + std::vector objs {A, D, B, E, C, F}; + set->add(objs.begin() + 1, objs.end() - 1); + EXPECT_EQ(4, set->size()); + auto it = set->objects().begin(); + EXPECT_EQ(D, *it++); + EXPECT_EQ(B, *it++); + EXPECT_EQ(E, *it++); + EXPECT_EQ(C, *it++); + EXPECT_EQ(set->objects().end(), it); } TEST_F(ObjectSetTest, Autoremoving) { @@ -190,19 +279,3 @@ TEST_F(ObjectSetTest, SetRemoving) { EXPECT_STREQ(nullptr, A->getId()); EXPECT_STREQ(nullptr, C->getId()); } - -TEST_F(ObjectSetTest, SetOrder) { - set->add(A); - set->add(D); - set->add(B); - set->add(E); - set->add(C); - EXPECT_EQ(5, set->size()); - auto it = set->objects().begin(); - EXPECT_EQ(A, *it++); - EXPECT_EQ(D, *it++); - EXPECT_EQ(B, *it++); - EXPECT_EQ(E, *it++); - EXPECT_EQ(C, *it++); - EXPECT_EQ(set->objects().end(), it); -} \ No newline at end of file -- cgit v1.2.3 From 22262f2db6747eb516283b92abcfd348c700911a Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Fri, 1 Jul 2016 20:57:32 +0200 Subject: Added xmlNodes as range function (bzr r14954.1.12) --- CMakeLists.txt | 1 + CMakeScripts/ConfigCompileFlags.cmake | 21 +++++---------- src/object-set.cpp | 9 ++----- src/object-set.h | 45 +++++++++++++++++++++++---------- src/selection-chemistry.cpp | 20 +++++++-------- src/splivarot.cpp | 2 +- src/ui/dialog/export.cpp | 9 +++---- src/ui/dialog/filter-effects-dialog.cpp | 2 +- testfiles/src/object-set-test.cpp | 15 +++++++++++ 9 files changed, 73 insertions(+), 51 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 94dbf60df..79fea4f71 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,7 @@ else() message("No gmock/gtest found! Perhaps you wish to run 'bash download-gtest.sh' to download it.") endif() +include(CMakeScripts/ConfigCompileFlags.cmake) include(CMakeScripts/ConfigPaths.cmake) # Installation Paths include(CMakeScripts/DefineDependsandFlags.cmake) # Includes, Compiler Flags, and Link Libraries include(CMakeScripts/HelperMacros.cmake) # Misc Utility Macros diff --git a/CMakeScripts/ConfigCompileFlags.cmake b/CMakeScripts/ConfigCompileFlags.cmake index 602886219..85a8a151c 100644 --- a/CMakeScripts/ConfigCompileFlags.cmake +++ b/CMakeScripts/ConfigCompileFlags.cmake @@ -1,28 +1,21 @@ -set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}") -add_definitions(-Wall -Wformat-security -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch) -# TODO temporary flag -add_definitions(-O0) -add_definitions(-std=c++11) - # Define the flags for profiling if desired: if(WITH_PROFILING) set(COMPILE_PROFILING_FLAGS "-pg") set(LINK_PROFILING_FLAGS "-pg") endif() -add_definitions(-DVERSION=\\\"${INKSCAPE_VERSION}\\\") +# add_definitions(-DVERSION=\\\"${INKSCAPE_VERSION}\\\") add_definitions(${DEFINE_FLAGS} -DHAVE_CONFIG_H -D_INTL_REDIRECT_INLINE) if(WIN32) add_definitions(-DXP_WIN) endif(WIN32) -# For Inkboard: -add_definitions(-DHAVE_SSL "-DRELAYTOOL_SSL=\"static const int libssl_is_present=1; static int __attribute__((unused)) libssl_symbol_is_present(char *s){ return 1; }\"") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILE_PROFILING_FLAGS} ") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMPILE_PROFILING_FLAGS} ") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ") +# TODO +add_definitions("-std=c++11") -set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} ") +#set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} ") -# message(STATUS "${CMAKE_CXX_FLAGS}") +message(STATUS "${CMAKE_CXX_FLAGS}") diff --git a/src/object-set.cpp b/src/object-set.cpp index 518ce15a3..1240e5198 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -15,6 +15,8 @@ #include "box3d.h" #include "persp3d.h" #include "preferences.h" +#include +#include namespace Inkscape { @@ -233,13 +235,6 @@ std::vector ObjectSet::items() { return result; } -std::vector ObjectSet::xmlNodes() { - std::vector list = items(); - std::vector result; - std::transform(list.begin(), list.end(), std::back_inserter(result), [](SPItem* item) { return item->getRepr(); }); - return result; -} - Inkscape::XML::Node *ObjectSet::singleRepr() { SPObject *obj = single(); return obj ? obj->getRepr() : nullptr; diff --git a/src/object-set.h b/src/object-set.h index 29083863b..ea6534350 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include #include @@ -39,6 +41,26 @@ class Node; struct hashed{}; struct random_access{}; +struct is_item { + bool operator()(SPObject* obj) { + return SP_IS_ITEM(obj); + } +}; + +struct object_to_item { + typedef SPItem* result_type; + SPItem* operator()(SPObject* obj) const { + return SP_ITEM(obj); + } +}; + +struct object_to_node { + typedef XML::Node* result_type; + XML::Node* operator()(SPObject* obj) const { + return obj->getRepr(); + } +}; + typedef boost::multi_index_container< SPObject*, boost::multi_index::indexed_by< @@ -56,21 +78,11 @@ typedef boost::any_range< SPObject* const&, std::ptrdiff_t> SPObjectRange; -typedef boost::any_range< - SPItem*, - boost::random_access_traversal_tag, - SPItem* const&, - std::ptrdiff_t> SPItemRange; - -typedef boost::any_range< - XML::Node*, - boost::random_access_traversal_tag, - XML::Node* const&, - std::ptrdiff_t> XMLNodeRange; - class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; + typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; + typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; ObjectSet() {}; virtual ~ObjectSet(); @@ -169,7 +181,11 @@ public: std::vector items(); /** Returns a list of the xml nodes of all selected objects. */ - std::vector xmlNodes(); + XMLNodeRange xmlNodes() { + return XMLNodeRange(container.get() + | boost::adaptors::filtered(is_item()) + | boost::adaptors::transformed(object_to_node())); + } /** * Returns a single selected object's xml node. @@ -255,6 +271,9 @@ protected: }; +typedef ObjectSet::SPItemRange SPItemRange; +typedef ObjectSet::XMLNodeRange XMLNodeRange; + } // namespace Inkscape #endif //INKSCAPE_PROTOTYPE_OBJECTSET_H diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index ded776fea..82f89c03a 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -454,7 +454,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat desktop->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Select object(s) to duplicate.")); return; } - std::vector reprs(selection->xmlNodes()); + std::vector reprs(selection->xmlNodes().begin(), selection->xmlNodes().end()); if(duplicateLayer){ reprs.clear(); @@ -763,7 +763,7 @@ void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) return; } - std::vector p (selection->xmlNodes()); + std::vector p (selection->xmlNodes().begin(), selection->xmlNodes().end()); selection->clear(); @@ -1048,7 +1048,7 @@ void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *deskto return; } - std::vector rl(selection->xmlNodes()); + std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_iterator l=rl.begin(); l!=rl.end();++l) { @@ -1132,7 +1132,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des return; } - std::vector rl(selection->xmlNodes()); + std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { @@ -1722,8 +1722,8 @@ void sp_selection_remove_transform(SPDesktop *desktop) Inkscape::Selection *selection = desktop->getSelection(); - std::vector items = selection->xmlNodes(); - for (std::vector::const_iterator l=items.begin();l!=items.end() ;++l) { + auto items = selection->xmlNodes(); + for (auto l=items.begin();l!=items.end() ;++l) { (*l)->setAttribute("transform", NULL, false); } @@ -2603,7 +2603,7 @@ void sp_selection_clone(SPDesktop *desktop) return; } - std::vector reprs (selection->xmlNodes()); + std::vector reprs(selection->xmlNodes().begin(), selection->xmlNodes().end()); selection->clear(); @@ -3472,12 +3472,12 @@ void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring return; } - std::vector const reprlst = selection->xmlNodes(); + auto reprlst = selection->xmlNodes(); bool filename_search = TRUE; bool xdpi_search = TRUE; bool ydpi_search = TRUE; - for (std::vector::const_iterator i=reprlst.begin();filename_search&&xdpi_search&&ydpi_search&&i!=reprlst.end();++i){ + for (auto i=reprlst.begin();filename_search&&xdpi_search&&ydpi_search&&i!=reprlst.end();++i){ gchar const *dpi_string; Inkscape::XML::Node *repr = *i; @@ -3765,7 +3765,7 @@ void sp_selection_set_clipgroup(SPDesktop *desktop) return; } - std::vector p(selection->xmlNodes()); + std::vector p(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(p.begin(),p.end(),sp_repr_compare_position_bool); diff --git a/src/splivarot.cpp b/src/splivarot.cpp index d4ef3f9c2..09d74a010 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -689,7 +689,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool } } else { // find out the bottom object - std::vector sorted(selection->xmlNodes()); + std::vector sorted(selection->xmlNodes().begin(), selection->xmlNodes().end()); sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 6d2842511..dbee80af9 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -820,8 +820,8 @@ void Export::onAreaToggled () one that's nice */ if (filename.empty()) { const gchar * id = "object"; - const std::vector reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes(); - for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { + auto reprlst = SP_ACTIVE_DESKTOP->getSelection()->xmlNodes(); + for(auto i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; if (repr->attribute("id")) { id = repr->attribute("id"); @@ -1231,15 +1231,14 @@ void Export::onExport () break; } case SELECTION_SELECTION: { - std::vector reprlst; SPDocument * doc = SP_ACTIVE_DOCUMENT; bool modified = false; bool saved = DocumentUndo::getUndoSensitive(doc); DocumentUndo::setUndoSensitive(doc, false); - reprlst = desktop->getSelection()->xmlNodes(); + auto reprlst = desktop->getSelection()->xmlNodes(); - for(std::vector::const_iterator i=reprlst.begin(); reprlst.end() != i; ++i) { + for(auto i=reprlst.begin(); reprlst.end() != i; ++i) { Inkscape::XML::Node * repr = *i; const gchar * temp_string; Glib::ustring dir = Glib::path_get_dirname(filename.c_str()); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index dfc19f3cc..ccba5a278 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -691,7 +691,7 @@ private: void select_svg_element(){ Inkscape::Selection* sel = _desktop->getSelection(); if (sel->isEmpty()) return; - Inkscape::XML::Node* node = sel->xmlNodes()[0]; + Inkscape::XML::Node* node = sel->xmlNodes().front(); if (!node || !node->matchAttributeName("id")) return; std::ostringstream xlikhref; diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index e294a5a51..ea3471bf0 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -13,6 +13,7 @@ #include #include #include "object-set.h" +#include using namespace Inkscape; @@ -123,6 +124,8 @@ TEST_F(ObjectSetTest, Advanced) { } TEST_F(ObjectSetTest, Items) { + // cannot test smallestItem and largestItem functions due to too many dependencies + // uncomment if the problem is fixed SPRect* rect10x100 = (SPRect *) SPFactory::createObject("svg:rect"); // rect10x100->invoke_build(_doc, _doc->rroot, 1); SPRect* rect20x40 = (SPRect *) SPFactory::createObject("svg:rect"); @@ -161,6 +164,18 @@ TEST_F(ObjectSetTest, Ranges) { EXPECT_EQ(E, *it++); EXPECT_EQ(C, *it++); EXPECT_EQ(set->objects().end(), it); + SPObject* rect1 = SPFactory::createObject("svg:rect"); + SPObject* rect2 = SPFactory::createObject("svg:rect"); + SPObject* rect3 = SPFactory::createObject("svg:rect"); + set->add(rect1); + set->add(rect2); + set->add(rect3); + EXPECT_EQ(7, set->size()); + auto xmlNode = set->xmlNodes().begin(); + EXPECT_EQ(rect1->getRepr(), *xmlNode++); + EXPECT_EQ(rect2->getRepr(), *xmlNode++); + EXPECT_EQ(rect3->getRepr(), *xmlNode++); + EXPECT_EQ(set->xmlNodes().end(), xmlNode); } TEST_F(ObjectSetTest, Autoremoving) { -- cgit v1.2.3 From da0dcbcc4053c9e9c693f31189b4676768e07abc Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sun, 3 Jul 2016 21:13:47 +0200 Subject: Added tests (bzr r14954.1.15) --- testfiles/src/object-set-test.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index ea3471bf0..a745ace29 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -172,10 +172,17 @@ TEST_F(ObjectSetTest, Ranges) { set->add(rect3); EXPECT_EQ(7, set->size()); auto xmlNode = set->xmlNodes().begin(); + EXPECT_EQ(3, boost::distance(set->xmlNodes())); EXPECT_EQ(rect1->getRepr(), *xmlNode++); EXPECT_EQ(rect2->getRepr(), *xmlNode++); EXPECT_EQ(rect3->getRepr(), *xmlNode++); EXPECT_EQ(set->xmlNodes().end(), xmlNode); + auto item = set->items().begin(); + EXPECT_EQ(3, boost::distance(set->items())); + EXPECT_EQ(rect1, *item++); + EXPECT_EQ(rect2, *item++); + EXPECT_EQ(rect3, *item++); + EXPECT_EQ(set->items().end(), item); } TEST_F(ObjectSetTest, Autoremoving) { -- cgit v1.2.3 From af9a8fb23a525dc0392890762651f315b32544e8 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Tue, 5 Jul 2016 13:49:26 +0200 Subject: Added simple test for SPObject (bzr r14954.1.16) --- CMakeScripts/ConfigCompileFlags.cmake | 2 +- testfiles/CMakeLists.txt | 1 + testfiles/src/object-set-test.cpp | 2 +- testfiles/src/sp-object-test.cpp | 69 +++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 testfiles/src/sp-object-test.cpp diff --git a/CMakeScripts/ConfigCompileFlags.cmake b/CMakeScripts/ConfigCompileFlags.cmake index 85a8a151c..e9694c2b7 100644 --- a/CMakeScripts/ConfigCompileFlags.cmake +++ b/CMakeScripts/ConfigCompileFlags.cmake @@ -12,9 +12,9 @@ if(WIN32) endif(WIN32) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ") -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ") # TODO add_definitions("-std=c++11") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 ${COMPILE_PROFILING_FLAGS} ") #set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} ") diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt index e764220bc..716ef468b 100644 --- a/testfiles/CMakeLists.txt +++ b/testfiles/CMakeLists.txt @@ -17,6 +17,7 @@ set(TEST_SOURCES attributes-test color-profile-test dir-util-test + sp-object-test object-set-test) set (_optional_unittest_libs ) diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index a745ace29..7d79eb3b8 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -12,7 +12,7 @@ #include #include #include -#include "object-set.h" +#include #include using namespace Inkscape; diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp new file mode 100644 index 000000000..594fd9eb7 --- /dev/null +++ b/testfiles/src/sp-object-test.cpp @@ -0,0 +1,69 @@ +/* + * Multiindex container for selection + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ +#include +#include +#include +#include +#include + +class SPObjectTest: public DocPerCaseTest { +public: + SPObjectTest() { + a = new SPItem(); + b = new SPItem(); + c = new SPItem(); + d = new SPItem(); + e = new SPItem(); + } + ~SPObjectTest() { + delete a; + delete b; + delete c; + delete d; + delete e; + } + SPObject* a; + SPObject* b; + SPObject* c; + SPObject* d; + SPObject* e; +}; + +TEST_F(SPObjectTest, Basics) { + d->invoke_build(_doc, _doc->rroot, 1); + c->invoke_build(_doc, _doc->rroot, 1); + b->invoke_build(_doc, _doc->rroot, 1); + a->attach(b, a->lastChild()); + a->attach(c, a->lastChild()); + a->attach(d, a->lastChild()); + EXPECT_TRUE(a->hasChildren()); + EXPECT_EQ(d, a->lastChild()); + auto children = a->childList(false); + EXPECT_EQ(3, children.size()); + EXPECT_EQ(b, children[0]); + EXPECT_EQ(c, children[1]); + EXPECT_EQ(d, children[2]); + b->reorder(d); + children = a->childList(false); + EXPECT_EQ(3, children.size()); + EXPECT_EQ(c, children[0]); + EXPECT_EQ(d, children[1]); + EXPECT_EQ(b, children[2]); + a->detach(d); + EXPECT_EQ(b, a->lastChild()); + children = a->childList(false); + EXPECT_EQ(2, children.size()); + EXPECT_EQ(c, children[0]); + EXPECT_EQ(b, children[1]); + a->detach(c); + a->detach(b); + EXPECT_FALSE(a->hasChildren()); +} -- cgit v1.2.3 From dca182031f3a9c95ae6a1f06c139a89c298846a1 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Sun, 10 Jul 2016 16:51:02 +0200 Subject: Improve font editing dialog: 1. Allow for fonts with other than 1000 units per em. 2. Allow setting 'ascent', 'descent', etc. 3. Allow setting individual glyph horizontal advances. 4. Fix bug where 'units-per-em' was not read correctly. (bzr r15014.1.1) --- src/display/nr-svgfonts.cpp | 42 ++++++--- src/display/nr-svgfonts.h | 3 +- src/sp-font.cpp | 6 +- src/ui/dialog/svg-fonts-dialog.cpp | 182 +++++++++++++++++++++++++++++-------- src/ui/dialog/svg-fonts-dialog.h | 37 +++++++- 5 files changed, 215 insertions(+), 55 deletions(-) diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 011f51977..3f8113de8 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -197,6 +197,7 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, bool is_horizontal_text = true; //TODO _utf8 = (char*) utf8; + double font_height = units_per_em(); while(g_utf8_get_char(_utf8)){ len = 0; for (i=0; i < (unsigned long) this->glyphs.size(); i++){ @@ -207,11 +208,11 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, //apply glyph kerning if appropriate SPHkern *hkern = dynamic_cast(node); if (hkern && is_horizontal_text && MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){ - x -= (hkern->k / 1000.0);//TODO: use here the height of the font + x -= (hkern->k / font_height); } SPVkern *vkern = dynamic_cast(node); if (vkern && !is_horizontal_text && MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){ - y -= (vkern->k / 1000.0);//TODO: use here the "height" of the font + y -= (vkern->k / font_height); } } previous_unicode = const_cast(this->glyphs[i]->unicode.c_str());//used for kerning checking @@ -221,8 +222,15 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, (*glyphs)[count++].y = y; //advance glyph coordinates: - if (is_horizontal_text) x+=(this->font->horiz_adv_x/1000.0);//TODO: use here the height of the font - else y+=(this->font->vert_adv_y/1000.0);//TODO: use here the "height" of the font + if (is_horizontal_text) { + if (this->glyphs[i]->horiz_adv_x != 0) { + x+=(this->glyphs[i]->horiz_adv_x/font_height); + } else { + x+=(this->font->horiz_adv_x/font_height); + } + } else { + y+=(this->font->vert_adv_y/font_height); + } _utf8+=len; //advance 'len' bytes in our string pointer //continue; goto raptorz; @@ -235,8 +243,8 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, (*glyphs)[count++].y = y; //advance glyph coordinates: - if (is_horizontal_text) x+=(this->font->horiz_adv_x/1000.0);//TODO: use here the height of the font - else y+=(this->font->vert_adv_y/1000.0);//TODO: use here the "height" of the font + if (is_horizontal_text) x+=(this->font->horiz_adv_x/font_height);//TODO: use here the height of the font + else y+=(this->font->vert_adv_y/font_height);//TODO: use here the "height" of the font _utf8 = g_utf8_next_char(_utf8); //advance 1 char in our string pointer } @@ -252,9 +260,7 @@ SvgFont::render_glyph_path(cairo_t* cr, Geom::PathVector* pathv){ cairo_new_path(cr); //adjust scale of the glyph -// Geom::Scale s(1.0/((SPFont*) node->parent)->horiz_adv_x); - Geom::Scale s(1.0/1000);//TODO: use here the units-per-em attribute? - + Geom::Scale s(1.0/units_per_em()); Geom::Rect area( Geom::Point(0,0), Geom::Point(1,1) ); //I need help here! (reaction: note that the 'area' parameter is an *optional* rect, so you can pass an empty Geom::OptRect() ) feed_pathvector_to_cairo (cr, *pathv, s, area, false, 0); @@ -270,11 +276,11 @@ SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){ Geom::PathVector SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){ - double units_per_em = 1000; + double units_per_em = 1024; for (SPObject *obj = spfont->children; obj; obj = obj->next){ if (dynamic_cast(obj)) { //XML Tree being directly used here while it shouldn't be. - sp_repr_get_double(obj->getRepr(), "units_per_em", &units_per_em); + sp_repr_get_double(obj->getRepr(), "units-per-em", &units_per_em); } } @@ -395,6 +401,20 @@ void SvgFont::refresh(){ this->userfont = NULL; } +double SvgFont::units_per_em() { + double units_per_em = 1024; + for (SPObject *obj = font->children; obj; obj = obj->next){ + if (dynamic_cast(obj)) { + //XML Tree being directly used here while it shouldn't be. + sp_repr_get_double(obj->getRepr(), "units-per-em", &units_per_em); + } + } + if (units_per_em <= 0.0) { + units_per_em = 1024; + } + return units_per_em; +} + /* Local Variables: mode:c++ diff --git a/src/display/nr-svgfonts.h b/src/display/nr-svgfonts.h index 21ab3ed02..d4488fb17 100644 --- a/src/display/nr-svgfonts.h +++ b/src/display/nr-svgfonts.h @@ -52,7 +52,8 @@ private: SPMissingGlyph* missingglyph; sigc::connection glyph_modified_connection; - bool drawing_expose_cb (Gtk::Widget *widget, GdkEventExpose *event, void* data); + double units_per_em(); + //bool drawing_expose_cb (Gtk::Widget *widget, GdkEventExpose *event, void* data); }; #endif //#ifndef NR_SVGFONTS_H_SEEN diff --git a/src/sp-font.cpp b/src/sp-font.cpp index 341a6159f..6bdb24cf6 100644 --- a/src/sp-font.cpp +++ b/src/sp-font.cpp @@ -27,9 +27,9 @@ //I think we should have extra stuff here and in the set method in order to set default value as specified at http://www.w3.org/TR/SVG/fonts.html // TODO determine better values and/or make these dynamic: -double FNT_DEFAULT_ADV = 90; // TODO determine proper default -double FNT_DEFAULT_ASCENT = 90; // TODO determine proper default -double FNT_UNITS_PER_EM = 90; // TODO determine proper default +double FNT_DEFAULT_ADV = 1024; // TODO determine proper default +double FNT_DEFAULT_ASCENT = 768; // TODO determine proper default +double FNT_UNITS_PER_EM = 1024; // TODO determine proper default SPFont::SPFont() : SPObject() { this->horiz_origin_x = 0; diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 08ebbcf14..3672fbe9e 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -31,6 +31,7 @@ #include "sp-font-face.h" #include "desktop.h" +#include #include "display/nr-svgfonts.h" #include "verbs.h" #include "sp-glyph.h" @@ -76,6 +77,15 @@ bool SvgFontDrawingArea::on_expose_event (GdkEventExpose */*event*/){ cr->set_font_size (_y-20); cr->move_to (10, 10); cr->show_text (_text.c_str()); + + // Draw some lines to show line area. + cr->set_source_rgb( 0.5, 0.5, 0.5 ); + cr->move_to ( 0, 10); + cr->line_to (_x, 10); + cr->stroke(); + cr->move_to ( 0, _y-10); + cr->line_to (_x, _y-10); + cr->stroke(); } return TRUE; } @@ -112,6 +122,7 @@ void SvgFontsDialog::AttrEntry::set_text(char* t){ entry.set_text(t); } +// 'font-family' has a problem as it is also a presentation attribute for void SvgFontsDialog::AttrEntry::on_attr_changed(){ SPObject* o = NULL; @@ -141,6 +152,74 @@ void SvgFontsDialog::AttrEntry::on_attr_changed(){ } +SvgFontsDialog::AttrSpin::AttrSpin(SvgFontsDialog* d, gchar* lbl, const SPAttributeEnum attr) { + + this->dialog = d; + this->attr = attr; + this->add(* Gtk::manage(new Gtk::Label(lbl)) ); + this->add(spin); + this->show_all(); + spin.set_range(0, 4096); + spin.set_increments(16, 0); + spin.signal_value_changed().connect(sigc::mem_fun(*this, &SvgFontsDialog::AttrSpin::on_attr_changed)); +} + +void SvgFontsDialog::AttrSpin::set_range(double low, double high){ + spin.set_range(low, high); +} + +void SvgFontsDialog::AttrSpin::set_value(double v){ + spin.set_value(v); +} + +void SvgFontsDialog::AttrSpin::on_attr_changed(){ + + SPObject* o = NULL; + switch (this->attr) { + + // attributes + case SP_ATTR_HORIZ_ORIGIN_X: + case SP_ATTR_HORIZ_ORIGIN_Y: + case SP_ATTR_HORIZ_ADV_X: + case SP_ATTR_VERT_ORIGIN_X: + case SP_ATTR_VERT_ORIGIN_Y: + case SP_ATTR_VERT_ADV_Y: + o = this->dialog->get_selected_spfont(); + break; + + // attributes + case SP_ATTR_UNITS_PER_EM: + case SP_ATTR_ASCENT: + case SP_ATTR_DESCENT: + case SP_ATTR_CAP_HEIGHT: + case SP_ATTR_X_HEIGHT: + for(SPObject* node = this->dialog->get_selected_spfont()->children; node; node=node->next){ + if (SP_IS_FONTFACE(node)){ + o = node; + continue; + } + } + break; + + default: + o = NULL; + } + + const gchar* name = (const gchar*)sp_attribute_name(this->attr); + if(name && o) { + std::ostringstream temp; + temp << this->spin.get_value(); + o->getRepr()->setAttribute((const gchar*) name, temp.str().c_str() ); + o->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); + + Glib::ustring undokey = "svgfonts:"; + undokey += name; + DocumentUndo::maybeDone(o->document, undokey.c_str(), SP_VERB_DIALOG_SVG_FONTS, + _("Set SVG Font attribute")); + } + +} + Gtk::HBox* SvgFontsDialog::AttrCombo(gchar* lbl, const SPAttributeEnum /*attr*/){ Gtk::HBox* hbox = Gtk::manage(new Gtk::HBox()); hbox->add(* Gtk::manage(new Gtk::Label(lbl)) ); @@ -283,7 +362,6 @@ void SvgFontsDialog::update_fonts() } void SvgFontsDialog::on_preview_text_changed(){ - _font_da.set_text((gchar*) _preview_entry.get_text().c_str()); _font_da.set_text(_preview_entry.get_text()); } @@ -308,10 +386,19 @@ void SvgFontsDialog::update_global_settings_tab(){ SPFont* font = get_selected_spfont(); if (!font) return; + _horiz_adv_x_spin->set_value(font->horiz_adv_x); + _horiz_origin_x_spin->set_value(font->horiz_origin_x); + _horiz_origin_y_spin->set_value(font->horiz_origin_y); + SPObject* obj; for (obj=font->children; obj; obj=obj->next){ if (SP_IS_FONTFACE(obj)){ _familyname_entry->set_text((SP_FONTFACE(obj))->font_family); + _units_per_em_spin->set_value((SP_FONTFACE(obj))->units_per_em); + _ascent_spin->set_value((SP_FONTFACE(obj))->ascent); + _descent_spin->set_value((SP_FONTFACE(obj))->descent); + _x_height_spin->set_value((SP_FONTFACE(obj))->x_height); + _cap_height_spin->set_value((SP_FONTFACE(obj))->cap_height); } } } @@ -326,11 +413,8 @@ void SvgFontsDialog::on_font_selection_changed(){ kerning_preview.set_svgfont(svgfont); _font_da.set_svgfont(svgfont); _font_da.redraw(); - - double set_width = spfont->horiz_adv_x; - setwidth_spin.set_value(set_width); - - kerning_slider->set_range(0, set_width); + + kerning_slider->set_range(0, spfont->horiz_adv_x); kerning_slider->set_draw_value(false); kerning_slider->set_value(0); @@ -340,17 +424,6 @@ void SvgFontsDialog::on_font_selection_changed(){ update_sensitiveness(); } -void SvgFontsDialog::on_setfontdata_changed(){ - SPFont* spfont = this->get_selected_spfont(); - if (spfont){ - spfont->horiz_adv_x = setwidth_spin.get_value(); - //TODO: tell cairo that the glyphs cache has to be invalidated - // The current solution is to recreate the whole cairo svgfont. - // This is not a good solution to the issue because big fonts will result in poor performance. - update_glyphs(); - } -} - SPGlyphKerning* SvgFontsDialog::get_selected_kerning_pair() { Gtk::TreeModel::iterator i = _KerningPairsList.get_selection()->get_selected(); @@ -384,24 +457,37 @@ SPGlyph* SvgFontsDialog::get_selected_glyph() } Gtk::VBox* SvgFontsDialog::global_settings_tab(){ - _familyname_entry = new AttrEntry(this, (gchar*) _("Family Name:"), SP_PROP_FONT_FAMILY); + _font_label = new Gtk::Label( _("Font Attributes") ); + _horiz_adv_x_spin = new AttrSpin( this, (gchar*) _("Horiz. Advance X"), SP_ATTR_HORIZ_ADV_X); + _horiz_origin_x_spin = new AttrSpin( this, (gchar*) _("Horiz. Origin X "), SP_ATTR_HORIZ_ORIGIN_X); + _horiz_origin_y_spin = new AttrSpin( this, (gchar*) _("Horiz. Origin Y "), SP_ATTR_HORIZ_ORIGIN_Y); + _font_face_label = new Gtk::Label( _("Font Face Attributes") ); + _familyname_entry = new AttrEntry(this, (gchar*) _("Family Name:"), SP_PROP_FONT_FAMILY); + _units_per_em_spin = new AttrSpin( this, (gchar*) _("Units per em"), SP_ATTR_UNITS_PER_EM); + _ascent_spin = new AttrSpin( this, (gchar*) _("Ascent:"), SP_ATTR_ASCENT); + _descent_spin = new AttrSpin( this, (gchar*) _("Descent:"), SP_ATTR_DESCENT); + _cap_height_spin = new AttrSpin( this, (gchar*) _("Cap Height:"), SP_ATTR_CAP_HEIGHT); + _x_height_spin = new AttrSpin( this, (gchar*) _("x Height:"), SP_ATTR_X_HEIGHT); + + _descent_spin->set_range(-4096,0); + + global_vbox.pack_start(*_font_label, false, false); + global_vbox.pack_start(*_horiz_adv_x_spin, false, false); + global_vbox.pack_start(*_horiz_origin_x_spin, false, false); + global_vbox.pack_start(*_horiz_origin_y_spin, false, false); + global_vbox.pack_start(*_font_face_label, false, false); + global_vbox.pack_start(*_familyname_entry, false, false); + global_vbox.pack_start(*_units_per_em_spin, false, false); + global_vbox.pack_start(*_ascent_spin, false, false); + global_vbox.pack_start(*_descent_spin, false, false); + global_vbox.pack_start(*_cap_height_spin, false, false); + global_vbox.pack_start(*_x_height_spin, false, false); - global_vbox.pack_start(*_familyname_entry, false, false); /* global_vbox->add(*AttrCombo((gchar*) _("Style:"), SP_PROP_FONT_STYLE)); global_vbox->add(*AttrCombo((gchar*) _("Variant:"), SP_PROP_FONT_VARIANT)); global_vbox->add(*AttrCombo((gchar*) _("Weight:"), SP_PROP_FONT_WEIGHT)); */ -//Set Width (horiz_adv_x): - Gtk::HBox* setwidth_hbox = Gtk::manage(new Gtk::HBox()); - setwidth_hbox->add(*Gtk::manage(new Gtk::Label(_("Set width:")))); - setwidth_hbox->add(setwidth_spin); - - setwidth_spin.signal_changed().connect(sigc::mem_fun(*this, &SvgFontsDialog::on_setfontdata_changed)); - setwidth_spin.set_range(0, 4096); - setwidth_spin.set_increments(10, 0); - global_vbox.pack_start(*setwidth_hbox, false, false); - return &global_vbox; } @@ -417,9 +503,10 @@ SvgFontsDialog::populate_glyphs_box() for(SPObject* node = spfont->children; node; node=node->next){ if (SP_IS_GLYPH(node)){ Gtk::TreeModel::Row row = *(_GlyphsListStore->append()); - row[_GlyphsListColumns.glyph_node] = static_cast(node); + row[_GlyphsListColumns.glyph_node] = static_cast(node); row[_GlyphsListColumns.glyph_name] = (static_cast(node))->glyph_name; - row[_GlyphsListColumns.unicode] = (static_cast(node))->unicode; + row[_GlyphsListColumns.unicode] = (static_cast(node))->unicode; + row[_GlyphsListColumns.advance] = (static_cast(node))->horiz_adv_x; } } } @@ -492,7 +579,7 @@ void SvgFontsDialog::add_glyph(){ Geom::PathVector SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){ - double units_per_em = 1000; + double units_per_em = 1024; SPObject* obj; for (obj = get_selected_spfont()->children; obj; obj=obj->next){ if (SP_IS_FONTFACE(obj)){ @@ -500,9 +587,7 @@ SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){ sp_repr_get_double(obj->getRepr(), "units-per-em", &units_per_em); } } - double baseline_offset = units_per_em - get_selected_spfont()->horiz_origin_y; - //This matrix flips y-axis and places the origin at baseline Geom::Affine m(Geom::Coord(1),Geom::Coord(0),Geom::Coord(0),Geom::Coord(-1),Geom::Coord(0),Geom::Coord(baseline_offset)); return pathv*m; @@ -639,6 +724,26 @@ void SvgFontsDialog::glyph_unicode_edit(const Glib::ustring&, const Glib::ustrin update_glyphs(); } +void SvgFontsDialog::glyph_advance_edit(const Glib::ustring&, const Glib::ustring& str){ + Gtk::TreeModel::iterator i = _GlyphsList.get_selection()->get_selected(); + if (!i) return; + + SPGlyph* glyph = (*i)[_GlyphsListColumns.glyph_node]; + //XML Tree being directly used here while it shouldn't be. + std::istringstream is(str); + double value; + // Check if input valid + if ((is >> value)) { + glyph->getRepr()->setAttribute("horiz-adv-x", str.c_str()); + SPDocument* doc = this->getDesktop()->getDocument(); + DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph advance")); + + update_glyphs(); + } else { + std::cerr << "SvgFontDialog::glyph_advance_edit: Error in input: " << str << std::endl; + } +} + void SvgFontsDialog::remove_selected_font(){ SPFont* font = get_selected_spfont(); if (!font) return; @@ -707,9 +812,9 @@ Gtk::VBox* SvgFontsDialog::glyphs_tab(){ _GlyphsListScroller.add(_GlyphsList); _GlyphsListStore = Gtk::ListStore::create(_GlyphsListColumns); _GlyphsList.set_model(_GlyphsListStore); - _GlyphsList.append_column_editable(_("Glyph name"), _GlyphsListColumns.glyph_name); + _GlyphsList.append_column_editable(_("Glyph name"), _GlyphsListColumns.glyph_name); _GlyphsList.append_column_editable(_("Matching string"), _GlyphsListColumns.unicode); - + _GlyphsList.append_column_numeric_editable(_("Advance"), _GlyphsListColumns.advance, "%.2f"); Gtk::HBox* hb = Gtk::manage(new Gtk::HBox()); add_glyph_button.set_label(_("Add Glyph")); add_glyph_button.signal_clicked().connect(sigc::mem_fun(*this, &SvgFontsDialog::add_glyph)); @@ -727,6 +832,9 @@ Gtk::VBox* SvgFontsDialog::glyphs_tab(){ dynamic_cast( _GlyphsList.get_column_cell_renderer(1))->signal_edited().connect( sigc::mem_fun(*this, &SvgFontsDialog::glyph_unicode_edit)); + dynamic_cast( _GlyphsList.get_column_cell_renderer(2))->signal_edited().connect( + sigc::mem_fun(*this, &SvgFontsDialog::glyph_advance_edit)); + _glyphs_observer.signal_changed().connect(sigc::mem_fun(*this, &SvgFontsDialog::update_glyphs)); return &glyphs_vbox; @@ -806,7 +914,7 @@ Gtk::VBox* SvgFontsDialog::kerning_tab(){ kerning_amount_hbox->add(*kerning_slider); kerning_preview.set_size(300 + 20, 150 + 20); - _font_da.set_size(150 + 20, 50 + 20); + _font_da.set_size(300 + 50 + 20, 60 + 20); return &kerning_vbox; } diff --git a/src/ui/dialog/svg-fonts-dialog.h b/src/ui/dialog/svg-fonts-dialog.h index e80bbfd39..11bf52187 100644 --- a/src/ui/dialog/svg-fonts-dialog.h +++ b/src/ui/dialog/svg-fonts-dialog.h @@ -86,8 +86,9 @@ public: void on_setfontdata_changed(); void add_font(); Geom::PathVector flip_coordinate_system(Geom::PathVector pathv); + bool updating; - //TODO: AttrEntry is currently unused. Should we remove it? + // Used for font-family class AttrEntry : public Gtk::HBox { public: @@ -100,6 +101,20 @@ public: SPAttributeEnum attr; }; + class AttrSpin : public Gtk::HBox + { + public: + AttrSpin(SvgFontsDialog* d, gchar* lbl, const SPAttributeEnum attr); + void set_value(double v); + void set_range(double low, double high); + Inkscape::UI::Widget::SpinButton* getSpin() { return &spin; } + private: + SvgFontsDialog* dialog; + void on_attr_changed(); + Inkscape::UI::Widget::SpinButton spin; + SPAttributeEnum attr; + }; + private: void update_glyphs(); void update_sensitiveness(); @@ -111,7 +126,8 @@ private: void reset_missing_glyph_description(); void add_glyph(); void glyph_unicode_edit(const Glib::ustring&, const Glib::ustring&); - void glyph_name_edit(const Glib::ustring&, const Glib::ustring&); + void glyph_name_edit( const Glib::ustring&, const Glib::ustring&); + void glyph_advance_edit(const Glib::ustring&, const Glib::ustring&); void remove_selected_glyph(); void remove_selected_font(); void remove_selected_kerning_pair(); @@ -133,7 +149,21 @@ private: Gtk::HBox* AttrCombo(gchar* lbl, const SPAttributeEnum attr); // Gtk::HBox* AttrSpin(gchar* lbl, const SPAttributeEnum attr); Gtk::VBox* global_settings_tab(); + + // + Gtk::Label* _font_label; + AttrSpin* _horiz_adv_x_spin; + AttrSpin* _horiz_origin_x_spin; + AttrSpin* _horiz_origin_y_spin; + + // + Gtk::Label* _font_face_label; AttrEntry* _familyname_entry; + AttrSpin* _units_per_em_spin; + AttrSpin* _ascent_spin; + AttrSpin* _descent_spin; + AttrSpin* _cap_height_spin; + AttrSpin* _x_height_spin; Gtk::VBox* kerning_tab(); Gtk::VBox* glyphs_tab(); @@ -169,11 +199,13 @@ private: add(glyph_node); add(glyph_name); add(unicode); + add(advance); } Gtk::TreeModelColumn glyph_node; Gtk::TreeModelColumn glyph_name; Gtk::TreeModelColumn unicode; + Gtk::TreeModelColumn advance; }; GlyphsColumns _GlyphsListColumns; Glib::RefPtr _GlyphsListStore; @@ -215,7 +247,6 @@ private: SvgFontDrawingArea _font_da, kerning_preview; GlyphComboBox first_glyph, second_glyph; SPGlyphKerning* kerning_pair; - Inkscape::UI::Widget::SpinButton setwidth_spin; #if WITH_GTKMM_3_0 Gtk::Scale* kerning_slider; -- cgit v1.2.3 From 058e95a59ccb2ab1748392acdfdbbffd516c9c81 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 11 Jul 2016 14:24:52 +0200 Subject: First part of new SPObject children list (bzr r14954.1.17) --- src/layer-fns.cpp | 36 +++++------- src/object-set.cpp | 18 +++--- src/selection-chemistry.cpp | 6 +- src/sp-item-group.cpp | 5 +- src/sp-item.cpp | 41 ++++--------- src/sp-mask.cpp | 15 ++--- src/sp-object.cpp | 124 ++++++++++++++++++++++----------------- src/sp-object.h | 29 +++++---- src/ui/widget/layer-selector.cpp | 20 ++----- src/uri-references.cpp | 2 +- testfiles/src/sp-object-test.cpp | 78 +++++++++++++++++++----- 11 files changed, 201 insertions(+), 173 deletions(-) diff --git a/src/layer-fns.cpp b/src/layer-fns.cpp index 3e794a0a4..d149089db 100644 --- a/src/layer-fns.cpp +++ b/src/layer-fns.cpp @@ -36,11 +36,9 @@ bool is_layer(SPObject &object) { * @returns NULL if there are no further layers under a parent */ SPObject *next_sibling_layer(SPObject *layer) { - using std::find_if; - - return find_if( - layer->getNext(), NULL, &is_layer - ); + SPObject::ChildrenList &list = layer->parent->_children; + auto l = std::find_if(++list.iterator_to(*layer), list.end(), &is_layer); + return l != list.end() ? &*l : nullptr; } /** Finds the previous sibling layer for a \a layer @@ -50,11 +48,9 @@ SPObject *next_sibling_layer(SPObject *layer) { SPObject *previous_sibling_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - SPObject *sibling(find_last_if( - layer->parent->firstChild(), layer, &is_layer - )); - - return ( sibling != layer ) ? sibling : NULL; + SPObject::ChildrenList &list = layer->parent->_children; + auto l = find_last_if(list.begin(), list.iterator_to(*layer), &is_layer); + return l != list.iterator_to(*layer) ? &*(l) : nullptr; } /** Finds the first child of a \a layer @@ -62,16 +58,15 @@ SPObject *previous_sibling_layer(SPObject *layer) { * @returns NULL if layer has no sublayers */ SPObject *first_descendant_layer(SPObject *layer) { - using std::find_if; - - SPObject *first_descendant=NULL; - while (layer) { - layer = find_if( - layer->firstChild(), NULL, &is_layer - ); - if (layer) { + SPObject *first_descendant = nullptr; + while (true) { + auto tmp = std::find_if(layer->_children.begin(), layer->_children.end(), &is_layer); + if (tmp != layer->_children.end()) { first_descendant = layer; + } else { + break; } + layer = &*tmp; } return first_descendant; @@ -84,9 +79,8 @@ SPObject *first_descendant_layer(SPObject *layer) { SPObject *last_child_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - return find_last_if( - layer->firstChild(), NULL, &is_layer - ); + auto l = find_last_if(layer->_children.begin(), layer->_children.end(), &is_layer); + return l != layer->_children.end() ? &*l : nullptr; } SPObject *last_elder_layer(SPObject *root, SPObject *layer) { diff --git a/src/object-set.cpp b/src/object-set.cpp index 07f9ea0c8..b7b84e163 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -93,14 +93,14 @@ bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { } void ObjectSet::_removeDescendantsFromSet(SPObject *object) { - for (auto& child: object->childList(false)) { - if (includes(child)) { - _remove(child); + for (auto& child: object->_children) { + if (includes(&child)) { + _remove(&child); // there is certainly no children of this child in the set continue; } - _removeDescendantsFromSet(child); + _removeDescendantsFromSet(&child); } } @@ -130,8 +130,8 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { bool flag = true; while (o->parent != nullptr) { - for (auto &child: o->parent->childList(false)) { - if(child != o && !includes(child)) { + for (auto &child: o->parent->_children) { + if(&child != o && !includes(&child)) { flag = false; break; } @@ -147,9 +147,9 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { void ObjectSet::_removeAncestorsFromSet(SPObject *object) { SPObject* o = object; while (o->parent != nullptr) { - for (auto &child: o->parent->childList(false)) { - if (child != o) { - _add(child); + for (auto &child: o->parent->_children) { + if (&child != o) { + _add(&child); } } if (includes(o->parent)) { diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 4b5c3f921..1f34f798d 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -4261,11 +4261,11 @@ static void itemtree_map(void (*f)(SPItem *, SPDesktop *), SPObject *root, SPDes f(item, desktop); } } - for ( SPObject::SiblingIterator iter = root->firstChild() ; iter ; ++iter ) { + for (auto& child: root->_children) { //don't recurse into locked layers - SPItem *item = dynamic_cast(&*iter); + SPItem *item = dynamic_cast(&child); if (!(item && desktop->isLayer(item) && item->isLocked())) { - itemtree_map(f, iter, desktop); + itemtree_map(f, &child, desktop); } } } diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 70d2bc732..d775e306f 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -297,9 +297,8 @@ Geom::OptRect SPGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox } void SPGroup::print(SPPrintContext *ctx) { - std::vector l=this->childList(false); - for(std::vector::const_iterator i=l.begin();i!=l.end();++i){ - SPObject *o = *i; + for(auto& child: _children){ + SPObject *o = &child; SPItem *item = dynamic_cast(o); if (item) { item->invoke_print(ctx); diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 9fd6e8ecc..258a5cd14 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -308,50 +308,35 @@ bool is_item(SPObject const &object) { void SPItem::raiseToTop() { using Inkscape::Algorithms::find_last_if; - SPObject *topmost=find_last_if( - next, NULL, &is_item - ); - if (topmost) { + auto topmost = find_last_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); + if (topmost != parent->_children.end()) { getRepr()->parent()->changeOrder( getRepr(), topmost->getRepr() ); } } void SPItem::raiseOne() { - SPObject *next_higher=std::find_if( - next, NULL, &is_item - ); - if (next_higher) { + auto next_higher = std::find_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); + if (next_higher != parent->_children.end()) { Inkscape::XML::Node *ref = next_higher->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); } } void SPItem::lowerOne() { - using Inkscape::Util::MutableList; - using Inkscape::Util::reverse_list; - - MutableList next_lower=std::find_if( - reverse_list( - parent->firstChild(), this - ), - MutableList(), - &is_item - ); - if (next_lower) { - ++next_lower; - Inkscape::XML::Node *ref = ( next_lower ? next_lower->getRepr() : NULL ); + using Inkscape::Algorithms::find_last_if; + + auto next_lower = find_last_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); + if (next_lower != parent->_children.iterator_to(*this)) { + next_lower--; + Inkscape::XML::Node *ref = next_lower->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); } } void SPItem::lowerToBottom() { - using Inkscape::Algorithms::find_last_if; - using Inkscape::Util::MutableList; - using Inkscape::Util::reverse_list; - - SPObject * bottom=parent->firstChild(); - while(dynamic_cast(bottom) && dynamic_cast(bottom->next) && bottom!=this && !is_item(*(bottom->next))) bottom=bottom->next; - if (bottom && bottom != this) { + auto bottom = std::find_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); + if (bottom != parent->_children.iterator_to(*this)) { + bottom--; Inkscape::XML::Node *ref = bottom->getRepr() ; parent->getRepr()->changeOrder(getRepr(), ref); } diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 3537c7bac..a36d8ef29 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -138,12 +138,8 @@ void SPMask::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - std::vector children = this->childList(false); - for (std::vector::const_iterator child = children.begin();child != children.end();++child) { - sp_object_ref(*child); - } - - + std::vector children = this->childList(true); + for (std::vector::const_iterator child = children.begin();child != children.end();++child) { if (flags || ((*child)->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { (*child)->updateDisplay(ctx, flags); @@ -172,11 +168,8 @@ void SPMask::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - std::vector children = this->childList(false); - for (std::vector::const_iterator child = children.begin();child != children.end();++child) { - sp_object_ref(*child); - } - + std::vector children = this->childList(true); + for (std::vector::const_iterator child = children.begin();child != children.end();++child) { if (flags || ((*child)->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { (*child)->emitModified(flags); diff --git a/src/sp-object.cpp b/src/sp-object.cpp index d1659eedc..36957ab49 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -7,8 +7,9 @@ * Stephen Silver * Jon A. Cruz * Abhishek Sharma + * Adrian Boguszewski * - * Copyright (C) 1999-2008 authors + * Copyright (C) 1999-2016 authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -16,6 +17,7 @@ #include #include +#include #include "helper/sp-marshal.h" #include "xml/node-event-vector.h" @@ -398,13 +400,12 @@ void SPObject::changeCSS(SPCSSAttr *css, gchar const *attr) } std::vector SPObject::childList(bool add_ref, Action) { - std::vector l; - for ( SPObject *child = firstChild() ; child; child = child->getNext() ) { + std::vector l; + for (auto& child: _children) { if (add_ref) { - sp_object_ref (child); + sp_object_ref(&child); } - - l.push_back(child); + l.push_back(&child); } return l; @@ -467,9 +468,9 @@ void SPObject::requestOrphanCollection() { } void SPObject::_sendDeleteSignalRecursive() { - for (SPObject *child = firstChild(); child; child = child->getNext()) { - child->_delete_signal.emit(child); - child->_sendDeleteSignalRecursive(); + for (auto& child: _children) { + child._delete_signal.emit(&child); + child._sendDeleteSignalRecursive(); } } @@ -497,12 +498,12 @@ void SPObject::deleteObject(bool propagate, bool propagate_descendants) void SPObject::cropToObject(SPObject *except) { std::vector toDelete; - for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - if (child->isAncestorOf(except)) { - child->cropToObject(except); - } else if(child != except) { - toDelete.push_back(child); + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + if (child.isAncestorOf(except)) { + child.cropToObject(except); + } else if(&child != except) { + toDelete.push_back(&child); } } } @@ -525,6 +526,12 @@ void SPObject::attach(SPObject *object, SPObject *prev) object->parent = this; this->_updateTotalHRefCount(object->_total_hrefcount); + auto it = _children.begin(); + if (prev != nullptr) { + it = ++_children.iterator_to(*prev); + } + _children.insert(it, *object); + SPObject *next; if (prev) { next = prev->next; @@ -541,43 +548,47 @@ void SPObject::attach(SPObject *object, SPObject *prev) object->xml_space.value = this->xml_space.value; } -void SPObject::reorder(SPObject *prev) -{ - //g_return_if_fail(object != NULL); - //g_return_if_fail(SP_IS_OBJECT(object)); - g_return_if_fail(this->parent != NULL); - g_return_if_fail(this != prev); - g_return_if_fail(!prev || SP_IS_OBJECT(prev)); - g_return_if_fail(!prev || prev->parent == this->parent); +void SPObject::reorder(SPObject* obj, SPObject* prev) { + g_return_if_fail(obj != nullptr); + g_return_if_fail(obj->parent); + g_return_if_fail(obj->parent == this); + g_return_if_fail(obj != prev); + g_return_if_fail(!prev || prev->parent == obj->parent); + + auto it = _children.begin(); + if (prev != nullptr) { + it = ++_children.iterator_to(*prev); + } + + _children.splice(it, _children, _children.iterator_to(*obj)); - SPObject *const parent=this->parent; SPObject *old_prev=NULL; - for ( SPObject *child = parent->children ; child && child != this ; + for ( SPObject *child = children ; child && child != obj ; child = child->next ) { old_prev = child; } - SPObject *next=this->next; + SPObject *next=obj->next; if (old_prev) { old_prev->next = next; } else { - parent->children = next; + children = next; } if (!next) { - parent->_last_child = old_prev; + _last_child = old_prev; } if (prev) { next = prev->next; - prev->next = this; + prev->next = obj; } else { - next = parent->children; - parent->children = this; + next = children; + children = obj; } - this->next = next; + obj->next = next; if (!next) { - parent->_last_child = this; + _last_child = obj; } } @@ -589,6 +600,7 @@ void SPObject::detach(SPObject *object) g_return_if_fail(SP_IS_OBJECT(object)); g_return_if_fail(object->parent == this); + _children.erase(_children.iterator_to(*object)); object->releaseReferences(); SPObject *prev=NULL; @@ -618,14 +630,14 @@ void SPObject::detach(SPObject *object) SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr) { g_return_val_if_fail(repr != NULL, NULL); - SPObject *result = 0; + SPObject *result = nullptr; - if ( _last_child && (_last_child->getRepr() == repr) ) { - result = _last_child; // optimization for common scenario + if (_children.size() > 0 && _children.back().getRepr() == repr) { + result = &_children.back(); // optimization for common scenario } else { - for ( SPObject *child = children ; child ; child = child->next ) { - if ( child->getRepr() == repr ) { - result = child; + for (auto& child: _children) { + if (child.getRepr() == repr) { + result = &child; break; } } @@ -656,10 +668,12 @@ void SPObject::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) void SPObject::release() { SPObject* object = this; - debug("id=%p, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object)); - while (object->children) { - object->detach(object->children); + auto tmp = _children | boost::adaptors::transformed([](SPObject& obj){return &obj;}); + std::vector toRelease(tmp.begin(), tmp.end()); + + for (auto& p: toRelease) { + object->detach(p); } } @@ -680,7 +694,7 @@ void SPObject::order_changed(Inkscape::XML::Node *child, Inkscape::XML::Node * / SPObject *ochild = object->get_child_by_repr(child); g_return_if_fail(ochild != NULL); SPObject *prev = new_ref ? object->get_child_by_repr(new_ref) : NULL; - ochild->reorder(prev); + object->reorder(ochild, prev); ochild->_position_changed_signal.emit(ochild); } @@ -1523,33 +1537,33 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool return true; } -SPObject * SPObject::findFirstChild(gchar const *tagname) const +SPObject* SPObject::findFirstChild(gchar const *tagname) const { - for (SPObject *child = children; child; child = child->next) + for (auto& child: const_cast(this)->_children) { - if (child->repr->type() == Inkscape::XML::ELEMENT_NODE && - !strcmp(child->repr->name(), tagname)) { - return child; + if (child.repr->type() == Inkscape::XML::ELEMENT_NODE && + !strcmp(child.repr->name(), tagname)) { + return &child; } } - return NULL; + return nullptr; } char* SPObject::textualContent() const { GString* text = g_string_new(""); - for (const SPObject *child = firstChild(); child; child = child->next) + for (auto& child: _children) { - Inkscape::XML::NodeType child_type = child->repr->type(); + Inkscape::XML::NodeType child_type = child.repr->type(); if (child_type == Inkscape::XML::ELEMENT_NODE) { - char* new_string = child->textualContent(); + char* new_string = child.textualContent(); g_string_append(text, new_string); g_free(new_string); } else if (child_type == Inkscape::XML::TEXT_NODE) { - g_string_append(text, child->repr->content()); + g_string_append(text, child.repr->content()); } } return g_string_free(text, FALSE); @@ -1566,8 +1580,8 @@ void SPObject::recursivePrintTree( unsigned level ) std::cout << " "; } std::cout << (getId()?getId():"No object id") << std::endl; - for (SPObject *child = children; child; child = child->next) { - child->recursivePrintTree( level+1 ); + for (auto& child: _children) { + child.recursivePrintTree(level + 1); } } diff --git a/src/sp-object.h b/src/sp-object.h index 70d3e5df5..6aa006283 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -6,8 +6,9 @@ * Lauris Kaplinski * Jon A. Cruz * Abhishek Sharma + * Adrian Boguszewski * - * Copyright (C) 1999-2002 authors + * Copyright (C) 1999-2016 authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -53,6 +54,7 @@ class SPObject; #include #include #include +#include #include "version.h" #include "util/forward-pointer-iterator.h" @@ -216,6 +218,7 @@ private: char *id; /* Our very own unique id */ Inkscape::XML::Node *repr; /* Our xml representation */ + public: int refCount; std::list hrefList; @@ -279,17 +282,9 @@ public: return object->parent; } }; - /// Switch containing next() method. - struct SiblingIteratorStrategy { - static SPObject const *next(SPObject const *object) { - return object->next; - } - }; typedef Inkscape::Util::ForwardPointerIterator ParentIterator; typedef Inkscape::Util::ForwardPointerIterator ConstParentIterator; - typedef Inkscape::Util::ForwardPointerIterator SiblingIterator; - typedef Inkscape::Util::ForwardPointerIterator ConstSiblingIterator; bool isSiblingOf(SPObject const *object) const { if (object == NULL) return false; @@ -317,7 +312,7 @@ public: */ SPObject *getPrev(); - bool hasChildren() const { return ( children != NULL ); } + bool hasChildren() const { return ( _children.size() > 0 ); } SPObject *firstChild() { return children; } SPObject const *firstChild() const { return children; } @@ -681,9 +676,9 @@ public: void attach(SPObject *object, SPObject *prev); /** - * In list of object's siblings, move object behind prev. + * In list of object's children, move object behind prev. */ - void reorder(SPObject *prev); + void reorder(SPObject* obj, SPObject *prev); /** * Remove object from parent's children, release and unref it. @@ -858,7 +853,17 @@ protected: virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags); + typedef boost::intrusive::list_member_hook<> ListHook; + ListHook _child_hook; public: + typedef boost::intrusive::list< + SPObject, + boost::intrusive::member_hook< + SPObject, + ListHook, + &SPObject::_child_hook + >> ChildrenList; + ChildrenList _children; virtual void read_content(); void recursivePrintTree(unsigned level = 0); // For debugging diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 1a9ce617f..46a0b3547 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -19,6 +19,8 @@ #include "ui/dialog/layer-properties.h" #include +#include +#include #include "desktop.h" @@ -348,27 +350,17 @@ void LayerSelector::_buildSiblingEntries( unsigned depth, SPObject &parent, Inkscape::Util::List hierarchy ) { - using Inkscape::Util::List; using Inkscape::Util::rest; - using Inkscape::Util::reverse_list_in_place; - using Inkscape::Util::filter_list; - Inkscape::Util::List siblings( - reverse_list_in_place( - filter_list( - is_layer(_desktop), parent.firstChild(), NULL - ) - ) - ); + auto siblings = parent._children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed; SPObject *layer( hierarchy ? &*hierarchy : NULL ); - while (siblings) { - _buildEntry(depth, *siblings); - if ( &*siblings == layer ) { + for (auto& sib: siblings) { + _buildEntry(depth, sib); + if ( &sib == layer ) { _buildSiblingEntries(depth+1, *layer, rest(hierarchy)); } - ++siblings; } } diff --git a/src/uri-references.cpp b/src/uri-references.cpp index db46a156f..078834131 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -92,7 +92,7 @@ bool URIReference::_acceptObject(SPObject *obj) const g_warning("cloned object with no known type\n"); return false; } - for (int i = positions.size() - 2; i >= 0; i--) + for (int i = (int) (positions.size() - 2); i >= 0; i--) owner = owner->childList(false)[positions[i]]; } // once we have the "original" object (hopefully) we look at who is referencing it diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp index 594fd9eb7..8419cea23 100644 --- a/testfiles/src/sp-object-test.cpp +++ b/testfiles/src/sp-object-test.cpp @@ -12,7 +12,13 @@ #include #include #include +#include #include +#include +#include + +using namespace Inkscape; +using namespace Inkscape::XML; class SPObjectTest: public DocPerCaseTest { public: @@ -22,6 +28,17 @@ public: c = new SPItem(); d = new SPItem(); e = new SPItem(); + auto sd = new SimpleDocument(); + auto et = new TextNode(Util::share_string("e"), sd); + auto dt = new TextNode(Util::share_string("d"), sd); + auto ct = new TextNode(Util::share_string("c"), sd); + auto bt = new TextNode(Util::share_string("b"), sd); + auto at = new TextNode(Util::share_string("a"), sd); + e->invoke_build(_doc, et, 0); + d->invoke_build(_doc, dt, 0); + c->invoke_build(_doc, ct, 0); + b->invoke_build(_doc, bt, 0); + a->invoke_build(_doc, at, 0); } ~SPObjectTest() { delete a; @@ -38,12 +55,9 @@ public: }; TEST_F(SPObjectTest, Basics) { - d->invoke_build(_doc, _doc->rroot, 1); - c->invoke_build(_doc, _doc->rroot, 1); - b->invoke_build(_doc, _doc->rroot, 1); - a->attach(b, a->lastChild()); a->attach(c, a->lastChild()); - a->attach(d, a->lastChild()); + a->attach(b, nullptr); + a->attach(d, c); EXPECT_TRUE(a->hasChildren()); EXPECT_EQ(d, a->lastChild()); auto children = a->childList(false); @@ -51,19 +65,51 @@ TEST_F(SPObjectTest, Basics) { EXPECT_EQ(b, children[0]); EXPECT_EQ(c, children[1]); EXPECT_EQ(d, children[2]); - b->reorder(d); - children = a->childList(false); - EXPECT_EQ(3, children.size()); - EXPECT_EQ(c, children[0]); - EXPECT_EQ(d, children[1]); - EXPECT_EQ(b, children[2]); - a->detach(d); - EXPECT_EQ(b, a->lastChild()); + a->attach(b, a->lastChild()); + EXPECT_EQ(3, a->_children.size()); + a->reorder(b, b); + EXPECT_EQ(3, a->_children.size()); + EXPECT_EQ(b, &a->_children.front()); + EXPECT_EQ(d, &a->_children.back()); + a->reorder(b, d); + EXPECT_EQ(3, a->_children.size()); + EXPECT_EQ(c, &a->_children.front()); + EXPECT_EQ(b, &a->_children.back()); + a->reorder(d, nullptr); + EXPECT_EQ(3, a->_children.size()); + EXPECT_EQ(d, &a->_children.front()); + EXPECT_EQ(b, &a->_children.back()); + a->reorder(c, b); + EXPECT_EQ(3, a->_children.size()); + EXPECT_EQ(d, &a->_children.front()); + EXPECT_EQ(c, &a->_children.back()); + a->detach(b); + EXPECT_EQ(c, a->lastChild()); children = a->childList(false); EXPECT_EQ(2, children.size()); - EXPECT_EQ(c, children[0]); - EXPECT_EQ(b, children[1]); - a->detach(c); + EXPECT_EQ(d, children[0]); + EXPECT_EQ(c, children[1]); a->detach(b); + EXPECT_EQ(2, a->childList(false).size()); + a->releaseReferences(); EXPECT_FALSE(a->hasChildren()); } + +TEST_F(SPObjectTest, Advanced) { + a->attach(b, a->lastChild()); + a->attach(c, a->lastChild()); + a->attach(d, a->lastChild()); + a->attach(e, a->lastChild()); + EXPECT_EQ(e, a->get_child_by_repr(e->getRepr())); + EXPECT_EQ(c, a->get_child_by_repr(c->getRepr())); +} + +TEST_F(SPObjectTest, Tmp) { + a->attach(b, a->lastChild()); + a->attach(c, a->lastChild()); + a->attach(d, a->lastChild()); + a->attach(e, a->lastChild()); + EXPECT_TRUE(a->hasChildren()); + a->releaseReferences(); + EXPECT_FALSE(a->hasChildren()); +} \ No newline at end of file -- cgit v1.2.3 From d1947e768272c703674129d5c583204ff2b59251 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 13 Jul 2016 13:36:19 +0200 Subject: Second part of new SPObject children list (bzr r14954.1.19) --- src/box3d.cpp | 20 ++-- src/conn-avoid-ref.cpp | 18 ++-- src/desktop-style.cpp | 25 ++--- src/document.cpp | 96 +++++++++---------- src/extension/internal/cairo-render-context.cpp | 23 +++-- src/extension/internal/cairo-renderer.cpp | 8 +- src/extension/internal/emf-print.cpp | 14 ++- src/extension/internal/javafx-out.cpp | 8 +- src/extension/internal/pov-out.cpp | 4 +- src/file.cpp | 16 ++-- src/filter-chemistry.cpp | 14 ++- src/gradient-chemistry.cpp | 20 ++-- src/gradient-drag.cpp | 4 +- src/helper/pixbuf-ops.cpp | 4 +- src/helper/png-write.cpp | 4 +- src/helper/stock-items.cpp | 30 +++--- src/id-clash.cpp | 8 +- src/libnrtype/font-lister.cpp | 4 +- src/live_effects/lpe-perspective_path.cpp | 10 +- src/main.cpp | 4 +- src/object-snapper.cpp | 8 +- src/object-test.h | 1 - src/persp3d.cpp | 13 +-- src/selection-chemistry.cpp | 43 +++++---- src/sp-clippath.cpp | 30 +++--- src/sp-defs.cpp | 14 +-- src/sp-filter.cpp | 8 +- src/sp-flowdiv.cpp | 120 ++++++++++++------------ src/sp-flowregion.cpp | 53 +++++------ src/sp-flowtext.cpp | 54 +++++------ src/sp-gradient.cpp | 41 ++++---- src/sp-hatch.cpp | 17 ++-- src/sp-item-group.cpp | 61 ++++++------ src/sp-item.cpp | 22 ++--- src/sp-mask.cpp | 12 +-- src/sp-mesh-array.cpp | 34 +++---- src/sp-namedview.cpp | 12 +-- src/sp-object-group.cpp | 8 +- src/sp-object.cpp | 22 +---- src/sp-object.h | 9 +- src/sp-pattern.cpp | 30 +++--- src/sp-root.cpp | 15 +-- src/sp-switch.cpp | 7 +- src/sp-text.cpp | 54 +++++------ src/sp-tref.cpp | 6 +- src/sp-tspan.cpp | 80 ++++++++-------- src/splivarot.cpp | 6 +- src/text-chemistry.cpp | 6 +- src/text-editing.cpp | 53 ++++++----- src/ui/clipboard.cpp | 4 +- src/ui/dialog/clonetiler.cpp | 24 ++--- src/ui/dialog/filter-effects-dialog.cpp | 23 ++--- src/ui/dialog/find.cpp | 10 +- src/ui/dialog/font-substitution.cpp | 2 +- src/ui/dialog/objects.cpp | 6 +- src/ui/dialog/spellcheck.cpp | 12 +-- src/ui/dialog/symbols.cpp | 8 +- src/ui/tools/box3d-tool.cpp | 4 +- src/ui/tools/connector-tool.cpp | 6 +- src/ui/tools/tweak-tool.cpp | 16 ++-- src/widgets/gradient-toolbar.cpp | 12 +-- src/widgets/gradient-vector.cpp | 28 +++--- src/widgets/stroke-marker-selector.cpp | 6 +- testfiles/src/sp-object-test.cpp | 23 ++++- 64 files changed, 689 insertions(+), 668 deletions(-) diff --git a/src/box3d.cpp b/src/box3d.cpp index c4c2728e4..0a33ee306 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -259,8 +259,8 @@ void box3d_position_set(SPBox3D *box) { /* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in box3d_side_position_set() to avoid update conflicts with the parent box) */ - for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) { - Box3DSide *side = dynamic_cast(obj); + for (auto& obj: box->_children) { + Box3DSide *side = dynamic_cast(&obj); if (side) { box3d_side_position_set(side); } @@ -275,8 +275,8 @@ Geom::Affine SPBox3D::set_transform(Geom::Affine const &xform) { gdouble const sw = hypot(ret[0], ret[1]); gdouble const sh = hypot(ret[2], ret[3]); - for ( SPObject *child = firstChild(); child; child = child->getNext() ) { - SPItem *childitem = dynamic_cast(child); + for (auto& child: _children) { + SPItem *childitem = dynamic_cast(&child); if (childitem) { // Adjust stroke width childitem->adjust_stroke(sqrt(fabs(sw * sh))); @@ -1074,8 +1074,8 @@ box3d_recompute_z_orders (SPBox3D *box) { static std::map box3d_get_sides(SPBox3D *box) { std::map sides; - for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) { - Box3DSide *side = dynamic_cast(obj); + for (auto& obj: box->_children) { + Box3DSide *side = dynamic_cast(&obj); if (side) { sides[Box3D::face_to_int(side->getFaceId())] = side; } @@ -1217,8 +1217,8 @@ static void box3d_extract_boxes_rec(SPObject *obj, std::list &boxes) if (box) { boxes.push_back(box); } else if (dynamic_cast(obj)) { - for ( SPObject *child = obj->firstChild(); child; child = child->getNext() ) { - box3d_extract_boxes_rec(child, boxes); + for (auto& child: obj->_children) { + box3d_extract_boxes_rec(&child, boxes); } } } @@ -1276,8 +1276,8 @@ SPGroup *box3d_convert_to_group(SPBox3D *box) // create a new group and add the sides (converted to ordinary paths) as its children Inkscape::XML::Node *grepr = xml_doc->createElement("svg:g"); - for ( SPObject *obj = box->firstChild(); obj; obj = obj->getNext() ) { - Box3DSide *side = dynamic_cast(obj); + for (auto& obj: box->_children) { + Box3DSide *side = dynamic_cast(&obj); if (side) { Inkscape::XML::Node *repr = box3d_side_convert_to_path(side); grepr->appendChild(repr); diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp index 9190fe633..638ba48e3 100644 --- a/src/conn-avoid-ref.cpp +++ b/src/conn-avoid-ref.cpp @@ -334,19 +334,19 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item) std::vector get_avoided_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool initialised) { - for (SPObject *child = from->firstChild() ; child != NULL; child = child->next ) { - if (SP_IS_ITEM(child) && - !desktop->isLayer(SP_ITEM(child)) && - !SP_ITEM(child)->isLocked() && - !desktop->itemIsHidden(SP_ITEM(child)) && - (!initialised || SP_ITEM(child)->avoidRef->shapeRef) + for (auto& child: from->_children) { + if (SP_IS_ITEM(&child) && + !desktop->isLayer(SP_ITEM(&child)) && + !SP_ITEM(&child)->isLocked() && + !desktop->itemIsHidden(SP_ITEM(&child)) && + (!initialised || SP_ITEM(&child)->avoidRef->shapeRef) ) { - list.push_back(SP_ITEM(child)); + list.push_back(SP_ITEM(&child)); } - if (SP_IS_ITEM(child) && desktop->isLayer(SP_ITEM(child))) { - list = get_avoided_items(list, child, desktop, initialised); + if (SP_IS_ITEM(&child) && desktop->isLayer(SP_ITEM(&child))) { + list = get_avoided_items(list, &child, desktop, initialised); } } diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index 885d17c21..a52ab3d76 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -163,17 +163,17 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines) return; } - for ( SPObject *child = o->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: o->_children) { if (sp_repr_css_property(css, "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. SPCSSAttr *css_recurse = sp_repr_css_attr_new(); sp_repr_css_merge(css_recurse, css); sp_repr_css_set_property(css_recurse, "opacity", NULL); - sp_desktop_apply_css_recursive(child, css_recurse, skip_lines); + sp_desktop_apply_css_recursive(&child, css_recurse, skip_lines); sp_repr_css_attr_unref(css_recurse); } else { - sp_desktop_apply_css_recursive(child, css, skip_lines); + sp_desktop_apply_css_recursive(&child, css, skip_lines); } } } @@ -1714,10 +1714,11 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) int blendcount = 0; // determine whether filter is simple (blend and/or blur) or complex - for(SPObject *primitive_obj = style->getFilter()->children; - primitive_obj && dynamic_cast(primitive_obj); - primitive_obj = primitive_obj->next) { - SPFilterPrimitive *primitive = dynamic_cast(primitive_obj); + for(auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); + if (!primitive) { + break; + } if (dynamic_cast(primitive)) { ++blendcount; } else if (dynamic_cast(primitive)) { @@ -1730,10 +1731,12 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) // simple filter if(blurcount == 1 || blendcount == 1) { - for(SPObject *primitive_obj = style->getFilter()->children; - primitive_obj && dynamic_cast(primitive_obj); - primitive_obj = primitive_obj->next) { - SPFeBlend *spblend = dynamic_cast(primitive_obj); + for(auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); + if (!primitive) { + break; + } + SPFeBlend *spblend = dynamic_cast(&primitive_obj); if (spblend) { blend = spblend->blend_mode; } diff --git a/src/document.cpp b/src/document.cpp index 902dabbc3..3dcec4795 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -257,9 +257,9 @@ void SPDocument::setCurrentPersp3D(Persp3D * const persp) { void SPDocument::getPerspectivesInDefs(std::vector &list) const { - for (SPObject *i = root->defs->firstChild(); i; i = i->getNext() ) { - if (SP_IS_PERSP3D(i)) { - list.push_back(SP_PERSP3D(i)); + for (auto& i: root->defs->_children) { + if (SP_IS_PERSP3D(&i)) { + list.push_back(SP_PERSP3D(&i)); } } } @@ -1256,12 +1256,12 @@ static std::vector &find_items_in_area(std::vector &s, SPGroup { g_return_val_if_fail(SP_IS_GROUP(group), s); - for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { - s = find_items_in_area(s, SP_GROUP(o), dkey, area, test, take_insensitive, into_groups); + for (auto& o: group->_children) { + if ( SP_IS_ITEM(&o) ) { + if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { + s = find_items_in_area(s, SP_GROUP(&o), dkey, area, test, take_insensitive, into_groups); } else { - SPItem *child = SP_ITEM(o); + SPItem *child = SP_ITEM(&o); Geom::OptRect box = child->desktopVisualBounds(); if ( box && test(area, *box) && (take_insensitive || child->isVisibleAndUnlocked(dkey))) { s.push_back(child); @@ -1278,17 +1278,16 @@ Returns true if an item is among the descendants of group (recursively). */ static bool item_is_in_group(SPItem *item, SPGroup *group) { - bool inGroup = false; - for ( SPObject *o = group->firstChild() ; o && !inGroup; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - if (SP_ITEM(o) == item) { - inGroup = true; - } else if ( SP_IS_GROUP(o) ) { - inGroup = item_is_in_group(item, SP_GROUP(o)); + for (auto& o: group->_children) { + if ( SP_IS_ITEM(&o) ) { + if (SP_ITEM(&o) == item) { + return true; + } else if (SP_IS_GROUP(&o) && item_is_in_group(item, SP_GROUP(&o))) { + return true; } } } - return inGroup; + return false; } SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *group, std::vector const &list,Geom::Point const &p, bool take_insensitive) @@ -1299,21 +1298,24 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for ( SPObject *o = group->firstChild() ; o && !bottomMost; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - SPItem *item = SP_ITEM(o); + for (auto& o: group->_children) { + if (bottomMost) { + break; + } + if (SP_IS_ITEM(&o)) { + SPItem *item = SP_ITEM(&o); Inkscape::DrawingItem *arenaitem = item->get_arenaitem(dkey); arenaitem->drawing().update(); if (arenaitem && arenaitem->pick(p, delta, 1) != NULL && (take_insensitive || item->isVisibleAndUnlocked(dkey))) { - if (find(list.begin(),list.end(),item)!=list.end() ) { + if (find(list.begin(), list.end(), item) != list.end()) { bottomMost = item; } } - if ( !bottomMost && SP_IS_GROUP(o) ) { + if (!bottomMost && SP_IS_GROUP(&o)) { // return null if not found: - bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(o), list, p, take_insensitive); + bottomMost = getItemFromListAtPointBottom(dkey, SP_GROUP(&o), list, p, take_insensitive); } } } @@ -1326,15 +1328,15 @@ The list can be persisted, which improves "find at multiple points" speed. */ void SPDocument::build_flat_item_list(unsigned int dkey, SPGroup *group, gboolean into_groups) const { - for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if (!SP_IS_ITEM(o)) { + for (auto& o: group->_children) { + if (!SP_IS_ITEM(&o)) { continue; } - if (SP_IS_GROUP(o) && (SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { - build_flat_item_list(dkey, SP_GROUP(o), into_groups); + if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { + build_flat_item_list(dkey, SP_GROUP(&o), into_groups); } else { - SPItem *child = SP_ITEM(o); + SPItem *child = SP_ITEM(&o); if (child->isVisibleAndUnlocked(dkey)) { _node_cache.push_front(child); @@ -1390,18 +1392,18 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for ( SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if (!SP_IS_ITEM(o)) { + for (auto& o: group->_children) { + if (!SP_IS_ITEM(&o)) { continue; } - if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) == SPGroup::LAYER) { - SPItem *newseen = find_group_at_point(dkey, SP_GROUP(o), p); + if (SP_IS_GROUP(&o) && SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER) { + SPItem *newseen = find_group_at_point(dkey, SP_GROUP(&o), p); if (newseen) { seen = newseen; } } - if (SP_IS_GROUP(o) && SP_GROUP(o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) { - SPItem *child = SP_ITEM(o); + if (SP_IS_GROUP(&o) && SP_GROUP(&o)->effectiveLayerMode(dkey) != SPGroup::LAYER ) { + SPItem *child = SP_ITEM(&o); Inkscape::DrawingItem *arenaitem = child->get_arenaitem(dkey); arenaitem->drawing().update(); @@ -1595,8 +1597,8 @@ static unsigned int count_objects_recursive(SPObject *obj, unsigned int count) { count++; // obj itself - for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) { - count = count_objects_recursive(i, count); + for (auto& i: obj->_children) { + count = count_objects_recursive(&i, count); } return count; @@ -1621,13 +1623,13 @@ static unsigned int objects_in_document(SPDocument *document) static void vacuum_document_recursive(SPObject *obj) { if (SP_IS_DEFS(obj)) { - for ( SPObject *def = obj->firstChild(); def; def = def->getNext()) { + for (auto& def: obj->_children) { // fixme: some inkscape-internal nodes in the future might not be collectable - def->requestOrphanCollection(); + def.requestOrphanCollection(); } } else { - for ( SPObject *i = obj->firstChild(); i; i = i->getNext() ) { - vacuum_document_recursive(i); + for (auto& i: obj->_children) { + vacuum_document_recursive(&i); } } } @@ -1755,14 +1757,14 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I // Prevent duplicates of solid swatches by checking if equivalent swatch already exists if (src && SP_IS_GRADIENT(src)) { SPGradient *s_gr = SP_GRADIENT(src); - for (SPObject *trg = this->getDefs()->firstChild() ; trg ; trg = trg->getNext()) { - if (trg && (src != trg) && SP_IS_GRADIENT(trg)) { - SPGradient *t_gr = SP_GRADIENT(trg); + for (auto& trg: getDefs()->_children) { + if (&trg && (src != &trg) && SP_IS_GRADIENT(&trg)) { + SPGradient *t_gr = SP_GRADIENT(&trg); if (t_gr && s_gr->isEquivalent(t_gr)) { // Change object references to the existing equivalent gradient - Glib::ustring newid = trg->getId(); + Glib::ustring newid = trg.getId(); if(newid != defid){ // id could be the same if it is a second paste into the same document - change_def_references(src, trg); + change_def_references(src, &trg); } gchar *longid = g_strdup_printf("%s_%9.9d", DuplicateDefString.c_str(), stagger++); def->setAttribute("id", longid ); @@ -1826,9 +1828,9 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I id.erase( pos ); // Check that it really is a duplicate - for (SPObject *trg = this->getDefs()->firstChild() ; trg ; trg = trg->getNext()) { - if( trg && SP_IS_SYMBOL(trg) && src != trg ) { - std::string id2 = trg->getRepr()->attribute("id"); + for (auto& trg: getDefs()->_children) { + if(&trg && SP_IS_SYMBOL(&trg) && src != &trg ) { + std::string id2 = trg.getRepr()->attribute("id"); if( !id.compare( id2 ) ) { duplicate = true; diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index 5d8b0e076..bedf2fa7f 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -986,13 +986,12 @@ void CairoRenderContext::popState(void) static bool pattern_hasItemChildren(SPPattern *pat) { - bool hasItems = false; - for ( SPObject *child = pat->firstChild() ; child && !hasItems; child = child->getNext() ) { - if (SP_IS_ITEM (child)) { - hasItems = true; + for (auto& child: pat->_children) { + if (SP_IS_ITEM (&child)) { + return true; } } - return hasItems; + return false; } cairo_pattern_t* @@ -1087,10 +1086,10 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // show items and render them for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS); - _renderer->renderItem(pattern_ctx, SP_ITEM(child)); + for (auto& child: pat_i->_children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS); + _renderer->renderItem(pattern_ctx, SP_ITEM(&child)); } } break; // do not go further up the chain if children are found @@ -1116,9 +1115,9 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // hide all items for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for ( SPObject *child = pat_i->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_hide(dkey); + for (auto& child: pat_i->_children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_hide(dkey); } } break; // do not go further up the chain if children are found diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 5dc20ab06..088eaf11d 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -741,8 +741,8 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) TRACE(("BEGIN clip\n")); SPObject const *co = cp; - for ( SPObject const *child = co->firstChild() ; child; child = child->getNext() ) { - SPItem const *item = dynamic_cast(child); + for (auto& child: co->_children) { + SPItem const *item = dynamic_cast(&child); if (item) { // combine transform of the item in clippath and the item using clippath: @@ -800,8 +800,8 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) TRACE(("BEGIN mask\n")); SPObject const *co = mask; - for ( SPObject const *child = co->firstChild() ; child; child = child->getNext() ) { - SPItem const *item = dynamic_cast(child); + for (auto& child: co->_children) { + SPItem const *item = dynamic_cast(&child); if (item) { // TODO fix const correctness: renderItem(ctx, const_cast(item)); diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp index 9f3b5475f..c0c086c7a 100644 --- a/src/extension/internal/emf-print.cpp +++ b/src/extension/internal/emf-print.cpp @@ -1042,8 +1042,12 @@ void PrintEmf::do_clip_if_present(SPStyle const *style){ /* find the clipping path */ Geom::PathVector combined_pathvector; Geom::Affine tfc; // clipping transform, generally not the same as item transform - for(item = SP_ITEM(scp->firstChild()); item; item=SP_ITEM(item->getNext())){ - if (SP_IS_GROUP(item)) { // not implemented + for (auto& child: scp->_children) { + item = SP_ITEM(&child); + if (!item) { + break; + } + if (SP_IS_GROUP(item)) { // not implemented // return sp_group_render(item); combined_pathvector = merge_PathVector_with_group(combined_pathvector, item, tfc); } else if (SP_IS_SHAPE(item)) { @@ -1081,7 +1085,11 @@ Geom::PathVector PrintEmf::merge_PathVector_with_group(Geom::PathVector const &c new_combined_pathvector = combined_pathvector; SPGroup *group = SP_GROUP(item); Geom::Affine tfc = item->transform * transform; - for(SPItem *item = SP_ITEM(group->firstChild()); item; item=SP_ITEM(item->getNext())){ + for (auto& child: group->_children) { + item = SP_ITEM(&child); + if (!item) { + break; + } if (SP_IS_GROUP(item)) { new_combined_pathvector = merge_PathVector_with_group(new_combined_pathvector, item, tfc); // could be endlessly recursive on a badly formed SVG } else if (SP_IS_SHAPE(item)) { diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp index 386bde1d6..51608e4fa 100644 --- a/src/extension/internal/javafx-out.cpp +++ b/src/extension/internal/javafx-out.cpp @@ -732,9 +732,9 @@ bool JavaFXOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (SPObject *child = obj->firstChild() ; child ; child = child->next) + for (auto &child: obj->_children) { - if (!doTreeRecursive(doc, child)) { + if (!doTreeRecursive(doc, &child)) { return false; } } @@ -804,9 +804,9 @@ bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (SPObject *child = obj->firstChild() ; child ; child = child->next) + for (auto &child: obj->_children) { - if (!doBody(doc, child)) { + if (!doBody(doc, &child)) { return false; } } diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp index bd2168b68..08f533010 100644 --- a/src/extension/internal/pov-out.cpp +++ b/src/extension/internal/pov-out.cpp @@ -479,9 +479,9 @@ bool PovOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (SPObject *child = obj->firstChild() ; child ; child = child->next) + for (auto &child: obj->_children) { - if (!doTreeRecursive(doc, child)) + if (!doTreeRecursive(doc, &child)) return false; } diff --git a/src/file.cpp b/src/file.cpp index 650ce5d0f..11e5f0a42 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1204,8 +1204,8 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Count the number of top-level items in the imported document. guint items_count = 0; - for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext()) { - if (SP_IS_ITEM(child)) { + for (auto& child: doc->getRoot()->_children) { + if (SP_IS_ITEM(&child)) { items_count++; } } @@ -1234,9 +1234,9 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Construct a new object representing the imported image, // and insert it into the current document. SPObject *new_obj = NULL; - for ( SPObject *child = doc->getRoot()->firstChild(); child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - Inkscape::XML::Node *newitem = child->getRepr()->duplicate(xml_in_doc); + for (auto& child: doc->getRoot()->_children) { + if (SP_IS_ITEM(&child)) { + Inkscape::XML::Node *newitem = child.getRepr()->duplicate(xml_in_doc); // convert layers to groups, and make sure they are unlocked // FIXME: add "preserve layers" mode where each layer from @@ -1249,10 +1249,10 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, } // don't lose top-level defs or style elements - else if (child->getRepr()->type() == Inkscape::XML::ELEMENT_NODE) { - const gchar *tag = child->getRepr()->name(); + else if (child.getRepr()->type() == Inkscape::XML::ELEMENT_NODE) { + const gchar *tag = child.getRepr()->name(); if (!strcmp(tag, "svg:style")) { - in_doc->getRoot()->appendChildRepr(child->getRepr()->duplicate(xml_in_doc)); + in_doc->getRoot()->appendChildRepr(child.getRepr()->duplicate(xml_in_doc)); } } } diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp index 9298a1ffc..2e99842ec 100644 --- a/src/filter-chemistry.cpp +++ b/src/filter-chemistry.cpp @@ -51,8 +51,8 @@ static guint count_filter_hrefs(SPObject *o, SPFilter *filter) i ++; } - for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) { - i += count_filter_hrefs(child, filter); + for (auto& child: o->_children) { + i += count_filter_hrefs(&child, filter); } return i; @@ -491,16 +491,14 @@ void remove_filter_gaussian_blur (SPObject *item) bool filter_is_single_gaussian_blur(SPFilter *filter) { - return (filter->firstChild() && - (filter->firstChild() == filter->lastChild()) && - SP_IS_GAUSSIANBLUR(filter->firstChild())); + return (filter->_children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->_children.front())); } double get_single_gaussian_blur_radius(SPFilter *filter) { - if (filter->firstChild() && - (filter->firstChild() == filter->lastChild()) && - SP_IS_GAUSSIANBLUR(filter->firstChild())) { + if (filter->_children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->_children.front())) { SPGaussianBlur *gb = SP_GAUSSIANBLUR(filter->firstChild()); double x = gb->stdDeviation.getNumber(); diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 59d715149..9c46a2efb 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -199,8 +199,8 @@ static guint count_gradient_hrefs(SPObject *o, SPGradient *gr) i ++; } - for ( SPObject *child = o->firstChild(); child; child = child->getNext() ) { - i += count_gradient_hrefs(child, gr); + for (auto& child: o->_children) { + i += count_gradient_hrefs(&child, gr); } return i; @@ -926,11 +926,11 @@ void sp_item_gradient_reverse_vector(SPItem *item, Inkscape::PaintTarget fill_or GSList *child_objects = NULL; std::vector offsets; double offset; - for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) { - child_reprs = g_slist_prepend (child_reprs, child->getRepr()); - child_objects = g_slist_prepend (child_objects, child); + for (auto& child: vector->_children) { + child_reprs = g_slist_prepend (child_reprs, child.getRepr()); + child_objects = g_slist_prepend (child_objects, &child); offset=0; - sp_repr_get_double(child->getRepr(), "offset", &offset); + sp_repr_get_double(child.getRepr(), "offset", &offset); offsets.push_back(offset); } @@ -979,9 +979,9 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi sp_gradient_repr_set_link(gradient->getRepr(), vector); } - for ( SPObject *child = vector->firstChild(); child; child = child->getNext()) { - if (SP_IS_STOP(child)) { - guint32 color = SP_STOP(child)->get_rgba32(); + for (auto& child: vector->_children) { + if (SP_IS_STOP(&child)) { + guint32 color = SP_STOP(&child)->get_rgba32(); //g_message("Stop color %d", color); gchar c[64]; sp_svg_write_color (c, sizeof(c), @@ -994,7 +994,7 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi ); SPCSSAttr *css = sp_repr_css_attr_new (); sp_repr_css_set_property (css, "stop-color", c); - sp_repr_css_change(child->getRepr(), css, "style"); + sp_repr_css_change(child.getRepr(), css, "style"); sp_repr_css_attr_unref (css); } } diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 555bde786..b9d1fe109 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -2539,9 +2539,9 @@ void GrDrag::deleteSelected(bool just_one) // cannot use vector->vector.stops.size() because the vector might be invalidated by deletion of a midstop // manually count the children, don't know if there already exists a function for this... int len = 0; - for ( SPObject *child = (stopinfo->vector)->firstChild() ; child ; child = child->getNext() ) + for (auto& child: stopinfo->vector->_children) { - if ( SP_IS_STOP(child) ) { + if ( SP_IS_STOP(&child) ) { len ++; } } diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp index 9639096fb..fb1740fc5 100644 --- a/src/helper/pixbuf-ops.cpp +++ b/src/helper/pixbuf-ops.cpp @@ -53,8 +53,8 @@ static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dke // recurse if (!g_slist_find(list, o)) { - for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) { - hide_other_items_recursively(child, list, dkey); + for (auto& child: o->_children) { + hide_other_items_recursively(&child, list, dkey); } } } diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index 9430feeff..c59db9df6 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -374,8 +374,8 @@ static void hide_other_items_recursively(SPObject *o, const std::vector // recurse if (list.end()==find(list.begin(),list.end(),o)) { - for ( SPObject *child = o->firstChild() ; child; child = child->getNext() ) { - hide_other_items_recursively(child, list, dkey); + for (auto& child: o->_children) { + hide_other_items_recursively(&child, list, dkey); } } } diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp index 5a56b89ff..cf10a6c4d 100644 --- a/src/helper/stock-items.cpp +++ b/src/helper/stock-items.cpp @@ -204,37 +204,37 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } SPObject *object = NULL; if (!strcmp(base, "marker") && !stock) { - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (child->getRepr()->attribute("inkscape:stockid") && - !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) && - SP_IS_MARKER(child)) + if (child.getRepr()->attribute("inkscape:stockid") && + !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && + SP_IS_MARKER(&child)) { - object = child; + object = &child; } } } else if (!strcmp(base,"pattern") && !stock) { - for ( SPObject *child = defs->firstChild() ; child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (child->getRepr()->attribute("inkscape:stockid") && - !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) && - SP_IS_PATTERN(child)) + if (child.getRepr()->attribute("inkscape:stockid") && + !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && + SP_IS_PATTERN(&child)) { - object = child; + object = &child; } } } else if (!strcmp(base,"gradient") && !stock) { - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (child->getRepr()->attribute("inkscape:stockid") && - !strcmp(name_p, child->getRepr()->attribute("inkscape:stockid")) && - SP_IS_GRADIENT(child)) + if (child.getRepr()->attribute("inkscape:stockid") && + !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && + SP_IS_GRADIENT(&child)) { - object = child; + object = &child; } } diff --git a/src/id-clash.cpp b/src/id-clash.cpp index 4bd66e858..fecad9eee 100644 --- a/src/id-clash.cpp +++ b/src/id-clash.cpp @@ -187,9 +187,9 @@ find_references(SPObject *elem, refmap_type &refmap) } // recurse - for (SPObject *child = elem->firstChild(); child; child = child->getNext() ) + for (auto& child: elem->_children) { - find_references(child, refmap); + find_references(&child, refmap); } } @@ -242,9 +242,9 @@ change_clashing_ids(SPDocument *imported_doc, SPDocument *current_doc, // recurse - for (SPObject *child = elem->firstChild(); child; child = child->getNext() ) + for (auto& child: elem->_children) { - change_clashing_ids(imported_doc, current_doc, child, refmap, id_changes); + change_clashing_ids(imported_doc, current_doc, &child, refmap, id_changes); } } diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp index 568a7c8cc..937d67895 100644 --- a/src/libnrtype/font-lister.cpp +++ b/src/libnrtype/font-lister.cpp @@ -298,8 +298,8 @@ void FontLister::update_font_list_recursive(SPObject *r, std::listpush_back(Glib::ustring(font_family)); } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - update_font_list_recursive(child, l); + for (auto& child: r->_children) { + update_font_list_recursive(&child, l); } } diff --git a/src/live_effects/lpe-perspective_path.cpp b/src/live_effects/lpe-perspective_path.cpp index c8cdd7912..c62ead2b3 100644 --- a/src/live_effects/lpe-perspective_path.cpp +++ b/src/live_effects/lpe-perspective_path.cpp @@ -107,12 +107,12 @@ void LPEPerspectivePath::refresh(Gtk::Entry* perspective) { perspectiveID = perspective->get_text(); Persp3D *first = 0; Persp3D *persp = 0; - for ( SPObject *child = this->lpeobj->document->getDefs()->firstChild(); child && !persp; child = child->getNext() ) { - if (SP_IS_PERSP3D(child) && first == 0) { - first = SP_PERSP3D(child); + for (auto& child: lpeobj->document->getDefs()->_children) { + if (SP_IS_PERSP3D(&child) && first == 0) { + first = SP_PERSP3D(&child); } - if (SP_IS_PERSP3D(child) && strcmp(child->getId(), const_cast(perspectiveID.c_str())) == 0) { - persp = SP_PERSP3D(child); + if (SP_IS_PERSP3D(&child) && strcmp(child.getId(), const_cast(perspectiveID.c_str())) == 0) { + persp = SP_PERSP3D(&child); break; } } diff --git a/src/main.cpp b/src/main.cpp index 8cf52127b..db908f640 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1228,8 +1228,8 @@ static int sp_process_file_list(GSList *fl) std::vector items; SPRoot *root = doc->getRoot(); doc->ensureUpToDate(); - for ( SPObject *iter = root->firstChild(); iter ; iter = iter->getNext()) { - SPItem* item = (SPItem*) iter; + for (auto& iter: root->_children) { + SPItem* item = (SPItem*) &iter; if (! (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item) || SP_IS_GROUP(item))) { continue; } diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 3e559ee7a..580fb5fc7 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -90,9 +90,9 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, Geom::Rect bbox_to_snap_incl = bbox_to_snap; // _incl means: will include the snapper tolerance bbox_to_snap_incl.expandBy(getSnapperTolerance()); // see? - for ( SPObject *o = parent->firstChild(); o; o = o->getNext() ) { + for (auto& o: parent->_children) { g_assert(dt != NULL); - SPItem *item = dynamic_cast(o); + SPItem *item = dynamic_cast(&o); if (item && !(dt->itemIsHidden(item) && !clip_or_mask)) { // Snapping to items in a locked layer is allowed // Don't snap to hidden objects, unless they're a clipped path or a mask @@ -100,7 +100,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, std::vector::const_iterator i; if (it != NULL) { i = it->begin(); - while (i != it->end() && *i != o) { + while (i != it->end() && *i != &o) { ++i; } } @@ -122,7 +122,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, } if (dynamic_cast(item)) { - _findCandidates(o, it, false, bbox_to_snap, clip_or_mask, additional_affine); + _findCandidates(&o, it, false, bbox_to_snap, clip_or_mask, additional_affine); } else { Geom::OptRect bbox_of_item; Preferences *prefs = Preferences::get(); diff --git a/src/object-test.h b/src/object-test.h index 4f0be3251..0af823684 100644 --- a/src/object-test.h +++ b/src/object-test.h @@ -115,7 +115,6 @@ public: prev = next; next = next->getNext(); } - TS_ASSERT(child->lastChild() == next); // Test hrefcount TS_ASSERT(path->isReferenced()); diff --git a/src/persp3d.cpp b/src/persp3d.cpp index a48481145..849e332bf 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -215,9 +215,10 @@ Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {// Persp3D *persp3d_document_first_persp(SPDocument *document) { Persp3D *first = 0; - for ( SPObject *child = document->getDefs()->firstChild(); child && !first; child = child->getNext() ) { - if (SP_IS_PERSP3D(child)) { - first = SP_PERSP3D(child); + for (auto& child: document->getDefs()->_children) { + if (SP_IS_PERSP3D(&child)) { + first = SP_PERSP3D(&child); + break; } } return first; @@ -533,9 +534,9 @@ persp3d_print_debugging_info (Persp3D *persp) { void persp3d_print_debugging_info_all(SPDocument *document) { - for ( SPObject *child = document->getDefs()->firstChild(); child; child = child->getNext() ) { - if (SP_IS_PERSP3D(child)) { - persp3d_print_debugging_info(SP_PERSP3D(child)); + for (auto& child: document->getDefs()->_children) { + if (SP_IS_PERSP3D(&child)) { + persp3d_print_debugging_info(SP_PERSP3D(&child)); } } persp3d_print_all_selected(); diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 1f34f798d..55f4118b0 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -88,6 +88,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include #include #include +#include #include "sp-item.h" #include "box3d.h" #include "persp3d.h" @@ -432,8 +433,8 @@ static void add_ids_recursive(std::vector &ids, SPObject *obj) ids.push_back(obj->getId()); if (dynamic_cast(obj)) { - for (SPObject *child = obj->firstChild() ; child; child = child->getNext() ) { - add_ids_recursive(ids, child); + for (auto& child: obj->_children) { + add_ids_recursive(ids, &child); } } } @@ -586,20 +587,20 @@ void sp_edit_clear_all(Inkscape::Selection *selection) */ std::vector &get_all_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, bool ingroups, std::vector const &exclude) { - for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { - SPItem *item = dynamic_cast(child); + for (auto& child: from->_children) { + SPItem *item = dynamic_cast(&child); if (item && !desktop->isLayer(item) && (!onlysensitive || !item->isLocked()) && (!onlyvisible || !desktop->itemIsHidden(item)) && - (exclude.empty() || exclude.end() == std::find(exclude.begin(),exclude.end(),child)) + (exclude.empty() || exclude.end() == std::find(exclude.begin(), exclude.end(), &child)) ) { list.insert(list.begin(),item); } if (ingroups || (item && desktop->isLayer(item))) { - list = get_all_items(list, child, desktop, onlyvisible, onlysensitive, ingroups, exclude); + list = get_all_items(list, &child, desktop, onlyvisible, onlysensitive, ingroups, exclude); } } @@ -1200,9 +1201,10 @@ take_style_from_item(SPObject *object) (dynamic_cast(object) && object->children && object->children->next == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style - for (SPObject *last_element = object->lastChild(); last_element != NULL; last_element = last_element->getPrev()) { - if ( last_element->style ) { - SPCSSAttr *temp = sp_css_attr_from_object(last_element, SP_STYLE_FLAG_IFSET); + auto list = object->_children | boost::adaptors::reversed; + for (auto& element: list) { + if (element.style ) { + SPCSSAttr *temp = sp_css_attr_from_object(&element, SP_STYLE_FLAG_IFSET); if (temp) { sp_repr_css_merge(css, temp); sp_repr_css_attr_unref(temp); @@ -1621,10 +1623,10 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons } else if (transform_flowtext_with_frame) { // apply the inverse of the region's transform to the so that the flow remains // the same (even though the output itself gets transformed) - for ( SPObject *region = item->firstChild() ; region ; region = region->getNext() ) { - if (dynamic_cast(region) || dynamic_cast(region)) { - for ( SPObject *item = region->firstChild() ; item ; item = item->getNext() ) { - SPUse *use = dynamic_cast(item); + for (auto& region: item->_children) { + if (dynamic_cast(®ion) || dynamic_cast(®ion)) { + for (auto& itm: region._children) { + SPUse *use = dynamic_cast(&itm); if ( use ) { use->doWriteTransform(use->getRepr(), use->transform.inverse(), NULL, compensate); } @@ -2702,8 +2704,9 @@ sp_selection_unlink(SPDesktop *desktop) // Get a copy of current selection. std::vector new_select; bool unlinked = false; - auto items= selection->items(); - for (auto i=boost::rbegin(items);i!=boost::rend(items);++i){ + std::vector items(selection->items().begin(), selection->items().end()); + + for (auto i=items.rbegin();i!=items.rend();++i){ SPItem *item = *i; if (dynamic_cast(item)) { @@ -3432,9 +3435,9 @@ void sp_selection_untile(SPDesktop *desktop) Geom::Affine pat_transform = basePat->getTransform(); pat_transform *= item->transform; - for (SPObject *child = pattern->firstChild() ; child != NULL; child = child->next ) { - if (dynamic_cast(child)) { - Inkscape::XML::Node *copy = child->getRepr()->duplicate(xml_doc); + for (auto& child: pattern->_children) { + if (dynamic_cast(&child)) { + Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); SPItem *i = dynamic_cast(desktop->currentLayer()->appendChildRepr(copy)); // FIXME: relink clones to the new canvas objects @@ -4100,9 +4103,9 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { for ( std::map::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) { SPObject *obj = (*it).first; // Group containing the clipped paths or masks GSList *items_to_move = NULL; - for ( SPObject *child = obj->firstChild() ; child; child = child->getNext() ) { + for (auto& child: obj->_children) { // Collect all clipped paths and masks within a single group - Inkscape::XML::Node *copy = child->getRepr()->duplicate(xml_doc); + Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); if(copy->attribute("inkscape:original-d") && copy->attribute("inkscape:path-effect")) { copy->setAttribute("d", copy->attribute("inkscape:original-d")); diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp index 0c07d1b3d..25bf77f00 100644 --- a/src/sp-clippath.cpp +++ b/src/sp-clippath.cpp @@ -128,9 +128,9 @@ void SPClipPath::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild(); child; child = child->getNext()) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -167,9 +167,9 @@ void SPClipPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (SPObject *child = this->firstChild(); child; child = child->getNext()) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -200,9 +200,9 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); display = sp_clippath_view_new_prepend(display, key, ai); - for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - Inkscape::DrawingItem *ac = SP_ITEM(child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS); + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + Inkscape::DrawingItem *ac = SP_ITEM(&child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS); if (ac) { /* The order is not important in clippath */ @@ -223,9 +223,9 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int } void SPClipPath::hide(unsigned int key) { - for ( SPObject *child = firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_hide(key); + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_hide(key); } } @@ -252,9 +252,9 @@ void SPClipPath::setBBox(unsigned int key, Geom::OptRect const &bbox) { Geom::OptRect SPClipPath::geometricBounds(Geom::Affine const &transform) { Geom::OptRect bbox; - for (SPObject *i = firstChild(); i; i = i->getNext()) { - if (SP_IS_ITEM(i)) { - Geom::OptRect tmp = SP_ITEM(i)->geometricBounds(Geom::Affine(SP_ITEM(i)->transform) * transform); + for (auto& i: _children) { + if (SP_IS_ITEM(&i)) { + Geom::OptRect tmp = SP_ITEM(&i)->geometricBounds(Geom::Affine(SP_ITEM(&i)->transform) * transform); bbox.unionWith(tmp); } } diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp index dd779c0da..af4ea96d7 100644 --- a/src/sp-defs.cpp +++ b/src/sp-defs.cpp @@ -54,9 +54,9 @@ void SPDefs::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -79,8 +79,8 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); } @@ -93,8 +93,8 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index c17c67fc5..da3f12f5f 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -268,8 +268,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML } GSList *l = NULL; - for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(doc, NULL, flags); if (crepr) { l = g_slist_prepend (l, crepr); @@ -282,8 +282,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML l = g_slist_remove (l, l->data); } } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp index 8d9c51ab8..ad04f0d78 100644 --- a/src/sp-flowdiv.cpp +++ b/src/sp-flowdiv.cpp @@ -27,9 +27,9 @@ void SPFlowdiv::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -65,9 +65,9 @@ void SPFlowdiv::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -104,15 +104,15 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape GSList *l = NULL; - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr = NULL; - if ( SP_IS_FLOWTSPAN (child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_FLOWPARA(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_FLOWTSPAN (&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -126,13 +126,13 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape l = g_slist_remove(l, l->data); } } else { - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_FLOWTSPAN (child) ) { - child->updateRepr(flags); - } else if ( SP_IS_FLOWPARA(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_FLOWTSPAN (&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -168,9 +168,9 @@ void SPFlowtspan::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -206,9 +206,9 @@ void SPFlowtspan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -242,15 +242,15 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca GSList *l = NULL; - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr = NULL; - if ( SP_IS_FLOWTSPAN(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_FLOWPARA(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_FLOWTSPAN(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -264,13 +264,13 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca l = g_slist_remove(l, l->data); } } else { - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_FLOWTSPAN(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_FLOWPARA(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_FLOWTSPAN(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -307,9 +307,9 @@ void SPFlowpara::update(SPCtx *ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -343,9 +343,9 @@ void SPFlowpara::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -379,15 +379,15 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap GSList *l = NULL; - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr = NULL; - if ( SP_IS_FLOWTSPAN(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_FLOWPARA(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_FLOWTSPAN(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -401,13 +401,13 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for ( SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_FLOWTSPAN(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_FLOWPARA(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_FLOWTSPAN(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_FLOWPARA(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 5715e5eb1..71e029072 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -63,9 +63,9 @@ void SPFlowregion::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -102,9 +102,9 @@ void SPFlowregion::UpdateComputed(void) } computed.clear(); - for (SPObject* child = firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Shape *shape = 0; - GetDest(child, &shape); + GetDest(&child, &shape); computed.push_back(shape); } } @@ -118,9 +118,9 @@ void SPFlowregion::modified(guint flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -145,9 +145,9 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc } GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -161,10 +161,9 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc l = g_slist_remove(l, l->data); } - } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - child->updateRepr(flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + child.updateRepr(flags); } } } @@ -221,9 +220,9 @@ void SPFlowregionExclude::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -259,8 +258,8 @@ void SPFlowregionExclude::UpdateComputed(void) computed = NULL; } - for ( SPObject* child = firstChild() ; child ; child = child->getNext() ) { - GetDest(child, &computed); + for (auto& child: _children) { + GetDest(&child, &computed); } } @@ -273,9 +272,9 @@ void SPFlowregionExclude::modified(guint flags) { GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse (l); @@ -301,8 +300,8 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc GSList *l = NULL; - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -316,8 +315,8 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc } } else { - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 51fb3ae89..eed882800 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -72,9 +72,9 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -135,9 +135,9 @@ void SPFlowtext::modified(unsigned int flags) { } } - for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { - region = o; + for (auto& o: _children) { + if (dynamic_cast(&o)) { + region = &o; break; } } @@ -223,11 +223,11 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node *c_repr = NULL; - if ( dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child)) { - c_repr = child->updateRepr(doc, NULL, flags); + if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { + c_repr = child.updateRepr(doc, NULL, flags); } if ( c_repr ) { @@ -241,9 +241,9 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X l = g_slist_remove(l, l->data); } } else { - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - if ( dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child) || dynamic_cast(child)) { - child->updateRepr(flags); + for (auto& child: _children) { + if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { + child.updateRepr(flags); } } } @@ -390,8 +390,8 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, *pending_line_break_object = NULL; } - for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) { - SPString *str = dynamic_cast(child); + for (auto& child: root->_children) { + SPString *str = dynamic_cast(&child); if (str) { if (*pending_line_break_object) { if (dynamic_cast(*pending_line_break_object)) @@ -402,12 +402,12 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, *pending_line_break_object = NULL; } if (with_indent) { - layout.appendText(str->string, root->style, child, &pi); + layout.appendText(str->string, root->style, &child, &pi); } else { - layout.appendText(str->string, root->style, child); + layout.appendText(str->string, root->style, &child); } } else { - SPFlowregion *region = dynamic_cast(child); + SPFlowregion *region = dynamic_cast(&child); if (region) { std::vector const &computed = region->computed; for (std::vector::const_iterator it = computed.begin() ; it != computed.end() ; ++it) { @@ -421,8 +421,8 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, } } //Xml Tree is being directly used while it shouldn't be. - else if (!dynamic_cast(child) && !sp_repr_is_meta_element(child->getRepr())) { - _buildLayoutInput(child, exclusion_shape, shapes, pending_line_break_object); + else if (!dynamic_cast(&child) && !sp_repr_is_meta_element(child.getRepr())) { + _buildLayoutInput(&child, exclusion_shape, shapes, pending_line_break_object); } } } @@ -593,9 +593,9 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) SPItem *frame = 0; SPObject *region = 0; - for (SPObject *o = firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { - region = o; + for (auto& o: _children) { + if (dynamic_cast(&o)) { + region = &o; break; } } @@ -603,8 +603,8 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) if (region) { bool past = false; - for (SPObject *o = region->firstChild() ; o ; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: region->_children) { + SPItem *item = dynamic_cast(&o); if (item) { if ( (after == NULL) || past ) { frame = item; @@ -707,9 +707,9 @@ Geom::Affine SPFlowtext::set_transform (Geom::Affine const &xform) } SPObject *region = NULL; - for ( SPObject *o = this->firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { - region = o; + for (auto& o: _children) { + if (dynamic_cast(&o)) { + region = &o; break; } } diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 854d53dc4..abfae1a1f 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -276,8 +276,8 @@ void SPGradient::build(SPDocument *document, Inkscape::XML::Node *repr) SPPaintServer::build(document, repr); - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { + for (auto& ochild: _children) { + if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; } @@ -481,8 +481,8 @@ void SPGradient::remove_child(Inkscape::XML::Node *child) SPPaintServer::remove_child(child); this->has_stops = FALSE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { + for (auto& ochild: _children) { + if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; } @@ -536,9 +536,9 @@ void SPGradient::modified(guint flags) // FIXME: climb up the ladder of hrefs GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - sp_object_ref(child); - l = g_slist_prepend(l, child); + for (auto& child: _children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); } l = g_slist_reverse(l); @@ -557,10 +557,11 @@ void SPGradient::modified(guint flags) SPStop* SPGradient::getFirstStop() { - SPStop* first = 0; - for (SPObject *ochild = firstChild(); ochild && !first; ochild = ochild->getNext()) { - if (SP_IS_STOP(ochild)) { - first = SP_STOP(ochild); + SPStop* first = nullptr; + for (auto& ochild: _children) { + if (SP_IS_STOP(&ochild)) { + first = SP_STOP(&ochild); + break; } } return first; @@ -587,8 +588,8 @@ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscap if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (SPObject *child = this->firstChild(); child; child = child->getNext()) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -915,8 +916,8 @@ bool SPGradient::invalidateArray() void SPGradient::rebuildVector() { gint len = 0; - for ( SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_STOP(child)) { + for (auto& child: _children) { + if (SP_IS_STOP(&child)) { len ++; } } @@ -937,9 +938,9 @@ void SPGradient::rebuildVector() } } - for ( SPObject *child = firstChild(); child; child = child->getNext() ) { - if (SP_IS_STOP(child)) { - SPStop *stop = SP_STOP(child); + for (auto& child: _children) { + if (SP_IS_STOP(&child)) { + SPStop *stop = SP_STOP(&child); SPGradientStop gstop; if (!vector.stops.empty()) { @@ -1022,8 +1023,8 @@ void SPGradient::rebuildArray() array.read( SP_MESH( this ) ); has_patches = false; - for ( SPObject *ro = firstChild() ; ro ; ro = ro->getNext() ) { - if (SP_IS_MESHROW(ro)) { + for (auto& ro: _children) { + if (SP_IS_MESHROW(&ro)) { has_patches = true; // std::cout << " Has Patches" << std::endl; break; diff --git a/src/sp-hatch.cpp b/src/sp-hatch.cpp index 2d938618c..c06045e8f 100644 --- a/src/sp-hatch.cpp +++ b/src/sp-hatch.cpp @@ -233,14 +233,13 @@ void SPHatch::set(unsigned int key, const gchar* value) bool SPHatch::_hasHatchPatchChildren(SPHatch const *hatch) { - bool matched = false; - for (SPObject const *child = hatch->firstChild(); child && !matched; child = child->getNext() ) { - SPHatchPath const *hatchPath = dynamic_cast(child); + for (auto& child: hatch->_children) { + SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { - matched = true; + return true; } } - return matched; + return false; } std::vector SPHatch::hatchPaths() @@ -249,8 +248,8 @@ std::vector SPHatch::hatchPaths() SPHatch *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (SPObject *child = src->firstChild(); child; child = child->getNext()) { - SPHatchPath *hatchPath = dynamic_cast(child); + for (auto& child: src->_children) { + SPHatchPath *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); } @@ -265,8 +264,8 @@ std::vector SPHatch::hatchPaths() const SPHatch const *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (SPObject const *child = src->firstChild(); child; child = child->getNext()) { - SPHatchPath const *hatchPath = dynamic_cast(child); + for (auto& child: src->_children) { + SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); } diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index d775e306f..7915b0453 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -235,9 +235,9 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = NULL; - for (SPObject *child = firstChild(); child; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend (l, crepr); @@ -251,9 +251,9 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove (l, l->data); } } else { - for (SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if ( !dynamic_cast(child) && !dynamic_cast(child) ) { - child->updateRepr(flags); + for (auto& child: _children) { + if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { + child.updateRepr(flags); } } } @@ -365,9 +365,9 @@ void SPGroup::hide (unsigned int key) { void SPGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) const { - for ( SPObject const *o = this->firstChild(); o; o = o->getNext() ) + for (auto& o: _children) { - SPItem const *item = dynamic_cast(o); + SPItem const *item = dynamic_cast(&o); if (item) { item->getSnappoints(p, snapprefs); } @@ -511,20 +511,21 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d GSList *objects = NULL; Geom::Affine const g(group->transform); - for (SPObject *child = group->firstChild() ; child; child = child->getNext() ) - if (SPItem *citem = dynamic_cast(child)) - sp_item_group_ungroup_handle_clones(citem,g); - + for (auto& child: group->_children) { + if (SPItem *citem = dynamic_cast(&child)) { + sp_item_group_ungroup_handle_clones(citem, g); + } + } - for (SPObject *child = group->firstChild() ; child; child = child->getNext() ) { - SPItem *citem = dynamic_cast(child); + for (auto& child: group->_children) { + SPItem *citem = dynamic_cast(&child); if (citem) { /* Merging of style */ // this converts the gradient/pattern fill/stroke, if any, to userSpaceOnUse; we need to do // it here _before_ the new transform is set, so as to use the pre-transform bbox citem->adjust_paint_recursive (Geom::identity(), Geom::identity(), false); - child->style->merge( group->style ); + child.style->merge( group->style ); /* * fixme: We currently make no allowance for the case where child is cloned * and the group has any style settings. @@ -546,9 +547,9 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d * extra complication & maintenance burden and this case is rare. */ - child->updateRepr(); + child.updateRepr(); - Inkscape::XML::Node *nrepr = child->getRepr()->duplicate(prepr->document()); + Inkscape::XML::Node *nrepr = child.getRepr()->duplicate(prepr->document()); // Merging transform Geom::Affine ctrans = citem->transform * g; @@ -599,7 +600,7 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d items = g_slist_prepend (items, nrepr); } else { - Inkscape::XML::Node *nrepr = child->getRepr()->duplicate(prepr->document()); + Inkscape::XML::Node *nrepr = child.getRepr()->duplicate(prepr->document()); objects = g_slist_prepend (objects, nrepr); } } @@ -661,9 +662,9 @@ std::vector sp_item_group_item_list(SPGroup * group) std::vector s; g_return_val_if_fail(group != NULL, s); - for (SPObject *o = group->firstChild() ; o ; o = o->getNext() ) { - if ( dynamic_cast(o) ) { - s.push_back((SPItem*)o); + for (auto& o: group->_children) { + if ( dynamic_cast(&o) ) { + s.push_back((SPItem*)&o); } } return s; @@ -734,8 +735,8 @@ void SPGroup::_updateLayerMode(unsigned int display_key) { void SPGroup::translateChildItems(Geom::Translate const &tr) { if ( hasChildren() ) { - for (SPObject *o = firstChild() ; o ; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if ( item ) { sp_item_move_rel(item, tr); } @@ -747,14 +748,14 @@ void SPGroup::translateChildItems(Geom::Translate const &tr) void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bool noRecurse) { if ( hasChildren() ) { - for (SPObject *o = firstChild() ; o ; o = o->getNext() ) { - if ( SPDefs *defs = dynamic_cast(o) ) { // select symbols from defs, ignore clips, masks, patterns - for (SPObject *defschild = defs->firstChild() ; defschild ; defschild = defschild->getNext() ) { - SPGroup *defsgroup = dynamic_cast(defschild); + for (auto& o: _children) { + if ( SPDefs *defs = dynamic_cast(&o) ) { // select symbols from defs, ignore clips, masks, patterns + for (auto& defschild: defs->_children) { + SPGroup *defsgroup = dynamic_cast(&defschild); if (defsgroup) defsgroup->scaleChildItemsRec(sc, p, false); } - } else if ( SPItem *item = dynamic_cast(o) ) { + } else if ( SPItem *item = dynamic_cast(&o) ) { SPGroup *group = dynamic_cast(item); if (group && !dynamic_cast(item)) { /* Using recursion breaks clipping because transforms are applied @@ -870,8 +871,8 @@ void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bo gint SPGroup::getItemCount() const { gint len = 0; - for (SPObject const *o = this->firstChild() ; o ; o = o->getNext() ) { - if (dynamic_cast(o)) { + for (auto& child: _children) { + if (dynamic_cast(&child)) { len++; } } diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 258a5cd14..ba57cec8b 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -705,9 +705,9 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X // so we need to add any children from the underlying object to the new repr if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (SPObject *child = object->firstChild(); child != NULL; child = child->next ) { - if (dynamic_cast(child) || dynamic_cast(child)) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: object->_children) { + if (dynamic_cast(&child) || dynamic_cast(&child)) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend (l, crepr); } @@ -719,9 +719,9 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (SPObject *child = object->firstChild() ; child != NULL; child = child->next ) { - if (dynamic_cast(child) || dynamic_cast(child)) { - child->updateRepr(flags); + for (auto& child: object->_children) { + if (dynamic_cast(&child) || dynamic_cast(&child)) { + child.updateRepr(flags); } } } @@ -928,12 +928,12 @@ unsigned int SPItem::pos_in_parent() const { unsigned int pos = 0; - for ( SPObject *iter = parent->firstChild() ; iter ; iter = iter->next) { - if (iter == this) { + for (auto& iter: parent->_children) { + if (&iter == this) { return pos; } - if (dynamic_cast(iter)) { + if (dynamic_cast(&iter)) { pos++; } } @@ -1666,8 +1666,8 @@ SPItem const *sp_item_first_item_child(SPObject const *obj) SPItem *sp_item_first_item_child(SPObject *obj) { SPItem *child = 0; - for ( SPObject *iter = obj->firstChild() ; iter ; iter = iter->next ) { - SPItem *tmp = dynamic_cast(iter); + for (auto& iter: obj->_children) { + SPItem *tmp = dynamic_cast(&iter); if ( tmp ) { child = tmp; break; diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index a36d8ef29..e643cc9bd 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -227,9 +227,9 @@ Inkscape::DrawingItem *SPMask::sp_mask_show(Inkscape::Drawing &drawing, unsigned Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); this->display = sp_mask_view_new_prepend (this->display, key, ai); - for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM (child)) { - Inkscape::DrawingItem *ac = SP_ITEM (child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); + for (auto& child: _children) { + if (SP_IS_ITEM (&child)) { + Inkscape::DrawingItem *ac = SP_ITEM (&child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); if (ac) { ai->prependChild(ac); @@ -250,9 +250,9 @@ void SPMask::sp_mask_hide(unsigned int key) { g_return_if_fail (this != NULL); g_return_if_fail (SP_IS_MASK (this)); - for ( SPObject *child = this->firstChild(); child; child = child->getNext()) { - if (SP_IS_ITEM (child)) { - SP_ITEM(child)->invoke_hide (key); + for (auto& child: _children) { + if (SP_IS_ITEM (&child)) { + SP_ITEM(&child)->invoke_hide (key); } } diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp index 355150893..20d6d0d85 100644 --- a/src/sp-mesh-array.cpp +++ b/src/sp-mesh-array.cpp @@ -632,16 +632,16 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { guint max_column = 0; guint irow = 0; // Corresponds to top of patch being read in. - for ( SPObject *ro = mg->firstChild() ; ro ; ro = ro->getNext() ) { + for (auto& ro: mg->_children) { - if (SP_IS_MESHROW(ro)) { + if (SP_IS_MESHROW(&ro)) { guint icolumn = 0; // Corresponds to left of patch being read in. - for ( SPObject *po = ro->firstChild() ; po ; po = po->getNext() ) { + for (auto& po: ro._children) { - if (SP_IS_MESHPATCH(po)) { + if (SP_IS_MESHPATCH(&po)) { - SPMeshpatch *patch = SP_MESHPATCH(po); + SPMeshpatch *patch = SP_MESHPATCH(&po); // std::cout << "SPMeshNodeArray::read: row size: " << nodes.size() << std::endl; SPMeshPatchI new_patch( &nodes, irow, icolumn ); // Adds new nodes. @@ -652,15 +652,15 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { // Only 'top' side defined for first row. if( irow != 0 ) ++istop; - for ( SPObject *so = po->firstChild() ; so ; so = so->getNext() ) { - if (SP_IS_STOP(so)) { + for (auto& so: po._children) { + if (SP_IS_STOP(&so)) { if( istop > 3 ) { // std::cout << " Mesh Gradient: Too many stops: " << istop << std::endl; break; } - SPStop *stop = SP_STOP(so); + SPStop *stop = SP_STOP(&so); // Handle top of first row. if( istop == 0 && icolumn == 0 ) { @@ -848,15 +848,15 @@ void SPMeshNodeArray::write( SPMesh *mg ) { // First we must delete reprs for old mesh rows and patches. GSList *descendant_reprs = NULL; GSList *descendant_objects = NULL; - for ( SPObject *row = mg->firstChild(); row; row = row->getNext() ) { - descendant_reprs = g_slist_prepend (descendant_reprs, row->getRepr()); - descendant_objects = g_slist_prepend (descendant_objects, row ); - for ( SPObject *patch = row->firstChild(); patch; patch = patch->getNext() ) { - descendant_reprs = g_slist_prepend (descendant_reprs, patch->getRepr()); - descendant_objects = g_slist_prepend (descendant_objects, patch ); - for ( SPObject *stop = patch->firstChild(); stop; stop = stop->getNext() ) { - descendant_reprs = g_slist_prepend (descendant_reprs, stop->getRepr()); - descendant_objects = g_slist_prepend (descendant_objects, stop ); + for (auto& row: mg->_children) { + descendant_reprs = g_slist_prepend (descendant_reprs, row.getRepr()); + descendant_objects = g_slist_prepend (descendant_objects, &row); + for (auto& patch: row._children) { + descendant_reprs = g_slist_prepend (descendant_reprs, patch.getRepr()); + descendant_objects = g_slist_prepend (descendant_objects, &patch); + for (auto& stop: patch._children) { + descendant_reprs = g_slist_prepend (descendant_reprs, stop.getRepr()); + descendant_objects = g_slist_prepend (descendant_objects, &stop); } } } diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 616ec3921..173055dbd 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -248,9 +248,9 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:lockguides" ); /* Construct guideline list */ - for (SPObject *o = this->firstChild() ; o; o = o->getNext() ) { - if (SP_IS_GUIDE(o)) { - SPGuide * g = SP_GUIDE(o); + for (auto& o: _children) { + if (SP_IS_GUIDE(&o)) { + SPGuide * g = SP_GUIDE(&o); this->guides.push_back(g); //g_object_set(G_OBJECT(g), "color", nv->guidecolor, "hicolor", nv->guidehicolor, NULL); g->setColor(this->guidecolor); @@ -858,9 +858,9 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop) } // if that didn't work out, look for the topmost layer if (!layer) { - for ( SPObject *iter = document->getRoot()->firstChild(); iter ; iter = iter->getNext() ) { - if (desktop->isLayer(iter)) { - layer = iter; + for (auto& iter: document->getRoot()->_children) { + if (desktop->isLayer(&iter)) { + layer = &iter; } } } diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp index c3967461e..bfed08218 100644 --- a/src/sp-object-group.cpp +++ b/src/sp-object-group.cpp @@ -50,8 +50,8 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks } GSList *l = 0; - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - Inkscape::XML::Node *crepr = child->updateRepr(xml_doc, NULL, flags); + for (auto& child: _children) { + Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -64,8 +64,8 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks l = g_slist_remove(l, l->data); } } else { - for ( SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - child->updateRepr(flags); + for (auto& child: _children) { + child.updateRepr(flags); } } diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 36957ab49..2babf0441 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -118,7 +118,7 @@ static gchar *sp_object_get_unique_id(SPObject *object, */ SPObject::SPObject() : cloned(0), uflags(0), mflags(0), hrefcount(0), _total_hrefcount(0), - document(NULL), parent(NULL), children(NULL), _last_child(NULL), + document(NULL), parent(NULL), children(NULL), next(NULL), id(NULL), repr(NULL), refCount(1),hrefList(std::list()), _successor(NULL), _collection_policy(SPObject::COLLECT_WITH_PARENT), _label(NULL), _default_label(NULL) @@ -541,9 +541,6 @@ void SPObject::attach(SPObject *object, SPObject *prev) this->children = object; } object->next = next; - if (!next) { - this->_last_child = object; - } if (!object->xml_space.set) object->xml_space.value = this->xml_space.value; } @@ -576,9 +573,6 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { } else { children = next; } - if (!next) { - _last_child = old_prev; - } if (prev) { next = prev->next; prev->next = obj; @@ -587,9 +581,6 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { children = obj; } obj->next = next; - if (!next) { - _last_child = obj; - } } void SPObject::detach(SPObject *object) @@ -616,9 +607,6 @@ void SPObject::detach(SPObject *object) } else { this->children = next; } - if (!next) { - this->_last_child = prev; - } object->next = NULL; object->parent = NULL; @@ -856,11 +844,9 @@ void SPObject::releaseReferences() { SPObject *SPObject::getPrev() { - SPObject *prev = 0; - for ( SPObject *obj = parent->firstChild(); obj && !prev; obj = obj->getNext() ) { - if (obj->getNext() == this) { - prev = obj; - } + SPObject *prev = nullptr; + if (parent && !parent->_children.empty() && &parent->_children.front() != this) { + prev = &*(--parent->_children.iterator_to(*this)); } return prev; } diff --git a/src/sp-object.h b/src/sp-object.h index 6aa006283..2534b2268 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -209,7 +209,6 @@ public: SPDocument *document; /* Document we are part of */ SPObject *parent; /* Our parent (only one allowed) */ SPObject *children; /* Our children */ - SPObject *_last_child; /* Remembered last child */ SPObject *next; /* Next object in linked list */ private: @@ -314,11 +313,11 @@ public: bool hasChildren() const { return ( _children.size() > 0 ); } - SPObject *firstChild() { return children; } - SPObject const *firstChild() const { return children; } + SPObject *firstChild() { return _children.empty() ? nullptr : &_children.front(); } + SPObject const *firstChild() const { return _children.empty() ? nullptr : &_children.front(); } - SPObject *lastChild() { return _last_child; } - SPObject const *lastChild() const { return _last_child; } + SPObject *lastChild() { return _children.empty() ? nullptr : &_children.back(); } + SPObject const *lastChild() const { return _children.empty() ? nullptr : &_children.back(); } enum Action { ActionGeneral, ActionBBox, ActionUpdate, ActionShow }; diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 55110f3c5..fde9f90f1 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -223,8 +223,8 @@ void SPPattern::_getChildren(std::list &l) { for (SPPattern *pat_i = this; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i->firstChild()) { // find the first one with children - for (SPObject *child = pat_i->firstChild(); child; child = child->getNext()) { - l.push_back(child); + for (auto& child: pat_i->_children) { + l.push_back(&child); } break; // do not go further up the chain if children are found } @@ -319,8 +319,8 @@ guint SPPattern::_countHrefs(SPObject *o) const i++; } - for (SPObject *child = o->firstChild(); child != NULL; child = child->next) { - i += _countHrefs(child); + for (auto& child: o->_children) { + i += _countHrefs(&child); } return i; @@ -508,13 +508,13 @@ Geom::OptRect SPPattern::viewbox() const bool SPPattern::_hasItemChildren() const { - bool hasChildren = false; - for (SPObject const *child = firstChild(); child && !hasChildren; child = child->getNext()) { - if (SP_IS_ITEM(child)) { - hasChildren = true; + for (auto& child: _children) { + if (SP_IS_ITEM(&child)) { + return true; } } - return hasChildren; + + return false; } bool SPPattern::isValid() const @@ -558,12 +558,12 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b Inkscape::DrawingGroup *root = new Inkscape::DrawingGroup(drawing); drawing.setRoot(root); - for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext()) { - if (SP_IS_ITEM(child)) { + for (auto& child: shown->_children) { + if (SP_IS_ITEM(&child)) { // for each item in pattern, show it on our drawing, add to the group, // and connect to the release signal in case the item gets deleted Inkscape::DrawingItem *cai; - cai = SP_ITEM(child)->invoke_show(drawing, dkey, SP_ITEM_SHOW_DISPLAY); + cai = SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_SHOW_DISPLAY); root->appendChild(cai); } } @@ -654,9 +654,9 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b // Render drawing to pattern_surface via drawing context, this calls root->render // which is really DrawingItem->render(). drawing.render(dc, one_tile); - for (SPObject *child = shown->firstChild(); child != NULL; child = child->getNext()) { - if (SP_IS_ITEM(child)) { - SP_ITEM(child)->invoke_hide(dkey); + for (auto& child: shown->_children) { + if (SP_IS_ITEM(&child)) { + SP_ITEM(&child)->invoke_hide(dkey); } } diff --git a/src/sp-root.cpp b/src/sp-root.cpp index 98eae2159..cfd0ced10 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -73,9 +73,9 @@ void SPRoot::build(SPDocument *document, Inkscape::XML::Node *repr) SPGroup::build(document, repr); // Search for first node - for (SPObject *o = this->firstChild() ; o ; o = o->getNext()) { - if (SP_IS_DEFS(o)) { - this->defs = SP_DEFS(o); + for (auto& o: _children) { + if (SP_IS_DEFS(&o)) { + this->defs = SP_DEFS(&o); break; } } @@ -174,9 +174,9 @@ void SPRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) if (co && SP_IS_DEFS(co)) { // We search for first node - it is not beautiful, but works - for (SPObject *c = this->firstChild() ; c ; c = c->getNext()) { - if (SP_IS_DEFS(c)) { - this->defs = SP_DEFS(c); + for (auto& c: _children) { + if (SP_IS_DEFS(&c)) { + this->defs = SP_DEFS(&c); break; } } @@ -189,7 +189,8 @@ void SPRoot::remove_child(Inkscape::XML::Node *child) SPObject *iter = 0; // We search for first remaining node - it is not beautiful, but works - for (iter = this->firstChild() ; iter ; iter = iter->getNext()) { + for (auto& child: _children) { + iter = &child; if (SP_IS_DEFS(iter) && (SPDefs *)iter != this->defs) { this->defs = (SPDefs *)iter; break; diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index d2dcde15d..7679cc31e 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -32,9 +32,10 @@ SPSwitch::~SPSwitch() { SPObject *SPSwitch::_evaluateFirst() { SPObject *first = 0; - for (SPObject *child = this->firstChild() ; child && !first ; child = child->getNext() ) { - if (SP_IS_ITEM(child) && sp_item_evaluate(SP_ITEM(child))) { - first = child; + for (auto& child: _children) { + if (SP_IS_ITEM(&child) && sp_item_evaluate(SP_ITEM(&child))) { + first = &child; + break; } } diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 4afc38524..5126ae094 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -155,9 +155,9 @@ void SPText::update(SPCtx *ctx, guint flags) { // Create temporary list of children GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child, this); - l = g_slist_prepend (l, child); + for (auto& child: _children) { + sp_object_ref(&child, this); + l = g_slist_prepend (l, &child); } l = g_slist_reverse (l); @@ -235,9 +235,9 @@ void SPText::modified(guint flags) { // Create temporary list of children GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - sp_object_ref(child, this); - l = g_slist_prepend (l, child); + for (auto& child: _children) { + sp_object_ref(&child, this); + l = g_slist_prepend (l, &child); } l = g_slist_reverse (l); @@ -262,17 +262,17 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X GSList *l = NULL; - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TITLE(child) || SP_IS_DESC(child)) { + for (auto& child: _children) { + if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } Inkscape::XML::Node *crepr = NULL; - if (SP_IS_STRING(child)) { - crepr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if (SP_IS_STRING(&child)) { + crepr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } else { - crepr = child->updateRepr(xml_doc, NULL, flags); + crepr = child.updateRepr(xml_doc, NULL, flags); } if (crepr) { @@ -286,15 +286,15 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (SPObject *child = this->firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TITLE(child) || SP_IS_DESC(child)) { + for (auto& child: _children) { + if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } - if (SP_IS_STRING(child)) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + if (SP_IS_STRING(&child)) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } else { - child->updateRepr(flags); + child.updateRepr(flags); } } } @@ -606,16 +606,16 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio } } - for (SPObject *child = root->firstChild() ; child ; child = child->getNext() ) { - SPString *str = dynamic_cast(child); + for (auto& child: root->_children) { + SPString *str = dynamic_cast(&child); if (str) { Glib::ustring const &string = str->string; // std::cout << " Appending: >" << string << "<" << std::endl; - layout.appendText(string, root->style, child, &optional_attrs, child_attrs_offset + length); + layout.appendText(string, root->style, &child, &optional_attrs, child_attrs_offset + length); length += string.length(); - } else if (!sp_repr_is_meta_element(child->getRepr())) { + } else if (!sp_repr_is_meta_element(child.getRepr())) { /* ^^^^ XML Tree being directly used here while it shouldn't be.*/ - length += _buildLayoutInput(child, optional_attrs, child_attrs_offset + length, in_textpath); + length += _buildLayoutInput(&child, optional_attrs, child_attrs_offset + length, in_textpath); } } @@ -628,9 +628,9 @@ void SPText::rebuildLayout() Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs; _buildLayoutInput(this, optional_attrs, 0, false); layout.calculateFlow(); - for (SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TEXTPATH(child)) { - SPTextPath const *textpath = SP_TEXTPATH(child); + for (auto& child: _children) { + if (SP_IS_TEXTPATH(&child)) { + SPTextPath const *textpath = SP_TEXTPATH(&child); if (textpath->originalPath != NULL) { //g_print("%s", layout.dumpAsText().c_str()); layout.fitToPathAlign(textpath->startOffset, *textpath->originalPath); @@ -640,9 +640,9 @@ void SPText::rebuildLayout() //g_print("%s", layout.dumpAsText().c_str()); // set the x,y attributes on role:line spans - for (SPObject *child = firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_TSPAN(child)) { - SPTSpan *tspan = SP_TSPAN(child); + for (auto& child: _children) { + if (SP_IS_TSPAN(&child)) { + SPTSpan *tspan = SP_TSPAN(&child); if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED) && tspan->attributes.singleXYCoordinates() ) { Inkscape::Text::Layout::iterator iter = layout.sourceToIterator(tspan); diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp index ba592058b..66866c9f7 100644 --- a/src/sp-tref.cpp +++ b/src/sp-tref.cpp @@ -506,9 +506,9 @@ sp_tref_convert_to_tspan(SPObject *obj) //////////////////// else { GSList *l = NULL; - for (SPObject *child = obj->firstChild() ; child != NULL ; child = child->getNext() ) { - sp_object_ref(child, obj); - l = g_slist_prepend (l, child); + for (auto& child: obj->_children) { + sp_object_ref(&child, obj); + l = g_slist_prepend (l, &child); } l = g_slist_reverse (l); while (l) { diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp index 05f8430ba..23df18503 100644 --- a/src/sp-tspan.cpp +++ b/src/sp-tspan.cpp @@ -96,9 +96,9 @@ void SPTSpan::update(SPCtx *ctx, guint flags) { } childflags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) { - ochild->updateDisplay(ctx, childflags); + for (auto& ochild: _children) { + if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { + ochild.updateDisplay(ctx, childflags); } } @@ -128,9 +128,9 @@ void SPTSpan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) { - ochild->emitModified(flags); + for (auto& ochild: _children) { + if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { + ochild.emitModified(flags); } } } @@ -175,15 +175,15 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: if ( flags&SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr=NULL; - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_TEXTPATH(child) ) { - //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_TEXTPATH(&child) ) { + //c_repr = child.updateRepr(xml_doc, NULL, flags); // shouldn't happen + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -197,13 +197,13 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove(l, l->data); } } else { - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_TEXTPATH(child) ) { + for (auto& child: _children) { + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_TEXTPATH(&child) ) { //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -313,9 +313,9 @@ void SPTextPath::update(SPCtx *ctx, guint flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if ( flags || ( ochild->uflags & SP_OBJECT_MODIFIED_FLAG )) { - ochild->updateDisplay(ctx, flags); + for (auto& ochild: _children) { + if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { + ochild.updateDisplay(ctx, flags); } } @@ -367,9 +367,9 @@ void SPTextPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for ( SPObject *ochild = this->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (flags || (ochild->mflags & SP_OBJECT_MODIFIED_FLAG)) { - ochild->emitModified(flags); + for (auto& ochild: _children) { + if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { + ochild.emitModified(flags); } } } @@ -399,15 +399,15 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap if ( flags & SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: _children) { Inkscape::XML::Node* c_repr=NULL; - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - c_repr = child->updateRepr(xml_doc, NULL, flags); - } else if ( SP_IS_TEXTPATH(child) ) { + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + c_repr = child.updateRepr(xml_doc, NULL, flags); + } else if ( SP_IS_TEXTPATH(&child) ) { //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - c_repr = xml_doc->createTextNode(SP_STRING(child)->string.c_str()); + } else if ( SP_IS_STRING(&child) ) { + c_repr = xml_doc->createTextNode(SP_STRING(&child)->string.c_str()); } if ( c_repr ) { @@ -421,13 +421,13 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for (SPObject* child = this->firstChild() ; child ; child = child->getNext() ) { - if ( SP_IS_TSPAN(child) || SP_IS_TREF(child) ) { - child->updateRepr(flags); - } else if ( SP_IS_TEXTPATH(child) ) { - //c_repr = child->updateRepr(xml_doc, NULL, flags); // shouldn't happen - } else if ( SP_IS_STRING(child) ) { - child->getRepr()->setContent(SP_STRING(child)->string.c_str()); + for (auto& child: _children) { + if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { + child.updateRepr(flags); + } else if ( SP_IS_TEXTPATH(&child) ) { + //c_repr = child.updateRepr(xml_doc, NULL, flags); // shouldn't happen + } else if ( SP_IS_STRING(&child) ) { + child.getRepr()->setContent(SP_STRING(&child)->string.c_str()); } } } @@ -466,8 +466,8 @@ void sp_textpath_to_text(SPObject *tp) // make a list of textpath children GSList *tp_reprs = NULL; - for (SPObject *o = tp->firstChild() ; o != NULL; o = o->next) { - tp_reprs = g_slist_prepend(tp_reprs, o->getRepr()); + for (auto& o: tp->_children) { + tp_reprs = g_slist_prepend(tp_reprs, o.getRepr()); } for ( GSList *i = tp_reprs ; i ; i = i->next ) { diff --git a/src/splivarot.cpp b/src/splivarot.cpp index b1f324be2..4ac9143f0 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -883,9 +883,9 @@ void item_outline_add_marker_child( SPItem const *item, Geom::Affine marker_tran // note: a marker child item can be an item group! if (SP_IS_GROUP(item)) { // recurse through all childs: - for (SPObject const *o = item->firstChild() ; o ; o = o->getNext() ) { - if ( SP_IS_ITEM(o) ) { - item_outline_add_marker_child(SP_ITEM(o), tr, pathv_in); + for (auto& o: item->_children) { + if ( SP_IS_ITEM(&o) ) { + item_outline_add_marker_child(SP_ITEM(&o), tr, pathv_in); } } } else { diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index 86aee1831..f539652c0 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -240,9 +240,9 @@ text_remove_all_kerns_recursively(SPObject *o) g_strfreev(xa_comma); } - for (SPObject *i = o->firstChild(); i != NULL; i = i->getNext()) { - text_remove_all_kerns_recursively(i); - i->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); + for (auto& i: o->_children) { + text_remove_all_kerns_recursively(&i); + i.requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); } } diff --git a/src/text-editing.cpp b/src/text-editing.cpp index 057523b1e..b03be792b 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -91,8 +91,8 @@ bool sp_te_input_is_empty(SPObject const *item) if (SP_IS_STRING(item)) { empty = SP_STRING(item)->string.empty(); } else { - for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) { - if (!sp_te_input_is_empty(child)) { + for (auto& child: item->_children) { + if (!sp_te_input_is_empty(&child)) { empty = false; break; } @@ -237,11 +237,11 @@ unsigned sp_text_get_length(SPObject const *item) length++; } - for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) { - if (SP_IS_STRING(child)) { - length += SP_STRING(child)->string.length(); + for (auto& child: item->_children) { + if (SP_IS_STRING(&child)) { + length += SP_STRING(&child)->string.length(); } else { - length += sp_text_get_length(child); + length += sp_text_get_length(&child); } } } @@ -267,22 +267,22 @@ unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto) } // Count the length of the children - for (SPObject const *child = item->firstChild() ; child ; child = child->getNext()) { - if (upto && child == upto) { + for (auto& child: item->_children) { + if (upto && &child == upto) { // hit upto, return immediately return length; } - if (SP_IS_STRING(child)) { - length += SP_STRING(child)->string.length(); + if (SP_IS_STRING(&child)) { + length += SP_STRING(&child)->string.length(); } else { - if (upto && child->isAncestorOf(upto)) { + if (upto && child.isAncestorOf(upto)) { // upto is below us, recurse and break loop - length += sp_text_get_length_upto(child, upto); + length += sp_text_get_length_upto(&child, upto); return length; } else { // recurse and go to the next sibling - length += sp_text_get_length_upto(child, upto); + length += sp_text_get_length_upto(&child, upto); } } } @@ -323,8 +323,11 @@ to \a item at the same level. */ static unsigned sum_sibling_text_lengths_before(SPObject const *item) { unsigned char_index = 0; - for (SPObject *sibling = item->parent->firstChild() ; sibling && sibling != item ; sibling = sibling->getNext()) { - char_index += sp_text_get_length(sibling); + for (auto& sibling: item->parent->_children) { + if (&sibling == item) { + break; + } + char_index += sp_text_get_length(&sibling); } return char_index; } @@ -857,11 +860,11 @@ static void sp_te_get_ustring_multiline(SPObject const *root, Glib::ustring *str if (*pending_line_break) { *string += '\n'; } - for (SPObject const *child = root->firstChild() ; child ; child = child->getNext()) { - if (SP_IS_STRING(child)) { - *string += SP_STRING(child)->string; + for (auto& child: root->_children) { + if (SP_IS_STRING(&child)) { + *string += SP_STRING(&child)->string; } else { - sp_te_get_ustring_multiline(child, string, pending_line_break); + sp_te_get_ustring_multiline(&child, string, pending_line_break); } } if (!SP_IS_TEXT(root) && !SP_IS_TEXTPATH(root) && is_line_break_object(root)) { @@ -1405,17 +1408,17 @@ static void apply_css_recursive(SPObject *o, SPCSSAttr const *css) { sp_repr_css_change(o->getRepr(), const_cast(css), "style"); - for (SPObject *child = o->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: o->_children) { if (sp_repr_css_property(const_cast(css), "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. SPCSSAttr *css_recurse = sp_repr_css_attr_new(); sp_repr_css_merge(css_recurse, const_cast(css)); sp_repr_css_set_property(css_recurse, "opacity", NULL); - apply_css_recursive(child, css_recurse); + apply_css_recursive(&child, css_recurse); sp_repr_css_attr_unref(css_recurse); } else { - apply_css_recursive(child, const_cast(css)); + apply_css_recursive(&child, const_cast(css)); } } } @@ -1429,7 +1432,7 @@ static void recursively_apply_style(SPObject *common_ancestor, SPCSSAttr const * { bool passed_start = start_item == NULL ? true : false; Inkscape::XML::Document *xml_doc = common_ancestor->document->getReprDoc(); - + for (SPObject *child = common_ancestor->firstChild() ; child ; child = child->getNext()) { if (start_item == child) { passed_start = true; @@ -2073,8 +2076,8 @@ bool has_visible_text(SPObject *obj) if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) { hasVisible = true; // maybe we should also check that it's not all whitespace? } else { - for (SPObject const *child = obj->firstChild() ; child ; child = child->getNext()) { - if (has_visible_text(const_cast(child))) { + for (auto& child: obj->_children) { + if (has_visible_text(const_cast(&child))) { hasVisible = true; break; } diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 9871804f5..75c6c5bcc 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -894,8 +894,8 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern) _copyNode(pattern->getRepr(), _doc, _defs); // items in the pattern may also use gradients and other patterns, so recurse - for ( SPObject *child = pattern->firstChild() ; child ; child = child->getNext() ) { - SPItem *childItem = dynamic_cast(child); + for (auto& child: pattern->_children) { + SPItem *childItem = dynamic_cast(&child); if (childItem) { _copyUsedDefs(childItem); } diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 87c90c460..11af02e3c 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -2042,12 +2042,12 @@ void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from) if (!trace_drawing) return; - for (SPObject *o = from->firstChild(); o != NULL; o = o->next) { - SPItem *item = dynamic_cast(o); - if (item && clonetiler_is_a_clone_of(o, NULL)) { + for (auto& o: from->_children) { + SPItem *item = dynamic_cast(&o); + if (item && clonetiler_is_a_clone_of(&o, NULL)) { item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too! } - clonetiler_trace_hide_tiled_clones_recursively (o); + clonetiler_trace_hide_tiled_clones_recursively (&o); } } @@ -2123,9 +2123,9 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) std::vector to_unclump; // not including the original - for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) { - if (clonetiler_is_a_clone_of (child, obj)) { - to_unclump.push_back((SPItem*)child); + for (auto& child: parent->_children) { + if (clonetiler_is_a_clone_of (&child, obj)) { + to_unclump.push_back((SPItem*)&child); } } @@ -2143,8 +2143,8 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj) guint n = 0; - for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) { - if (clonetiler_is_a_clone_of (child, obj)) { + for (auto& child: parent->_children) { + if (clonetiler_is_a_clone_of (&child, obj)) { n ++; } } @@ -2172,9 +2172,9 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d // remove old tiling GSList *to_delete = NULL; - for (SPObject *child = parent->firstChild(); child != NULL; child = child->next) { - if (clonetiler_is_a_clone_of (child, obj)) { - to_delete = g_slist_prepend (to_delete, child); + for (auto& child: parent->_children) { + if (clonetiler_is_a_clone_of (&child, obj)) { + to_delete = g_slist_prepend (to_delete, &child); } } for (GSList *i = to_delete; i; i = i->next) { diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 78e03e2a0..a60d1ddff 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -103,9 +103,7 @@ static int input_count(const SPFilterPrimitive* prim) return 2; else if(SP_IS_FEMERGE(prim)) { // Return the number of feMergeNode connections plus an extra - int count = 1; - for(const SPObject* o = prim->firstChild(); o; o = o->next, ++count){}; - return count; + return (int) (prim->_children.size() + 1); } else return 1; @@ -2343,11 +2341,12 @@ const Gtk::TreeIter FilterEffectsDialog::PrimitiveList::find_result(const Gtk::T if(SP_IS_FEMERGE(prim)) { int c = 0; bool found = false; - for(const SPObject* o = prim->firstChild(); o; o = o->next, ++c) { - if(c == attr && SP_IS_FEMERGENODE(o)) { - image = SP_FEMERGENODE(o)->input; + for (auto& o: prim->_children) { + if(c == attr && SP_IS_FEMERGENODE(&o)) { + image = SP_FEMERGENODE(&o)->input; found = true; } + ++c; } if(!found) return target; @@ -2534,21 +2533,23 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton* if(SP_IS_FEMERGE(prim)) { int c = 1; bool handled = false; - for(SPObject* o = prim->firstChild(); o && !handled; o = o->next, ++c) { - if(c == _in_drag && SP_IS_FEMERGENODE(o)) { + for (auto& o: prim->_children) { + if(c == _in_drag && SP_IS_FEMERGENODE(&o)) { // If input is null, delete it if(!in_val) { //XML Tree being used directly here while it shouldn't be. - sp_repr_unparent(o->getRepr()); + sp_repr_unparent(o.getRepr()); DocumentUndo::done(prim->document, SP_VERB_DIALOG_FILTER_EFFECTS, _("Remove merge node")); (*get_selection()->get_selected())[_columns.primitive] = prim; + } else { + _dialog.set_attr(&o, SP_ATTR_IN, in_val); } - else - _dialog.set_attr(o, SP_ATTR_IN, in_val); handled = true; + break; } + ++c; } // Add new input? if(!handled && c == _in_drag && in_val) { diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index 013a0ae6a..e156dfa13 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -747,14 +747,14 @@ std::vector &Find::all_items (SPObject *r, std::vector &l, boo return l; // we're not interested in metadata } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - SPItem *item = dynamic_cast(child); - if (item && !child->cloned && !desktop->isLayer(item)) { + for (auto& child: r->_children) { + SPItem *item = dynamic_cast(&child); + if (item && !child.cloned && !desktop->isLayer(item)) { if ((hidden || !desktop->itemIsHidden(item)) && (locked || !item->isLocked())) { - l.insert(l.begin(),(SPItem*)child); + l.insert(l.begin(),(SPItem*)&child); } } - l = all_items (child, l, hidden, locked); + l = all_items (&child, l, hidden, locked); } return l; } diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index f219f3db6..eafe5566a 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -182,7 +182,7 @@ std::vector FontSubstitution::getFontReplacedItems(SPDocument* doc, Gli family = SP_TEXT(parent_text)->layout.getFontFamily(0); // Add all the spans fonts to the set gint ii = 0; - for (SPObject *child = parent_text->firstChild() ; child ; child = child->getNext() ) { + for (auto& child: parent_text->_children) { family = SP_TEXT(parent_text)->layout.getFontFamily(ii); setFontSpans.insert(family); ii++; diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 9d05c73bc..00482c573 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -1292,9 +1292,9 @@ bool ObjectsPanel::_executeAction() break; case BUTTON_COLLAPSE_ALL: { - for (SPObject* obj = _document->getRoot()->firstChild(); obj != NULL; obj = obj->next) { - if (SP_IS_GROUP(obj)) { - _setCollapsed(SP_GROUP(obj)); + for (auto& obj: _document->getRoot()->_children) { + if (SP_IS_GROUP(&obj)) { + _setCollapsed(SP_GROUP(&obj)); } } _objectsChanged(_document->getRoot()); diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp index 6da8acb20..9338a4e8c 100644 --- a/src/ui/dialog/spellcheck.cpp +++ b/src/ui/dialog/spellcheck.cpp @@ -234,14 +234,14 @@ GSList *SpellCheck::allTextItems (SPObject *r, GSList *l, bool hidden, bool lock return l; // we're not interested in metadata } - for (SPObject *child = r->firstChild(); child; child = child->next) { - if (SP_IS_ITEM (child) && !child->cloned && !desktop->isLayer(SP_ITEM(child))) { - if ((hidden || !desktop->itemIsHidden(SP_ITEM(child))) && (locked || !SP_ITEM(child)->isLocked())) { - if (SP_IS_TEXT(child) || SP_IS_FLOWTEXT(child)) - l = g_slist_prepend (l, child); + for (auto& child: r->_children) { + if (SP_IS_ITEM (&child) && !child.cloned && !desktop->isLayer(SP_ITEM(&child))) { + if ((hidden || !desktop->itemIsHidden(SP_ITEM(&child))) && (locked || !SP_ITEM(&child)->isLocked())) { + if (SP_IS_TEXT(&child) || SP_IS_FLOWTEXT(&child)) + l = g_slist_prepend (l, &child); } } - l = allTextItems (child, l, hidden, locked); + l = allTextItems (&child, l, hidden, locked); } return l; } diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 51d81022f..1fdce34a5 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -658,8 +658,8 @@ GSList* SymbolsDialog::symbols_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - l = symbols_in_doc_recursive( child, l ); + for (auto& child: r->_children) { + l = symbols_in_doc_recursive( &child, l ); } return l; @@ -680,8 +680,8 @@ GSList* SymbolsDialog::use_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (SPObject *child = r->firstChild(); child; child = child->getNext()) { - l = use_in_doc_recursive( child, l ); + for (auto& child: r->_children) { + l = use_in_doc_recursive( &child, l ); } return l; diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp index 27e755add..2adba38c5 100644 --- a/src/ui/tools/box3d-tool.cpp +++ b/src/ui/tools/box3d-tool.cpp @@ -118,8 +118,8 @@ static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) { SPDefs *defs = document->getDefs(); bool has_persp = false; - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) { - if (SP_IS_PERSP3D(child)) { + for (auto& child: defs->_children) { + if (SP_IS_PERSP3D(&child)) { has_persp = true; break; } diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index b81a630e2..be8ce6d0c 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -1114,9 +1114,9 @@ void ConnectorTool::_setActiveShape(SPItem *item) { // The idea here is to try and add a group's children to solidify // connection handling. We react to path objects with only one node. - for (SPObject *child = item->firstChild() ; child ; child = child->getNext() ) { - if (SP_IS_PATH(child) && SP_PATH(child)->nodesInPath() == 1) { - this->_activeShapeAddKnot((SPItem *) child); + for (auto& child: item->_children) { + if (SP_IS_PATH(&child) && SP_PATH(&child)->nodesInPath() == 1) { + this->_activeShapeAddKnot((SPItem *) &child); } } this->_activeShapeAddKnot(item); diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 658cf4617..d048c318b 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -385,9 +385,9 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P if (dynamic_cast(item) && !dynamic_cast(item)) { GSList *children = NULL; - for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) { - if (dynamic_cast(static_cast(child))) { - children = g_slist_prepend(children, child); + for (auto& child: item->_children) { + if (dynamic_cast(static_cast(&child))) { + children = g_slist_prepend(children, &child); } } @@ -832,8 +832,8 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or double offset_l = 0; double offset_h = 0; SPObject *child_prev = NULL; - for (SPObject *child = vector->firstChild(); child; child = child->getNext()) { - SPStop *stop = dynamic_cast(child); + for (auto& child: vector->_children) { + SPStop *stop = dynamic_cast(&child); if (!stop) { continue; } @@ -878,7 +878,7 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or } offset_l = offset_h; - child_prev = child; + child_prev = &child; } } @@ -894,8 +894,8 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, bool did = false; if (dynamic_cast(item)) { - for (SPObject *child = item->firstChild() ; child; child = child->getNext() ) { - SPItem *childItem = dynamic_cast(child); + for (auto& child: item->_children) { + SPItem *childItem = dynamic_cast(&child); if (childItem) { if (sp_tweak_color_recursive (mode, childItem, item_at_point, fill_goal, do_fill, diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index a395d1954..c4b2ed59a 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -720,9 +720,9 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool static void select_stop_in_list( GtkWidget *combo_box, SPGradient *gradient, SPStop *new_stop, GtkWidget *data, gboolean block) { int i = 0; - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - if (ochild == new_stop) { + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + if (&ochild == new_stop) { blocked = block; gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box) , i); gr_stop_set_offset(GTK_COMBO_BOX(combo_box), data); @@ -765,9 +765,9 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S /* Populate the combobox store */ std::vector sl; if ( gradient->hasStops() ) { - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - sl.push_back(ochild); + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + sl.push_back(&ochild); } } } diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 97e65141f..813a2d28e 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -363,13 +363,13 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr) static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) { - for ( SPObject *child = from->firstChild() ; child; child = child->getNext() ) { - if (SP_IS_ITEM(child)) { - list = g_slist_prepend(list, SP_ITEM(child)); + for (auto& child: from->_children) { + if (SP_IS_ITEM(&child)) { + list = g_slist_prepend(list, SP_ITEM(&child)); } - if (ingroups || SP_IS_ITEM(child)) { - list = get_all_doc_items(list, child, onlyvisible, onlysensitive, ingroups, exclude); + if (ingroups || SP_IS_ITEM(&child)) { + list = get_all_doc_items(list, &child, onlyvisible, onlysensitive, ingroups, exclude); } } @@ -525,10 +525,10 @@ static void verify_grad(SPGradient *gradient) int i = 0; SPStop *stop = NULL; /* count stops */ - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { i++; - stop = SP_STOP(ochild); + stop = SP_STOP(&ochild); } } @@ -568,9 +568,9 @@ static void select_stop_in_list( GtkWidget *vb, SPGradient *gradient, SPStop *ne GtkWidget *combo_box = static_cast(g_object_get_data(G_OBJECT(vb), "combo_box")); int i = 0; - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - if (ochild == new_stop) { + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + if (&ochild == new_stop) { gtk_combo_box_set_active (GTK_COMBO_BOX(combo_box) , i); break; } @@ -603,9 +603,9 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s /* Populate the combobox store */ GSList *sl = NULL; if ( gradient->hasStops() ) { - for ( SPObject *ochild = gradient->firstChild() ; ochild ; ochild = ochild->getNext() ) { - if (SP_IS_STOP(ochild)) { - sl = g_slist_append(sl, ochild); + for (auto& ochild: gradient->_children) { + if (SP_IS_STOP(&ochild)) { + sl = g_slist_append(sl, &ochild); } } } diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp index e273faad7..fd7b5f6cd 100644 --- a/src/widgets/stroke-marker-selector.cpp +++ b/src/widgets/stroke-marker-selector.cpp @@ -335,10 +335,10 @@ GSList *MarkerComboBox::get_marker_list (SPDocument *source) return NULL; } - for ( SPObject *child = defs->firstChild(); child; child = child->getNext() ) + for (auto& child: defs->_children) { - if (SP_IS_MARKER(child)) { - ml = g_slist_prepend (ml, child); + if (SP_IS_MARKER(&child)) { + ml = g_slist_prepend (ml, &child); } } return ml; diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp index 8419cea23..6ef9cd54c 100644 --- a/testfiles/src/sp-object-test.cpp +++ b/testfiles/src/sp-object-test.cpp @@ -59,6 +59,7 @@ TEST_F(SPObjectTest, Basics) { a->attach(b, nullptr); a->attach(d, c); EXPECT_TRUE(a->hasChildren()); + EXPECT_EQ(b, a->firstChild()); EXPECT_EQ(d, a->lastChild()); auto children = a->childList(false); EXPECT_EQ(3, children.size()); @@ -93,6 +94,8 @@ TEST_F(SPObjectTest, Basics) { EXPECT_EQ(2, a->childList(false).size()); a->releaseReferences(); EXPECT_FALSE(a->hasChildren()); + EXPECT_EQ(nullptr, a->firstChild()); + EXPECT_EQ(nullptr, a->lastChild()); } TEST_F(SPObjectTest, Advanced) { @@ -102,6 +105,15 @@ TEST_F(SPObjectTest, Advanced) { a->attach(e, a->lastChild()); EXPECT_EQ(e, a->get_child_by_repr(e->getRepr())); EXPECT_EQ(c, a->get_child_by_repr(c->getRepr())); + EXPECT_EQ(d, e->getPrev()); + EXPECT_EQ(c, d->getPrev()); + EXPECT_EQ(b, c->getPrev()); + EXPECT_EQ(nullptr, b->getPrev()); + std::vector tmp = {b, c, d, e}; + int index = 0; + for(auto& child: a->_children) { + EXPECT_EQ(tmp[index++], &child); + } } TEST_F(SPObjectTest, Tmp) { @@ -109,7 +121,12 @@ TEST_F(SPObjectTest, Tmp) { a->attach(c, a->lastChild()); a->attach(d, a->lastChild()); a->attach(e, a->lastChild()); - EXPECT_TRUE(a->hasChildren()); - a->releaseReferences(); - EXPECT_FALSE(a->hasChildren()); + std::vector tmp; + for (SPObject *q = a->firstChild(); q; q = q->getNext()) { + tmp.push_back(q); + } + int index = 0; + for(auto& child: a->_children) { + EXPECT_EQ(tmp[index++], &child); + } } \ No newline at end of file -- cgit v1.2.3 From 9e210a6d1333c3366681547e3e81593ef69ff73e Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 14 Jul 2016 12:56:49 +0200 Subject: Last part of new SPObject children list (bzr r14954.1.20) --- src/desktop-style.cpp | 6 +-- src/display/nr-svgfonts.cpp | 35 +++++++------ src/extension/internal/metafile-print.cpp | 18 ++++--- src/filters/blend.cpp | 6 +-- src/filters/componenttransfer.cpp | 19 ++++--- src/filters/composite.cpp | 6 +-- src/filters/diffuselighting.cpp | 24 ++++----- src/filters/displacementmap.cpp | 6 +-- src/filters/merge.cpp | 9 ++-- src/filters/specularlighting.cpp | 24 ++++----- src/main.cpp | 6 +-- src/selection-chemistry.cpp | 28 +++++------ src/sp-filter-primitive.cpp | 6 ++- src/sp-filter.cpp | 25 ++++----- src/sp-flowtext.cpp | 4 +- src/sp-item-group.cpp | 2 +- src/sp-item.cpp | 28 +++++------ src/sp-object.cpp | 66 ++++++------------------ src/sp-object.h | 9 +--- src/sp-text.cpp | 12 ++--- src/sp-use.cpp | 32 +++++------- src/text-chemistry.cpp | 10 ++-- src/text-editing.cpp | 9 ++-- src/ui/clipboard.cpp | 8 +-- src/ui/dialog/document-properties.cpp | 14 +++--- src/ui/dialog/filter-effects-dialog.cpp | 54 ++++++++++---------- src/ui/dialog/objects.cpp | 83 +++++++++++++++++------------- src/ui/dialog/svg-fonts-dialog.cpp | 84 ++++++++++++++----------------- src/ui/dialog/tags.cpp | 45 ++++++++--------- src/ui/tools/node-tool.cpp | 4 +- src/ui/tools/tweak-tool.cpp | 6 +-- src/uri-references.cpp | 7 +-- testfiles/src/sp-object-test.cpp | 20 ++------ 33 files changed, 325 insertions(+), 390 deletions(-) diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index a52ab3d76..e4b7c6a83 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -1810,9 +1810,8 @@ objects_query_blur (const std::vector &objects, SPStyle *style_res) //if object has a filter if (style->filter.set && style->getFilter()) { //cycle through filter primitives - SPObject *primitive_obj = style->getFilter()->children; - while (primitive_obj) { - SPFilterPrimitive *primitive = dynamic_cast(primitive_obj); + for(auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { //if primitive is gaussianblur @@ -1830,7 +1829,6 @@ objects_query_blur (const std::vector &objects, SPStyle *style_res) } } } - primitive_obj = primitive_obj->next; } } } diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 011f51977..927093ef4 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -203,14 +203,19 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, //check whether is there a glyph declared on the SVG document // that matches with the text string in its current position if ( (len = size_of_substring(this->glyphs[i]->unicode.c_str(), _utf8)) ){ - for(SPObject* node = this->font->children;previous_unicode && node;node=node->next){ + for(auto& node: font->_children) { + if (!previous_unicode) { + break; + } //apply glyph kerning if appropriate - SPHkern *hkern = dynamic_cast(node); - if (hkern && is_horizontal_text && MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){ + SPHkern *hkern = dynamic_cast(&node); + if (hkern && is_horizontal_text && + MatchHKerningRule(hkern, this->glyphs[i], previous_unicode, previous_glyph_name)) { x -= (hkern->k / 1000.0);//TODO: use here the height of the font } - SPVkern *vkern = dynamic_cast(node); - if (vkern && !is_horizontal_text && MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name) ){ + SPVkern *vkern = dynamic_cast(&node); + if (vkern && !is_horizontal_text && + MatchVKerningRule(vkern, this->glyphs[i], previous_unicode, previous_glyph_name)) { y -= (vkern->k / 1000.0);//TODO: use here the "height" of the font } } @@ -271,10 +276,10 @@ SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){ Geom::PathVector SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){ double units_per_em = 1000; - for (SPObject *obj = spfont->children; obj; obj = obj->next){ - if (dynamic_cast(obj)) { + for(auto& obj: spfont->_children) { + if (dynamic_cast(&obj)) { //XML Tree being directly used here while it shouldn't be. - sp_repr_get_double(obj->getRepr(), "units_per_em", &units_per_em); + sp_repr_get_double(obj.getRepr(), "units_per_em", &units_per_em); } } @@ -339,19 +344,19 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, if (node->hasChildren()){ //render the SVG described on this glyph's child nodes. - for(node = node->children; node; node=node->next){ + for(auto& child: node->_children) { { - SPPath *path = dynamic_cast(node); + SPPath *path = dynamic_cast(&child); if (path) { pathv = path->_curve->get_pathvector(); pathv = flip_coordinate_system(spfont, pathv); render_glyph_path(cr, &pathv); } } - if (dynamic_cast(node)) { + if (dynamic_cast(&child)) { g_warning("TODO: svgfonts: render OBJECTGROUP"); } - SPUse *use = dynamic_cast(node); + SPUse *use = dynamic_cast(&child); if (use) { SPItem* item = use->ref->getObject(); SPPath *path = dynamic_cast(item); @@ -374,12 +379,12 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, cairo_font_face_t* SvgFont::get_font_face(){ if (!this->userfont) { - for(SPObject* node = this->font->children;node;node=node->next){ - SPGlyph *glyph = dynamic_cast(node); + for(auto& node: font->_children) { + SPGlyph *glyph = dynamic_cast(&node); if (glyph) { glyphs.push_back(glyph); } - SPMissingGlyph *missing = dynamic_cast(node); + SPMissingGlyph *missing = dynamic_cast(&node); if (missing) { missingglyph = missing; } diff --git a/src/extension/internal/metafile-print.cpp b/src/extension/internal/metafile-print.cpp index 47ba5971c..5c10f7dd9 100644 --- a/src/extension/internal/metafile-print.cpp +++ b/src/extension/internal/metafile-print.cpp @@ -293,20 +293,22 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf } // still looking? Look at this pattern's children, if there are any - SPObject *child = pat_i->firstChild(); - while (child && !(*epixbuf) && (*hatchType == -1)) { - brush_classify(child, depth, epixbuf, hatchType, hatchColor, bkColor); - child = child->getNext(); + for (auto& child: pat_i->_children) { + if (*epixbuf || *hatchType != -1) { + break; + } + brush_classify(&child, depth, epixbuf, hatchType, hatchColor, bkColor); } } } else if (SP_IS_IMAGE(parent)) { *epixbuf = ((SPImage *)parent)->pixbuf; return; } else { // some inkscape rearrangements pass through nodes between pattern and image which are not classified as either. - SPObject *child = parent->firstChild(); - while (child && !(*epixbuf) && (*hatchType == -1)) { - brush_classify(child, depth, epixbuf, hatchType, hatchColor, bkColor); - child = child->getNext(); + for (auto& child: parent->_children) { + if (*epixbuf || *hatchType != -1) { + break; + } + brush_classify(&child, depth, epixbuf, hatchType, hatchColor, bkColor); } } } diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp index 6e92ef50f..d3f031257 100644 --- a/src/filters/blend.cpp +++ b/src/filters/blend.cpp @@ -199,11 +199,11 @@ Inkscape::XML::Node* SPFeBlend::write(Inkscape::XML::Document *doc, Inkscape::XM if( !in2_name ) { // This code is very similar to sp_filter_primtive_name_previous_out() - SPObject *i = parent->children; + SPObject *i = parent->firstChild(); // Find previous filter primitive - while (i && i->next != this) { - i = i->next; + while (i && i->getNext() != this) { + i = i->getNext(); } if( i ) { diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index 3d0264390..e52f6d478 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -49,11 +49,10 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c { if (sp_componenttransfer->renderer) { bool set[4] = {false, false, false, false}; - SPObject* node = sp_componenttransfer->children; - for(;node;node=node->next){ + for(auto& node: sp_componenttransfer->_children) { int i = 4; - SPFeFuncNode *funcNode = SP_FEFUNCNODE(node); + SPFeFuncNode *funcNode = SP_FEFUNCNODE(&node); switch (funcNode->channel) { case SPFeFuncNode::R: @@ -74,13 +73,13 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c g_warning("Unrecognized channel for component transfer."); break; } - sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) node)->type; - sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) node)->tableValues; - sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) node)->slope; - sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) node)->intercept; - sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) node)->amplitude; - sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) node)->exponent; - sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) node)->offset; + sp_componenttransfer->renderer->type[i] = ((SPFeFuncNode *) &node)->type; + sp_componenttransfer->renderer->tableValues[i] = ((SPFeFuncNode *) &node)->tableValues; + sp_componenttransfer->renderer->slope[i] = ((SPFeFuncNode *) &node)->slope; + sp_componenttransfer->renderer->intercept[i] = ((SPFeFuncNode *) &node)->intercept; + sp_componenttransfer->renderer->amplitude[i] = ((SPFeFuncNode *) &node)->amplitude; + sp_componenttransfer->renderer->exponent[i] = ((SPFeFuncNode *) &node)->exponent; + sp_componenttransfer->renderer->offset[i] = ((SPFeFuncNode *) &node)->offset; set[i] = true; } // Set any types not explicitly set to the identity transform diff --git a/src/filters/composite.cpp b/src/filters/composite.cpp index 3e651a778..42f06915f 100644 --- a/src/filters/composite.cpp +++ b/src/filters/composite.cpp @@ -221,11 +221,11 @@ Inkscape::XML::Node* SPFeComposite::write(Inkscape::XML::Document *doc, Inkscape if( !in2_name ) { // This code is very similar to sp_filter_primitive_name_previous_out() - SPObject *i = parent->children; + SPObject *i = parent->firstChild(); // Find previous filter primitive - while (i && i->next != this) { - i = i->next; + while (i && i->getNext() != this) { + i = i->getNext(); } if( i ) { diff --git a/src/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp index 120c058d2..a46b367ec 100644 --- a/src/filters/diffuselighting.cpp +++ b/src/filters/diffuselighting.cpp @@ -258,17 +258,17 @@ static void sp_feDiffuseLighting_children_modified(SPFeDiffuseLighting *sp_diffu { if (sp_diffuselighting->renderer) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->children)) { + if (SP_IS_FEDISTANTLIGHT(sp_diffuselighting->firstChild())) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::DISTANT_LIGHT; - sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->children); + sp_diffuselighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_diffuselighting->firstChild()); } - if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->children)) { + if (SP_IS_FEPOINTLIGHT(sp_diffuselighting->firstChild())) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::POINT_LIGHT; - sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->children); + sp_diffuselighting->renderer->light.point = SP_FEPOINTLIGHT(sp_diffuselighting->firstChild()); } - if (SP_IS_FESPOTLIGHT(sp_diffuselighting->children)) { + if (SP_IS_FESPOTLIGHT(sp_diffuselighting->firstChild())) { sp_diffuselighting->renderer->light_type = Inkscape::Filters::SPOT_LIGHT; - sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->children); + sp_diffuselighting->renderer->light.spot = SP_FESPOTLIGHT(sp_diffuselighting->firstChild()); } } } @@ -293,19 +293,19 @@ void SPFeDiffuseLighting::build_renderer(Inkscape::Filters::Filter* filter) { //We assume there is at most one child nr_diffuselighting->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(this->children)) { + if (SP_IS_FEDISTANTLIGHT(this->firstChild())) { nr_diffuselighting->light_type = Inkscape::Filters::DISTANT_LIGHT; - nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(this->children); + nr_diffuselighting->light.distant = SP_FEDISTANTLIGHT(this->firstChild()); } - if (SP_IS_FEPOINTLIGHT(this->children)) { + if (SP_IS_FEPOINTLIGHT(this->firstChild())) { nr_diffuselighting->light_type = Inkscape::Filters::POINT_LIGHT; - nr_diffuselighting->light.point = SP_FEPOINTLIGHT(this->children); + nr_diffuselighting->light.point = SP_FEPOINTLIGHT(this->firstChild()); } - if (SP_IS_FESPOTLIGHT(this->children)) { + if (SP_IS_FESPOTLIGHT(this->firstChild())) { nr_diffuselighting->light_type = Inkscape::Filters::SPOT_LIGHT; - nr_diffuselighting->light.spot = SP_FESPOTLIGHT(this->children); + nr_diffuselighting->light.spot = SP_FESPOTLIGHT(this->firstChild()); } //nr_offset->set_dx(sp_offset->dx); diff --git a/src/filters/displacementmap.cpp b/src/filters/displacementmap.cpp index 1dbea67ff..f0ca36079 100644 --- a/src/filters/displacementmap.cpp +++ b/src/filters/displacementmap.cpp @@ -193,11 +193,11 @@ Inkscape::XML::Node* SPFeDisplacementMap::write(Inkscape::XML::Document *doc, In if( !in2_name ) { // This code is very similar to sp_filter_primtive_name_previous_out() - SPObject *i = parent->children; + SPObject *i = parent->firstChild(); // Find previous filter primitive - while (i && i->next != this) { - i = i->next; + while (i && i->getNext() != this) { + i = i->getNext(); } if( i ) { diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp index 68f671b11..6af1e8115 100644 --- a/src/filters/merge.cpp +++ b/src/filters/merge.cpp @@ -92,17 +92,14 @@ void SPFeMerge::build_renderer(Inkscape::Filters::Filter* filter) { sp_filter_primitive_renderer_common(this, nr_primitive); - SPObject *input = this->children; int in_nr = 0; - while (input) { - if (SP_IS_FEMERGENODE(input)) { - SPFeMergeNode *node = SP_FEMERGENODE(input); + for(auto& input: _children) { + if (SP_IS_FEMERGENODE(&input)) { + SPFeMergeNode *node = SP_FEMERGENODE(&input); nr_merge->set_input(in_nr, node->input); in_nr++; } - - input = input->next; } } diff --git a/src/filters/specularlighting.cpp b/src/filters/specularlighting.cpp index bda1a0f30..ac7253ad9 100644 --- a/src/filters/specularlighting.cpp +++ b/src/filters/specularlighting.cpp @@ -266,19 +266,19 @@ static void sp_feSpecularLighting_children_modified(SPFeSpecularLighting *sp_spe if (sp_specularlighting->renderer) { sp_specularlighting->renderer->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->children)) { + if (SP_IS_FEDISTANTLIGHT(sp_specularlighting->firstChild())) { sp_specularlighting->renderer->light_type = Inkscape::Filters::DISTANT_LIGHT; - sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->children); + sp_specularlighting->renderer->light.distant = SP_FEDISTANTLIGHT(sp_specularlighting->firstChild()); } - if (SP_IS_FEPOINTLIGHT(sp_specularlighting->children)) { + if (SP_IS_FEPOINTLIGHT(sp_specularlighting->firstChild())) { sp_specularlighting->renderer->light_type = Inkscape::Filters::POINT_LIGHT; - sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->children); + sp_specularlighting->renderer->light.point = SP_FEPOINTLIGHT(sp_specularlighting->firstChild()); } - if (SP_IS_FESPOTLIGHT(sp_specularlighting->children)) { + if (SP_IS_FESPOTLIGHT(sp_specularlighting->firstChild())) { sp_specularlighting->renderer->light_type = Inkscape::Filters::SPOT_LIGHT; - sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->children); + sp_specularlighting->renderer->light.spot = SP_FESPOTLIGHT(sp_specularlighting->firstChild()); } } } @@ -304,19 +304,19 @@ void SPFeSpecularLighting::build_renderer(Inkscape::Filters::Filter* filter) { //We assume there is at most one child nr_specularlighting->light_type = Inkscape::Filters::NO_LIGHT; - if (SP_IS_FEDISTANTLIGHT(this->children)) { + if (SP_IS_FEDISTANTLIGHT(this->firstChild())) { nr_specularlighting->light_type = Inkscape::Filters::DISTANT_LIGHT; - nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(this->children); + nr_specularlighting->light.distant = SP_FEDISTANTLIGHT(this->firstChild()); } - if (SP_IS_FEPOINTLIGHT(this->children)) { + if (SP_IS_FEPOINTLIGHT(this->firstChild())) { nr_specularlighting->light_type = Inkscape::Filters::POINT_LIGHT; - nr_specularlighting->light.point = SP_FEPOINTLIGHT(this->children); + nr_specularlighting->light.point = SP_FEPOINTLIGHT(this->firstChild()); } - if (SP_IS_FESPOTLIGHT(this->children)) { + if (SP_IS_FESPOTLIGHT(this->firstChild())) { nr_specularlighting->light_type = Inkscape::Filters::SPOT_LIGHT; - nr_specularlighting->light.spot = SP_FESPOTLIGHT(this->children); + nr_specularlighting->light.spot = SP_FESPOTLIGHT(this->firstChild()); } //nr_offset->set_dx(sp_offset->dx); diff --git a/src/main.cpp b/src/main.cpp index db908f640..7ab27dcb2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1483,10 +1483,8 @@ do_query_all_recurse (SPObject *o) } } - SPObject *child = o->children; - while (child) { - do_query_all_recurse (child); - child = child->next; + for(auto& child: o->_children) { + do_query_all_recurse (&child); } } diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 55f4118b0..28bcadef5 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -1010,7 +1010,7 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) for (std::vector::const_iterator item=rev.begin();item!=rev.end();++item) { SPObject *child = *item; // for each selected object, find the next sibling - for (SPObject *newref = child->next; newref; newref = newref->next) { + for (SPObject *newref = child->getNext(); newref; newref = newref->getNext()) { // if the sibling is an item AND overlaps our selection, SPItem *newItem = dynamic_cast(newref); if (newItem) { @@ -1138,15 +1138,16 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { gint minpos; - SPObject *pp, *pc; + SPObject *pp; Inkscape::XML::Node *repr = (*l); pp = document->getObjectByRepr(repr->parent()); minpos = 0; g_assert(dynamic_cast(pp)); - pc = pp->firstChild(); - while (!dynamic_cast(pc)) { + for (auto& pc: pp->_children) { + if(dynamic_cast(&pc)) { + break; + } minpos += 1; - pc = pc->next; } repr->setPosition(minpos); } @@ -1197,8 +1198,8 @@ take_style_from_item(SPObject *object) if (css == NULL) return NULL; - if ((dynamic_cast(object) && object->children) || - (dynamic_cast(object) && object->children && object->children->next == NULL)) { + if ((dynamic_cast(object) && object->firstChild()) || + (dynamic_cast(object) && object->firstChild() && object->firstChild()->getNext() == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style auto list = object->_children | boost::adaptors::reversed; @@ -2330,10 +2331,10 @@ typedef struct ListReverse { typedef GSList *Iterator; static Iterator children(SPObject *o) { - return make_list(o->firstChild(), NULL); + return make_list(o, NULL); } static Iterator siblings_after(SPObject *o) { - return make_list(o->parent->firstChild(), o); + return make_list(o->parent, o); } static void dispose(Iterator i) { g_slist_free(i); @@ -2347,13 +2348,12 @@ typedef struct ListReverse { private: static GSList *make_list(SPObject *object, SPObject *limit) { GSList *list = NULL; - while ( object != limit ) { - if (!object) { // TODO check if this happens in practice - g_warning("Unexpected list overrun"); + for (auto &child: object->_children) { + if (&child == limit) { break; } - list = g_slist_prepend(list, object); - object = object->getNext(); + list = g_slist_prepend(list, &child); + } return list; } diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp index b18850914..09df234cc 100644 --- a/src/sp-filter-primitive.cpp +++ b/src/sp-filter-primitive.cpp @@ -246,8 +246,10 @@ int sp_filter_primitive_read_result(SPFilterPrimitive *prim, gchar const *name) */ int sp_filter_primitive_name_previous_out(SPFilterPrimitive *prim) { SPFilter *parent = SP_FILTER(prim->parent); - SPObject *i = parent->children; - while (i && i->next != prim) i = i->next; + SPObject *i = parent->firstChild(); + while (i && i->getNext() != prim) { + i = i->getNext(); + } if (i) { SPFilterPrimitive *i_prim = SP_FILTER_PRIMITIVE(i); if (i_prim->image_out < 0) { diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index da3f12f5f..170847c0b 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -420,10 +420,9 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr } nr_filter->clear_primitives(); - SPObject *primitive_obj = sp_filter->children; - while (primitive_obj) { - if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) { - SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(primitive_obj); + for(auto& primitive_obj: sp_filter->_children) { + if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(&primitive_obj); g_assert(primitive != NULL); // if (((SPFilterPrimitiveClass*) G_OBJECT_GET_CLASS(primitive))->build_renderer) { @@ -433,7 +432,6 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr // } // CPPIFY: => FilterPrimitive should be abstract. primitive->build_renderer(nr_filter); } - primitive_obj = primitive_obj->next; } } @@ -441,11 +439,12 @@ int sp_filter_primitive_count(SPFilter *filter) { g_assert(filter != NULL); int count = 0; - SPObject *primitive_obj = filter->children; - while (primitive_obj) { - if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) count++; - primitive_obj = primitive_obj->next; + for(auto& primitive_obj: filter->_children) { + if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + count++; + } } + return count; } @@ -513,10 +512,9 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) { g_assert(filter != NULL); int largest = 0; - SPObject *primitive_obj = filter->children; - while (primitive_obj) { - if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) { - Inkscape::XML::Node *repr = primitive_obj->getRepr(); + for(auto& primitive_obj: filter->_children) { + if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + Inkscape::XML::Node *repr = primitive_obj.getRepr(); char const *result = repr->attribute("result"); int index; if (result) @@ -530,7 +528,6 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) { } } } - primitive_obj = primitive_obj->next; } return "result" + Glib::Ascii::dtostr(largest + 1); diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index eed882800..83fa5a1b4 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -440,9 +440,9 @@ Shape* SPFlowtext::_buildExclusionShape() const Shape *shape = new Shape(); Shape *shape_temp = new Shape(); - for (SPObject *child = children ; child ; child = child->getNext() ) { + for (auto& child: _children) { // RH: is it right that this shouldn't be recursive? - SPFlowregionExclude *c_child = dynamic_cast(child); + SPFlowregionExclude *c_child = dynamic_cast(const_cast(&child)); if ( c_child && c_child->computed && c_child->computed->hasEdges() ) { if (shape->hasEdges()) { shape_temp->Booleen(shape, c_child->computed, bool_op_union); diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 7915b0453..8d482d9b1 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -583,7 +583,7 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d if (text) { //this causes a change in text-on-path appearance when there is a non-conformal transform, see bug #1594565 double scale = (ctrans.expansionX() + ctrans.expansionY()) / 2.0; - SPTextPath * text_path = dynamic_cast(text->children); + SPTextPath * text_path = dynamic_cast(text->firstChild()); if (!text_path) { nrepr->setAttribute("transform", affinestr); } else { diff --git a/src/sp-item.cpp b/src/sp-item.cpp index ba57cec8b..53b4c0879 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -351,8 +351,8 @@ void SPItem::moveTo(SPItem *target, bool intoafter) { // Assume move to the "first" in the top node, find the top node intoafter = false; SPObject* bottom = this->document->getObjectByRepr(our_ref->root())->firstChild(); - while(!dynamic_cast(bottom->next)){ - bottom=bottom->next; + while(!dynamic_cast(bottom->getNext())){ + bottom = bottom->getNext(); } target_ref = bottom->getRepr(); } @@ -974,8 +974,8 @@ void SPItem::getSnappoints(std::vector &p, Inkscap for (std::list::const_iterator o = clips_and_masks.begin(); o != clips_and_masks.end(); ++o) { if (*o) { // obj is a group object, the children are the actual clippers - for (SPObject *child = (*o)->children ; child ; child = child->next) { - SPItem *item = dynamic_cast(child); + for(auto& child: (*o)->_children) { + SPItem *item = dynamic_cast(const_cast(&child)); if (item) { std::vector p_clip_or_mask; // Please note the recursive call here! @@ -1302,8 +1302,8 @@ void SPItem::adjust_stroke_width_recursive(double expansion) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for ( SPObject *o = children; o; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if (item) { item->adjust_stroke_width_recursive(expansion); } @@ -1317,8 +1317,8 @@ void SPItem::freeze_stroke_width_recursive(bool freeze) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for ( SPObject *o = children; o; o = o->getNext() ) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if (item) { item->freeze_stroke_width_recursive(freeze); } @@ -1337,10 +1337,10 @@ sp_item_adjust_rects_recursive(SPItem *item, Geom::Affine advertized_transform) rect->compensateRxRy(advertized_transform); } - for (SPObject *o = item->children; o != NULL; o = o->next) { - SPItem *item = dynamic_cast(o); - if (item) { - sp_item_adjust_rects_recursive(item, advertized_transform); + for(auto& o: item->_children) { + SPItem *itm = dynamic_cast(&o); + if (itm) { + sp_item_adjust_rects_recursive(itm, advertized_transform); } } } @@ -1357,8 +1357,8 @@ void SPItem::adjust_paint_recursive (Geom::Affine advertized_transform, Geom::Af // also we do not recurse into clones, because a clone's child is the ghost of its original - // we must not touch it if (!(this && (dynamic_cast(this) || dynamic_cast(this)))) { - for (SPObject *o = children; o != NULL; o = o->next) { - SPItem *item = dynamic_cast(o); + for (auto& o: _children) { + SPItem *item = dynamic_cast(&o); if (item) { // At the level of the transformed item, t_ancestors is identity; // below it, it is the accmmulated chain of transforms from this level to the top level diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 2babf0441..587efd4f6 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -118,8 +118,7 @@ static gchar *sp_object_get_unique_id(SPObject *object, */ SPObject::SPObject() : cloned(0), uflags(0), mflags(0), hrefcount(0), _total_hrefcount(0), - document(NULL), parent(NULL), children(NULL), - next(NULL), id(NULL), repr(NULL), refCount(1),hrefList(std::list()), + document(NULL), parent(NULL), id(NULL), repr(NULL), refCount(1), hrefList(std::list()), _successor(NULL), _collection_policy(SPObject::COLLECT_WITH_PARENT), _label(NULL), _default_label(NULL) { @@ -532,15 +531,6 @@ void SPObject::attach(SPObject *object, SPObject *prev) } _children.insert(it, *object); - SPObject *next; - if (prev) { - next = prev->next; - prev->next = object; - } else { - next = this->children; - this->children = object; - } - object->next = next; if (!object->xml_space.set) object->xml_space.value = this->xml_space.value; } @@ -558,29 +548,6 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { } _children.splice(it, _children, _children.iterator_to(*obj)); - - - SPObject *old_prev=NULL; - for ( SPObject *child = children ; child && child != obj ; - child = child->next ) - { - old_prev = child; - } - - SPObject *next=obj->next; - if (old_prev) { - old_prev->next = next; - } else { - children = next; - } - if (prev) { - next = prev->next; - prev->next = obj; - } else { - next = children; - children = obj; - } - obj->next = next; } void SPObject::detach(SPObject *object) @@ -594,21 +561,6 @@ void SPObject::detach(SPObject *object) _children.erase(_children.iterator_to(*object)); object->releaseReferences(); - SPObject *prev=NULL; - for ( SPObject *child = this->children ; child && child != object ; - child = child->next ) - { - prev = child; - } - - SPObject *next=object->next; - if (prev) { - prev->next = next; - } else { - this->children = next; - } - - object->next = NULL; object->parent = NULL; this->_updateTotalHRefCount(-object->_total_hrefcount); @@ -851,6 +803,15 @@ SPObject *SPObject::getPrev() return prev; } +SPObject* SPObject::getNext() +{ + SPObject *next = nullptr; + if (parent && !parent->_children.empty() && &parent->_children.back() != this) { + next = &*(++parent->_children.iterator_to(*this)); + } + return next; +} + void SPObject::repr_child_added(Inkscape::XML::Node * /*repr*/, Inkscape::XML::Node *child, Inkscape::XML::Node *ref, gpointer data) { SPObject *object = SP_OBJECT(data); @@ -1514,8 +1475,11 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool } else { // remove the current content of the 'text' or 'desc' element - SPObject *child; - while (NULL != (child = elem->firstChild())) child->deleteObject(); + auto tmp = elem->_children | boost::adaptors::transformed([](SPObject& obj) { return &obj; }); + std::vector vec(tmp.begin(), tmp.end()); + for (auto &child: vec) { + child->deleteObject(); + } } // add the new content diff --git a/src/sp-object.h b/src/sp-object.h index 2534b2268..94c9d5629 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -208,8 +208,6 @@ public: unsigned int _total_hrefcount; /* our hrefcount + total descendants */ SPDocument *document; /* Document we are part of */ SPObject *parent; /* Our parent (only one allowed) */ - SPObject *children; /* Our children */ - SPObject *next; /* Next object in linked list */ private: SPObject(const SPObject&); @@ -300,11 +298,8 @@ public: */ SPObject const *nearestCommonAncestor(SPObject const *object) const; - /* A non-const version can be similarly constructed if you want one. - * (Don't just cast away the constness, which would be ill-formed.) */ - SPObject *getNext() {return next;} - - SPObject const *getNext() const {return next;} + /* Returns next object in sibling list or NULL. */ + SPObject *getNext(); /** * Returns previous object in sibling list or NULL. diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 5126ae094..193289c2b 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -676,9 +676,9 @@ void SPText::_adjustFontsizeRecursive(SPItem *item, double ex, bool is_root) item->updateRepr(); } - for (SPObject *o = item->children; o != NULL; o = o->next) { - if (SP_IS_ITEM(o)) - _adjustFontsizeRecursive(SP_ITEM(o), ex, false); + for(auto& o: item->_children) { + if (SP_IS_ITEM(&o)) + _adjustFontsizeRecursive(SP_ITEM(&o), ex, false); } } @@ -695,9 +695,9 @@ void SPText::_adjustCoordsRecursive(SPItem *item, Geom::Affine const &m, double SP_TREF(item)->attributes.transform(m, ex, ex, is_root); } - for (SPObject *o = item->children; o != NULL; o = o->next) { - if (SP_IS_ITEM(o)) - _adjustCoordsRecursive(SP_ITEM(o), m, ex, false); + for(auto& o: item->_children) { + if (SP_IS_ITEM(&o)) + _adjustCoordsRecursive(SP_ITEM(&o), m, ex, false); } } diff --git a/src/sp-use.cpp b/src/sp-use.cpp index c8a0830c1..cef967c90 100644 --- a/src/sp-use.cpp +++ b/src/sp-use.cpp @@ -436,27 +436,23 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //BUT move clippaths accordingly. //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - SPObject *clip = clip_ref->getObject()->firstChild() ; - while(clip){ - SPItem *item = (SPItem*) clip; + for(auto& clip: clip_ref->getObject()->_children){ + SPItem *item = (SPItem*) &clip; if(item){ item->transform *= m; Geom::Affine identity; - item->doWriteTransform(clip->getRepr(),item->transform, &identity); + item->doWriteTransform(clip.getRepr(),item->transform, &identity); } - clip = clip->getNext(); } } if(mask_ref->getObject()){ - SPObject *mask = mask_ref->getObject()->firstChild() ; - while(mask){ - SPItem *item = (SPItem*) mask; + for(auto& mask: mask_ref->getObject()->_children){ + SPItem *item = (SPItem*) &mask; if(item){ item->transform *= m; Geom::Affine identity; - item->doWriteTransform(mask->getRepr(),item->transform, &identity); + item->doWriteTransform(mask.getRepr(),item->transform, &identity); } - mask = mask->getNext(); } } return; @@ -480,27 +476,23 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - SPObject *clip = clip_ref->getObject()->firstChild() ; - while(clip){ - SPItem *item = (SPItem*) clip; + for(auto& clip: clip_ref->getObject()->_children){ + SPItem *item = (SPItem*) &clip; if(item){ item->transform *= clone_move.inverse(); Geom::Affine identity; - item->doWriteTransform(clip->getRepr(),item->transform, &identity); + item->doWriteTransform(clip.getRepr(),item->transform, &identity); } - clip = clip->getNext(); } } if(mask_ref->getObject()){ - SPObject *mask = mask_ref->getObject()->firstChild() ; - while(mask){ - SPItem *item = (SPItem*) mask; + for(auto& mask: mask_ref->getObject()->_children){ + SPItem *item = (SPItem*) &mask; if(item){ item->transform *= clone_move.inverse(); Geom::Affine identity; - item->doWriteTransform(mask->getRepr(),item->transform, &identity); + item->doWriteTransform(mask.getRepr(),item->transform, &identity); } - mask = mask->getNext(); } } diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index f539652c0..56048d1f7 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -142,8 +142,8 @@ text_put_on_path() // make a list of text children GSList *text_reprs = NULL; - for (SPObject *o = text->children; o != NULL; o = o->next) { - text_reprs = g_slist_prepend(text_reprs, o->getRepr()); + for(auto& o: text->_children) { + text_reprs = g_slist_prepend(text_reprs, o.getRepr()); } // create textPath and put it into the text @@ -353,9 +353,9 @@ text_flow_into_shape() Inkscape::GC::release(text_repr); } else { // reflow an already flowed text, preserving paras - for (SPObject *o = text->children; o != NULL; o = o->next) { - if (SP_IS_FLOWPARA(o)) { - Inkscape::XML::Node *para_repr = o->getRepr()->duplicate(xml_doc); + for(auto& o: text->_children) { + if (SP_IS_FLOWPARA(&o)) { + Inkscape::XML::Node *para_repr = o.getRepr()->duplicate(xml_doc); root_repr->appendChild(para_repr); object = doc->getObjectByRepr(para_repr); g_return_if_fail(SP_IS_FLOWPARA(object)); diff --git a/src/text-editing.cpp b/src/text-editing.cpp index b03be792b..6ca2fe948 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -944,13 +944,10 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str) gchar *content = g_strdup (str); repr->setContent(""); - SPObject *child = object->firstChild(); - while (child) { - SPObject *next = child->getNext(); - if (!SP_IS_FLOWREGION(child) && !SP_IS_FLOWREGIONEXCLUDE(child)) { - repr->removeChild(child->getRepr()); + for (auto& child: object->_children) { + if (!SP_IS_FLOWREGION(&child) && !SP_IS_FLOWREGIONEXCLUDE(&child)) { + repr->removeChild(child.getRepr()); } - child = next; } gchar *p = content; diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 75c6c5bcc..48d53857b 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -839,8 +839,8 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) SPObject *mask = item->mask_ref->getObject(); _copyNode(mask->getRepr(), _doc, _defs); // recurse into the mask for its gradients etc. - for (SPObject *o = mask->children ; o != NULL ; o = o->next) { - SPItem *childItem = dynamic_cast(o); + for(auto& o: mask->_children) { + SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); } @@ -857,8 +857,8 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) } // recurse - for (SPObject *o = item->children ; o != NULL ; o = o->next) { - SPItem *childItem = dynamic_cast(o); + for(auto& o: item->_children) { + SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); } diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 589973162..df37eb005 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -1315,12 +1315,7 @@ void DocumentProperties::changeEmbeddedScript(){ for (std::vector::const_iterator it = current.begin(); it != current.end(); ++it) { SPObject* obj = *it; if (id == obj->getId()){ - - int count=0; - for ( SPObject *child = obj->children ; child; child = child->next ) - { - count++; - } + int count = (int) obj->_children.size(); if (count>1) g_warning("TODO: Found a script element with multiple (%d) child nodes! We must implement support for that!", count); @@ -1364,8 +1359,11 @@ void DocumentProperties::editEmbeddedScript(){ //XML Tree being used directly here while it shouldn't be. Inkscape::XML::Node *repr = obj->getRepr(); if (repr){ - SPObject *child; - while (NULL != (child = obj->firstChild())) child->deleteObject(); + auto tmp = obj->_children | boost::adaptors::transformed([](SPObject& o) { return &o; }); + std::vector vec(tmp.begin(), tmp.end()); + for (auto &child: vec) { + child->deleteObject(); + } obj->appendChildRepr(xml_doc->createTextNode(_EmbeddedContent.get_buffer()->get_text().c_str())); //TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text()); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index a60d1ddff..1be5d540a 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -1058,11 +1058,10 @@ public: // FuncNode can be in any order so we must search to find correct one. SPFeFuncNode* find_node(SPFeComponentTransfer* ct) { - SPObject* node = ct->children; SPFeFuncNode* funcNode = NULL; bool found = false; - for(;node;node=node->next){ - funcNode = SP_FEFUNCNODE(node); + for(auto& node: ct->_children) { + funcNode = SP_FEFUNCNODE(&node); if( funcNode->channel == _channel ) { found = true; break; @@ -1226,7 +1225,7 @@ protected: _locked = true; - SPObject* child = o->children; + SPObject* child = o->firstChild(); if(SP_IS_FEDISTANTLIGHT(child)) _light_source.set_active(0); @@ -1251,7 +1250,7 @@ private: if(prim) { _locked = true; - SPObject* child = prim->children; + SPObject* child = prim->firstChild(); const int ls = _light_source.get_active_row_number(); // Check if the light source type has changed if(!(ls == -1 && !child) && @@ -1285,8 +1284,8 @@ private: _light_box.show_all(); SPFilterPrimitive* prim = _dialog._primitive_list.get_selected(); - if(prim && prim->children) - _settings.show_and_update(_light_source.get_active_data()->id, prim->children); + if(prim && prim->firstChild()) + _settings.show_and_update(_light_source.get_active_data()->id, prim->firstChild()); } FilterEffectsDialog& _dialog; @@ -1869,26 +1868,25 @@ void FilterEffectsDialog::PrimitiveList::update() bool active_found = false; _dialog._primitive_box->set_sensitive(true); _dialog.update_filter_general_settings_view(); - for(SPObject *prim_obj = f->children; - prim_obj && SP_IS_FILTER_PRIMITIVE(prim_obj); - prim_obj = prim_obj->next) { - SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(prim_obj); - if(prim) { - Gtk::TreeModel::Row row = *_model->append(); - row[_columns.primitive] = prim; - - //XML Tree being used directly here while it shouldn't be. - row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name()); - row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str()); - - if (prim->getId()) { - row[_columns.id] = Glib::ustring(prim->getId()); - } - - if(prim == active_prim) { - get_selection()->select(row); - active_found = true; - } + for(auto& prim_obj: f->_children) { + SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(&prim_obj); + if(!prim) { + break; + } + Gtk::TreeModel::Row row = *_model->append(); + row[_columns.primitive] = prim; + + //XML Tree being used directly here while it shouldn't be. + row[_columns.type_id] = FPConverter.get_id_from_key(prim->getRepr()->name()); + row[_columns.type] = _(FPConverter.get_label(row[_columns.type_id]).c_str()); + + if (prim->getId()) { + row[_columns.id] = Glib::ustring(prim->getId()); + } + + if(prim == active_prim) { + get_selection()->select(row); + active_found = true; } } @@ -3098,7 +3096,7 @@ void FilterEffectsDialog::set_filternode_attr(const AttrWidget* input) void FilterEffectsDialog::set_child_attr_direct(const AttrWidget* input) { - set_attr(_primitive_list.get_selected()->children, input->get_attribute(), input->get_as_attribute().c_str()); + set_attr(_primitive_list.get_selected()->firstChild(), input->get_attribute(), input->get_as_attribute().c_str()); } void FilterEffectsDialog::set_attr(SPObject* o, const SPAttributeEnum attr, const gchar* val) diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 00482c573..e4639745f 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -340,12 +340,11 @@ void ObjectsPanel::_objectsChanged(SPObject */*obj*/) void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow) { if ( _desktop && obj ) { - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - - if (SP_IS_ITEM(child)) + for(auto& child: obj->_children) { + if (SP_IS_ITEM(&child)) { - SPItem * item = SP_ITEM(child); - SPGroup * group = SP_IS_GROUP(child) ? SP_GROUP(child) : 0; + SPItem * item = SP_ITEM(&child); + SPGroup * group = SP_IS_GROUP(&child) ? SP_GROUP(&child) : 0; //Add the item to the tree and set the column information Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend(); @@ -372,14 +371,14 @@ void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow) } //Add an object watcher to the item - ObjectsPanel::ObjectWatcher *w = new ObjectsPanel::ObjectWatcher(this, child); - child->getRepr()->addObserver(*w); + ObjectsPanel::ObjectWatcher *w = new ObjectsPanel::ObjectWatcher(this, &child); + child.getRepr()->addObserver(*w); _objectWatchers.push_back(w); //If the item is a group, recursively add its children if (group) { - _addObject( child, &row ); + _addObject( &child, &row ); } } } @@ -399,9 +398,8 @@ void ObjectsPanel::_updateObject( SPObject *obj, bool recurse ) { //end mark if (recurse) { - for (SPObject * iter = obj->children; iter != NULL; iter = iter->next) - { - _updateObject(iter, recurse); + for (auto& iter: obj->_children) { + _updateObject(&iter, recurse); } } } @@ -520,19 +518,22 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) SPGaussianBlur *spblur = NULL; if (item->style->getFilter()) { - for(SPObject *primitive_obj = item->style->getFilter()->children; primitive_obj && SP_IS_FILTER_PRIMITIVE(primitive_obj); primitive_obj = primitive_obj->next) { - if(SP_IS_FEBLEND(primitive_obj) && !spblend) { - //Get the blend mode - spblend = SP_FEBLEND(primitive_obj); - } - - if(SP_IS_GAUSSIANBLUR(primitive_obj) && !spblur) { - //Get the blur value - spblur = SP_GAUSSIANBLUR(primitive_obj); - } + for (auto& primitive_obj: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { + break; } + if(SP_IS_FEBLEND(&primitive_obj) && !spblend) { + //Get the blend mode + spblend = SP_FEBLEND(&primitive_obj); + } + + if(SP_IS_GAUSSIANBLUR(&primitive_obj) && !spblur) { + //Get the blur value + spblur = SP_GAUSSIANBLUR(&primitive_obj); + } + } } - + //Set the blend mode _fe_cb.set_blend_mode(spblend ? spblend->blend_mode : Inkscape::Filters::BLEND_NORMAL); @@ -1404,9 +1405,10 @@ void ObjectsPanel::_setCollapsed(SPGroup * group) { group->setExpanded(false); group->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); - for (SPObject *iter = group->children; iter != NULL; iter = iter->next) - { - if (SP_IS_GROUP(iter)) _setCollapsed(SP_GROUP(iter)); + for (auto& iter: group->_children) { + if (SP_IS_GROUP(&iter)) { + _setCollapsed(SP_GROUP(&iter)); + } } } @@ -1521,11 +1523,14 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl if (blendmode != "normal") { gdouble radius = 0; if (item->style->getFilter()) { - for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) { - if (SP_IS_GAUSSIANBLUR(primitive)) { + for (auto& primitive: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { + break; + } + if (SP_IS_GAUSSIANBLUR(&primitive)) { Geom::OptRect bbox = item->bounds(SPItem::GEOMETRIC_BBOX); if (bbox) { - radius = SP_GAUSSIANBLUR(primitive)->stdDeviation.getNumber(); + radius = SP_GAUSSIANBLUR(&primitive)->stdDeviation.getNumber(); } } } @@ -1533,13 +1538,16 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl SPFilter *filter = new_filter_simple_from_item(_document, item, blendmode.c_str(), radius); sp_style_set_property_url(item, "filter", filter, false); } else { - for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) { - if (SP_IS_FEBLEND(primitive)) { - primitive->deleteObject(); + for (auto& primitive: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { + break; + } + if (SP_IS_FEBLEND(&primitive)) { + primitive.deleteObject(); break; } } - if (!item->style->getFilter()->children) { + if (!item->style->getFilter()->firstChild()) { remove_filter(item, false); } } @@ -1590,13 +1598,16 @@ void ObjectsPanel::_blurChangedIter(const Gtk::TreeIter& iter, double blur) SPFilter *filter = modify_filter_gaussian_blur_from_item(_document, item, radius); sp_style_set_property_url(item, "filter", filter, false); } else if (item->style->filter.set && item->style->getFilter()) { - for (SPObject *primitive = item->style->getFilter()->children; primitive && SP_IS_FILTER_PRIMITIVE(primitive); primitive = primitive->next) { - if (SP_IS_GAUSSIANBLUR(primitive)) { - primitive->deleteObject(); + for (auto& primitive: item->style->getFilter()->_children) { + if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { + break; + } + if (SP_IS_GAUSSIANBLUR(&primitive)) { + primitive.deleteObject(); break; } } - if (!item->style->getFilter()->children) { + if (!item->style->getFilter()->firstChild()) { remove_filter(item, false); } } diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 7b256fc8f..93bd67a3d 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -115,11 +115,11 @@ void SvgFontsDialog::AttrEntry::set_text(char* t){ void SvgFontsDialog::AttrEntry::on_attr_changed(){ SPObject* o = NULL; - for(SPObject* node = this->dialog->get_selected_spfont()->children; node; node=node->next){ + for (auto& node: dialog->get_selected_spfont()->_children) { switch(this->attr){ case SP_PROP_FONT_FAMILY: - if (SP_IS_FONTFACE(node)){ - o = node; + if (SP_IS_FONTFACE(&node)){ + o = &node; continue; } break; @@ -170,9 +170,9 @@ void GlyphComboBox::update(SPFont* spfont){ this->append(""); //Gtk is refusing to clear the combobox when I comment out this line this->remove_all(); - for(SPObject* node = spfont->children; node; node=node->next){ - if (SP_IS_GLYPH(node)){ - this->append((static_cast(node))->unicode); + for (auto& node: spfont->_children) { + if (SP_IS_GLYPH(&node)){ + this->append((static_cast(&node))->unicode); } } } @@ -308,10 +308,9 @@ void SvgFontsDialog::update_global_settings_tab(){ SPFont* font = get_selected_spfont(); if (!font) return; - SPObject* obj; - for (obj=font->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ - _familyname_entry->set_text((SP_FONTFACE(obj))->font_family); + for (auto& obj: font->_children) { + if (SP_IS_FONTFACE(&obj)){ + _familyname_entry->set_text((SP_FONTFACE(&obj))->font_family); } } } @@ -414,12 +413,12 @@ SvgFontsDialog::populate_glyphs_box() SPFont* spfont = this->get_selected_spfont(); _glyphs_observer.set(spfont); - for(SPObject* node = spfont->children; node; node=node->next){ - if (SP_IS_GLYPH(node)){ + for (auto& node: spfont->_children) { + if (SP_IS_GLYPH(&node)){ Gtk::TreeModel::Row row = *(_GlyphsListStore->append()); - row[_GlyphsListColumns.glyph_node] = static_cast(node); - row[_GlyphsListColumns.glyph_name] = (static_cast(node))->glyph_name; - row[_GlyphsListColumns.unicode] = (static_cast(node))->unicode; + row[_GlyphsListColumns.glyph_node] = static_cast(&node); + row[_GlyphsListColumns.glyph_name] = (static_cast(&node))->glyph_name; + row[_GlyphsListColumns.unicode] = (static_cast(&node))->unicode; } } } @@ -432,13 +431,13 @@ SvgFontsDialog::populate_kerning_pairs_box() SPFont* spfont = this->get_selected_spfont(); - for(SPObject* node = spfont->children; node; node=node->next){ - if (SP_IS_HKERN(node)){ + for (auto& node: spfont->_children) { + if (SP_IS_HKERN(&node)){ Gtk::TreeModel::Row row = *(_KerningPairsListStore->append()); - row[_KerningPairsListColumns.first_glyph] = (static_cast(node))->u1->attribute_string().c_str(); - row[_KerningPairsListColumns.second_glyph] = (static_cast(node))->u2->attribute_string().c_str(); - row[_KerningPairsListColumns.kerning_value] = (static_cast(node))->k; - row[_KerningPairsListColumns.spnode] = static_cast(node); + row[_KerningPairsListColumns.first_glyph] = (static_cast(&node))->u1->attribute_string().c_str(); + row[_KerningPairsListColumns.second_glyph] = (static_cast(&node))->u2->attribute_string().c_str(); + row[_KerningPairsListColumns.kerning_value] = (static_cast(&node))->k; + row[_KerningPairsListColumns.spnode] = static_cast(&node); } } } @@ -493,11 +492,10 @@ void SvgFontsDialog::add_glyph(){ Geom::PathVector SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){ double units_per_em = 1000; - SPObject* obj; - for (obj = get_selected_spfont()->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ + for (auto& obj: get_selected_spfont()->_children) { + if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. - sp_repr_get_double(obj->getRepr(), "units-per-em", &units_per_em); + sp_repr_get_double(obj.getRepr(), "units-per-em", &units_per_em); } } @@ -576,13 +574,12 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){ Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d")); - SPObject* obj; - for (obj = get_selected_spfont()->children; obj; obj=obj->next){ - if (SP_IS_MISSING_GLYPH(obj)){ + for (auto& obj: get_selected_spfont()->_children) { + if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. gchar *str = sp_svg_write_path (flip_coordinate_system(pathv)); - obj->getRepr()->setAttribute("d", str); + obj.getRepr()->setAttribute("d", str); g_free(str); DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Set glyph curves")); } @@ -599,11 +596,10 @@ void SvgFontsDialog::reset_missing_glyph_description(){ } SPDocument* doc = desktop->getDocument(); - SPObject* obj; - for (obj = get_selected_spfont()->children; obj; obj=obj->next){ - if (SP_IS_MISSING_GLYPH(obj)){ + for (auto& obj: get_selected_spfont()->_children) { + if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. - obj->getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z"); + obj.getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z"); DocumentUndo::done(doc, SP_VERB_DIALOG_SVG_FONTS, _("Reset missing-glyph")); } } @@ -738,12 +734,12 @@ void SvgFontsDialog::add_kerning_pair(){ //look for this kerning pair on the currently selected font this->kerning_pair = NULL; - for(SPObject* node = this->get_selected_spfont()->children; node; node=node->next){ + for (auto& node: get_selected_spfont()->_children) { //TODO: It is not really correct to get only the first byte of each string. //TODO: We should also support vertical kerning - if (SP_IS_HKERN(node) && (static_cast(node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0]) - && (static_cast(node))->u2->contains((gchar) second_glyph.get_active_text().c_str()[0]) ){ - this->kerning_pair = static_cast(node); + if (SP_IS_HKERN(&node) && (static_cast(&node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0]) + && (static_cast(&node))->u2->contains((gchar) second_glyph.get_active_text().c_str()[0]) ){ + this->kerning_pair = static_cast(&node); continue; } } @@ -852,11 +848,10 @@ SPFont *new_font(SPDocument *document) void set_font_family(SPFont* font, char* str){ if (!font) return; - SPObject* obj; - for (obj=font->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ + for (auto& obj: font->_children) { + if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. - obj->getRepr()->setAttribute("font-family", str); + obj.getRepr()->setAttribute("font-family", str); } } @@ -873,11 +868,10 @@ void SvgFontsDialog::add_font(){ font->setLabel(os.str().c_str()); os2 << "SVGFont " << count; - SPObject* obj; - for (obj=font->children; obj; obj=obj->next){ - if (SP_IS_FONTFACE(obj)){ + for (auto& obj: font->_children) { + if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. - obj->getRepr()->setAttribute("font-family", os2.str().c_str()); + obj.getRepr()->setAttribute("font-family", os2.str().c_str()); } } diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index 53641c0de..61c8b5d37 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -399,26 +399,26 @@ void TagsPanel::_objectsChanged(SPObject* root) void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* parentRow ) { if ( _desktop && obj ) { - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - if (SP_IS_TAG(child)) + for (auto& child: obj->_children) { + if (SP_IS_TAG(&child)) { Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend(); Gtk::TreeModel::Row row = *iter; - row[_model->_colObject] = child; + row[_model->_colObject] = &child; row[_model->_colParentObject] = NULL; - row[_model->_colLabel] = child->label() ? child->label() : child->getId(); + row[_model->_colLabel] = child.label() ? child.label() : child.getId(); row[_model->_colAddRemove] = true; row[_model->_colAllowAddRemove] = true; _tree.expand_to_path( _store->get_path(iter) ); - TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, child); - child->getRepr()->addObserver(*w); + TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, &child); + child.getRepr()->addObserver(*w); _objectWatchers.push_back(w); - _addObject( doc, child, &row ); + _addObject( doc, &child, &row ); } } - if (SP_IS_TAG(obj) && obj->children) + if (SP_IS_TAG(obj) && obj->firstChild()) { Gtk::TreeModel::iterator iteritems = parentRow ? _store->append(parentRow->children()) : _store->prepend(); Gtk::TreeModel::Row rowitems = *iteritems; @@ -429,16 +429,16 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* rowitems[_model->_colAllowAddRemove] = false; _tree.expand_to_path( _store->get_path(iteritems) ); - - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - if (SP_IS_TAG_USE(child)) + + for (auto& child: obj->_children) { + if (SP_IS_TAG_USE(&child)) { - SPItem *item = SP_TAG_USE(child)->ref->getObject(); + SPItem *item = SP_TAG_USE(&child)->ref->getObject(); Gtk::TreeModel::iterator iter = _store->prepend(rowitems->children()); Gtk::TreeModel::Row row = *iter; - row[_model->_colObject] = child; + row[_model->_colObject] = &child; row[_model->_colParentObject] = NULL; - row[_model->_colLabel] = item ? (item->label() ? item->label() : item->getId()) : SP_TAG_USE(child)->href; + row[_model->_colLabel] = item ? (item->label() ? item->label() : item->getId()) : SP_TAG_USE(&child)->href; row[_model->_colAddRemove] = false; row[_model->_colAllowAddRemove] = true; @@ -447,7 +447,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* } if (item) { - TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, child, item->getRepr()); + TagsPanel::ObjectWatcher *w = new TagsPanel::ObjectWatcher(this, &child, item->getRepr()); item->getRepr()->addObserver(*w); _objectWatchers.push_back(w); } @@ -459,12 +459,11 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* void TagsPanel::_select_tag( SPTag * tag ) { - for (SPObject * child = tag->children; child != NULL; child = child->next) - { - if (SP_IS_TAG(child)) { - _select_tag(SP_TAG(child)); - } else if (SP_IS_TAG_USE(child)) { - SPObject * obj = SP_TAG_USE(child)->ref->getObject(); + for (auto& child: tag->_children) { + if (SP_IS_TAG(&child)) { + _select_tag(SP_TAG(&child)); + } else if (SP_IS_TAG_USE(&child)) { + SPObject * obj = SP_TAG_USE(&child)->ref->getObject(); if (obj) { if (_desktop->selection->isEmpty()) _desktop->setCurrentLayer(obj->parent); _desktop->selection->add(obj); @@ -650,8 +649,8 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event) for(auto i=items.begin();i!=items.end();++i){ SPObject *newobj = *i; bool addchild = true; - for ( SPObject *child = obj->children; child != NULL; child = child->next) { - if (SP_IS_TAG_USE(child) && SP_TAG_USE(child)->ref->getObject() == newobj) { + for (auto& child: obj->_children) { + if (SP_IS_TAG_USE(&child) && SP_TAG_USE(&child)->ref->getObject() == newobj) { addchild = false; } } diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 736dafa50..3dfac5e3d 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -378,8 +378,8 @@ void gather_items(NodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Shape r.role = role; s.insert(r); } else if (role != SHAPE_ROLE_NORMAL && (SP_IS_GROUP(obj) || SP_IS_OBJECTGROUP(obj))) { - for (SPObject *c = obj->children; c; c = c->next) { - gather_items(nt, base, c, role, s); + for (auto& c: obj->_children) { + gather_items(nt, base, &c, role, s); } } else if (SP_IS_ITEM(obj)) { SPItem *item = static_cast(obj); diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index d048c318b..7da0973d5 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -951,9 +951,8 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, Geom::Affine i2dt = item->i2dt_affine (); if (style->filter.set && style->getFilter()) { //cycle through filter primitives - SPObject *primitive_obj = style->getFilter()->children; - while (primitive_obj) { - SPFilterPrimitive *primitive = dynamic_cast(primitive_obj); + for (auto& primitive_obj: style->getFilter()->_children) { + SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { //if primitive is gaussianblur SPGaussianBlur * spblur = dynamic_cast(primitive); @@ -962,7 +961,6 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, blur_now += num * i2dt.descrim(); // sum all blurs in the filter } } - primitive_obj = primitive_obj->next; } } double perimeter = bbox->dimensions()[Geom::X] + bbox->dimensions()[Geom::Y]; diff --git a/src/uri-references.cpp b/src/uri-references.cpp index 078834131..23802ae65 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -76,10 +76,11 @@ bool URIReference::_acceptObject(SPObject *obj) const std::vector positions; while (owner->cloned) { int position = 0; - SPObject *c = owner->parent->firstChild(); - while (c != owner && dynamic_cast(c)) { + for (auto &child: owner->parent->_children) { + if(&child == owner) { + break; + } position++; - c = c->next; } positions.push_back(position); owner = owner->parent; diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp index 6ef9cd54c..a2c31d6d7 100644 --- a/testfiles/src/sp-object-test.cpp +++ b/testfiles/src/sp-object-test.cpp @@ -16,6 +16,7 @@ #include #include #include +#include using namespace Inkscape; using namespace Inkscape::XML; @@ -109,24 +110,13 @@ TEST_F(SPObjectTest, Advanced) { EXPECT_EQ(c, d->getPrev()); EXPECT_EQ(b, c->getPrev()); EXPECT_EQ(nullptr, b->getPrev()); + EXPECT_EQ(nullptr, e->getNext()); + EXPECT_EQ(e, d->getNext()); + EXPECT_EQ(d, c->getNext()); + EXPECT_EQ(c, b->getNext()); std::vector tmp = {b, c, d, e}; int index = 0; for(auto& child: a->_children) { EXPECT_EQ(tmp[index++], &child); } } - -TEST_F(SPObjectTest, Tmp) { - a->attach(b, a->lastChild()); - a->attach(c, a->lastChild()); - a->attach(d, a->lastChild()); - a->attach(e, a->lastChild()); - std::vector tmp; - for (SPObject *q = a->firstChild(); q; q = q->getNext()) { - tmp.push_back(q); - } - int index = 0; - for(auto& child: a->_children) { - EXPECT_EQ(tmp[index++], &child); - } -} \ No newline at end of file -- cgit v1.2.3 From 24d3f50003ca3cec6a03a7f5267cc4fe5588c69f Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Thu, 14 Jul 2016 13:17:21 +0200 Subject: Renamed children list in SPObject (bzr r14954.1.21) --- src/box3d.cpp | 10 +++--- src/conn-avoid-ref.cpp | 2 +- src/desktop-style.cpp | 8 ++--- src/display/nr-svgfonts.cpp | 8 ++--- src/document.cpp | 22 ++++++------- src/extension/internal/cairo-render-context.cpp | 6 ++-- src/extension/internal/cairo-renderer.cpp | 4 +-- src/extension/internal/emf-print.cpp | 4 +-- src/extension/internal/javafx-out.cpp | 4 +-- src/extension/internal/metafile-print.cpp | 4 +-- src/extension/internal/pov-out.cpp | 2 +- src/file.cpp | 4 +-- src/filter-chemistry.cpp | 10 +++--- src/filters/componenttransfer.cpp | 2 +- src/filters/merge.cpp | 2 +- src/gradient-chemistry.cpp | 6 ++-- src/gradient-drag.cpp | 2 +- src/helper/pixbuf-ops.cpp | 2 +- src/helper/png-write.cpp | 2 +- src/helper/stock-items.cpp | 6 ++-- src/id-clash.cpp | 4 +-- src/layer-fns.cpp | 12 +++---- src/libnrtype/font-lister.cpp | 2 +- src/live_effects/lpe-perspective_path.cpp | 2 +- src/main.cpp | 4 +-- src/object-set.cpp | 6 ++-- src/object-snapper.cpp | 2 +- src/persp3d.cpp | 4 +-- src/selection-chemistry.cpp | 20 +++++------ src/sp-clippath.cpp | 10 +++--- src/sp-defs.cpp | 6 ++-- src/sp-filter.cpp | 10 +++--- src/sp-flowdiv.cpp | 24 +++++++------- src/sp-flowregion.cpp | 20 +++++------ src/sp-flowtext.cpp | 18 +++++----- src/sp-gradient.cpp | 16 ++++----- src/sp-hatch.cpp | 6 ++-- src/sp-item-group.cpp | 22 ++++++------- src/sp-item.cpp | 34 +++++++++---------- src/sp-mask.cpp | 4 +-- src/sp-mesh-array.cpp | 12 +++---- src/sp-namedview.cpp | 4 +-- src/sp-object-group.cpp | 4 +-- src/sp-object.cpp | 44 ++++++++++++------------- src/sp-object.h | 12 +++---- src/sp-pattern.cpp | 10 +++--- src/sp-root.cpp | 6 ++-- src/sp-switch.cpp | 2 +- src/sp-text.cpp | 18 +++++----- src/sp-tref.cpp | 2 +- src/sp-tspan.cpp | 18 +++++----- src/sp-use.cpp | 8 ++--- src/splivarot.cpp | 2 +- src/text-chemistry.cpp | 6 ++-- src/text-editing.cpp | 16 ++++----- src/ui/clipboard.cpp | 6 ++-- src/ui/dialog/clonetiler.cpp | 8 ++--- src/ui/dialog/document-properties.cpp | 4 +-- src/ui/dialog/filter-effects-dialog.cpp | 10 +++--- src/ui/dialog/find.cpp | 2 +- src/ui/dialog/font-substitution.cpp | 2 +- src/ui/dialog/objects.cpp | 16 ++++----- src/ui/dialog/spellcheck.cpp | 2 +- src/ui/dialog/svg-fonts-dialog.cpp | 22 ++++++------- src/ui/dialog/symbols.cpp | 4 +-- src/ui/dialog/tags.cpp | 8 ++--- src/ui/tools/box3d-tool.cpp | 2 +- src/ui/tools/connector-tool.cpp | 2 +- src/ui/tools/node-tool.cpp | 2 +- src/ui/tools/tweak-tool.cpp | 8 ++--- src/ui/widget/layer-selector.cpp | 2 +- src/uri-references.cpp | 2 +- src/widgets/gradient-toolbar.cpp | 4 +-- src/widgets/gradient-vector.cpp | 8 ++--- src/widgets/stroke-marker-selector.cpp | 2 +- testfiles/src/sp-object-test.cpp | 28 ++++++++-------- 76 files changed, 322 insertions(+), 322 deletions(-) diff --git a/src/box3d.cpp b/src/box3d.cpp index 0a33ee306..f8ef158b2 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -259,7 +259,7 @@ void box3d_position_set(SPBox3D *box) { /* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in box3d_side_position_set() to avoid update conflicts with the parent box) */ - for (auto& obj: box->_children) { + for (auto& obj: box->children) { Box3DSide *side = dynamic_cast(&obj); if (side) { box3d_side_position_set(side); @@ -275,7 +275,7 @@ Geom::Affine SPBox3D::set_transform(Geom::Affine const &xform) { gdouble const sw = hypot(ret[0], ret[1]); gdouble const sh = hypot(ret[2], ret[3]); - for (auto& child: _children) { + for (auto& child: children) { SPItem *childitem = dynamic_cast(&child); if (childitem) { // Adjust stroke width @@ -1074,7 +1074,7 @@ box3d_recompute_z_orders (SPBox3D *box) { static std::map box3d_get_sides(SPBox3D *box) { std::map sides; - for (auto& obj: box->_children) { + for (auto& obj: box->children) { Box3DSide *side = dynamic_cast(&obj); if (side) { sides[Box3D::face_to_int(side->getFaceId())] = side; @@ -1217,7 +1217,7 @@ static void box3d_extract_boxes_rec(SPObject *obj, std::list &boxes) if (box) { boxes.push_back(box); } else if (dynamic_cast(obj)) { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { box3d_extract_boxes_rec(&child, boxes); } } @@ -1276,7 +1276,7 @@ SPGroup *box3d_convert_to_group(SPBox3D *box) // create a new group and add the sides (converted to ordinary paths) as its children Inkscape::XML::Node *grepr = xml_doc->createElement("svg:g"); - for (auto& obj: box->_children) { + for (auto& obj: box->children) { Box3DSide *side = dynamic_cast(&obj); if (side) { Inkscape::XML::Node *repr = box3d_side_convert_to_path(side); diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp index 638ba48e3..560f660b2 100644 --- a/src/conn-avoid-ref.cpp +++ b/src/conn-avoid-ref.cpp @@ -334,7 +334,7 @@ static Avoid::Polygon avoid_item_poly(SPItem const *item) std::vector get_avoided_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool initialised) { - for (auto& child: from->_children) { + for (auto& child: from->children) { if (SP_IS_ITEM(&child) && !desktop->isLayer(SP_ITEM(&child)) && !SP_ITEM(&child)->isLocked() && diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index e4b7c6a83..01586096c 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -163,7 +163,7 @@ sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines) return; } - for (auto& child: o->_children) { + for (auto& child: o->children) { if (sp_repr_css_property(css, "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. @@ -1714,7 +1714,7 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) int blendcount = 0; // determine whether filter is simple (blend and/or blur) or complex - for(auto& primitive_obj: style->getFilter()->_children) { + for(auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (!primitive) { break; @@ -1731,7 +1731,7 @@ objects_query_blend (const std::vector &objects, SPStyle *style_res) // simple filter if(blurcount == 1 || blendcount == 1) { - for(auto& primitive_obj: style->getFilter()->_children) { + for(auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (!primitive) { break; @@ -1810,7 +1810,7 @@ objects_query_blur (const std::vector &objects, SPStyle *style_res) //if object has a filter if (style->filter.set && style->getFilter()) { //cycle through filter primitives - for(auto& primitive_obj: style->getFilter()->_children) { + for(auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { diff --git a/src/display/nr-svgfonts.cpp b/src/display/nr-svgfonts.cpp index 927093ef4..53a5cba49 100644 --- a/src/display/nr-svgfonts.cpp +++ b/src/display/nr-svgfonts.cpp @@ -203,7 +203,7 @@ SvgFont::scaled_font_text_to_glyphs (cairo_scaled_font_t */*scaled_font*/, //check whether is there a glyph declared on the SVG document // that matches with the text string in its current position if ( (len = size_of_substring(this->glyphs[i]->unicode.c_str(), _utf8)) ){ - for(auto& node: font->_children) { + for(auto& node: font->children) { if (!previous_unicode) { break; } @@ -276,7 +276,7 @@ SvgFont::glyph_modified(SPObject* /* blah */, unsigned int /* bleh */){ Geom::PathVector SvgFont::flip_coordinate_system(SPFont* spfont, Geom::PathVector pathv){ double units_per_em = 1000; - for(auto& obj: spfont->_children) { + for(auto& obj: spfont->children) { if (dynamic_cast(&obj)) { //XML Tree being directly used here while it shouldn't be. sp_repr_get_double(obj.getRepr(), "units_per_em", &units_per_em); @@ -344,7 +344,7 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, if (node->hasChildren()){ //render the SVG described on this glyph's child nodes. - for(auto& child: node->_children) { + for(auto& child: node->children) { { SPPath *path = dynamic_cast(&child); if (path) { @@ -379,7 +379,7 @@ SvgFont::scaled_font_render_glyph (cairo_scaled_font_t */*scaled_font*/, cairo_font_face_t* SvgFont::get_font_face(){ if (!this->userfont) { - for(auto& node: font->_children) { + for(auto& node: font->children) { SPGlyph *glyph = dynamic_cast(&node); if (glyph) { glyphs.push_back(glyph); diff --git a/src/document.cpp b/src/document.cpp index 3dcec4795..aebb7829f 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -257,7 +257,7 @@ void SPDocument::setCurrentPersp3D(Persp3D * const persp) { void SPDocument::getPerspectivesInDefs(std::vector &list) const { - for (auto& i: root->defs->_children) { + for (auto& i: root->defs->children) { if (SP_IS_PERSP3D(&i)) { list.push_back(SP_PERSP3D(&i)); } @@ -1256,7 +1256,7 @@ static std::vector &find_items_in_area(std::vector &s, SPGroup { g_return_val_if_fail(SP_IS_GROUP(group), s); - for (auto& o: group->_children) { + for (auto& o: group->children) { if ( SP_IS_ITEM(&o) ) { if (SP_IS_GROUP(&o) && (SP_GROUP(&o)->effectiveLayerMode(dkey) == SPGroup::LAYER || into_groups)) { s = find_items_in_area(s, SP_GROUP(&o), dkey, area, test, take_insensitive, into_groups); @@ -1278,7 +1278,7 @@ Returns true if an item is among the descendants of group (recursively). */ static bool item_is_in_group(SPItem *item, SPGroup *group) { - for (auto& o: group->_children) { + for (auto& o: group->children) { if ( SP_IS_ITEM(&o) ) { if (SP_ITEM(&o) == item) { return true; @@ -1298,7 +1298,7 @@ SPItem *SPDocument::getItemFromListAtPointBottom(unsigned int dkey, SPGroup *gro Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for (auto& o: group->_children) { + for (auto& o: group->children) { if (bottomMost) { break; } @@ -1328,7 +1328,7 @@ The list can be persisted, which improves "find at multiple points" speed. */ void SPDocument::build_flat_item_list(unsigned int dkey, SPGroup *group, gboolean into_groups) const { - for (auto& o: group->_children) { + for (auto& o: group->children) { if (!SP_IS_ITEM(&o)) { continue; } @@ -1392,7 +1392,7 @@ static SPItem *find_group_at_point(unsigned int dkey, SPGroup *group, Geom::Poin Inkscape::Preferences *prefs = Inkscape::Preferences::get(); gdouble delta = prefs->getDouble("/options/cursortolerance/value", 1.0); - for (auto& o: group->_children) { + for (auto& o: group->children) { if (!SP_IS_ITEM(&o)) { continue; } @@ -1597,7 +1597,7 @@ static unsigned int count_objects_recursive(SPObject *obj, unsigned int count) { count++; // obj itself - for (auto& i: obj->_children) { + for (auto& i: obj->children) { count = count_objects_recursive(&i, count); } @@ -1623,12 +1623,12 @@ static unsigned int objects_in_document(SPDocument *document) static void vacuum_document_recursive(SPObject *obj) { if (SP_IS_DEFS(obj)) { - for (auto& def: obj->_children) { + for (auto& def: obj->children) { // fixme: some inkscape-internal nodes in the future might not be collectable def.requestOrphanCollection(); } } else { - for (auto& i: obj->_children) { + for (auto& i: obj->children) { vacuum_document_recursive(&i); } } @@ -1757,7 +1757,7 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I // Prevent duplicates of solid swatches by checking if equivalent swatch already exists if (src && SP_IS_GRADIENT(src)) { SPGradient *s_gr = SP_GRADIENT(src); - for (auto& trg: getDefs()->_children) { + for (auto& trg: getDefs()->children) { if (&trg && (src != &trg) && SP_IS_GRADIENT(&trg)) { SPGradient *t_gr = SP_GRADIENT(&trg); if (t_gr && s_gr->isEquivalent(t_gr)) { @@ -1828,7 +1828,7 @@ void SPDocument::importDefsNode(SPDocument *source, Inkscape::XML::Node *defs, I id.erase( pos ); // Check that it really is a duplicate - for (auto& trg: getDefs()->_children) { + for (auto& trg: getDefs()->children) { if(&trg && SP_IS_SYMBOL(&trg) && src != &trg ) { std::string id2 = trg.getRepr()->attribute("id"); diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index bedf2fa7f..1310bb343 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -986,7 +986,7 @@ void CairoRenderContext::popState(void) static bool pattern_hasItemChildren(SPPattern *pat) { - for (auto& child: pat->_children) { + for (auto& child: pat->children) { if (SP_IS_ITEM (&child)) { return true; } @@ -1086,7 +1086,7 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // show items and render them for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_show(drawing, dkey, SP_ITEM_REFERENCE_FLAGS); _renderer->renderItem(pattern_ctx, SP_ITEM(&child)); @@ -1115,7 +1115,7 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver // hide all items for (SPPattern *pat_i = pat; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i && SP_IS_OBJECT(pat_i) && pattern_hasItemChildren(pat_i)) { // find the first one with item children - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_hide(dkey); } diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index 088eaf11d..cd96a7f58 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -741,7 +741,7 @@ CairoRenderer::applyClipPath(CairoRenderContext *ctx, SPClipPath const *cp) TRACE(("BEGIN clip\n")); SPObject const *co = cp; - for (auto& child: co->_children) { + for (auto& child: co->children) { SPItem const *item = dynamic_cast(&child); if (item) { @@ -800,7 +800,7 @@ CairoRenderer::applyMask(CairoRenderContext *ctx, SPMask const *mask) TRACE(("BEGIN mask\n")); SPObject const *co = mask; - for (auto& child: co->_children) { + for (auto& child: co->children) { SPItem const *item = dynamic_cast(&child); if (item) { // TODO fix const correctness: diff --git a/src/extension/internal/emf-print.cpp b/src/extension/internal/emf-print.cpp index c0c086c7a..d4c5d95a3 100644 --- a/src/extension/internal/emf-print.cpp +++ b/src/extension/internal/emf-print.cpp @@ -1042,7 +1042,7 @@ void PrintEmf::do_clip_if_present(SPStyle const *style){ /* find the clipping path */ Geom::PathVector combined_pathvector; Geom::Affine tfc; // clipping transform, generally not the same as item transform - for (auto& child: scp->_children) { + for (auto& child: scp->children) { item = SP_ITEM(&child); if (!item) { break; @@ -1085,7 +1085,7 @@ Geom::PathVector PrintEmf::merge_PathVector_with_group(Geom::PathVector const &c new_combined_pathvector = combined_pathvector; SPGroup *group = SP_GROUP(item); Geom::Affine tfc = item->transform * transform; - for (auto& child: group->_children) { + for (auto& child: group->children) { item = SP_ITEM(&child); if (!item) { break; diff --git a/src/extension/internal/javafx-out.cpp b/src/extension/internal/javafx-out.cpp index 51608e4fa..d7ad7e6f7 100644 --- a/src/extension/internal/javafx-out.cpp +++ b/src/extension/internal/javafx-out.cpp @@ -732,7 +732,7 @@ bool JavaFXOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (auto &child: obj->_children) + for (auto &child: obj->children) { if (!doTreeRecursive(doc, &child)) { return false; @@ -804,7 +804,7 @@ bool JavaFXOutput::doBody(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (auto &child: obj->_children) + for (auto &child: obj->children) { if (!doBody(doc, &child)) { return false; diff --git a/src/extension/internal/metafile-print.cpp b/src/extension/internal/metafile-print.cpp index 5c10f7dd9..061eb634d 100644 --- a/src/extension/internal/metafile-print.cpp +++ b/src/extension/internal/metafile-print.cpp @@ -293,7 +293,7 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf } // still looking? Look at this pattern's children, if there are any - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { if (*epixbuf || *hatchType != -1) { break; } @@ -304,7 +304,7 @@ void PrintMetafile::brush_classify(SPObject *parent, int depth, Inkscape::Pixbuf *epixbuf = ((SPImage *)parent)->pixbuf; return; } else { // some inkscape rearrangements pass through nodes between pattern and image which are not classified as either. - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (*epixbuf || *hatchType != -1) { break; } diff --git a/src/extension/internal/pov-out.cpp b/src/extension/internal/pov-out.cpp index 08f533010..8df883069 100644 --- a/src/extension/internal/pov-out.cpp +++ b/src/extension/internal/pov-out.cpp @@ -479,7 +479,7 @@ bool PovOutput::doTreeRecursive(SPDocument *doc, SPObject *obj) /** * Descend into children */ - for (auto &child: obj->_children) + for (auto &child: obj->children) { if (!doTreeRecursive(doc, &child)) return false; diff --git a/src/file.cpp b/src/file.cpp index 11e5f0a42..9ba180cb4 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1204,7 +1204,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Count the number of top-level items in the imported document. guint items_count = 0; - for (auto& child: doc->getRoot()->_children) { + for (auto& child: doc->getRoot()->children) { if (SP_IS_ITEM(&child)) { items_count++; } @@ -1234,7 +1234,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // Construct a new object representing the imported image, // and insert it into the current document. SPObject *new_obj = NULL; - for (auto& child: doc->getRoot()->_children) { + for (auto& child: doc->getRoot()->children) { if (SP_IS_ITEM(&child)) { Inkscape::XML::Node *newitem = child.getRepr()->duplicate(xml_in_doc); diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp index 2e99842ec..3255bfb70 100644 --- a/src/filter-chemistry.cpp +++ b/src/filter-chemistry.cpp @@ -51,7 +51,7 @@ static guint count_filter_hrefs(SPObject *o, SPFilter *filter) i ++; } - for (auto& child: o->_children) { + for (auto& child: o->children) { i += count_filter_hrefs(&child, filter); } @@ -491,14 +491,14 @@ void remove_filter_gaussian_blur (SPObject *item) bool filter_is_single_gaussian_blur(SPFilter *filter) { - return (filter->_children.size() == 1 && - SP_IS_GAUSSIANBLUR(&filter->_children.front())); + return (filter->children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->children.front())); } double get_single_gaussian_blur_radius(SPFilter *filter) { - if (filter->_children.size() == 1 && - SP_IS_GAUSSIANBLUR(&filter->_children.front())) { + if (filter->children.size() == 1 && + SP_IS_GAUSSIANBLUR(&filter->children.front())) { SPGaussianBlur *gb = SP_GAUSSIANBLUR(filter->firstChild()); double x = gb->stdDeviation.getNumber(); diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index e52f6d478..bc91e58a7 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -49,7 +49,7 @@ static void sp_feComponentTransfer_children_modified(SPFeComponentTransfer *sp_c { if (sp_componenttransfer->renderer) { bool set[4] = {false, false, false, false}; - for(auto& node: sp_componenttransfer->_children) { + for(auto& node: sp_componenttransfer->children) { int i = 4; SPFeFuncNode *funcNode = SP_FEFUNCNODE(&node); diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp index 6af1e8115..8ec40cb46 100644 --- a/src/filters/merge.cpp +++ b/src/filters/merge.cpp @@ -94,7 +94,7 @@ void SPFeMerge::build_renderer(Inkscape::Filters::Filter* filter) { int in_nr = 0; - for(auto& input: _children) { + for(auto& input: children) { if (SP_IS_FEMERGENODE(&input)) { SPFeMergeNode *node = SP_FEMERGENODE(&input); nr_merge->set_input(in_nr, node->input); diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 9c46a2efb..b6ea0d8c1 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -199,7 +199,7 @@ static guint count_gradient_hrefs(SPObject *o, SPGradient *gr) i ++; } - for (auto& child: o->_children) { + for (auto& child: o->children) { i += count_gradient_hrefs(&child, gr); } @@ -926,7 +926,7 @@ void sp_item_gradient_reverse_vector(SPItem *item, Inkscape::PaintTarget fill_or GSList *child_objects = NULL; std::vector offsets; double offset; - for (auto& child: vector->_children) { + for (auto& child: vector->children) { child_reprs = g_slist_prepend (child_reprs, child.getRepr()); child_objects = g_slist_prepend (child_objects, &child); offset=0; @@ -979,7 +979,7 @@ void sp_item_gradient_invert_vector_color(SPItem *item, Inkscape::PaintTarget fi sp_gradient_repr_set_link(gradient->getRepr(), vector); } - for (auto& child: vector->_children) { + for (auto& child: vector->children) { if (SP_IS_STOP(&child)) { guint32 color = SP_STOP(&child)->get_rgba32(); //g_message("Stop color %d", color); diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index b9d1fe109..fd2f4b33b 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -2539,7 +2539,7 @@ void GrDrag::deleteSelected(bool just_one) // cannot use vector->vector.stops.size() because the vector might be invalidated by deletion of a midstop // manually count the children, don't know if there already exists a function for this... int len = 0; - for (auto& child: stopinfo->vector->_children) + for (auto& child: stopinfo->vector->children) { if ( SP_IS_STOP(&child) ) { len ++; diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp index fb1740fc5..24d2d7f1e 100644 --- a/src/helper/pixbuf-ops.cpp +++ b/src/helper/pixbuf-ops.cpp @@ -53,7 +53,7 @@ static void hide_other_items_recursively(SPObject *o, GSList *list, unsigned dke // recurse if (!g_slist_find(list, o)) { - for (auto& child: o->_children) { + for (auto& child: o->children) { hide_other_items_recursively(&child, list, dkey); } } diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index c59db9df6..2255157e2 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -374,7 +374,7 @@ static void hide_other_items_recursively(SPObject *o, const std::vector // recurse if (list.end()==find(list.begin(),list.end(),o)) { - for (auto& child: o->_children) { + for (auto& child: o->children) { hide_other_items_recursively(&child, list, dkey); } } diff --git a/src/helper/stock-items.cpp b/src/helper/stock-items.cpp index cf10a6c4d..647e42916 100644 --- a/src/helper/stock-items.cpp +++ b/src/helper/stock-items.cpp @@ -204,7 +204,7 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } SPObject *object = NULL; if (!strcmp(base, "marker") && !stock) { - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (child.getRepr()->attribute("inkscape:stockid") && !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && @@ -216,7 +216,7 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } else if (!strcmp(base,"pattern") && !stock) { - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (child.getRepr()->attribute("inkscape:stockid") && !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && @@ -228,7 +228,7 @@ SPObject *get_stock_item(gchar const *urn, gboolean stock) } else if (!strcmp(base,"gradient") && !stock) { - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (child.getRepr()->attribute("inkscape:stockid") && !strcmp(name_p, child.getRepr()->attribute("inkscape:stockid")) && diff --git a/src/id-clash.cpp b/src/id-clash.cpp index fecad9eee..cb5893133 100644 --- a/src/id-clash.cpp +++ b/src/id-clash.cpp @@ -187,7 +187,7 @@ find_references(SPObject *elem, refmap_type &refmap) } // recurse - for (auto& child: elem->_children) + for (auto& child: elem->children) { find_references(&child, refmap); } @@ -242,7 +242,7 @@ change_clashing_ids(SPDocument *imported_doc, SPDocument *current_doc, // recurse - for (auto& child: elem->_children) + for (auto& child: elem->children) { change_clashing_ids(imported_doc, current_doc, &child, refmap, id_changes); } diff --git a/src/layer-fns.cpp b/src/layer-fns.cpp index d149089db..030ebc07e 100644 --- a/src/layer-fns.cpp +++ b/src/layer-fns.cpp @@ -36,7 +36,7 @@ bool is_layer(SPObject &object) { * @returns NULL if there are no further layers under a parent */ SPObject *next_sibling_layer(SPObject *layer) { - SPObject::ChildrenList &list = layer->parent->_children; + SPObject::ChildrenList &list = layer->parent->children; auto l = std::find_if(++list.iterator_to(*layer), list.end(), &is_layer); return l != list.end() ? &*l : nullptr; } @@ -48,7 +48,7 @@ SPObject *next_sibling_layer(SPObject *layer) { SPObject *previous_sibling_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - SPObject::ChildrenList &list = layer->parent->_children; + SPObject::ChildrenList &list = layer->parent->children; auto l = find_last_if(list.begin(), list.iterator_to(*layer), &is_layer); return l != list.iterator_to(*layer) ? &*(l) : nullptr; } @@ -60,8 +60,8 @@ SPObject *previous_sibling_layer(SPObject *layer) { SPObject *first_descendant_layer(SPObject *layer) { SPObject *first_descendant = nullptr; while (true) { - auto tmp = std::find_if(layer->_children.begin(), layer->_children.end(), &is_layer); - if (tmp != layer->_children.end()) { + auto tmp = std::find_if(layer->children.begin(), layer->children.end(), &is_layer); + if (tmp != layer->children.end()) { first_descendant = layer; } else { break; @@ -79,8 +79,8 @@ SPObject *first_descendant_layer(SPObject *layer) { SPObject *last_child_layer(SPObject *layer) { using Inkscape::Algorithms::find_last_if; - auto l = find_last_if(layer->_children.begin(), layer->_children.end(), &is_layer); - return l != layer->_children.end() ? &*l : nullptr; + auto l = find_last_if(layer->children.begin(), layer->children.end(), &is_layer); + return l != layer->children.end() ? &*l : nullptr; } SPObject *last_elder_layer(SPObject *root, SPObject *layer) { diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp index 937d67895..4deae821a 100644 --- a/src/libnrtype/font-lister.cpp +++ b/src/libnrtype/font-lister.cpp @@ -298,7 +298,7 @@ void FontLister::update_font_list_recursive(SPObject *r, std::listpush_back(Glib::ustring(font_family)); } - for (auto& child: r->_children) { + for (auto& child: r->children) { update_font_list_recursive(&child, l); } } diff --git a/src/live_effects/lpe-perspective_path.cpp b/src/live_effects/lpe-perspective_path.cpp index c62ead2b3..049e10f0f 100644 --- a/src/live_effects/lpe-perspective_path.cpp +++ b/src/live_effects/lpe-perspective_path.cpp @@ -107,7 +107,7 @@ void LPEPerspectivePath::refresh(Gtk::Entry* perspective) { perspectiveID = perspective->get_text(); Persp3D *first = 0; Persp3D *persp = 0; - for (auto& child: lpeobj->document->getDefs()->_children) { + for (auto& child: lpeobj->document->getDefs()->children) { if (SP_IS_PERSP3D(&child) && first == 0) { first = SP_PERSP3D(&child); } diff --git a/src/main.cpp b/src/main.cpp index 7ab27dcb2..c01c4ee46 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1228,7 +1228,7 @@ static int sp_process_file_list(GSList *fl) std::vector items; SPRoot *root = doc->getRoot(); doc->ensureUpToDate(); - for (auto& iter: root->_children) { + for (auto& iter: root->children) { SPItem* item = (SPItem*) &iter; if (! (SP_IS_TEXT(item) || SP_IS_FLOWTEXT(item) || SP_IS_GROUP(item))) { continue; @@ -1483,7 +1483,7 @@ do_query_all_recurse (SPObject *o) } } - for(auto& child: o->_children) { + for(auto& child: o->children) { do_query_all_recurse (&child); } } diff --git a/src/object-set.cpp b/src/object-set.cpp index b7b84e163..1b994106a 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -93,7 +93,7 @@ bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { } void ObjectSet::_removeDescendantsFromSet(SPObject *object) { - for (auto& child: object->_children) { + for (auto& child: object->children) { if (includes(&child)) { _remove(&child); // there is certainly no children of this child in the set @@ -130,7 +130,7 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { bool flag = true; while (o->parent != nullptr) { - for (auto &child: o->parent->_children) { + for (auto &child: o->parent->children) { if(&child != o && !includes(&child)) { flag = false; break; @@ -147,7 +147,7 @@ SPObject *ObjectSet::_getMutualAncestor(SPObject *object) { void ObjectSet::_removeAncestorsFromSet(SPObject *object) { SPObject* o = object; while (o->parent != nullptr) { - for (auto &child: o->parent->_children) { + for (auto &child: o->parent->children) { if (&child != o) { _add(&child); } diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 580fb5fc7..307dcf062 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -90,7 +90,7 @@ void Inkscape::ObjectSnapper::_findCandidates(SPObject* parent, Geom::Rect bbox_to_snap_incl = bbox_to_snap; // _incl means: will include the snapper tolerance bbox_to_snap_incl.expandBy(getSnapperTolerance()); // see? - for (auto& o: parent->_children) { + for (auto& o: parent->children) { g_assert(dt != NULL); SPItem *item = dynamic_cast(&o); if (item && !(dt->itemIsHidden(item) && !clip_or_mask)) { diff --git a/src/persp3d.cpp b/src/persp3d.cpp index 849e332bf..e260af8e5 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -215,7 +215,7 @@ Persp3D *persp3d_create_xml_element(SPDocument *document, Persp3DImpl *dup) {// Persp3D *persp3d_document_first_persp(SPDocument *document) { Persp3D *first = 0; - for (auto& child: document->getDefs()->_children) { + for (auto& child: document->getDefs()->children) { if (SP_IS_PERSP3D(&child)) { first = SP_PERSP3D(&child); break; @@ -534,7 +534,7 @@ persp3d_print_debugging_info (Persp3D *persp) { void persp3d_print_debugging_info_all(SPDocument *document) { - for (auto& child: document->getDefs()->_children) { + for (auto& child: document->getDefs()->children) { if (SP_IS_PERSP3D(&child)) { persp3d_print_debugging_info(SP_PERSP3D(&child)); } diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 28bcadef5..81d711e77 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -433,7 +433,7 @@ static void add_ids_recursive(std::vector &ids, SPObject *obj) ids.push_back(obj->getId()); if (dynamic_cast(obj)) { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { add_ids_recursive(ids, &child); } } @@ -587,7 +587,7 @@ void sp_edit_clear_all(Inkscape::Selection *selection) */ std::vector &get_all_items(std::vector &list, SPObject *from, SPDesktop *desktop, bool onlyvisible, bool onlysensitive, bool ingroups, std::vector const &exclude) { - for (auto& child: from->_children) { + for (auto& child: from->children) { SPItem *item = dynamic_cast(&child); if (item && !desktop->isLayer(item) && @@ -1143,7 +1143,7 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des pp = document->getObjectByRepr(repr->parent()); minpos = 0; g_assert(dynamic_cast(pp)); - for (auto& pc: pp->_children) { + for (auto& pc: pp->children) { if(dynamic_cast(&pc)) { break; } @@ -1202,7 +1202,7 @@ take_style_from_item(SPObject *object) (dynamic_cast(object) && object->firstChild() && object->firstChild()->getNext() == NULL)) { // if this is a text with exactly one tspan child, merge the style of that tspan as well // If this is a group, merge the style of its topmost (last) child with style - auto list = object->_children | boost::adaptors::reversed; + auto list = object->children | boost::adaptors::reversed; for (auto& element: list) { if (element.style ) { SPCSSAttr *temp = sp_css_attr_from_object(&element, SP_STYLE_FLAG_IFSET); @@ -1624,9 +1624,9 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons } else if (transform_flowtext_with_frame) { // apply the inverse of the region's transform to the so that the flow remains // the same (even though the output itself gets transformed) - for (auto& region: item->_children) { + for (auto& region: item->children) { if (dynamic_cast(®ion) || dynamic_cast(®ion)) { - for (auto& itm: region._children) { + for (auto& itm: region.children) { SPUse *use = dynamic_cast(&itm); if ( use ) { use->doWriteTransform(use->getRepr(), use->transform.inverse(), NULL, compensate); @@ -2348,7 +2348,7 @@ typedef struct ListReverse { private: static GSList *make_list(SPObject *object, SPObject *limit) { GSList *list = NULL; - for (auto &child: object->_children) { + for (auto &child: object->children) { if (&child == limit) { break; } @@ -3435,7 +3435,7 @@ void sp_selection_untile(SPDesktop *desktop) Geom::Affine pat_transform = basePat->getTransform(); pat_transform *= item->transform; - for (auto& child: pattern->_children) { + for (auto& child: pattern->children) { if (dynamic_cast(&child)) { Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); SPItem *i = dynamic_cast(desktop->currentLayer()->appendChildRepr(copy)); @@ -4103,7 +4103,7 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) { for ( std::map::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) { SPObject *obj = (*it).first; // Group containing the clipped paths or masks GSList *items_to_move = NULL; - for (auto& child: obj->_children) { + for (auto& child: obj->children) { // Collect all clipped paths and masks within a single group Inkscape::XML::Node *copy = child.getRepr()->duplicate(xml_doc); if(copy->attribute("inkscape:original-d") && copy->attribute("inkscape:path-effect")) @@ -4264,7 +4264,7 @@ static void itemtree_map(void (*f)(SPItem *, SPDesktop *), SPObject *root, SPDes f(item, desktop); } } - for (auto& child: root->_children) { + for (auto& child: root->children) { //don't recurse into locked layers SPItem *item = dynamic_cast(&child); if (!(item && desktop->isLayer(item) && item->isLocked())) { diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp index 25bf77f00..c0c848bbd 100644 --- a/src/sp-clippath.cpp +++ b/src/sp-clippath.cpp @@ -128,7 +128,7 @@ void SPClipPath::update(SPCtx* ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -167,7 +167,7 @@ void SPClipPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -200,7 +200,7 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); display = sp_clippath_view_new_prepend(display, key, ai); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { Inkscape::DrawingItem *ac = SP_ITEM(&child)->invoke_show(drawing, key, SP_ITEM_REFERENCE_FLAGS); @@ -223,7 +223,7 @@ Inkscape::DrawingItem *SPClipPath::show(Inkscape::Drawing &drawing, unsigned int } void SPClipPath::hide(unsigned int key) { - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_hide(key); } @@ -252,7 +252,7 @@ void SPClipPath::setBBox(unsigned int key, Geom::OptRect const &bbox) { Geom::OptRect SPClipPath::geometricBounds(Geom::Affine const &transform) { Geom::OptRect bbox; - for (auto& i: _children) { + for (auto& i: children) { if (SP_IS_ITEM(&i)) { Geom::OptRect tmp = SP_ITEM(&i)->geometricBounds(Geom::Affine(SP_ITEM(&i)->transform) * transform); bbox.unionWith(tmp); diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp index af4ea96d7..865c6891e 100644 --- a/src/sp-defs.cpp +++ b/src/sp-defs.cpp @@ -54,7 +54,7 @@ void SPDefs::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -79,7 +79,7 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { l = g_slist_prepend(l, crepr); @@ -93,7 +93,7 @@ Inkscape::XML::Node* SPDefs::write(Inkscape::XML::Document *xml_doc, Inkscape::X } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 170847c0b..9ecee6a5f 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -268,7 +268,7 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML } GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(doc, NULL, flags); if (crepr) { @@ -282,7 +282,7 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML l = g_slist_remove (l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } @@ -420,7 +420,7 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr } nr_filter->clear_primitives(); - for(auto& primitive_obj: sp_filter->_children) { + for(auto& primitive_obj: sp_filter->children) { if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(&primitive_obj); g_assert(primitive != NULL); @@ -439,7 +439,7 @@ int sp_filter_primitive_count(SPFilter *filter) { g_assert(filter != NULL); int count = 0; - for(auto& primitive_obj: filter->_children) { + for(auto& primitive_obj: filter->children) { if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { count++; } @@ -512,7 +512,7 @@ Glib::ustring sp_filter_get_new_result_name(SPFilter *filter) { g_assert(filter != NULL); int largest = 0; - for(auto& primitive_obj: filter->_children) { + for(auto& primitive_obj: filter->children) { if (SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { Inkscape::XML::Node *repr = primitive_obj.getRepr(); char const *result = repr->attribute("result"); diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp index ad04f0d78..17b841e37 100644 --- a/src/sp-flowdiv.cpp +++ b/src/sp-flowdiv.cpp @@ -27,7 +27,7 @@ void SPFlowdiv::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -65,7 +65,7 @@ void SPFlowdiv::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -104,7 +104,7 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr = NULL; if ( SP_IS_FLOWTSPAN (&child) ) { @@ -126,7 +126,7 @@ Inkscape::XML::Node* SPFlowdiv::write(Inkscape::XML::Document *xml_doc, Inkscape l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_FLOWTSPAN (&child) ) { child.updateRepr(flags); } else if ( SP_IS_FLOWPARA(&child) ) { @@ -168,7 +168,7 @@ void SPFlowtspan::update(SPCtx *ctx, unsigned int flags) { childflags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -206,7 +206,7 @@ void SPFlowtspan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -242,7 +242,7 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr = NULL; if ( SP_IS_FLOWTSPAN(&child) ) { @@ -264,7 +264,7 @@ Inkscape::XML::Node *SPFlowtspan::write(Inkscape::XML::Document *xml_doc, Inksca l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_FLOWTSPAN(&child) ) { child.updateRepr(flags); } else if ( SP_IS_FLOWPARA(&child) ) { @@ -307,7 +307,7 @@ void SPFlowpara::update(SPCtx *ctx, unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList* l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -343,7 +343,7 @@ void SPFlowpara::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -379,7 +379,7 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr = NULL; if ( SP_IS_FLOWTSPAN(&child) ) { @@ -401,7 +401,7 @@ Inkscape::XML::Node *SPFlowpara::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_FLOWTSPAN(&child) ) { child.updateRepr(flags); } else if ( SP_IS_FLOWPARA(&child) ) { diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 71e029072..716a09914 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -63,7 +63,7 @@ void SPFlowregion::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -102,7 +102,7 @@ void SPFlowregion::UpdateComputed(void) } computed.clear(); - for (auto& child: _children) { + for (auto& child: children) { Shape *shape = 0; GetDest(&child, &shape); computed.push_back(shape); @@ -118,7 +118,7 @@ void SPFlowregion::modified(guint flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -145,7 +145,7 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc } GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); @@ -161,7 +161,7 @@ Inkscape::XML::Node *SPFlowregion::write(Inkscape::XML::Document *xml_doc, Inksc l = g_slist_remove(l, l->data); } - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { child.updateRepr(flags); } @@ -220,7 +220,7 @@ void SPFlowregionExclude::update(SPCtx *ctx, unsigned int flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -258,7 +258,7 @@ void SPFlowregionExclude::UpdateComputed(void) computed = NULL; } - for (auto& child: _children) { + for (auto& child: children) { GetDest(&child, &computed); } } @@ -272,7 +272,7 @@ void SPFlowregionExclude::modified(guint flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -300,7 +300,7 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -315,7 +315,7 @@ Inkscape::XML::Node *SPFlowregionExclude::write(Inkscape::XML::Document *xml_doc } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 83fa5a1b4..79988bdc2 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -72,7 +72,7 @@ void SPFlowtext::update(SPCtx* ctx, unsigned int flags) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -135,7 +135,7 @@ void SPFlowtext::modified(unsigned int flags) { } } - for (auto& o: _children) { + for (auto& o: children) { if (dynamic_cast(&o)) { region = &o; break; @@ -223,7 +223,7 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *c_repr = NULL; if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { @@ -241,7 +241,7 @@ Inkscape::XML::Node* SPFlowtext::write(Inkscape::XML::Document* doc, Inkscape::X l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child) || dynamic_cast(&child)) { child.updateRepr(flags); } @@ -390,7 +390,7 @@ void SPFlowtext::_buildLayoutInput(SPObject *root, Shape const *exclusion_shape, *pending_line_break_object = NULL; } - for (auto& child: root->_children) { + for (auto& child: root->children) { SPString *str = dynamic_cast(&child); if (str) { if (*pending_line_break_object) { @@ -440,7 +440,7 @@ Shape* SPFlowtext::_buildExclusionShape() const Shape *shape = new Shape(); Shape *shape_temp = new Shape(); - for (auto& child: _children) { + for (auto& child: children) { // RH: is it right that this shouldn't be recursive? SPFlowregionExclude *c_child = dynamic_cast(const_cast(&child)); if ( c_child && c_child->computed && c_child->computed->hasEdges() ) { @@ -593,7 +593,7 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) SPItem *frame = 0; SPObject *region = 0; - for (auto& o: _children) { + for (auto& o: children) { if (dynamic_cast(&o)) { region = &o; break; @@ -603,7 +603,7 @@ SPItem *SPFlowtext::get_frame(SPItem const *after) if (region) { bool past = false; - for (auto& o: region->_children) { + for (auto& o: region->children) { SPItem *item = dynamic_cast(&o); if (item) { if ( (after == NULL) || past ) { @@ -707,7 +707,7 @@ Geom::Affine SPFlowtext::set_transform (Geom::Affine const &xform) } SPObject *region = NULL; - for (auto& o: _children) { + for (auto& o: children) { if (dynamic_cast(&o)) { region = &o; break; diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index abfae1a1f..afa209dbe 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -276,7 +276,7 @@ void SPGradient::build(SPDocument *document, Inkscape::XML::Node *repr) SPPaintServer::build(document, repr); - for (auto& ochild: _children) { + for (auto& ochild: children) { if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; @@ -481,7 +481,7 @@ void SPGradient::remove_child(Inkscape::XML::Node *child) SPPaintServer::remove_child(child); this->has_stops = FALSE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (SP_IS_STOP(&ochild)) { this->has_stops = TRUE; break; @@ -536,7 +536,7 @@ void SPGradient::modified(guint flags) // FIXME: climb up the ladder of hrefs GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child); l = g_slist_prepend(l, &child); } @@ -558,7 +558,7 @@ void SPGradient::modified(guint flags) SPStop* SPGradient::getFirstStop() { SPStop* first = nullptr; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (SP_IS_STOP(&ochild)) { first = SP_STOP(&ochild); break; @@ -588,7 +588,7 @@ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscap if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -916,7 +916,7 @@ bool SPGradient::invalidateArray() void SPGradient::rebuildVector() { gint len = 0; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_STOP(&child)) { len ++; } @@ -938,7 +938,7 @@ void SPGradient::rebuildVector() } } - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_STOP(&child)) { SPStop *stop = SP_STOP(&child); @@ -1023,7 +1023,7 @@ void SPGradient::rebuildArray() array.read( SP_MESH( this ) ); has_patches = false; - for (auto& ro: _children) { + for (auto& ro: children) { if (SP_IS_MESHROW(&ro)) { has_patches = true; // std::cout << " Has Patches" << std::endl; diff --git a/src/sp-hatch.cpp b/src/sp-hatch.cpp index c06045e8f..f667017fa 100644 --- a/src/sp-hatch.cpp +++ b/src/sp-hatch.cpp @@ -233,7 +233,7 @@ void SPHatch::set(unsigned int key, const gchar* value) bool SPHatch::_hasHatchPatchChildren(SPHatch const *hatch) { - for (auto& child: hatch->_children) { + for (auto& child: hatch->children) { SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { return true; @@ -248,7 +248,7 @@ std::vector SPHatch::hatchPaths() SPHatch *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (auto& child: src->_children) { + for (auto& child: src->children) { SPHatchPath *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); @@ -264,7 +264,7 @@ std::vector SPHatch::hatchPaths() const SPHatch const *src = chase_hrefs(this, sigc::ptr_fun(&_hasHatchPatchChildren)); if (src) { - for (auto& child: src->_children) { + for (auto& child: src->children) { SPHatchPath const *hatchPath = dynamic_cast(&child); if (hatchPath) { list.push_back(hatchPath); diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 8d482d9b1..63edb3c84 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -235,7 +235,7 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = NULL; - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); @@ -251,7 +251,7 @@ Inkscape::XML::Node* SPGroup::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove (l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( !dynamic_cast(&child) && !dynamic_cast(&child) ) { child.updateRepr(flags); } @@ -297,7 +297,7 @@ Geom::OptRect SPGroup::bbox(Geom::Affine const &transform, SPItem::BBoxType bbox } void SPGroup::print(SPPrintContext *ctx) { - for(auto& child: _children){ + for(auto& child: children){ SPObject *o = &child; SPItem *item = dynamic_cast(o); if (item) { @@ -365,7 +365,7 @@ void SPGroup::hide (unsigned int key) { void SPGroup::snappoints(std::vector &p, Inkscape::SnapPreferences const *snapprefs) const { - for (auto& o: _children) + for (auto& o: children) { SPItem const *item = dynamic_cast(&o); if (item) { @@ -511,13 +511,13 @@ sp_item_group_ungroup (SPGroup *group, std::vector &children, bool do_d GSList *objects = NULL; Geom::Affine const g(group->transform); - for (auto& child: group->_children) { + for (auto& child: group->children) { if (SPItem *citem = dynamic_cast(&child)) { sp_item_group_ungroup_handle_clones(citem, g); } } - for (auto& child: group->_children) { + for (auto& child: group->children) { SPItem *citem = dynamic_cast(&child); if (citem) { /* Merging of style */ @@ -662,7 +662,7 @@ std::vector sp_item_group_item_list(SPGroup * group) std::vector s; g_return_val_if_fail(group != NULL, s); - for (auto& o: group->_children) { + for (auto& o: group->children) { if ( dynamic_cast(&o) ) { s.push_back((SPItem*)&o); } @@ -735,7 +735,7 @@ void SPGroup::_updateLayerMode(unsigned int display_key) { void SPGroup::translateChildItems(Geom::Translate const &tr) { if ( hasChildren() ) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if ( item ) { sp_item_move_rel(item, tr); @@ -748,9 +748,9 @@ void SPGroup::translateChildItems(Geom::Translate const &tr) void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bool noRecurse) { if ( hasChildren() ) { - for (auto& o: _children) { + for (auto& o: children) { if ( SPDefs *defs = dynamic_cast(&o) ) { // select symbols from defs, ignore clips, masks, patterns - for (auto& defschild: defs->_children) { + for (auto& defschild: defs->children) { SPGroup *defsgroup = dynamic_cast(&defschild); if (defsgroup) defsgroup->scaleChildItemsRec(sc, p, false); @@ -871,7 +871,7 @@ void SPGroup::scaleChildItemsRec(Geom::Scale const &sc, Geom::Point const &p, bo gint SPGroup::getItemCount() const { gint len = 0; - for (auto& child: _children) { + for (auto& child: children) { if (dynamic_cast(&child)) { len++; } diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 53b4c0879..69da28c66 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -308,15 +308,15 @@ bool is_item(SPObject const &object) { void SPItem::raiseToTop() { using Inkscape::Algorithms::find_last_if; - auto topmost = find_last_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); - if (topmost != parent->_children.end()) { + auto topmost = find_last_if(++parent->children.iterator_to(*this), parent->children.end(), &is_item); + if (topmost != parent->children.end()) { getRepr()->parent()->changeOrder( getRepr(), topmost->getRepr() ); } } void SPItem::raiseOne() { - auto next_higher = std::find_if(++parent->_children.iterator_to(*this), parent->_children.end(), &is_item); - if (next_higher != parent->_children.end()) { + auto next_higher = std::find_if(++parent->children.iterator_to(*this), parent->children.end(), &is_item); + if (next_higher != parent->children.end()) { Inkscape::XML::Node *ref = next_higher->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); } @@ -325,8 +325,8 @@ void SPItem::raiseOne() { void SPItem::lowerOne() { using Inkscape::Algorithms::find_last_if; - auto next_lower = find_last_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); - if (next_lower != parent->_children.iterator_to(*this)) { + auto next_lower = find_last_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item); + if (next_lower != parent->children.iterator_to(*this)) { next_lower--; Inkscape::XML::Node *ref = next_lower->getRepr(); getRepr()->parent()->changeOrder(getRepr(), ref); @@ -334,8 +334,8 @@ void SPItem::lowerOne() { } void SPItem::lowerToBottom() { - auto bottom = std::find_if(parent->_children.begin(), parent->_children.iterator_to(*this), &is_item); - if (bottom != parent->_children.iterator_to(*this)) { + auto bottom = std::find_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item); + if (bottom != parent->children.iterator_to(*this)) { bottom--; Inkscape::XML::Node *ref = bottom->getRepr() ; parent->getRepr()->changeOrder(getRepr(), ref); @@ -705,7 +705,7 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X // so we need to add any children from the underlying object to the new repr if (flags & SP_OBJECT_WRITE_BUILD) { GSList *l = NULL; - for (auto& child: object->_children) { + for (auto& child: object->children) { if (dynamic_cast(&child) || dynamic_cast(&child)) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -719,7 +719,7 @@ Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (auto& child: object->_children) { + for (auto& child: object->children) { if (dynamic_cast(&child) || dynamic_cast(&child)) { child.updateRepr(flags); } @@ -928,7 +928,7 @@ unsigned int SPItem::pos_in_parent() const { unsigned int pos = 0; - for (auto& iter: parent->_children) { + for (auto& iter: parent->children) { if (&iter == this) { return pos; } @@ -974,7 +974,7 @@ void SPItem::getSnappoints(std::vector &p, Inkscap for (std::list::const_iterator o = clips_and_masks.begin(); o != clips_and_masks.end(); ++o) { if (*o) { // obj is a group object, the children are the actual clippers - for(auto& child: (*o)->_children) { + for(auto& child: (*o)->children) { SPItem *item = dynamic_cast(const_cast(&child)); if (item) { std::vector p_clip_or_mask; @@ -1302,7 +1302,7 @@ void SPItem::adjust_stroke_width_recursive(double expansion) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if (item) { item->adjust_stroke_width_recursive(expansion); @@ -1317,7 +1317,7 @@ void SPItem::freeze_stroke_width_recursive(bool freeze) // A clone's child is the ghost of its original - we must not touch it, skip recursion if ( !dynamic_cast(this) ) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if (item) { item->freeze_stroke_width_recursive(freeze); @@ -1337,7 +1337,7 @@ sp_item_adjust_rects_recursive(SPItem *item, Geom::Affine advertized_transform) rect->compensateRxRy(advertized_transform); } - for(auto& o: item->_children) { + for(auto& o: item->children) { SPItem *itm = dynamic_cast(&o); if (itm) { sp_item_adjust_rects_recursive(itm, advertized_transform); @@ -1357,7 +1357,7 @@ void SPItem::adjust_paint_recursive (Geom::Affine advertized_transform, Geom::Af // also we do not recurse into clones, because a clone's child is the ghost of its original - // we must not touch it if (!(this && (dynamic_cast(this) || dynamic_cast(this)))) { - for (auto& o: _children) { + for (auto& o: children) { SPItem *item = dynamic_cast(&o); if (item) { // At the level of the transformed item, t_ancestors is identity; @@ -1666,7 +1666,7 @@ SPItem const *sp_item_first_item_child(SPObject const *obj) SPItem *sp_item_first_item_child(SPObject *obj) { SPItem *child = 0; - for (auto& iter: obj->_children) { + for (auto& iter: obj->children) { SPItem *tmp = dynamic_cast(&iter); if ( tmp ) { child = tmp; diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index e643cc9bd..1b44c26ff 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -227,7 +227,7 @@ Inkscape::DrawingItem *SPMask::sp_mask_show(Inkscape::Drawing &drawing, unsigned Inkscape::DrawingGroup *ai = new Inkscape::DrawingGroup(drawing); this->display = sp_mask_view_new_prepend (this->display, key, ai); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM (&child)) { Inkscape::DrawingItem *ac = SP_ITEM (&child)->invoke_show (drawing, key, SP_ITEM_REFERENCE_FLAGS); @@ -250,7 +250,7 @@ void SPMask::sp_mask_hide(unsigned int key) { g_return_if_fail (this != NULL); g_return_if_fail (SP_IS_MASK (this)); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM (&child)) { SP_ITEM(&child)->invoke_hide (key); } diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp index 20d6d0d85..6bd5c85d7 100644 --- a/src/sp-mesh-array.cpp +++ b/src/sp-mesh-array.cpp @@ -632,12 +632,12 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { guint max_column = 0; guint irow = 0; // Corresponds to top of patch being read in. - for (auto& ro: mg->_children) { + for (auto& ro: mg->children) { if (SP_IS_MESHROW(&ro)) { guint icolumn = 0; // Corresponds to left of patch being read in. - for (auto& po: ro._children) { + for (auto& po: ro.children) { if (SP_IS_MESHPATCH(&po)) { @@ -652,7 +652,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { // Only 'top' side defined for first row. if( irow != 0 ) ++istop; - for (auto& so: po._children) { + for (auto& so: po.children) { if (SP_IS_STOP(&so)) { if( istop > 3 ) { @@ -848,13 +848,13 @@ void SPMeshNodeArray::write( SPMesh *mg ) { // First we must delete reprs for old mesh rows and patches. GSList *descendant_reprs = NULL; GSList *descendant_objects = NULL; - for (auto& row: mg->_children) { + for (auto& row: mg->children) { descendant_reprs = g_slist_prepend (descendant_reprs, row.getRepr()); descendant_objects = g_slist_prepend (descendant_objects, &row); - for (auto& patch: row._children) { + for (auto& patch: row.children) { descendant_reprs = g_slist_prepend (descendant_reprs, patch.getRepr()); descendant_objects = g_slist_prepend (descendant_objects, &patch); - for (auto& stop: patch._children) { + for (auto& stop: patch.children) { descendant_reprs = g_slist_prepend (descendant_reprs, stop.getRepr()); descendant_objects = g_slist_prepend (descendant_objects, &stop); } diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 173055dbd..e1d69e297 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -248,7 +248,7 @@ void SPNamedView::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "inkscape:lockguides" ); /* Construct guideline list */ - for (auto& o: _children) { + for (auto& o: children) { if (SP_IS_GUIDE(&o)) { SPGuide * g = SP_GUIDE(&o); this->guides.push_back(g); @@ -858,7 +858,7 @@ void sp_namedview_update_layers_from_document (SPDesktop *desktop) } // if that didn't work out, look for the topmost layer if (!layer) { - for (auto& iter: document->getRoot()->_children) { + for (auto& iter: document->getRoot()->children) { if (desktop->isLayer(&iter)) { layer = &iter; } diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp index bfed08218..62c6f7a87 100644 --- a/src/sp-object-group.cpp +++ b/src/sp-object-group.cpp @@ -50,7 +50,7 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks } GSList *l = 0; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node *crepr = child.updateRepr(xml_doc, NULL, flags); if (crepr) { @@ -64,7 +64,7 @@ Inkscape::XML::Node *SPObjectGroup::write(Inkscape::XML::Document *xml_doc, Inks l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { child.updateRepr(flags); } } diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 587efd4f6..ccd70f4cb 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -400,7 +400,7 @@ void SPObject::changeCSS(SPCSSAttr *css, gchar const *attr) std::vector SPObject::childList(bool add_ref, Action) { std::vector l; - for (auto& child: _children) { + for (auto& child: children) { if (add_ref) { sp_object_ref(&child); } @@ -467,7 +467,7 @@ void SPObject::requestOrphanCollection() { } void SPObject::_sendDeleteSignalRecursive() { - for (auto& child: _children) { + for (auto& child: children) { child._delete_signal.emit(&child); child._sendDeleteSignalRecursive(); } @@ -497,7 +497,7 @@ void SPObject::deleteObject(bool propagate, bool propagate_descendants) void SPObject::cropToObject(SPObject *except) { std::vector toDelete; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { if (child.isAncestorOf(except)) { child.cropToObject(except); @@ -525,11 +525,11 @@ void SPObject::attach(SPObject *object, SPObject *prev) object->parent = this; this->_updateTotalHRefCount(object->_total_hrefcount); - auto it = _children.begin(); + auto it = children.begin(); if (prev != nullptr) { - it = ++_children.iterator_to(*prev); + it = ++children.iterator_to(*prev); } - _children.insert(it, *object); + children.insert(it, *object); if (!object->xml_space.set) object->xml_space.value = this->xml_space.value; @@ -542,12 +542,12 @@ void SPObject::reorder(SPObject* obj, SPObject* prev) { g_return_if_fail(obj != prev); g_return_if_fail(!prev || prev->parent == obj->parent); - auto it = _children.begin(); + auto it = children.begin(); if (prev != nullptr) { - it = ++_children.iterator_to(*prev); + it = ++children.iterator_to(*prev); } - _children.splice(it, _children, _children.iterator_to(*obj)); + children.splice(it, children, children.iterator_to(*obj)); } void SPObject::detach(SPObject *object) @@ -558,7 +558,7 @@ void SPObject::detach(SPObject *object) g_return_if_fail(SP_IS_OBJECT(object)); g_return_if_fail(object->parent == this); - _children.erase(_children.iterator_to(*object)); + children.erase(children.iterator_to(*object)); object->releaseReferences(); object->parent = NULL; @@ -572,10 +572,10 @@ SPObject *SPObject::get_child_by_repr(Inkscape::XML::Node *repr) g_return_val_if_fail(repr != NULL, NULL); SPObject *result = nullptr; - if (_children.size() > 0 && _children.back().getRepr() == repr) { - result = &_children.back(); // optimization for common scenario + if (children.size() > 0 && children.back().getRepr() == repr) { + result = &children.back(); // optimization for common scenario } else { - for (auto& child: _children) { + for (auto& child: children) { if (child.getRepr() == repr) { result = &child; break; @@ -609,7 +609,7 @@ void SPObject::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) void SPObject::release() { SPObject* object = this; debug("id=%p, typename=%s", object, g_type_name_from_instance((GTypeInstance*)object)); - auto tmp = _children | boost::adaptors::transformed([](SPObject& obj){return &obj;}); + auto tmp = children | boost::adaptors::transformed([](SPObject& obj){return &obj;}); std::vector toRelease(tmp.begin(), tmp.end()); for (auto& p: toRelease) { @@ -797,8 +797,8 @@ void SPObject::releaseReferences() { SPObject *SPObject::getPrev() { SPObject *prev = nullptr; - if (parent && !parent->_children.empty() && &parent->_children.front() != this) { - prev = &*(--parent->_children.iterator_to(*this)); + if (parent && !parent->children.empty() && &parent->children.front() != this) { + prev = &*(--parent->children.iterator_to(*this)); } return prev; } @@ -806,8 +806,8 @@ SPObject *SPObject::getPrev() SPObject* SPObject::getNext() { SPObject *next = nullptr; - if (parent && !parent->_children.empty() && &parent->_children.back() != this) { - next = &*(++parent->_children.iterator_to(*this)); + if (parent && !parent->children.empty() && &parent->children.back() != this) { + next = &*(++parent->children.iterator_to(*this)); } return next; } @@ -1475,7 +1475,7 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool } else { // remove the current content of the 'text' or 'desc' element - auto tmp = elem->_children | boost::adaptors::transformed([](SPObject& obj) { return &obj; }); + auto tmp = elem->children | boost::adaptors::transformed([](SPObject& obj) { return &obj; }); std::vector vec(tmp.begin(), tmp.end()); for (auto &child: vec) { child->deleteObject(); @@ -1489,7 +1489,7 @@ bool SPObject::setTitleOrDesc(gchar const *value, gchar const *svg_tagname, bool SPObject* SPObject::findFirstChild(gchar const *tagname) const { - for (auto& child: const_cast(this)->_children) + for (auto& child: const_cast(this)->children) { if (child.repr->type() == Inkscape::XML::ELEMENT_NODE && !strcmp(child.repr->name(), tagname)) { @@ -1503,7 +1503,7 @@ char* SPObject::textualContent() const { GString* text = g_string_new(""); - for (auto& child: _children) + for (auto& child: children) { Inkscape::XML::NodeType child_type = child.repr->type(); @@ -1530,7 +1530,7 @@ void SPObject::recursivePrintTree( unsigned level ) std::cout << " "; } std::cout << (getId()?getId():"No object id") << std::endl; - for (auto& child: _children) { + for (auto& child: children) { child.recursivePrintTree(level + 1); } } diff --git a/src/sp-object.h b/src/sp-object.h index 94c9d5629..1c6212664 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -306,13 +306,13 @@ public: */ SPObject *getPrev(); - bool hasChildren() const { return ( _children.size() > 0 ); } + bool hasChildren() const { return ( children.size() > 0 ); } - SPObject *firstChild() { return _children.empty() ? nullptr : &_children.front(); } - SPObject const *firstChild() const { return _children.empty() ? nullptr : &_children.front(); } + SPObject *firstChild() { return children.empty() ? nullptr : &children.front(); } + SPObject const *firstChild() const { return children.empty() ? nullptr : &children.front(); } - SPObject *lastChild() { return _children.empty() ? nullptr : &_children.back(); } - SPObject const *lastChild() const { return _children.empty() ? nullptr : &_children.back(); } + SPObject *lastChild() { return children.empty() ? nullptr : &children.back(); } + SPObject const *lastChild() const { return children.empty() ? nullptr : &children.back(); } enum Action { ActionGeneral, ActionBBox, ActionUpdate, ActionShow }; @@ -857,7 +857,7 @@ public: ListHook, &SPObject::_child_hook >> ChildrenList; - ChildrenList _children; + ChildrenList children; virtual void read_content(); void recursivePrintTree(unsigned level = 0); // For debugging diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index fde9f90f1..3b1ae3f0b 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -223,7 +223,7 @@ void SPPattern::_getChildren(std::list &l) { for (SPPattern *pat_i = this; pat_i != NULL; pat_i = pat_i->ref ? pat_i->ref->getObject() : NULL) { if (pat_i->firstChild()) { // find the first one with children - for (auto& child: pat_i->_children) { + for (auto& child: pat_i->children) { l.push_back(&child); } break; // do not go further up the chain if children are found @@ -319,7 +319,7 @@ guint SPPattern::_countHrefs(SPObject *o) const i++; } - for (auto& child: o->_children) { + for (auto& child: o->children) { i += _countHrefs(&child); } @@ -508,7 +508,7 @@ Geom::OptRect SPPattern::viewbox() const bool SPPattern::_hasItemChildren() const { - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child)) { return true; } @@ -558,7 +558,7 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b Inkscape::DrawingGroup *root = new Inkscape::DrawingGroup(drawing); drawing.setRoot(root); - for (auto& child: shown->_children) { + for (auto& child: shown->children) { if (SP_IS_ITEM(&child)) { // for each item in pattern, show it on our drawing, add to the group, // and connect to the release signal in case the item gets deleted @@ -654,7 +654,7 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b // Render drawing to pattern_surface via drawing context, this calls root->render // which is really DrawingItem->render(). drawing.render(dc, one_tile); - for (auto& child: shown->_children) { + for (auto& child: shown->children) { if (SP_IS_ITEM(&child)) { SP_ITEM(&child)->invoke_hide(dkey); } diff --git a/src/sp-root.cpp b/src/sp-root.cpp index cfd0ced10..34047054a 100644 --- a/src/sp-root.cpp +++ b/src/sp-root.cpp @@ -73,7 +73,7 @@ void SPRoot::build(SPDocument *document, Inkscape::XML::Node *repr) SPGroup::build(document, repr); // Search for first node - for (auto& o: _children) { + for (auto& o: children) { if (SP_IS_DEFS(&o)) { this->defs = SP_DEFS(&o); break; @@ -174,7 +174,7 @@ void SPRoot::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) if (co && SP_IS_DEFS(co)) { // We search for first node - it is not beautiful, but works - for (auto& c: _children) { + for (auto& c: children) { if (SP_IS_DEFS(&c)) { this->defs = SP_DEFS(&c); break; @@ -189,7 +189,7 @@ void SPRoot::remove_child(Inkscape::XML::Node *child) SPObject *iter = 0; // We search for first remaining node - it is not beautiful, but works - for (auto& child: _children) { + for (auto& child: children) { iter = &child; if (SP_IS_DEFS(iter) && (SPDefs *)iter != this->defs) { this->defs = (SPDefs *)iter; diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index 7679cc31e..971583a9a 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -32,7 +32,7 @@ SPSwitch::~SPSwitch() { SPObject *SPSwitch::_evaluateFirst() { SPObject *first = 0; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_ITEM(&child) && sp_item_evaluate(SP_ITEM(&child))) { first = &child; break; diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 193289c2b..e52869942 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -155,7 +155,7 @@ void SPText::update(SPCtx *ctx, guint flags) { // Create temporary list of children GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child, this); l = g_slist_prepend (l, &child); } @@ -235,7 +235,7 @@ void SPText::modified(guint flags) { // Create temporary list of children GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { sp_object_ref(&child, this); l = g_slist_prepend (l, &child); } @@ -262,7 +262,7 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } @@ -286,7 +286,7 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X l = g_slist_remove (l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TITLE(&child) || SP_IS_DESC(&child)) { continue; } @@ -606,7 +606,7 @@ unsigned SPText::_buildLayoutInput(SPObject *root, Inkscape::Text::Layout::Optio } } - for (auto& child: root->_children) { + for (auto& child: root->children) { SPString *str = dynamic_cast(&child); if (str) { Glib::ustring const &string = str->string; @@ -628,7 +628,7 @@ void SPText::rebuildLayout() Inkscape::Text::Layout::OptionalTextTagAttrs optional_attrs; _buildLayoutInput(this, optional_attrs, 0, false); layout.calculateFlow(); - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TEXTPATH(&child)) { SPTextPath const *textpath = SP_TEXTPATH(&child); if (textpath->originalPath != NULL) { @@ -640,7 +640,7 @@ void SPText::rebuildLayout() //g_print("%s", layout.dumpAsText().c_str()); // set the x,y attributes on role:line spans - for (auto& child: _children) { + for (auto& child: children) { if (SP_IS_TSPAN(&child)) { SPTSpan *tspan = SP_TSPAN(&child); if ( (tspan->role != SP_TSPAN_ROLE_UNSPECIFIED) @@ -676,7 +676,7 @@ void SPText::_adjustFontsizeRecursive(SPItem *item, double ex, bool is_root) item->updateRepr(); } - for(auto& o: item->_children) { + for(auto& o: item->children) { if (SP_IS_ITEM(&o)) _adjustFontsizeRecursive(SP_ITEM(&o), ex, false); } @@ -695,7 +695,7 @@ void SPText::_adjustCoordsRecursive(SPItem *item, Geom::Affine const &m, double SP_TREF(item)->attributes.transform(m, ex, ex, is_root); } - for(auto& o: item->_children) { + for(auto& o: item->children) { if (SP_IS_ITEM(&o)) _adjustCoordsRecursive(SP_ITEM(&o), m, ex, false); } diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp index 66866c9f7..48e2b41f6 100644 --- a/src/sp-tref.cpp +++ b/src/sp-tref.cpp @@ -506,7 +506,7 @@ sp_tref_convert_to_tspan(SPObject *obj) //////////////////// else { GSList *l = NULL; - for (auto& child: obj->_children) { + for (auto& child: obj->children) { sp_object_ref(&child, obj); l = g_slist_prepend (l, &child); } diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp index 23df18503..5a82f2c05 100644 --- a/src/sp-tspan.cpp +++ b/src/sp-tspan.cpp @@ -96,7 +96,7 @@ void SPTSpan::update(SPCtx *ctx, guint flags) { } childflags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { ochild.updateDisplay(ctx, childflags); } @@ -128,7 +128,7 @@ void SPTSpan::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { ochild.emitModified(flags); } @@ -175,7 +175,7 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: if ( flags&SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr=NULL; if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { @@ -197,7 +197,7 @@ Inkscape::XML::Node* SPTSpan::write(Inkscape::XML::Document *xml_doc, Inkscape:: l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { child.updateRepr(flags); } else if ( SP_IS_TEXTPATH(&child) ) { @@ -313,7 +313,7 @@ void SPTextPath::update(SPCtx *ctx, guint flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if ( flags || ( ochild.uflags & SP_OBJECT_MODIFIED_FLAG )) { ochild.updateDisplay(ctx, flags); } @@ -367,7 +367,7 @@ void SPTextPath::modified(unsigned int flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; - for (auto& ochild: _children) { + for (auto& ochild: children) { if (flags || (ochild.mflags & SP_OBJECT_MODIFIED_FLAG)) { ochild.emitModified(flags); } @@ -399,7 +399,7 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap if ( flags & SP_OBJECT_WRITE_BUILD ) { GSList *l = NULL; - for (auto& child: _children) { + for (auto& child: children) { Inkscape::XML::Node* c_repr=NULL; if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { @@ -421,7 +421,7 @@ Inkscape::XML::Node* SPTextPath::write(Inkscape::XML::Document *xml_doc, Inkscap l = g_slist_remove(l, l->data); } } else { - for (auto& child: _children) { + for (auto& child: children) { if ( SP_IS_TSPAN(&child) || SP_IS_TREF(&child) ) { child.updateRepr(flags); } else if ( SP_IS_TEXTPATH(&child) ) { @@ -466,7 +466,7 @@ void sp_textpath_to_text(SPObject *tp) // make a list of textpath children GSList *tp_reprs = NULL; - for (auto& o: tp->_children) { + for (auto& o: tp->children) { tp_reprs = g_slist_prepend(tp_reprs, o.getRepr()); } diff --git a/src/sp-use.cpp b/src/sp-use.cpp index cef967c90..b24363278 100644 --- a/src/sp-use.cpp +++ b/src/sp-use.cpp @@ -436,7 +436,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //BUT move clippaths accordingly. //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - for(auto& clip: clip_ref->getObject()->_children){ + for(auto& clip: clip_ref->getObject()->children){ SPItem *item = (SPItem*) &clip; if(item){ item->transform *= m; @@ -446,7 +446,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { } } if(mask_ref->getObject()){ - for(auto& mask: mask_ref->getObject()->_children){ + for(auto& mask: mask_ref->getObject()->children){ SPItem *item = (SPItem*) &mask; if(item){ item->transform *= m; @@ -476,7 +476,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { //if clone has a clippath, move it accordingly if(clip_ref->getObject()){ - for(auto& clip: clip_ref->getObject()->_children){ + for(auto& clip: clip_ref->getObject()->children){ SPItem *item = (SPItem*) &clip; if(item){ item->transform *= clone_move.inverse(); @@ -486,7 +486,7 @@ void SPUse::move_compensate(Geom::Affine const *mp) { } } if(mask_ref->getObject()){ - for(auto& mask: mask_ref->getObject()->_children){ + for(auto& mask: mask_ref->getObject()->children){ SPItem *item = (SPItem*) &mask; if(item){ item->transform *= clone_move.inverse(); diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 4ac9143f0..a4c4ac6cd 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -883,7 +883,7 @@ void item_outline_add_marker_child( SPItem const *item, Geom::Affine marker_tran // note: a marker child item can be an item group! if (SP_IS_GROUP(item)) { // recurse through all childs: - for (auto& o: item->_children) { + for (auto& o: item->children) { if ( SP_IS_ITEM(&o) ) { item_outline_add_marker_child(SP_ITEM(&o), tr, pathv_in); } diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index 56048d1f7..a950dfebe 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -142,7 +142,7 @@ text_put_on_path() // make a list of text children GSList *text_reprs = NULL; - for(auto& o: text->_children) { + for(auto& o: text->children) { text_reprs = g_slist_prepend(text_reprs, o.getRepr()); } @@ -240,7 +240,7 @@ text_remove_all_kerns_recursively(SPObject *o) g_strfreev(xa_comma); } - for (auto& i: o->_children) { + for (auto& i: o->children) { text_remove_all_kerns_recursively(&i); i.requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); } @@ -353,7 +353,7 @@ text_flow_into_shape() Inkscape::GC::release(text_repr); } else { // reflow an already flowed text, preserving paras - for(auto& o: text->_children) { + for(auto& o: text->children) { if (SP_IS_FLOWPARA(&o)) { Inkscape::XML::Node *para_repr = o.getRepr()->duplicate(xml_doc); root_repr->appendChild(para_repr); diff --git a/src/text-editing.cpp b/src/text-editing.cpp index 6ca2fe948..658cdf816 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -91,7 +91,7 @@ bool sp_te_input_is_empty(SPObject const *item) if (SP_IS_STRING(item)) { empty = SP_STRING(item)->string.empty(); } else { - for (auto& child: item->_children) { + for (auto& child: item->children) { if (!sp_te_input_is_empty(&child)) { empty = false; break; @@ -237,7 +237,7 @@ unsigned sp_text_get_length(SPObject const *item) length++; } - for (auto& child: item->_children) { + for (auto& child: item->children) { if (SP_IS_STRING(&child)) { length += SP_STRING(&child)->string.length(); } else { @@ -267,7 +267,7 @@ unsigned sp_text_get_length_upto(SPObject const *item, SPObject const *upto) } // Count the length of the children - for (auto& child: item->_children) { + for (auto& child: item->children) { if (upto && &child == upto) { // hit upto, return immediately return length; @@ -323,7 +323,7 @@ to \a item at the same level. */ static unsigned sum_sibling_text_lengths_before(SPObject const *item) { unsigned char_index = 0; - for (auto& sibling: item->parent->_children) { + for (auto& sibling: item->parent->children) { if (&sibling == item) { break; } @@ -860,7 +860,7 @@ static void sp_te_get_ustring_multiline(SPObject const *root, Glib::ustring *str if (*pending_line_break) { *string += '\n'; } - for (auto& child: root->_children) { + for (auto& child: root->children) { if (SP_IS_STRING(&child)) { *string += SP_STRING(&child)->string; } else { @@ -944,7 +944,7 @@ sp_te_set_repr_text_multiline(SPItem *text, gchar const *str) gchar *content = g_strdup (str); repr->setContent(""); - for (auto& child: object->_children) { + for (auto& child: object->children) { if (!SP_IS_FLOWREGION(&child) && !SP_IS_FLOWREGIONEXCLUDE(&child)) { repr->removeChild(child.getRepr()); } @@ -1405,7 +1405,7 @@ static void apply_css_recursive(SPObject *o, SPCSSAttr const *css) { sp_repr_css_change(o->getRepr(), const_cast(css), "style"); - for (auto& child: o->_children) { + for (auto& child: o->children) { if (sp_repr_css_property(const_cast(css), "opacity", NULL) != NULL) { // Unset properties which are accumulating and thus should not be set recursively. // For example, setting opacity 0.5 on a group recursively would result in the visible opacity of 0.25 for an item in the group. @@ -2073,7 +2073,7 @@ bool has_visible_text(SPObject *obj) if (SP_IS_STRING(obj) && !SP_STRING(obj)->string.empty()) { hasVisible = true; // maybe we should also check that it's not all whitespace? } else { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (has_visible_text(const_cast(&child))) { hasVisible = true; break; diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index 48d53857b..b25a70b15 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -839,7 +839,7 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) SPObject *mask = item->mask_ref->getObject(); _copyNode(mask->getRepr(), _doc, _defs); // recurse into the mask for its gradients etc. - for(auto& o: mask->_children) { + for(auto& o: mask->children) { SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); @@ -857,7 +857,7 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) } // recurse - for(auto& o: item->_children) { + for(auto& o: item->children) { SPItem *childItem = dynamic_cast(&o); if (childItem) { _copyUsedDefs(childItem); @@ -894,7 +894,7 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern) _copyNode(pattern->getRepr(), _doc, _defs); // items in the pattern may also use gradients and other patterns, so recurse - for (auto& child: pattern->_children) { + for (auto& child: pattern->children) { SPItem *childItem = dynamic_cast(&child); if (childItem) { _copyUsedDefs(childItem); diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index 11af02e3c..1e8ca4405 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -2042,7 +2042,7 @@ void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from) if (!trace_drawing) return; - for (auto& o: from->_children) { + for (auto& o: from->children) { SPItem *item = dynamic_cast(&o); if (item && clonetiler_is_a_clone_of(&o, NULL)) { item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too! @@ -2123,7 +2123,7 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *) std::vector to_unclump; // not including the original - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (clonetiler_is_a_clone_of (&child, obj)) { to_unclump.push_back((SPItem*)&child); } @@ -2143,7 +2143,7 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj) guint n = 0; - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (clonetiler_is_a_clone_of (&child, obj)) { n ++; } @@ -2172,7 +2172,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d // remove old tiling GSList *to_delete = NULL; - for (auto& child: parent->_children) { + for (auto& child: parent->children) { if (clonetiler_is_a_clone_of (&child, obj)) { to_delete = g_slist_prepend (to_delete, &child); } diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index df37eb005..6f5f14d80 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -1315,7 +1315,7 @@ void DocumentProperties::changeEmbeddedScript(){ for (std::vector::const_iterator it = current.begin(); it != current.end(); ++it) { SPObject* obj = *it; if (id == obj->getId()){ - int count = (int) obj->_children.size(); + int count = (int) obj->children.size(); if (count>1) g_warning("TODO: Found a script element with multiple (%d) child nodes! We must implement support for that!", count); @@ -1359,7 +1359,7 @@ void DocumentProperties::editEmbeddedScript(){ //XML Tree being used directly here while it shouldn't be. Inkscape::XML::Node *repr = obj->getRepr(); if (repr){ - auto tmp = obj->_children | boost::adaptors::transformed([](SPObject& o) { return &o; }); + auto tmp = obj->children | boost::adaptors::transformed([](SPObject& o) { return &o; }); std::vector vec(tmp.begin(), tmp.end()); for (auto &child: vec) { child->deleteObject(); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index 1be5d540a..3e3ede019 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -103,7 +103,7 @@ static int input_count(const SPFilterPrimitive* prim) return 2; else if(SP_IS_FEMERGE(prim)) { // Return the number of feMergeNode connections plus an extra - return (int) (prim->_children.size() + 1); + return (int) (prim->children.size() + 1); } else return 1; @@ -1060,7 +1060,7 @@ public: { SPFeFuncNode* funcNode = NULL; bool found = false; - for(auto& node: ct->_children) { + for(auto& node: ct->children) { funcNode = SP_FEFUNCNODE(&node); if( funcNode->channel == _channel ) { found = true; @@ -1868,7 +1868,7 @@ void FilterEffectsDialog::PrimitiveList::update() bool active_found = false; _dialog._primitive_box->set_sensitive(true); _dialog.update_filter_general_settings_view(); - for(auto& prim_obj: f->_children) { + for(auto& prim_obj: f->children) { SPFilterPrimitive *prim = SP_FILTER_PRIMITIVE(&prim_obj); if(!prim) { break; @@ -2339,7 +2339,7 @@ const Gtk::TreeIter FilterEffectsDialog::PrimitiveList::find_result(const Gtk::T if(SP_IS_FEMERGE(prim)) { int c = 0; bool found = false; - for (auto& o: prim->_children) { + for (auto& o: prim->children) { if(c == attr && SP_IS_FEMERGENODE(&o)) { image = SP_FEMERGENODE(&o)->input; found = true; @@ -2531,7 +2531,7 @@ bool FilterEffectsDialog::PrimitiveList::on_button_release_event(GdkEventButton* if(SP_IS_FEMERGE(prim)) { int c = 1; bool handled = false; - for (auto& o: prim->_children) { + for (auto& o: prim->children) { if(c == _in_drag && SP_IS_FEMERGENODE(&o)) { // If input is null, delete it if(!in_val) { diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index e156dfa13..b09ce6078 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -747,7 +747,7 @@ std::vector &Find::all_items (SPObject *r, std::vector &l, boo return l; // we're not interested in metadata } - for (auto& child: r->_children) { + for (auto& child: r->children) { SPItem *item = dynamic_cast(&child); if (item && !child.cloned && !desktop->isLayer(item)) { if ((hidden || !desktop->itemIsHidden(item)) && (locked || !item->isLocked())) { diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index eafe5566a..b927096ab 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -182,7 +182,7 @@ std::vector FontSubstitution::getFontReplacedItems(SPDocument* doc, Gli family = SP_TEXT(parent_text)->layout.getFontFamily(0); // Add all the spans fonts to the set gint ii = 0; - for (auto& child: parent_text->_children) { + for (auto& child: parent_text->children) { family = SP_TEXT(parent_text)->layout.getFontFamily(ii); setFontSpans.insert(family); ii++; diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index e4639745f..f4d3a3f70 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -340,7 +340,7 @@ void ObjectsPanel::_objectsChanged(SPObject */*obj*/) void ObjectsPanel::_addObject(SPObject* obj, Gtk::TreeModel::Row* parentRow) { if ( _desktop && obj ) { - for(auto& child: obj->_children) { + for(auto& child: obj->children) { if (SP_IS_ITEM(&child)) { SPItem * item = SP_ITEM(&child); @@ -398,7 +398,7 @@ void ObjectsPanel::_updateObject( SPObject *obj, bool recurse ) { //end mark if (recurse) { - for (auto& iter: obj->_children) { + for (auto& iter: obj->children) { _updateObject(&iter, recurse); } } @@ -518,7 +518,7 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) SPGaussianBlur *spblur = NULL; if (item->style->getFilter()) { - for (auto& primitive_obj: item->style->getFilter()->_children) { + for (auto& primitive_obj: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive_obj)) { break; } @@ -1293,7 +1293,7 @@ bool ObjectsPanel::_executeAction() break; case BUTTON_COLLAPSE_ALL: { - for (auto& obj: _document->getRoot()->_children) { + for (auto& obj: _document->getRoot()->children) { if (SP_IS_GROUP(&obj)) { _setCollapsed(SP_GROUP(&obj)); } @@ -1405,7 +1405,7 @@ void ObjectsPanel::_setCollapsed(SPGroup * group) { group->setExpanded(false); group->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); - for (auto& iter: group->_children) { + for (auto& iter: group->children) { if (SP_IS_GROUP(&iter)) { _setCollapsed(SP_GROUP(&iter)); } @@ -1523,7 +1523,7 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl if (blendmode != "normal") { gdouble radius = 0; if (item->style->getFilter()) { - for (auto& primitive: item->style->getFilter()->_children) { + for (auto& primitive: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { break; } @@ -1538,7 +1538,7 @@ void ObjectsPanel::_blendChangedIter(const Gtk::TreeIter& iter, Glib::ustring bl SPFilter *filter = new_filter_simple_from_item(_document, item, blendmode.c_str(), radius); sp_style_set_property_url(item, "filter", filter, false); } else { - for (auto& primitive: item->style->getFilter()->_children) { + for (auto& primitive: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { break; } @@ -1598,7 +1598,7 @@ void ObjectsPanel::_blurChangedIter(const Gtk::TreeIter& iter, double blur) SPFilter *filter = modify_filter_gaussian_blur_from_item(_document, item, radius); sp_style_set_property_url(item, "filter", filter, false); } else if (item->style->filter.set && item->style->getFilter()) { - for (auto& primitive: item->style->getFilter()->_children) { + for (auto& primitive: item->style->getFilter()->children) { if (!SP_IS_FILTER_PRIMITIVE(&primitive)) { break; } diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp index 9338a4e8c..ac8ef5c15 100644 --- a/src/ui/dialog/spellcheck.cpp +++ b/src/ui/dialog/spellcheck.cpp @@ -234,7 +234,7 @@ GSList *SpellCheck::allTextItems (SPObject *r, GSList *l, bool hidden, bool lock return l; // we're not interested in metadata } - for (auto& child: r->_children) { + for (auto& child: r->children) { if (SP_IS_ITEM (&child) && !child.cloned && !desktop->isLayer(SP_ITEM(&child))) { if ((hidden || !desktop->itemIsHidden(SP_ITEM(&child))) && (locked || !SP_ITEM(&child)->isLocked())) { if (SP_IS_TEXT(&child) || SP_IS_FLOWTEXT(&child)) diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 93bd67a3d..a723c86d8 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -115,7 +115,7 @@ void SvgFontsDialog::AttrEntry::set_text(char* t){ void SvgFontsDialog::AttrEntry::on_attr_changed(){ SPObject* o = NULL; - for (auto& node: dialog->get_selected_spfont()->_children) { + for (auto& node: dialog->get_selected_spfont()->children) { switch(this->attr){ case SP_PROP_FONT_FAMILY: if (SP_IS_FONTFACE(&node)){ @@ -170,7 +170,7 @@ void GlyphComboBox::update(SPFont* spfont){ this->append(""); //Gtk is refusing to clear the combobox when I comment out this line this->remove_all(); - for (auto& node: spfont->_children) { + for (auto& node: spfont->children) { if (SP_IS_GLYPH(&node)){ this->append((static_cast(&node))->unicode); } @@ -308,7 +308,7 @@ void SvgFontsDialog::update_global_settings_tab(){ SPFont* font = get_selected_spfont(); if (!font) return; - for (auto& obj: font->_children) { + for (auto& obj: font->children) { if (SP_IS_FONTFACE(&obj)){ _familyname_entry->set_text((SP_FONTFACE(&obj))->font_family); } @@ -413,7 +413,7 @@ SvgFontsDialog::populate_glyphs_box() SPFont* spfont = this->get_selected_spfont(); _glyphs_observer.set(spfont); - for (auto& node: spfont->_children) { + for (auto& node: spfont->children) { if (SP_IS_GLYPH(&node)){ Gtk::TreeModel::Row row = *(_GlyphsListStore->append()); row[_GlyphsListColumns.glyph_node] = static_cast(&node); @@ -431,7 +431,7 @@ SvgFontsDialog::populate_kerning_pairs_box() SPFont* spfont = this->get_selected_spfont(); - for (auto& node: spfont->_children) { + for (auto& node: spfont->children) { if (SP_IS_HKERN(&node)){ Gtk::TreeModel::Row row = *(_KerningPairsListStore->append()); row[_KerningPairsListColumns.first_glyph] = (static_cast(&node))->u1->attribute_string().c_str(); @@ -492,7 +492,7 @@ void SvgFontsDialog::add_glyph(){ Geom::PathVector SvgFontsDialog::flip_coordinate_system(Geom::PathVector pathv){ double units_per_em = 1000; - for (auto& obj: get_selected_spfont()->_children) { + for (auto& obj: get_selected_spfont()->children) { if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. sp_repr_get_double(obj.getRepr(), "units-per-em", &units_per_em); @@ -574,7 +574,7 @@ void SvgFontsDialog::missing_glyph_description_from_selected_path(){ Geom::PathVector pathv = sp_svg_read_pathv(node->attribute("d")); - for (auto& obj: get_selected_spfont()->_children) { + for (auto& obj: get_selected_spfont()->children) { if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. @@ -596,7 +596,7 @@ void SvgFontsDialog::reset_missing_glyph_description(){ } SPDocument* doc = desktop->getDocument(); - for (auto& obj: get_selected_spfont()->_children) { + for (auto& obj: get_selected_spfont()->children) { if (SP_IS_MISSING_GLYPH(&obj)){ //XML Tree being directly used here while it shouldn't be. obj.getRepr()->setAttribute("d", (char*) "M0,0h1000v1024h-1000z"); @@ -734,7 +734,7 @@ void SvgFontsDialog::add_kerning_pair(){ //look for this kerning pair on the currently selected font this->kerning_pair = NULL; - for (auto& node: get_selected_spfont()->_children) { + for (auto& node: get_selected_spfont()->children) { //TODO: It is not really correct to get only the first byte of each string. //TODO: We should also support vertical kerning if (SP_IS_HKERN(&node) && (static_cast(&node))->u1->contains((gchar) first_glyph.get_active_text().c_str()[0]) @@ -848,7 +848,7 @@ SPFont *new_font(SPDocument *document) void set_font_family(SPFont* font, char* str){ if (!font) return; - for (auto& obj: font->_children) { + for (auto& obj: font->children) { if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. obj.getRepr()->setAttribute("font-family", str); @@ -868,7 +868,7 @@ void SvgFontsDialog::add_font(){ font->setLabel(os.str().c_str()); os2 << "SVGFont " << count; - for (auto& obj: font->_children) { + for (auto& obj: font->children) { if (SP_IS_FONTFACE(&obj)){ //XML Tree being directly used here while it shouldn't be. obj.getRepr()->setAttribute("font-family", os2.str().c_str()); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 1fdce34a5..84088052e 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -658,7 +658,7 @@ GSList* SymbolsDialog::symbols_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (auto& child: r->_children) { + for (auto& child: r->children) { l = symbols_in_doc_recursive( &child, l ); } @@ -680,7 +680,7 @@ GSList* SymbolsDialog::use_in_doc_recursive (SPObject *r, GSList *l) l = g_slist_prepend (l, r); } - for (auto& child: r->_children) { + for (auto& child: r->children) { l = use_in_doc_recursive( &child, l ); } diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index 61c8b5d37..fcc9b804c 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -399,7 +399,7 @@ void TagsPanel::_objectsChanged(SPObject* root) void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* parentRow ) { if ( _desktop && obj ) { - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (SP_IS_TAG(&child)) { Gtk::TreeModel::iterator iter = parentRow ? _store->prepend(parentRow->children()) : _store->prepend(); @@ -430,7 +430,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* _tree.expand_to_path( _store->get_path(iteritems) ); - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (SP_IS_TAG_USE(&child)) { SPItem *item = SP_TAG_USE(&child)->ref->getObject(); @@ -459,7 +459,7 @@ void TagsPanel::_addObject( SPDocument* doc, SPObject* obj, Gtk::TreeModel::Row* void TagsPanel::_select_tag( SPTag * tag ) { - for (auto& child: tag->_children) { + for (auto& child: tag->children) { if (SP_IS_TAG(&child)) { _select_tag(SP_TAG(&child)); } else if (SP_IS_TAG_USE(&child)) { @@ -649,7 +649,7 @@ bool TagsPanel::_handleButtonEvent(GdkEventButton* event) for(auto i=items.begin();i!=items.end();++i){ SPObject *newobj = *i; bool addchild = true; - for (auto& child: obj->_children) { + for (auto& child: obj->children) { if (SP_IS_TAG_USE(&child) && SP_TAG_USE(&child)->ref->getObject() == newobj) { addchild = false; } diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp index 2adba38c5..9a0b37913 100644 --- a/src/ui/tools/box3d-tool.cpp +++ b/src/ui/tools/box3d-tool.cpp @@ -118,7 +118,7 @@ static void sp_box3d_context_ensure_persp_in_defs(SPDocument *document) { SPDefs *defs = document->getDefs(); bool has_persp = false; - for (auto& child: defs->_children) { + for (auto& child: defs->children) { if (SP_IS_PERSP3D(&child)) { has_persp = true; break; diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index be8ce6d0c..11752726b 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -1114,7 +1114,7 @@ void ConnectorTool::_setActiveShape(SPItem *item) { // The idea here is to try and add a group's children to solidify // connection handling. We react to path objects with only one node. - for (auto& child: item->_children) { + for (auto& child: item->children) { if (SP_IS_PATH(&child) && SP_PATH(&child)->nodesInPath() == 1) { this->_activeShapeAddKnot((SPItem *) &child); } diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 3dfac5e3d..87b7bf7e3 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -378,7 +378,7 @@ void gather_items(NodeTool *nt, SPItem *base, SPObject *obj, Inkscape::UI::Shape r.role = role; s.insert(r); } else if (role != SHAPE_ROLE_NORMAL && (SP_IS_GROUP(obj) || SP_IS_OBJECTGROUP(obj))) { - for (auto& c: obj->_children) { + for (auto& c: obj->children) { gather_items(nt, base, &c, role, s); } } else if (SP_IS_ITEM(obj)) { diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 7da0973d5..361986d0c 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -385,7 +385,7 @@ sp_tweak_dilate_recursive (Inkscape::Selection *selection, SPItem *item, Geom::P if (dynamic_cast(item) && !dynamic_cast(item)) { GSList *children = NULL; - for (auto& child: item->_children) { + for (auto& child: item->children) { if (dynamic_cast(static_cast(&child))) { children = g_slist_prepend(children, &child); } @@ -832,7 +832,7 @@ static void tweak_colors_in_gradient(SPItem *item, Inkscape::PaintTarget fill_or double offset_l = 0; double offset_h = 0; SPObject *child_prev = NULL; - for (auto& child: vector->_children) { + for (auto& child: vector->children) { SPStop *stop = dynamic_cast(&child); if (!stop) { continue; @@ -894,7 +894,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, bool did = false; if (dynamic_cast(item)) { - for (auto& child: item->_children) { + for (auto& child: item->children) { SPItem *childItem = dynamic_cast(&child); if (childItem) { if (sp_tweak_color_recursive (mode, childItem, item_at_point, @@ -951,7 +951,7 @@ sp_tweak_color_recursive (guint mode, SPItem *item, SPItem *item_at_point, Geom::Affine i2dt = item->i2dt_affine (); if (style->filter.set && style->getFilter()) { //cycle through filter primitives - for (auto& primitive_obj: style->getFilter()->_children) { + for (auto& primitive_obj: style->getFilter()->children) { SPFilterPrimitive *primitive = dynamic_cast(&primitive_obj); if (primitive) { //if primitive is gaussianblur diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 46a0b3547..c080579f1 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -352,7 +352,7 @@ void LayerSelector::_buildSiblingEntries( ) { using Inkscape::Util::rest; - auto siblings = parent._children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed; + auto siblings = parent.children | boost::adaptors::filtered(is_layer(_desktop)) | boost::adaptors::reversed; SPObject *layer( hierarchy ? &*hierarchy : NULL ); diff --git a/src/uri-references.cpp b/src/uri-references.cpp index 23802ae65..6ef933982 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -76,7 +76,7 @@ bool URIReference::_acceptObject(SPObject *obj) const std::vector positions; while (owner->cloned) { int position = 0; - for (auto &child: owner->parent->_children) { + for (auto &child: owner->parent->children) { if(&child == owner) { break; } diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index c4b2ed59a..1565e16f3 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -720,7 +720,7 @@ static void select_stop_by_drag(GtkWidget *combo_box, SPGradient *gradient, Tool static void select_stop_in_list( GtkWidget *combo_box, SPGradient *gradient, SPStop *new_stop, GtkWidget *data, gboolean block) { int i = 0; - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { if (&ochild == new_stop) { blocked = block; @@ -765,7 +765,7 @@ static gboolean update_stop_list( GtkWidget *stop_combo, SPGradient *gradient, S /* Populate the combobox store */ std::vector sl; if ( gradient->hasStops() ) { - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { sl.push_back(&ochild); } diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 813a2d28e..5f549a77c 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -363,7 +363,7 @@ unsigned long sp_gradient_to_hhssll(SPGradient *gr) static GSList *get_all_doc_items(GSList *list, SPObject *from, bool onlyvisible, bool onlysensitive, bool ingroups, GSList const *exclude) { - for (auto& child: from->_children) { + for (auto& child: from->children) { if (SP_IS_ITEM(&child)) { list = g_slist_prepend(list, SP_ITEM(&child)); } @@ -525,7 +525,7 @@ static void verify_grad(SPGradient *gradient) int i = 0; SPStop *stop = NULL; /* count stops */ - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { i++; stop = SP_STOP(&ochild); @@ -568,7 +568,7 @@ static void select_stop_in_list( GtkWidget *vb, SPGradient *gradient, SPStop *ne GtkWidget *combo_box = static_cast(g_object_get_data(G_OBJECT(vb), "combo_box")); int i = 0; - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { if (&ochild == new_stop) { gtk_combo_box_set_active (GTK_COMBO_BOX(combo_box) , i); @@ -603,7 +603,7 @@ static void update_stop_list( GtkWidget *vb, SPGradient *gradient, SPStop *new_s /* Populate the combobox store */ GSList *sl = NULL; if ( gradient->hasStops() ) { - for (auto& ochild: gradient->_children) { + for (auto& ochild: gradient->children) { if (SP_IS_STOP(&ochild)) { sl = g_slist_append(sl, &ochild); } diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp index fd7b5f6cd..af3f03420 100644 --- a/src/widgets/stroke-marker-selector.cpp +++ b/src/widgets/stroke-marker-selector.cpp @@ -335,7 +335,7 @@ GSList *MarkerComboBox::get_marker_list (SPDocument *source) return NULL; } - for (auto& child: defs->_children) + for (auto& child: defs->children) { if (SP_IS_MARKER(&child)) { ml = g_slist_prepend (ml, &child); diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp index a2c31d6d7..cb4f6fc46 100644 --- a/testfiles/src/sp-object-test.cpp +++ b/testfiles/src/sp-object-test.cpp @@ -68,23 +68,23 @@ TEST_F(SPObjectTest, Basics) { EXPECT_EQ(c, children[1]); EXPECT_EQ(d, children[2]); a->attach(b, a->lastChild()); - EXPECT_EQ(3, a->_children.size()); + EXPECT_EQ(3, a->children.size()); a->reorder(b, b); - EXPECT_EQ(3, a->_children.size()); - EXPECT_EQ(b, &a->_children.front()); - EXPECT_EQ(d, &a->_children.back()); + EXPECT_EQ(3, a->children.size()); + EXPECT_EQ(b, &a->children.front()); + EXPECT_EQ(d, &a->children.back()); a->reorder(b, d); - EXPECT_EQ(3, a->_children.size()); - EXPECT_EQ(c, &a->_children.front()); - EXPECT_EQ(b, &a->_children.back()); + EXPECT_EQ(3, a->children.size()); + EXPECT_EQ(c, &a->children.front()); + EXPECT_EQ(b, &a->children.back()); a->reorder(d, nullptr); - EXPECT_EQ(3, a->_children.size()); - EXPECT_EQ(d, &a->_children.front()); - EXPECT_EQ(b, &a->_children.back()); + EXPECT_EQ(3, a->children.size()); + EXPECT_EQ(d, &a->children.front()); + EXPECT_EQ(b, &a->children.back()); a->reorder(c, b); - EXPECT_EQ(3, a->_children.size()); - EXPECT_EQ(d, &a->_children.front()); - EXPECT_EQ(c, &a->_children.back()); + EXPECT_EQ(3, a->children.size()); + EXPECT_EQ(d, &a->children.front()); + EXPECT_EQ(c, &a->children.back()); a->detach(b); EXPECT_EQ(c, a->lastChild()); children = a->childList(false); @@ -116,7 +116,7 @@ TEST_F(SPObjectTest, Advanced) { EXPECT_EQ(c, b->getNext()); std::vector tmp = {b, c, d, e}; int index = 0; - for(auto& child: a->_children) { + for(auto& child: a->children) { EXPECT_EQ(tmp[index++], &child); } } -- cgit v1.2.3 From 3c593bb8da3357514ff5b4f3154d08c4508ad47e Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 20 Jul 2016 11:01:17 +0200 Subject: Changed arguments and names of selection chemistry functions (bzr r14954.1.22) --- src/object-set.h | 43 ++++++- src/persp3d.cpp | 4 +- src/persp3d.h | 2 +- src/selection-chemistry.cpp | 289 ++++++++++++++++++++++---------------------- src/selection-chemistry.h | 34 +++--- src/selection.cpp | 5 +- src/selection.h | 10 +- src/ui/interface.cpp | 2 +- src/verbs.cpp | 12 +- 9 files changed, 217 insertions(+), 184 deletions(-) diff --git a/src/object-set.h b/src/object-set.h index 0f06e373b..a0bca7889 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -26,11 +26,14 @@ #include #include #include +#include #include "sp-object.h" #include "sp-item.h" +#include "sp-item-group.h" class SPBox3D; class Persp3D; +class SPDesktop; namespace Inkscape { @@ -47,6 +50,12 @@ struct is_item { } }; +struct is_group { + bool operator()(SPObject* obj) { + return SP_IS_GROUP(obj); + } +}; + struct object_to_item { typedef SPItem* result_type; SPItem* operator()(SPObject* obj) const { @@ -61,6 +70,13 @@ struct object_to_node { } }; +struct object_to_group { + typedef SPGroup* result_type; + SPGroup* operator()(SPObject* obj) const { + return SP_GROUP(obj); + } +}; + typedef boost::multi_index_container< SPObject*, boost::multi_index::indexed_by< @@ -82,9 +98,10 @@ class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; + typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange; typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; - ObjectSet() {}; + ObjectSet(SPDesktop* desktop): _desktop(desktop) {}; virtual ~ObjectSet(); /** @@ -177,18 +194,25 @@ public: /** Returns the list of selected objects. */ SPObjectRange objects(); - /** Returns the list of selected SPItems. */ + /** Returns a range of selected SPItems. */ SPItemRange items() { return SPItemRange(container.get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())); }; - /** Returns a list of the xml nodes of all selected objects. */ + /** Returns a range of selected groups. */ + SPGroupRange groups() { + return SPGroupRange (container.get() + | boost::adaptors::filtered(is_group()) + | boost::adaptors::transformed(object_to_group())); + } + + /** Returns a range of the xml nodes of all selected objects. */ XMLNodeRange xmlNodes() { return XMLNodeRange(container.get() - | boost::adaptors::filtered(is_item()) - | boost::adaptors::transformed(object_to_node())); + | boost::adaptors::filtered(is_item()) + | boost::adaptors::transformed(object_to_node())); } /** @@ -254,6 +278,13 @@ public: */ std::list const box3DList(Persp3D *persp = NULL); + /** + * Returns the desktop the selection is bound to + * + * @return the desktop the selection is bound to, or NULL if in console mode + */ + SPDesktop *desktop() { return _desktop; } + protected: virtual void _connectSignals(SPObject* object) {}; virtual void _releaseSignals(SPObject* object) {}; @@ -270,12 +301,14 @@ protected: virtual void _remove_3D_boxes_recursively(SPObject *obj); multi_index_container container; + GC::soft_ptr _desktop; std::list _3dboxes; std::unordered_map releaseConnections; }; typedef ObjectSet::SPItemRange SPItemRange; +typedef ObjectSet::SPGroupRange SPGroupRange; typedef ObjectSet::XMLNodeRange XMLNodeRange; } // namespace Inkscape diff --git a/src/persp3d.cpp b/src/persp3d.cpp index e260af8e5..7d79d3ab5 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -494,10 +494,10 @@ persp3d_on_repr_attr_changed ( Inkscape::XML::Node * /*repr*/, /* checks whether all boxes linked to this perspective are currently selected */ bool -persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection) { +persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::ObjectSet *set) { Persp3DImpl *persp_impl = persp->perspective_impl; - std::list selboxes = selection->box3DList(); + std::list selboxes = set->box3DList(); for (std::vector::iterator i = persp_impl->boxes.begin(); i != persp_impl->boxes.end(); ++i) { if (std::find(selboxes.begin(), selboxes.end(), *i) == selboxes.end()) { diff --git a/src/persp3d.h b/src/persp3d.h index be5680bcb..ce0e3c120 100644 --- a/src/persp3d.h +++ b/src/persp3d.h @@ -107,7 +107,7 @@ void persp3d_absorb(Persp3D *persp1, Persp3D *persp2); Persp3D * persp3d_create_xml_element (SPDocument *document, Persp3DImpl *dup = NULL); Persp3D * persp3d_document_first_persp (SPDocument *document); -bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::Selection *selection); +bool persp3d_has_all_boxes_in_selection (Persp3D *persp, Inkscape::ObjectSet *set); void persp3d_print_debugging_info (Persp3D *persp); void persp3d_print_debugging_info_all(SPDocument *doc); diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 81d711e77..e8c408ed8 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -12,8 +12,9 @@ * Abhishek Sharma * Kris De Gussem * Tavmjong Bah (Symbol additions) + * Adrian Boguszewski * - * Copyright (C) 1999-2010,2012 authors + * Copyright (C) 1999-2016 authors * Copyright (C) 2001-2002 Ximian, Inc. * * Released under GNU GPL, read the file 'COPYING' for more information @@ -109,6 +110,7 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "live_effects/effect-enum.h" #include "live_effects/parameter/originalpath.h" #include "layer-manager.h" +#include "object-set.h" #include "enums.h" #include "sp-item-group.h" @@ -124,6 +126,7 @@ using Inkscape::DocumentUndo; using Geom::X; using Geom::Y; using Inkscape::UI::Tools::NodeTool; +using namespace Inkscape; /* The clipboard handling is in ui/clipboard.cpp now. There are some legacy functions left here, because the layer manipulation code uses them. It should be rewritten specifically @@ -691,9 +694,13 @@ void sp_edit_invert_in_all_layers(SPDesktop *desktop) sp_edit_select_all_full(desktop, true, true); } -static void sp_selection_group_impl(std::vector p, Inkscape::XML::Node *group, Inkscape::XML::Document *xml_doc, SPDocument *doc) { +static Inkscape::XML::Node* sp_selection_group(ObjectSet *set) { + SPDocument *doc = set->desktop()->getDocument(); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); + Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); - sort(p.begin(),p.end(),sp_repr_compare_position_bool); + std::vector p(set->xmlNodes().begin(), set->xmlNodes().end()); + std::sort(p.begin(), p.end(), sp_repr_compare_position_bool); // Remember the position and parent of the topmost object. gint topmost = p.back()->position(); @@ -751,31 +758,24 @@ static void sp_selection_group_impl(std::vector p, Inkscap // Move to the position of the topmost, reduced by the number of items deleted from topmost_parent group->setPosition(topmost + 1); + + set->set(doc->getObjectByRepr(group)); + + return group; } -void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - SPDocument *doc = selection->layers()->getDocument(); - Inkscape::XML::Document *xml_doc = doc->getReprDoc(); - // Check if something is selected. if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select some objects to group.")); return; } + Inkscape::XML::Node* group = sp_selection_group(selection); - std::vector p (selection->xmlNodes().begin(), selection->xmlNodes().end()); - - selection->clear(); - - Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); - - sp_selection_group_impl(p, group, xml_doc, doc); - - DocumentUndo::done(doc, SP_VERB_SELECTION_GROUP, + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_GROUP, C_("Verb", "Group")); - selection->set(group); Inkscape::GC::release(group); } @@ -823,32 +823,16 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto } - -void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) +static void sp_selection_ungroup(ObjectSet *set) { - if (selection->isEmpty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a group to ungroup.")); - } - - // first check whether there is anything to ungroup - auto old_select = selection->items(); - std::vector new_select; GSList *groups = NULL; - for (auto item = old_select.begin(); item!=old_select.end(); ++item) { - SPItem *obj = *item; - if (dynamic_cast(obj)) { - groups = g_slist_prepend(groups, obj); - } - } - - if (groups == NULL) { - selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("No groups to ungroup in the selection.")); - g_slist_free(groups); - return; + for (auto g: set->groups()) { + groups = g_slist_prepend(groups, g); } + std::vector new_select; + auto old_select = set->items(); std::vector items(old_select.begin(), old_select.end()); - selection->clear(); // If any of the clones refer to the groups, unlink them and replace them with successors // in the items list. @@ -895,7 +879,21 @@ void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) } } - selection->addList(new_select); + set->setList(new_select); +} + +void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop) +{ + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a group to ungroup.")); + } + + if (boost::distance(selection->groups()) == 0) { + selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("No groups to ungroup in the selection.")); + return; + } + + sp_selection_ungroup(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_UNGROUP, _("Ungroup")); @@ -931,18 +929,18 @@ sp_degroup_list(std::vector &items) /** If items in the list have a common parent, return it, otherwise return NULL */ static SPGroup * -sp_item_list_common_parent_group(std::vector const &items) +sp_item_list_common_parent_group(const SPItemRange &items) { if (items.empty()) { return NULL; } - SPObject *parent = items[0]->parent; + SPObject *parent = items.front()->parent; // Strictly speaking this CAN happen, if user selects from Inkscape::XML editor if (!dynamic_cast(parent)) { return NULL; } - for (std::vector::const_iterator item=items.begin();item!=items.end();++item) { - if((*item)==items[0])continue; + for (auto item=items.begin();item!=items.end();++item) { + if((*item)==items.front())continue; if ((*item)->parent != parent) { return NULL; } @@ -980,23 +978,9 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s ((SPItem*)second)->getRepr())<0; } -void -sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) -{ - std::vector items(selection->items().begin(), selection->items().end()); - - if (items.empty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); - return; - } - - SPGroup const *group = sp_item_list_common_parent_group(items); - if (!group) { - selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); - return; - } - - Inkscape::XML::Node *grepr = const_cast(group->getRepr()); +void sp_selection_raise(ObjectSet* set) { + std::vector items(set->items().begin(), set->items().end()); + Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); /* Construct reverse-ordered list of selected children. */ std::vector rev(items); @@ -1027,55 +1011,61 @@ sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) } } } - DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE, - //TRANSLATORS: "Raise" means "to raise an object" in the undo history - C_("Undo action", "Raise")); } -void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - SPDocument *document = selection->layers()->getDocument(); - - if (selection->isEmpty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise to top.")); + if (selection->items().empty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); return; } - std::vector items(selection->items().begin(), selection->items().end()); - - SPGroup const *group = sp_item_list_common_parent_group(items); + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); if (!group) { selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } + sp_selection_raise(selection); + + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE, + //TRANSLATORS: "Raise" means "to raise an object" in the undo history + C_("Undo action", "Raise")); +} - std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); +void sp_selection_raise_to_top(ObjectSet* set) { + std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_iterator l=rl.begin(); l!=rl.end();++l) { Inkscape::XML::Node *repr =(*l); repr->setPosition(-1); } - - DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, - _("Raise to top")); } -void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - std::vector items(selection->items().begin(), selection->items().end()); - if (items.empty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); + SPDocument *document = selection->layers()->getDocument(); + + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise to top.")); return; } - SPGroup const *group = sp_item_list_common_parent_group(items); + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); if (!group) { selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } - Inkscape::XML::Node *grepr = const_cast(group->getRepr()); + sp_selection_raise_to_top(selection); + + DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, + _("Raise to top")); +} + +void sp_selection_lower(ObjectSet *set) { + std::vector items(set->items().begin(), set->items().end()); + Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); // Determine the common bbox of the selected items. Geom::OptRect selected = enclose_items(items); @@ -1110,37 +1100,37 @@ void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) } } } - - DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER, - //TRANSLATORS: "Lower" means "to lower an object" in the undo history - C_("Undo action", "Lower")); } -void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop) { - SPDocument *document = selection->layers()->getDocument(); - - if (selection->isEmpty()) { - selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower to bottom.")); + if (selection->items().empty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); return; } - std::vector items(selection->items().begin(), selection->items().end()); - - SPGroup const *group = sp_item_list_common_parent_group(items); + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); if (!group) { selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } - std::vector rl(selection->xmlNodes().begin(), selection->xmlNodes().end()); + sp_selection_lower(selection); + + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER, + //TRANSLATORS: "Lower" means "to lower an object" in the undo history + C_("Undo action", "Lower")); +} + +void sp_selection_lower_to_bottom(ObjectSet *set) { + std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); for (std::vector::const_reverse_iterator l=rl.rbegin();l!=rl.rend();++l) { gint minpos; SPObject *pp; Inkscape::XML::Node *repr = (*l); - pp = document->getObjectByRepr(repr->parent()); + pp = set->desktop()->getDocument()->getObjectByRepr(repr->parent()); minpos = 0; g_assert(dynamic_cast(pp)); for (auto& pc: pp->children) { @@ -1151,8 +1141,24 @@ void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *des } repr->setPosition(minpos); } +} + +void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop) +{ + if (selection->isEmpty()) { + selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower to bottom.")); + return; + } + + SPGroup const *group = sp_item_list_common_parent_group(selection->items()); + if (!group) { + selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); + return; + } + + sp_selection_lower_to_bottom(selection); - DocumentUndo::done(document, SP_VERB_SELECTION_TO_BACK, + DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_TO_BACK, _("Lower to bottom")); } @@ -1478,7 +1484,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone) } static bool -selection_contains_original(SPItem *item, Inkscape::Selection *selection) +selection_contains_original(SPItem *item, ObjectSet* set) { bool contains_original = false; @@ -1489,7 +1495,7 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection) { item_use = use->get_original(); use = dynamic_cast(item_use); - contains_original |= selection->includes(item_use); + contains_original |= set->includes(item_use); if (item_use == item_use_first) break; } @@ -1498,7 +1504,7 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection) // data is part of the selection SPTRef *tref = dynamic_cast(item); if (!contains_original && tref) { - contains_original = selection->includes(tref->getObjectReferredTo()); + contains_original = set->includes(tref->getObjectReferredTo()); } return contains_original; @@ -1506,14 +1512,14 @@ selection_contains_original(SPItem *item, Inkscape::Selection *selection) static bool -selection_contains_both_clone_and_original(Inkscape::Selection *selection) +selection_contains_both_clone_and_original(ObjectSet *set) { bool clone_with_original = false; - auto items = selection->items(); + auto items = set->items(); for (auto l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if (item) { - clone_with_original |= selection_contains_original(item, selection); + clone_with_original |= selection_contains_original(item, set); if (clone_with_original) break; } @@ -1527,21 +1533,21 @@ value of set_i2d==false is only used by seltrans when it's dragging objects live that case, items are already in the new position, but the repr is in the old, and this function then simply updates the repr from item->transform. */ -void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center) +void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center) { - if (selection->isEmpty()) + if (set->isEmpty()) return; // For each perspective with a box in selection, check whether all boxes are selected and // unlink all non-selected boxes. Persp3D *persp; Persp3D *transf_persp; - std::list plist = selection->perspList(); + std::list plist = set->perspList(); for (std::list::iterator i = plist.begin(); i != plist.end(); ++i) { persp = (Persp3D *) (*i); - if (!persp3d_has_all_boxes_in_selection (persp, selection)) { - std::list selboxes = selection->box3DList(persp); + if (!persp3d_has_all_boxes_in_selection (persp, set)) { + std::list selboxes = set->box3DList(persp); // create a new perspective as a copy of the current one and link the selected boxes to it transf_persp = persp3d_create_xml_element (persp->document, persp->perspective_impl); @@ -1554,14 +1560,14 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons persp3d_apply_affine_transformation(transf_persp, affine); } - auto items = selection->items(); + auto items = set->items(); for (auto l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if( dynamic_cast(item) ) { // An SVG element cannot have a transform. We could change 'x' and 'y' in response // to a translation... but leave that for another day. - selection->desktop()->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot transform an embedded SVG.")); + set->desktop()->messageStack()->flash(Inkscape::WARNING_MESSAGE, _("Cannot transform an embedded SVG.")); break; } @@ -1575,17 +1581,17 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons #endif // we're moving both a clone and its original or any ancestor in clone chain? - bool transform_clone_with_original = selection_contains_original(item, selection); + bool transform_clone_with_original = selection_contains_original(item, set); // ...both a text-on-path and its path? bool transform_textpath_with_path = ((dynamic_cast(item) && item->firstChild() && dynamic_cast(item->firstChild())) - && selection->includes( sp_textpath_get_path_item(dynamic_cast(item->firstChild())) )); + && set->includes( sp_textpath_get_path_item(dynamic_cast(item->firstChild())) )); // ...both a flowtext and its frame? - bool transform_flowtext_with_frame = (dynamic_cast(item) && selection->includes( dynamic_cast(item)->get_frame(NULL))); // (only the first frame is checked so far) + bool transform_flowtext_with_frame = (dynamic_cast(item) && set->includes( dynamic_cast(item)->get_frame(NULL))); // (only the first frame is checked so far) // ...both an offset and its source? - bool transform_offset_with_source = (dynamic_cast(item) && dynamic_cast(item)->sourceHref) && selection->includes( sp_offset_get_source(dynamic_cast(item)) ); + bool transform_offset_with_source = (dynamic_cast(item) && dynamic_cast(item)->sourceHref) && set->includes( sp_offset_get_source(dynamic_cast(item)) ); // If we're moving a connector, we want to detach it // from shapes that aren't part of the selection, but @@ -1596,7 +1602,7 @@ void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine cons SPItem *attItem[2] = {0, 0}; path->connEndPair.getAttachedItems(attItem); for (int n = 0; n < 2; ++n) { - if (!selection->includes(attItem[n])) { + if (!set->includes(attItem[n])) { sp_conn_end_detach(item, n); } } @@ -1735,14 +1741,14 @@ void sp_selection_remove_transform(SPDesktop *desktop) } void -sp_selection_scale_absolute(Inkscape::Selection *selection, +sp_selection_scale_absolute(ObjectSet *set, double const x0, double const x1, double const y0, double const y1) { - if (selection->isEmpty()) + if (set->isEmpty()) return; - Geom::OptRect bbox = selection->visualBounds(); + Geom::OptRect bbox = set->visualBounds(); if ( !bbox ) { return; } @@ -1755,16 +1761,16 @@ sp_selection_scale_absolute(Inkscape::Selection *selection, Geom::Translate const o2n(x0, y0); Geom::Affine const final( p2o * scale * o2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } -void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point const &align, Geom::Scale const &scale) +void sp_selection_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale) { - if (selection->isEmpty()) + if (set->isEmpty()) return; - Geom::OptRect bbox = selection->visualBounds(); + Geom::OptRect bbox = set->visualBounds(); if ( !bbox ) { return; @@ -1780,21 +1786,21 @@ void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point con Geom::Translate const n2d(-align); Geom::Translate const d2n(align); Geom::Affine const final( n2d * scale * d2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } void -sp_selection_rotate_relative(Inkscape::Selection *selection, Geom::Point const ¢er, gdouble const angle_degrees) +sp_selection_rotate_relative(ObjectSet *set, Geom::Point const ¢er, gdouble const angle_degrees) { Geom::Translate const d2n(center); Geom::Translate const n2d(-center); Geom::Rotate const rotate(Geom::Rotate::from_degrees(angle_degrees)); Geom::Affine const final( Geom::Affine(n2d) * rotate * d2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } void -sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &align, double dx, double dy) +sp_selection_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy) { Geom::Translate const d2n(align); Geom::Translate const n2d(-align); @@ -1802,17 +1808,17 @@ sp_selection_skew_relative(Inkscape::Selection *selection, Geom::Point const &al dx, 1, 0, 0); Geom::Affine const final( n2d * skew * d2n ); - sp_selection_apply_affine(selection, final); + sp_selection_apply_affine(set, final); } -void sp_selection_move_relative(Inkscape::Selection *selection, Geom::Point const &move, bool compensate) +void sp_selection_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate) { - sp_selection_apply_affine(selection, Geom::Affine(Geom::Translate(move)), true, compensate); + sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate); } -void sp_selection_move_relative(Inkscape::Selection *selection, double dx, double dy) +void sp_selection_move_relative(ObjectSet *set, double dx, double dy) { - sp_selection_apply_affine(selection, Geom::Affine(Geom::Translate(dx, dy))); + sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy))); } /** @@ -2244,8 +2250,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow) void sp_selection_scale_screen(Inkscape::Selection *selection, gdouble grow_pixels) { - sp_selection_scale(selection, - grow_pixels / selection->desktop()->current_zoom()); + sp_selection_scale(selection, grow_pixels / selection->desktop()->current_zoom()); } void @@ -3471,13 +3476,13 @@ void sp_selection_untile(SPDesktop *desktop) } } -void sp_selection_get_export_hints(Inkscape::Selection *selection, Glib::ustring &filename, float *xdpi, float *ydpi) +void sp_selection_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi) { - if (selection->isEmpty()) { + if (set->isEmpty()) { return; } - auto reprlst = selection->xmlNodes(); + auto reprlst = set->xmlNodes(); bool filename_search = TRUE; bool xdpi_search = TRUE; bool ydpi_search = TRUE; @@ -3947,18 +3952,13 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ if (grouping == PREFS_MASKOBJECT_GROUPING_ALL) { // group all those objects into one group // and apply mask to that - Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); + ObjectSet* set = new ObjectSet(selection->desktop()); + set->add(apply_to_items.begin(), apply_to_items.end()); - // make a note we should ungroup this when unsetting mask - group->setAttribute("inkscape:groupmode", "maskhelper"); - - std::vector reprs_to_group; - for (std::vector::const_iterator i = apply_to_items.begin(); i != apply_to_items.end(); ++i) { - reprs_to_group.push_back(static_cast(*i)->getRepr()); - } items_to_select.clear(); - sp_selection_group_impl(reprs_to_group, group, xml_doc, doc); + Inkscape::XML::Node *group = sp_selection_group(set); + group->setAttribute("inkscape:groupmode", "maskhelper"); // apply clip/mask only to newly created group apply_to_items.clear(); @@ -3966,6 +3966,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ items_to_select.push_back((SPItem*)(doc->getObjectByRepr(group))); + delete set; Inkscape::GC::release(group); } if (grouping == PREFS_MASKOBJECT_GROUPING_SEPARATE) { diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index 82b91c617..cfae84eef 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -26,6 +26,7 @@ class SPDesktop; namespace Inkscape { class Selection; +class ObjectSet; namespace LivePathEffect { class PathParam; @@ -74,14 +75,19 @@ void sp_selection_unsymbol(SPDesktop *desktop); void sp_selection_tile(SPDesktop *desktop, bool apply = true); void sp_selection_untile(SPDesktop *desktop); -void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise(Inkscape::ObjectSet* set); +void sp_selection_raise_to_top(Inkscape::ObjectSet* set); +void sp_selection_lower(Inkscape::ObjectSet *set); +void sp_selection_lower_to_bottom(Inkscape::ObjectSet *set); + +void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop); SPCSSAttr *take_style_from_item (SPObject *object); @@ -103,14 +109,14 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false ) void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false ); void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false ); -void sp_selection_apply_affine(Inkscape::Selection *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); +void sp_selection_apply_affine(Inkscape::ObjectSet *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); void sp_selection_remove_transform (SPDesktop *desktop); -void sp_selection_scale_absolute (Inkscape::Selection *selection, double x0, double x1, double y0, double y1); -void sp_selection_scale_relative(Inkscape::Selection *selection, Geom::Point const &align, Geom::Scale const &scale); -void sp_selection_rotate_relative (Inkscape::Selection *selection, Geom::Point const ¢er, double angle); -void sp_selection_skew_relative (Inkscape::Selection *selection, Geom::Point const &align, double dx, double dy); -void sp_selection_move_relative (Inkscape::Selection *selection, Geom::Point const &move, bool compensate = true); -void sp_selection_move_relative (Inkscape::Selection *selection, double dx, double dy); +void sp_selection_scale_absolute (Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); +void sp_selection_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); +void sp_selection_rotate_relative (Inkscape::ObjectSet *set, Geom::Point const ¢er, double angle); +void sp_selection_skew_relative (Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy); +void sp_selection_move_relative (Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true); +void sp_selection_move_relative (Inkscape::ObjectSet *set, double dx, double dy); void sp_selection_rotate_90 (SPDesktop *desktop, bool ccw); void sp_selection_rotate (Inkscape::Selection *selection, double angle); @@ -151,7 +157,7 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item); void sp_undo (SPDesktop *desktop, SPDocument *doc); void sp_redo (SPDesktop *desktop, SPDocument *doc); -void sp_selection_get_export_hints (Inkscape::Selection *selection, Glib::ustring &filename, float *xdpi, float *ydpi); +void sp_selection_get_export_hints (Inkscape::ObjectSet* set, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_document_get_export_hints (SPDocument * doc, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_selection_create_bitmap_copy (SPDesktop *desktop); diff --git a/src/selection.cpp b/src/selection.cpp index 09eaf6c0e..bdd4f0dc7 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -27,15 +27,16 @@ #include "sp-shape.h" #include "sp-path.h" +#include "desktop.h" #include "document.h" #define SP_SELECTION_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE + 1) namespace Inkscape { -Selection::Selection(LayerModel *layers, SPDesktop *desktop) : +Selection::Selection(LayerModel *layers, SPDesktop *desktop): + ObjectSet(desktop), _layers(layers), - _desktop(desktop), _selection_context(NULL), _flags(0), _idle(0) diff --git a/src/selection.h b/src/selection.h index 7027a388f..4ea70c38d 100644 --- a/src/selection.h +++ b/src/selection.h @@ -23,11 +23,9 @@ #include "inkgc/gc-managed.h" #include "gc-finalized.h" #include "gc-anchored.h" -#include "inkgc/gc-soft-ptr.h" #include "sp-item.h" #include "object-set.h" -class SPDesktop; class SPItem; namespace Inkscape { @@ -80,12 +78,7 @@ public: */ LayerModel *layers() { return _layers; } - /** - * Returns the desktop the selection is bound to - * - * @return the desktop the selection is bound to, or NULL if in console mode - */ - SPDesktop *desktop() { return _desktop; } + /** * Returns active layer for selection (currentLayer or its parent). @@ -228,7 +221,6 @@ private: void _releaseContext(SPObject *obj); LayerModel *_layers; - GC::soft_ptr _desktop; SPObject* _selection_context; unsigned int _flags; unsigned int _idle; diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index bcf055654..d19526105 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -1916,7 +1916,7 @@ void ContextMenu::MakeGroupMenu(void) void ContextMenu::ActivateGroup(void) { - sp_selection_group(_desktop->selection, _desktop); + sp_selection_group_ui(_desktop->selection, _desktop); } void ContextMenu::ActivateUngroup(void) diff --git a/src/verbs.cpp b/src/verbs.cpp index 299cfe8e7..8255ea1ea 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1133,22 +1133,22 @@ void SelectionVerb::perform(SPAction *action, void *data) sp_selected_path_slice(selection, dt); break; case SP_VERB_SELECTION_TO_FRONT: - sp_selection_raise_to_top(selection, dt); + sp_selection_raise_to_top_ui(selection, dt); break; case SP_VERB_SELECTION_TO_BACK: - sp_selection_lower_to_bottom(selection, dt); + sp_selection_lower_to_bottom_ui(selection, dt); break; case SP_VERB_SELECTION_RAISE: - sp_selection_raise(selection, dt); + sp_selection_raise_ui(selection, dt); break; case SP_VERB_SELECTION_LOWER: - sp_selection_lower(selection, dt); + sp_selection_lower_ui(selection, dt); break; case SP_VERB_SELECTION_GROUP: - sp_selection_group(selection, dt); + sp_selection_group_ui(selection, dt); break; case SP_VERB_SELECTION_UNGROUP: - sp_selection_ungroup(selection, dt); + sp_selection_ungroup_ui(selection, dt); break; case SP_VERB_SELECTION_UNGROUP_POP_SELECTION: sp_selection_ungroup_pop_selection(selection, dt); -- cgit v1.2.3 From a227e8d45e7eaa6bf25d8ab65fbd404bc4597306 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 20 Jul 2016 13:45:05 +0200 Subject: Changed signatures of boolean functions (bzr r14954.1.24) --- src/object-set.h | 1 + src/splivarot.cpp | 170 +++++++++++++++++++++++-------------- src/splivarot.h | 10 ++- src/ui/tools/calligraphic-tool.cpp | 4 +- src/ui/tools/eraser-tool.cpp | 6 +- src/ui/tools/flood-tool.cpp | 2 +- src/ui/tools/spray-tool.cpp | 2 +- 7 files changed, 121 insertions(+), 74 deletions(-) diff --git a/src/object-set.h b/src/object-set.h index a0bca7889..c7f1921cf 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -102,6 +102,7 @@ public: typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; ObjectSet(SPDesktop* desktop): _desktop(desktop) {}; + ObjectSet(): _desktop(nullptr) {}; virtual ~ObjectSet(); /** diff --git a/src/splivarot.cpp b/src/splivarot.cpp index a4c4ac6cd..54b9bff2c 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -13,7 +13,6 @@ */ #ifdef HAVE_CONFIG_H -# include #endif #include @@ -23,14 +22,11 @@ #include "xml/repr.h" #include "svg/svg.h" #include "sp-path.h" -#include "sp-shape.h" #include "sp-image.h" #include "sp-marker.h" -#include "enums.h" #include "sp-text.h" #include "sp-flowtext.h" #include "text-editing.h" -#include "sp-item-group.h" #include "style.h" #include "document.h" #include "document-undo.h" @@ -38,15 +34,9 @@ #include "message-stack.h" #include "selection.h" -#include "desktop.h" -#include "display/canvas-bpath.h" -#include "display/curve.h" #include -#include "preferences.h" -#include "xml/repr.h" #include "xml/repr-sorting.h" -#include <2geom/pathvector.h> #include <2geom/svg-path-writer.h> #include "helper/geom.h" @@ -57,65 +47,96 @@ #include "verbs.h" #include "2geom/svg-path-parser.h" // to get from SVG on boolean to Geom::Path +enum BoolOpErrors { + DONE, + DONE_NO_PATH, + DONE_NO_ACTION, + ERR_TOO_LESS_PATHS_1, + ERR_TOO_LESS_PATHS_2, + ERR_NO_PATHS, + ERR_Z_ORDER +}; + using Inkscape::DocumentUndo; bool Ancetre(Inkscape::XML::Node *a, Inkscape::XML::Node *who); -void sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb=SP_VERB_NONE, const Glib::ustring description=""); +void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, + const unsigned int verb = SP_VERB_NONE, const Glib::ustring description = ""); +BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet *set, bool_op bop); void sp_selected_path_do_offset(SPDesktop *desktop, bool expand, double prefOffset); void sp_selected_path_create_offset_object(SPDesktop *desktop, int expand, bool updating); void sp_selected_path_union(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_union, SP_VERB_SELECTION_UNION, _("Union")); } void -sp_selected_path_union_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop) +sp_selected_path_union_skip_undo(Inkscape::ObjectSet *set) { - sp_selected_path_boolop(selection, desktop, bool_op_union, SP_VERB_NONE, _("Union")); + sp_selected_path_boolop(set, bool_op_union); } void sp_selected_path_intersect(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_inters, SP_VERB_SELECTION_INTERSECT, _("Intersection")); +} + +void +sp_selected_path_intersect_skip_undo(Inkscape::ObjectSet *set) +{ + sp_selected_path_boolop(set, bool_op_inters); } void sp_selected_path_diff(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_diff, SP_VERB_SELECTION_DIFF, _("Difference")); } void -sp_selected_path_diff_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop) +sp_selected_path_diff_skip_undo(Inkscape::ObjectSet *set) { - sp_selected_path_boolop(selection, desktop, bool_op_diff, SP_VERB_NONE, _("Difference")); + sp_selected_path_boolop(set, bool_op_diff); } void sp_selected_path_symdiff(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_symdiff, SP_VERB_SELECTION_SYMDIFF, _("Exclusion")); } + +void +sp_selected_path_symdiff_skip_undo(Inkscape::ObjectSet *set) +{ + sp_selected_path_boolop(set, bool_op_symdiff); +} + void sp_selected_path_cut(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_cut, SP_VERB_SELECTION_CUT, _("Division")); } void -sp_selected_path_cut_skip_undo(Inkscape::Selection *selection, SPDesktop *desktop) +sp_selected_path_cut_skip_undo(Inkscape::ObjectSet *set) { - sp_selected_path_boolop(selection, desktop, bool_op_cut, SP_VERB_NONE, _("Division")); + sp_selected_path_boolop(set, bool_op_cut); } void sp_selected_path_slice(Inkscape::Selection *selection, SPDesktop *desktop) { - sp_selected_path_boolop(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path")); + sp_selected_path_boolop_ui(selection, desktop, bool_op_slice, SP_VERB_SELECTION_SLICE, _("Cut path")); +} + +void +sp_selected_path_slice_skip_undo(Inkscape::ObjectSet *set) +{ + sp_selected_path_boolop(set, bool_op_slice); } // helper for printing error messages, regardless of whether we have a GUI or not @@ -331,20 +352,17 @@ Geom::PathVector pathliv_to_pathvector(Path *pathliv){ // boolean operations on the desktop // take the source paths from the file, do the operation, delete the originals and add the results -void -sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, const Glib::ustring description) +BoolOpErrors sp_selected_path_boolop(Inkscape::ObjectSet * set, bool_op bop) { - SPDocument *doc = selection->layers()->getDocument(); - std::vector il(selection->items().begin(), selection->items().end()); - + SPDocument *doc = set->desktop()->getDocument(); + std::vector il(set->items().begin(), set->items().end()); + // allow union on a single object for the purpose of removing self overlapse (svn log, revision 13334) - if ( (il.size() < 2) && (bop != bool_op_union)) { - boolop_display_error_message(desktop, _("Select at least 2 paths to perform a boolean operation.")); - return; + if (il.size() < 2 && bop != bool_op_union) { + return ERR_TOO_LESS_PATHS_2; } - else if ( il.size() < 1 ) { - boolop_display_error_message(desktop, _("Select at least 1 path to perform a boolean union.")); - return; + else if (il.size() < 1) { + return ERR_TOO_LESS_PATHS_1; } g_assert(!il.empty()); @@ -360,8 +378,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool Inkscape::XML::Node *b = il.back()->getRepr(); if (a == NULL || b == NULL) { - boolop_display_error_message(desktop, _("Unable to determine the z-order of the objects selected for difference, XOR, division, or path cut.")); - return; + return ERR_Z_ORDER; } if (Ancetre(a, b)) { @@ -375,8 +392,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool // find their lowest common ancestor Inkscape::XML::Node *parent = LCA(a, b); if (parent == NULL) { - boolop_display_error_message(desktop, _("Unable to determine the z-order of the objects selected for difference, XOR, division, or path cut.")); - return; + return ERR_Z_ORDER; } // find the children of the LCA that lead from it to the a and b @@ -405,8 +421,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool SPItem *item = *l; if (!SP_IS_SHAPE(item) && !SP_IS_TEXT(item) && !SP_IS_FLOWTEXT(item)) { - boolop_display_error_message(desktop, _("One of the objects is not a path, cannot perform boolean operation.")); - return; + return ERR_NO_PATHS; } } @@ -439,7 +454,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool if (originaux[curOrig] == NULL || originaux[curOrig]->descr_cmd.size() <= 1) { for (int i = curOrig; i >= 0; i--) delete originaux[i]; - return; + return DONE_NO_ACTION; } curOrig++; } @@ -500,18 +515,18 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool bool zeroA = theShapeA->numberOfEdges() == 0; bool zeroB = theShapeB->numberOfEdges() == 0; if (zeroA || zeroB) { - // We might need to do a swap. Apply the above rules depending on operation type. - bool resultIsB = ((bop == bool_op_union || bop == bool_op_symdiff) && zeroA) - || ((bop == bool_op_inters) && zeroB) - || (bop == bool_op_diff); + // We might need to do a swap. Apply the above rules depending on operation type. + bool resultIsB = ((bop == bool_op_union || bop == bool_op_symdiff) && zeroA) + || ((bop == bool_op_inters) && zeroB) + || (bop == bool_op_diff); if (resultIsB) { - // Swap A and B to use B as the result + // Swap A and B to use B as the result Shape *swap = theShapeB; theShapeB = theShapeA; theShapeA = swap; } } else { - // Just do the Boolean operation as usual + // Just do the Boolean operation as usual // les elements arrivent en ordre inverse dans la liste theShape->Booleen(theShapeB, theShapeA, bop); Shape *swap = theShape; @@ -672,24 +687,23 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ (*l)->deleteObject(); } - DocumentUndo::done(doc, SP_VERB_NONE, description); - selection->clear(); + set->clear(); delete res; - return; + return DONE_NO_PATH; } // get the source path object SPObject *source; if ( bop == bool_op_diff || bop == bool_op_cut || bop == bool_op_slice ) { if (reverseOrderForOp) { - source = il[0]; + source = il[0]; } else { - source = il.back(); + source = il.back(); } } else { // find out the bottom object - std::vector sorted(selection->xmlNodes().begin(), selection->xmlNodes().end()); + std::vector sorted(set->xmlNodes().begin(), set->xmlNodes().end()); sort(sorted.begin(),sorted.end(),sp_repr_compare_position_bool); @@ -717,7 +731,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool gchar *title = source->title(); gchar *desc = source->desc(); // remove source paths - selection->clear(); + set->clear(); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ // if this is the bottommost object, if (!strcmp(reinterpret_cast(*l)->getRepr()->attribute("id"), id)) { @@ -796,7 +810,7 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool // move to the saved position repr->setPosition(pos > 0 ? pos : 0); - selection->add(repr); + set->add(doc->getObjectByRepr(repr)); Inkscape::GC::release(repr); delete resPath[i]; @@ -824,14 +838,14 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool repr->setAttribute("id", id); parent->appendChild(repr); if (title) { - doc->getObjectByRepr(repr)->setTitle(title); - } + doc->getObjectByRepr(repr)->setTitle(title); + } if (desc) { - doc->getObjectByRepr(repr)->setDesc(desc); + doc->getObjectByRepr(repr)->setDesc(desc); } - repr->setPosition(pos > 0 ? pos : 0); + repr->setPosition(pos > 0 ? pos : 0); - selection->add(repr); + set->add(doc->getObjectByRepr(repr)); Inkscape::GC::release(repr); } @@ -839,11 +853,39 @@ sp_selected_path_boolop(Inkscape::Selection *selection, SPDesktop *desktop, bool if (title) g_free(title); if (desc) g_free(desc); - if (verb != SP_VERB_NONE) { - DocumentUndo::done(doc, verb, description); - } - delete res; + + return DONE; +} + +void sp_selected_path_boolop_ui(Inkscape::Selection *selection, SPDesktop *desktop, bool_op bop, const unsigned int verb, + const Glib::ustring description) +{ + SPDocument *doc = selection->desktop()->getDocument(); + BoolOpErrors returnCode = sp_selected_path_boolop(selection, bop); + switch(returnCode) { + case ERR_TOO_LESS_PATHS_1: + boolop_display_error_message(desktop, _("Select at least 1 path to perform a boolean union.")); + return; + case ERR_TOO_LESS_PATHS_2: + boolop_display_error_message(desktop, _("Select at least 2 paths to perform a boolean operation.")); + return; + case ERR_NO_PATHS: + boolop_display_error_message(desktop, _("One of the objects is not a path, cannot perform boolean operation.")); + return; + case ERR_Z_ORDER: + boolop_display_error_message(desktop, _("Unable to determine the z-order of the objects selected for difference, XOR, division, or path cut.")); + return; + case DONE_NO_PATH: + DocumentUndo::done(doc, SP_VERB_NONE, description); + return; + case DONE: + DocumentUndo::done(doc, verb, description); + return; + case DONE_NO_ACTION: + default: + return; + } } static diff --git a/src/splivarot.h b/src/splivarot.h index 421c9c4b8..9b07a5a71 100644 --- a/src/splivarot.h +++ b/src/splivarot.h @@ -17,6 +17,7 @@ class SPItem; namespace Inkscape { class Selection; + class ObjectSet; } // boolean operations @@ -27,14 +28,17 @@ namespace Inkscape { // command-line mode, i.e. without a desktop. If a desktop is not // provided (desktop == NULL), error messages will be shown on stderr. void sp_selected_path_union (Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selected_path_union_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_union_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_intersect (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_intersect_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_diff (Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selected_path_diff_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_diff_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_symdiff (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_symdiff_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_cut (Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selected_path_cut_skip_undo (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_cut_skip_undo (Inkscape::ObjectSet *set); void sp_selected_path_slice (Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selected_path_slice_skip_undo (Inkscape::ObjectSet *set); // offset/inset of a curve // takes the fill-rule in consideration diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp index 28195eb75..12dcedd21 100644 --- a/src/ui/tools/calligraphic-tool.cpp +++ b/src/ui/tools/calligraphic-tool.cpp @@ -930,10 +930,10 @@ void CalligraphicTool::set_to_accumulated(bool unionize, bool subtract) { if (unionize) { desktop->getSelection()->add(this->repr); - sp_selected_path_union_skip_undo(desktop->getSelection(), desktop); + sp_selected_path_union_skip_undo(desktop->getSelection()); } else if (subtract) { desktop->getSelection()->add(this->repr); - sp_selected_path_diff_skip_undo(desktop->getSelection(), desktop); + sp_selected_path_diff_skip_undo(desktop->getSelection()); } else { if (this->keep_selected) { desktop->getSelection()->set(this->repr); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 534123e90..8ed75fbdb 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -718,7 +718,7 @@ void EraserTool::set_to_accumulated() { Inkscape::GC::release(dup); // parent takes over selection->set(dup); if (!this->nowidth) { - sp_selected_path_union_skip_undo(selection, desktop); + sp_selected_path_union_skip_undo(selection); } selection->add(item); if(item->style->fill_rule.value == SP_WIND_RULE_EVENODD){ @@ -729,9 +729,9 @@ void EraserTool::set_to_accumulated() { css = 0; } if (this->nowidth) { - sp_selected_path_cut_skip_undo(selection, desktop); + sp_selected_path_cut_skip_undo(selection); } else { - sp_selected_path_diff_skip_undo(selection, desktop); + sp_selected_path_diff_skip_undo(selection); } workDone = true; // TODO set this only if something was cut. bool break_apart = prefs->getBool("/tools/eraser/break_apart", false); diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp index 748c82717..b5a2fd871 100644 --- a/src/ui/tools/flood-tool.cpp +++ b/src/ui/tools/flood-tool.cpp @@ -456,7 +456,7 @@ static void do_trace(bitmap_coords_info bci, guchar *trace_px, SPDesktop *deskto ngettext("Area filled, path with %d node created and unioned with selection.","Area filled, path with %d nodes created and unioned with selection.", SP_PATH(reprobj)->nodesInPath()), SP_PATH(reprobj)->nodesInPath() ); selection->add(reprobj); - sp_selected_path_union_skip_undo(desktop->getSelection(), desktop); + sp_selected_path_union_skip_undo(desktop->getSelection()); } else { desktop->messageStack()->flashF( Inkscape::WARNING_MESSAGE, ngettext("Area filled, path with %d node created.","Area filled, path with %d nodes created.", diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index 5d804a9bd..a95e5aa96 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -1050,7 +1050,7 @@ static bool sp_spray_recursive(SPDesktop *desktop, if (unionResult) { // No need to add the very first item (initialized with NULL). selection->add(unionResult); } - sp_selected_path_union_skip_undo(selection, selection->desktop()); + sp_selected_path_union_skip_undo(selection); selection->add(parent_item); Inkscape::GC::release(copy); did = true; -- cgit v1.2.3 From d31923a399f3c7cde85aae8406191e37ad877eb7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Fri, 22 Jul 2016 11:32:35 +0200 Subject: Improved spray tool, changed selection to object set (bzr r14954.1.25) --- src/object-set.h | 1 + src/ui/tools/spray-tool.cpp | 54 +++++++++++++++++++++------------------------ src/ui/tools/spray-tool.h | 9 +++++++- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/src/object-set.h b/src/object-set.h index c7f1921cf..b4178bd37 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -121,6 +121,7 @@ public: for(auto it = from; it != to; ++it) { _add(*it); } + _emitSignals(); } /** diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index a95e5aa96..49ff50428 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -13,6 +13,7 @@ * Jon A. Cruz * Abhishek Sharma * Jabiertxo Arraiza + * Adrian Boguszewski * * Copyright (C) 2009 authors * @@ -196,6 +197,7 @@ SprayTool::SprayTool() } SprayTool::~SprayTool() { + object_set.clear(); this->enableGrDrag(false); this->style_set_connection.disconnect(); @@ -862,7 +864,7 @@ static bool fit_item(SPDesktop *desktop, } static bool sp_spray_recursive(SPDesktop *desktop, - Inkscape::Selection *selection, + Inkscape::ObjectSet *set, SPItem *item, Geom::Point p, Geom::Point /*vector*/, @@ -907,7 +909,7 @@ static bool sp_spray_recursive(SPDesktop *desktop, if (box) { // convert 3D boxes to ordinary groups before spraying their shapes item = box3d_convert_to_group(box); - selection->add(item); + set->add(item); } } @@ -996,23 +998,11 @@ static bool sp_spray_recursive(SPDesktop *desktop, } #ifdef ENABLE_SPRAY_MODE_SINGLE_PATH } else if (mode == SPRAY_MODE_SINGLE_PATH) { + long setSize = boost::distance(set->items()); + SPItem *parent_item = setSize > 0 ? set->items().front() : nullptr; // Initial object + SPItem *unionResult = setSize > 1 ? *(++set->items().begin()) : nullptr; // Previous union + SPItem *item_copied = nullptr; // Projected object - SPItem *parent_item = NULL; // Initial object - SPItem *item_copied = NULL; // Projected object - SPItem *unionResult = NULL; // Previous union - - int i=1; - auto items= selection->items(); - for(auto it=items.begin();it!=items.end(); ++it){ - SPItem *item1 = *it; - if (i == 1) { - parent_item = item1; - } - if (i == 2) { - unionResult = item1; - } - i++; - } if (parent_item) { SPDocument *doc = parent_item->document; Inkscape::XML::Document* xml_doc = doc->getReprDoc(); @@ -1045,13 +1035,13 @@ static bool sp_spray_recursive(SPDesktop *desktop, sp_item_move_rel(item_copied, Geom::Translate(move[Geom::X], -move[Geom::Y])); // Union and duplication - selection->clear(); - selection->add(item_copied); + set->clear(); + set->add(item_copied); if (unionResult) { // No need to add the very first item (initialized with NULL). - selection->add(unionResult); + set->add(unionResult); } - sp_selected_path_union_skip_undo(selection); - selection->add(parent_item); + sp_selected_path_union_skip_undo(set); + set->add(parent_item); Inkscape::GC::release(copy); did = true; } @@ -1146,9 +1136,8 @@ static bool sp_spray_recursive(SPDesktop *desktop, static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point p, Geom::Point vector, bool reverse) { SPDesktop *desktop = tc->desktop; - Inkscape::Selection *selection = desktop->getSelection(); - - if (selection->isEmpty()) { + Inkscape::ObjectSet *set = tc->objectSet(); + if (set->isEmpty()) { return false; } @@ -1170,7 +1159,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point double move_standard_deviation = get_move_standard_deviation(tc); { - std::vector const items(selection->items().begin(), selection->items().end()); + std::vector const items(set->items().begin(), set->items().end()); for(std::vector::const_iterator i=items.begin();i!=items.end(); ++i){ SPItem *item = *i; @@ -1182,7 +1171,7 @@ static bool sp_spray_dilate(SprayTool *tc, Geom::Point /*event_p*/, Geom::Point SPItem *item = *i; g_assert(item != NULL); if (sp_spray_recursive(desktop - , selection + , set , item , p, vector , tc->mode @@ -1276,6 +1265,11 @@ bool SprayTool::root_handler(GdkEvent* event) { this->is_dilating = true; this->has_dilated = false; + object_set = *desktop->getSelection(); + if (mode == SPRAY_MODE_SINGLE_PATH) { + desktop->getSelection()->clear(); + } + if(this->is_dilating && event->button.button == 1 && !this->space_panning) { sp_spray_dilate(this, motion_w, desktop->dt2doc(motion_dt), Geom::Point(0,0), MOD__SHIFT(event)); } @@ -1299,7 +1293,7 @@ bool SprayTool::root_handler(GdkEvent* event) { guint num = 0; if (!desktop->selection->isEmpty()) { - num = boost::distance(desktop->selection->items() ); + num = (guint) boost::distance(desktop->selection->items()); } if (num == 0) { this->message_context->flash(Inkscape::ERROR_MESSAGE, _("Nothing selected! Select objects to spray.")); @@ -1384,6 +1378,8 @@ bool SprayTool::root_handler(GdkEvent* event) { SP_VERB_CONTEXT_SPRAY, _("Spray with clones")); break; case SPRAY_MODE_SINGLE_PATH: + sp_selected_path_union_skip_undo(objectSet()); + desktop->getSelection()->add(object_set.objects().begin(), object_set.objects().end()); DocumentUndo::done(this->desktop->getDocument(), SP_VERB_CONTEXT_SPRAY, _("Spray in single path")); break; diff --git a/src/ui/tools/spray-tool.h b/src/ui/tools/spray-tool.h index c81110b37..d5504d565 100644 --- a/src/ui/tools/spray-tool.h +++ b/src/ui/tools/spray-tool.h @@ -13,6 +13,7 @@ * Vincent MONTAGNE * Pierre BARBRY-BLOT * Jabiertxo ARRAIZA + * Adrian Boguszewski * * Copyright (C) 2009 authors * @@ -120,8 +121,14 @@ public: virtual const std::string& getPrefsPath(); - void update_cursor(bool /*with_shift*/); + + ObjectSet* objectSet() { + return &object_set; + } + +private: + ObjectSet object_set; }; } -- cgit v1.2.3 From 40136abc93171fd163a78472cdeaf5d875acefda Mon Sep 17 00:00:00 2001 From: Krzysztof Kosi??ski Date: Sun, 24 Jul 2016 22:27:21 -0700 Subject: Revert the canvas widget changes, which cause performance regressions on GTK2 on some platforms. (bzr r15023.3.1) --- src/desktop.cpp | 19 ++- src/desktop.h | 1 + src/display/sp-canvas.cpp | 376 ++++++++++++++++++++++++---------------------- src/display/sp-canvas.h | 33 ++-- 4 files changed, 229 insertions(+), 200 deletions(-) diff --git a/src/desktop.cpp b/src/desktop.cpp index d482d0d7f..331ab3351 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -111,6 +111,7 @@ SPDesktop::SPDesktop() : sketch( NULL ), controls( NULL ), tempgroup ( NULL ), + table( NULL ), page( NULL ), page_border( NULL ), current( NULL ), @@ -210,7 +211,11 @@ SPDesktop::init (SPNamedView *nv, SPCanvas *aCanvas, Inkscape::UI::View::EditWid g_signal_connect (G_OBJECT (main), "event", G_CALLBACK (sp_desktop_root_handler), this); /* This is the background the page sits on. */ - canvas->setBackgroundColor(0xffffff00); + table = sp_canvas_item_new (main, SP_TYPE_CTRLRECT, NULL); + SP_CTRLRECT(table)->setRectangle(Geom::Rect(Geom::Point(-80000, -80000), Geom::Point(80000, 80000))); + SP_CTRLRECT(table)->setColor(0x00000000, true, 0x00000000); + SP_CTRLRECT(table)->setCheckerboard( false ); + sp_canvas_item_move_to_z (table, 0); page = sp_canvas_item_new (main, SP_TYPE_CTRLRECT, NULL); ((CtrlRect *) page)->setColor(0x00000000, FALSE, 0x00000000); @@ -1728,11 +1733,17 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop) SPNamedView *nv=SP_NAMEDVIEW(obj); if (flags & SP_OBJECT_MODIFIED_FLAG) { + + /* Set page background */ + sp_canvas_item_show (desktop->table); if (nv->pagecheckerboard) { - desktop->canvas->setBackgroundCheckerboard(); + ((CtrlRect *) desktop->table)->setCheckerboard( true ); + ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor ); // | 0xff); } else { - desktop->canvas->setBackgroundColor(nv->pagecolor); + ((CtrlRect *) desktop->table)->setCheckerboard( false ); + ((CtrlRect *) desktop->table)->setColor(0x00000000, true, nv->pagecolor | 0xff); } + sp_canvas_item_move_to_z (desktop->table, 0); /* Show/hide page border */ if (nv->showborder) { @@ -1745,7 +1756,7 @@ static void _namedview_modified (SPObject *obj, guint flags, SPDesktop *desktop) } // place in the z-order stack if (nv->borderlayer == SP_BORDER_LAYER_BOTTOM) { - sp_canvas_item_move_to_z (desktop->page_border, 1); + sp_canvas_item_move_to_z (desktop->page_border, 2); } else { int order = sp_canvas_item_order (desktop->page_border); int morder = sp_canvas_item_order (desktop->drawing); diff --git a/src/desktop.h b/src/desktop.h index 3652d4a97..f1444ba7b 100644 --- a/src/desktop.h +++ b/src/desktop.h @@ -174,6 +174,7 @@ public: SPCanvasGroup *sketch; SPCanvasGroup *controls; SPCanvasGroup *tempgroup; ///< contains temporary canvas items + SPCanvasItem *table; ///< outside-of-page background SPCanvasItem *page; ///< page background SPCanvasItem *page_border; ///< page border SPCSSAttr *current; ///< current style diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 7d76fa043..df84e379c 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -8,11 +8,9 @@ * fred * bbyak * Jon A. Cruz - * Krzysztof KosiÅ„ski * * Copyright (C) 1998 The Free Software Foundation * Copyright (C) 2002-2006 authors - * Copyright (C) 2016 Google Inc. * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -27,7 +25,6 @@ #include "helper/sp-marshal.h" #include <2geom/rect.h> #include <2geom/affine.h> -#include "display/cairo-utils.h" #include "display/sp-canvas.h" #include "display/sp-canvas-group.h" #include "preferences.h" @@ -38,7 +35,6 @@ #include "display/cairo-utils.h" #include "debug/gdk-event-latency-tracker.h" #include "desktop.h" -#include "color.h" using Inkscape::Debug::GdkEventLatencyTracker; @@ -126,7 +122,7 @@ struct SPCanvasClass { namespace { -gint const UPDATE_PRIORITY = G_PRIORITY_DEFAULT_IDLE; +gint const UPDATE_PRIORITY = G_PRIORITY_HIGH_IDLE; GdkWindow *getWindow(SPCanvas *canvas) { @@ -939,6 +935,7 @@ void sp_canvas_class_init(SPCanvasClass *klass) static void sp_canvas_init(SPCanvas *canvas) { gtk_widget_set_has_window (GTK_WIDGET (canvas), TRUE); + gtk_widget_set_double_buffered (GTK_WIDGET (canvas), FALSE); gtk_widget_set_can_focus (GTK_WIDGET (canvas), TRUE); canvas->_pick_event.type = GDK_LEAVE_NOTIFY; @@ -959,10 +956,9 @@ static void sp_canvas_init(SPCanvas *canvas) canvas->_drawing_disabled = false; - canvas->_backing_store = NULL; - canvas->_clean_region = cairo_region_create(); - canvas->_background = cairo_pattern_create_rgb(1, 1, 1); - canvas->_background_is_checkerboard = false; + canvas->_tiles=NULL; + canvas->_tLeft=canvas->_tTop=canvas->_tRight=canvas->_tBottom=0; + canvas->_tile_h=canvas->_tile_h=0; canvas->_forced_redraw_count = 0; canvas->_forced_redraw_limit = -1; @@ -971,12 +967,22 @@ static void sp_canvas_init(SPCanvas *canvas) canvas->_enable_cms_display_adj = false; new (&canvas->_cms_key) Glib::ustring(""); #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) + + canvas->_is_scrolling = false; } void SPCanvas::shutdownTransients() { - // Reset the clean region - dirtyAll(); + // We turn off the need_redraw flag, since if the canvas is mapped again + // it will request a redraw anyways. We do not turn off the need_update + // flag, though, because updates are not queued when the canvas remaps + // itself. + // + _need_redraw = FALSE; + if (_tiles) g_free(_tiles); + _tiles = NULL; + _tLeft = _tTop = _tRight = _tBottom = 0; + _tile_h = _tile_h = 0; if (_grabbed_item) { _grabbed_item = NULL; @@ -999,18 +1005,6 @@ void SPCanvas::dispose(GObject *object) g_object_unref (canvas->_root); canvas->_root = NULL; } - if (canvas->_backing_store) { - cairo_surface_destroy(canvas->_backing_store); - canvas->_backing_store = NULL; - } - if (canvas->_clean_region) { - cairo_region_destroy(canvas->_clean_region); - canvas->_clean_region = NULL; - } - if (canvas->_background) { - cairo_pattern_destroy(canvas->_background); - canvas->_background = NULL; - } canvas->shutdownTransients(); #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) @@ -1144,48 +1138,41 @@ void SPCanvas::handle_size_request(GtkWidget *widget, GtkRequisition *req) void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { SPCanvas *canvas = SP_CANVAS (widget); - GtkAllocation old_allocation; + GtkAllocation widg_allocation; - gtk_widget_get_allocation(widget, &old_allocation); + gtk_widget_get_allocation (widget, &widg_allocation); -// Geom::IntRect old_area = Geom::IntRect::from_xywh(canvas->_x0, canvas->_y0, -// old_allocation.width, old_allocation.height); +// Geom::IntRect old_area = Geom::IntRect::from_xywh(canvas->x0, canvas->y0, +// widg_allocation.width, widg_allocation.height); Geom::IntRect new_area = Geom::IntRect::from_xywh(canvas->_x0, canvas->_y0, allocation->width, allocation->height); - // resize backing store - cairo_surface_t *new_backing_store = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - allocation->width, allocation->height); - if (canvas->_backing_store) { - cairo_t *cr = cairo_create(new_backing_store); - cairo_translate(cr, -canvas->_x0, -canvas->_y0); - cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); - cairo_set_source(cr, canvas->_background); - cairo_paint(cr); - cairo_set_source_surface(cr, canvas->_backing_store, canvas->_x0, canvas->_y0); - cairo_paint(cr); - cairo_destroy(cr); - cairo_surface_destroy(canvas->_backing_store); - } - canvas->_backing_store = new_backing_store; - - // Clip the clean region to the new allocation - cairo_rectangle_int_t crect = { canvas->_x0, canvas->_y0, allocation->width, allocation->height }; - cairo_region_intersect_rectangle(canvas->_clean_region, &crect); - - gtk_widget_set_allocation (widget, allocation); - + // Schedule redraw of new region + canvas->resizeTiles(canvas->_x0, canvas->_y0, canvas->_x0 + allocation->width, canvas->_y0 + allocation->height); if (SP_CANVAS_ITEM_GET_CLASS (canvas->_root)->viewbox_changed) SP_CANVAS_ITEM_GET_CLASS (canvas->_root)->viewbox_changed (canvas->_root, new_area); + if (allocation->width > widg_allocation.width) { + canvas->requestRedraw(canvas->_x0 + widg_allocation.width, + 0, + canvas->_x0 + allocation->width, + canvas->_y0 + allocation->height); + } + if (allocation->height > widg_allocation.height) { + canvas->requestRedraw(0, + canvas->_y0 + widg_allocation.height, + canvas->_x0 + allocation->width, + canvas->_y0 + allocation->height); + } + + gtk_widget_set_allocation (widget, allocation); + if (gtk_widget_get_realized (widget)) { gdk_window_move_resize (gtk_widget_get_window (widget), allocation->x, allocation->y, allocation->width, allocation->height); } - // Schedule redraw of any newly exposed regions - canvas->addIdle(); } int SPCanvas::emitEvent(GdkEvent *event) @@ -1539,23 +1526,48 @@ int SPCanvas::handle_motion(GtkWidget *widget, GdkEventMotion *event) void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect const &canvas_rect, int /*sw*/) { + GtkWidget *widget = GTK_WIDGET (this); + + // Mark the region clean + markRect(paint_rect, 0); + SPCanvasBuf buf; buf.buf = NULL; buf.buf_rowstride = 0; buf.rect = paint_rect; buf.visible_rect = canvas_rect; buf.is_empty = true; + //buf.ct = gdk_cairo_create(widget->window); // create temporary surface cairo_surface_t *imgs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, paint_rect.width(), paint_rect.height()); buf.ct = cairo_create(imgs); + //cairo_translate(buf.ct, -x0, -y0); + + // fix coordinates, clip all drawing to the tile and clear the background + //cairo_translate(buf.ct, paint_rect.left() - canvas->x0, paint_rect.top() - canvas->y0); + //cairo_rectangle(buf.ct, 0, 0, paint_rect.width(), paint_rect.height()); + //cairo_set_line_width(buf.ct, 3); + //cairo_set_source_rgba(buf.ct, 1.0, 0.0, 0.0, 0.1); + //cairo_stroke_preserve(buf.ct); + //cairo_clip(buf.ct); + +#if GTK_CHECK_VERSION(3,0,0) + GtkStyleContext *context = gtk_widget_get_style_context(widget); + GdkRGBA color; + gtk_style_context_get_background_color(context, + gtk_widget_get_state_flags(widget), + &color); + gdk_cairo_set_source_rgba(buf.ct, &color); +#else + GtkStyle *style = gtk_widget_get_style (widget); + gdk_cairo_set_source_color(buf.ct, &style->bg[GTK_STATE_NORMAL]); +#endif - cairo_save(buf.ct); - cairo_translate(buf.ct, -paint_rect.left(), -paint_rect.top()); - cairo_set_source(buf.ct, _background); cairo_set_operator(buf.ct, CAIRO_OPERATOR_SOURCE); + //cairo_rectangle(buf.ct, 0, 0, paint_rect.width(), paint_rec.height()); cairo_paint(buf.ct); - cairo_restore(buf.ct); + cairo_set_operator(buf.ct, CAIRO_OPERATOR_OVER); if (_root->visible) { SP_CANVAS_ITEM_GET_CLASS(_root)->render(_root, &buf); @@ -1588,8 +1600,7 @@ void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect } #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) - //cairo_t *xct = gdk_cairo_create(gtk_widget_get_window (widget)); - cairo_t *xct = cairo_create(_backing_store); + cairo_t *xct = gdk_cairo_create(gtk_widget_get_window (widget)); cairo_translate(xct, paint_rect.left() - _x0, paint_rect.top() - _y0); cairo_rectangle(xct, 0, 0, paint_rect.width(), paint_rect.height()); cairo_clip(xct); @@ -1598,12 +1609,6 @@ void SPCanvas::paintSingleBuffer(Geom::IntRect const &paint_rect, Geom::IntRect cairo_paint(xct); cairo_destroy(xct); cairo_surface_destroy(imgs); - - // Mark the painted rectangle clean - markRect(paint_rect, 0); - - gtk_widget_queue_draw_area(GTK_WIDGET(this), paint_rect.left() -_x0, paint_rect.top() - _y0, - paint_rect.width(), paint_rect.height()); } struct PaintRectSetup { @@ -1787,49 +1792,52 @@ void SPCanvas::endForcedFullRedraws() _forced_redraw_limit = -1; } +#if GTK_CHECK_VERSION(3,0,0) gboolean SPCanvas::handle_draw(GtkWidget *widget, cairo_t *cr) { SPCanvas *canvas = SP_CANVAS(widget); - // Blit from the backing store, without regard for the clean region. - // This is necessary because GTK clears the widget for us, which causes - // severe flicker while drawing if we don't blit the old contents. - cairo_set_source_surface(cr, canvas->_backing_store, 0, 0); - cairo_paint(cr); - cairo_rectangle_list_t *rects = cairo_copy_clip_rectangle_list(cr); - cairo_region_t *dirty_region = cairo_region_create(); for (int i = 0; i < rects->num_rectangles; i++) { cairo_rectangle_t rectangle = rects->rectangles[i]; - Geom::Rect dr = Geom::Rect::from_xywh(rectangle.x + canvas->_x0, rectangle.y + canvas->_y0, - rectangle.width, rectangle.height); - Geom::IntRect ir = dr.roundOutwards(); - cairo_rectangle_int_t irect = { ir.left(), ir.top(), ir.width(), ir.height() }; - cairo_region_union_rectangle(dirty_region, &irect); - } - cairo_rectangle_list_destroy(rects); - cairo_region_subtract(dirty_region, canvas->_clean_region); - // Render the dirty portion in the background - if (!cairo_region_is_empty(dirty_region)) { - canvas->addIdle(); + Geom::IntRect r = Geom::IntRect::from_xywh(rectangle.x + canvas->_x0, rectangle.y + canvas->_y0, + rectangle.width, rectangle.height); + + canvas->requestRedraw(r.left(), r.top(), r.right(), r.bottom()); } - cairo_region_destroy(dirty_region); - return TRUE; + cairo_rectangle_list_destroy(rects); + + return FALSE; } -#if !GTK_CHECK_VERSION(3,0,0) +#else gboolean SPCanvas::handle_expose(GtkWidget *widget, GdkEventExpose *event) { - cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget)); + SPCanvas *canvas = SP_CANVAS(widget); + + if (!gtk_widget_is_drawable (widget) || + (event->window != getWindow(canvas))) { + return FALSE; + } + + int n_rects = 0; + GdkRectangle *rects = NULL; + gdk_region_get_rectangles(event->region, &rects, &n_rects); - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - gboolean result = SPCanvas::handle_draw(widget, cr); + if(rects == NULL) + return FALSE; + + for (int i = 0; i < n_rects; i++) { + GdkRectangle rectangle = rects[i]; - cairo_destroy (cr); + Geom::IntRect r = Geom::IntRect::from_xywh(rectangle.x + canvas->_x0, rectangle.y + canvas->_y0, + rectangle.width, rectangle.height); + + canvas->requestRedraw(r.left(), r.top(), r.right(), r.bottom()); + } - return result; + return FALSE; } #endif @@ -1882,22 +1890,42 @@ int SPCanvas::paint() _need_update = FALSE; } - GtkAllocation allocation; - gtk_widget_get_allocation(GTK_WIDGET(this), &allocation); - cairo_rectangle_int_t crect = { _x0, _y0, allocation.width, allocation.height }; - cairo_region_t *to_draw = cairo_region_create_rectangle(&crect); - cairo_region_subtract(to_draw, _clean_region); + if (!_need_redraw) { + return TRUE; + } - int n_rects = cairo_region_num_rectangles(to_draw); - for (int i = 0; i < n_rects; ++i) { - cairo_rectangle_int_t crect; - cairo_region_get_rectangle(to_draw, i, &crect); - if (!paintRect(crect.x, crect.y, crect.x + crect.width, crect.y + crect.height)) { - // Aborted - return FALSE; - }; + Cairo::RefPtr to_paint = Cairo::Region::create(); + + for (int j = _tTop; j < _tBottom; ++j) { + for (int i = _tLeft; i < _tRight; ++i) { + int tile_index = (i - _tLeft) + (j - _tTop) * _tile_h; + + if (_tiles[tile_index]) { // if this tile is dirtied (nonzero) + Cairo::RectangleInt rect = {i*TILE_SIZE, j*TILE_SIZE, + TILE_SIZE, TILE_SIZE}; + to_paint->do_union(rect); + } + } + } + + int n_rect = to_paint->get_num_rectangles(); + + if (n_rect > 0) { + for (int i=0; i < n_rect; i++) { + Cairo::RectangleInt rect = to_paint->get_rectangle(i); + int x0 = rect.x; + int y0 = rect.y; + int x1 = x0 + rect.width; + int y1 = y0 + rect.height; + if (!paintRect(x0, y0, x1, y1)) { + // Aborted + return FALSE; + }; + } } + _need_redraw = FALSE; + // we've had a full unaborted redraw, reset the full redraw counter if (_forced_redraw_limit != -1) { _forced_redraw_count = 0; @@ -1976,41 +2004,15 @@ void SPCanvas::scrollTo(double cx, double cy, unsigned int clear, bool is_scroll Geom::IntRect old_area = getViewboxIntegers(); Geom::IntRect new_area = old_area + Geom::IntPoint(dx, dy); - - gtk_widget_get_allocation(&_widget, &allocation); - - // adjust backing store contents - assert(_backing_store); - cairo_surface_t *new_backing_store = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, - allocation.width, allocation.height); - cairo_t *cr = cairo_create(new_backing_store); - cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); - // Paint the background - cairo_translate(cr, -ix, -iy); - cairo_set_source(cr, _background); - cairo_paint(cr); - // Copy the old backing store contents - cairo_set_source_surface(cr, _backing_store, _x0, _y0); - cairo_rectangle(cr, _x0, _y0, allocation.width, allocation.height); - cairo_clip(cr); - cairo_paint(cr); - cairo_destroy(cr); - cairo_surface_destroy(_backing_store); - _backing_store = new_backing_store; - + _dx0 = cx; // here the 'd' stands for double, not delta! _dy0 = cy; _x0 = ix; _y0 = iy; - // Adjust the clean region - if (clear) { - dirtyAll(); - } else { - cairo_rectangle_int_t crect = { _x0, _y0, allocation.width, allocation.height }; - cairo_region_intersect_rectangle(_clean_region, &crect); - } + gtk_widget_get_allocation(&_widget, &allocation); + resizeTiles(_x0, _y0, _x0 + allocation.width, _y0 + allocation.height); if (SP_CANVAS_ITEM_GET_CLASS(_root)->viewbox_changed) { SP_CANVAS_ITEM_GET_CLASS(_root)->viewbox_changed(_root, new_area); } @@ -2018,17 +2020,19 @@ void SPCanvas::scrollTo(double cx, double cy, unsigned int clear, bool is_scroll if (!clear) { // scrolling without zoom; redraw only the newly exposed areas if ((dx != 0) || (dy != 0)) { + this->_is_scrolling = is_scrolling; if (gtk_widget_get_realized(GTK_WIDGET(this))) { gdk_window_scroll(getWindow(this), -dx, -dy); } } + } else { + // scrolling as part of zoom; do nothing here - the next do_update will perform full redraw } - addIdle(); } void SPCanvas::updateNow() { - if (_need_update) { + if (_need_update || _need_redraw) { doUpdate(); } } @@ -2041,45 +2045,26 @@ void SPCanvas::requestUpdate() void SPCanvas::requestRedraw(int x0, int y0, int x1, int y1) { + GtkAllocation allocation; + if (!gtk_widget_is_drawable( GTK_WIDGET(this) )) { return; } - if (x0 >= x1 || y0 >= y1) { + if ((x0 >= x1) || (y0 >= y1)) { return; } Geom::IntRect bbox(x0, y0, x1, y1); - dirtyRect(bbox); - addIdle(); -} - -void SPCanvas::setBackgroundColor(guint32 rgba) { - double new_r = SP_RGBA32_R_F(rgba); - double new_g = SP_RGBA32_G_F(rgba); - double new_b = SP_RGBA32_B_F(rgba); - if (!_background_is_checkerboard) { - double old_r, old_g, old_b; - cairo_pattern_get_rgba(_background, &old_r, &old_g, &old_b, NULL); - if (new_r == old_r && new_g == old_g && new_b == old_b) return; - } - if (_background) { - cairo_pattern_destroy(_background); - } - _background = cairo_pattern_create_rgb(new_r, new_g, new_b); - _background_is_checkerboard = false; - dirtyAll(); - addIdle(); -} + gtk_widget_get_allocation(GTK_WIDGET(this), &allocation); -void SPCanvas::setBackgroundCheckerboard() { - if (_background_is_checkerboard) return; - if (_background) { - cairo_pattern_destroy(_background); + Geom::IntRect canvas_rect = Geom::IntRect::from_xywh(this->_x0, this->_y0, + allocation.width, allocation.height); + + Geom::OptIntRect clip = bbox & canvas_rect; + if (clip) { + dirtyRect(*clip); + addIdle(); } - _background = ink_cairo_pattern_create_checkerboard(); - _background_is_checkerboard = true; - dirtyAll(); - addIdle(); } /** @@ -2183,24 +2168,63 @@ inline int sp_canvas_tile_ceil(int x) return ((x + (TILE_SIZE - 1)) & (~(TILE_SIZE - 1))) / TILE_SIZE; } -void SPCanvas::dirtyRect(Geom::IntRect const &area) { - markRect(area, 1); +void SPCanvas::resizeTiles(int nl, int nt, int nr, int nb) +{ + if ( nl >= nr || nt >= nb ) { + if (_tiles) g_free(_tiles); + _tLeft = _tTop = _tRight = _tBottom = 0; + _tile_h = _tile_h = 0; + _tiles = NULL; + return; + } + int tl = sp_canvas_tile_floor(nl); + int tt = sp_canvas_tile_floor(nt); + int tr = sp_canvas_tile_ceil(nr); + int tb = sp_canvas_tile_ceil(nb); + + int nh = tr-tl, nv = tb-tt; + uint8_t *ntiles = (uint8_t*) g_malloc(nh * nv * sizeof(uint8_t)); + for (int i = tl; i < tr; i++) { + for (int j = tt; j < tb; j++) { + int ind = (i-tl) + (j-tt)*nh; + if ( i >= _tLeft && i < _tRight && j >= _tTop && j < _tBottom ) { + ntiles[ind] = _tiles[(i - _tLeft) + (j - _tTop) * _tile_h]; // copy from the old tile + } else { + ntiles[ind] = 0; // newly exposed areas get 0 + } + } + } + if (_tiles) g_free(_tiles); + _tiles = ntiles; + _tLeft = tl; + _tTop = tt; + _tRight = tr; + _tBottom = tb; + _tile_h = nh; + _tile_h = nv; } -void SPCanvas::dirtyAll() { - if (_clean_region && !cairo_region_is_empty(_clean_region)) { - cairo_region_destroy(_clean_region); - _clean_region = cairo_region_create(); - } +void SPCanvas::dirtyRect(Geom::IntRect const &area) { + _need_redraw = TRUE; + markRect(area, 1); } void SPCanvas::markRect(Geom::IntRect const &area, uint8_t val) { - cairo_rectangle_int_t crect = { area.left(), area.top(), area.width(), area.height() }; - if (val) { - cairo_region_subtract_rectangle(_clean_region, &crect); - } else { - cairo_region_union_rectangle(_clean_region, &crect); + int tl = sp_canvas_tile_floor(area.left()); + int tt = sp_canvas_tile_floor(area.top()); + int tr = sp_canvas_tile_ceil(area.right()); + int tb = sp_canvas_tile_ceil(area.bottom()); + if ( tl >= _tRight || tr <= _tLeft || tt >= _tBottom || tb <= _tTop ) return; + if ( tl < _tLeft ) tl = _tLeft; + if ( tr > _tRight ) tr = _tRight; + if ( tt < _tTop ) tt = _tTop; + if ( tb > _tBottom ) tb = _tBottom; + + for (int i=tl; i * Lauris Kaplinski * Jon A. Cruz - * Krzysztof KosiÅ„ski * * Copyright (C) 1998 The Free Software Foundation * Copyright (C) 2002 Lauris Kaplinski - * Copyright (C) 2016 Google Inc. * * Released under GNU GPL, read the file 'COPYING' for more information */ @@ -87,9 +85,6 @@ struct SPCanvas { Geom::IntRect getViewboxIntegers() const; SPCanvasGroup *getRoot(); - void setBackgroundColor(guint32 rgba); - void setBackgroundCheckerboard(); - /// Returns new canvas as widget. static GtkWidget *createAA(); @@ -108,8 +103,7 @@ private: /// Marks the specified area as dirty (requiring redraw) void dirtyRect(Geom::IntRect const &area); - /// Marks the whole widget for redraw - void dirtyAll(); + /// Marks specific canvas rectangle as clean (val == 0) or dirty (otherwise) void markRect(Geom::IntRect const &area, uint8_t val); /// Invokes update, paint, and repick on canvas. @@ -161,8 +155,9 @@ public: */ static gint handle_scroll(GtkWidget *widget, GdkEventScroll *event); static gint handle_motion(GtkWidget *widget, GdkEventMotion *event); +#if GTK_CHECK_VERSION(3,0,0) static gboolean handle_draw(GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) +#else static gboolean handle_expose(GtkWidget *widget, GdkEventExpose *event); #endif static gint handle_key_event(GtkWidget *widget, GdkEventKey *event); @@ -181,18 +176,15 @@ public: bool _is_dragging; double _dx0; double _dy0; - int _x0; ///< World coordinate of the leftmost pixels - int _y0; ///< World coordinate of the topmost pixels - - /// Image surface storing the contents of the widget - cairo_surface_t *_backing_store; - /// Area of the widget that has up-to-date content - cairo_region_t *_clean_region; - /// Widget background, defaults to white - cairo_pattern_t *_background; - bool _background_is_checkerboard; - - /// Last known modifier state, for deferred repick when a button is down. + int _x0; + int _y0; + + /* Area that needs redrawing, stored as a microtile array */ + int _tLeft, _tTop, _tRight, _tBottom; + int _tile_w, _tile_h; + uint8_t *_tiles; + + /** Last known modifier state, for deferred repick when a button is down. */ int _state; /** The item containing the mouse pointer, or NULL if none. */ @@ -216,6 +208,7 @@ public: int _close_enough; unsigned int _need_update : 1; + unsigned int _need_redraw : 1; unsigned int _need_repick : 1; int _forced_redraw_count; -- cgit v1.2.3 From 300d24dedddefb2f68ebd680fcd2234bfca53ad7 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 25 Jul 2016 22:16:54 +0200 Subject: Changed coding style (bzr r14954.1.27) --- src/object-set.cpp | 47 ++++++++++++++++++++++++++++------------------- src/object-set.h | 25 ++++++++++++++++++------- src/selection-chemistry.h | 2 +- 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/src/object-set.cpp b/src/object-set.cpp index 1b994106a..92bcf6b07 100644 --- a/src/object-set.cpp +++ b/src/object-set.cpp @@ -24,7 +24,6 @@ bool ObjectSet::add(SPObject* object) { g_return_val_if_fail(object != NULL, false); g_return_val_if_fail(SP_IS_OBJECT(object), false); - // any ancestor is in the set - do nothing if (_anyAncestorIsInSet(object)) { return false; @@ -68,7 +67,7 @@ bool ObjectSet::includes(SPObject *object) { g_return_val_if_fail(object != NULL, false); g_return_val_if_fail(SP_IS_OBJECT(object), false); - return container.get().find(object) != container.get().end(); + return _container.get().find(object) != _container.get().end(); } void ObjectSet::clear() { @@ -77,7 +76,7 @@ void ObjectSet::clear() { } int ObjectSet::size() { - return container.size(); + return _container.size(); } bool ObjectSet::_anyAncestorIsInSet(SPObject *object) { @@ -105,22 +104,22 @@ void ObjectSet::_removeDescendantsFromSet(SPObject *object) { } void ObjectSet::_remove(SPObject *object) { - releaseConnections[object].disconnect(); - releaseConnections.erase(object); - container.get().erase(object); - _remove_3D_boxes_recursively(object); + _releaseConnections[object].disconnect(); + _releaseConnections.erase(object); + _container.get().erase(object); + _remove3DBoxesRecursively(object); _releaseSignals(object); } void ObjectSet::_add(SPObject *object) { - releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove))); - container.push_back(object); - _add_3D_boxes_recursively(object); + _releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove))); + _container.push_back(object); + _add3DBoxesRecursively(object); _connectSignals(object); } void ObjectSet::_clear() { - for (auto object: container) { + for (auto object: _container) { _remove(object); } } @@ -173,16 +172,16 @@ void ObjectSet::toggle(SPObject *obj) { } bool ObjectSet::isEmpty() { - return container.size() == 0; + return _container.size() == 0; } SPObject *ObjectSet::single() { - return container.size() == 1 ? *container.begin() : nullptr; + return _container.size() == 1 ? *_container.begin() : nullptr; } SPItem *ObjectSet::singleItem() { - if (container.size() == 1) { - SPObject* obj = *container.begin(); + if (_container.size() == 1) { + SPObject* obj = *_container.begin(); if (SP_IS_ITEM(obj)) { return SP_ITEM(obj); } @@ -225,7 +224,7 @@ SPItem *ObjectSet::_sizeistItem(bool sml, CompareSize compare) { } SPObjectRange ObjectSet::objects() { - return SPObjectRange(container.get().begin(), container.get().end()); + return SPObjectRange(_container.get().begin(), _container.get().end()); } Inkscape::XML::Node *ObjectSet::singleRepr() { @@ -309,7 +308,6 @@ boost::optional ObjectSet::center() const { } } - std::list const ObjectSet::perspList() { std::list pl; for (std::list::iterator i = _3dboxes.begin(); i != _3dboxes.end(); ++i) { @@ -335,7 +333,7 @@ std::list const ObjectSet::box3DList(Persp3D *persp) { return boxes; } -void ObjectSet::_add_3D_boxes_recursively(SPObject *obj) { +void ObjectSet::_add3DBoxesRecursively(SPObject *obj) { std::list boxes = box3d_extract_boxes(obj); for (std::list::iterator i = boxes.begin(); i != boxes.end(); ++i) { @@ -344,7 +342,7 @@ void ObjectSet::_add_3D_boxes_recursively(SPObject *obj) { } } -void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { +void ObjectSet::_remove3DBoxesRecursively(SPObject *obj) { std::list boxes = box3d_extract_boxes(obj); for (std::list::iterator i = boxes.begin(); i != boxes.end(); ++i) { @@ -359,3 +357,14 @@ void ObjectSet::_remove_3D_boxes_recursively(SPObject *obj) { } } // namespace Inkscape + +/* + 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:fileencoding=utf-8:textwidth=99 : diff --git a/src/object-set.h b/src/object-set.h index b4178bd37..2772afbe2 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -198,21 +198,21 @@ public: /** Returns a range of selected SPItems. */ SPItemRange items() { - return SPItemRange(container.get() + return SPItemRange(_container.get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())); }; /** Returns a range of selected groups. */ SPGroupRange groups() { - return SPGroupRange (container.get() + return SPGroupRange (_container.get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())); } /** Returns a range of the xml nodes of all selected objects. */ XMLNodeRange xmlNodes() { - return XMLNodeRange(container.get() + return XMLNodeRange(_container.get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())); } @@ -299,13 +299,13 @@ protected: void _removeAncestorsFromSet(SPObject *object); SPItem *_sizeistItem(bool sml, CompareSize compare); SPObject *_getMutualAncestor(SPObject *object); - virtual void _add_3D_boxes_recursively(SPObject *obj); - virtual void _remove_3D_boxes_recursively(SPObject *obj); + virtual void _add3DBoxesRecursively(SPObject *obj); + virtual void _remove3DBoxesRecursively(SPObject *obj); - multi_index_container container; + multi_index_container _container; GC::soft_ptr _desktop; std::list _3dboxes; - std::unordered_map releaseConnections; + std::unordered_map _releaseConnections; }; @@ -316,3 +316,14 @@ typedef ObjectSet::XMLNodeRange XMLNodeRange; } // namespace Inkscape #endif //INKSCAPE_PROTOTYPE_OBJECTSET_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index cfae84eef..f6cd4829a 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -109,7 +109,7 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false ) void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false ); void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false ); -void sp_selection_apply_affine(Inkscape::ObjectSet *selection, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); +void sp_selection_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); void sp_selection_remove_transform (SPDesktop *desktop); void sp_selection_scale_absolute (Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); void sp_selection_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); -- cgit v1.2.3 From ff4fbbc93f67afd6cbf851691833a50d6c76b350 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 27 Jul 2016 12:19:03 +0200 Subject: Renamed some functions, fixed tests (bzr r14954.1.28) --- src/file.cpp | 10 ++-- src/object-set.h | 10 ++-- src/selection-chemistry.cpp | 97 ++++++++++++++++++++------------------- src/selection-chemistry.h | 39 ++++++++-------- src/seltrans.cpp | 2 +- src/sp-object.cpp | 3 ++ src/ui/clipboard.cpp | 4 +- src/ui/dialog/export.cpp | 2 +- src/ui/dialog/transformation.cpp | 22 ++++----- src/ui/interface.cpp | 4 +- src/verbs.cpp | 18 ++++---- src/widgets/select-toolbar.cpp | 2 +- testfiles/src/object-set-test.cpp | 38 +++++++++++---- testfiles/src/sp-object-test.cpp | 10 ++-- 14 files changed, 141 insertions(+), 120 deletions(-) diff --git a/src/file.cpp b/src/file.cpp index 9ba180cb4..8743e3b67 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -1129,14 +1129,14 @@ void sp_import_document(SPDesktop *desktop, SPDocument *clipdoc, bool in_place) Inkscape::Selection *selection = desktop->getSelection(); selection->setReprList(pasted_objects_not); Geom::Affine doc2parent = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); - sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); + sp_object_set_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); sp_selection_delete(desktop); // Change the selection to the freshly pasted objects selection->setReprList(pasted_objects); // Apply inverse of parent transform - sp_selection_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); + sp_object_set_apply_affine(selection, desktop->dt2doc() * doc2parent * desktop->doc2dt(), true, false, false); // Update (among other things) all curves in paths, for bounds() to work target_document->ensureUpToDate(); @@ -1166,7 +1166,7 @@ void sp_import_document(SPDesktop *desktop, SPDocument *clipdoc, bool in_place) m.unSetup(); } - sp_selection_move_relative(selection, offset); + sp_object_set_move_relative(selection, offset); } } @@ -1271,7 +1271,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, // c2p is identity matrix at this point unless ensureUpToDate is called doc->ensureUpToDate(); Geom::Affine affine = doc->getRoot()->c2p * SP_ITEM(place_to_insert)->i2doc_affine().inverse(); - sp_selection_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false, false); + sp_object_set_apply_affine(selection, desktop->dt2doc() * affine * desktop->doc2dt(), true, false, false); // move to mouse pointer { @@ -1279,7 +1279,7 @@ file_import(SPDocument *in_doc, const Glib::ustring &uri, Geom::OptRect sel_bbox = selection->visualBounds(); if (sel_bbox) { Geom::Point m( desktop->point() - sel_bbox->midpoint() ); - sp_selection_move_relative(selection, m, false); + sp_object_set_move_relative(selection, m, false); } } } diff --git a/src/object-set.h b/src/object-set.h index 2772afbe2..fae365f70 100644 --- a/src/object-set.h +++ b/src/object-set.h @@ -86,7 +86,7 @@ typedef boost::multi_index_container< boost::multi_index::hashed_unique< boost::multi_index::tag, boost::multi_index::identity> - >> multi_index_container; + >> MultiIndexContainer; typedef boost::any_range< SPObject*, @@ -97,9 +97,9 @@ typedef boost::any_range< class ObjectSet { public: enum CompareSize {HORIZONTAL, VERTICAL, AREA}; - typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; - typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange; - typedef decltype(multi_index_container().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; + typedef decltype(MultiIndexContainer().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_item())) SPItemRange; + typedef decltype(MultiIndexContainer().get() | boost::adaptors::filtered(is_group()) | boost::adaptors::transformed(object_to_group())) SPGroupRange; + typedef decltype(MultiIndexContainer().get() | boost::adaptors::filtered(is_item()) | boost::adaptors::transformed(object_to_node())) XMLNodeRange; ObjectSet(SPDesktop* desktop): _desktop(desktop) {}; ObjectSet(): _desktop(nullptr) {}; @@ -302,7 +302,7 @@ protected: virtual void _add3DBoxesRecursively(SPObject *obj); virtual void _remove3DBoxesRecursively(SPObject *obj); - multi_index_container _container; + MultiIndexContainer _container; GC::soft_ptr _desktop; std::list _3dboxes; std::unordered_map _releaseConnections; diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index e8c408ed8..cd0a29b05 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -694,7 +694,7 @@ void sp_edit_invert_in_all_layers(SPDesktop *desktop) sp_edit_select_all_full(desktop, true, true); } -static Inkscape::XML::Node* sp_selection_group(ObjectSet *set) { +static Inkscape::XML::Node* sp_object_set_group(ObjectSet *set) { SPDocument *doc = set->desktop()->getDocument(); Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::XML::Node *group = xml_doc->createElement("svg:g"); @@ -764,14 +764,14 @@ static Inkscape::XML::Node* sp_selection_group(ObjectSet *set) { return group; } -void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop) { // Check if something is selected. if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select some objects to group.")); return; } - Inkscape::XML::Node* group = sp_selection_group(selection); + Inkscape::XML::Node* group = sp_object_set_group(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_GROUP, C_("Verb", "Group")); @@ -823,7 +823,7 @@ void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDeskto } -static void sp_selection_ungroup(ObjectSet *set) +static void sp_object_set_ungroup(ObjectSet *set) { GSList *groups = NULL; for (auto g: set->groups()) { @@ -882,7 +882,7 @@ static void sp_selection_ungroup(ObjectSet *set) set->setList(new_select); } -void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select a group to ungroup.")); @@ -893,7 +893,7 @@ void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop) return; } - sp_selection_ungroup(selection); + sp_object_set_ungroup(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_UNGROUP, _("Ungroup")); @@ -978,7 +978,7 @@ bool sp_item_repr_compare_position_bool(SPObject const *first, SPObject const *s ((SPItem*)second)->getRepr())<0; } -void sp_selection_raise(ObjectSet* set) { +void sp_object_set_raise(ObjectSet *set) { std::vector items(set->items().begin(), set->items().end()); Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); @@ -1013,7 +1013,7 @@ void sp_selection_raise(ObjectSet* set) { } } -void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->items().empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to raise.")); @@ -1025,14 +1025,14 @@ void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop) selection_display_message(desktop, Inkscape::ERROR_MESSAGE, _("You cannot raise/lower objects from different groups or layers.")); return; } - sp_selection_raise(selection); + sp_object_set_raise(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_RAISE, //TRANSLATORS: "Raise" means "to raise an object" in the undo history C_("Undo action", "Raise")); } -void sp_selection_raise_to_top(ObjectSet* set) { +void sp_object_set_raise_to_top(ObjectSet *set) { std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); @@ -1042,7 +1042,7 @@ void sp_selection_raise_to_top(ObjectSet* set) { } } -void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop) { SPDocument *document = selection->layers()->getDocument(); @@ -1057,13 +1057,13 @@ void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *des return; } - sp_selection_raise_to_top(selection); + sp_object_set_raise_to_top(selection); DocumentUndo::done(document, SP_VERB_SELECTION_TO_FRONT, _("Raise to top")); } -void sp_selection_lower(ObjectSet *set) { +void sp_object_set_lower(ObjectSet *set) { std::vector items(set->items().begin(), set->items().end()); Inkscape::XML::Node *grepr = const_cast(items.front()->parent->getRepr()); @@ -1102,7 +1102,7 @@ void sp_selection_lower(ObjectSet *set) { } } -void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->items().empty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower.")); @@ -1115,14 +1115,14 @@ void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop) return; } - sp_selection_lower(selection); + sp_object_set_lower(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_LOWER, //TRANSLATORS: "Lower" means "to lower an object" in the undo history C_("Undo action", "Lower")); } -void sp_selection_lower_to_bottom(ObjectSet *set) { +void sp_object_set_lower_to_bottom(ObjectSet *set) { std::vector rl(set->xmlNodes().begin(), set->xmlNodes().end()); sort(rl.begin(),rl.end(),sp_repr_compare_position_bool); @@ -1143,7 +1143,7 @@ void sp_selection_lower_to_bottom(ObjectSet *set) { } } -void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop) +void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop) { if (selection->isEmpty()) { selection_display_message(desktop, Inkscape::WARNING_MESSAGE, _("Select object(s) to lower to bottom.")); @@ -1156,7 +1156,7 @@ void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop * return; } - sp_selection_lower_to_bottom(selection); + sp_object_set_lower_to_bottom(selection); DocumentUndo::done(selection->layers()->getDocument(), SP_VERB_SELECTION_TO_BACK, _("Lower to bottom")); @@ -1484,7 +1484,7 @@ void sp_selection_to_layer(SPDesktop *dt, SPObject *moveto, bool suppressDone) } static bool -selection_contains_original(SPItem *item, ObjectSet* set) +object_set_contains_original(SPItem *item, ObjectSet *set) { bool contains_original = false; @@ -1512,14 +1512,14 @@ selection_contains_original(SPItem *item, ObjectSet* set) static bool -selection_contains_both_clone_and_original(ObjectSet *set) +object_set_contains_both_clone_and_original(ObjectSet *set) { bool clone_with_original = false; auto items = set->items(); for (auto l=items.begin();l!=items.end() ;++l) { SPItem *item = *l; if (item) { - clone_with_original |= selection_contains_original(item, set); + clone_with_original |= object_set_contains_original(item, set); if (clone_with_original) break; } @@ -1533,7 +1533,8 @@ value of set_i2d==false is only used by seltrans when it's dragging objects live that case, items are already in the new position, but the repr is in the old, and this function then simply updates the repr from item->transform. */ -void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate, bool adjust_transf_center) +void sp_object_set_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool set_i2d, bool compensate, + bool adjust_transf_center) { if (set->isEmpty()) return; @@ -1581,7 +1582,7 @@ void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool #endif // we're moving both a clone and its original or any ancestor in clone chain? - bool transform_clone_with_original = selection_contains_original(item, set); + bool transform_clone_with_original = object_set_contains_original(item, set); // ...both a text-on-path and its path? bool transform_textpath_with_path = ((dynamic_cast(item) && item->firstChild() && dynamic_cast(item->firstChild())) @@ -1724,7 +1725,7 @@ void sp_selection_apply_affine(ObjectSet *set, Geom::Affine const &affine, bool } } -void sp_selection_remove_transform(SPDesktop *desktop) +void sp_object_set_remove_transform(SPDesktop *desktop) { if (desktop == NULL) return; @@ -1741,9 +1742,9 @@ void sp_selection_remove_transform(SPDesktop *desktop) } void -sp_selection_scale_absolute(ObjectSet *set, - double const x0, double const x1, - double const y0, double const y1) +sp_object_set_scale_absolute(ObjectSet *set, + double x0, double x1, + double y0, double y1) { if (set->isEmpty()) return; @@ -1761,11 +1762,11 @@ sp_selection_scale_absolute(ObjectSet *set, Geom::Translate const o2n(x0, y0); Geom::Affine const final( p2o * scale * o2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } -void sp_selection_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale) +void sp_object_set_scale_relative(ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale) { if (set->isEmpty()) return; @@ -1786,21 +1787,21 @@ void sp_selection_scale_relative(ObjectSet *set, Geom::Point const &align, Geom: Geom::Translate const n2d(-align); Geom::Translate const d2n(align); Geom::Affine const final( n2d * scale * d2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } void -sp_selection_rotate_relative(ObjectSet *set, Geom::Point const ¢er, gdouble const angle_degrees) +sp_object_set_rotate_relative(ObjectSet *set, Geom::Point const ¢er, double angle_degrees) { Geom::Translate const d2n(center); Geom::Translate const n2d(-center); Geom::Rotate const rotate(Geom::Rotate::from_degrees(angle_degrees)); Geom::Affine const final( Geom::Affine(n2d) * rotate * d2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } void -sp_selection_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy) +sp_object_set_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, double dy) { Geom::Translate const d2n(align); Geom::Translate const n2d(-align); @@ -1808,17 +1809,17 @@ sp_selection_skew_relative(ObjectSet *set, Geom::Point const &align, double dx, dx, 1, 0, 0); Geom::Affine const final( n2d * skew * d2n ); - sp_selection_apply_affine(set, final); + sp_object_set_apply_affine(set, final); } -void sp_selection_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate) +void sp_object_set_move_relative(ObjectSet *set, Geom::Point const &move, bool compensate) { - sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate); + sp_object_set_apply_affine(set, Geom::Affine(Geom::Translate(move)), true, compensate); } -void sp_selection_move_relative(ObjectSet *set, double dx, double dy) +void sp_object_set_move_relative(ObjectSet *set, double dx, double dy) { - sp_selection_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy))); + sp_object_set_apply_affine(set, Geom::Affine(Geom::Translate(dx, dy))); } /** @@ -1858,7 +1859,7 @@ sp_selection_rotate(Inkscape::Selection *selection, gdouble const angle_degrees) return; } - sp_selection_rotate_relative(selection, *center, angle_degrees); + sp_object_set_rotate_relative(selection, *center, angle_degrees); DocumentUndo::maybeDone(selection->desktop()->getDocument(), ( ( angle_degrees > 0 ) @@ -2207,7 +2208,7 @@ sp_selection_rotate_screen(Inkscape::Selection *selection, gdouble angle) gdouble const zangle = 180 * atan2(zmove, r) / M_PI; - sp_selection_rotate_relative(selection, *center, zangle); + sp_object_set_rotate_relative(selection, *center, zangle); DocumentUndo::maybeDone(selection->desktop()->getDocument(), ( (angle > 0) @@ -2237,7 +2238,7 @@ sp_selection_scale(Inkscape::Selection *selection, gdouble grow) } double const times = 1.0 + grow / max_len; - sp_selection_scale_relative(selection, center, Geom::Scale(times, times)); + sp_object_set_scale_relative(selection, center, Geom::Scale(times, times)); DocumentUndo::maybeDone(selection->desktop()->getDocument(), ( (grow > 0) @@ -2266,7 +2267,7 @@ sp_selection_scale_times(Inkscape::Selection *selection, gdouble times) } Geom::Point const center(sel_bbox->midpoint()); - sp_selection_scale_relative(selection, center, Geom::Scale(times, times)); + sp_object_set_scale_relative(selection, center, Geom::Scale(times, times)); DocumentUndo::done(selection->desktop()->getDocument(), SP_VERB_CONTEXT_SELECT, _("Scale by whole factor")); } @@ -2278,7 +2279,7 @@ sp_selection_move(Inkscape::Selection *selection, gdouble dx, gdouble dy) return; } - sp_selection_move_relative(selection, dx, dy); + sp_object_set_move_relative(selection, dx, dy); SPDocument *doc = selection->layers()->getDocument(); if (dx == 0) { @@ -2304,7 +2305,7 @@ sp_selection_move_screen(Inkscape::Selection *selection, gdouble dx, gdouble dy) gdouble const zoom = selection->desktop()->current_zoom(); gdouble const zdx = dx / zoom; gdouble const zdy = dy / zoom; - sp_selection_move_relative(selection, zdx, zdy); + sp_object_set_move_relative(selection, zdx, zdy); SPDocument *doc = selection->layers()->getDocument(); if (dx == 0) { @@ -3476,7 +3477,7 @@ void sp_selection_untile(SPDesktop *desktop) } } -void sp_selection_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi) +void sp_object_set_get_export_hints(ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi) { if (set->isEmpty()) { return; @@ -3627,7 +3628,7 @@ void sp_selection_create_bitmap_copy(SPDesktop *desktop) float hint_xdpi = 0, hint_ydpi = 0; Glib::ustring hint_filename; // take resolution hint from the selected objects - sp_selection_get_export_hints(selection, hint_filename, &hint_xdpi, &hint_ydpi); + sp_object_set_get_export_hints(selection, hint_filename, &hint_xdpi, &hint_ydpi); if (hint_xdpi != 0) { res = hint_xdpi; } else { @@ -3892,7 +3893,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ // FIXME: temporary patch to prevent crash! // Remove this when bboxes are fixed to not blow up on an item clipped/masked with its own clone - bool clone_with_original = selection_contains_both_clone_and_original(selection); + bool clone_with_original = object_set_contains_both_clone_and_original(selection); if (clone_with_original) { return; // in this version, you cannot clip/mask an object with its own clone } @@ -3957,7 +3958,7 @@ void sp_selection_set_mask(SPDesktop *desktop, bool apply_clip_path, bool apply_ items_to_select.clear(); - Inkscape::XML::Node *group = sp_selection_group(set); + Inkscape::XML::Node *group = sp_object_set_group(set); group->setAttribute("inkscape:groupmode", "maskhelper"); // apply clip/mask only to newly created group diff --git a/src/selection-chemistry.h b/src/selection-chemistry.h index f6cd4829a..ca9062320 100644 --- a/src/selection-chemistry.h +++ b/src/selection-chemistry.h @@ -75,19 +75,19 @@ void sp_selection_unsymbol(SPDesktop *desktop); void sp_selection_tile(SPDesktop *desktop, bool apply = true); void sp_selection_untile(SPDesktop *desktop); -void sp_selection_group_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_ungroup_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_group(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_ungroup(Inkscape::Selection *selection, SPDesktop *desktop); void sp_selection_ungroup_pop_selection(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise(Inkscape::ObjectSet* set); -void sp_selection_raise_to_top(Inkscape::ObjectSet* set); -void sp_selection_lower(Inkscape::ObjectSet *set); -void sp_selection_lower_to_bottom(Inkscape::ObjectSet *set); +void sp_object_set_raise(Inkscape::ObjectSet *set); +void sp_object_set_raise_to_top(Inkscape::ObjectSet *set); +void sp_object_set_lower(Inkscape::ObjectSet *set); +void sp_object_set_lower_to_bottom(Inkscape::ObjectSet *set); -void sp_selection_raise_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_raise_to_top_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_ui(Inkscape::Selection *selection, SPDesktop *desktop); -void sp_selection_lower_to_bottom_ui(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_raise_to_top(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower(Inkscape::Selection *selection, SPDesktop *desktop); +void sp_selection_lower_to_bottom(Inkscape::Selection *selection, SPDesktop *desktop); SPCSSAttr *take_style_from_item (SPObject *object); @@ -109,14 +109,15 @@ void sp_selection_to_next_layer( SPDesktop *desktop, bool suppressDone = false ) void sp_selection_to_prev_layer( SPDesktop *desktop, bool suppressDone = false ); void sp_selection_to_layer( SPDesktop *desktop, SPObject *layer, bool suppressDone = false ); -void sp_selection_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true, bool compensate = true, bool adjust_transf_center = true); -void sp_selection_remove_transform (SPDesktop *desktop); -void sp_selection_scale_absolute (Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); -void sp_selection_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); -void sp_selection_rotate_relative (Inkscape::ObjectSet *set, Geom::Point const ¢er, double angle); -void sp_selection_skew_relative (Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy); -void sp_selection_move_relative (Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true); -void sp_selection_move_relative (Inkscape::ObjectSet *set, double dx, double dy); +void sp_object_set_apply_affine(Inkscape::ObjectSet *set, Geom::Affine const &affine, bool set_i2d = true, + bool compensate = true, bool adjust_transf_center = true); +void sp_object_set_remove_transform(SPDesktop *desktop); +void sp_object_set_scale_absolute(Inkscape::ObjectSet *set, double x0, double x1, double y0, double y1); +void sp_object_set_scale_relative(Inkscape::ObjectSet *set, Geom::Point const &align, Geom::Scale const &scale); +void sp_object_set_rotate_relative(Inkscape::ObjectSet *set, Geom::Point const ¢er, double angle); +void sp_object_set_skew_relative(Inkscape::ObjectSet *set, Geom::Point const &align, double dx, double dy); +void sp_object_set_move_relative(Inkscape::ObjectSet *set, Geom::Point const &move, bool compensate = true); +void sp_object_set_move_relative(Inkscape::ObjectSet *set, double dx, double dy); void sp_selection_rotate_90 (SPDesktop *desktop, bool ccw); void sp_selection_rotate (Inkscape::Selection *selection, double angle); @@ -157,7 +158,7 @@ void scroll_to_show_item(SPDesktop *desktop, SPItem *item); void sp_undo (SPDesktop *desktop, SPDocument *doc); void sp_redo (SPDesktop *desktop, SPDocument *doc); -void sp_selection_get_export_hints (Inkscape::ObjectSet* set, Glib::ustring &filename, float *xdpi, float *ydpi); +void sp_object_set_get_export_hints(Inkscape::ObjectSet *set, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_document_get_export_hints (SPDocument * doc, Glib::ustring &filename, float *xdpi, float *ydpi); void sp_selection_create_bitmap_copy (SPDesktop *desktop); diff --git a/src/seltrans.cpp b/src/seltrans.cpp index f6cb9166c..3054913b6 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -445,7 +445,7 @@ void Inkscape::SelTrans::ungrab() if (!_current_relative_affine.isIdentity()) { // we can have a identity affine // when trying to stretch a perfectly vertical line in horizontal direction, which will not be allowed by the handles; - sp_selection_apply_affine(selection, _current_relative_affine, (_show == SHOW_OUTLINE)? true : false); + sp_object_set_apply_affine(selection, _current_relative_affine, (_show == SHOW_OUTLINE) ? true : false); if (_center) { *_center *= _current_relative_affine; _center_is_set = true; diff --git a/src/sp-object.cpp b/src/sp-object.cpp index ccd70f4cb..27c788d75 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -151,6 +151,9 @@ SPObject::~SPObject() { sp_object_unref(this->_successor, NULL); this->_successor = NULL; } + if (parent) { + parent->children.erase(parent->children.iterator_to(*this)); + } if( style == NULL ) { // style pointer could be NULL if unreffed too many times. diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index b25a70b15..504a5e2ce 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -539,8 +539,8 @@ bool ClipboardManagerImpl::pasteSize(SPDesktop *desktop, bool separately, bool a else { Geom::OptRect sel_size = selection->visualBounds(); if ( sel_size ) { - sp_selection_scale_relative(selection, sel_size->midpoint(), - _getScale(desktop, min, max, *sel_size, apply_x, apply_y)); + sp_object_set_scale_relative(selection, sel_size->midpoint(), + _getScale(desktop, min, max, *sel_size, apply_x, apply_y)); } } pasted = true; diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 4ab007408..08fc25464 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -814,7 +814,7 @@ void Export::onAreaToggled () case SELECTION_SELECTION: if ((SP_ACTIVE_DESKTOP->getSelection())->isEmpty() == false) { - sp_selection_get_export_hints (SP_ACTIVE_DESKTOP->getSelection(), filename, &xdpi, &ydpi); + sp_object_set_get_export_hints(SP_ACTIVE_DESKTOP->getSelection(), filename, &xdpi, &ydpi); /* If we still don't have a filename -- let's build one that's nice */ diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index d4a0ffd68..d82b5ded3 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -723,12 +723,12 @@ void Transformation::applyPageMove(Inkscape::Selection *selection) if (!prefs->getBool("/dialogs/transformation/applyseparately")) { // move selection as a whole if (_check_move_relative.get_active()) { - sp_selection_move_relative(selection, x, y); + sp_object_set_move_relative(selection, x, y); } else { Geom::OptRect bbox = selection->preferredBounds(); if (bbox) { - sp_selection_move_relative(selection, - x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); + sp_object_set_move_relative(selection, + x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); } } } else { @@ -791,8 +791,8 @@ void Transformation::applyPageMove(Inkscape::Selection *selection) } else { Geom::OptRect bbox = selection->preferredBounds(); if (bbox) { - sp_selection_move_relative(selection, - x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); + sp_object_set_move_relative(selection, + x - bbox->min()[Geom::X], y - bbox->min()[Geom::Y]); } } } @@ -856,7 +856,7 @@ void Transformation::applyPageScale(Inkscape::Selection *selection) double y1 = bbox_pref->midpoint()[Geom::Y] + new_height/2; Geom::Affine scaler = get_scale_transform_for_variable_stroke (*bbox_pref, *bbox_geom, transform_stroke, preserve, x0, y0, x1, y1); - sp_selection_apply_affine(selection, scaler); + sp_object_set_apply_affine(selection, scaler); } } @@ -882,7 +882,7 @@ void Transformation::applyPageRotate(Inkscape::Selection *selection) } else { boost::optional center = selection->center(); if (center) { - sp_selection_rotate_relative(selection, *center, angle); + sp_object_set_rotate_relative(selection, *center, angle); } } @@ -949,7 +949,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) getDesktop()->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Transform matrix is singular, not used.")); return; } - sp_selection_skew_relative(selection, *center, 0.01*skewX, 0.01*skewY); + sp_object_set_skew_relative(selection, *center, 0.01 * skewX, 0.01 * skewY); } else if (_units_skew.isRadial()) { //deg or rad double angleX = _scalar_skew_horizontal.getValue("rad"); double angleY = _scalar_skew_vertical.getValue("rad"); @@ -962,7 +962,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) } double skewX = tan(-angleX); double skewY = tan(angleY); - sp_selection_skew_relative(selection, *center, skewX, skewY); + sp_object_set_skew_relative(selection, *center, skewX, skewY); } else { // absolute displacement double skewX = _scalar_skew_horizontal.getValue("px"); double skewY = _scalar_skew_vertical.getValue("px"); @@ -970,7 +970,7 @@ void Transformation::applyPageSkew(Inkscape::Selection *selection) getDesktop()->getMessageStack()->flash(Inkscape::WARNING_MESSAGE, _("Transform matrix is singular, not used.")); return; } - sp_selection_skew_relative(selection, *center, skewX/height, skewY/width); + sp_object_set_skew_relative(selection, *center, skewX / height, skewY / width); } } } @@ -1003,7 +1003,7 @@ void Transformation::applyPageTransform(Inkscape::Selection *selection) item->updateRepr(); } } else { - sp_selection_apply_affine(selection, displayed); // post-multiply each object's transform + sp_object_set_apply_affine(selection, displayed); // post-multiply each object's transform } DocumentUndo::done(selection->desktop()->getDocument(), SP_VERB_DIALOG_TRANSFORM, diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index d19526105..eb3034ca3 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -1250,7 +1250,7 @@ sp_ui_drag_data_received(GtkWidget *widget, Geom::OptRect sel_bbox = selection->visualBounds(); if (sel_bbox) { Geom::Point m( desktop->point() - sel_bbox->midpoint() ); - sp_selection_move_relative(selection, m, false); + sp_object_set_move_relative(selection, m, false); } } @@ -1916,7 +1916,7 @@ void ContextMenu::MakeGroupMenu(void) void ContextMenu::ActivateGroup(void) { - sp_selection_group_ui(_desktop->selection, _desktop); + sp_selection_group(_desktop->selection, _desktop); } void ContextMenu::ActivateUngroup(void) diff --git a/src/verbs.cpp b/src/verbs.cpp index 8255ea1ea..d6c239e86 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1133,22 +1133,22 @@ void SelectionVerb::perform(SPAction *action, void *data) sp_selected_path_slice(selection, dt); break; case SP_VERB_SELECTION_TO_FRONT: - sp_selection_raise_to_top_ui(selection, dt); + sp_selection_raise_to_top(selection, dt); break; case SP_VERB_SELECTION_TO_BACK: - sp_selection_lower_to_bottom_ui(selection, dt); + sp_selection_lower_to_bottom(selection, dt); break; case SP_VERB_SELECTION_RAISE: - sp_selection_raise_ui(selection, dt); + sp_selection_raise(selection, dt); break; case SP_VERB_SELECTION_LOWER: - sp_selection_lower_ui(selection, dt); + sp_selection_lower(selection, dt); break; case SP_VERB_SELECTION_GROUP: - sp_selection_group_ui(selection, dt); + sp_selection_group(selection, dt); break; case SP_VERB_SELECTION_UNGROUP: - sp_selection_ungroup_ui(selection, dt); + sp_selection_ungroup(selection, dt); break; case SP_VERB_SELECTION_UNGROUP_POP_SELECTION: sp_selection_ungroup_pop_selection(selection, dt); @@ -1520,7 +1520,7 @@ void ObjectVerb::perform( SPAction *action, void *data) sp_selection_rotate_90(dt, true); break; case SP_VERB_OBJECT_FLATTEN: - sp_selection_remove_transform(dt); + sp_object_set_remove_transform(dt); break; case SP_VERB_OBJECT_FLOW_TEXT: text_flow_into_shape(); @@ -1532,12 +1532,12 @@ void ObjectVerb::perform( SPAction *action, void *data) flowtext_to_text(); break; case SP_VERB_OBJECT_FLIP_HORIZONTAL: - sp_selection_scale_relative(sel, center, Geom::Scale(-1.0, 1.0)); + sp_object_set_scale_relative(sel, center, Geom::Scale(-1.0, 1.0)); DocumentUndo::done(dt->getDocument(), SP_VERB_OBJECT_FLIP_HORIZONTAL, _("Flip horizontally")); break; case SP_VERB_OBJECT_FLIP_VERTICAL: - sp_selection_scale_relative(sel, center, Geom::Scale(1.0, -1.0)); + sp_object_set_scale_relative(sel, center, Geom::Scale(1.0, -1.0)); DocumentUndo::done(dt->getDocument(), SP_VERB_OBJECT_FLIP_VERTICAL, _("Flip vertically")); break; diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 9851b0606..322c33cc3 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -257,7 +257,7 @@ sp_object_layout_any_value_changed(GtkAdjustment *adj, GObject *tbl) scaler = get_scale_transform_for_uniform_stroke (*bbox_geom, 0, 0, false, false, x0, y0, x1, y1); } - sp_selection_apply_affine(selection, scaler); + sp_object_set_apply_affine(selection, scaler); DocumentUndo::maybeDone(document, actionkey, SP_VERB_CONTEXT_SELECT, _("Transform by toolbar")); diff --git a/testfiles/src/object-set-test.cpp b/testfiles/src/object-set-test.cpp index 7d79eb3b8..79a49488a 100644 --- a/testfiles/src/object-set-test.cpp +++ b/testfiles/src/object-set-test.cpp @@ -14,8 +14,11 @@ #include #include #include +#include +#include using namespace Inkscape; +using namespace Inkscape::XML; class ObjectSetTest: public DocPerCaseTest { public: @@ -31,6 +34,25 @@ public: X = new SPObject(); set = new ObjectSet(); set2 = new ObjectSet(); + auto sd = new SimpleDocument(); + auto xt = new TextNode(Util::share_string("x"), sd); + auto ht = new TextNode(Util::share_string("h"), sd); + auto gt = new TextNode(Util::share_string("g"), sd); + auto ft = new TextNode(Util::share_string("f"), sd); + auto et = new TextNode(Util::share_string("e"), sd); + auto dt = new TextNode(Util::share_string("d"), sd); + auto ct = new TextNode(Util::share_string("c"), sd); + auto bt = new TextNode(Util::share_string("b"), sd); + auto at = new TextNode(Util::share_string("a"), sd); + X->invoke_build(_doc, xt, 0); + H->invoke_build(_doc, ht, 0); + G->invoke_build(_doc, gt, 0); + F->invoke_build(_doc, ft, 0); + E->invoke_build(_doc, et, 0); + D->invoke_build(_doc, dt, 0); + C->invoke_build(_doc, ct, 0); + B->invoke_build(_doc, bt, 0); + A->invoke_build(_doc, at, 0); } ~ObjectSetTest() { delete set; @@ -186,12 +208,10 @@ TEST_F(ObjectSetTest, Ranges) { } TEST_F(ObjectSetTest, Autoremoving) { - SPObject* Q = new SPObject(); - Q->invoke_build(_doc, _doc->rroot, 1); - set->add(Q); - EXPECT_TRUE(set->includes(Q)); + set->add(A); + EXPECT_TRUE(set->includes(A)); EXPECT_EQ(1, set->size()); - Q->releaseReferences(); + A->releaseReferences(); EXPECT_EQ(0, set->size()); } @@ -272,20 +292,18 @@ TEST_F(ObjectSetTest, Removing) { } TEST_F(ObjectSetTest, TwoSets) { - SPObject* Q = new SPObject(); - Q->invoke_build(_doc, _doc->rroot, 1); A->attach(B, nullptr); - A->attach(Q, nullptr); + A->attach(C, nullptr); set->add(A); set2->add(A); EXPECT_EQ(1, set->size()); EXPECT_EQ(1, set2->size()); set->remove(B); EXPECT_EQ(1, set->size()); - EXPECT_TRUE(set->includes(Q)); + EXPECT_TRUE(set->includes(C)); EXPECT_EQ(1, set2->size()); EXPECT_TRUE(set2->includes(A)); - Q->releaseReferences(); + C->releaseReferences(); EXPECT_EQ(0, set->size()); EXPECT_EQ(1, set2->size()); EXPECT_TRUE(set2->includes(A)); diff --git a/testfiles/src/sp-object-test.cpp b/testfiles/src/sp-object-test.cpp index cb4f6fc46..df811647f 100644 --- a/testfiles/src/sp-object-test.cpp +++ b/testfiles/src/sp-object-test.cpp @@ -14,9 +14,7 @@ #include #include #include -#include #include -#include using namespace Inkscape; using namespace Inkscape::XML; @@ -42,11 +40,11 @@ public: a->invoke_build(_doc, at, 0); } ~SPObjectTest() { - delete a; - delete b; - delete c; - delete d; delete e; + delete d; + delete c; + delete b; + delete a; } SPObject* a; SPObject* b; -- cgit v1.2.3 From eac1fe4375d3f7fb5fc447ddcbdd88920923593a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 27 Jul 2016 10:49:21 -0500 Subject: Add build dependencies (bzr r14950.1.11) --- snapcraft.yaml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/snapcraft.yaml b/snapcraft.yaml index 3451607b8..f9e49b466 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -20,6 +20,39 @@ parts: plugin: cmake source: . configflags: ['-DENABLE_BINRELOC=ON'] + build-packages: + - cmake + - intltool + - libart-2.0-dev + - libaspell-dev + - libboost-dev + - libcdr-dev + - libgc-dev + - libglib2.0-dev + - libgnomevfs2-dev + - libgsl-dev + - libgtk2.0-dev + - libgtkmm-2.4-dev + - libgtkspell-dev + - liblcms2-dev + - libmagick++-dev + - libpango1.0-dev + - libpng16-dev + - libpoppler-glib-dev + - libpoppler-private-dev + - libpopt-dev + - librevenge-dev + - libsigc++-2.0-dev + - libtool + - libvisio-dev + - libwpg-dev + - libxml-parser-perl + - libxml2-dev + - libxslt1-dev + - pkg-config + - python-dev + - python-lxml + - zlib1g-dev stage-packages: - libaspell15 - libatkmm-1.6-1v5 -- cgit v1.2.3 From 3078d10fcf276c0d36975bfd48ef064b46f60b3d Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:21:52 +0100 Subject: Disable GTK+ 2 support and delete internal copy of GDL Fixed bugs: - https://launchpad.net/bugs/1424830 - https://launchpad.net/bugs/1606558 (bzr r15023.2.1) --- CMakeLists.txt | 2 - CMakeScripts/DefineDependsandFlags.cmake | 29 - configure.ac | 89 +- src/CMakeLists.txt | 6 - src/Makefile.am | 11 - src/libgdl/CMakeLists.txt | 50 - src/libgdl/Makefile_insert | 92 -- src/libgdl/README.gdl-dock | 184 --- src/libgdl/gdl-dock-bar.c | 1049 ------------- src/libgdl/gdl-dock-bar.h | 74 - src/libgdl/gdl-dock-item-button-image.c | 166 --- src/libgdl/gdl-dock-item-button-image.h | 70 - src/libgdl/gdl-dock-item-grip.c | 809 ---------- src/libgdl/gdl-dock-item-grip.h | 77 - src/libgdl/gdl-dock-item.c | 2401 ------------------------------ src/libgdl/gdl-dock-item.h | 223 --- src/libgdl/gdl-dock-master.c | 1011 ------------- src/libgdl/gdl-dock-master.h | 106 -- src/libgdl/gdl-dock-notebook.c | 530 ------- src/libgdl/gdl-dock-notebook.h | 59 - src/libgdl/gdl-dock-object.c | 1027 ------------- src/libgdl/gdl-dock-object.h | 225 --- src/libgdl/gdl-dock-paned.c | 678 --------- src/libgdl/gdl-dock-paned.h | 64 - src/libgdl/gdl-dock-placeholder.c | 827 ---------- src/libgdl/gdl-dock-placeholder.h | 69 - src/libgdl/gdl-dock-tablabel.c | 632 -------- src/libgdl/gdl-dock-tablabel.h | 74 - src/libgdl/gdl-dock.c | 1365 ----------------- src/libgdl/gdl-dock.h | 99 -- src/libgdl/gdl-i18n.c | 43 - src/libgdl/gdl-i18n.h | 72 - src/libgdl/gdl-switcher.c | 1031 ------------- src/libgdl/gdl-switcher.h | 67 - src/libgdl/gdl-win32.c | 42 - src/libgdl/gdl-win32.h | 21 - src/libgdl/gdl.h | 32 - src/libgdl/libgdlmarshal.c | 173 --- src/libgdl/libgdlmarshal.h | 48 - src/libgdl/libgdlmarshal.list | 7 - src/libgdl/libgdltypebuiltins.c | 162 -- src/libgdl/libgdltypebuiltins.h | 38 - src/libgdl/makefile.in | 17 - src/widgets/CMakeLists.txt | 7 +- src/widgets/Makefile_insert | 8 +- 45 files changed, 11 insertions(+), 13855 deletions(-) delete mode 100644 src/libgdl/CMakeLists.txt delete mode 100644 src/libgdl/Makefile_insert delete mode 100644 src/libgdl/README.gdl-dock delete mode 100644 src/libgdl/gdl-dock-bar.c delete mode 100644 src/libgdl/gdl-dock-bar.h delete mode 100644 src/libgdl/gdl-dock-item-button-image.c delete mode 100644 src/libgdl/gdl-dock-item-button-image.h delete mode 100644 src/libgdl/gdl-dock-item-grip.c delete mode 100644 src/libgdl/gdl-dock-item-grip.h delete mode 100644 src/libgdl/gdl-dock-item.c delete mode 100644 src/libgdl/gdl-dock-item.h delete mode 100644 src/libgdl/gdl-dock-master.c delete mode 100644 src/libgdl/gdl-dock-master.h delete mode 100644 src/libgdl/gdl-dock-notebook.c delete mode 100644 src/libgdl/gdl-dock-notebook.h delete mode 100644 src/libgdl/gdl-dock-object.c delete mode 100644 src/libgdl/gdl-dock-object.h delete mode 100644 src/libgdl/gdl-dock-paned.c delete mode 100644 src/libgdl/gdl-dock-paned.h delete mode 100644 src/libgdl/gdl-dock-placeholder.c delete mode 100644 src/libgdl/gdl-dock-placeholder.h delete mode 100644 src/libgdl/gdl-dock-tablabel.c delete mode 100644 src/libgdl/gdl-dock-tablabel.h delete mode 100644 src/libgdl/gdl-dock.c delete mode 100644 src/libgdl/gdl-dock.h delete mode 100644 src/libgdl/gdl-i18n.c delete mode 100644 src/libgdl/gdl-i18n.h delete mode 100644 src/libgdl/gdl-switcher.c delete mode 100644 src/libgdl/gdl-switcher.h delete mode 100644 src/libgdl/gdl-win32.c delete mode 100644 src/libgdl/gdl-win32.h delete mode 100644 src/libgdl/gdl.h delete mode 100644 src/libgdl/libgdlmarshal.c delete mode 100644 src/libgdl/libgdlmarshal.h delete mode 100644 src/libgdl/libgdlmarshal.list delete mode 100644 src/libgdl/libgdltypebuiltins.c delete mode 100644 src/libgdl/libgdltypebuiltins.h delete mode 100644 src/libgdl/makefile.in diff --git a/CMakeLists.txt b/CMakeLists.txt index b4ec5993e..57440ef00 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,6 @@ option(WITH_LIBCDR "Compile with support of libcdr for CorelDRAW Diagrams" ON) option(WITH_LIBVISIO "Compile with support of libvisio for Microsoft Visio Diagrams" ON) option(WITH_LIBWPG "Compile with support of libwpg for WordPerfect Graphics" ON) option(WITH_NLS "Compile with Native Language Support (using gettext)" ON) -option(WITH_GTK3_EXPERIMENTAL "Enable compilation with GTK+3 (EXPERIMENTAL!)" OFF) # ----------------------------------------------------------------------------- # Test Harness @@ -238,7 +237,6 @@ message("ENABLE_POPPLER_CAIRO: ${ENABLE_POPPLER_CAIRO}") message("GMOCK_PRESENT: ${GMOCK_PRESENT}") message("WITH_DBUS: ${WITH_DBUS}") message("WITH_GNOME_VFS: ${WITH_GNOME_VFS}") -message("WITH_GTK3_EXPERIMENTAL: ${WITH_GTK3_EXPERIMENTAL}") message("WITH_GTKSPELL: ${WITH_GTKSPELL}") message("WITH_IMAGE_MAGICK: ${WITH_IMAGE_MAGICK}") message("WITH_LIBCDR: ${WITH_LIBCDR}") diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index b708484af..7117c1f7e 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -237,7 +237,6 @@ endif() set(TRY_GTKSPELL 1) # Include dependencies: # use patched version until GTK2_CAIROMMCONFIG_INCLUDE_DIR is added -if("${WITH_GTK3_EXPERIMENTAL}") pkg_check_modules( GTK3 REQUIRED @@ -247,10 +246,8 @@ if("${WITH_GTK3_EXPERIMENTAL}") gdk-3.0>=3.8 gdl-3.0>=3.4 ) - message("Using EXPERIMENTAL Gtkmm 3 build") list(APPEND INKSCAPE_CXX_FLAGS ${GTK3_CFLAGS_OTHER}) set(WITH_GTKMM_3_0 1) - message("Using external GDL") set(WITH_EXT_GDL 1) # Check whether we can use new features in Gtkmm 3.10 @@ -291,32 +288,6 @@ if("${WITH_GTK3_EXPERIMENTAL}") ${GTK3_LIBRARIES} ${GTKSPELL3_LIBRARIES} ) -else() - pkg_check_modules(GTK REQUIRED - gtkmm-2.4>=2.24 - gdkmm-2.4 - gtk+-2.0 - gdk-2.0 - ) - list(APPEND INKSCAPE_CXX_FLAGS ${GTK_CFLAGS_OTHER}) - pkg_check_modules(GTKSPELL2 gtkspell-2.0) - if("${GTKSPELL2_FOUND}") - message("Using GtkSpell 2") - add_definitions(${GTKSPELL2_CFLAGS_OTHER}) - set (WITH_GTKSPELL 1) - else() - unset(WITH_GTKSPELL) - endif() - list(APPEND INKSCAPE_INCS_SYS - ${GTK_INCLUDE_DIRS} - ${GTKSPELL2_INCLUDE_DIRS} - ) - - list(APPEND INKSCAPE_LIBS - ${GTK_LIBRARIES} - ${GTKSPELL2_LIBRARIES} - ) -endif() find_package(Freetype REQUIRED) list(APPEND INKSCAPE_INCS_SYS ${FREETYPE_INCLUDE_DIRS}) diff --git a/configure.ac b/configure.ac index 4cef05f70..bd20b8e6d 100644 --- a/configure.ac +++ b/configure.ac @@ -712,16 +712,6 @@ fi AC_CHECK_HEADER([boost/unordered_set.hpp], [AC_DEFINE(HAVE_BOOST_UNORDERED_SET, 1, [Boost unordered_set (Boost >= 1.36)])], []) -dnl ********************************* -dnl Allow experimental GTK+3 build -dnl ********************************* -AC_ARG_ENABLE(gtk3-experimental, - AS_HELP_STRING([--enable-gtk3-experimental], [enable compilation with GTK+3 (EXPERIMENTAL!)]), - [enable_gtk3=$enableval], [enable_gtk3=no]) - -with_gtkmm_3_0="no" -if test "x$enable_gtk3" = "xyes"; then - ink_spell_pkg= if pkg-config --exists gtkspell-3.0; then ink_spell_pkg=gtkspell-3.0 @@ -738,19 +728,12 @@ if test "x$enable_gtk3" = "xyes"; then dnl C++-specific compiler flags PKG_CHECK_MODULES(GTKMM, gtkmm-3.0 >= 3.8 - gdkmm-3.0 >= 3.8, - with_gtkmm_3_0=yes, - with_gtkmm_3_0=no) - - if test "x$with_gtkmm_3_0" = "xyes"; then - AC_MSG_RESULT([Using EXPERIMENTAL Gtkmm 3 build]) - AC_DEFINE(WITH_GTKMM_3_0,1,[Build with Gtkmm 3.x]) - - AC_MSG_RESULT([Using external GDL]) - AC_DEFINE(WITH_EXT_GDL,1,[Build with external GDL]) - else - AC_MSG_ERROR([Some dependencies were not fulfilled for the experimental GTK+ 3 build. One possible cause for this is a new dependency on the gdl-3.0 development package.]) - fi + gdkmm-3.0 >= 3.8) + + +dnl Drop these hacks as soon as we've got rid of all GTK+ 2/3 conditional blocks +AC_DEFINE([WITH_GTKMM_3_0], [1], [Use GTKmm 3.0 or higher]) +AC_DEFINE([WITH_EXT_GDL], [1], [Use external GDL]) # Check whether we can use new features in Gtkmm 3.10 # TODO: Drop this test and bump the version number in the GTK test above @@ -781,8 +764,7 @@ if test "x$enable_gtk3" = "xyes"; then dnl switch to Gtk+ 3 as a hard dependency # Check whether we are using the X11 backend target for Gtk+ 3. - m4_ifdef([GTK_CHECK_BACKEND], - [GTK_CHECK_BACKEND([x11], , [have_x11=yes], [have_x11=no])]) + GTK_CHECK_BACKEND([x11], , [have_x11=yes], [have_x11=no]) # Enable strict build options that should work on most systems unless # the build has been configured not to do so @@ -801,60 +783,6 @@ if test "x$enable_gtk3" = "xyes"; then CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS" CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS" fi -else - - ink_spell_pkg= - if pkg-config --exists gtkspell-2.0; then - ink_spell_pkg=gtkspell-2.0 - AC_DEFINE(WITH_GTKSPELL, 1, [enable gtk spelling widget]) - fi - - PKG_CHECK_MODULES(GTK, - gtk+-2.0 >= 2.24 - $ink_spell_pkg) - - dnl Separate out dependencies that are known to introduce C++-specific - dnl compiler flags - PKG_CHECK_MODULES(GTKMM, - gdkmm-2.4 >= 2.24 - gtkmm-2.4 >= 2.24) - - # Check whether we are using the X11 backend for Gtk+ 2. - AC_MSG_CHECKING([if Gtk+ 2.0 is using the X11 backend target]) - if test "x`$PKG_CONFIG --variable=target gtk+-2.0`" = "xx11"; then - have_x11=yes - else - have_x11=no - fi - AC_MSG_RESULT($have_x11) - - # Enable build strict options that should work on most systems unless - # the build has been configured explicitly not to do so - if test "x$enable_strict_build" != "xno"; then - # Prevent usage of deprecated Gtk+ symbols. These have all - # been removed in Gtk+ 3 so these checks are important. - CPPFLAGS="-DGTKMM_DISABLE_DEPRECATED $CPPFLAGS" - CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS" - - # Allow only top-level GTK+ headers to be used. This is mandatory - # for GTK+ >= 3.0 so there is no need to apply the flag in GTK+ 3 - # builds. - CPPFLAGS="-DGTK_DISABLE_SINGLE_INCLUDES $CPPFLAGS" - fi - - # Optionally enable strict build options that are known to cause build - # failure in many/most systems - if test "x$enable_strict_build" == "xhigh"; then - # FIXME: This causes build failure because our internal - # copy of GDL uses deprecated GDK symbols. - # - # This specific issue isn't a problem for GTK+ 3 builds because - # we build against external GDL >= 3.3.4 rather than using - # the deprecated internal code - CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS" - fi -fi -AM_CONDITIONAL(WITH_GTKMM_3_0, test "x$with_gtkmm_3_0" = "xyes") INKSCAPE_CFLAGS="$GTK_CFLAGS $INKSCAPE_CFLAGS" INKSCAPE_CXX_DEPS_CFLAGS="$GTKMM_CFLAGS $INKSCAPE_CXX_DEPS_CFLAGS" @@ -870,8 +798,6 @@ fi AC_SUBST(X11_CFLAGS) AC_SUBST(X11_LIBS) -AM_CONDITIONAL(WITH_EXT_GDL, test "x$with_gtkmm_3_0" = "xyes") - # Prevent usage of deprecated library symbols unless strict build # checking has been disabled if test "x$enable_strict_build" != "xno"; then @@ -1112,7 +1038,6 @@ src/filters/makefile src/helper/makefile src/io/makefile src/libcroco/makefile -src/libgdl/makefile src/libnrtype/makefile src/libavoid/makefile src/libuemf/makefile diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d4ba9b1f0..41e7a7967 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -467,7 +467,6 @@ add_subdirectory(libavoid) add_subdirectory(libcola) add_subdirectory(libcroco) add_subdirectory(inkgc) -add_subdirectory(libgdl) add_subdirectory(libuemf) add_subdirectory(libvpsc) add_subdirectory(livarot) @@ -540,11 +539,6 @@ set(INKSCAPE_TARGET_LIBS ${INKSCAPE_LIBS} ) -if (NOT "${WITH_EXT_GDL}") - # Insert it at the beginning of the list as the windows build fails otherwise - list (INSERT INKSCAPE_TARGET_LIBS 0 "gdl_LIB") -endif() - # Link the inkscape_base library against all external dependencies target_link_libraries(inkscape_base ${INKSCAPE_TARGET_LIBS}) diff --git a/src/Makefile.am b/src/Makefile.am index 087a727de..6e1dabdbd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,16 +16,9 @@ bin_PROGRAMS = inkscape inkview # Libraries which should be compiled by "make" but not installed. # Use this only for libraries that are really standalone, rather than for # source tree subdirectories. - -if !WITH_EXT_GDL -internal_GDL = libgdl/libgdl.a -endif - - noinst_LIBRARIES = \ libcroco/libcroco.a \ libavoid/libavoid.a \ - $(internal_GDL) \ libuemf/libuemf.a \ libcola/libcola.a \ inkgc/libinkgc.a \ @@ -51,7 +44,6 @@ all_libs = \ $(LIBVISIO_LIBS) \ $(LIBCDR_LIBS) \ $(DBUS_LIBS) \ - $(GDL_LIBS) \ $(IMAGEMAGICK_LIBS) \ $(X11_LIBS) @@ -82,7 +74,6 @@ AM_CPPFLAGS = \ $(LIBVISIO_CFLAGS) \ $(LIBCDR_CFLAGS) \ $(DBUS_CFLAGS) \ - $(GDL_CFLAGS) \ $(XFT_CFLAGS) \ $(LCMS_CFLAGS) \ $(POPPLER_CFLAGS) \ @@ -122,7 +113,6 @@ include helper/Makefile_insert include io/Makefile_insert include libcroco/Makefile_insert include inkgc/Makefile_insert -include libgdl/Makefile_insert include libnrtype/Makefile_insert include libavoid/Makefile_insert include livarot/Makefile_insert @@ -160,7 +150,6 @@ EXTRA_DIST += \ io/makefile.in \ libavoid/makefile.in \ libcroco/makefile.in \ - libgdl/makefile.in \ libnrtype/makefile.in \ libuemf/makefile.in \ livarot/makefile.in \ diff --git a/src/libgdl/CMakeLists.txt b/src/libgdl/CMakeLists.txt deleted file mode 100644 index a452320f7..000000000 --- a/src/libgdl/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -if (NOT "${WITH_EXT_GDL}") - - set(libgdl_SRC - gdl-dock-bar.c - gdl-dock-item-button-image.c - gdl-dock-item-grip.c - gdl-dock-item.c - gdl-dock-master.c - gdl-dock-notebook.c - gdl-dock-object.c - gdl-dock-paned.c - gdl-dock-placeholder.c - gdl-dock-tablabel.c - gdl-dock.c - gdl-i18n.c - gdl-switcher.c - libgdlmarshal.c - libgdltypebuiltins.c - - - # ------- - # Headers - gdl-dock-bar.h - gdl-dock-item-button-image.h - gdl-dock-item-grip.h - gdl-dock-item.h - gdl-dock-master.h - gdl-dock-notebook.h - gdl-dock-object.h - gdl-dock-paned.h - gdl-dock-placeholder.h - gdl-dock-tablabel.h - gdl-dock.h - gdl-i18n.h - gdl-switcher.h - gdl.h - libgdlmarshal.h - libgdltypebuiltins.h - ) - - if(WIN32) - list(APPEND libgdl_SRC - gdl-win32.c - gdl-win32.h - ) - endif() - - add_inkscape_lib(gdl_LIB "${libgdl_SRC}") - -endif() diff --git a/src/libgdl/Makefile_insert b/src/libgdl/Makefile_insert deleted file mode 100644 index e4cab95fc..000000000 --- a/src/libgdl/Makefile_insert +++ /dev/null @@ -1,92 +0,0 @@ -## Makefile.am fragment sourced by src/Makefile.am. - -if WITH_EXT_GDL - -EXTRA_DIST += \ - libgdl/gdl-dock-object.h \ - libgdl/gdl-dock-master.h \ - libgdl/gdl-dock.h \ - libgdl/gdl-dock-item.h \ - libgdl/gdl-dock-notebook.h \ - libgdl/gdl-dock-paned.h \ - libgdl/gdl-dock-tablabel.h \ - libgdl/gdl-dock-placeholder.h \ - libgdl/gdl-dock-bar.h \ - libgdl/gdl-i18n.h \ - libgdl/gdl-i18n.c \ - libgdl/gdl-dock-object.c \ - libgdl/gdl-dock-master.c \ - libgdl/gdl-dock.c \ - libgdl/gdl-dock-item.c \ - libgdl/gdl-dock-item-button-image.c \ - libgdl/gdl-dock-item-button-image.h \ - libgdl/gdl-dock-item-grip.h \ - libgdl/gdl-dock-item-grip.c \ - libgdl/gdl-dock-notebook.c \ - libgdl/gdl-dock-paned.c \ - libgdl/gdl-dock-tablabel.c \ - libgdl/gdl-dock-placeholder.c \ - libgdl/gdl-dock-bar.c \ - libgdl/gdl-switcher.h \ - libgdl/gdl-switcher.c \ - libgdl/gdl-win32.h \ - libgdl/gdl-win32.c \ - libgdl/libgdltypebuiltins.h \ - libgdl/libgdltypebuiltins.c \ - libgdl/libgdlmarshal.h \ - libgdl/libgdlmarshal.c \ - libgdl/gdl.h - -else # WITH_EXT_GDL - -libgdl/all: libgdl/libgdl.a - -libgdl/clean: - rm -f libgdl/libgdl.a $(libgdl_gdl_a_OBJECTS) - -# Suppress some non-critical warnings for libgdl. We will drop our forked copy -# of GDL once we upgrade to Gtk+ 3 so it's more important to minimise the number -# of changes we make to GDL than to fix these minor issues in trunk. - -if CC_WNO_UNUSED_BUT_SET_VARIABLE_SUPPORTED -libgdl_libgdl_a_CFLAGS = -Wno-unused-parameter -Wno-sign-compare -Wno-unused-variable -Wno-unused-but-set-variable -Wno-missing-field-initializers $(AM_CFLAGS) -else -libgdl_libgdl_a_CFLAGS = -Wno-unused-parameter -Wno-sign-compare -Wno-unused-variable -Wno-missing-field-initializers $(AM_CFLAGS) -endif - -libgdl_libgdl_a_SOURCES = \ - libgdl/gdl-dock-object.h \ - libgdl/gdl-dock-master.h \ - libgdl/gdl-dock.h \ - libgdl/gdl-dock-item.h \ - libgdl/gdl-dock-notebook.h \ - libgdl/gdl-dock-paned.h \ - libgdl/gdl-dock-tablabel.h \ - libgdl/gdl-dock-placeholder.h \ - libgdl/gdl-dock-bar.h \ - libgdl/gdl-i18n.h \ - libgdl/gdl-i18n.c \ - libgdl/gdl-dock-object.c \ - libgdl/gdl-dock-master.c \ - libgdl/gdl-dock.c \ - libgdl/gdl-dock-item.c \ - libgdl/gdl-dock-item-button-image.c \ - libgdl/gdl-dock-item-button-image.h \ - libgdl/gdl-dock-item-grip.h \ - libgdl/gdl-dock-item-grip.c \ - libgdl/gdl-dock-notebook.c \ - libgdl/gdl-dock-paned.c \ - libgdl/gdl-dock-tablabel.c \ - libgdl/gdl-dock-placeholder.c \ - libgdl/gdl-dock-bar.c \ - libgdl/gdl-switcher.h \ - libgdl/gdl-switcher.c \ - libgdl/gdl-win32.h \ - libgdl/gdl-win32.c \ - libgdl/libgdltypebuiltins.h \ - libgdl/libgdltypebuiltins.c \ - libgdl/libgdlmarshal.h \ - libgdl/libgdlmarshal.c \ - libgdl/gdl.h - -endif diff --git a/src/libgdl/README.gdl-dock b/src/libgdl/README.gdl-dock deleted file mode 100644 index 113926dbe..000000000 --- a/src/libgdl/README.gdl-dock +++ /dev/null @@ -1,184 +0,0 @@ -This file is meant to contain a little documentation about the GdlDock -and related widgets. It's incomplete and probably a bit out of date. -And it probably belongs to a doc/ subdirectory. - -Please send comments to the devtools list (gnome-devtools@gnome.org) -and report bugs to bugzilla (bugzilla.gnome.org). Also check the todo -list at the end of this document. - -Have fun, -Gustavo - - -Overview --------- - -The GdlDock is a hierarchical based docking widget. It is composed of -widgets derived from the abstract class GdlDockObject which defines -the basic interface for docking widgets on top of others. - -The toplevel entries for docks are GdlDock widgets, which in turn hold -a tree of GdlDockItem widgets. For the toplevel docks to be able to -interact with each other (when the user drags items from one place to -another) they're all kept in a user-invisible and automatic object -called the master. To participate in docking operations every -GdlDockObject must have the same master (the binding to the master is -done automatically). The master also keeps track of the manual items -(mostly those created with gdl_dock_*_new functions) which are in the -dock. - -Layout loading/saving service is provided by a separate object called -GdlDockLayout. Currently it stores information in XML format, but -another backend could be easily written. To keep the external XML -file in sync with the dock, monitor the "dirty" property of the layout -object and call gdl_dock_layout_save_to_file when this changes to -TRUE. No other action is required (the layout_changed is monitored by -the layout object for you now). - - -GdlDockObject -============= - -A DockObject has: - -- a master, which manages all the objects in a dock ring ("master" - property, construct only). - -- a name. If the object is manual the name can be used to recall the - object from any other object in the ring ("name" property). - -- a long, descriptive name ("long-name" property). - -A DockObject can be: - -- automatic or manual. If it's automatic it means the lifecycle of - the object is entirely managed by the dock master. If it's manual - in general means the user specified such object, and so it's not to - be destroyed automatically at any time. - -- frozen. In this case any call to reduce on the object has no - immediate effect. When the object is later thawn, any pending - reduce calls are made (maybe leading to the destruction of the - object). - -- attached or detached. In general for dock items, being attached - will mean the item has its widget->parent set. For docks it will - mean they belong to some dock master's ring. In general, automatic - objects which are detached will be destroyed (unless frozen). - -- bound to a master or free. In order to participate in dock - operations, each dock object must be bound to a dock master (which - is a separate, non-gui object). In general, bindings are treated - automatically by the object, and this is entirely true for automatic - objects. For manual objects, the master holds an additional - reference and has structures to store and recall them by nick names. - Normally, a manual object will only be destroyed when it's unbound - from the master. - -- simple or compound. This actually depends on the subclass of the - dock object. The difference is made so we can put restrictions in - how the objects are docked on top of another (e.g. you can't dock a - compound object inside a notebook). If you look at the whole - docking layout as a tree, simple objects are the leaves, while all - the interior nodes are compound. - -- reduced. This is only meaningful for compound objects. If the - number of contained items has decreased to one the compound type - object is no longer necessary to hold the child. In this case the - child is reattached to the object's parent. If the number of - contained items has reached zero, the object is detached and reduce - is called on its parent. For toplevel docks, the object is only - detached if it's automatic. In any case, the future of the object - itself depends on whether it's automatic or manual. - -- requested to possibly dock another object. Depending on the - type's behavior, the object can accept or reject this request. If - it accepts it, it should fill in some additional information - regarding how it will host the peer object. - -- asked to dock another object. Depending on the object's internal - structure and behavior two options can be taken: to dock the object - directly (e.g. a notebook docking another object); or to create an - automatic compound object which will be attached in place of the - actual object, and will host both the original object and the - requestor (e.g. a simple item docking another simple item, which - should create a paned/notebook). The type of the new object will be - decided by the original objet based on the docking position. - - -DETACHING: the action by which an object is unparented. The object is -then ready to be docked in some other place. Newly created objects -are always detached, except for toplevels (which are created attached -by default). An automatic object which is detached gets destroyed -afterwards, since its ref count drops to zero. Floating automatic -toplevels never reach a zero ref count when detached, since the -GtkWindow always keeps a reference to it (and the GtkWindow has a user -reference). That's why floating automatic toplevels are destroyed -when reduced. - -REDUCING: for compound objects, when the number of contained children -drops to one or zero, the container is no longer necessary. In this -case, the object is detached, and any remaining child is reattached to -the object's former parent. The limit for toplevels is one for -automatic objects and zero for manual (i.e. they can even be empty). -For simple (not compound) objects reducing doesn't make sense. - -UNBINDING: to participate in a dock ring, every object must be bound -to a master. The master connects to dock item signals and keeps a -list of bound toplevels. Additionally, a reference is kept for manual -objects (this is so the user doesn't need to keep track of them, but -can perform operations like hiding and such). - - - -GdlDock -======= - -- Properties: - - "floating" (gboolean, construct-only): whether the dock is floating in - its own window or not. - - "default-title" (gchar, read-write): title for new floating docks. - This property is proxied to the master, which truly holds it. - -The title for the floating docks is: the user supplied title -(GdlDockObject's long_name property) if it's set, the default title -(from the master) or an automatically generated title. - - -- Signals: - - "layout-changed": emitted when the user changed the layout of the - dock somehow. - - -TODO LIST -========= - -- Functionality for the item grip: provide a11y - -- Implement notebook tab reordering - -- Implement dock bands for toolbars and menus. - -- A dock-related thing is to build resizable toolbars (something like - the ones Windows have, where the buttons are reflowed according to - the space available). - -- Redesign paneds so they can hold more than two items and resize all - of them at once by using the handle (see if gimpdock does that). - -- Find a way to allow the merging of menu items to the item's popup - menu. Also, there should be a way for the master to insert some - menu items. - -- Bonobo UI synchronizer. - -- Item behavoirs: implement the ones missing and maybe think more of - them (e.g. positions where it's possible to dock the item, etc.) - -- Make a nicer dragbar for the items, with buttons for undocking, - closing, hidding, etc. (See sodipodi, kdevelop) - - diff --git a/src/libgdl/gdl-dock-bar.c b/src/libgdl/gdl-dock-bar.c deleted file mode 100644 index c1fe21872..000000000 --- a/src/libgdl/gdl-dock-bar.c +++ /dev/null @@ -1,1049 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2003 Jeroen Zwartepoorte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock.h" -#include "gdl-dock-master.h" -#include "gdl-dock-bar.h" -#include "libgdltypebuiltins.h" - -enum { - PROP_0, - PROP_MASTER, - PROP_DOCKBAR_STYLE -}; - -/* ----- Private prototypes ----- */ - -static void gdl_dock_bar_class_init (GdlDockBarClass *klass); - -static void gdl_dock_bar_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gdl_dock_bar_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); - -static void gdl_dock_bar_destroy (GtkObject *object); - -static void gdl_dock_bar_attach (GdlDockBar *dockbar, - GdlDockMaster *master); -static void gdl_dock_bar_remove_item (GdlDockBar *dockbar, - GdlDockItem *item); - -/* ----- Class variables and definitions ----- */ - -struct _GdlDockBarPrivate { - GdlDockMaster *master; - GSList *items; - GtkOrientation orientation; - GdlDockBarStyle dockbar_style; -}; - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockBar, gdl_dock_bar, GTK_TYPE_BOX) - -static void gdl_dock_bar_size_request (GtkWidget *widget, - GtkRequisition *requisition ); -static void gdl_dock_bar_size_allocate (GtkWidget *widget, - GtkAllocation *allocation ); -static void gdl_dock_bar_size_vrequest (GtkWidget *widget, - GtkRequisition *requisition ); -static void gdl_dock_bar_size_vallocate (GtkWidget *widget, - GtkAllocation *allocation ); -static void gdl_dock_bar_size_hrequest (GtkWidget *widget, - GtkRequisition *requisition ); -static void gdl_dock_bar_size_hallocate (GtkWidget *widget, - GtkAllocation *allocation ); -static void update_dock_items (GdlDockBar *dockbar, gboolean full_update); - -void -gdl_dock_bar_class_init (GdlDockBarClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - - g_object_class->get_property = gdl_dock_bar_get_property; - g_object_class->set_property = gdl_dock_bar_set_property; - - gtk_object_class->destroy = gdl_dock_bar_destroy; - - g_object_class_install_property ( - g_object_class, PROP_MASTER, - g_param_spec_object ("master", _("Master"), - _("GdlDockMaster object which the dockbar widget " - "is attached to"), - GDL_TYPE_DOCK_MASTER, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_DOCKBAR_STYLE, - g_param_spec_enum ("dockbar-style", _("Dockbar style"), - _("Dockbar style to show items on it"), - GDL_TYPE_DOCK_BAR_STYLE, - GDL_DOCK_BAR_BOTH, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - widget_class = GTK_WIDGET_CLASS (klass); - widget_class->size_request = gdl_dock_bar_size_request; - widget_class->size_allocate = gdl_dock_bar_size_allocate; -} - -static void -gdl_dock_bar_init (GdlDockBar *dockbar) -{ - dockbar->_priv = g_new0 (GdlDockBarPrivate, 1); - dockbar->_priv->master = NULL; - dockbar->_priv->items = NULL; - dockbar->_priv->orientation = GTK_ORIENTATION_VERTICAL; - dockbar->_priv->dockbar_style = GDL_DOCK_BAR_BOTH; -} - -static void -gdl_dock_bar_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockBar *dockbar = GDL_DOCK_BAR (object); - - switch (prop_id) { - case PROP_MASTER: - g_value_set_object (value, dockbar->_priv->master); - break; - case PROP_DOCKBAR_STYLE: - g_value_set_enum (value, dockbar->_priv->dockbar_style); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - }; -} - -static void -gdl_dock_bar_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockBar *dockbar = GDL_DOCK_BAR (object); - - switch (prop_id) { - case PROP_MASTER: - gdl_dock_bar_attach (dockbar, g_value_get_object (value)); - break; - case PROP_DOCKBAR_STYLE: - dockbar->_priv->dockbar_style = g_value_get_enum (value); - update_dock_items (dockbar, TRUE); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - }; -} - -static void -on_dock_item_foreach_disconnect (GdlDockItem *item, GdlDockBar *dock_bar) -{ - g_signal_handlers_disconnect_by_func (item, gdl_dock_bar_remove_item, - dock_bar); -} - -static void -gdl_dock_bar_destroy (GtkObject *object) -{ - GdlDockBar *dockbar = GDL_DOCK_BAR (object); - - if (dockbar->_priv) { - GdlDockBarPrivate *priv = dockbar->_priv; - - if (priv->items) { - g_slist_foreach (priv->items, - (GFunc) on_dock_item_foreach_disconnect, - object); - g_slist_free (priv->items); - } - - if (priv->master) { - g_signal_handlers_disconnect_matched (priv->master, - G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, dockbar); - g_object_unref (priv->master); - priv->master = NULL; - } - - dockbar->_priv = NULL; - - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_bar_parent_class)->destroy (object); -} - -static void -gdl_dock_bar_remove_item (GdlDockBar *dockbar, - GdlDockItem *item) -{ - GdlDockBarPrivate *priv; - GtkWidget *button; - - g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); - g_return_if_fail (GDL_IS_DOCK_ITEM (item)); - - priv = dockbar->_priv; - - if (g_slist_index (priv->items, item) == -1) { - g_warning ("Item has not been added to the dockbar"); - return; - } - - priv->items = g_slist_remove (priv->items, item); - - button = g_object_get_data (G_OBJECT (item), "GdlDockBarButton"); - g_assert (button != NULL); - gtk_container_remove (GTK_CONTAINER (dockbar), button); - g_object_set_data (G_OBJECT (item), "GdlDockBarButton", NULL); - g_signal_handlers_disconnect_by_func (item, - G_CALLBACK (gdl_dock_bar_remove_item), - dockbar); -} - -static void -gdl_dock_bar_item_clicked (GtkWidget *button, - GdlDockItem *item) -{ - GdlDockBar *dockbar; - GdlDockObject *controller; - - g_return_if_fail (item != NULL); - - dockbar = g_object_get_data (G_OBJECT (item), "GdlDockBar"); - g_assert (dockbar != NULL); - g_object_set_data (G_OBJECT (item), "GdlDockBar", NULL); - - controller = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (item)); - - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ICONIFIED); - gdl_dock_item_show_item (item); - gdl_dock_bar_remove_item (dockbar, item); - gtk_widget_queue_resize (GTK_WIDGET (controller)); -} - -static void -gdl_dock_bar_add_item (GdlDockBar *dockbar, - GdlDockItem *item) -{ - GdlDockBarPrivate *priv; - GtkWidget *button; - gchar *stock_id; - gchar *name; - GdkPixbuf *pixbuf_icon; - GtkWidget *image, *box, *label; - - g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); - g_return_if_fail (GDL_IS_DOCK_ITEM (item)); - - priv = dockbar->_priv; - - if (g_slist_index (priv->items, item) != -1) { - g_warning ("Item has already been added to the dockbar"); - return; - } - - priv->items = g_slist_append (priv->items, item); - - /* Create a button for the item. */ - button = gtk_button_new (); - gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE); - - if (dockbar->_priv->orientation == GTK_ORIENTATION_HORIZONTAL) - box = gtk_hbox_new (FALSE, 0); - else - box = gtk_vbox_new (FALSE, 0); - - g_object_get (item, "stock-id", &stock_id, "pixbuf-icon", &pixbuf_icon, - "long-name", &name, NULL); - - if (dockbar->_priv->dockbar_style == GDL_DOCK_BAR_TEXT || - dockbar->_priv->dockbar_style == GDL_DOCK_BAR_BOTH) { - label = gtk_label_new (name); - if (dockbar->_priv->orientation == GTK_ORIENTATION_VERTICAL) - gtk_label_set_angle (GTK_LABEL (label), 90); - gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0); - } - - /* FIXME: For now AUTO behaves same as BOTH */ - - if (dockbar->_priv->dockbar_style == GDL_DOCK_BAR_ICONS || - dockbar->_priv->dockbar_style == GDL_DOCK_BAR_BOTH || - dockbar->_priv->dockbar_style == GDL_DOCK_BAR_AUTO) { - if (stock_id) { - image = gtk_image_new_from_stock (stock_id, - GTK_ICON_SIZE_SMALL_TOOLBAR); - g_free (stock_id); - } else if (pixbuf_icon) { - image = gtk_image_new_from_pixbuf (pixbuf_icon); - } else { - image = gtk_image_new_from_stock ("gtk-new", - GTK_ICON_SIZE_SMALL_TOOLBAR); - } - gtk_box_pack_start (GTK_BOX (box), image, TRUE, TRUE, 0); - } - - gtk_container_add (GTK_CONTAINER (button), box); - gtk_box_pack_start (GTK_BOX (dockbar), button, FALSE, FALSE, 0); - - gtk_widget_set_tooltip_text (button, name); - g_free (name); - - g_object_set_data (G_OBJECT (item), "GdlDockBar", dockbar); - g_object_set_data (G_OBJECT (item), "GdlDockBarButton", button); - g_signal_connect (G_OBJECT (button), "clicked", - G_CALLBACK (gdl_dock_bar_item_clicked), item); - - gtk_widget_show_all (button); - - /* Set up destroy notify */ - g_signal_connect_swapped (item, "destroy", - G_CALLBACK (gdl_dock_bar_remove_item), - dockbar); -} - -static void -build_list (GdlDockObject *object, GList **list) -{ - /* add only items, not toplevels */ - if (GDL_IS_DOCK_ITEM (object)) - *list = g_list_prepend (*list, object); -} - -static void -update_dock_items (GdlDockBar *dockbar, gboolean full_update) -{ - GdlDockMaster *master; - GList *items, *l; - - g_return_if_fail (dockbar != NULL); - - if (!dockbar->_priv->master) - return; - - master = dockbar->_priv->master; - - /* build items list */ - items = NULL; - gdl_dock_master_foreach (master, (GFunc) build_list, &items); - - if (!full_update) { - for (l = items; l != NULL; l = l->next) { - GdlDockItem *item = GDL_DOCK_ITEM (l->data); - - if (g_slist_index (dockbar->_priv->items, item) != -1 && - !GDL_DOCK_ITEM_ICONIFIED (item)) - gdl_dock_bar_remove_item (dockbar, item); - else if (g_slist_index (dockbar->_priv->items, item) == -1 && - GDL_DOCK_ITEM_ICONIFIED (item)) - gdl_dock_bar_add_item (dockbar, item); - } - } else { - for (l = items; l != NULL; l = l->next) { - GdlDockItem *item = GDL_DOCK_ITEM (l->data); - - if (g_slist_index (dockbar->_priv->items, item) != -1) - gdl_dock_bar_remove_item (dockbar, item); - if (GDL_DOCK_ITEM_ICONIFIED (item)) - gdl_dock_bar_add_item (dockbar, item); - } - } - g_list_free (items); -} - -static void -gdl_dock_bar_layout_changed_cb (GdlDockMaster *master, - GdlDockBar *dockbar) -{ - update_dock_items (dockbar, FALSE); -} - -static void -gdl_dock_bar_attach (GdlDockBar *dockbar, - GdlDockMaster *master) -{ - g_return_if_fail (dockbar != NULL); - g_return_if_fail (master == NULL || GDL_IS_DOCK_MASTER (master)); - - if (dockbar->_priv->master) { - g_signal_handlers_disconnect_matched (dockbar->_priv->master, - G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, dockbar); - g_object_unref (dockbar->_priv->master); - } - - dockbar->_priv->master = master; - if (dockbar->_priv->master) { - g_object_ref (dockbar->_priv->master); - g_signal_connect (dockbar->_priv->master, "layout-changed", - G_CALLBACK (gdl_dock_bar_layout_changed_cb), - dockbar); - } - - update_dock_items (dockbar, FALSE); -} - -static void gdl_dock_bar_size_request (GtkWidget *widget, - GtkRequisition *requisition ) -{ - GdlDockBar *dockbar; - - dockbar = GDL_DOCK_BAR (widget); - - /* default to vertical for unknown values */ - switch (dockbar->_priv->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - gdl_dock_bar_size_hrequest (widget, requisition); - break; - case GTK_ORIENTATION_VERTICAL: - default: - gdl_dock_bar_size_vrequest (widget, requisition); - break; - } -} - -static void gdl_dock_bar_size_allocate (GtkWidget *widget, - GtkAllocation *allocation ) -{ - GdlDockBar *dockbar; - - dockbar = GDL_DOCK_BAR (widget); - - /* default to vertical for unknown values */ - switch (dockbar->_priv->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - gdl_dock_bar_size_hallocate (widget, allocation); - break; - case GTK_ORIENTATION_VERTICAL: - default: - gdl_dock_bar_size_vallocate (widget, allocation); - break; - } -} - -static void gdl_dock_bar_size_vrequest (GtkWidget *widget, - GtkRequisition *requisition ) -{ - GtkBox *box; - GtkRequisition child_requisition; - GList *child; - gint nvis_children; - gint height; - guint border_width; - - box = GTK_BOX (widget); - requisition->width = 0; - requisition->height = 0; - nvis_children = 0; - - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - if (gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_widget_size_request (GTK_WIDGET (child->data), &child_requisition); - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if (gtk_box_get_homogeneous (box)) - { - height = child_requisition.height + padding * 2; - requisition->height = MAX (requisition->height, height); - } - else - { - requisition->height += child_requisition.height + padding * 2; - } - - requisition->width = MAX (requisition->width, child_requisition.width); - - nvis_children += 1; - } - } - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - requisition->height *= nvis_children; - requisition->height += (nvis_children - 1) * gtk_box_get_spacing (box); - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - requisition->width += border_width * 2; - requisition->height += border_width * 2; - -} - -static void gdl_dock_bar_size_vallocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkBox *box; - GList *child; - GtkAllocation child_allocation; - gint nvis_children; - gint nexpand_children; - gint child_height; - gint height; - gint extra; - gint y; - guint border_width; - GtkRequisition requisition; - - box = GTK_BOX (widget); - gtk_widget_set_allocation (widget, allocation); - - gtk_widget_get_requisition (widget, &requisition); - - nvis_children = 0; - nexpand_children = 0; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - if (gtk_widget_get_visible (GTK_WIDGET(child->data))) - { - nvis_children += 1; - if (expand) - nexpand_children += 1; - } - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - { - height = (allocation->height - - border_width * 2 - - (nvis_children - 1) * gtk_box_get_spacing (box)); - extra = height / nvis_children; - } - else if (nexpand_children > 0) - { - height = (gint) allocation->height - (gint) requisition.height; - extra = height / nexpand_children; - } - else - { - height = 0; - extra = 0; - } - - y = allocation->y + border_width; - child_allocation.x = allocation->x + border_width; - child_allocation.width = MAX (1, (gint) allocation->width - (gint) border_width * 2); - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_START) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_height = height; - else - child_height = extra; - - nvis_children -= 1; - height -= extra; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - child_height = child_requisition.height + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_height += height; - else - child_height += extra; - - nexpand_children -= 1; - height -= extra; - } - } - - if (fill) - { - child_allocation.height = MAX (1, child_height - padding * 2); - child_allocation.y = y + padding; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - child_allocation.height = child_requisition.height; - child_allocation.y = y + (child_height - child_allocation.height) / 2; - } - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - y += child_height + gtk_box_get_spacing (box); - } - } - - y = allocation->y + allocation->height - border_width; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_END) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - GtkRequisition child_requisition; - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_height = height; - else - child_height = extra; - - nvis_children -= 1; - height -= extra; - } - else - { - child_height = child_requisition.height + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_height += height; - else - child_height += extra; - - nexpand_children -= 1; - height -= extra; - } - } - - if (fill) - { - child_allocation.height = MAX (1, child_height - padding * 2); - child_allocation.y = y + padding - child_height; - } - else - { - child_allocation.height = child_requisition.height; - child_allocation.y = y + (child_height - child_allocation.height) / 2 - child_height; - } - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - y -= (child_height + gtk_box_get_spacing (box)); - } - } - } -} - -static void gdl_dock_bar_size_hrequest (GtkWidget *widget, - GtkRequisition *requisition ) -{ - GtkBox *box; - GList *child; - gint nvis_children; - gint width; - guint border_width; - - box = GTK_BOX (widget); - requisition->width = 0; - requisition->height = 0; - nvis_children = 0; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - - if (gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - GtkRequisition child_requisition; - - gtk_widget_size_request (GTK_WIDGET (child->data), &child_requisition); - - if (gtk_box_get_homogeneous (box)) - { - width = child_requisition.width + padding * 2; - requisition->width = MAX (requisition->width, width); - } - else - { - requisition->width += child_requisition.width + padding * 2; - } - - requisition->height = MAX (requisition->height, child_requisition.height); - - nvis_children += 1; - } - } - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - requisition->width *= nvis_children; - requisition->width += (nvis_children - 1) * gtk_box_get_spacing (box); - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - requisition->width += border_width * 2; - requisition->height += border_width * 2; -} - -static void gdl_dock_bar_size_hallocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkBox *box; - GList *child; - GtkAllocation child_allocation; - gint nvis_children; - gint nexpand_children; - gint child_width; - gint width; - gint extra; - gint x; - guint border_width; - GtkTextDirection direction; - GtkRequisition requisition; - - box = GTK_BOX (widget); - gtk_widget_set_allocation (widget, allocation); - gtk_widget_get_requisition (widget, &requisition); - - direction = gtk_widget_get_direction (widget); - - nvis_children = 0; - nexpand_children = 0; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if (gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - nvis_children += 1; - if (expand) - nexpand_children += 1; - } - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (box)); - - if (nvis_children > 0) - { - if (gtk_box_get_homogeneous (box)) - { - width = (allocation->width - - border_width * 2 - - (nvis_children - 1) * gtk_box_get_spacing (box)); - extra = width / nvis_children; - } - else if (nexpand_children > 0) - { - width = (gint) allocation->width - (gint) requisition.width; - extra = width / nexpand_children; - } - else - { - width = 0; - extra = 0; - } - - x = allocation->x + border_width; - child_allocation.y = allocation->y + border_width; - child_allocation.height = MAX (1, (gint) allocation->height - (gint) border_width * 2); - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_START) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_width = width; - else - child_width = extra; - - nvis_children -= 1; - width -= extra; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - - child_width = child_requisition.width + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_width += width; - else - child_width += extra; - - nexpand_children -= 1; - width -= extra; - } - } - - if (fill) - { - child_allocation.width = MAX (1, child_width - padding * 2); - child_allocation.x = x + padding; - } - else - { - GtkRequisition child_requisition; - - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - child_allocation.width = child_requisition.width; - child_allocation.x = x + (child_width - child_allocation.width) / 2; - } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - x += child_width + gtk_box_get_spacing (box); - } - } - - x = allocation->x + allocation->width - border_width; - - for (child = gtk_container_get_children (GTK_CONTAINER (box)); - child != NULL; child = g_list_next (child)) - { - guint padding; - gboolean expand; - gboolean fill; - GtkPackType pack_type; - - gtk_box_query_child_packing (box, - child->data, - &expand, - &fill, - &padding, - &pack_type); - - if ((pack_type == GTK_PACK_END) && gtk_widget_get_visible (GTK_WIDGET (child->data))) - { - GtkRequisition child_requisition; - gtk_widget_get_child_requisition (GTK_WIDGET (child->data), &child_requisition); - - if (gtk_box_get_homogeneous (box)) - { - if (nvis_children == 1) - child_width = width; - else - child_width = extra; - - nvis_children -= 1; - width -= extra; - } - else - { - child_width = child_requisition.width + padding * 2; - - if (expand) - { - if (nexpand_children == 1) - child_width += width; - else - child_width += extra; - - nexpand_children -= 1; - width -= extra; - } - } - - if (fill) - { - child_allocation.width = MAX (1, child_width - padding * 2); - child_allocation.x = x + padding - child_width; - } - else - { - child_allocation.width = child_requisition.width; - child_allocation.x = x + (child_width - child_allocation.width) / 2 - child_width; - } - - if (direction == GTK_TEXT_DIR_RTL) - child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; - - gtk_widget_size_allocate (GTK_WIDGET (child->data), &child_allocation); - - x -= (child_width + gtk_box_get_spacing (box)); - } - } - } -} - -GtkWidget * -gdl_dock_bar_new (GdlDock *dock) -{ - GdlDockMaster *master = NULL; - - /* get the master of the given dock */ - if (dock) - master = GDL_DOCK_OBJECT_GET_MASTER (dock); - - return g_object_new (GDL_TYPE_DOCK_BAR, - "master", master, NULL); -} - -GtkOrientation gdl_dock_bar_get_orientation (GdlDockBar *dockbar) -{ - g_return_val_if_fail (GDL_IS_DOCK_BAR (dockbar), - GTK_ORIENTATION_VERTICAL); - - return dockbar->_priv->orientation; -} - -void gdl_dock_bar_set_orientation (GdlDockBar *dockbar, - GtkOrientation orientation) -{ - g_return_if_fail (GDL_IS_DOCK_BAR (dockbar)); - - dockbar->_priv->orientation = orientation; - - gtk_widget_queue_resize (GTK_WIDGET (dockbar)); -} - -void gdl_dock_bar_set_style(GdlDockBar* dockbar, - GdlDockBarStyle style) -{ - g_object_set(G_OBJECT(dockbar), "dockbar-style", style, NULL); -} - -GdlDockBarStyle gdl_dock_bar_get_style(GdlDockBar* dockbar) -{ - GdlDockBarStyle style; - g_object_get(G_OBJECT(dockbar), "dockbar-style", &style, NULL); - return style; -} diff --git a/src/libgdl/gdl-dock-bar.h b/src/libgdl/gdl-dock-bar.h deleted file mode 100644 index ca6da1d26..000000000 --- a/src/libgdl/gdl-dock-bar.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2003 Jeroen Zwartepoorte - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_BAR_H__ -#define __GDL_DOCK_BAR_H__ - -#include - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_BAR (gdl_dock_bar_get_type ()) -#define GDL_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_BAR, GdlDockBar)) -#define GDL_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_BAR, GdlDockBarClass)) -#define GDL_IS_DOCK_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_BAR)) -#define GDL_IS_DOCK_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_BAR)) -#define GDL_DOCK_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_BAR, GdlDockBarClass)) - -/* data types & structures */ -typedef struct _GdlDockBar GdlDockBar; -typedef struct _GdlDockBarClass GdlDockBarClass; -typedef struct _GdlDockBarPrivate GdlDockBarPrivate; - -typedef enum { - GDL_DOCK_BAR_ICONS, - GDL_DOCK_BAR_TEXT, - GDL_DOCK_BAR_BOTH, - GDL_DOCK_BAR_AUTO -} GdlDockBarStyle; - -struct _GdlDockBar { - GtkBox parent; - - GdlDock *dock; - - GdlDockBarPrivate *_priv; -}; - -struct _GdlDockBarClass { - GtkVBoxClass parent_class; -}; - -GType gdl_dock_bar_get_type (void); - -GtkWidget *gdl_dock_bar_new (GdlDock *dock); - -GtkOrientation gdl_dock_bar_get_orientation (GdlDockBar *dockbar); -void gdl_dock_bar_set_orientation (GdlDockBar *dockbar, - GtkOrientation orientation); -void gdl_dock_bar_set_style (GdlDockBar *dockbar, - GdlDockBarStyle style); -GdlDockBarStyle gdl_dock_bar_get_style (GdlDockBar *dockbar); - -G_END_DECLS - -#endif /* __GDL_DOCK_BAR_H__ */ diff --git a/src/libgdl/gdl-dock-item-button-image.c b/src/libgdl/gdl-dock-item-button-image.c deleted file mode 100644 index 77cfe5d6c..000000000 --- a/src/libgdl/gdl-dock-item-button-image.c +++ /dev/null @@ -1,166 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item-button-image.c - * - * Author: Joel Holdsworth - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gdl-dock-item-button-image.h" - -#include - -#define ICON_SIZE 12 - -G_DEFINE_TYPE (GdlDockItemButtonImage, - gdl_dock_item_button_image, - GTK_TYPE_WIDGET); - -static gint -gdl_dock_item_button_image_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - GdlDockItemButtonImage *button_image; - GtkStyle *style; - GdkColor *color; - - g_return_val_if_fail (widget != NULL, 0); - button_image = GDL_DOCK_ITEM_BUTTON_IMAGE (widget); - - cairo_t *cr = gdk_cairo_create (event->window); - cairo_translate (cr, event->area.x, event->area.y); - - /* Set up the pen */ - cairo_set_line_width(cr, 1.0); - - style = gtk_widget_get_style (widget); - g_return_val_if_fail (style != NULL, 0); - color = &style->fg[GTK_STATE_NORMAL]; - cairo_set_source_rgba(cr, color->red / 65535.0, - color->green / 65535.0, color->blue / 65535.0, 0.55); - - /* Draw the icon border */ - cairo_move_to (cr, 10.5, 2.5); - cairo_arc (cr, 10.5, 4.5, 2, -0.5 * M_PI, 0); - cairo_line_to (cr, 12.5, 10.5); - cairo_arc (cr, 10.5, 10.5, 2, 0, 0.5 * M_PI); - cairo_line_to (cr, 4.5, 12.5); - cairo_arc (cr, 4.5, 10.5, 2, 0.5 * M_PI, M_PI); - cairo_line_to (cr, 2.5, 4.5); - cairo_arc (cr, 4.5, 4.5, 2, M_PI, 1.5 * M_PI); - cairo_close_path (cr); - - cairo_stroke (cr); - - /* Draw the icon */ - cairo_new_path (cr); - - switch(button_image->image_type) { - case GDL_DOCK_ITEM_BUTTON_IMAGE_CLOSE: - cairo_move_to (cr, 4.0, 5.5); - cairo_line_to (cr, 4.0, 5.5); - cairo_line_to (cr, 6.0, 7.5); - cairo_line_to (cr, 4.0, 9.5); - cairo_line_to (cr, 5.5, 11.0); - cairo_line_to (cr, 7.5, 9.0); - cairo_line_to (cr, 9.5, 11.0); - cairo_line_to (cr, 11.0, 9.5); - cairo_line_to (cr, 9.0, 7.5); - cairo_line_to (cr, 11.0, 5.5); - cairo_line_to (cr, 9.5, 4.0); - cairo_line_to (cr, 7.5, 6.0); - cairo_line_to (cr, 5.5, 4.0); - cairo_close_path (cr); - break; - - case GDL_DOCK_ITEM_BUTTON_IMAGE_ICONIFY: - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) { - cairo_move_to (cr, 4.5, 7.5); - cairo_line_to (cr, 10.0, 4.75); - cairo_line_to (cr, 10.0, 10.25); - cairo_close_path (cr); - } else { - cairo_move_to (cr, 10.5, 7.5); - cairo_line_to (cr, 5, 4.75); - cairo_line_to (cr, 5, 10.25); - cairo_close_path (cr); - } - break; - - default: - break; - } - - cairo_fill (cr); - - /* Finish up */ - cairo_destroy (cr); - - return 0; -} - -static void -gdl_dock_item_button_image_init ( - GdlDockItemButtonImage *button_image) -{ - gtk_widget_set_has_window (GTK_WIDGET (button_image), FALSE); -} - -static void -gdl_dock_item_button_image_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - g_return_if_fail (GDL_IS_DOCK_ITEM_BUTTON_IMAGE (widget)); - g_return_if_fail (requisition != NULL); - - requisition->width = ICON_SIZE; - requisition->height = ICON_SIZE; -} - -static void -gdl_dock_item_button_image_class_init ( - GdlDockItemButtonImageClass *klass) -{ - //GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - //GtkObjectClass *gtk_object_class = GTK_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - widget_class->expose_event = - gdl_dock_item_button_image_expose; - widget_class->size_request = - gdl_dock_item_button_image_size_request; -} - -/* ----- Public interface ----- */ - -/** - * gdl_dock_item_button_image_new: - * @image_type: Specifies what type of image the widget should - * display - * - * Creates a new GDL dock button image object. - * Returns: The newly created dock item button image widget. - **/ -GtkWidget* -gdl_dock_item_button_image_new (GdlDockItemButtonImageType image_type) -{ - GdlDockItemButtonImage *button_image = g_object_new ( - GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, NULL); - button_image->image_type = image_type; - - return GTK_WIDGET (button_image); -} diff --git a/src/libgdl/gdl-dock-item-button-image.h b/src/libgdl/gdl-dock-item-button-image.h deleted file mode 100644 index ce0c6faaf..000000000 --- a/src/libgdl/gdl-dock-item-button-image.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item-button-image.h - * - * Author: Joel Holdsworth - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GDL_DOCK_ITEM_BUTTON_IMAGE_H_ -#define _GDL_DOCK_ITEM_BUTTON_IMAGE_H_ - -#include - -G_BEGIN_DECLS - -/* Standard Macros */ -#define GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE \ - (gdl_dock_item_button_image_get_type()) -#define GDL_DOCK_ITEM_BUTTON_IMAGE(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, GdlDockItemButtonImage)) -#define GDL_DOCK_ITEM_BUTTON_IMAGE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, GdlDockItemButtonImageClass)) -#define GDL_IS_DOCK_ITEM_BUTTON_IMAGE(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE)) -#define GDL_IS_DOCK_ITEM_BUTTON_IMAGE_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE)) -#define GDL_DOCK_ITEM_BUTTON_IMAGE_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_BUTTON_IMAGE, GdlDockItemButtonImageClass)) - -/* Data Types & Structures */ -typedef enum { - GDL_DOCK_ITEM_BUTTON_IMAGE_CLOSE, - GDL_DOCK_ITEM_BUTTON_IMAGE_ICONIFY -} GdlDockItemButtonImageType; - -typedef struct _GdlDockItemButtonImage GdlDockItemButtonImage; -typedef struct _GdlDockItemButtonImageClass GdlDockItemButtonImageClass; - -struct _GdlDockItemButtonImage { - GtkWidget parent; - - GdlDockItemButtonImageType image_type; -}; - -struct _GdlDockItemButtonImageClass { - GtkWidgetClass parent_class; -}; - -/* Data Public Functions */ -GType gdl_dock_item_button_image_get_type (void); -GtkWidget *gdl_dock_item_button_image_new ( - GdlDockItemButtonImageType image_type); - -G_END_DECLS - -#endif /* _GDL_DOCK_ITEM_BUTTON_IMAGE_H_ */ diff --git a/src/libgdl/gdl-dock-item-grip.c b/src/libgdl/gdl-dock-item-grip.c deleted file mode 100644 index 9b3810c20..000000000 --- a/src/libgdl/gdl-dock-item-grip.c +++ /dev/null @@ -1,809 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* - * gdl-dock-item-grip.c - * - * Author: Michael Meeks Copyright (C) 2002 Sun Microsystems, Inc. - * - * Based on BonoboDockItemGrip. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include -#include -#include "gdl-dock-item.h" -#include "gdl-dock-item-grip.h" -#include "gdl-dock-item-button-image.h" -#include "gdl-switcher.h" - -#define ALIGN_BORDER 5 -#define DRAG_HANDLE_SIZE 10 - -enum { - PROP_0, - PROP_ITEM -}; - -struct _GdlDockItemGripPrivate { - GtkWidget *label; - - GtkWidget *close_button; - GtkWidget *iconify_button; - - gboolean handle_shown; -}; - -G_DEFINE_TYPE (GdlDockItemGrip, gdl_dock_item_grip, GTK_TYPE_CONTAINER); - -GtkWidget* -gdl_dock_item_create_label_widget(GdlDockItemGrip *grip) -{ - GtkHBox *label_box; - GtkImage *image; - GtkLabel *label; - gchar *stock_id = NULL; - gchar *title = NULL; - GdkPixbuf *pixbuf; - - label_box = (GtkHBox*)gtk_hbox_new (FALSE, 0); - - g_object_get (G_OBJECT (grip->item), "stock-id", &stock_id, NULL); - g_object_get (G_OBJECT (grip->item), "pixbuf-icon", &pixbuf, NULL); - if(stock_id) { - image = GTK_IMAGE(gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU)); - - gtk_widget_show (GTK_WIDGET(image)); - gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(image), FALSE, TRUE, 0); - - g_free (stock_id); - } - else if (pixbuf) { - image = GTK_IMAGE(gtk_image_new_from_pixbuf (pixbuf)); - - gtk_widget_show (GTK_WIDGET(image)); - gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(image), FALSE, TRUE, 0); - } - - g_object_get (G_OBJECT (grip->item), "long-name", &title, NULL); - if (title) { - label = GTK_LABEL(gtk_label_new(title)); - gtk_label_set_ellipsize(label, PANGO_ELLIPSIZE_END); - gtk_label_set_justify(label, GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_widget_show (GTK_WIDGET(label)); - - if (gtk_widget_get_direction (GTK_WIDGET(grip)) == GTK_TEXT_DIR_RTL) { - gtk_box_pack_end(GTK_BOX(label_box), GTK_WIDGET(label), TRUE, TRUE, 1); - } else { - gtk_box_pack_start(GTK_BOX(label_box), GTK_WIDGET(label), TRUE, TRUE, 1); - } - - g_free(title); - } - - return GTK_WIDGET(label_box); -} - -static gint -gdl_dock_item_grip_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - GdlDockItemGrip *grip; - GtkAllocation allocation; - GdkRectangle handle_area; - GdkRectangle expose_area; - - grip = GDL_DOCK_ITEM_GRIP (widget); - - if(grip->_priv->handle_shown) { - - gtk_widget_get_allocation (widget, &allocation); - - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) { - handle_area.x = allocation.x; - handle_area.y = allocation.y; - handle_area.width = DRAG_HANDLE_SIZE; - handle_area.height = allocation.height; - } else { - handle_area.x = allocation.x + allocation.width - DRAG_HANDLE_SIZE; - handle_area.y = allocation.y; - handle_area.width = DRAG_HANDLE_SIZE; - handle_area.height = allocation.height; - } - - if (gdk_rectangle_intersect (&handle_area, &event->area, &expose_area)) { - - gtk_paint_handle (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - GTK_SHADOW_NONE, &expose_area, widget, - "handlebox", handle_area.x, handle_area.y, - handle_area.width, handle_area.height, - GTK_ORIENTATION_VERTICAL); - - } - - } - -/* see bug #950556: may contribute to regression with GTK2/Quartz */ -#if !defined(GDK_WINDOWING_QUARTZ) - if (gdl_dock_item_or_child_has_focus(grip->item)) { - - gtk_paint_focus (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - &event->area, widget, - NULL, 0, 0, -1, -1); - } -#endif //GDK_WINDOWING_QUARTZ - - return GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->expose_event (widget, event); -} - -static void -gdl_dock_item_grip_item_notify (GObject *master, - GParamSpec *pspec, - gpointer data) -{ - GdlDockItemGrip *grip; - gboolean cursor; - - grip = GDL_DOCK_ITEM_GRIP (data); - - if ((strcmp (pspec->name, "stock-id") == 0) || - (strcmp (pspec->name, "long-name") == 0)) { - - gdl_dock_item_grip_set_label (grip, - gdl_dock_item_create_label_widget(grip)); - - } else if (strcmp (pspec->name, "behavior") == 0) { - cursor = FALSE; - if (grip->_priv->close_button) { - if (GDL_DOCK_ITEM_CANT_CLOSE (grip->item)) { - gtk_widget_hide (GTK_WIDGET (grip->_priv->close_button)); - } else { - gtk_widget_show (GTK_WIDGET (grip->_priv->close_button)); - cursor = TRUE; - } - } - if (grip->_priv->iconify_button) { - if (GDL_DOCK_ITEM_CANT_ICONIFY (grip->item)) { - gtk_widget_hide (GTK_WIDGET (grip->_priv->iconify_button)); - } else { - gtk_widget_show (GTK_WIDGET (grip->_priv->iconify_button)); - cursor = TRUE; - } - } - if (grip->title_window && !cursor) - gdk_window_set_cursor (grip->title_window, NULL); - - } -} - -static void -gdl_dock_item_grip_destroy (GtkObject *object) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (object); - - if (grip->_priv) { - GdlDockItemGripPrivate *priv = grip->_priv; - - if (priv->label) { - gtk_widget_unparent(grip->_priv->label); - priv->label = NULL; - } - - if (grip->item) - g_signal_handlers_disconnect_by_func (grip->item, - gdl_dock_item_grip_item_notify, - grip); - grip->item = NULL; - - grip->_priv = NULL; - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_item_grip_parent_class)->destroy (object); -} - -static void -gdl_dock_item_grip_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItemGrip *grip; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (object)); - - grip = GDL_DOCK_ITEM_GRIP (object); - - switch (prop_id) { - case PROP_ITEM: - grip->item = g_value_get_object (value); - if (grip->item) { - g_signal_connect (grip->item, "notify::long-name", - G_CALLBACK (gdl_dock_item_grip_item_notify), - grip); - g_signal_connect (grip->item, "notify::stock-id", - G_CALLBACK (gdl_dock_item_grip_item_notify), - grip); - g_signal_connect (grip->item, "notify::behavior", - G_CALLBACK (gdl_dock_item_grip_item_notify), - grip); - - if (!GDL_DOCK_ITEM_CANT_CLOSE (grip->item) && grip->_priv->close_button) - gtk_widget_show (grip->_priv->close_button); - if (!GDL_DOCK_ITEM_CANT_ICONIFY (grip->item) && grip->_priv->iconify_button) - gtk_widget_show (grip->_priv->iconify_button); - } - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_item_grip_close_clicked (GtkWidget *widget, - GdlDockItemGrip *grip) -{ - (void)widget; - g_return_if_fail (grip->item != NULL); - - gdl_dock_item_hide_item (grip->item); -} - -static void -gdl_dock_item_grip_fix_iconify_button (GdlDockItemGrip *grip) -{ - GtkWidget *iconify_button = grip->_priv->iconify_button; - GdkWindow *window = NULL; - GdkEvent *event = NULL; - - GdkModifierType modifiers; - gint x = 0, y = 0; - gboolean ev_ret; - - g_return_if_fail (gtk_widget_get_realized (iconify_button)); - - window = gtk_widget_get_parent_window (iconify_button); - event = gdk_event_new (GDK_LEAVE_NOTIFY); - - g_assert (GDK_IS_WINDOW (window)); - gdk_window_get_pointer (window, &x, &y, &modifiers); - - event->crossing.window = g_object_ref (window); - event->crossing.send_event = FALSE; - event->crossing.subwindow = g_object_ref (window); - event->crossing.time = GDK_CURRENT_TIME; - event->crossing.x = x; - event->crossing.y = y; - event->crossing.x_root = event->crossing.y_root = 0; - event->crossing.mode = GDK_CROSSING_STATE_CHANGED; - event->crossing.detail = GDK_NOTIFY_NONLINEAR; - event->crossing.focus = FALSE; - event->crossing.state = modifiers; - - //GTK_BUTTON (iconify_button)->in_button = FALSE; - g_signal_emit_by_name (iconify_button, "leave-notify-event", - event, &ev_ret, 0); - - gdk_event_free (event); -} - -static void -gdl_dock_item_grip_iconify_clicked (GtkWidget *widget, - GdlDockItemGrip *grip) -{ - GtkWidget *parent; - - g_return_if_fail (grip->item != NULL); - - /* Workaround to unhighlight the iconify button. */ - gdl_dock_item_grip_fix_iconify_button (grip); - - parent = gtk_widget_get_parent (GTK_WIDGET (grip->item)); - if (GDL_IS_SWITCHER (parent)) - { - /* Note: We can not use gtk_container_foreach (parent) here because - * during iconificatoin, the internal children changes in parent. - * Instead we keep a list of items to iconify and iconify them - * one by one. - */ - GList *node; - GList *items = - gtk_container_get_children (GTK_CONTAINER (parent)); - for (node = items; node != NULL; node = node->next) - { - GdlDockItem *item = GDL_DOCK_ITEM (node->data); - if (!GDL_DOCK_ITEM_CANT_ICONIFY (item)) - gdl_dock_item_iconify_item (item); - } - g_list_free (items); - } - else - { - gdl_dock_item_iconify_item (grip->item); - } -} - -static void -gdl_dock_item_grip_init (GdlDockItemGrip *grip) -{ - GtkWidget *image; - - gtk_widget_set_has_window (GTK_WIDGET (grip), FALSE); - - grip->_priv = g_new0 (GdlDockItemGripPrivate, 1); - grip->_priv->label = NULL; - grip->_priv->handle_shown = FALSE; - - /* create the close button */ - gtk_widget_push_composite_child (); - grip->_priv->close_button = gtk_button_new (); - gtk_widget_pop_composite_child (); - - gtk_widget_set_can_focus (grip->_priv->close_button, FALSE); - gtk_widget_set_parent (grip->_priv->close_button, GTK_WIDGET (grip)); - gtk_button_set_relief (GTK_BUTTON (grip->_priv->close_button), GTK_RELIEF_NONE); - gtk_widget_show (grip->_priv->close_button); - - image = gdl_dock_item_button_image_new(GDL_DOCK_ITEM_BUTTON_IMAGE_CLOSE); - gtk_container_add (GTK_CONTAINER (grip->_priv->close_button), image); - gtk_widget_show (image); - - g_signal_connect (G_OBJECT (grip->_priv->close_button), "clicked", - G_CALLBACK (gdl_dock_item_grip_close_clicked), grip); - - /* create the iconify button */ - gtk_widget_push_composite_child (); - grip->_priv->iconify_button = gtk_button_new (); - gtk_widget_pop_composite_child (); - - gtk_widget_set_can_focus (grip->_priv->iconify_button, FALSE); - gtk_widget_set_parent (grip->_priv->iconify_button, GTK_WIDGET (grip)); - gtk_button_set_relief (GTK_BUTTON (grip->_priv->iconify_button), GTK_RELIEF_NONE); - gtk_widget_show (grip->_priv->iconify_button); - - image = gdl_dock_item_button_image_new(GDL_DOCK_ITEM_BUTTON_IMAGE_ICONIFY); - gtk_container_add (GTK_CONTAINER (grip->_priv->iconify_button), image); - gtk_widget_show (image); - - g_signal_connect (G_OBJECT (grip->_priv->iconify_button), "clicked", - G_CALLBACK (gdl_dock_item_grip_iconify_clicked), grip); - - /* set tooltips on the buttons */ - gtk_widget_set_tooltip_text (grip->_priv->iconify_button, - _("Iconify this dock")); - gtk_widget_set_tooltip_text (grip->_priv->close_button, - _("Close this dock")); -} - -static void -gdl_dock_item_grip_realize (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->realize (widget); - - g_return_if_fail (grip->_priv != NULL); - - if (!grip->title_window) { - GtkAllocation allocation; - GdkWindowAttr attributes; - GdkCursor *cursor; - - g_return_if_fail (grip->_priv->label != NULL); - - gtk_widget_get_allocation (grip->_priv->label, &allocation); - - attributes.x = allocation.x; - attributes.y = allocation.y; - attributes.width = allocation.width; - attributes.height = allocation.height; - attributes.window_type = GDK_WINDOW_CHILD; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.event_mask = GDK_ALL_EVENTS_MASK; - - grip->title_window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, (GDK_WA_X | GDK_WA_Y)); - - gdk_window_set_user_data (grip->title_window, grip); - - /* Unref the ref from parent realize for NO_WINDOW */ - g_object_unref (gtk_widget_get_window (widget)); - - /* Need to ref widget->window, because parent unrealize unrefs it */ - gtk_widget_set_window (widget, g_object_ref (grip->title_window)); - gtk_widget_set_has_window (widget, TRUE); - - /* Unset the background so as to make the colour match the parent window */ - gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, NULL); - - if (GDL_DOCK_ITEM_CANT_CLOSE (grip->item) && - GDL_DOCK_ITEM_CANT_ICONIFY (grip->item)) - cursor = NULL; - else - cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), - GDK_HAND2); - gdk_window_set_cursor (grip->title_window, cursor); - if (cursor) - gdk_cursor_unref (cursor); - } -} - -static void -gdl_dock_item_grip_unrealize (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - if (grip->title_window) { - gtk_widget_set_has_window (widget, FALSE); - gdk_window_set_user_data (grip->title_window, NULL); - gdk_window_destroy (grip->title_window); - grip->title_window = NULL; - } - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->unrealize (widget); -} - -static void -gdl_dock_item_grip_map (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->map (widget); - - if (grip->title_window) - gdk_window_show (grip->title_window); -} - -static void -gdl_dock_item_grip_unmap (GtkWidget *widget) -{ - GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP (widget); - - if (grip->title_window) - gdk_window_hide (grip->title_window); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->unmap (widget); -} - -static void -gdl_dock_item_grip_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkRequisition child_requisition; - GdlDockItemGrip *grip; - gint layout_height = 0; - guint border_width; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (widget)); - g_return_if_fail (requisition != NULL); - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - grip = GDL_DOCK_ITEM_GRIP (widget); - - requisition->width = border_width * 2/* + ALIGN_BORDER*/; - requisition->height = border_width * 2; - - if(grip->_priv->handle_shown) - requisition->width += DRAG_HANDLE_SIZE; - - gtk_widget_size_request (grip->_priv->close_button, &child_requisition); - layout_height = MAX (layout_height, child_requisition.height); - if (gtk_widget_get_visible (grip->_priv->close_button)) { - requisition->width += child_requisition.width; - } - - gtk_widget_size_request (grip->_priv->iconify_button, &child_requisition); - layout_height = MAX (layout_height, child_requisition.height); - if (gtk_widget_get_visible (grip->_priv->iconify_button)) { - requisition->width += child_requisition.width; - } - - gtk_widget_size_request (grip->_priv->label, &child_requisition); - requisition->width += child_requisition.width; - layout_height = MAX (layout_height, child_requisition.height); - - requisition->height += layout_height; -} - -static void -gdl_dock_item_grip_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GdlDockItemGrip *grip; - GtkRequisition close_requisition = { 0, 0 }; - GtkRequisition iconify_requisition = { 0, 0 }; - GtkAllocation child_allocation; - guint border_width; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (widget)); - g_return_if_fail (allocation != NULL); - - grip = GDL_DOCK_ITEM_GRIP (widget); - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - GTK_WIDGET_CLASS (gdl_dock_item_grip_parent_class)->size_allocate (widget, allocation); - - gtk_widget_size_request (grip->_priv->close_button, - &close_requisition); - gtk_widget_size_request (grip->_priv->iconify_button, - &iconify_requisition); - - /* Calculate the Minimum Width where buttons will fit */ - int min_width = close_requisition.width + iconify_requisition.width - + border_width * 2; - if(grip->_priv->handle_shown) - min_width += DRAG_HANDLE_SIZE; - const gboolean space_for_buttons = (allocation->width >= min_width); - - /* Set up the rolling child_allocation rectangle */ - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x = border_width/* + ALIGN_BORDER*/; - else - child_allocation.x = allocation->width - border_width; - child_allocation.y = border_width; - - /* Layout Close Button */ - if (gtk_widget_get_visible (grip->_priv->close_button)) { - - if(space_for_buttons) { - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) - child_allocation.x -= close_requisition.width; - - child_allocation.width = close_requisition.width; - child_allocation.height = close_requisition.height; - } else { - child_allocation.width = 0; - } - - gtk_widget_size_allocate (grip->_priv->close_button, &child_allocation); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x += close_requisition.width; - } - - /* Layout Iconify Button */ - if (gtk_widget_get_visible (grip->_priv->iconify_button)) { - - if(space_for_buttons) { - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) - child_allocation.x -= iconify_requisition.width; - - child_allocation.width = iconify_requisition.width; - child_allocation.height = iconify_requisition.height; - } else { - child_allocation.width = 0; - } - - gtk_widget_size_allocate (grip->_priv->iconify_button, &child_allocation); - - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - child_allocation.x += iconify_requisition.width; - } - - /* Layout the Grip Handle*/ - if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL) { - child_allocation.width = child_allocation.x; - child_allocation.x = border_width/* + ALIGN_BORDER*/; - - if(grip->_priv->handle_shown) { - child_allocation.x += DRAG_HANDLE_SIZE; - child_allocation.width -= DRAG_HANDLE_SIZE; - } - - } else { - child_allocation.width = allocation->width - - (child_allocation.x - allocation->x)/* - ALIGN_BORDER*/; - - if(grip->_priv->handle_shown) - child_allocation.width -= DRAG_HANDLE_SIZE; - } - - if(child_allocation.width < 0) - child_allocation.width = 0; - - child_allocation.y = border_width; - child_allocation.height = allocation->height - border_width * 2; - if(grip->_priv->label) { - gtk_widget_size_allocate (grip->_priv->label, &child_allocation); - } - - if (grip->title_window) { - gdk_window_move_resize (grip->title_window, - allocation->x, - allocation->y, - allocation->width, - allocation->height); - } -} - -static void -gdl_dock_item_grip_add (GtkContainer *container, - GtkWidget *widget) -{ - g_warning ("gtk_container_add not implemented for GdlDockItemGrip"); -} - -static void -gdl_dock_item_grip_remove (GtkContainer *container, - GtkWidget *widget) -{ - gdl_dock_item_grip_set_label (GDL_DOCK_ITEM_GRIP (container), NULL); -} - -static void -gdl_dock_item_grip_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItemGrip *grip; - - g_return_if_fail (GDL_IS_DOCK_ITEM_GRIP (container)); - grip = GDL_DOCK_ITEM_GRIP (container); - - if (grip->_priv) { - if(grip->_priv->label) { - (* callback) (grip->_priv->label, callback_data); - } - - if (include_internals) { - (* callback) (grip->_priv->close_button, callback_data); - (* callback) (grip->_priv->iconify_button, callback_data); - } - } -} - -static GType -gdl_dock_item_grip_child_type (GtkContainer *container) -{ - return G_TYPE_NONE; -} - -static void -gdl_dock_item_grip_class_init (GdlDockItemGripClass *klass) -{ - GObjectClass *gobject_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - gobject_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - - gobject_class->set_property = gdl_dock_item_grip_set_property; - - gtk_object_class->destroy = gdl_dock_item_grip_destroy; - - widget_class->expose_event = gdl_dock_item_grip_expose; - widget_class->realize = gdl_dock_item_grip_realize; - widget_class->unrealize = gdl_dock_item_grip_unrealize; - widget_class->map = gdl_dock_item_grip_map; - widget_class->unmap = gdl_dock_item_grip_unmap; - widget_class->size_request = gdl_dock_item_grip_size_request; - widget_class->size_allocate = gdl_dock_item_grip_size_allocate; - - container_class->add = gdl_dock_item_grip_add; - container_class->remove = gdl_dock_item_grip_remove; - container_class->forall = gdl_dock_item_grip_forall; - container_class->child_type = gdl_dock_item_grip_child_type; - - g_object_class_install_property ( - gobject_class, PROP_ITEM, - g_param_spec_object ("item", _("Controlling dock item"), - _("Dockitem which 'owns' this grip"), - GDL_TYPE_DOCK_ITEM, - G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); -} - -static void -gdl_dock_item_grip_showhide_handle (GdlDockItemGrip *grip) -{ - gtk_widget_queue_resize (GTK_WIDGET (grip)); -} - -/* ----- Public interface ----- */ - -/** - * gdl_dock_item_grip_new: - * @item: The dock item that will "own" this grip widget. - * - * Creates a new GDL dock item grip object. - * Returns: The newly created dock item grip widget. - **/ -GtkWidget * -gdl_dock_item_grip_new (GdlDockItem *item) -{ - GdlDockItemGrip *grip = g_object_new (GDL_TYPE_DOCK_ITEM_GRIP, "item", item, - NULL); - - return GTK_WIDGET (grip); -} - -/** - * gdl_dock_item_grip_set_label: - * @grip: The grip that will get it's label widget set. - * @label: The widget that will become the label. - * - * Replaces the current label widget with another widget. - **/ -void -gdl_dock_item_grip_set_label (GdlDockItemGrip *grip, - GtkWidget *label) -{ - g_return_if_fail (grip != NULL); - - if (grip->_priv->label) { - gtk_widget_unparent(grip->_priv->label); - g_object_unref (grip->_priv->label); - grip->_priv->label = NULL; - } - - if (label) { - g_object_ref (label); - gtk_widget_set_parent (label, GTK_WIDGET (grip)); - gtk_widget_show (label); - grip->_priv->label = label; - } -} -/** - * gdl_dock_item_grip_hide_handle: - * @grip: The dock item grip to hide the handle of. - * - * This function hides the dock item's grip widget handle hatching. - **/ -void -gdl_dock_item_grip_hide_handle (GdlDockItemGrip *grip) -{ - g_return_if_fail (grip != NULL); - if (grip->_priv->handle_shown) { - grip->_priv->handle_shown = FALSE; - gdl_dock_item_grip_showhide_handle (grip); - }; -} - -/** - * gdl_dock_item_grip_show_handle: - * @grip: The dock item grip to show the handle of. - * - * This function shows the dock item's grip widget handle hatching. - **/ -void -gdl_dock_item_grip_show_handle (GdlDockItemGrip *grip) -{ - g_return_if_fail (grip != NULL); - if (!grip->_priv->handle_shown) { - grip->_priv->handle_shown = TRUE; - gdl_dock_item_grip_showhide_handle (grip); - }; -} diff --git a/src/libgdl/gdl-dock-item-grip.h b/src/libgdl/gdl-dock-item-grip.h deleted file mode 100644 index a44ef91fb..000000000 --- a/src/libgdl/gdl-dock-item-grip.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* - * gdl-dock-item-grip.h - * - * Author: Michael Meeks Copyright (C) 2002 Sun Microsystems, Inc. - * - * Based on BonoboDockItemGrip. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GDL_DOCK_ITEM_GRIP_H_ -#define _GDL_DOCK_ITEM_GRIP_H_ - -#include -#include "libgdl/gdl-dock-item.h" - -G_BEGIN_DECLS - -#define GDL_TYPE_DOCK_ITEM_GRIP (gdl_dock_item_grip_get_type()) -#define GDL_DOCK_ITEM_GRIP(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGrip)) -#define GDL_DOCK_ITEM_GRIP_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) -#define GDL_IS_DOCK_ITEM_GRIP(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM_GRIP)) -#define GDL_IS_DOCK_ITEM_GRIP_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM_GRIP)) -#define GDL_DOCK_ITEM_GRIP_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYPE_DOCK_ITEM_GRIP, GdlDockItemGripClass)) - -typedef struct _GdlDockItemGrip GdlDockItemGrip; -typedef struct _GdlDockItemGripClass GdlDockItemGripClass; -typedef struct _GdlDockItemGripPrivate GdlDockItemGripPrivate; - -struct _GdlDockItemGrip { - GtkContainer parent; - - GdlDockItem *item; - - GdkWindow *title_window; - - GdlDockItemGripPrivate *_priv; -}; - -struct _GdlDockItemGripClass { - GtkContainerClass parent_class; -}; - -GType gdl_dock_item_grip_get_type (void); -GtkWidget *gdl_dock_item_grip_new (GdlDockItem *item); -void gdl_dock_item_grip_set_label (GdlDockItemGrip *grip, - GtkWidget *label); -void gdl_dock_item_grip_hide_handle (GdlDockItemGrip *grip); -void gdl_dock_item_grip_show_handle (GdlDockItemGrip *grip); - -G_END_DECLS - -#endif /* _GDL_DOCK_ITEM_GRIP_H_ */ diff --git a/src/libgdl/gdl-dock-item.c b/src/libgdl/gdl-dock-item.c deleted file mode 100644 index af630e681..000000000 --- a/src/libgdl/gdl-dock-item.c +++ /dev/null @@ -1,2401 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item.c - * - * Author: Gustavo Giráldez - * Naba Kumar - * - * Based on GnomeDockItem/BonoboDockItem. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock.h" -#include "gdl-dock-item.h" -#include "gdl-dock-item-grip.h" -#include "gdl-dock-notebook.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-tablabel.h" -#include "gdl-dock-placeholder.h" -#include "gdl-dock-master.h" -#include "libgdltypebuiltins.h" -#include "libgdlmarshal.h" - -#define NEW_DOCK_ITEM_RATIO 0.3 - -/* ----- Private prototypes ----- */ - -static void gdl_dock_item_class_init (GdlDockItemClass *class); - -static GObject *gdl_dock_item_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param); - -static void gdl_dock_item_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_item_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_item_destroy (GtkObject *object); - -static void gdl_dock_item_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_item_remove (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_item_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_item_child_type (GtkContainer *container); - -static void gdl_dock_item_set_focus_child (GtkContainer *container, - GtkWidget *widget); - -static void gdl_dock_item_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gdl_dock_item_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void gdl_dock_item_map (GtkWidget *widget); -static void gdl_dock_item_unmap (GtkWidget *widget); -static void gdl_dock_item_realize (GtkWidget *widget); -static void gdl_dock_item_style_set (GtkWidget *widget, - GtkStyle *previous_style); -static gint gdl_dock_item_expose (GtkWidget *widget, - GdkEventExpose *event); - -static void gdl_dock_item_move_focus_child (GdlDockItem *item, - GtkDirectionType dir); - -static gint gdl_dock_item_button_changed (GtkWidget *widget, - GdkEventButton *event); -static gint gdl_dock_item_motion (GtkWidget *widget, - GdkEventMotion *event); -static gboolean gdl_dock_item_key_press (GtkWidget *widget, - GdkEventKey *event); - -static gboolean gdl_dock_item_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -static void gdl_dock_item_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_item_popup_menu (GdlDockItem *item, - guint button, - guint32 time); -static void gdl_dock_item_drag_start (GdlDockItem *item); -static void gdl_dock_item_drag_end (GdlDockItem *item, - gboolean cancel); - -static void gdl_dock_item_tab_button (GtkWidget *widget, - GdkEventButton *event, - gpointer data); - -static void gdl_dock_item_hide_cb (GtkWidget *widget, - GdlDockItem *item); - -static void gdl_dock_item_lock_cb (GtkWidget *widget, - GdlDockItem *item); - -static void gdl_dock_item_unlock_cb (GtkWidget *widget, - GdlDockItem *item); - -static void gdl_dock_item_showhide_grip (GdlDockItem *item); - -static void gdl_dock_item_real_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -static void gdl_dock_param_export_gtk_orientation (const GValue *src, - GValue *dst); -static void gdl_dock_param_import_gtk_orientation (const GValue *src, - GValue *dst); - - - -/* ----- Class variables and definitions ----- */ - -enum { - PROP_0, - PROP_ORIENTATION, - PROP_RESIZE, - PROP_BEHAVIOR, - PROP_LOCKED, - PROP_PREFERRED_WIDTH, - PROP_PREFERRED_HEIGHT -}; - -enum { - DOCK_DRAG_BEGIN, - DOCK_DRAG_MOTION, - DOCK_DRAG_END, - SELECTED, - MOVE_FOCUS_CHILD, - LAST_SIGNAL -}; - -static guint gdl_dock_item_signals [LAST_SIGNAL] = { 0 }; - -#define GDL_DOCK_ITEM_GRIP_SHOWN(item) \ - (GDL_DOCK_ITEM_HAS_GRIP (item)) - -struct _GdlDockItemPrivate { - GtkWidget *menu; - - gboolean grip_shown; - GtkWidget *grip; - guint grip_size; - - GtkWidget *tab_label; - gboolean intern_tab_label; - guint notify_label; - guint notify_stock_id; - - gint preferred_width; - gint preferred_height; - - GdlDockPlaceholder *ph; - - gint start_x, start_y; -}; - -/* FIXME: implement the rest of the behaviors */ - -#define SPLIT_RATIO 0.4 - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockItem, gdl_dock_item, GDL_TYPE_DOCK_OBJECT); - -static void -add_tab_bindings (GtkBindingSet *binding_set, - GdkModifierType modifiers, - GtkDirectionType direction) -{ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, modifiers, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, modifiers, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); -} - -static void -add_arrow_bindings (GtkBindingSet *binding_set, - guint keysym, - GtkDirectionType direction) -{ - guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; - - gtk_binding_entry_add_signal (binding_set, keysym, 0, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, keysym, GDK_CONTROL_MASK, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); - gtk_binding_entry_add_signal (binding_set, keypad_keysym, GDK_CONTROL_MASK, - "move_focus_child", 1, - GTK_TYPE_DIRECTION_TYPE, direction); -} - -static void -gdl_dock_item_class_init (GdlDockItemClass *klass) -{ - static gboolean style_initialized = FALSE; - - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - GtkBindingSet *binding_set; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - - g_object_class->constructor = gdl_dock_item_constructor; - g_object_class->set_property = gdl_dock_item_set_property; - g_object_class->get_property = gdl_dock_item_get_property; - - gtk_object_class->destroy = gdl_dock_item_destroy; - - widget_class->realize = gdl_dock_item_realize; - widget_class->map = gdl_dock_item_map; - widget_class->unmap = gdl_dock_item_unmap; - widget_class->size_request = gdl_dock_item_size_request; - widget_class->size_allocate = gdl_dock_item_size_allocate; - widget_class->style_set = gdl_dock_item_style_set; - widget_class->expose_event = gdl_dock_item_expose; - widget_class->button_press_event = gdl_dock_item_button_changed; - widget_class->button_release_event = gdl_dock_item_button_changed; - widget_class->motion_notify_event = gdl_dock_item_motion; - widget_class->key_press_event = gdl_dock_item_key_press; - - container_class->add = gdl_dock_item_add; - container_class->remove = gdl_dock_item_remove; - container_class->forall = gdl_dock_item_forall; - container_class->child_type = gdl_dock_item_child_type; - container_class->set_focus_child = gdl_dock_item_set_focus_child; - - object_class->is_compound = FALSE; - - object_class->dock_request = gdl_dock_item_dock_request; - object_class->dock = gdl_dock_item_dock; - - /* properties */ - - /** - * GdlDockItem:orientation: - * - * The orientation of the docking item. If the orientation is set to - * #GTK_ORIENTATION_VERTICAL, the grip widget will be shown along - * the top of the edge of item (if it is not hidden). If the - * orientation is set to #GTK_ORIENTATION_HORIZONTAL, the grip - * widget will be shown down the left edge of the item (even if the - * widget text direction is set to RTL). - */ - g_object_class_install_property ( - g_object_class, PROP_ORIENTATION, - g_param_spec_enum ("orientation", _("Orientation"), - _("Orientation of the docking item"), - GTK_TYPE_ORIENTATION, - GTK_ORIENTATION_VERTICAL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - /* --- register exporter/importer for GTK_ORIENTATION */ - g_value_register_transform_func (GTK_TYPE_ORIENTATION, GDL_TYPE_DOCK_PARAM, - gdl_dock_param_export_gtk_orientation); - g_value_register_transform_func (GDL_TYPE_DOCK_PARAM, GTK_TYPE_ORIENTATION, - gdl_dock_param_import_gtk_orientation); - /* --- end of registration */ - - g_object_class_install_property ( - g_object_class, PROP_RESIZE, - g_param_spec_boolean ("resize", _("Resizable"), - _("If set, the dock item can be resized when " - "docked in a GtkPanel widget"), - TRUE, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_BEHAVIOR, - g_param_spec_flags ("behavior", _("Item behavior"), - _("General behavior for the dock item (i.e. " - "whether it can float, if it's locked, etc.)"), - GDL_TYPE_DOCK_ITEM_BEHAVIOR, - GDL_DOCK_ITEM_BEH_NORMAL, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_LOCKED, - g_param_spec_boolean ("locked", _("Locked"), - _("If set, the dock item cannot be dragged around " - "and it doesn't show a grip"), - FALSE, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_PREFERRED_WIDTH, - g_param_spec_int ("preferred-width", _("Preferred width"), - _("Preferred width for the dock item"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_PREFERRED_HEIGHT, - g_param_spec_int ("preferred-height", _("Preferred height"), - _("Preferred height for the dock item"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE)); - - /* signals */ - - /** - * GdlDockItem::dock-drag-begin: - * @item: The dock item which is being dragged. - * - * Signals that the dock item has begun to be dragged. - **/ - gdl_dock_item_signals [DOCK_DRAG_BEGIN] = - g_signal_new ("dock-drag-begin", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockItemClass, dock_drag_begin), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - /** - * GdlDockItem::dock-drag-motion: - * @item: The dock item which is being dragged. - * @x: The x-position that the dock item has been dragged to. - * @y: The y-position that the dock item has been dragged to. - * - * Signals that a dock item dragging motion event has occured. - **/ - gdl_dock_item_signals [DOCK_DRAG_MOTION] = - g_signal_new ("dock-drag-motion", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockItemClass, dock_drag_motion), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__INT_INT, - G_TYPE_NONE, - 2, - G_TYPE_INT, - G_TYPE_INT); - - /** - * GdlDockItem::dock-drag-end: - * @item: The dock item which is no longer being dragged. - * @cancel: This value is set to TRUE if the drag was cancelled by - * the user. #cancel is set to FALSE if the drag was accepted. - * - * Signals that the dock item dragging has ended. - **/ - gdl_dock_item_signals [DOCK_DRAG_END] = - g_signal_new ("dock_drag_end", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockItemClass, dock_drag_end), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__BOOLEAN, - G_TYPE_NONE, - 1, - G_TYPE_BOOLEAN); - - /** - * GdlDockItem::selected: - * - * Signals that this dock has been selected from a switcher. - */ - gdl_dock_item_signals [SELECTED] = - g_signal_new ("selected", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - 0, - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - gdl_dock_item_signals [MOVE_FOCUS_CHILD] = - g_signal_new ("move_focus_child", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, - G_STRUCT_OFFSET (GdlDockItemClass, move_focus_child), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__ENUM, - G_TYPE_NONE, - 1, - GTK_TYPE_DIRECTION_TYPE); - - - /* key bindings */ - - binding_set = gtk_binding_set_by_class (klass); - - add_arrow_bindings (binding_set, GDK_KEY_Up, GTK_DIR_UP); - add_arrow_bindings (binding_set, GDK_KEY_Down, GTK_DIR_DOWN); - add_arrow_bindings (binding_set, GDK_KEY_Left, GTK_DIR_LEFT); - add_arrow_bindings (binding_set, GDK_KEY_Right, GTK_DIR_RIGHT); - - add_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD); - add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD); - add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); - - klass->has_grip = TRUE; - klass->dock_drag_begin = NULL; - klass->dock_drag_motion = NULL; - klass->dock_drag_end = NULL; - klass->move_focus_child = gdl_dock_item_move_focus_child; - klass->set_orientation = gdl_dock_item_real_set_orientation; - - if (!style_initialized) - { - style_initialized = TRUE; - gtk_rc_parse_string ( - "style \"gdl-dock-item-default\" {\n" - "xthickness = 0\n" - "ythickness = 0\n" - "}\n" - "class \"GdlDockItem\" " - "style : gtk \"gdl-dock-item-default\"\n"); - } -} - -static void -gdl_dock_item_init (GdlDockItem *item) -{ - gtk_widget_set_has_window (GTK_WIDGET (item), TRUE); - gtk_widget_set_can_focus (GTK_WIDGET (item), TRUE); - - item->child = NULL; - - item->orientation = GTK_ORIENTATION_VERTICAL; - item->behavior = GDL_DOCK_ITEM_BEH_NORMAL; - - item->resize = TRUE; - - item->dragoff_x = item->dragoff_y = 0; - - item->_priv = g_new0 (GdlDockItemPrivate, 1); - item->_priv->menu = NULL; - - item->_priv->preferred_width = item->_priv->preferred_height = -1; - item->_priv->tab_label = NULL; - item->_priv->intern_tab_label = FALSE; - - item->_priv->ph = NULL; -} - -static void -on_long_name_changed (GObject* item, - GParamSpec* spec, - gpointer user_data) -{ - gchar* long_name; - g_object_get (item, "long-name", &long_name, NULL); - gtk_label_set_label (GTK_LABEL (user_data), long_name); - g_free(long_name); -} - -static void -on_stock_id_changed (GObject* item, - GParamSpec* spec, - gpointer user_data) -{ - gchar* stock_id; - g_object_get (item, "stock_id", &stock_id, NULL); - gtk_image_set_from_stock (GTK_IMAGE (user_data), stock_id, GTK_ICON_SIZE_MENU); - g_free(stock_id); -} - -static GObject * -gdl_dock_item_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param) -{ - GObject *g_object; - - g_object = G_OBJECT_CLASS (gdl_dock_item_parent_class)-> constructor (type, - n_construct_properties, - construct_param); - if (g_object) { - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - GtkWidget *hbox; - GtkWidget *label; - GtkWidget *icon; - gchar* long_name; - gchar* stock_id; - - if (GDL_DOCK_ITEM_HAS_GRIP (item)) { - item->_priv->grip_shown = TRUE; - item->_priv->grip = gdl_dock_item_grip_new (item); - gtk_widget_set_parent (item->_priv->grip, GTK_WIDGET (item)); - gtk_widget_show (item->_priv->grip); - } - else { - item->_priv->grip_shown = FALSE; - } - - g_object_get (g_object, "long-name", &long_name, "stock-id", &stock_id, NULL); - - hbox = gtk_hbox_new (FALSE, 5); - label = gtk_label_new (long_name); - icon = gtk_image_new (); - if (stock_id) - gtk_image_set_from_stock (GTK_IMAGE (icon), stock_id, - GTK_ICON_SIZE_MENU); - gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - - item->_priv->notify_label = - g_signal_connect (item, "notify::long-name", G_CALLBACK (on_long_name_changed), - label); - item->_priv->notify_stock_id = - g_signal_connect (item, "notify::stock-id", G_CALLBACK (on_stock_id_changed), - icon); - - gtk_widget_show_all (hbox); - - gdl_dock_item_set_tablabel (item, hbox); - item->_priv->intern_tab_label = TRUE; - - g_free (long_name); - g_free (stock_id); - } - - return g_object; -} - -static void -gdl_dock_item_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - - switch (prop_id) { - case PROP_ORIENTATION: - gdl_dock_item_set_orientation (item, g_value_get_enum (value)); - break; - case PROP_RESIZE: - item->resize = g_value_get_boolean (value); - gtk_widget_queue_resize (GTK_WIDGET (item)); - break; - case PROP_BEHAVIOR: - { - GdlDockItemBehavior old_beh = item->behavior; - item->behavior = g_value_get_flags (value); - - if ((old_beh ^ item->behavior) & GDL_DOCK_ITEM_BEH_LOCKED) { - if (GDL_DOCK_OBJECT_GET_MASTER (item)) - g_signal_emit_by_name (GDL_DOCK_OBJECT_GET_MASTER (item), - "layout-changed"); - g_object_notify (g_object, "locked"); - gdl_dock_item_showhide_grip (item); - } - - break; - } - case PROP_LOCKED: - { - GdlDockItemBehavior old_beh = item->behavior; - - if (g_value_get_boolean (value)) - item->behavior |= GDL_DOCK_ITEM_BEH_LOCKED; - else - item->behavior &= ~GDL_DOCK_ITEM_BEH_LOCKED; - - if (old_beh ^ item->behavior) { - gdl_dock_item_showhide_grip (item); - g_object_notify (g_object, "behavior"); - - if (GDL_DOCK_OBJECT_GET_MASTER (item)) - g_signal_emit_by_name (GDL_DOCK_OBJECT_GET_MASTER (item), - "layout-changed"); - } - break; - } - case PROP_PREFERRED_WIDTH: - item->_priv->preferred_width = g_value_get_int (value); - break; - case PROP_PREFERRED_HEIGHT: - item->_priv->preferred_height = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_item_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - - switch (prop_id) { - case PROP_ORIENTATION: - g_value_set_enum (value, item->orientation); - break; - case PROP_RESIZE: - g_value_set_boolean (value, item->resize); - break; - case PROP_BEHAVIOR: - g_value_set_flags (value, item->behavior); - break; - case PROP_LOCKED: - g_value_set_boolean (value, !GDL_DOCK_ITEM_NOT_LOCKED (item)); - break; - case PROP_PREFERRED_WIDTH: - g_value_set_int (value, item->_priv->preferred_width); - break; - case PROP_PREFERRED_HEIGHT: - g_value_set_int (value, item->_priv->preferred_height); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_item_destroy (GtkObject *object) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - if (item->_priv) { - GdlDockItemPrivate *priv = item->_priv; - - if (priv->tab_label) { - gdl_dock_item_set_tablabel (item, NULL); - }; - if (priv->menu) { - gtk_menu_detach (GTK_MENU (priv->menu)); - priv->menu = NULL; - }; - if (priv->grip) { - gtk_container_remove (GTK_CONTAINER (item), priv->grip); - priv->grip = NULL; - } - if (priv->ph) { - g_object_unref (priv->ph); - priv->ph = NULL; - } - - item->_priv = NULL; - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_item_parent_class)->destroy (object); -} - -static void -gdl_dock_item_add (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockItem *item; - - g_return_if_fail (GDL_IS_DOCK_ITEM (container)); - - item = GDL_DOCK_ITEM (container); - if (GDL_IS_DOCK_OBJECT (widget)) { - g_warning (_("You can't add a dock object (%p of type %s) inside a %s. " - "Use a GdlDock or some other compound dock object."), - widget, G_OBJECT_TYPE_NAME (widget), G_OBJECT_TYPE_NAME (item)); - return; - } - - if (item->child != NULL) { - g_warning (_("Attempting to add a widget with type %s to a %s, " - "but it can only contain one widget at a time; " - "it already contains a widget of type %s"), - G_OBJECT_TYPE_NAME (widget), - G_OBJECT_TYPE_NAME (item), - G_OBJECT_TYPE_NAME (item->child)); - return; - } - - gtk_widget_set_parent (widget, GTK_WIDGET (item)); - item->child = widget; -} - -static void -gdl_dock_item_remove (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockItem *item; - gboolean was_visible; - - g_return_if_fail (GDL_IS_DOCK_ITEM (container)); - - item = GDL_DOCK_ITEM (container); - if (item->_priv && widget == item->_priv->grip) { - gboolean grip_was_visible = gtk_widget_get_visible (widget); - gtk_widget_unparent (widget); - item->_priv->grip = NULL; - if (grip_was_visible) - gtk_widget_queue_resize (GTK_WIDGET (item)); - return; - } - - if (GDL_DOCK_ITEM_IN_DRAG (item)) { - gdl_dock_item_drag_end (item, TRUE); - } - - g_return_if_fail (item->child == widget); - - was_visible = gtk_widget_get_visible (widget); - - gtk_widget_unparent (widget); - item->child = NULL; - - if (was_visible) - gtk_widget_queue_resize (GTK_WIDGET (container)); -} - -static void -gdl_dock_item_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItem *item = (GdlDockItem *) container; - - g_return_if_fail (callback != NULL); - - if (include_internals && item->_priv->grip) - (* callback) (item->_priv->grip, callback_data); - - if (item->child) - (* callback) (item->child, callback_data); -} - -static GType -gdl_dock_item_child_type (GtkContainer *container) -{ - g_return_val_if_fail (GDL_IS_DOCK_ITEM (container), G_TYPE_NONE); - - if (!GDL_DOCK_ITEM (container)->child) - return GTK_TYPE_WIDGET; - else - return G_TYPE_NONE; -} - -static void -gdl_dock_item_set_focus_child (GtkContainer *container, - GtkWidget *child) -{ - g_return_if_fail (GDL_IS_DOCK_ITEM (container)); - - if (GTK_CONTAINER_CLASS (gdl_dock_item_parent_class)->set_focus_child) { - (* GTK_CONTAINER_CLASS (gdl_dock_item_parent_class)->set_focus_child) (container, child); - } - - gdl_dock_item_showhide_grip (GDL_DOCK_ITEM (container)); -} - -static void -gdl_dock_item_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GdlDockItem *item; - GtkRequisition child_requisition; - GtkRequisition grip_requisition; - GtkStyle *style; - guint border_width; - - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - g_return_if_fail (requisition != NULL); - - item = GDL_DOCK_ITEM (widget); - - /* If our child is not visible, we still request its size, since - we won't have any useful hint for our size otherwise. */ - if (item->child) - gtk_widget_size_request (item->child, &child_requisition); - else { - child_requisition.width = 0; - child_requisition.height = 0; - } - - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) { - if (GDL_DOCK_ITEM_GRIP_SHOWN (item)) { - gtk_widget_size_request (item->_priv->grip, &grip_requisition); - requisition->width = grip_requisition.width; - } else { - requisition->width = 0; - } - - if (item->child) { - requisition->width += child_requisition.width; - requisition->height = child_requisition.height; - } else - requisition->height = 0; - } else { - if (GDL_DOCK_ITEM_GRIP_SHOWN (item)) { - gtk_widget_size_request (item->_priv->grip, &grip_requisition); - requisition->height = grip_requisition.height; - } else { - requisition->height = 0; - } - - if (item->child) { - requisition->width = child_requisition.width; - requisition->height += child_requisition.height; - } else - requisition->width = 0; - } - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - style = gtk_widget_get_style (widget); - - requisition->width += (border_width + style->xthickness) * 2; - requisition->height += (border_width + style->ythickness) * 2; - - //gtk_widget_size_request (widget, requisition); -} - -static void -gdl_dock_item_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GdlDockItem *item; - - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - g_return_if_fail (allocation != NULL); - - item = GDL_DOCK_ITEM (widget); - - gtk_widget_set_allocation (widget, allocation); - - /* Once size is allocated, preferred size is no longer necessary */ - item->_priv->preferred_height = -1; - item->_priv->preferred_width = -1; - - if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (gtk_widget_get_window (widget), - allocation->x, - allocation->y, - allocation->width, - allocation->height); - - if (item->child && gtk_widget_get_visible (item->child)) { - GtkAllocation child_allocation; - GtkStyle *style; - guint border_width; - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - style = gtk_widget_get_style (widget); - - child_allocation.x = border_width + style->xthickness; - child_allocation.y = border_width + style->ythickness; - child_allocation.width = allocation->width - - 2 * (border_width + style->xthickness); - child_allocation.height = allocation->height - - 2 * (border_width + style->ythickness); - - if (GDL_DOCK_ITEM_GRIP_SHOWN (item)) { - GtkAllocation grip_alloc = child_allocation; - GtkRequisition grip_req; - - gtk_widget_size_request (item->_priv->grip, &grip_req); - - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) { - child_allocation.x += grip_req.width; - child_allocation.width -= grip_req.width; - grip_alloc.width = grip_req.width; - } else { - child_allocation.y += grip_req.height; - child_allocation.height -= grip_req.height; - grip_alloc.height = grip_req.height; - } - if (item->_priv->grip) - gtk_widget_size_allocate (item->_priv->grip, &grip_alloc); - } - /* Allocation can't be negative */ - if (child_allocation.width < 0) - child_allocation.width = 0; - if (child_allocation.height < 0) - child_allocation.height = 0; - gtk_widget_size_allocate (item->child, &child_allocation); - } -} - -static void -gdl_dock_item_map (GtkWidget *widget) -{ - GdlDockItem *item; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gtk_widget_set_mapped (widget, TRUE); - - item = GDL_DOCK_ITEM (widget); - - gdk_window_show (gtk_widget_get_window (widget)); - - if (item->child - && gtk_widget_get_visible (item->child) - && !gtk_widget_get_mapped (item->child)) - gtk_widget_map (item->child); - - if (item->_priv->grip - && gtk_widget_get_visible (GTK_WIDGET (item->_priv->grip)) - && !gtk_widget_get_mapped (GTK_WIDGET (item->_priv->grip))) - gtk_widget_map (item->_priv->grip); -} - -static void -gdl_dock_item_unmap (GtkWidget *widget) -{ - GdlDockItem *item; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gtk_widget_set_mapped (widget, FALSE); - - item = GDL_DOCK_ITEM (widget); - - gdk_window_hide (gtk_widget_get_window (widget)); - - if (item->_priv->grip) - gtk_widget_unmap (item->_priv->grip); -} - -static void -gdl_dock_item_realize (GtkWidget *widget) -{ - GdlDockItem *item; - GtkAllocation allocation; - GdkWindow *window; - GdkWindowAttr attributes; - gint attributes_mask; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - item = GDL_DOCK_ITEM (widget); - - gtk_widget_set_realized (widget, TRUE); - - /* widget window */ - gtk_widget_get_allocation (widget, &allocation); - attributes.x = allocation.x; - attributes.y = allocation.y; - attributes.width = allocation.width; - attributes.height = allocation.height; - attributes.window_type = GDK_WINDOW_CHILD; - attributes.wclass = GDK_INPUT_OUTPUT; - attributes.visual = gtk_widget_get_visual (widget); - attributes.colormap = gtk_widget_get_colormap (widget); - attributes.event_mask = (gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | - GDK_BUTTON1_MOTION_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK); - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; - window = gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gtk_widget_set_window (widget, window); - gdk_window_set_user_data (window, widget); - - gtk_widget_style_attach (widget); - gtk_style_set_background (gtk_widget_get_style (widget), window, - gtk_widget_get_state (GTK_WIDGET (item))); - gdk_window_set_back_pixmap (window, NULL, TRUE); - - if (item->child) - gtk_widget_set_parent_window (item->child, window); - - if (item->_priv->grip) - gtk_widget_set_parent_window (item->_priv->grip, window); -} - -static void -gdl_dock_item_style_set (GtkWidget *widget, - GtkStyle *previous_style) -{ - GdkWindow *window; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - if (gtk_widget_get_realized (widget) && - gtk_widget_get_has_window (widget)) - { - window = gtk_widget_get_window (widget); - gtk_style_set_background (gtk_widget_get_style (widget), - window, - gtk_widget_get_state (widget)); - if (gtk_widget_is_drawable (widget)) - gdk_window_clear (window); - } -} - -static void -gdl_dock_item_paint (GtkWidget *widget, - GdkEventExpose *event) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (widget); - - gtk_paint_box (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - GTK_SHADOW_NONE, - &event->area, widget, - "dockitem", - 0, 0, -1, -1); - -/* see bug #950556: avoid regression with GTK2/Quartz */ -#if !defined(GDK_WINDOWING_QUARTZ) - if (GTK_IS_WIDGET(item->_priv->grip)) - gtk_widget_queue_draw (GTK_WIDGET(item->_priv->grip)); -#endif -} - -static gint -gdl_dock_item_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (gtk_widget_is_drawable (widget) && - event->window == gtk_widget_get_window (widget)) - { - gdl_dock_item_paint (widget, event); - GTK_WIDGET_CLASS (gdl_dock_item_parent_class)->expose_event (widget,event); - } - - return FALSE; -} - -static void -gdl_dock_item_move_focus_child (GdlDockItem *item, - GtkDirectionType dir) -{ - g_return_if_fail (GDL_IS_DOCK_ITEM (item)); - gtk_widget_child_focus (GTK_WIDGET (item->child), dir); -} - -#define EVENT_IN_GRIP_EVENT_WINDOW(ev,gr) \ - ((gr) != NULL && (ev)->window == GDL_DOCK_ITEM_GRIP (gr)->title_window) - -#define EVENT_IN_TABLABEL_EVENT_WINDOW(ev,tl) \ - ((tl) != NULL && (ev)->window == GDL_DOCK_TABLABEL (tl)->event_window) - -static gint -gdl_dock_item_button_changed (GtkWidget *widget, - GdkEventButton *event) -{ - GdlDockItem *item; - GtkAllocation allocation; - GdkCursor *cursor; - gboolean locked; - gboolean event_handled; - gboolean in_handle; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - item = GDL_DOCK_ITEM (widget); - - if (!EVENT_IN_GRIP_EVENT_WINDOW (event, item->_priv->grip)) - return FALSE; - - locked = !GDL_DOCK_ITEM_NOT_LOCKED (item); - - event_handled = FALSE; - - gtk_widget_get_allocation (item->_priv->grip, &allocation); - - /* Check if user clicked on the drag handle. */ - switch (item->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - in_handle = event->x < allocation.width; - break; - case GTK_ORIENTATION_VERTICAL: - in_handle = event->y < allocation.height; - break; - default: - in_handle = FALSE; - break; - } - - /* Left mousebutton click on dockitem. */ - if (!locked && event->button == 1 && event->type == GDK_BUTTON_PRESS) { - - if (!gdl_dock_item_or_child_has_focus (item)) - gtk_widget_grab_focus (GTK_WIDGET (item)); - - /* Set in_drag flag, grab pointer and call begin drag operation. */ - if (in_handle) { - item->_priv->start_x = event->x; - item->_priv->start_y = event->y; - - GDL_DOCK_ITEM_SET_FLAGS (item, GDL_DOCK_IN_PREDRAG); - - cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), - GDK_FLEUR); - gdk_window_set_cursor (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window, - cursor); - gdk_cursor_unref (cursor); - - event_handled = TRUE; - }; - - } else if (!locked &&event->type == GDK_BUTTON_RELEASE && event->button == 1) { - if (GDL_DOCK_ITEM_IN_DRAG (item)) { - /* User dropped widget somewhere. */ - gdl_dock_item_drag_end (item, FALSE); - gtk_widget_grab_focus (GTK_WIDGET (item)); - event_handled = TRUE; - } - else if (GDL_DOCK_ITEM_IN_PREDRAG (item)) { - GDL_DOCK_ITEM_UNSET_FLAGS (item, GDL_DOCK_IN_PREDRAG); - event_handled = TRUE; - } - - /* we check the window since if the item was redocked it's - been unrealized and maybe it's not realized again yet */ - if (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window) { - cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget), - GDK_HAND2); - gdk_window_set_cursor (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window, - cursor); - gdk_cursor_unref (cursor); - } - - } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS && in_handle) { - gdl_dock_item_popup_menu (item, event->button, event->time); - event_handled = TRUE; - } - - return event_handled; -} - -static gint -gdl_dock_item_motion (GtkWidget *widget, - GdkEventMotion *event) -{ - GdlDockItem *item; - gint new_x, new_y; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - item = GDL_DOCK_ITEM (widget); - - if (!EVENT_IN_GRIP_EVENT_WINDOW (event, item->_priv->grip)) - return FALSE; - - if (GDL_DOCK_ITEM_IN_PREDRAG (item)) { - if (gtk_drag_check_threshold (widget, - item->_priv->start_x, - item->_priv->start_y, - event->x, - event->y)) { - GDL_DOCK_ITEM_UNSET_FLAGS (item, GDL_DOCK_IN_PREDRAG); - item->dragoff_x = item->_priv->start_x; - item->dragoff_y = item->_priv->start_y; - - gdl_dock_item_drag_start (item); - } - } - - if (!GDL_DOCK_ITEM_IN_DRAG (item)) - return FALSE; - - new_x = event->x_root; - new_y = event->y_root; - - g_signal_emit (item, gdl_dock_item_signals [DOCK_DRAG_MOTION], - 0, new_x, new_y); - - return TRUE; -} - -static gboolean -gdl_dock_item_key_press (GtkWidget *widget, - GdkEventKey *event) -{ - gboolean event_handled = FALSE; - - if (GDL_DOCK_ITEM_IN_DRAG (widget)) { - if (event->keyval == GDK_Escape) { - gdl_dock_item_drag_end (GDL_DOCK_ITEM (widget), TRUE); - event_handled = TRUE; - } - } - - if (event_handled) - return TRUE; - else - return GTK_WIDGET_CLASS (gdl_dock_item_parent_class)->key_press_event (widget, event); -} - -static gboolean -gdl_dock_item_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - GtkAllocation alloc; - gint rel_x, rel_y; - - /* we get (x,y) in our allocation coordinates system */ - - /* Get item's allocation. */ - gtk_widget_get_allocation (GTK_WIDGET (object), &alloc); - - /* Get coordinates relative to our window. */ - rel_x = x - alloc.x; - rel_y = y - alloc.y; - - /* Location is inside. */ - if (rel_x > 0 && rel_x < alloc.width && - rel_y > 0 && rel_y < alloc.height) { - float rx, ry; - GtkRequisition my, other; - gint divider = -1; - - /* this are for calculating the extra docking parameter */ - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (request->applicant), &other); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &my); - - /* Calculate location in terms of the available space (0-100%). */ - rx = (float) rel_x / alloc.width; - ry = (float) rel_y / alloc.height; - - /* Determine dock location. */ - if (rx < SPLIT_RATIO) { - request->position = GDL_DOCK_LEFT; - divider = other.width; - } - else if (rx > (1 - SPLIT_RATIO)) { - request->position = GDL_DOCK_RIGHT; - rx = 1 - rx; - divider = MAX (0, my.width - other.width); - } - else if (ry < SPLIT_RATIO && ry < rx) { - request->position = GDL_DOCK_TOP; - divider = other.height; - } - else if (ry > (1 - SPLIT_RATIO) && (1 - ry) < rx) { - request->position = GDL_DOCK_BOTTOM; - divider = MAX (0, my.height - other.height); - } - else - request->position = GDL_DOCK_CENTER; - - /* Reset rectangle coordinates to entire item. */ - request->rect.x = 0; - request->rect.y = 0; - request->rect.width = alloc.width; - request->rect.height = alloc.height; - - GdlDockItemBehavior behavior = GDL_DOCK_ITEM(object)->behavior; - - /* Calculate docking indicator rectangle size for new locations. Only - do this when we're not over the item's current location. */ - if (request->applicant != object) { - switch (request->position) { - case GDL_DOCK_TOP: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP) - return FALSE; - request->rect.height *= SPLIT_RATIO; - break; - case GDL_DOCK_BOTTOM: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM) - return FALSE; - request->rect.y += request->rect.height * (1 - SPLIT_RATIO); - request->rect.height *= SPLIT_RATIO; - break; - case GDL_DOCK_LEFT: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT) - return FALSE; - request->rect.width *= SPLIT_RATIO; - break; - case GDL_DOCK_RIGHT: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT) - return FALSE; - request->rect.x += request->rect.width * (1 - SPLIT_RATIO); - request->rect.width *= SPLIT_RATIO; - break; - case GDL_DOCK_CENTER: - if (behavior & GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER) - return FALSE; - request->rect.x = request->rect.width * SPLIT_RATIO/2; - request->rect.y = request->rect.height * SPLIT_RATIO/2; - request->rect.width = (request->rect.width * - (1 - SPLIT_RATIO/2)) - request->rect.x; - request->rect.height = (request->rect.height * - (1 - SPLIT_RATIO/2)) - request->rect.y; - break; - default: - break; - } - } - - /* adjust returned coordinates so they are have the same - origin as our window */ - request->rect.x += alloc.x; - request->rect.y += alloc.y; - - /* Set possible target location and return TRUE. */ - request->target = object; - - /* fill-in other dock information */ - if (request->position != GDL_DOCK_CENTER && divider >= 0) { - if (G_IS_VALUE (&request->extra)) - g_value_unset (&request->extra); - g_value_init (&request->extra, G_TYPE_UINT); - g_value_set_uint (&request->extra, (guint) divider); - } - - return TRUE; - } - else /* No docking possible at this location. */ - return FALSE; -} - -static void -gdl_dock_item_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GdlDockObject *new_parent = NULL; - GdlDockObject *parent, *requestor_parent; - GtkAllocation allocation; - gboolean add_ourselves_first = FALSE; - - guint available_space=0; - gint pref_size=-1; - guint splitpos=0; - GtkRequisition req, object_req, parent_req; - - parent = gdl_dock_object_get_parent_object (object); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (requestor), &req); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &object_req); - if (GDL_IS_DOCK_ITEM (parent)) - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (parent), &parent_req); - else - { - gtk_widget_get_allocation (GTK_WIDGET (parent), &allocation); - parent_req.height = allocation.height; - parent_req.width = allocation.width; - } - - /* If preferred size is not set on the requestor (perhaps a new item), - * then estimate and set it. The default value (either 0 or 1 pixels) is - * not any good. - */ - switch (position) { - case GDL_DOCK_TOP: - case GDL_DOCK_BOTTOM: - if (req.width < 2) - { - req.width = object_req.width; - g_object_set (requestor, "preferred-width", req.width, NULL); - } - if (req.height < 2) - { - req.height = NEW_DOCK_ITEM_RATIO * object_req.height; - g_object_set (requestor, "preferred-height", req.height, NULL); - } - if (req.width > 1) - g_object_set (object, "preferred-width", req.width, NULL); - if (req.height > 1) - g_object_set (object, "preferred-height", - object_req.height - req.height, NULL); - break; - case GDL_DOCK_LEFT: - case GDL_DOCK_RIGHT: - if (req.height < 2) - { - req.height = object_req.height; - g_object_set (requestor, "preferred-height", req.height, NULL); - } - if (req.width < 2) - { - req.width = NEW_DOCK_ITEM_RATIO * object_req.width; - g_object_set (requestor, "preferred-width", req.width, NULL); - } - if (req.height > 1) - g_object_set (object, "preferred-height", req.height, NULL); - if (req.width > 1) - g_object_set (object, "preferred-width", - object_req.width - req.width, NULL); - break; - case GDL_DOCK_CENTER: - if (req.height < 2) - { - req.height = object_req.height; - g_object_set (requestor, "preferred-height", req.height, NULL); - } - if (req.width < 2) - { - req.width = object_req.width; - g_object_set (requestor, "preferred-width", req.width, NULL); - } - if (req.height > 1) - g_object_set (object, "preferred-height", req.height, NULL); - if (req.width > 1) - g_object_set (object, "preferred-width", req.width, NULL); - break; - default: - { - GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (GDL_TYPE_DOCK_PLACEMENT)); - GEnumValue *enum_value = g_enum_get_value (enum_class, position); - const gchar *name = enum_value ? enum_value->value_name : NULL; - - g_warning (_("Unsupported docking strategy %s in dock object of type %s"), - name, G_OBJECT_TYPE_NAME (object)); - g_type_class_unref (enum_class); - return; - } - } - switch (position) { - case GDL_DOCK_TOP: - case GDL_DOCK_BOTTOM: - /* get a paned style dock object */ - new_parent = g_object_new (gdl_dock_object_type_from_nick ("paned"), - "orientation", GTK_ORIENTATION_VERTICAL, - "preferred-width", object_req.width, - "preferred-height", object_req.height, - NULL); - add_ourselves_first = (position == GDL_DOCK_BOTTOM); - if (parent) - available_space = parent_req.height; - pref_size = req.height; - break; - case GDL_DOCK_LEFT: - case GDL_DOCK_RIGHT: - new_parent = g_object_new (gdl_dock_object_type_from_nick ("paned"), - "orientation", GTK_ORIENTATION_HORIZONTAL, - "preferred-width", object_req.width, - "preferred-height", object_req.height, - NULL); - add_ourselves_first = (position == GDL_DOCK_RIGHT); - if(parent) - available_space = parent_req.width; - pref_size = req.width; - break; - case GDL_DOCK_CENTER: - /* If the parent is already a DockNotebook, we don't need - to create a new one. */ - if (!GDL_IS_DOCK_NOTEBOOK (parent)) - { - new_parent = g_object_new (gdl_dock_object_type_from_nick ("notebook"), - "preferred-width", object_req.width, - "preferred-height", object_req.height, - NULL); - add_ourselves_first = TRUE; - } - break; - default: - { - GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (GDL_TYPE_DOCK_PLACEMENT)); - GEnumValue *enum_value = g_enum_get_value (enum_class, position); - const gchar *name = enum_value ? enum_value->value_name : NULL; - - g_warning (_("Unsupported docking strategy %s in dock object of type %s"), - name, G_OBJECT_TYPE_NAME (object)); - g_type_class_unref (enum_class); - return; - } - } - - /* freeze the parent so it doesn't reduce automatically */ - if (parent) - gdl_dock_object_freeze (parent); - - - if (new_parent) - { - /* ref ourselves since we could be destroyed when detached */ - g_object_ref (object); - GDL_DOCK_OBJECT_SET_FLAGS (object, GDL_DOCK_IN_REFLOW); - gdl_dock_object_detach (object, FALSE); - - /* freeze the new parent, so reduce won't get called before it's - actually added to our parent */ - gdl_dock_object_freeze (new_parent); - - /* bind the new parent to our master, so the following adds work */ - gdl_dock_object_bind (new_parent, G_OBJECT (GDL_DOCK_OBJECT_GET_MASTER (object))); - - /* add the objects */ - if (add_ourselves_first) { - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (object)); - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (requestor)); - splitpos = available_space - pref_size; - } else { - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (requestor)); - gtk_container_add (GTK_CONTAINER (new_parent), GTK_WIDGET (object)); - splitpos = pref_size; - } - - /* add the new parent to the parent */ - if (parent) - gtk_container_add (GTK_CONTAINER (parent), GTK_WIDGET (new_parent)); - - /* show automatic object */ - if (gtk_widget_get_visible (GTK_WIDGET (object))) - { - gtk_widget_show (GTK_WIDGET (new_parent)); - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_IN_REFLOW); - } - gdl_dock_object_thaw (new_parent); - - /* use extra docking parameter */ - if (position != GDL_DOCK_CENTER && other_data && - G_VALUE_HOLDS (other_data, G_TYPE_UINT)) { - - g_object_set (G_OBJECT (new_parent), - "position", g_value_get_uint (other_data), - NULL); - } else if (splitpos > 0 && splitpos < available_space) { - g_object_set (G_OBJECT (new_parent), "position", splitpos, NULL); - } - - g_object_unref (object); - } - else - { - /* If the parent is already a DockNotebook, we don't need - to create a new one. */ - gtk_container_add (GTK_CONTAINER (parent), GTK_WIDGET (requestor)); - } - - requestor_parent = gdl_dock_object_get_parent_object (requestor); - if (GDL_IS_DOCK_NOTEBOOK (requestor_parent)) - { - /* Activate the page we just added */ - GdlDockItem* notebook = GDL_DOCK_ITEM (gdl_dock_object_get_parent_object (requestor)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook->child), - gtk_notebook_page_num (GTK_NOTEBOOK (notebook->child), GTK_WIDGET (requestor))); - } - - if (parent) - gdl_dock_object_thaw (parent); -} - -static void -gdl_dock_item_detach_menu (GtkWidget *widget, - GtkMenu *menu) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (widget); - item->_priv->menu = NULL; -} - -static void -gdl_dock_item_popup_menu (GdlDockItem *item, - guint button, - guint32 time) -{ - GtkWidget *mitem; - - if (!item->_priv->menu) { - /* Create popup menu and attach it to the dock item */ - item->_priv->menu = gtk_menu_new (); - gtk_menu_attach_to_widget (GTK_MENU (item->_priv->menu), - GTK_WIDGET (item), - gdl_dock_item_detach_menu); - - if (item->behavior & GDL_DOCK_ITEM_BEH_LOCKED) { - /* UnLock menuitem */ - mitem = gtk_menu_item_new_with_label (_("UnLock")); - gtk_menu_shell_append (GTK_MENU_SHELL (item->_priv->menu), - mitem); - g_signal_connect (mitem, "activate", - G_CALLBACK (gdl_dock_item_unlock_cb), item); - } else { - /* Hide menuitem. */ - mitem = gtk_menu_item_new_with_label (_("Hide")); - gtk_menu_shell_append (GTK_MENU_SHELL (item->_priv->menu), mitem); - g_signal_connect (mitem, "activate", - G_CALLBACK (gdl_dock_item_hide_cb), item); - /* Lock menuitem */ - mitem = gtk_menu_item_new_with_label (_("Lock")); - gtk_menu_shell_append (GTK_MENU_SHELL (item->_priv->menu), mitem); - g_signal_connect (mitem, "activate", - G_CALLBACK (gdl_dock_item_lock_cb), item); - } - } - - /* Show popup menu. */ - gtk_widget_show_all (item->_priv->menu); - gtk_menu_popup (GTK_MENU (item->_priv->menu), NULL, NULL, NULL, NULL, - button, time); -} - -static void -gdl_dock_item_drag_start (GdlDockItem *item) -{ - GdkCursor *fleur; - - if (!gtk_widget_get_realized (GTK_WIDGET (item))) - gtk_widget_realize (GTK_WIDGET (item)); - - GDL_DOCK_ITEM_SET_FLAGS (item, GDL_DOCK_IN_DRAG); - - /* grab the pointer so we receive all mouse events */ - fleur = gdk_cursor_new (GDK_FLEUR); - - /* grab the keyboard & pointer */ - gtk_grab_add (GTK_WIDGET (item)); - - gdk_cursor_unref (fleur); - - g_signal_emit (item, gdl_dock_item_signals [DOCK_DRAG_BEGIN], 0); -} - -static void -gdl_dock_item_drag_end (GdlDockItem *item, - gboolean cancel) -{ - /* Release pointer & keyboard. */ - GtkWidget *widget = gtk_grab_get_current (); - if (widget == NULL) { - widget = GTK_WIDGET (item); - } - gtk_grab_remove (widget); - - g_signal_emit (item, gdl_dock_item_signals [DOCK_DRAG_END], 0, cancel); - - GDL_DOCK_ITEM_UNSET_FLAGS (item, GDL_DOCK_IN_DRAG); -} - -static void -gdl_dock_item_tab_button (GtkWidget *widget, - GdkEventButton *event, - gpointer data) -{ - GdlDockItem *item; - GtkAllocation allocation; - - item = GDL_DOCK_ITEM (data); - - if (!GDL_DOCK_ITEM_NOT_LOCKED (item)) - return; - - switch (event->button) { - case 1: - /* set dragoff_{x,y} as we the user clicked on the middle of the - drag handle */ - switch (item->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - gtk_widget_get_allocation (GTK_WIDGET (data), &allocation); - /*item->dragoff_x = item->_priv->grip_size / 2;*/ - item->dragoff_y = allocation.height / 2; - break; - case GTK_ORIENTATION_VERTICAL: - /*item->dragoff_x = GTK_WIDGET (data)->allocation.width / 2;*/ - item->dragoff_y = item->_priv->grip_size / 2; - break; - }; - gdl_dock_item_drag_start (item); - break; - - case 3: - gdl_dock_item_popup_menu (item, event->button, event->time); - break; - - default: - break; - }; -} - -static void -gdl_dock_item_hide_cb (GtkWidget *widget, - GdlDockItem *item) -{ - GdlDockMaster *master; - - g_return_if_fail (item != NULL); - - master = GDL_DOCK_OBJECT_GET_MASTER (item); - gdl_dock_item_hide_item (item); -} - -static void -gdl_dock_item_lock_cb (GtkWidget *widget, - GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - gdl_dock_item_lock (item); -} - -static void -gdl_dock_item_unlock_cb (GtkWidget *widget, - GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - gdl_dock_item_unlock (item); -} - -static void -gdl_dock_item_showhide_grip (GdlDockItem *item) -{ - GdkDisplay *display; - GdkCursor *cursor; - - gdl_dock_item_detach_menu (GTK_WIDGET (item), NULL); - display = gtk_widget_get_display (GTK_WIDGET (item)); - cursor = NULL; - - if (item->_priv->grip) { - if (GDL_DOCK_ITEM_GRIP_SHOWN (item) && - GDL_DOCK_ITEM_NOT_LOCKED(item)) - cursor = gdk_cursor_new_for_display (display, GDK_HAND2); - } - if (item->_priv->grip && GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window) - gdk_window_set_cursor (GDL_DOCK_ITEM_GRIP (item->_priv->grip)->title_window, cursor); - - if (cursor) - gdk_cursor_unref (cursor); - - gtk_widget_queue_resize (GTK_WIDGET (item)); -} - -static void -gdl_dock_item_real_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - item->orientation = orientation; - - if (gtk_widget_is_drawable (GTK_WIDGET (item))) - gtk_widget_queue_draw (GTK_WIDGET (item)); - gtk_widget_queue_resize (GTK_WIDGET (item)); -} - - -/* ----- Public interface ----- */ - -/** - * gdl_dock_item_new: - * @name: Unique name for identifying the dock object. - * @long_name: Human readable name for the dock object. - * @behavior: General behavior for the dock item (i.e. whether it can - * float, if it's locked, etc.), as specified by - * #GdlDockItemBehavior flags. - * - * Creates a new dock item widget. - * Returns: The newly created dock item grip widget. - **/ -GtkWidget * -gdl_dock_item_new (const gchar *name, - const gchar *long_name, - GdlDockItemBehavior behavior) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, - "name", name, - "long-name", long_name, - "behavior", behavior, - NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (item); -} - -/** - * gdl_dock_item_new_with_stock: - * @name: Unique name for identifying the dock object. - * @long_name: Human readable name for the dock object. - * @stock_id: Stock icon for the dock object. - * @behavior: General behavior for the dock item (i.e. whether it can - * float, if it's locked, etc.), as specified by - * #GdlDockItemBehavior flags. - * - * Creates a new dock item grip widget with a given stock id. - * Returns: The newly created dock item grip widget. - **/ -GtkWidget * -gdl_dock_item_new_with_stock (const gchar *name, - const gchar *long_name, - const gchar *stock_id, - GdlDockItemBehavior behavior) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, - "name", name, - "long-name", long_name, - "stock-id", stock_id, - "behavior", behavior, - NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (item); -} - -GtkWidget * -gdl_dock_item_new_with_pixbuf_icon (const gchar *name, - const gchar *long_name, - const GdkPixbuf *pixbuf_icon, - GdlDockItemBehavior behavior) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (g_object_new (GDL_TYPE_DOCK_ITEM, - "name", name, - "long-name", long_name, - "pixbuf-icon", pixbuf_icon, - "behavior", behavior, - NULL)); - - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_AUTOMATIC); - gdl_dock_item_set_tablabel (item, gtk_label_new (long_name)); - - return GTK_WIDGET (item); -} - -/* convenient function (and to preserve source compat) */ -/** - * gdl_dock_item_dock_to: - * @item: The dock item that will be relocated to the dock position. - * @target: (allow-none): The dock item that will be used as the point of reference. - * @position: The position to dock #item, relative to #target. - * @docking_param: This value is unused, and will be ignored. - * - * Relocates a dock item to a new location relative to another dock item. - **/ -void -gdl_dock_item_dock_to (GdlDockItem *item, - GdlDockItem *target, - GdlDockPlacement position, - gint docking_param) -{ - g_return_if_fail (item != NULL); - g_return_if_fail (item != target); - g_return_if_fail (target != NULL || position == GDL_DOCK_FLOATING); - g_return_if_fail ((item->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING) == 0 || position != GDL_DOCK_FLOATING); - - if (position == GDL_DOCK_FLOATING || !target) { - GdlDockObject *controller; - - if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (item))) { - g_warning (_("Attempt to bind an unbound item %p"), item); - return; - } - - controller = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (item)); - - /* FIXME: save previous docking position for later - re-docking... does this make sense now? */ - - /* Create new floating dock for widget. */ - item->dragoff_x = item->dragoff_y = 0; - gdl_dock_add_floating_item (GDL_DOCK (controller), - item, 0, 0, -1, -1); - - } else - gdl_dock_object_dock (GDL_DOCK_OBJECT (target), - GDL_DOCK_OBJECT (item), - position, NULL); -} - -/** - * gdl_dock_item_set_orientation: - * @item: The dock item which will get it's orientation set. - * @orientation: The orientation to set the item to. If the orientation - * is set to #GTK_ORIENTATION_VERTICAL, the grip widget will be shown - * along the top of the edge of item (if it is not hidden). If the - * orientation is set to #GTK_ORIENTATION_HORIZONTAL, the grip widget - * will be shown down the left edge of the item (even if the widget - * text direction is set to RTL). - * - * This function sets the layout of the dock item. - **/ -void -gdl_dock_item_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - GParamSpec *pspec; - - g_return_if_fail (item != NULL); - - if (item->orientation != orientation) { - /* push the property down the hierarchy if our child supports it */ - if (item->child != NULL) { - pspec = g_object_class_find_property ( - G_OBJECT_GET_CLASS (item->child), "orientation"); - if (pspec && pspec->value_type == GTK_TYPE_ORIENTATION) - g_object_set (G_OBJECT (item->child), - "orientation", orientation, - NULL); - }; - if (GDL_DOCK_ITEM_GET_CLASS (item)->set_orientation) - GDL_DOCK_ITEM_GET_CLASS (item)->set_orientation (item, orientation); - g_object_notify (G_OBJECT (item), "orientation"); - } -} - -/** - * gdl_dock_item_get_tablabel: - * @item: The dock item from which to get the tab label widget. - * - * Gets the current tab label widget. Note that this label widget is - * only visible when the "switcher-style" property of the #GdlDockMaster - * is set to #GDL_SWITCHER_STYLE_TABS - * - * Returns: Returns the tab label widget. - **/ -GtkWidget * -gdl_dock_item_get_tablabel (GdlDockItem *item) -{ - g_return_val_if_fail (item != NULL, NULL); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), NULL); - - return item->_priv->tab_label; -} - -/** - * gdl_dock_item_set_tablabel: - * @item: The dock item which will get it's tab label widget set. - * @tablabel: The widget that will become the tab label. - * - * Replaces the current tab label widget with another widget. Note that - * this label widget is only visible when the "switcher-style" property - * of the #GdlDockMaster is set to #GDL_SWITCHER_STYLE_TABS - **/ -void -gdl_dock_item_set_tablabel (GdlDockItem *item, - GtkWidget *tablabel) -{ - g_return_if_fail (item != NULL); - - if (item->_priv->intern_tab_label) - { - item->_priv->intern_tab_label = FALSE; - g_signal_handler_disconnect (item, item->_priv->notify_label); - g_signal_handler_disconnect (item, item->_priv->notify_stock_id); - } - - if (item->_priv->tab_label) { - /* disconnect and unref the previous tablabel */ - if (GDL_IS_DOCK_TABLABEL (item->_priv->tab_label)) { - g_signal_handlers_disconnect_matched (item->_priv->tab_label, - G_SIGNAL_MATCH_DATA, - 0, 0, NULL, - NULL, item); - g_object_set (item->_priv->tab_label, "item", NULL, NULL); - } - g_object_unref (item->_priv->tab_label); - item->_priv->tab_label = NULL; - } - - if (tablabel) { - g_object_ref_sink (G_OBJECT (tablabel)); - item->_priv->tab_label = tablabel; - if (GDL_IS_DOCK_TABLABEL (tablabel)) { - g_object_set (tablabel, "item", item, NULL); - /* connect to tablabel signal */ - g_signal_connect (tablabel, "button_pressed_handle", - G_CALLBACK (gdl_dock_item_tab_button), item); - } - } -} - -/** - * gdl_dock_item_get_grip: - * @item: The dock item from which to to get the grip of. - * - * This function returns the dock item's grip label widget. - * - * Returns: Returns the current label widget. - **/ -GtkWidget * -gdl_dock_item_get_grip(GdlDockItem *item) -{ - g_return_val_if_fail (item != NULL, NULL); - g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), NULL); - - return item->_priv->grip; -} - -/** - * gdl_dock_item_hide_grip: - * @item: The dock item to hide the grip of. - * - * This function hides the dock item's grip widget. - **/ -void -gdl_dock_item_hide_grip (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - if (item->_priv->grip_shown) { - item->_priv->grip_shown = FALSE; - gdl_dock_item_showhide_grip (item); - }; - g_warning ("Grips always show unless GDL_DOCK_ITEM_BEH_NO_GRIP is set\n" ); -} - -/** - * gdl_dock_item_show_grip: - * @item: The dock item to show the grip of. - * - * This function shows the dock item's grip widget. - **/ -void -gdl_dock_item_show_grip (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - if (!item->_priv->grip_shown) { - item->_priv->grip_shown = TRUE; - gdl_dock_item_showhide_grip (item); - }; -} - -/** - * gdl_dock_item_notify_selected: - * @item: the dock item to emit a selected signal on. - * - * This function emits the selected signal. It is to be used by #GdlSwitcher - * to let clients know that this item has been switched to. - **/ -void -gdl_dock_item_notify_selected (GdlDockItem *item) -{ - g_signal_emit (item, gdl_dock_item_signals [SELECTED], 0); -} - -/* convenient function (and to preserve source compat) */ -/** - * gdl_dock_item_bind: - * @item: The item to bind. - * @dock: The #GdlDock widget to bind it to. Note that this widget must - * be a type of #GdlDock. - * - * Binds this dock item to a new dock master. - **/ -void -gdl_dock_item_bind (GdlDockItem *item, - GtkWidget *dock) -{ - g_return_if_fail (item != NULL); - g_return_if_fail (dock == NULL || GDL_IS_DOCK (dock)); - - gdl_dock_object_bind (GDL_DOCK_OBJECT (item), - G_OBJECT (GDL_DOCK_OBJECT_GET_MASTER (dock))); -} - -/* convenient function (and to preserve source compat) */ -/** - * gdl_dock_item_unbind: - * @item: The item to unbind. - * - * Unbinds this dock item from it's dock master. - **/ -void -gdl_dock_item_unbind (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - gdl_dock_object_unbind (GDL_DOCK_OBJECT (item)); -} - -/** - * gdl_dock_item_hide_item: - * @item: The dock item to hide. - * - * This function hides the dock item. When dock items are hidden they - * are completely removed from the layout. - * - * The dock item close button causes the panel to be hidden. - **/ -void -gdl_dock_item_hide_item (GdlDockItem *item) -{ - GtkAllocation allocation; - - g_return_if_fail (item != NULL); - - if (!GDL_DOCK_OBJECT_ATTACHED (item)) - /* already hidden/detached */ - return; - - /* if the object is manual, create a new placeholder to be able to - restore the position later */ - if (!GDL_DOCK_OBJECT_AUTOMATIC (item)) { - if (item->_priv->ph) - g_object_unref (item->_priv->ph); - - gboolean isFloating = FALSE; - gint width=0, height=0, x=0, y = 0; - - if (GDL_IS_DOCK (gdl_dock_object_get_parent_object (GDL_DOCK_OBJECT (item)))) - { - GdlDock* dock = GDL_DOCK (gdl_dock_object_get_parent_object (GDL_DOCK_OBJECT (item))); - g_object_get (dock, - "floating", &isFloating, - "width", &width, - "height",&height, - "floatx",&x, - "floaty",&y, - NULL); - } else { - gtk_widget_get_allocation (GTK_WIDGET (item), &allocation); - item->_priv->preferred_width = allocation.width; - item->_priv->preferred_height = allocation.height; - } - item->_priv->ph = GDL_DOCK_PLACEHOLDER ( - g_object_new (GDL_TYPE_DOCK_PLACEHOLDER, - "sticky", FALSE, - "host", item, - "width", width, - "height", height, - "floating", isFloating, - "floatx", x, - "floaty", y, - NULL)); - g_object_ref_sink (item->_priv->ph); - } - - gdl_dock_object_freeze (GDL_DOCK_OBJECT (item)); - - /* hide our children first, so they can also set placeholders */ - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (item))) - gtk_container_foreach (GTK_CONTAINER (item), - (GtkCallback) gdl_dock_item_hide_item, - NULL); - - /* detach the item recursively */ - gdl_dock_object_detach (GDL_DOCK_OBJECT (item), TRUE); - - gtk_widget_hide (GTK_WIDGET (item)); - - gdl_dock_object_thaw (GDL_DOCK_OBJECT (item)); -} - -/** - * gdl_dock_item_iconify_item: - * @item: The dock item to iconify. - * - * This function iconifies the dock item. When dock items are iconified - * they are hidden, and appear only as icons in dock bars. - * - * The dock item iconify button causes the panel to be iconified. - **/ -void -gdl_dock_item_iconify_item (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - GDL_DOCK_OBJECT_SET_FLAGS (item, GDL_DOCK_ICONIFIED); - gdl_dock_item_hide_item (item); -} - -/** - * gdl_dock_item_show_item: - * @item: The dock item to show. - * - * This function shows the dock item. When dock items are shown, they - * are displayed in their normal layout position. - **/ -void -gdl_dock_item_show_item (GdlDockItem *item) -{ - g_return_if_fail (item != NULL); - - GDL_DOCK_OBJECT_UNSET_FLAGS (item, GDL_DOCK_ICONIFIED); - - if (item->_priv->ph) { - gboolean isFloating=FALSE; - gint width = 0, height = 0, x= 0, y = 0; - g_object_get (G_OBJECT(item->_priv->ph), - "width", &width, - "height", &height, - "floating",&isFloating, - "floatx", &x, - "floaty", &y, - NULL); - if (isFloating) { - GdlDockObject *controller = - gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (item)); - gdl_dock_add_floating_item (GDL_DOCK (controller), - item, x, y, width, height); - } else { - gtk_container_add (GTK_CONTAINER (item->_priv->ph), - GTK_WIDGET (item)); - } - g_object_unref (item->_priv->ph); - item->_priv->ph = NULL; - - } else if (gdl_dock_object_is_bound (GDL_DOCK_OBJECT (item))) { - GdlDockObject *toplevel; - - toplevel = gdl_dock_master_get_controller - (GDL_DOCK_OBJECT_GET_MASTER (item)); - - if (item->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING) { - g_warning("Object %s has no default position and flag GDL_DOCK_ITEM_BEH_NEVER_FLOATING is set.\n", - GDL_DOCK_OBJECT(item)->name); - } else if (toplevel) { - gdl_dock_object_dock (toplevel, GDL_DOCK_OBJECT (item), - GDL_DOCK_FLOATING, NULL); - } else - g_warning("There is no toplevel window. GdlDockItem %s cannot be shown.\n", GDL_DOCK_OBJECT(item)->name); - - } else - g_warning("GdlDockItem %s is not bound. It cannot be shown.\n", - GDL_DOCK_OBJECT(item)->name); - - gtk_widget_show (GTK_WIDGET (item)); -} - -/** - * gdl_dock_item_lock: - * @item: The dock item to lock. - * - * This function locks the dock item. When locked the dock item cannot - * be dragged around and it doesn't show a grip. - **/ -void -gdl_dock_item_lock (GdlDockItem *item) -{ - g_object_set (item, "locked", TRUE, NULL); -} - -/** - * gdl_dock_item_unlock: - * @item: The dock item to unlock. - * - * This function unlocks the dock item. When unlocked the dock item can - * be dragged around and can show a grip. - **/ -void -gdl_dock_item_unlock (GdlDockItem *item) -{ - g_object_set (item, "locked", FALSE, NULL); -} - -/** - * gdl_dock_item_set_default_position: - * @item: The dock item - * @reference: The GdlDockObject which is the default dock for @item - * - * This method has only an effect when you add you dock_item with - * GDL_DOCK_ITEM_BEH_NEVER_FLOATING. In this case you have to assign - * it a default position. - **/ -void -gdl_dock_item_set_default_position (GdlDockItem *item, - GdlDockObject *reference) -{ - g_return_if_fail (item != NULL); - - if (item->_priv->ph) { - g_object_unref (item->_priv->ph); - item->_priv->ph = NULL; - } - - if (reference && GDL_DOCK_OBJECT_ATTACHED (reference)) { - if (GDL_IS_DOCK_PLACEHOLDER (reference)) { - g_object_ref_sink (reference); - item->_priv->ph = GDL_DOCK_PLACEHOLDER (reference); - } else { - item->_priv->ph = GDL_DOCK_PLACEHOLDER ( - g_object_new (GDL_TYPE_DOCK_PLACEHOLDER, - "sticky", TRUE, - "host", reference, - NULL)); - g_object_ref_sink (item->_priv->ph); - } - } -} - -/** - * gdl_dock_item_preferred_size: - * @item: The dock item to get the preferred size of. - * @req: A pointer to a #GtkRequisition into which the preferred size - * will be written. - * - * Gets the preferred size of the dock item in pixels. - **/ -void -gdl_dock_item_preferred_size (GdlDockItem *item, - GtkRequisition *req) -{ - GtkAllocation allocation; - - if (!req) - return; - - gtk_widget_get_allocation (GTK_WIDGET (item), &allocation); - - req->width = MAX (item->_priv->preferred_width, allocation.width); - req->height = MAX (item->_priv->preferred_height, allocation.height); -} - - -gboolean -gdl_dock_item_or_child_has_focus (GdlDockItem *item) -{ - GtkWidget *item_child; - gboolean item_or_child_has_focus; - - g_return_val_if_fail (GDL_IS_DOCK_ITEM (item), FALSE); - - for (item_child = gtk_container_get_focus_child (GTK_CONTAINER (item)); - item_child && GTK_IS_CONTAINER (item_child) && gtk_container_get_focus_child (GTK_CONTAINER (item_child)); - item_child = gtk_container_get_focus_child (GTK_CONTAINER (item_child))) ; - - item_or_child_has_focus = - (gtk_widget_has_focus (GTK_WIDGET (item)) || - (GTK_IS_WIDGET (item_child) && gtk_widget_has_focus (item_child))); - - return item_or_child_has_focus; -} - - -/* ----- gtk orientation type exporter/importer ----- */ - -static void -gdl_dock_param_export_gtk_orientation (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = - g_strdup_printf ("%s", (src->data [0].v_int == GTK_ORIENTATION_HORIZONTAL) ? - "horizontal" : "vertical"); -} - -static void -gdl_dock_param_import_gtk_orientation (const GValue *src, - GValue *dst) -{ - if (!strcmp (src->data [0].v_pointer, "horizontal")) - dst->data [0].v_int = GTK_ORIENTATION_HORIZONTAL; - else - dst->data [0].v_int = GTK_ORIENTATION_VERTICAL; -} - diff --git a/src/libgdl/gdl-dock-item.h b/src/libgdl/gdl-dock-item.h deleted file mode 100644 index b9378f783..000000000 --- a/src/libgdl/gdl-dock-item.h +++ /dev/null @@ -1,223 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-item.h - * - * Author: Gustavo Giráldez - * - * Based on GnomeDockItem/BonoboDockItem. Original copyright notice follows. - * - * Copyright (C) 1998 Ettore Perazzoli - * Copyright (C) 1998 Elliot Lee - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GDL_DOCK_ITEM_H__ -#define __GDL_DOCK_ITEM_H__ - -#include "libgdl/gdl-dock-object.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_ITEM (gdl_dock_item_get_type ()) -#define GDL_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_ITEM, GdlDockItem)) -#define GDL_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_ITEM, GdlDockItemClass)) -#define GDL_IS_DOCK_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_ITEM)) -#define GDL_IS_DOCK_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_ITEM)) -#define GDL_DOCK_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_ITEM, GdlDockItemClass)) - -/** - * GdlDockItemBehavior: - * @GDL_DOCK_ITEM_BEH_NORMAL: Normal dock item - * @GDL_DOCK_ITEM_BEH_NEVER_FLOATING: item cannot be undocked - * @GDL_DOCK_ITEM_BEH_NEVER_VERTICAL: item cannot be docked vertically - * @GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL: item cannot be docked horizontally - * @GDL_DOCK_ITEM_BEH_LOCKED: item is locked, it cannot be moved around - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP: item cannot be docked at top - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM: item cannot be docked at bottom - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT: item cannot be docked left - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT: item cannot be docked right - * @GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER: item cannot be docked at center - * @GDL_DOCK_ITEM_BEH_CANT_CLOSE: item cannot be closed - * @GDL_DOCK_ITEM_BEH_CANT_ICONIFY: item cannot be iconified - * @GDL_DOCK_ITEM_BEH_NO_GRIP: item doesn't have a grip - * - * Described the behaviour of a doc item. The item can have multiple flags set. - * - **/ - -typedef enum { - GDL_DOCK_ITEM_BEH_NORMAL = 0, - GDL_DOCK_ITEM_BEH_NEVER_FLOATING = 1 << 0, - GDL_DOCK_ITEM_BEH_NEVER_VERTICAL = 1 << 1, - GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL = 1 << 2, - GDL_DOCK_ITEM_BEH_LOCKED = 1 << 3, - GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP = 1 << 4, - GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM = 1 << 5, - GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT = 1 << 6, - GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT = 1 << 7, - GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER = 1 << 8, - GDL_DOCK_ITEM_BEH_CANT_CLOSE = 1 << 9, - GDL_DOCK_ITEM_BEH_CANT_ICONIFY = 1 << 10, - GDL_DOCK_ITEM_BEH_NO_GRIP = 1 << 11 -} GdlDockItemBehavior; - - -/** - * GdlDockItemFlags: - * @GDL_DOCK_IN_DRAG: item is in a drag operation - * @GDL_DOCK_IN_PREDRAG: item is in a predrag operation - * @GDL_DOCK_ICONIFIED: item is iconified - * @GDL_DOCK_USER_ACTION: indicates the user has started an action on the dock item - * - * Status flag of a GdlDockItem. Don't use unless you derive a widget from GdlDockItem - * - **/ -typedef enum { - GDL_DOCK_IN_DRAG = 1 << GDL_DOCK_OBJECT_FLAGS_SHIFT, - GDL_DOCK_IN_PREDRAG = 1 << (GDL_DOCK_OBJECT_FLAGS_SHIFT + 1), - GDL_DOCK_ICONIFIED = 1 << (GDL_DOCK_OBJECT_FLAGS_SHIFT + 2), - GDL_DOCK_USER_ACTION = 1 << (GDL_DOCK_OBJECT_FLAGS_SHIFT + 3) -} GdlDockItemFlags; - -typedef struct _GdlDockItem GdlDockItem; -typedef struct _GdlDockItemClass GdlDockItemClass; -typedef struct _GdlDockItemPrivate GdlDockItemPrivate; - -struct _GdlDockItem { - GdlDockObject object; - - GtkWidget *child; - GdlDockItemBehavior behavior; - GtkOrientation orientation; - - guint resize : 1; - - gint dragoff_x, dragoff_y; /* these need to be - accesible from - outside */ - GdlDockItemPrivate *_priv; -}; - -struct _GdlDockItemClass { - GdlDockObjectClass parent_class; - - gboolean has_grip; - - /* virtuals */ - void (* dock_drag_begin) (GdlDockItem *item); - void (* dock_drag_motion) (GdlDockItem *item, - gint x, - gint y); - void (* dock_drag_end) (GdlDockItem *item, - gboolean cancelled); - void (* move_focus_child) (GdlDockItem *item, - GtkDirectionType direction); - void (* set_orientation) (GdlDockItem *item, - GtkOrientation orientation); -}; - -#define GDL_DOCK_ITEM_FLAGS(item) (GDL_DOCK_OBJECT (item)->flags) -#define GDL_DOCK_ITEM_IN_DRAG(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_IN_DRAG) != 0) -#define GDL_DOCK_ITEM_IN_PREDRAG(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_IN_PREDRAG) != 0) -#define GDL_DOCK_ITEM_ICONIFIED(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_ICONIFIED) != 0) -#define GDL_DOCK_ITEM_USER_ACTION(item) \ - ((GDL_DOCK_ITEM_FLAGS (item) & GDL_DOCK_USER_ACTION) != 0) -#define GDL_DOCK_ITEM_NOT_LOCKED(item) !((item)->behavior & GDL_DOCK_ITEM_BEH_LOCKED) -#define GDL_DOCK_ITEM_NO_GRIP(item) ((item)->behavior & GDL_DOCK_ITEM_BEH_NO_GRIP) - -#define GDL_DOCK_ITEM_SET_FLAGS(item,flag) \ - G_STMT_START { (GDL_DOCK_ITEM_FLAGS (item) |= (flag)); } G_STMT_END -#define GDL_DOCK_ITEM_UNSET_FLAGS(item,flag) \ - G_STMT_START { (GDL_DOCK_ITEM_FLAGS (item) &= ~(flag)); } G_STMT_END - -#define GDL_DOCK_ITEM_HAS_GRIP(item) ((GDL_DOCK_ITEM_GET_CLASS (item)->has_grip)&& \ - ! GDL_DOCK_ITEM_NO_GRIP (item)) - -#define GDL_DOCK_ITEM_CANT_CLOSE(item) \ - ((((item)->behavior & GDL_DOCK_ITEM_BEH_CANT_CLOSE) != 0)|| \ - ! GDL_DOCK_ITEM_NOT_LOCKED(item)) - -#define GDL_DOCK_ITEM_CANT_ICONIFY(item) \ - ((((item)->behavior & GDL_DOCK_ITEM_BEH_CANT_ICONIFY) != 0)|| \ - ! GDL_DOCK_ITEM_NOT_LOCKED(item)) - -/* public interface */ - -GtkWidget *gdl_dock_item_new (const gchar *name, - const gchar *long_name, - GdlDockItemBehavior behavior); -GtkWidget *gdl_dock_item_new_with_stock (const gchar *name, - const gchar *long_name, - const gchar *stock_id, - GdlDockItemBehavior behavior); - -GtkWidget *gdl_dock_item_new_with_pixbuf_icon (const gchar *name, - const gchar *long_name, - const GdkPixbuf *pixbuf_icon, - GdlDockItemBehavior behavior); - -GType gdl_dock_item_get_type (void); - -void gdl_dock_item_dock_to (GdlDockItem *item, - GdlDockItem *target, - GdlDockPlacement position, - gint docking_param); - -void gdl_dock_item_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -GtkWidget *gdl_dock_item_get_tablabel (GdlDockItem *item); -void gdl_dock_item_set_tablabel (GdlDockItem *item, - GtkWidget *tablabel); -GtkWidget *gdl_dock_item_get_grip (GdlDockItem *item); -void gdl_dock_item_hide_grip (GdlDockItem *item); -void gdl_dock_item_show_grip (GdlDockItem *item); -void gdl_dock_item_notify_selected (GdlDockItem *item); - -/* bind and unbind items to a dock */ -void gdl_dock_item_bind (GdlDockItem *item, - GtkWidget *dock); - -void gdl_dock_item_unbind (GdlDockItem *item); - -void gdl_dock_item_hide_item (GdlDockItem *item); - -void gdl_dock_item_iconify_item (GdlDockItem *item); - -void gdl_dock_item_show_item (GdlDockItem *item); - -void gdl_dock_item_lock (GdlDockItem *item); - -void gdl_dock_item_unlock (GdlDockItem *item); - -void gdl_dock_item_set_default_position (GdlDockItem *item, - GdlDockObject *reference); - -void gdl_dock_item_preferred_size (GdlDockItem *item, - GtkRequisition *req); - -gboolean gdl_dock_item_or_child_has_focus (GdlDockItem *item); - -G_END_DECLS - -#endif diff --git a/src/libgdl/gdl-dock-master.c b/src/libgdl/gdl-dock-master.c deleted file mode 100644 index 294614c7e..000000000 --- a/src/libgdl/gdl-dock-master.c +++ /dev/null @@ -1,1011 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-master.c - Object which manages a dock ring - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" - -#include "gdl-dock-master.h" -#include "gdl-dock.h" -#include "gdl-dock-item.h" -#include "gdl-dock-notebook.h" -#include "gdl-switcher.h" -#include "libgdlmarshal.h" -#include "libgdltypebuiltins.h" -#ifdef WIN32 -#include "gdl-win32.h" -#endif - -/* ----- Private prototypes ----- */ - -static void gdl_dock_master_class_init (GdlDockMasterClass *klass); - -static void gdl_dock_master_dispose (GObject *g_object); -static void gdl_dock_master_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_master_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void _gdl_dock_master_remove (GdlDockObject *object, - GdlDockMaster *master); - -static void gdl_dock_master_drag_begin (GdlDockItem *item, - gpointer data); -static void gdl_dock_master_drag_end (GdlDockItem *item, - gboolean cancelled, - gpointer data); -static void gdl_dock_master_drag_motion (GdlDockItem *item, - gint x, - gint y, - gpointer data); - -static void _gdl_dock_master_foreach (gpointer key, - gpointer value, - gpointer user_data); - -static void gdl_dock_master_xor_rect (GdlDockMaster *master); - -static void gdl_dock_master_layout_changed (GdlDockMaster *master); - -static void gdl_dock_master_set_switcher_style (GdlDockMaster *master, - GdlSwitcherStyle switcher_style); - -/* ----- Private data types and variables ----- */ - -enum { - PROP_0, - PROP_DEFAULT_TITLE, - PROP_LOCKED, - PROP_SWITCHER_STYLE -}; - -enum { - LAYOUT_CHANGED, - LAST_SIGNAL -}; - -struct _GdlDockMasterPrivate { - gint number; /* for naming nameless manual objects */ - gchar *default_title; - - GdkGC *root_xor_gc; - gboolean rect_drawn; - GdlDock *rect_owner; - - GdlDockRequest *drag_request; - - /* source id for the idle handler to emit a layout_changed signal */ - guint idle_layout_changed_id; - - /* hashes to quickly calculate the overall locked status: i.e. - * if size(unlocked_items) == 0 then locked = 1 - * else if size(locked_items) == 0 then locked = 0 - * else locked = -1 - */ - GHashTable *locked_items; - GHashTable *unlocked_items; - - GdlSwitcherStyle switcher_style; -}; - -#define COMPUTE_LOCKED(master) \ - (g_hash_table_size ((master)->_priv->unlocked_items) == 0 ? 1 : \ - (g_hash_table_size ((master)->_priv->locked_items) == 0 ? 0 : -1)) - -static guint master_signals [LAST_SIGNAL] = { 0 }; - - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockMaster, gdl_dock_master, G_TYPE_OBJECT); - -static void -gdl_dock_master_class_init (GdlDockMasterClass *klass) -{ - GObjectClass *g_object_class; - - g_object_class = G_OBJECT_CLASS (klass); - - g_object_class->dispose = gdl_dock_master_dispose; - g_object_class->set_property = gdl_dock_master_set_property; - g_object_class->get_property = gdl_dock_master_get_property; - - g_object_class_install_property ( - g_object_class, PROP_DEFAULT_TITLE, - g_param_spec_string ("default-title", _("Default title"), - _("Default title for newly created floating docks"), - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_LOCKED, - g_param_spec_int ("locked", _("Locked"), - _("If is set to 1, all the dock items bound to the master " - "are locked; if it's 0, all are unlocked; -1 indicates " - "inconsistency among the items"), - -1, 1, 0, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_SWITCHER_STYLE, - g_param_spec_enum ("switcher-style", _("Switcher Style"), - _("Switcher buttons style"), - GDL_TYPE_SWITCHER_STYLE, - GDL_SWITCHER_STYLE_BOTH, - G_PARAM_READWRITE)); - - master_signals [LAYOUT_CHANGED] = - g_signal_new ("layout-changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockMasterClass, layout_changed), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__VOID, - G_TYPE_NONE, /* return type */ - 0); - - klass->layout_changed = gdl_dock_master_layout_changed; -} - -static void -gdl_dock_master_init (GdlDockMaster *master) -{ - master->dock_objects = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, NULL); - master->toplevel_docks = NULL; - master->controller = NULL; - master->dock_number = 1; - - master->_priv = g_new0 (GdlDockMasterPrivate, 1); - master->_priv->number = 1; - master->_priv->switcher_style = GDL_SWITCHER_STYLE_BOTH; - master->_priv->locked_items = g_hash_table_new (g_direct_hash, g_direct_equal); - master->_priv->unlocked_items = g_hash_table_new (g_direct_hash, g_direct_equal); -} - -static void -_gdl_dock_master_remove (GdlDockObject *object, - GdlDockMaster *master) -{ - g_return_if_fail (master != NULL && object != NULL); - - if (GDL_IS_DOCK (object)) { - GList *found_link; - - found_link = g_list_find (master->toplevel_docks, object); - if (found_link) - master->toplevel_docks = g_list_delete_link (master->toplevel_docks, - found_link); - if (object == master->controller) { - GList *last; - GdlDockObject *new_controller = NULL; - - /* now find some other non-automatic toplevel to use as a - new controller. start from the last dock, since it's - probably a non-floating and manual */ - last = g_list_last (master->toplevel_docks); - while (last) { - if (!GDL_DOCK_OBJECT_AUTOMATIC (last->data)) { - new_controller = GDL_DOCK_OBJECT (last->data); - break; - } - last = last->prev; - }; - - if (new_controller) { - /* the new controller gets the ref (implicitly of course) */ - master->controller = new_controller; - } else { - master->controller = NULL; - /* no controller, no master */ - g_object_unref (master); - } - } - } - /* disconnect dock object signals */ - g_signal_handlers_disconnect_matched (object, G_SIGNAL_MATCH_DATA, - 0, 0, NULL, NULL, master); - - /* unref the object from the hash if it's there */ - if (object->name) { - GdlDockObject *found_object; - found_object = g_hash_table_lookup (master->dock_objects, object->name); - if (found_object == object) { - g_hash_table_remove (master->dock_objects, object->name); - g_object_unref (object); - } - } -} - -static void -ht_foreach_build_slist (gpointer key, - gpointer value, - GSList **slist) -{ - *slist = g_slist_prepend (*slist, value); -} - -static void -gdl_dock_master_dispose (GObject *g_object) -{ - GdlDockMaster *master; - - g_return_if_fail (GDL_IS_DOCK_MASTER (g_object)); - - master = GDL_DOCK_MASTER (g_object); - - if (master->toplevel_docks) { - g_list_foreach (master->toplevel_docks, - (GFunc) gdl_dock_object_unbind, NULL); - g_list_free (master->toplevel_docks); - master->toplevel_docks = NULL; - } - - if (master->dock_objects) { - GSList *alive_docks = NULL; - g_hash_table_foreach (master->dock_objects, - (GHFunc) ht_foreach_build_slist, &alive_docks); - while (alive_docks) { - gdl_dock_object_unbind (GDL_DOCK_OBJECT (alive_docks->data)); - alive_docks = g_slist_delete_link (alive_docks, alive_docks); - } - - g_hash_table_destroy (master->dock_objects); - master->dock_objects = NULL; - } - - if (master->_priv) { - if (master->_priv->idle_layout_changed_id) - g_source_remove (master->_priv->idle_layout_changed_id); - - if (master->_priv->root_xor_gc) { - g_object_unref (master->_priv->root_xor_gc); - master->_priv->root_xor_gc = NULL; - } - if (master->_priv->drag_request) { - if (G_IS_VALUE (&master->_priv->drag_request->extra)) - g_value_unset (&master->_priv->drag_request->extra); - g_free (master->_priv->drag_request); - master->_priv->drag_request = NULL; - } - g_free (master->_priv->default_title); - master->_priv->default_title = NULL; - - g_hash_table_destroy (master->_priv->locked_items); - master->_priv->locked_items = NULL; - g_hash_table_destroy (master->_priv->unlocked_items); - master->_priv->unlocked_items = NULL; - - g_free (master->_priv); - master->_priv = NULL; - } - - G_OBJECT_CLASS (gdl_dock_master_parent_class)->dispose (g_object); -} - -static void -foreach_lock_unlock (GdlDockItem *item, - gboolean locked) -{ - if (!GDL_IS_DOCK_ITEM (item)) - return; - - g_object_set (item, "locked", locked, NULL); - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (item))) - gtk_container_foreach (GTK_CONTAINER (item), - (GtkCallback) foreach_lock_unlock, - GINT_TO_POINTER (locked)); -} - -static void -gdl_dock_master_lock_unlock (GdlDockMaster *master, - gboolean locked) -{ - GList *l; - - for (l = master->toplevel_docks; l; l = l->next) { - GdlDock *dock = GDL_DOCK (l->data); - if (dock->root) - foreach_lock_unlock (GDL_DOCK_ITEM (dock->root), locked); - } - - /* just to be sure hidden items are set too */ - gdl_dock_master_foreach (master, - (GFunc) foreach_lock_unlock, - GINT_TO_POINTER (locked)); -} - -static void -gdl_dock_master_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockMaster *master = GDL_DOCK_MASTER (object); - - switch (prop_id) { - case PROP_DEFAULT_TITLE: - g_free (master->_priv->default_title); - master->_priv->default_title = g_value_dup_string (value); - break; - case PROP_LOCKED: - if (g_value_get_int (value) >= 0) - gdl_dock_master_lock_unlock (master, (g_value_get_int (value) > 0)); - break; - case PROP_SWITCHER_STYLE: - gdl_dock_master_set_switcher_style (master, g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_master_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockMaster *master = GDL_DOCK_MASTER (object); - - switch (prop_id) { - case PROP_DEFAULT_TITLE: - g_value_set_string (value, master->_priv->default_title); - break; - case PROP_LOCKED: - g_value_set_int (value, COMPUTE_LOCKED (master)); - break; - case PROP_SWITCHER_STYLE: - g_value_set_enum (value, master->_priv->switcher_style); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_master_drag_begin (GdlDockItem *item, - gpointer data) -{ - GdlDockMaster *master; - GdlDockRequest *request; - - g_return_if_fail (data != NULL); - g_return_if_fail (item != NULL); - - master = GDL_DOCK_MASTER (data); - - if (!master->_priv->drag_request) - master->_priv->drag_request = g_new0 (GdlDockRequest, 1); - - request = master->_priv->drag_request; - - /* Set the target to itself so it won't go floating with just a click. */ - request->applicant = GDL_DOCK_OBJECT (item); - request->target = GDL_DOCK_OBJECT (item); - request->position = GDL_DOCK_FLOATING; - if (G_IS_VALUE (&request->extra)) - g_value_unset (&request->extra); - - master->_priv->rect_drawn = FALSE; - master->_priv->rect_owner = NULL; -} - -static void -gdl_dock_master_drag_end (GdlDockItem *item, - gboolean cancelled, - gpointer data) -{ - GdlDockMaster *master; - GdlDockRequest *request; - - g_return_if_fail (data != NULL); - g_return_if_fail (item != NULL); - - master = GDL_DOCK_MASTER (data); - request = master->_priv->drag_request; - - g_return_if_fail (GDL_DOCK_OBJECT (item) == request->applicant); - - /* Erase previously drawn rectangle */ - if (master->_priv->rect_drawn) - gdl_dock_master_xor_rect (master); - - /* cancel conditions */ - if (cancelled || request->applicant == request->target) - return; - - /* dock object to the requested position */ - gdl_dock_object_dock (request->target, - request->applicant, - request->position, - &request->extra); - - g_signal_emit (master, master_signals [LAYOUT_CHANGED], 0); -} - -static void -gdl_dock_master_drag_motion (GdlDockItem *item, - gint root_x, - gint root_y, - gpointer data) -{ - GdlDockMaster *master; - GdlDockRequest my_request, *request; - GdkWindow *window; - GdkWindow *widget_window; - gint win_x, win_y; - gint x, y; - GdlDock *dock = NULL; - gboolean may_dock = FALSE; - - g_return_if_fail (item != NULL && data != NULL); - - master = GDL_DOCK_MASTER (data); - request = master->_priv->drag_request; - - g_return_if_fail (GDL_DOCK_OBJECT (item) == request->applicant); - - my_request = *request; - - /* first look under the pointer */ - window = gdk_window_at_pointer (&win_x, &win_y); - if (window) { - GtkWidget *widget; - /* ok, now get the widget who owns that window and see if we can - get to a GdlDock by walking up the hierarchy */ - gdk_window_get_user_data (window, (gpointer) &widget); - if (GTK_IS_WIDGET (widget)) { - while (widget && (!GDL_IS_DOCK (widget) || - GDL_DOCK_OBJECT_GET_MASTER (widget) != master)) - widget = gtk_widget_get_parent (widget); - if (widget) { - gint win_w, win_h; - - widget_window = gtk_widget_get_window (widget); - - /* verify that the pointer is still in that dock - (the user could have moved it) */ - gdk_window_get_geometry (widget_window, - NULL, NULL, &win_w, &win_h, NULL); - gdk_window_get_origin (widget_window, &win_x, &win_y); - if (root_x >= win_x && root_x < win_x + win_w && - root_y >= win_y && root_y < win_y + win_h) - dock = GDL_DOCK (widget); - } - } - } - - if (dock) { - GdkWindow *dock_window = gtk_widget_get_window (GTK_WIDGET (dock)); - - /* translate root coordinates into dock object coordinates - (i.e. widget coordinates) */ - gdk_window_get_origin (dock_window, &win_x, &win_y); - x = root_x - win_x; - y = root_y - win_y; - may_dock = gdl_dock_object_dock_request (GDL_DOCK_OBJECT (dock), - x, y, &my_request); - } - else { - GList *l; - - /* try to dock the item in all the docks in the ring in turn */ - for (l = master->toplevel_docks; l; l = l->next) { - GdkWindow *dock_window; - dock = GDL_DOCK (l->data); - dock_window = gtk_widget_get_window (GTK_WIDGET (dock)); - /* translate root coordinates into dock object coordinates - (i.e. widget coordinates) */ - gdk_window_get_origin (dock_window, &win_x, &win_y); - x = root_x - win_x; - y = root_y - win_y; - may_dock = gdl_dock_object_dock_request (GDL_DOCK_OBJECT (dock), - x, y, &my_request); - if (may_dock) - break; - } - } - - - if (!may_dock) { - GtkRequisition req; - /* Special case for GdlDockItems : they must respect the flags */ - if(GDL_IS_DOCK_ITEM(item) - && GDL_DOCK_ITEM(item)->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING) - return; - - dock = NULL; - my_request.target = GDL_DOCK_OBJECT ( - gdl_dock_object_get_toplevel (request->applicant)); - my_request.position = GDL_DOCK_FLOATING; - - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (request->applicant), &req); - my_request.rect.width = req.width; - my_request.rect.height = req.height; - - my_request.rect.x = root_x - GDL_DOCK_ITEM (request->applicant)->dragoff_x; - my_request.rect.y = root_y - GDL_DOCK_ITEM (request->applicant)->dragoff_y; - - /* setup extra docking information */ - if (G_IS_VALUE (&my_request.extra)) - g_value_unset (&my_request.extra); - - g_value_init (&my_request.extra, GDK_TYPE_RECTANGLE); - g_value_set_boxed (&my_request.extra, &my_request.rect); - } - /* if we want to enforce GDL_DOCK_ITEM_BEH_NEVER_FLOATING */ - /* the item must remain attached to the controller, otherwise */ - /* it could be inserted in another floating dock */ - /* so check for the flag at this moment */ - else if(GDL_IS_DOCK_ITEM(item) - && GDL_DOCK_ITEM(item)->behavior & GDL_DOCK_ITEM_BEH_NEVER_FLOATING - && dock != GDL_DOCK(master->controller)) - return; - - if (!(my_request.rect.x == request->rect.x && - my_request.rect.y == request->rect.y && - my_request.rect.width == request->rect.width && - my_request.rect.height == request->rect.height && - dock == master->_priv->rect_owner)) { - - /* erase the previous rectangle */ - if (master->_priv->rect_drawn) - gdl_dock_master_xor_rect (master); - } - - /* set the new values */ - *request = my_request; - master->_priv->rect_owner = dock; - - /* draw the previous rectangle */ - if (~master->_priv->rect_drawn) - gdl_dock_master_xor_rect (master); -} - -static void -_gdl_dock_master_foreach (gpointer key, - gpointer value, - gpointer user_data) -{ - struct { - GFunc function; - gpointer user_data; - } *data = user_data; - - (* data->function) (GTK_WIDGET (value), data->user_data); -} - -static void -gdl_dock_master_xor_rect (GdlDockMaster *master) -{ - gint8 dash_list [2]; - GdkWindow *window; - GdkRectangle *rect; - - if (!master->_priv || !master->_priv->drag_request) - return; - - master->_priv->rect_drawn = ~master->_priv->rect_drawn; - - if (master->_priv->rect_owner) { - gdl_dock_xor_rect (master->_priv->rect_owner, - &master->_priv->drag_request->rect); - return; - } - - rect = &master->_priv->drag_request->rect; - window = gdk_get_default_root_window (); - - if (!master->_priv->root_xor_gc) { - GdkGCValues values; - - values.function = GDK_INVERT; - values.subwindow_mode = GDK_INCLUDE_INFERIORS; - master->_priv->root_xor_gc = gdk_gc_new_with_values ( - window, &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); - }; - -#ifdef WIN32 - GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; - if (is_os_vista()) - { - // On Vista the dash-line is increadibly slow to draw, it takes several minutes to draw the tracking lines - // With GDK_LINE_SOLID it is parts of a second - // No performance issue on WinXP - lineStyle = GDK_LINE_SOLID; - } -#else - GdkLineStyle lineStyle = GDK_LINE_ON_OFF_DASH; -#endif - gdk_gc_set_line_attributes (master->_priv->root_xor_gc, 1, - lineStyle, - GDK_CAP_NOT_LAST, - GDK_JOIN_BEVEL); - - dash_list[0] = 1; - dash_list[1] = 1; - gdk_gc_set_dashes (master->_priv->root_xor_gc, 1, dash_list, 2); - - gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, - rect->x, rect->y, - rect->width, rect->height); - - gdk_gc_set_dashes (master->_priv->root_xor_gc, 0, dash_list, 2); - - gdk_draw_rectangle (window, master->_priv->root_xor_gc, 0, - rect->x + 1, rect->y + 1, - rect->width - 2, rect->height - 2); -} - -static void -gdl_dock_master_layout_changed (GdlDockMaster *master) -{ - g_return_if_fail (GDL_IS_DOCK_MASTER (master)); - - /* emit "layout-changed" on the controller to notify the user who - * normally shouldn't have access to us */ - if (master->controller) - g_signal_emit_by_name (master->controller, "layout-changed"); - - /* remove the idle handler if there is one */ - if (master->_priv->idle_layout_changed_id) { - g_source_remove (master->_priv->idle_layout_changed_id); - master->_priv->idle_layout_changed_id = 0; - } -} - -static gboolean -idle_emit_layout_changed (gpointer user_data) -{ - GdlDockMaster *master = user_data; - - g_return_val_if_fail (master && GDL_IS_DOCK_MASTER (master), FALSE); - - master->_priv->idle_layout_changed_id = 0; - g_signal_emit (master, master_signals [LAYOUT_CHANGED], 0); - - return FALSE; -} - -static void -item_dock_cb (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data, - gpointer user_data) -{ - GdlDockMaster *master = user_data; - - g_return_if_fail (requestor && GDL_IS_DOCK_OBJECT (requestor)); - g_return_if_fail (master && GDL_IS_DOCK_MASTER (master)); - - /* here we are in fact interested in the requestor, since it's - * assumed that object will not change its visibility... for the - * requestor, however, could mean that it's being shown */ - if (!GDL_DOCK_OBJECT_IN_REFLOW (requestor) && - !GDL_DOCK_OBJECT_AUTOMATIC (requestor)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } -} - -static void -item_detach_cb (GdlDockObject *object, - gboolean recursive, - gpointer user_data) -{ - GdlDockMaster *master = user_data; - - g_return_if_fail (object && GDL_IS_DOCK_OBJECT (object)); - g_return_if_fail (master && GDL_IS_DOCK_MASTER (master)); - - if (!GDL_DOCK_OBJECT_IN_REFLOW (object) && - !GDL_DOCK_OBJECT_AUTOMATIC (object)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } -} - -static void -item_notify_cb (GdlDockObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - GdlDockMaster *master = user_data; - gint locked = COMPUTE_LOCKED (master); - gboolean item_locked; - - g_object_get (object, "locked", &item_locked, NULL); - - if (item_locked) { - g_hash_table_remove (master->_priv->unlocked_items, object); - g_hash_table_insert (master->_priv->locked_items, object, NULL); - } else { - g_hash_table_remove (master->_priv->locked_items, object); - g_hash_table_insert (master->_priv->unlocked_items, object, NULL); - } - - if (COMPUTE_LOCKED (master) != locked) - g_object_notify (G_OBJECT (master), "locked"); -} - -/* ----- Public interface ----- */ - -void -gdl_dock_master_add (GdlDockMaster *master, - GdlDockObject *object) -{ - g_return_if_fail (master != NULL && object != NULL); - - if (!GDL_DOCK_OBJECT_AUTOMATIC (object)) { - GdlDockObject *found_object; - - /* create a name for the object if it doesn't have one */ - if (!object->name) - /* directly set the name, since it's a construction only - property */ - object->name = g_strdup_printf ("__dock_%u", master->_priv->number++); - - /* add the object to our hash list */ - if ((found_object = g_hash_table_lookup (master->dock_objects, object->name))) { - g_warning (_("master %p: unable to add object %p[%s] to the hash. " - "There already is an item with that name (%p)."), - master, object, object->name, found_object); - } - else { - g_object_ref_sink (object); - g_hash_table_insert (master->dock_objects, g_strdup (object->name), object); - } - } - - if (GDL_IS_DOCK (object)) { - gboolean floating; - - /* if this is the first toplevel we are adding, name it controller */ - if (!master->toplevel_docks) - /* the dock should already have the ref */ - master->controller = object; - - /* add dock to the toplevel list */ - g_object_get (object, "floating", &floating, NULL); - if (floating) - master->toplevel_docks = g_list_prepend (master->toplevel_docks, object); - else - master->toplevel_docks = g_list_append (master->toplevel_docks, object); - - /* we are interested in the dock request this toplevel - * receives to update the layout */ - g_signal_connect (object, "dock", - G_CALLBACK (item_dock_cb), master); - - } - else if (GDL_IS_DOCK_ITEM (object)) { - /* we need to connect the item's signals */ - g_signal_connect (object, "dock_drag_begin", - G_CALLBACK (gdl_dock_master_drag_begin), master); - g_signal_connect (object, "dock_drag_motion", - G_CALLBACK (gdl_dock_master_drag_motion), master); - g_signal_connect (object, "dock_drag_end", - G_CALLBACK (gdl_dock_master_drag_end), master); - g_signal_connect (object, "dock", - G_CALLBACK (item_dock_cb), master); - g_signal_connect (object, "detach", - G_CALLBACK (item_detach_cb), master); - - /* register to "locked" notification if the item has a grip, - * and add the item to the corresponding hash */ - if (GDL_DOCK_ITEM_HAS_GRIP (GDL_DOCK_ITEM (object))) { - g_signal_connect (object, "notify::locked", - G_CALLBACK (item_notify_cb), master); - item_notify_cb (object, NULL, master); - } - - /* If the item is notebook, set the switcher style */ - if (GDL_IS_DOCK_NOTEBOOK (object) && - GDL_IS_SWITCHER (GDL_DOCK_ITEM (object)->child)) - { - g_object_set (GDL_DOCK_ITEM (object)->child, "switcher-style", - master->_priv->switcher_style, NULL); - } - - /* post a layout_changed emission if the item is not automatic - * (since it should be added to the items model) */ - if (!GDL_DOCK_OBJECT_AUTOMATIC (object)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } - } -} - -void -gdl_dock_master_remove (GdlDockMaster *master, - GdlDockObject *object) -{ - g_return_if_fail (master != NULL && object != NULL); - - /* remove from locked/unlocked hashes and property change if - * that's the case */ - if (GDL_IS_DOCK_ITEM (object) && GDL_DOCK_ITEM_HAS_GRIP (GDL_DOCK_ITEM (object))) { - gint locked = COMPUTE_LOCKED (master); - if (g_hash_table_remove (master->_priv->locked_items, object) || - g_hash_table_remove (master->_priv->unlocked_items, object)) { - if (COMPUTE_LOCKED (master) != locked) - g_object_notify (G_OBJECT (master), "locked"); - } - } - - /* ref the master, since removing the controller could cause master disposal */ - g_object_ref (master); - - /* all the interesting stuff happens in _gdl_dock_master_remove */ - _gdl_dock_master_remove (object, master); - - /* post a layout_changed emission if the item is not automatic - * (since it should be removed from the items model) */ - if (!GDL_DOCK_OBJECT_AUTOMATIC (object)) { - if (!master->_priv->idle_layout_changed_id) - master->_priv->idle_layout_changed_id = - g_idle_add (idle_emit_layout_changed, master); - } - - /* balance ref count */ - g_object_unref (master); -} - -void -gdl_dock_master_foreach (GdlDockMaster *master, - GFunc function, - gpointer user_data) -{ - struct { - GFunc function; - gpointer user_data; - } data; - - g_return_if_fail (master != NULL && function != NULL); - - data.function = function; - data.user_data = user_data; - g_hash_table_foreach (master->dock_objects, _gdl_dock_master_foreach, &data); -} - -void -gdl_dock_master_foreach_toplevel (GdlDockMaster *master, - gboolean include_controller, - GFunc function, - gpointer user_data) -{ - GList *l; - - g_return_if_fail (master != NULL && function != NULL); - - for (l = master->toplevel_docks; l; ) { - GdlDockObject *object = GDL_DOCK_OBJECT (l->data); - l = l->next; - if (object != master->controller || include_controller) - (* function) (GTK_WIDGET (object), user_data); - } -} - -GdlDockObject * -gdl_dock_master_get_object (GdlDockMaster *master, - const gchar *nick_name) -{ - gpointer *found; - - g_return_val_if_fail (master != NULL, NULL); - - if (!nick_name) - return NULL; - - found = g_hash_table_lookup (master->dock_objects, nick_name); - - return found ? GDL_DOCK_OBJECT (found) : NULL; -} - -GdlDockObject * -gdl_dock_master_get_controller (GdlDockMaster *master) -{ - g_return_val_if_fail (master != NULL, NULL); - - return master->controller; -} - -void -gdl_dock_master_set_controller (GdlDockMaster *master, - GdlDockObject *new_controller) -{ - g_return_if_fail (master != NULL); - - if (new_controller) { - if (GDL_DOCK_OBJECT_AUTOMATIC (new_controller)) - g_warning (_("The new dock controller %p is automatic. Only manual " - "dock objects should be named controller."), new_controller); - - /* check that the controller is in the toplevel list */ - if (!g_list_find (master->toplevel_docks, new_controller)) - gdl_dock_master_add (master, new_controller); - master->controller = new_controller; - - } else { - master->controller = NULL; - /* no controller, no master */ - g_object_unref (master); - } -} - -static void -set_switcher_style_foreach (GtkWidget *obj, gpointer user_data) -{ - GdlSwitcherStyle style = GPOINTER_TO_INT (user_data); - - if (!GDL_IS_DOCK_ITEM (obj)) - return; - - if (GDL_IS_DOCK_NOTEBOOK (obj)) { - - GtkWidget *child = GDL_DOCK_ITEM (obj)->child; - if (GDL_IS_SWITCHER (child)) { - - g_object_set (child, "switcher-style", style, NULL); - } - } else if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (obj))) { - - gtk_container_foreach (GTK_CONTAINER (obj), - set_switcher_style_foreach, - user_data); - } -} - -static void -gdl_dock_master_set_switcher_style (GdlDockMaster *master, - GdlSwitcherStyle switcher_style) -{ - GList *l; - g_return_if_fail (GDL_IS_DOCK_MASTER (master)); - - master->_priv->switcher_style = switcher_style; - for (l = master->toplevel_docks; l; l = l->next) { - GdlDock *dock = GDL_DOCK (l->data); - if (dock->root) - set_switcher_style_foreach (GTK_WIDGET (dock->root), - GINT_TO_POINTER (switcher_style)); - } - - /* just to be sure hidden items are set too */ - gdl_dock_master_foreach (master, (GFunc) set_switcher_style_foreach, - GINT_TO_POINTER (switcher_style)); -} diff --git a/src/libgdl/gdl-dock-master.h b/src/libgdl/gdl-dock-master.h deleted file mode 100644 index 266ca7ee4..000000000 --- a/src/libgdl/gdl-dock-master.h +++ /dev/null @@ -1,106 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-master.h - Object which manages a dock ring - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_MASTER_H__ -#define __GDL_DOCK_MASTER_H__ - -#include -#include -#include "libgdl/gdl-dock-object.h" - - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_MASTER (gdl_dock_master_get_type ()) -#define GDL_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_MASTER, GdlDockMaster)) -#define GDL_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_MASTER, GdlDockMasterClass)) -#define GDL_IS_DOCK_MASTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_MASTER)) -#define GDL_IS_DOCK_MASTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_MASTER)) -#define GDL_DOCK_MASTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_MASTER, GdlDockMasterClass)) - -/* data types & structures */ -typedef struct _GdlDockMaster GdlDockMaster; -typedef struct _GdlDockMasterClass GdlDockMasterClass; -typedef struct _GdlDockMasterPrivate GdlDockMasterPrivate; - -typedef enum { - GDL_SWITCHER_STYLE_TEXT, - GDL_SWITCHER_STYLE_ICON, - GDL_SWITCHER_STYLE_BOTH, - GDL_SWITCHER_STYLE_TOOLBAR, - GDL_SWITCHER_STYLE_TABS, - GDL_SWITCHER_STYLE_NONE -} GdlSwitcherStyle; - -struct _GdlDockMaster { - GObject object; - - GHashTable *dock_objects; - GList *toplevel_docks; - GdlDockObject *controller; /* GUI root object */ - - gint dock_number; /* for toplevel dock numbering */ - - GdlDockMasterPrivate *_priv; -}; - -struct _GdlDockMasterClass { - GObjectClass parent_class; - - void (* layout_changed) (GdlDockMaster *master); -}; - -/* additional macros */ - -#define GDL_DOCK_OBJECT_GET_MASTER(object) \ - (GDL_DOCK_OBJECT (object)->master ? \ - GDL_DOCK_MASTER (GDL_DOCK_OBJECT (object)->master) : NULL) - -/* public interface */ - -GType gdl_dock_master_get_type (void); - -void gdl_dock_master_add (GdlDockMaster *master, - GdlDockObject *object); -void gdl_dock_master_remove (GdlDockMaster *master, - GdlDockObject *object); -void gdl_dock_master_foreach (GdlDockMaster *master, - GFunc function, - gpointer user_data); - -void gdl_dock_master_foreach_toplevel (GdlDockMaster *master, - gboolean include_controller, - GFunc function, - gpointer user_data); - -GdlDockObject *gdl_dock_master_get_object (GdlDockMaster *master, - const gchar *nick_name); - -GdlDockObject *gdl_dock_master_get_controller (GdlDockMaster *master); -void gdl_dock_master_set_controller (GdlDockMaster *master, - GdlDockObject *new_controller); - -G_END_DECLS - -#endif /* __GDL_DOCK_MASTER_H__ */ diff --git a/src/libgdl/gdl-dock-notebook.c b/src/libgdl/gdl-dock-notebook.c deleted file mode 100644 index 0ffaac902..000000000 --- a/src/libgdl/gdl-dock-notebook.c +++ /dev/null @@ -1,530 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include "gdl-switcher.h" - -#include "gdl-dock-notebook.h" -#include "gdl-dock-tablabel.h" - - -/* Private prototypes */ - -static void gdl_dock_notebook_class_init (GdlDockNotebookClass *klass); -static void gdl_dock_notebook_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_notebook_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_notebook_destroy (GtkObject *object); - -static void gdl_dock_notebook_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_notebook_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_notebook_child_type (GtkContainer *container); - -static void gdl_dock_notebook_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkWidget *page, - gint page_num, - gpointer data); - -static void gdl_dock_notebook_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -static gboolean gdl_dock_notebook_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - -static void gdl_dock_notebook_present (GdlDockObject *object, - GdlDockObject *child); - -static gboolean gdl_dock_notebook_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data); - - -/* Class variables and definitions */ - -enum { - PROP_0, - PROP_PAGE -}; - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockNotebook, gdl_dock_notebook, GDL_TYPE_DOCK_ITEM); - -static void -gdl_dock_notebook_class_init (GdlDockNotebookClass *klass) -{ - static gboolean style_initialized = FALSE; - - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - GdlDockItemClass *item_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - item_class = GDL_DOCK_ITEM_CLASS (klass); - - g_object_class->set_property = gdl_dock_notebook_set_property; - g_object_class->get_property = gdl_dock_notebook_get_property; - - gtk_object_class->destroy = gdl_dock_notebook_destroy; - - container_class->add = gdl_dock_notebook_add; - container_class->forall = gdl_dock_notebook_forall; - container_class->child_type = gdl_dock_notebook_child_type; - - object_class->is_compound = TRUE; - object_class->dock = gdl_dock_notebook_dock; - object_class->child_placement = gdl_dock_notebook_child_placement; - object_class->present = gdl_dock_notebook_present; - object_class->reorder = gdl_dock_notebook_reorder; - - item_class->has_grip = FALSE; - item_class->set_orientation = gdl_dock_notebook_set_orientation; - - g_object_class_install_property ( - g_object_class, PROP_PAGE, - g_param_spec_int ("page", _("Page"), - _("The index of the current page"), - 0, G_MAXINT, - 0, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER)); - - if (!style_initialized) { - style_initialized = TRUE; - - gtk_rc_parse_string ( - "style \"gdl-dock-notebook-default\" {\n" - "xthickness = 2\n" - "ythickness = 2\n" - "}\n" - "widget_class \"*.GtkNotebook.GdlDockItem\" " - "style : gtk \"gdl-dock-notebook-default\"\n"); - } -} - -static void -gdl_dock_notebook_notify_cb (GObject *g_object, - GParamSpec *pspec, - gpointer user_data) -{ - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_NOTEBOOK (user_data)); - - /* chain the notify signal */ - g_object_notify (G_OBJECT (user_data), pspec->name); -} - -static gboolean -gdl_dock_notebook_button_cb (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - if (event->type == GDK_BUTTON_PRESS) - GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - else - GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - - return FALSE; -} - -static void -gdl_dock_notebook_init (GdlDockNotebook *notebook) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (notebook); - - /* create the container notebook */ - item->child = gdl_switcher_new (); - gtk_widget_set_parent (item->child, GTK_WIDGET (notebook)); - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (item->child), GTK_POS_BOTTOM); - g_signal_connect (item->child, "switch-page", - (GCallback) gdl_dock_notebook_switch_page_cb, (gpointer) item); - g_signal_connect (item->child, "notify::page", - (GCallback) gdl_dock_notebook_notify_cb, (gpointer) item); - g_signal_connect (item->child, "button-press-event", - (GCallback) gdl_dock_notebook_button_cb, (gpointer) item); - g_signal_connect (item->child, "button-release-event", - (GCallback) gdl_dock_notebook_button_cb, (gpointer) item); - gtk_notebook_set_scrollable (GTK_NOTEBOOK (item->child), TRUE); - gtk_widget_show (item->child); -} - -static void -gdl_dock_notebook_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_PAGE: - if (item->child && GTK_IS_NOTEBOOK (item->child)) { - gtk_notebook_set_current_page (GTK_NOTEBOOK (item->child), - g_value_get_int (value)); - } - - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_notebook_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_PAGE: - if (item->child && GTK_IS_NOTEBOOK (item->child)) { - g_value_set_int (value, gtk_notebook_get_current_page - (GTK_NOTEBOOK (item->child))); - } - - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - - -static void -gdl_dock_notebook_destroy (GtkObject *object) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - /* we need to call the virtual first, since in GdlDockDestroy our - children dock objects are detached */ - GTK_OBJECT_CLASS (gdl_dock_notebook_parent_class)->destroy (object); - - /* after that we can remove the GtkNotebook */ - if (item->child) { - gtk_widget_unparent (item->child); - item->child = NULL; - }; -} - -static void -gdl_dock_notebook_switch_page_cb (GtkNotebook *nb, - GtkWidget *page, - gint page_num, - gpointer data) -{ - GdlDockNotebook *notebook; - GtkWidget *tablabel; - GdlDockItem *item; - - notebook = GDL_DOCK_NOTEBOOK (data); - - /* deactivate old tablabel */ - if (gtk_notebook_get_current_page (nb)) { - tablabel = gtk_notebook_get_tab_label ( - nb, gtk_notebook_get_nth_page ( - nb, gtk_notebook_get_current_page (nb))); - if (tablabel && GDL_IS_DOCK_TABLABEL (tablabel)) - gdl_dock_tablabel_deactivate (GDL_DOCK_TABLABEL (tablabel)); - }; - - /* activate new label */ - tablabel = gtk_notebook_get_tab_label ( - nb, page); - if (tablabel && GDL_IS_DOCK_TABLABEL (tablabel)) - gdl_dock_tablabel_activate (GDL_DOCK_TABLABEL (tablabel)); - - if (GDL_DOCK_ITEM_USER_ACTION (notebook) && - GDL_DOCK_OBJECT (notebook)->master) - g_signal_emit_by_name (GDL_DOCK_OBJECT (notebook)->master, - "layout-changed"); - - /* Signal that a new dock item has been selected */ - item = GDL_DOCK_ITEM (page); - gdl_dock_item_notify_selected (item); -} - -static void -gdl_dock_notebook_add (GtkContainer *container, - GtkWidget *widget) -{ - g_return_if_fail (container != NULL && widget != NULL); - g_return_if_fail (GDL_IS_DOCK_NOTEBOOK (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gdl_dock_object_dock (GDL_DOCK_OBJECT (container), - GDL_DOCK_OBJECT (widget), - GDL_DOCK_CENTER, - NULL); -} - -static void -gdl_dock_notebook_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItem *item; - - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK_NOTEBOOK (container)); - g_return_if_fail (callback != NULL); - - if (include_internals) { - /* use GdlDockItem's forall */ - GTK_CONTAINER_CLASS (gdl_dock_notebook_parent_class)->forall - (container, include_internals, callback, callback_data); - } - else { - item = GDL_DOCK_ITEM (container); - if (item->child) - gtk_container_foreach (GTK_CONTAINER (item->child), callback, callback_data); - } -} - -static GType -gdl_dock_notebook_child_type (GtkContainer *container) -{ - return GDL_TYPE_DOCK_ITEM; -} - -static void -gdl_dock_notebook_dock_child (GdlDockObject *requestor, - gpointer user_data) -{ - struct { - GdlDockObject *object; - GdlDockPlacement position; - GValue *other_data; - } *data = user_data; - - gdl_dock_object_dock (data->object, requestor, data->position, data->other_data); -} - -static void -gdl_dock_notebook_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - g_return_if_fail (GDL_IS_DOCK_NOTEBOOK (object)); - g_return_if_fail (GDL_IS_DOCK_ITEM (requestor)); - - /* we only add support for GDL_DOCK_CENTER docking strategy here... for the rest - use our parent class' method */ - if (position == GDL_DOCK_CENTER) { - /* we can only dock simple (not compound) items */ - if (gdl_dock_object_is_compound (requestor)) { - struct { - GdlDockObject *object; - GdlDockPlacement position; - GValue *other_data; - } data; - - gdl_dock_object_freeze (requestor); - - data.object = object; - data.position = position; - data.other_data = other_data; - - gtk_container_foreach (GTK_CONTAINER (requestor), - (GtkCallback) gdl_dock_notebook_dock_child, &data); - - gdl_dock_object_thaw (requestor); - } - else { - GdlDockItem *item = GDL_DOCK_ITEM (object); - GdlDockItem *requestor_item = GDL_DOCK_ITEM (requestor); - gchar *long_name, *stock_id; - GdkPixbuf *pixbuf_icon; - GtkWidget *label; - gint position = -1; - - g_object_get (requestor_item, "long-name", &long_name, - "stock-id", &stock_id, "pixbuf-icon", &pixbuf_icon, NULL); - label = gdl_dock_item_get_tablabel (requestor_item); - if (!label) { - label = gtk_label_new (long_name); - gdl_dock_item_set_tablabel (requestor_item, label); - } -#if 0 - if (GDL_IS_DOCK_TABLABEL (label)) { - gdl_dock_tablabel_deactivate (GDL_DOCK_TABLABEL (label)); - /* hide the item grip, as we will use the tablabel's */ - gdl_dock_item_hide_grip (requestor_item); - } -#endif - - if (other_data && G_VALUE_HOLDS (other_data, G_TYPE_INT)) - position = g_value_get_int (other_data); - - position = gdl_switcher_insert_page (GDL_SWITCHER (item->child), - GTK_WIDGET (requestor), label, - long_name, long_name, - stock_id, pixbuf_icon, position); - - GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); - - /* Set current page to the newly docked widget. set current page - * really doesn't work if the page widget is not shown - */ - gtk_widget_show (GTK_WIDGET (requestor)); - gtk_notebook_set_current_page (GTK_NOTEBOOK (item->child), - position); - g_free (long_name); - g_free (stock_id); - } - } - else - GDL_DOCK_OBJECT_CLASS (gdl_dock_notebook_parent_class)->dock (object, requestor, position, other_data); -} - -static void -gdl_dock_notebook_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - if (item->child && GTK_IS_NOTEBOOK (item->child)) { - if (orientation == GTK_ORIENTATION_HORIZONTAL) - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (item->child), GTK_POS_TOP); - else - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (item->child), GTK_POS_LEFT); - } - - GDL_DOCK_ITEM_CLASS (gdl_dock_notebook_parent_class)->set_orientation (item, orientation); -} - -static gboolean -gdl_dock_notebook_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - GdlDockPlacement pos = GDL_DOCK_NONE; - - if (item->child) { - GList *children, *l; - - children = gtk_container_get_children (GTK_CONTAINER (item->child)); - for (l = children; l; l = l->next) { - if (l->data == (gpointer) child) { - pos = GDL_DOCK_CENTER; - break; - } - } - g_list_free (children); - } - - if (pos != GDL_DOCK_NONE) { - if (placement) - *placement = pos; - return TRUE; - } - else - return FALSE; -} - -static void -gdl_dock_notebook_present (GdlDockObject *object, - GdlDockObject *child) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - int i; - - i = gtk_notebook_page_num (GTK_NOTEBOOK (item->child), - GTK_WIDGET (child)); - if (i >= 0) - gtk_notebook_set_current_page (GTK_NOTEBOOK (item->child), i); - - GDL_DOCK_OBJECT_CLASS (gdl_dock_notebook_parent_class)->present (object, child); -} - -static gboolean -gdl_dock_notebook_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - gint current_position, new_pos = -1; - gboolean handled = FALSE; - - if (item->child && new_position == GDL_DOCK_CENTER) { - current_position = gtk_notebook_page_num (GTK_NOTEBOOK (item->child), - GTK_WIDGET (requestor)); - if (current_position >= 0) { - handled = TRUE; - - if (other_data && G_VALUE_HOLDS (other_data, G_TYPE_INT)) - new_pos = g_value_get_int (other_data); - - gtk_notebook_reorder_child (GTK_NOTEBOOK (item->child), - GTK_WIDGET (requestor), - new_pos); - } - } - return handled; -} - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_notebook_new (void) -{ - GdlDockNotebook *notebook; - - notebook = GDL_DOCK_NOTEBOOK (g_object_new (GDL_TYPE_DOCK_NOTEBOOK, NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (notebook, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (notebook); -} - diff --git a/src/libgdl/gdl-dock-notebook.h b/src/libgdl/gdl-dock-notebook.h deleted file mode 100644 index 063f53642..000000000 --- a/src/libgdl/gdl-dock-notebook.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_NOTEBOOK_H__ -#define __GDL_DOCK_NOTEBOOK_H__ - -#include "libgdl/gdl-dock-item.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_NOTEBOOK (gdl_dock_notebook_get_type ()) -#define GDL_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebook)) -#define GDL_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) -#define GDL_IS_DOCK_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_NOTEBOOK)) -#define GDL_IS_DOCK_NOTEBOOK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_NOTEBOOK)) -#define GDL_DOCK_NOTEBOOK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_NOTEBOOK, GdlDockNotebookClass)) - -/* data types & structures */ -typedef struct _GdlDockNotebook GdlDockNotebook; -typedef struct _GdlDockNotebookClass GdlDockNotebookClass; - -struct _GdlDockNotebook { - GdlDockItem item; -}; - -struct _GdlDockNotebookClass { - GdlDockItemClass parent_class; -}; - - -/* public interface */ - -GtkWidget *gdl_dock_notebook_new (void); - -GType gdl_dock_notebook_get_type (void); - -G_END_DECLS - -#endif - diff --git a/src/libgdl/gdl-dock-object.c b/src/libgdl/gdl-dock-object.c deleted file mode 100644 index 4092ecc9f..000000000 --- a/src/libgdl/gdl-dock-object.c +++ /dev/null @@ -1,1027 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-object.c - Abstract base class for all dock related objects - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock-object.h" -#include "gdl-dock-master.h" -#include "libgdltypebuiltins.h" -#include "libgdlmarshal.h" - -/* for later use by the registry */ -#include "gdl-dock.h" -#include "gdl-dock-item.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-notebook.h" -#include "gdl-dock-placeholder.h" - - -/* ----- Private prototypes ----- */ - -static void gdl_dock_object_class_init (GdlDockObjectClass *klass); - -static void gdl_dock_object_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_object_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gdl_dock_object_finalize (GObject *g_object); - -static void gdl_dock_object_destroy (GtkObject *gtk_object); - -static void gdl_dock_object_show (GtkWidget *widget); -static void gdl_dock_object_hide (GtkWidget *widget); - -static void gdl_dock_object_real_detach (GdlDockObject *object, - gboolean recursive); -static void gdl_dock_object_real_reduce (GdlDockObject *object); -static void gdl_dock_object_dock_unimplemented (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); -static void gdl_dock_object_real_present (GdlDockObject *object, - GdlDockObject *child); - - -/* ----- Private data types and variables ----- */ - -enum { - PROP_0, - PROP_NAME, - PROP_LONG_NAME, - PROP_STOCK_ID, - PROP_PIXBUF_ICON, - PROP_MASTER, - PROP_EXPORT_PROPERTIES -}; - -enum { - DETACH, - DOCK, - LAST_SIGNAL -}; - -static guint gdl_dock_object_signals [LAST_SIGNAL] = { 0 }; - -struct DockRegisterItem { - gchar* nick; - gpointer type; -}; - -static GArray *dock_register = NULL; - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockObject, gdl_dock_object, GTK_TYPE_CONTAINER); - -static void -gdl_dock_object_class_init (GdlDockObjectClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - g_object_class = G_OBJECT_CLASS (klass); - object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - - g_object_class->set_property = gdl_dock_object_set_property; - g_object_class->get_property = gdl_dock_object_get_property; - g_object_class->finalize = gdl_dock_object_finalize; - - g_object_class_install_property ( - g_object_class, PROP_NAME, - g_param_spec_string (GDL_DOCK_NAME_PROPERTY, _("Name"), - _("Unique name for identifying the dock object"), - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_LONG_NAME, - g_param_spec_string ("long-name", _("Long name"), - _("Human readable name for the dock object"), - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - g_object_class_install_property ( - g_object_class, PROP_STOCK_ID, - g_param_spec_string ("stock-id", _("Stock Icon"), - _("Stock icon for the dock object"), - NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - g_object_class_install_property ( - g_object_class, PROP_PIXBUF_ICON, - g_param_spec_pointer ("pixbuf-icon", _("Pixbuf Icon"), - _("Pixbuf icon for the dock object"), - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_MASTER, - g_param_spec_object ("master", _("Dock master"), - _("Dock master this dock object is bound to"), - GDL_TYPE_DOCK_MASTER, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); - - object_class->destroy = gdl_dock_object_destroy; - - widget_class->show = gdl_dock_object_show; - widget_class->hide = gdl_dock_object_hide; - - klass->is_compound = TRUE; - - klass->detach = gdl_dock_object_real_detach; - klass->reduce = gdl_dock_object_real_reduce; - klass->dock_request = NULL; - klass->dock = gdl_dock_object_dock_unimplemented; - klass->reorder = NULL; - klass->present = gdl_dock_object_real_present; - klass->child_placement = NULL; - - gdl_dock_object_signals [DETACH] = - g_signal_new ("detach", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockObjectClass, detach), - NULL, - NULL, - gdl_marshal_VOID__BOOLEAN, - G_TYPE_NONE, - 1, - G_TYPE_BOOLEAN); - - gdl_dock_object_signals [DOCK] = - g_signal_new ("dock", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdlDockObjectClass, dock), - NULL, - NULL, - gdl_marshal_VOID__OBJECT_ENUM_BOXED, - G_TYPE_NONE, - 3, - GDL_TYPE_DOCK_OBJECT, - GDL_TYPE_DOCK_PLACEMENT, - G_TYPE_VALUE); -} - -static void -gdl_dock_object_init (GdlDockObject *object) -{ - object->flags = GDL_DOCK_AUTOMATIC; - object->freeze_count = 0; -} - -static void -gdl_dock_object_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockObject *object = GDL_DOCK_OBJECT (g_object); - - switch (prop_id) { - case PROP_NAME: - g_free (object->name); - object->name = g_value_dup_string (value); - break; - case PROP_LONG_NAME: - g_free (object->long_name); - object->long_name = g_value_dup_string (value); - break; - case PROP_STOCK_ID: - g_free (object->stock_id); - object->stock_id = g_value_dup_string (value); - break; - case PROP_PIXBUF_ICON: - object->pixbuf_icon = g_value_get_pointer (value); - break; - case PROP_MASTER: - if (g_value_get_object (value)) - gdl_dock_object_bind (object, g_value_get_object (value)); - else - gdl_dock_object_unbind (object); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_object_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockObject *object = GDL_DOCK_OBJECT (g_object); - - switch (prop_id) { - case PROP_NAME: - g_value_set_string (value, object->name); - break; - case PROP_LONG_NAME: - g_value_set_string (value, object->long_name); - break; - case PROP_STOCK_ID: - g_value_set_string (value, object->stock_id); - break; - case PROP_PIXBUF_ICON: - g_value_set_pointer (value, object->pixbuf_icon); - break; - case PROP_MASTER: - g_value_set_object (value, object->master); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_object_finalize (GObject *g_object) -{ - GdlDockObject *object; - - g_return_if_fail (g_object != NULL && GDL_IS_DOCK_OBJECT (g_object)); - - object = GDL_DOCK_OBJECT (g_object); - - g_free (object->name); - object->name = NULL; - g_free (object->long_name); - object->long_name = NULL; - g_free (object->stock_id); - object->stock_id = NULL; - object->pixbuf_icon = NULL; - - G_OBJECT_CLASS (gdl_dock_object_parent_class)->finalize (g_object); -} - -static void -gdl_dock_object_foreach_detach (GdlDockObject *object, - gpointer user_data) -{ - gdl_dock_object_detach (object, TRUE); -} - -static void -gdl_dock_object_destroy (GtkObject *gtk_object) -{ - GdlDockObject *object; - - g_return_if_fail (GDL_IS_DOCK_OBJECT (gtk_object)); - - object = GDL_DOCK_OBJECT (gtk_object); - if (gdl_dock_object_is_compound (object)) { - /* detach our dock object children if we have some, and even - if we are not attached, so they can get notification */ - gdl_dock_object_freeze (object); - gtk_container_foreach (GTK_CONTAINER (object), - (GtkCallback) gdl_dock_object_foreach_detach, - NULL); - object->reduce_pending = FALSE; - gdl_dock_object_thaw (object); - } - if (GDL_DOCK_OBJECT_ATTACHED (object)) { - /* detach ourselves */ - gdl_dock_object_detach (object, FALSE); - } - - /* finally unbind us */ - if (object->master) - gdl_dock_object_unbind (object); - - GTK_OBJECT_CLASS(gdl_dock_object_parent_class)->destroy (gtk_object); -} - -static void -gdl_dock_object_foreach_automatic (GdlDockObject *object, - gpointer user_data) -{ - void (* function) (GtkWidget *) = user_data; - - if (GDL_DOCK_OBJECT_AUTOMATIC (object)) - (* function) (GTK_WIDGET (object)); -} - -static void -gdl_dock_object_show (GtkWidget *widget) -{ - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (widget))) { - gtk_container_foreach (GTK_CONTAINER (widget), - (GtkCallback) gdl_dock_object_foreach_automatic, - gtk_widget_show); - } - GTK_WIDGET_CLASS (gdl_dock_object_parent_class)->show (widget); -} - -static void -gdl_dock_object_hide (GtkWidget *widget) -{ - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT (widget))) { - gtk_container_foreach (GTK_CONTAINER (widget), - (GtkCallback) gdl_dock_object_foreach_automatic, - gtk_widget_hide); - } - GTK_WIDGET_CLASS (gdl_dock_object_parent_class)->hide (widget); -} - -static void -gdl_dock_object_real_detach (GdlDockObject *object, - gboolean recursive) -{ - GdlDockObject *parent; - GtkWidget *widget; - - g_return_if_fail (object != NULL); - - /* detach children */ - if (recursive && gdl_dock_object_is_compound (object)) { - gtk_container_foreach (GTK_CONTAINER (object), - (GtkCallback) gdl_dock_object_detach, - GINT_TO_POINTER (recursive)); - } - - /* detach the object itself */ - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED); - parent = gdl_dock_object_get_parent_object (object); - widget = GTK_WIDGET (object); - if (gtk_widget_get_parent (widget)) - gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (GTK_WIDGET (widget))), widget); - if (parent) - gdl_dock_object_reduce (parent); -} - -static void -gdl_dock_object_real_reduce (GdlDockObject *object) -{ - GdlDockObject *parent; - GList *children; - - g_return_if_fail (object != NULL); - - if (!gdl_dock_object_is_compound (object)) - return; - - parent = gdl_dock_object_get_parent_object (object); - children = gtk_container_get_children (GTK_CONTAINER (object)); - if (g_list_length (children) <= 1) { - GList *l; - GList *dchildren = NULL; - - /* detach ourselves and then re-attach our children to our - current parent. if we are not currently attached, the - children are detached */ - if (parent) - gdl_dock_object_freeze (parent); - gdl_dock_object_freeze (object); - /* Detach the children before detaching this object, since in this - * way the children can have access to the whole object hierarchy. - * Set the InDetach flag now, so the children know that this object - * is going to be detached. */ - - - GDL_DOCK_OBJECT_SET_FLAGS (object, GDL_DOCK_IN_DETACH); - - for (l = children; l; l = l->next) { - GdlDockObject *child; - - if (!GDL_IS_DOCK_OBJECT (l->data)) - continue; - - child = GDL_DOCK_OBJECT (l->data); - - g_object_ref (child); - gdl_dock_object_detach (child, FALSE); - GDL_DOCK_OBJECT_SET_FLAGS (child, GDL_DOCK_IN_REFLOW); - if (parent) - dchildren = g_list_append (dchildren, child); - GDL_DOCK_OBJECT_UNSET_FLAGS (child, GDL_DOCK_IN_REFLOW); - } - /* Now it can be detached */ - gdl_dock_object_detach (object, FALSE); - - /* After detaching the reduced object, we can add the - children (the only child in fact) to the new parent */ - for (l = dchildren; l; l = l->next) { - gtk_container_add (GTK_CONTAINER (parent), l->data); - g_object_unref (l->data); - } - g_list_free (dchildren); - - - /* sink the widget, so any automatic floating widget is destroyed */ - g_object_ref_sink (object); - /* don't reenter */ - object->reduce_pending = FALSE; - gdl_dock_object_thaw (object); - if (parent) - gdl_dock_object_thaw (parent); - } - g_list_free (children); -} - -static void -gdl_dock_object_dock_unimplemented (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - g_warning (_("Call to gdl_dock_object_dock in a dock object %p " - "(object type is %s) which hasn't implemented this method"), - object, G_OBJECT_TYPE_NAME (object)); -} - -static void -gdl_dock_object_real_present (GdlDockObject *object, - GdlDockObject *child) -{ - gtk_widget_show (GTK_WIDGET (object)); -} - - -/* ----- Public interface ----- */ - -gboolean -gdl_dock_object_is_compound (GdlDockObject *object) -{ - GdlDockObjectClass *klass; - - g_return_val_if_fail (object != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_OBJECT (object), FALSE); - - klass = GDL_DOCK_OBJECT_GET_CLASS (object); - return klass->is_compound; -} - -void -gdl_dock_object_detach (GdlDockObject *object, - gboolean recursive) -{ - g_return_if_fail (object != NULL); - - if (!GDL_IS_DOCK_OBJECT (object)) - return; - - if (!GDL_DOCK_OBJECT_ATTACHED (object)) - return; - - /* freeze the object to avoid reducing while detaching children */ - gdl_dock_object_freeze (object); - GDL_DOCK_OBJECT_SET_FLAGS (object, GDL_DOCK_IN_DETACH); - g_signal_emit (object, gdl_dock_object_signals [DETACH], 0, recursive); - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_IN_DETACH); - gdl_dock_object_thaw (object); -} - -GdlDockObject * -gdl_dock_object_get_parent_object (GdlDockObject *object) -{ - GtkWidget *parent; - - g_return_val_if_fail (object != NULL, NULL); - - parent = gtk_widget_get_parent (GTK_WIDGET (object)); - while (parent && !GDL_IS_DOCK_OBJECT (parent)) { - parent = gtk_widget_get_parent (parent); - } - - return parent ? GDL_DOCK_OBJECT (parent) : NULL; -} - -void -gdl_dock_object_freeze (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - - if (object->freeze_count == 0) { - g_object_ref (object); /* dock objects shouldn't be - destroyed if they are frozen */ - } - object->freeze_count++; -} - -void -gdl_dock_object_thaw (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - g_return_if_fail (object->freeze_count > 0); - - object->freeze_count--; - if (object->freeze_count == 0) { - if (object->reduce_pending) { - object->reduce_pending = FALSE; - gdl_dock_object_reduce (object); - } - g_object_unref (object); - } -} - -void -gdl_dock_object_reduce (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - - if (GDL_DOCK_OBJECT_FROZEN (object)) { - object->reduce_pending = TRUE; - return; - } - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->reduce) - GDL_DOCK_OBJECT_GET_CLASS (object)->reduce (object); -} - -gboolean -gdl_dock_object_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - g_return_val_if_fail (object != NULL && request != NULL, FALSE); - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->dock_request) - return GDL_DOCK_OBJECT_GET_CLASS (object)->dock_request (object, x, y, request); - else - return FALSE; -} - -/** - * gdl_dock_object_dock: - * @object: - * @requestor: - * @position: - * @other_data: (allow-none): - **/ -void -gdl_dock_object_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GdlDockObject *parent; - - g_return_if_fail (object != NULL && requestor != NULL); - - if (object == requestor) - return; - - if (!object->master) - g_warning (_("Dock operation requested in a non-bound object %p. " - "The application might crash"), object); - - if (!gdl_dock_object_is_bound (requestor)) - gdl_dock_object_bind (requestor, object->master); - - if (requestor->master != object->master) { - g_warning (_("Cannot dock %p to %p because they belong to different masters"), - requestor, object); - return; - } - - /* first, see if we can optimize things by reordering */ - if (position != GDL_DOCK_NONE) { - parent = gdl_dock_object_get_parent_object (object); - if (gdl_dock_object_reorder (object, requestor, position, other_data) || - (parent && gdl_dock_object_reorder (parent, requestor, position, other_data))) - return; - } - - /* freeze the object, since under some conditions it might be destroyed when - detaching the requestor */ - gdl_dock_object_freeze (object); - - /* detach the requestor before docking */ - g_object_ref (requestor); - if (GDL_DOCK_OBJECT_ATTACHED (requestor)) - gdl_dock_object_detach (requestor, FALSE); - - if (position != GDL_DOCK_NONE) - g_signal_emit (object, gdl_dock_object_signals [DOCK], 0, - requestor, position, other_data); - - g_object_unref (requestor); - gdl_dock_object_thaw (object); -} - -void -gdl_dock_object_bind (GdlDockObject *object, - GObject *master) -{ - g_return_if_fail (object != NULL && master != NULL); - g_return_if_fail (GDL_IS_DOCK_MASTER (master)); - - if (object->master == master) - /* nothing to do here */ - return; - - if (object->master) { - g_warning (_("Attempt to bind to %p an already bound dock object %p " - "(current master: %p)"), master, object, object->master); - return; - } - - gdl_dock_master_add (GDL_DOCK_MASTER (master), object); - object->master = master; - g_object_add_weak_pointer (master, (gpointer *) &object->master); - - g_object_notify (G_OBJECT (object), "master"); -} - -void -gdl_dock_object_unbind (GdlDockObject *object) -{ - g_return_if_fail (object != NULL); - - g_object_ref (object); - - /* detach the object first */ - if (GDL_DOCK_OBJECT_ATTACHED (object)) - gdl_dock_object_detach (object, TRUE); - - if (object->master) { - GObject *master = object->master; - g_object_remove_weak_pointer (master, (gpointer *) &object->master); - object->master = NULL; - gdl_dock_master_remove (GDL_DOCK_MASTER (master), object); - g_object_notify (G_OBJECT (object), "master"); - } - g_object_unref (object); -} - -gboolean -gdl_dock_object_is_bound (GdlDockObject *object) -{ - g_return_val_if_fail (object != NULL, FALSE); - return (object->master != NULL); -} - -gboolean -gdl_dock_object_reorder (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement new_position, - GValue *other_data) -{ - g_return_val_if_fail (object != NULL && child != NULL, FALSE); - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->reorder) - return GDL_DOCK_OBJECT_GET_CLASS (object)->reorder (object, child, new_position, other_data); - else - return FALSE; -} - -void -gdl_dock_object_present (GdlDockObject *object, - GdlDockObject *child) -{ - GdlDockObject *parent; - - g_return_if_fail (object != NULL && GDL_IS_DOCK_OBJECT (object)); - - parent = gdl_dock_object_get_parent_object (object); - if (parent) - /* chain the call to our parent */ - gdl_dock_object_present (parent, object); - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->present) - GDL_DOCK_OBJECT_GET_CLASS (object)->present (object, child); -} - -/** - * gdl_dock_object_child_placement: - * @object: the dock object we are asking for child placement - * @child: the child of the @object we want the placement for - * @placement: where to return the placement information - * - * This function returns information about placement of a child dock - * object inside another dock object. The function returns %TRUE if - * @child is effectively a child of @object. @placement should - * normally be initially setup to %GDL_DOCK_NONE. If it's set to some - * other value, this function will not touch the stored value if the - * specified placement is "compatible" with the actual placement of - * the child. - * - * @placement can be %NULL, in which case the function simply tells if - * @child is attached to @object. - * - * Returns: %TRUE if @child is a child of @object. - */ -gboolean -gdl_dock_object_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - g_return_val_if_fail (object != NULL && child != NULL, FALSE); - - /* simple case */ - if (!gdl_dock_object_is_compound (object)) - return FALSE; - - if (GDL_DOCK_OBJECT_GET_CLASS (object)->child_placement) - return GDL_DOCK_OBJECT_GET_CLASS (object)->child_placement (object, child, placement); - else - return FALSE; -} - - -/* ----- dock param type functions start here ------ */ - -static void -gdl_dock_param_export_int (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup_printf ("%d", src->data [0].v_int); -} - -static void -gdl_dock_param_export_uint (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup_printf ("%u", src->data [0].v_uint); -} - -static void -gdl_dock_param_export_string (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup (src->data [0].v_pointer); -} - -static void -gdl_dock_param_export_bool (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup_printf ("%s", src->data [0].v_int ? "yes" : "no"); -} - -static void -gdl_dock_param_export_placement (const GValue *src, - GValue *dst) -{ - switch (src->data [0].v_int) { - case GDL_DOCK_NONE: - dst->data [0].v_pointer = g_strdup (""); - break; - case GDL_DOCK_TOP: - dst->data [0].v_pointer = g_strdup ("top"); - break; - case GDL_DOCK_BOTTOM: - dst->data [0].v_pointer = g_strdup ("bottom"); - break; - case GDL_DOCK_LEFT: - dst->data [0].v_pointer = g_strdup ("left"); - break; - case GDL_DOCK_RIGHT: - dst->data [0].v_pointer = g_strdup ("right"); - break; - case GDL_DOCK_CENTER: - dst->data [0].v_pointer = g_strdup ("center"); - break; - case GDL_DOCK_FLOATING: - dst->data [0].v_pointer = g_strdup ("floating"); - break; - } -} - -static void -gdl_dock_param_import_int (const GValue *src, - GValue *dst) -{ - dst->data [0].v_int = atoi (src->data [0].v_pointer); -} - -static void -gdl_dock_param_import_uint (const GValue *src, - GValue *dst) -{ - dst->data [0].v_uint = (guint) atoi (src->data [0].v_pointer); -} - -static void -gdl_dock_param_import_string (const GValue *src, - GValue *dst) -{ - dst->data [0].v_pointer = g_strdup (src->data [0].v_pointer); -} - -static void -gdl_dock_param_import_bool (const GValue *src, - GValue *dst) -{ - dst->data [0].v_int = !strcmp (src->data [0].v_pointer, "yes"); -} - -static void -gdl_dock_param_import_placement (const GValue *src, - GValue *dst) -{ - if (!strcmp (src->data [0].v_pointer, "top")) - dst->data [0].v_int = GDL_DOCK_TOP; - else if (!strcmp (src->data [0].v_pointer, "bottom")) - dst->data [0].v_int = GDL_DOCK_BOTTOM; - else if (!strcmp (src->data [0].v_pointer, "center")) - dst->data [0].v_int = GDL_DOCK_CENTER; - else if (!strcmp (src->data [0].v_pointer, "left")) - dst->data [0].v_int = GDL_DOCK_LEFT; - else if (!strcmp (src->data [0].v_pointer, "right")) - dst->data [0].v_int = GDL_DOCK_RIGHT; - else if (!strcmp (src->data [0].v_pointer, "floating")) - dst->data [0].v_int = GDL_DOCK_FLOATING; - else - dst->data [0].v_int = GDL_DOCK_NONE; -} - -GType -gdl_dock_param_get_type (void) -{ - static GType our_type = 0; - - if (our_type == 0) { - GTypeInfo tinfo = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - our_type = g_type_register_static (G_TYPE_STRING, "GdlDockParam", &tinfo, 0); - - /* register known transform functions */ - /* exporters */ - g_value_register_transform_func (G_TYPE_INT, our_type, gdl_dock_param_export_int); - g_value_register_transform_func (G_TYPE_UINT, our_type, gdl_dock_param_export_uint); - g_value_register_transform_func (G_TYPE_STRING, our_type, gdl_dock_param_export_string); - g_value_register_transform_func (G_TYPE_BOOLEAN, our_type, gdl_dock_param_export_bool); - g_value_register_transform_func (GDL_TYPE_DOCK_PLACEMENT, our_type, gdl_dock_param_export_placement); - /* importers */ - g_value_register_transform_func (our_type, G_TYPE_INT, gdl_dock_param_import_int); - g_value_register_transform_func (our_type, G_TYPE_UINT, gdl_dock_param_import_uint); - g_value_register_transform_func (our_type, G_TYPE_STRING, gdl_dock_param_import_string); - g_value_register_transform_func (our_type, G_TYPE_BOOLEAN, gdl_dock_param_import_bool); - g_value_register_transform_func (our_type, GDL_TYPE_DOCK_PLACEMENT, gdl_dock_param_import_placement); - } - - return our_type; -} - -/* -------------- nick <-> type conversion functions --------------- */ - -static void -gdl_dock_object_register_init (void) -{ - const size_t n_default = 5; - guint i = 0; - struct DockRegisterItem default_items[n_default]; - - if (dock_register) - return; - - dock_register - = g_array_new (FALSE, FALSE, sizeof (struct DockRegisterItem)); - - /* add known types */ - default_items[0].nick = "dock"; - default_items[0].type = (gpointer) GDL_TYPE_DOCK; - default_items[1].nick = "item"; - default_items[1].type = (gpointer) GDL_TYPE_DOCK_ITEM; - default_items[2].nick = "paned"; - default_items[2].type = (gpointer) GDL_TYPE_DOCK_PANED; - default_items[3].nick = "notebook"; - default_items[3].type = (gpointer) GDL_TYPE_DOCK_NOTEBOOK; - default_items[4].nick = "placeholder"; - default_items[4].type = (gpointer) GDL_TYPE_DOCK_PLACEHOLDER; - - for (i = 0; i < n_default; i++) - g_array_append_val (dock_register, default_items[i]); -} - -/** - * gdl_dock_object_nick_from_type: - * @type: The type for which to find the nickname - * - * Finds the nickname for a given type - * - * Returns: If the object has a nickname, then it is returned. - * Otherwise, the type name. - */ -const gchar * -gdl_dock_object_nick_from_type (GType type) -{ - gchar *nick = NULL; - guint i = 0; - - if (!dock_register) - gdl_dock_object_register_init (); - - for (i=0; i < dock_register->len; i++) { - struct DockRegisterItem item - = g_array_index (dock_register, struct DockRegisterItem, i); - - if (g_direct_equal (item.type, (gpointer) type)) - nick = g_strdup (item.nick); - } - - return nick ? nick : g_type_name (type); -} - -/** - * gdl_dock_object_type_from_nick: - * @nick: The nickname for the object type - * - * Finds the object type assigned to a given nickname. - * - * Returns: If the nickname has previously been assigned, then the corresponding - * object type is returned. Otherwise, %G_TYPE_NONE. - */ -GType -gdl_dock_object_type_from_nick (const gchar *nick) -{ - GType type = G_TYPE_NONE; - gboolean nick_is_in_register = FALSE; - guint i = 0; - - if (!dock_register) - gdl_dock_object_register_init (); - - for (i = 0; i < dock_register->len; i++) { - struct DockRegisterItem item - = g_array_index (dock_register, struct DockRegisterItem, i); - - if (!g_strcmp0 (nick, item.nick)) { - nick_is_in_register = TRUE; - type = (GType) item.type; - } - } - if (!nick_is_in_register) { - /* try searching in the glib type system */ - type = g_type_from_name (nick); - } - - return type; -} - -/** - * gdl_dock_object_set_type_for_nick: - * @nick: The nickname for the object type - * @type: The object type - * - * Assigns an object type to a given nickname. If the nickname already exists, - * then it reassigns it to a new object type. - * - * Returns: If the nick was previously assigned, the old type is returned. - * Otherwise, %G_TYPE_NONE. - */ -GType -gdl_dock_object_set_type_for_nick (const gchar *nick, - GType type) -{ - GType old_type = G_TYPE_NONE; - guint i = 0; - struct DockRegisterItem new_item; - new_item.nick = g_strdup(nick); - new_item.type = (gpointer) type; - - if (!dock_register) - gdl_dock_object_register_init (); - - g_return_val_if_fail (g_type_is_a (type, GDL_TYPE_DOCK_OBJECT), G_TYPE_NONE); - - for (i = 0; i < dock_register->len; i++) { - struct DockRegisterItem item - = g_array_index (dock_register, struct DockRegisterItem, i); - - if (!g_strcmp0 (nick, item.nick)) { - old_type = (GType) item.type; - g_array_insert_val (dock_register, i, new_item); - } - } - - return old_type; -} - diff --git a/src/libgdl/gdl-dock-object.h b/src/libgdl/gdl-dock-object.h deleted file mode 100644 index f8b192f35..000000000 --- a/src/libgdl/gdl-dock-object.h +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-object.h - Abstract base class for all dock related objects - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_OBJECT_H__ -#define __GDL_DOCK_OBJECT_H__ - -#include - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_OBJECT (gdl_dock_object_get_type ()) -#define GDL_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_OBJECT, GdlDockObject)) -#define GDL_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_OBJECT, GdlDockObjectClass)) -#define GDL_IS_DOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_OBJECT)) -#define GDL_IS_DOCK_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_OBJECT)) -#define GDL_DOCK_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_OBJECT, GdlDockObjectClass)) - -/* data types & structures */ -typedef enum { - /* the parameter is to be exported for later layout rebuilding */ - GDL_DOCK_PARAM_EXPORT = 1 << G_PARAM_USER_SHIFT, - /* the parameter must be set after adding the children objects */ - GDL_DOCK_PARAM_AFTER = 1 << (G_PARAM_USER_SHIFT + 1) -} GdlDockParamFlags; - -#define GDL_DOCK_NAME_PROPERTY "name" -#define GDL_DOCK_MASTER_PROPERTY "master" - -typedef enum { - GDL_DOCK_AUTOMATIC = 1 << 0, - GDL_DOCK_ATTACHED = 1 << 1, - GDL_DOCK_IN_REFLOW = 1 << 2, - GDL_DOCK_IN_DETACH = 1 << 3 -} GdlDockObjectFlags; - -#define GDL_DOCK_OBJECT_FLAGS_SHIFT 8 - -typedef enum { - GDL_DOCK_NONE = 0, - GDL_DOCK_TOP, - GDL_DOCK_BOTTOM, - GDL_DOCK_RIGHT, - GDL_DOCK_LEFT, - GDL_DOCK_CENTER, - GDL_DOCK_FLOATING -} GdlDockPlacement; - -typedef struct _GdlDockObject GdlDockObject; -typedef struct _GdlDockObjectClass GdlDockObjectClass; -typedef struct _GdlDockRequest GdlDockRequest; - -struct _GdlDockRequest { - GdlDockObject *applicant; - GdlDockObject *target; - GdlDockPlacement position; - GdkRectangle rect; - GValue extra; -}; - -struct _GdlDockObject { - GtkContainer container; - - GdlDockObjectFlags flags; - gint freeze_count; - - GObject *master; - gchar *name; - gchar *long_name; - gchar *stock_id; - GdkPixbuf *pixbuf_icon; - - gboolean reduce_pending; -}; - -struct _GdlDockObjectClass { - GtkContainerClass parent_class; - - gboolean is_compound; - - void (* detach) (GdlDockObject *object, - gboolean recursive); - void (* reduce) (GdlDockObject *object); - - gboolean (* dock_request) (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); - - void (* dock) (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - - gboolean (* reorder) (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement new_position, - GValue *other_data); - - void (* present) (GdlDockObject *object, - GdlDockObject *child); - - gboolean (* child_placement) (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); -}; - -/* additional macros */ -#define GDL_DOCK_OBJECT_FLAGS(obj) (GDL_DOCK_OBJECT (obj)->flags) -#define GDL_DOCK_OBJECT_AUTOMATIC(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_AUTOMATIC) != 0) -#define GDL_DOCK_OBJECT_ATTACHED(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_ATTACHED) != 0) -#define GDL_DOCK_OBJECT_IN_REFLOW(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_IN_REFLOW) != 0) -#define GDL_DOCK_OBJECT_IN_DETACH(obj) \ - ((GDL_DOCK_OBJECT_FLAGS (obj) & GDL_DOCK_IN_DETACH) != 0) - -#define GDL_DOCK_OBJECT_SET_FLAGS(obj,flag) \ - G_STMT_START { (GDL_DOCK_OBJECT_FLAGS (obj) |= (flag)); } G_STMT_END -#define GDL_DOCK_OBJECT_UNSET_FLAGS(obj,flag) \ - G_STMT_START { (GDL_DOCK_OBJECT_FLAGS (obj) &= ~(flag)); } G_STMT_END - -#define GDL_DOCK_OBJECT_FROZEN(obj) (GDL_DOCK_OBJECT (obj)->freeze_count > 0) - - -/* public interface */ - -GType gdl_dock_object_get_type (void); - -gboolean gdl_dock_object_is_compound (GdlDockObject *object); - -void gdl_dock_object_detach (GdlDockObject *object, - gboolean recursive); - -GdlDockObject *gdl_dock_object_get_parent_object (GdlDockObject *object); - -void gdl_dock_object_freeze (GdlDockObject *object); -void gdl_dock_object_thaw (GdlDockObject *object); - -void gdl_dock_object_reduce (GdlDockObject *object); - -gboolean gdl_dock_object_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -void gdl_dock_object_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -void gdl_dock_object_bind (GdlDockObject *object, - GObject *master); -void gdl_dock_object_unbind (GdlDockObject *object); -gboolean gdl_dock_object_is_bound (GdlDockObject *object); - -gboolean gdl_dock_object_reorder (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement new_position, - GValue *other_data); - -void gdl_dock_object_present (GdlDockObject *object, - GdlDockObject *child); - -gboolean gdl_dock_object_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - -/* other types */ - -/* this type derives from G_TYPE_STRING and is meant to be the basic - type for serializing object parameters which are exported - (i.e. those that are needed for layout rebuilding) */ -#define GDL_TYPE_DOCK_PARAM (gdl_dock_param_get_type ()) - -GType gdl_dock_param_get_type (void); - -/* functions for setting/retrieving nick names for serializing GdlDockObject types */ -const gchar *gdl_dock_object_nick_from_type (GType type); -GType gdl_dock_object_type_from_nick (const gchar *nick); -GType gdl_dock_object_set_type_for_nick (const gchar *nick, - GType type); - - -/* helper macros */ -#define GDL_TRACE_OBJECT(object, format, args...) \ - G_STMT_START { \ - g_log (G_LOG_DOMAIN, \ - G_LOG_LEVEL_DEBUG, \ - "%s:%d (%s) %s [%p %d%s:%d]: " format, \ - __FILE__, \ - __LINE__, \ - __PRETTY_FUNCTION__, \ - G_OBJECT_TYPE_NAME (object), object, \ - G_OBJECT (object)->ref_count, \ - (GTK_IS_OBJECT (object) && g_object_is_floating (object)) ? "(float)" : "", \ - GDL_IS_DOCK_OBJECT (object) ? GDL_DOCK_OBJECT (object)->freeze_count : -1, \ - ##args); } G_STMT_END - - - -G_END_DECLS - -#endif /* __GDL_DOCK_OBJECT_H__ */ - diff --git a/src/libgdl/gdl-dock-paned.c b/src/libgdl/gdl-dock-paned.c deleted file mode 100644 index 5b4561ef3..000000000 --- a/src/libgdl/gdl-dock-paned.c +++ /dev/null @@ -1,678 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-paned.h - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock-paned.h" - - -/* Private prototypes */ - -static void gdl_dock_paned_class_init (GdlDockPanedClass *klass); -static void gdl_dock_paned_init (GdlDockPaned *paned); -static GObject *gdl_dock_paned_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param); -static void gdl_dock_paned_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_paned_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_paned_destroy (GtkObject *object); - -static void gdl_dock_paned_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_paned_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_paned_child_type (GtkContainer *container); - -static gboolean gdl_dock_paned_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -static void gdl_dock_paned_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_paned_set_orientation (GdlDockItem *item, - GtkOrientation orientation); - -static gboolean gdl_dock_paned_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - - -/* ----- Class variables and definitions ----- */ - -#define SPLIT_RATIO 0.3 - -enum { - PROP_0, - PROP_POSITION -}; - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDockPaned, gdl_dock_paned, GDL_TYPE_DOCK_ITEM); - -static void -gdl_dock_paned_class_init (GdlDockPanedClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - GdlDockItemClass *item_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - item_class = GDL_DOCK_ITEM_CLASS (klass); - - g_object_class->set_property = gdl_dock_paned_set_property; - g_object_class->get_property = gdl_dock_paned_get_property; - g_object_class->constructor = gdl_dock_paned_constructor; - - gtk_object_class->destroy = gdl_dock_paned_destroy; - - container_class->add = gdl_dock_paned_add; - container_class->forall = gdl_dock_paned_forall; - container_class->child_type = gdl_dock_paned_child_type; - - object_class->is_compound = TRUE; - - object_class->dock_request = gdl_dock_paned_dock_request; - object_class->dock = gdl_dock_paned_dock; - object_class->child_placement = gdl_dock_paned_child_placement; - - item_class->has_grip = FALSE; - item_class->set_orientation = gdl_dock_paned_set_orientation; - - g_object_class_install_property ( - g_object_class, PROP_POSITION, - g_param_spec_uint ("position", _("Position"), - _("Position of the divider in pixels"), - 0, G_MAXINT, 0, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER)); -} - -static void -gdl_dock_paned_init (GdlDockPaned *paned) -{ - paned->position_changed = FALSE; -} - -static void -gdl_dock_paned_notify_cb (GObject *g_object, - GParamSpec *pspec, - gpointer user_data) -{ - GdlDockPaned *paned; - - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data)); - - /* chain the notification to the GdlDockPaned */ - g_object_notify (G_OBJECT (user_data), pspec->name); - - paned = GDL_DOCK_PANED (user_data); - - if (GDL_DOCK_ITEM_USER_ACTION (user_data) && !strcmp (pspec->name, "position")) - paned->position_changed = TRUE; -} - -static gboolean -gdl_dock_paned_button_cb (GtkWidget *widget, - GdkEventButton *event, - gpointer user_data) -{ - GdlDockPaned *paned; - - g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK_PANED (user_data), FALSE); - - paned = GDL_DOCK_PANED (user_data); - if (event->button == 1) { - if (event->type == GDK_BUTTON_PRESS) - GDL_DOCK_ITEM_SET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - else { - GDL_DOCK_ITEM_UNSET_FLAGS (user_data, GDL_DOCK_USER_ACTION); - if (paned->position_changed) { - /* emit pending layout changed signal to track separator position */ - if (GDL_DOCK_OBJECT (paned)->master) - g_signal_emit_by_name (GDL_DOCK_OBJECT (paned)->master, "layout-changed"); - paned->position_changed = FALSE; - } - } - } - - return FALSE; -} - -static void -gdl_dock_paned_create_child (GdlDockPaned *paned, - GtkOrientation orientation) -{ - GdlDockItem *item; - - item = GDL_DOCK_ITEM (paned); - - if (item->child) - gtk_widget_unparent (GTK_WIDGET (item->child)); - - /* create the container paned */ - if (orientation == GTK_ORIENTATION_HORIZONTAL) - item->child = gtk_hpaned_new (); - else - item->child = gtk_vpaned_new (); - - /* get notification for propagation */ - g_signal_connect (item->child, "notify::position", - (GCallback) gdl_dock_paned_notify_cb, (gpointer) item); - g_signal_connect (item->child, "button-press-event", - (GCallback) gdl_dock_paned_button_cb, (gpointer) item); - g_signal_connect (item->child, "button-release-event", - (GCallback) gdl_dock_paned_button_cb, (gpointer) item); - - gtk_widget_set_parent (item->child, GTK_WIDGET (item)); - gtk_widget_show (item->child); -} - -static GObject * -gdl_dock_paned_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param) -{ - GObject *g_object; - - g_object = G_OBJECT_CLASS (gdl_dock_paned_parent_class)-> constructor (type, - n_construct_properties, - construct_param); - if (g_object) { - GdlDockItem *item = GDL_DOCK_ITEM (g_object); - - if (!item->child) - gdl_dock_paned_create_child (GDL_DOCK_PANED (g_object), - item->orientation); - /* otherwise, the orientation was set as a construction - parameter and the child is already created */ - } - - return g_object; -} - -static void -gdl_dock_paned_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_POSITION: - if (item->child && GTK_IS_PANED (item->child)) - gtk_paned_set_position (GTK_PANED (item->child), - g_value_get_uint (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_paned_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - switch (prop_id) { - case PROP_POSITION: - if (item->child && GTK_IS_PANED (item->child)) - g_value_set_uint (value, - gtk_paned_get_position (GTK_PANED (item->child))); - else - g_value_set_uint (value, 0); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_paned_destroy (GtkObject *object) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - - /* we need to call the virtual first, since in GdlDockDestroy our - children dock objects are detached */ - GTK_OBJECT_CLASS (gdl_dock_paned_parent_class)->destroy (object); - - /* after that we can remove the GtkNotebook */ - if (item->child) { - gtk_widget_unparent (item->child); - item->child = NULL; - }; -} - -static void -gdl_dock_paned_add (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockItem *item; - GdlDockPlacement pos = GDL_DOCK_NONE; - GtkPaned *paned; - GtkWidget *child1, *child2; - - g_return_if_fail (container != NULL && widget != NULL); - g_return_if_fail (GDL_IS_DOCK_PANED (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - item = GDL_DOCK_ITEM (container); - g_return_if_fail (item->child != NULL); - - paned = GTK_PANED (item->child); - child1 = gtk_paned_get_child1 (paned); - child2 = gtk_paned_get_child2 (paned); - g_return_if_fail (!child1 || !child2); - - if (!child1) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_LEFT : GDL_DOCK_TOP; - else if (!child2) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_RIGHT : GDL_DOCK_BOTTOM; - - if (pos != GDL_DOCK_NONE) - gdl_dock_object_dock (GDL_DOCK_OBJECT (container), - GDL_DOCK_OBJECT (widget), - pos, NULL); -} - -static void -gdl_dock_paned_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDockItem *item; - - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK_PANED (container)); - g_return_if_fail (callback != NULL); - - if (include_internals) { - /* use GdlDockItem's forall */ - GTK_CONTAINER_CLASS (gdl_dock_paned_parent_class)->forall - (container, include_internals, callback, callback_data); - } - else { - item = GDL_DOCK_ITEM (container); - if (item->child) - gtk_container_foreach (GTK_CONTAINER (item->child), callback, callback_data); - } -} - -static GType -gdl_dock_paned_child_type (GtkContainer *container) -{ - GdlDockItem *item = GDL_DOCK_ITEM (container); - - if (gtk_container_child_type (GTK_CONTAINER (item->child)) == G_TYPE_NONE) - return G_TYPE_NONE; - else - return GDL_TYPE_DOCK_ITEM; -} - -static void -gdl_dock_paned_request_foreach (GdlDockObject *object, - gpointer user_data) -{ - struct { - gint x, y; - GdlDockRequest *request; - gboolean may_dock; - } *data = user_data; - - GdlDockRequest my_request; - gboolean may_dock; - - my_request = *data->request; - may_dock = gdl_dock_object_dock_request (object, data->x, data->y, &my_request); - if (may_dock) { - data->may_dock = TRUE; - *data->request = my_request; - } -} - -static gboolean -gdl_dock_paned_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - GdlDockItem *item; - guint bw; - gint rel_x, rel_y; - GtkAllocation alloc; - gboolean may_dock = FALSE; - GdlDockRequest my_request; - - g_return_val_if_fail (GDL_IS_DOCK_ITEM (object), FALSE); - - /* we get (x,y) in our allocation coordinates system */ - - item = GDL_DOCK_ITEM (object); - - /* Get item's allocation. */ - gtk_widget_get_allocation (GTK_WIDGET (object), &alloc); - bw = gtk_container_get_border_width (GTK_CONTAINER (object)); - - /* Get coordinates relative to our window. */ - rel_x = x - alloc.x; - rel_y = y - alloc.y; - - if (request) - my_request = *request; - - /* Check if coordinates are inside the widget. */ - if (rel_x > 0 && rel_x < alloc.width && - rel_y > 0 && rel_y < alloc.height) { - GtkRequisition my, other; - gint divider = -1; - - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (my_request.applicant), &other); - gdl_dock_item_preferred_size (GDL_DOCK_ITEM (object), &my); - - /* It's inside our area. */ - may_dock = TRUE; - - /* Set docking indicator rectangle to the widget size. */ - my_request.rect.x = bw; - my_request.rect.y = bw; - my_request.rect.width = alloc.width - 2*bw; - my_request.rect.height = alloc.height - 2*bw; - - my_request.target = object; - - /* See if it's in the border_width band. */ - if (rel_x < (gint)bw) { - my_request.position = GDL_DOCK_LEFT; - my_request.rect.width *= SPLIT_RATIO; - divider = other.width; - } else if (rel_x > alloc.width - (gint)bw) { - my_request.position = GDL_DOCK_RIGHT; - my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO); - my_request.rect.width *= SPLIT_RATIO; - divider = MAX (0, my.width - other.width); - } else if (rel_y < (gint)bw) { - my_request.position = GDL_DOCK_TOP; - my_request.rect.height *= SPLIT_RATIO; - divider = other.height; - } else if (rel_y > alloc.height - (gint)bw) { - my_request.position = GDL_DOCK_BOTTOM; - my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO); - my_request.rect.height *= SPLIT_RATIO; - divider = MAX (0, my.height - other.height); - - } else { /* Otherwise try our children. */ - struct { - gint x, y; - GdlDockRequest *request; - gboolean may_dock; - } data; - - /* give them coordinates in their allocation system... the - GtkPaned has no window, so our children allocation - coordinates are our window coordinates */ - data.x = rel_x; - data.y = rel_y; - data.request = &my_request; - data.may_dock = FALSE; - - gtk_container_foreach (GTK_CONTAINER (object), - (GtkCallback) gdl_dock_paned_request_foreach, - &data); - - may_dock = data.may_dock; - if (!may_dock) { - /* the pointer is on the handle, so snap to top/bottom - or left/right */ - may_dock = TRUE; - if (item->orientation == GTK_ORIENTATION_HORIZONTAL) { - if (rel_y < alloc.height / 2) { - my_request.position = GDL_DOCK_TOP; - my_request.rect.height *= SPLIT_RATIO; - divider = other.height; - } else { - my_request.position = GDL_DOCK_BOTTOM; - my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO); - my_request.rect.height *= SPLIT_RATIO; - divider = MAX (0, my.height - other.height); - } - } else { - if (rel_x < alloc.width / 2) { - my_request.position = GDL_DOCK_LEFT; - my_request.rect.width *= SPLIT_RATIO; - divider = other.width; - } else { - my_request.position = GDL_DOCK_RIGHT; - my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO); - my_request.rect.width *= SPLIT_RATIO; - divider = MAX (0, my.width - other.width); - } - } - } - } - - if (divider >= 0 && my_request.position != GDL_DOCK_CENTER) { - if (G_IS_VALUE (&my_request.extra)) - g_value_unset (&my_request.extra); - g_value_init (&my_request.extra, G_TYPE_UINT); - g_value_set_uint (&my_request.extra, (guint) divider); - } - - if (may_dock) { - /* adjust returned coordinates so they are relative to - our allocation */ - my_request.rect.x += alloc.x; - my_request.rect.y += alloc.y; - } - } - - if (may_dock && request) - *request = my_request; - - return may_dock; -} - -static void -gdl_dock_paned_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GtkPaned *paned; - GtkWidget *child1, *child2; - gboolean done = FALSE; - gboolean hresize = FALSE; - gboolean wresize = FALSE; - gint temp = 0; - - g_return_if_fail (GDL_IS_DOCK_PANED (object)); - g_return_if_fail (GDL_DOCK_ITEM (object)->child != NULL); - - paned = GTK_PANED (GDL_DOCK_ITEM (object)->child); - - if (GDL_IS_DOCK_ITEM (requestor)) { - g_object_get (G_OBJECT (requestor), "preferred_height", &temp, NULL); - if (temp == -2) - hresize = TRUE; - temp = 0; - g_object_get (G_OBJECT (requestor), "preferred_width", &temp, NULL); - if (temp == -2) - wresize = TRUE; - } - - child1 = gtk_paned_get_child1 (paned); - child2 = gtk_paned_get_child2 (paned); - - /* see if we can dock the item in our paned */ - switch (GDL_DOCK_ITEM (object)->orientation) { - case GTK_ORIENTATION_HORIZONTAL: - if (!child1 && position == GDL_DOCK_LEFT) { - gtk_paned_pack1 (paned, GTK_WIDGET (requestor), FALSE, FALSE); - done = TRUE; - } else if (!child2 && position == GDL_DOCK_RIGHT) { - gtk_paned_pack2 (paned, GTK_WIDGET (requestor), TRUE, FALSE); - done = TRUE; - } - break; - case GTK_ORIENTATION_VERTICAL: - if (!child1 && position == GDL_DOCK_TOP) { - gtk_paned_pack1 (paned, GTK_WIDGET (requestor), hresize, FALSE); - done = TRUE; - } else if (!child2 && position == GDL_DOCK_BOTTOM) { - gtk_paned_pack2 (paned, GTK_WIDGET (requestor), hresize, FALSE); - done = TRUE; - } - break; - default: - break; - } - - if (!done) { - /* this will create another paned and reparent us there */ - GDL_DOCK_OBJECT_CLASS (gdl_dock_paned_parent_class)->dock (object, requestor, position, - other_data); - } - else { - gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor)); - gtk_widget_show (GTK_WIDGET (requestor)); - GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); - } -} - -static void -gdl_dock_paned_set_orientation (GdlDockItem *item, - GtkOrientation orientation) -{ - GtkPaned *old_paned = NULL, *new_paned; - GtkWidget *child1, *child2; - - g_return_if_fail (GDL_IS_DOCK_PANED (item)); - - if (item->child) { - old_paned = GTK_PANED (item->child); - g_object_ref (old_paned); - gtk_widget_unparent (GTK_WIDGET (old_paned)); - item->child = NULL; - } - - gdl_dock_paned_create_child (GDL_DOCK_PANED (item), orientation); - - if (old_paned) { - new_paned = GTK_PANED (item->child); - child1 = gtk_paned_get_child1 (old_paned); - child2 = gtk_paned_get_child2 (old_paned); - - if (child1) { - g_object_ref (child1); - gtk_container_remove (GTK_CONTAINER (old_paned), child1); - gtk_paned_pack1 (new_paned, child1, TRUE, FALSE); - g_object_unref (child1); - } - if (child2) { - g_object_ref (child2); - gtk_container_remove (GTK_CONTAINER (old_paned), child2); - gtk_paned_pack1 (new_paned, child2, TRUE, FALSE); - g_object_unref (child2); - } - } - - GDL_DOCK_ITEM_CLASS (gdl_dock_paned_parent_class)->set_orientation (item, orientation); -} - -static gboolean -gdl_dock_paned_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - GdlDockItem *item = GDL_DOCK_ITEM (object); - GtkPaned *paned; - GdlDockPlacement pos = GDL_DOCK_NONE; - - if (item->child) { - paned = GTK_PANED (item->child); - if (GTK_WIDGET (child) == gtk_paned_get_child1 (paned)) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_LEFT : GDL_DOCK_TOP; - else if (GTK_WIDGET (child) == gtk_paned_get_child2 (paned)) - pos = item->orientation == GTK_ORIENTATION_HORIZONTAL ? - GDL_DOCK_RIGHT : GDL_DOCK_BOTTOM; - } - - if (pos != GDL_DOCK_NONE) { - if (placement) - *placement = pos; - return TRUE; - } - else - return FALSE; -} - - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_paned_new (GtkOrientation orientation) -{ - GdlDockPaned *paned; - - paned = GDL_DOCK_PANED (g_object_new (GDL_TYPE_DOCK_PANED, - "orientation", orientation, NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (paned, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (paned); -} - diff --git a/src/libgdl/gdl-dock-paned.h b/src/libgdl/gdl-dock-paned.h deleted file mode 100644 index 2b4a40700..000000000 --- a/src/libgdl/gdl-dock-paned.h +++ /dev/null @@ -1,64 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-paned.h - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_PANED_H__ -#define __GDL_DOCK_PANED_H__ - -#include "libgdl/gdl-dock-item.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_PANED (gdl_dock_paned_get_type ()) -#define GDL_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PANED, GdlDockPaned)) -#define GDL_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PANED, GdlDockPanedClass)) -#define GDL_IS_DOCK_PANED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PANED)) -#define GDL_IS_DOCK_PANED_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PANED)) -#define GDL_DOCK_PANED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDL_TYE_DOCK_PANED, GdlDockPanedClass)) - -/* data types & structures */ -typedef struct _GdlDockPaned GdlDockPaned; -typedef struct _GdlDockPanedClass GdlDockPanedClass; - -struct _GdlDockPaned { - GdlDockItem dock_item; - - gboolean position_changed; -}; - -struct _GdlDockPanedClass { - GdlDockItemClass parent_class; -}; - - -/* public interface */ - -GType gdl_dock_paned_get_type (void); - -GtkWidget *gdl_dock_paned_new (GtkOrientation orientation); - - -G_END_DECLS - -#endif /* __GDL_DOCK_PANED_H__ */ - diff --git a/src/libgdl/gdl-dock-placeholder.c b/src/libgdl/gdl-dock-placeholder.c deleted file mode 100644 index 8cde7a51d..000000000 --- a/src/libgdl/gdl-dock-placeholder.c +++ /dev/null @@ -1,827 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-placeholder.c - Placeholders for docking items - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" - -#include "gdl-dock-placeholder.h" -#include "gdl-dock-item.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-master.h" -#include "libgdltypebuiltins.h" - - -#undef PLACEHOLDER_DEBUG - -/* ----- Private prototypes ----- */ - -static void gdl_dock_placeholder_class_init (GdlDockPlaceholderClass *klass); - -static void gdl_dock_placeholder_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_placeholder_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_placeholder_destroy (GtkObject *object); - -static void gdl_dock_placeholder_add (GtkContainer *container, - GtkWidget *widget); - -static void gdl_dock_placeholder_detach (GdlDockObject *object, - gboolean recursive); -static void gdl_dock_placeholder_reduce (GdlDockObject *object); -static void gdl_dock_placeholder_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); - -static void gdl_dock_placeholder_weak_notify (gpointer data, - GObject *old_object); - -static void disconnect_host (GdlDockPlaceholder *ph); -static void connect_host (GdlDockPlaceholder *ph, - GdlDockObject *new_host); -static void do_excursion (GdlDockPlaceholder *ph); - -static void gdl_dock_placeholder_present (GdlDockObject *object, - GdlDockObject *child); - -static void detach_cb (GdlDockObject *object, - gboolean recursive, - gpointer user_data); - -/* ----- Private variables and data structures ----- */ - -enum { - PROP_0, - PROP_STICKY, - PROP_HOST, - PROP_NEXT_PLACEMENT, - PROP_WIDTH, - PROP_HEIGHT, - PROP_FLOATING, - PROP_FLOAT_X, - PROP_FLOAT_Y -}; - -struct _GdlDockPlaceholderPrivate { - /* current object this placeholder is pinned to */ - GdlDockObject *host; - gboolean sticky; - - /* when the placeholder is moved up the hierarchy, this stack - keeps track of the necessary dock positions needed to get the - placeholder to the original position */ - GSList *placement_stack; - - /* Width and height of the attachments */ - gint width; - gint height; - - /* connected signal handlers */ - guint host_detach_handler; - guint host_dock_handler; - - /* Window Coordinates if Dock was floating */ - gboolean floating; - gint floatx; - gint floaty; -}; - - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockPlaceholder, gdl_dock_placeholder, GDL_TYPE_DOCK_OBJECT); - -static void -gdl_dock_placeholder_class_init (GdlDockPlaceholderClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - - g_object_class->get_property = gdl_dock_placeholder_get_property; - g_object_class->set_property = gdl_dock_placeholder_set_property; - - g_object_class_install_property ( - g_object_class, PROP_STICKY, - g_param_spec_boolean ("sticky", _("Sticky"), - _("Whether the placeholder will stick to its host or " - "move up the hierarchy when the host is redocked"), - FALSE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - - g_object_class_install_property ( - g_object_class, PROP_HOST, - g_param_spec_object ("host", _("Host"), - _("The dock object this placeholder is attached to"), - GDL_TYPE_DOCK_OBJECT, - G_PARAM_READWRITE)); - - /* this will return the top of the placement stack */ - g_object_class_install_property ( - g_object_class, PROP_NEXT_PLACEMENT, - g_param_spec_enum ("next-placement", _("Next placement"), - _("The position an item will be docked to our host if a " - "request is made to dock to us"), - GDL_TYPE_DOCK_PLACEMENT, - GDL_DOCK_CENTER, - G_PARAM_READWRITE | - GDL_DOCK_PARAM_EXPORT | GDL_DOCK_PARAM_AFTER)); - - g_object_class_install_property ( - g_object_class, PROP_WIDTH, - g_param_spec_int ("width", _("Width"), - _("Width for the widget when it's attached to the placeholder"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_HEIGHT, - g_param_spec_int ("height", _("Height"), - _("Height for the widget when it's attached to the placeholder"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - g_object_class_install_property ( - g_object_class, PROP_FLOATING, - g_param_spec_boolean ("floating", _("Floating Toplevel"), - _("Whether the placeholder is standing in for a " - "floating toplevel dock"), - FALSE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); - g_object_class_install_property ( - g_object_class, PROP_FLOAT_X, - g_param_spec_int ("floatx", _("X Coordinate"), - _("X coordinate for dock when floating"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - g_object_class_install_property ( - g_object_class, PROP_FLOAT_Y, - g_param_spec_int ("floaty", _("Y Coordinate"), - _("Y coordinate for dock when floating"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - - - gtk_object_class->destroy = gdl_dock_placeholder_destroy; - container_class->add = gdl_dock_placeholder_add; - - object_class->is_compound = FALSE; - object_class->detach = gdl_dock_placeholder_detach; - object_class->reduce = gdl_dock_placeholder_reduce; - object_class->dock = gdl_dock_placeholder_dock; - object_class->present = gdl_dock_placeholder_present; -} - -static void -gdl_dock_placeholder_init (GdlDockPlaceholder *ph) -{ - gtk_widget_set_has_window (GTK_WIDGET (ph), FALSE); - gtk_widget_set_can_focus (GTK_WIDGET (ph), FALSE); - - ph->_priv = g_new0 (GdlDockPlaceholderPrivate, 1); -} - -static void -gdl_dock_placeholder_set_property (GObject *g_object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (g_object); - - switch (prop_id) { - case PROP_STICKY: - if (ph->_priv) - ph->_priv->sticky = g_value_get_boolean (value); - break; - case PROP_HOST: - gdl_dock_placeholder_attach (ph, g_value_get_object (value)); - break; - case PROP_NEXT_PLACEMENT: - if (ph->_priv) { - ph->_priv->placement_stack = - g_slist_prepend (ph->_priv->placement_stack, - GINT_TO_POINTER (g_value_get_enum (value))); - } - break; - case PROP_WIDTH: - ph->_priv->width = g_value_get_int (value); - break; - case PROP_HEIGHT: - ph->_priv->height = g_value_get_int (value); - break; - case PROP_FLOATING: - ph->_priv->floating = g_value_get_boolean (value); - break; - case PROP_FLOAT_X: - ph->_priv->floatx = g_value_get_int (value); - break; - case PROP_FLOAT_Y: - ph->_priv->floaty = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_placeholder_get_property (GObject *g_object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (g_object); - - switch (prop_id) { - case PROP_STICKY: - if (ph->_priv) - g_value_set_boolean (value, ph->_priv->sticky); - else - g_value_set_boolean (value, FALSE); - break; - case PROP_HOST: - if (ph->_priv) - g_value_set_object (value, ph->_priv->host); - else - g_value_set_object (value, NULL); - break; - case PROP_NEXT_PLACEMENT: - if (ph->_priv && ph->_priv->placement_stack) - g_value_set_enum (value, (GdlDockPlacement) ph->_priv->placement_stack->data); - else - g_value_set_enum (value, GDL_DOCK_CENTER); - break; - case PROP_WIDTH: - g_value_set_int (value, ph->_priv->width); - break; - case PROP_HEIGHT: - g_value_set_int (value, ph->_priv->height); - break; - case PROP_FLOATING: - g_value_set_boolean (value, ph->_priv->floating); - break; - case PROP_FLOAT_X: - g_value_set_int (value, ph->_priv->floatx); - break; - case PROP_FLOAT_Y: - g_value_set_int (value, ph->_priv->floaty); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (g_object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_placeholder_destroy (GtkObject *object) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); - - if (ph->_priv) { - if (ph->_priv->host) - gdl_dock_placeholder_detach (GDL_DOCK_OBJECT (object), FALSE); - g_free (ph->_priv); - ph->_priv = NULL; - } - - GTK_OBJECT_CLASS (gdl_dock_placeholder_parent_class)->destroy (object); -} - -static void -gdl_dock_placeholder_add (GtkContainer *container, - GtkWidget *widget) -{ - GdlDockPlaceholder *ph; - GdlDockPlacement pos = GDL_DOCK_CENTER; /* default position */ - - g_return_if_fail (GDL_IS_DOCK_PLACEHOLDER (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - ph = GDL_DOCK_PLACEHOLDER (container); - if (ph->_priv->placement_stack) - pos = (GdlDockPlacement) ph->_priv->placement_stack->data; - - gdl_dock_object_dock (GDL_DOCK_OBJECT (ph), GDL_DOCK_OBJECT (widget), - pos, NULL); -} - -static void -gdl_dock_placeholder_detach (GdlDockObject *object, - gboolean recursive) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); - - /* disconnect handlers */ - disconnect_host (ph); - - /* free the placement stack */ - g_slist_free (ph->_priv->placement_stack); - ph->_priv->placement_stack = NULL; - - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED); -} - -static void -gdl_dock_placeholder_reduce (GdlDockObject *object) -{ - /* placeholders are not reduced */ - return; -} - -static void -find_biggest_dock_item (GtkContainer *container, GtkWidget **biggest_child, - gint *biggest_child_area) -{ - GList *children, *child; - GtkAllocation allocation; - - children = gtk_container_get_children (GTK_CONTAINER (container)); - child = children; - while (child) { - gint area; - GtkWidget *child_widget; - - child_widget = GTK_WIDGET (child->data); - - if (gdl_dock_object_is_compound (GDL_DOCK_OBJECT(child_widget))) { - find_biggest_dock_item (GTK_CONTAINER (child_widget), - biggest_child, biggest_child_area); - child = g_list_next (child); - continue; - } - gtk_widget_get_allocation (child_widget, &allocation); - area = allocation.width * allocation.height; - - if (area > *biggest_child_area) { - *biggest_child_area = area; - *biggest_child = child_widget; - } - child = g_list_next (child); - } -} - -static void -attempt_to_dock_on_host (GdlDockPlaceholder *ph, GdlDockObject *host, - GdlDockObject *requestor, GdlDockPlacement placement, - gpointer other_data) -{ - GdlDockObject *parent; - GtkAllocation allocation; - gint host_width; - gint host_height; - - gtk_widget_get_allocation (GTK_WIDGET (host), &allocation); - host_width = allocation.width; - host_height = allocation.height; - - if (placement != GDL_DOCK_CENTER || !GDL_IS_DOCK_PANED (host)) { - /* we simply act as a proxy for our host */ - gdl_dock_object_dock (host, requestor, - placement, other_data); - } else { - /* If the requested pos is center, we have to make sure that it - * does not colapses existing paned items. Find the larget item - * which is not a paned item to dock to. - */ - GtkWidget *biggest_child = NULL; - gint biggest_child_area = 0; - - find_biggest_dock_item (GTK_CONTAINER (host), &biggest_child, - &biggest_child_area); - - if (biggest_child) { - /* we simply act as a proxy for our host */ - gdl_dock_object_dock (GDL_DOCK_OBJECT (biggest_child), requestor, - placement, other_data); - } else { - g_warning ("No suitable child found! Should not be here!"); - /* we simply act as a proxy for our host */ - gdl_dock_object_dock (GDL_DOCK_OBJECT (host), requestor, - placement, other_data); - } - } - - parent = gdl_dock_object_get_parent_object (requestor); - - /* Restore dock item's dimention */ - switch (placement) { - case GDL_DOCK_LEFT: - if (ph->_priv->width > 0) { - g_object_set (G_OBJECT (parent), "position", - ph->_priv->width, NULL); - } - break; - case GDL_DOCK_RIGHT: - if (ph->_priv->width > 0) { - gint complementary_width = host_width - ph->_priv->width; - - if (complementary_width > 0) - g_object_set (G_OBJECT (parent), "position", - complementary_width, NULL); - } - break; - case GDL_DOCK_TOP: - if (ph->_priv->height > 0) { - g_object_set (G_OBJECT (parent), "position", - ph->_priv->height, NULL); - } - break; - case GDL_DOCK_BOTTOM: - if (ph->_priv->height > 0) { - gint complementary_height = host_height - ph->_priv->height; - - if (complementary_height > 0) - g_object_set (G_OBJECT (parent), "position", - complementary_height, NULL); - } - break; - default: - /* nothing */ - break; - } -} - -static void -gdl_dock_placeholder_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data) -{ - GdlDockPlaceholder *ph = GDL_DOCK_PLACEHOLDER (object); - - if (ph->_priv->host) { - attempt_to_dock_on_host (ph, ph->_priv->host, requestor, - position, other_data); - } - else { - GdlDockObject *toplevel; - - if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (ph))) { - g_warning ("%s", _("Attempt to dock a dock object to an unbound placeholder")); - return; - } - - /* dock the item as a floating of the controller */ - toplevel = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (ph)); - gdl_dock_object_dock (toplevel, requestor, - GDL_DOCK_FLOATING, NULL); - } -} - -#ifdef PLACEHOLDER_DEBUG -static void -print_placement_stack (GdlDockPlaceholder *ph) -{ - GSList *s = ph->_priv->placement_stack; - GEnumClass *enum_class = G_ENUM_CLASS (g_type_class_ref (GDL_TYPE_DOCK_PLACEMENT)); - GEnumValue *enum_value; - gchar *name; - GString *message; - - message = g_string_new (NULL); - g_string_printf (message, "[%p] host: %p (%s), stack: ", - ph, ph->_priv->host, G_OBJECT_TYPE_NAME (ph->_priv->host)); - for (; s; s = s->next) { - enum_value = g_enum_get_value (enum_class, (GdlDockPlacement) s->data); - name = enum_value ? enum_value->value_name : NULL; - g_string_append_printf (message, "%s, ", name); - } - g_message ("%s", message->str); - - g_string_free (message, TRUE); - g_type_class_unref (enum_class); -} -#endif - -static void -gdl_dock_placeholder_present (GdlDockObject *object, - GdlDockObject *child) -{ - /* do nothing */ - return; -} - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_placeholder_new (const gchar *name, - GdlDockObject *object, - GdlDockPlacement position, - gboolean sticky) -{ - GdlDockPlaceholder *ph; - - ph = GDL_DOCK_PLACEHOLDER (g_object_new (GDL_TYPE_DOCK_PLACEHOLDER, - "name", name, - "sticky", sticky, - "next-placement", position, - "host", object, - NULL)); - GDL_DOCK_OBJECT_UNSET_FLAGS (ph, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (ph); -} - -static void -gdl_dock_placeholder_weak_notify (gpointer data, - GObject *old_object) -{ - GdlDockPlaceholder *ph; - - g_return_if_fail (data != NULL && GDL_IS_DOCK_PLACEHOLDER (data)); - - ph = GDL_DOCK_PLACEHOLDER (data); - -#ifdef PLACEHOLDER_DEBUG - g_message ("The placeholder just lost its host, ph = %p", ph); -#endif - - /* we shouldn't get here, so perform an emergency detach. instead - we should have gotten a detach signal from our host */ - ph->_priv->host = NULL; - - /* We didn't get a detach signal from the host. Detach from the - supposedly dead host (consequently attaching to the controller) */ - - detach_cb (NULL, TRUE, data); -#if 0 - /* free the placement stack */ - g_slist_free (ph->_priv->placement_stack); - ph->_priv->placement_stack = NULL; - GDL_DOCK_OBJECT_UNSET_FLAGS (ph, GDL_DOCK_ATTACHED); -#endif -} - -static void -detach_cb (GdlDockObject *object, - gboolean recursive, - gpointer user_data) -{ - GdlDockPlaceholder *ph; - GdlDockObject *new_host, *obj; - - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); - - /* we go up in the hierarchy and we store the hinted placement in - * the placement stack so we can rebuild the docking layout later - * when we get the host's dock signal. */ - - ph = GDL_DOCK_PLACEHOLDER (user_data); - obj = ph->_priv->host; - if (obj != object) { - g_warning (_("Got a detach signal from an object (%p) who is not " - "our host %p"), object, ph->_priv->host); - return; - } - - /* skip sticky objects */ - if (ph->_priv->sticky) - return; - - if (obj) - /* go up in the hierarchy */ - new_host = gdl_dock_object_get_parent_object (obj); - else - /* Detaching from the dead host */ - new_host = NULL; - - while (new_host) { - GdlDockPlacement pos = GDL_DOCK_NONE; - - /* get placement hint from the new host */ - if (gdl_dock_object_child_placement (new_host, obj, &pos)) { - ph->_priv->placement_stack = g_slist_prepend ( - ph->_priv->placement_stack, (gpointer) pos); - } - else { - g_warning (_("Something weird happened while getting the child " - "placement for %p from parent %p"), obj, new_host); - } - - if (!GDL_DOCK_OBJECT_IN_DETACH (new_host)) - /* we found a "stable" dock object */ - break; - - obj = new_host; - new_host = gdl_dock_object_get_parent_object (obj); - } - - /* disconnect host */ - disconnect_host (ph); - - if (!new_host) { -#ifdef PLACEHOLDER_DEBUG - g_message ("Detaching from the toplevel. Assignaing to controller"); -#endif - /* the toplevel was detached: we attach ourselves to the - controller with an initial placement of floating */ - new_host = gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (ph)); - - /* - ph->_priv->placement_stack = g_slist_prepend ( - ph->_priv->placement_stack, (gpointer) GDL_DOCK_FLOATING); - */ - } - if (new_host) - connect_host (ph, new_host); - -#ifdef PLACEHOLDER_DEBUG - print_placement_stack (ph); -#endif -} - -/** - * do_excursion: - * @ph: placeholder object - * - * Tries to shrink the placement stack by examining the host's - * children and see if any of them matches the placement which is at - * the top of the stack. If this is the case, it tries again with the - * new host. - **/ -static void -do_excursion (GdlDockPlaceholder *ph) -{ - if (ph->_priv->host && - !ph->_priv->sticky && - ph->_priv->placement_stack && - gdl_dock_object_is_compound (ph->_priv->host)) { - - GdlDockPlacement pos, stack_pos = - (GdlDockPlacement) ph->_priv->placement_stack->data; - GList *children, *l; - GdlDockObject *host = ph->_priv->host; - - children = gtk_container_get_children (GTK_CONTAINER (host)); - for (l = children; l; l = l->next) { - pos = stack_pos; - gdl_dock_object_child_placement (GDL_DOCK_OBJECT (host), - GDL_DOCK_OBJECT (l->data), - &pos); - if (pos == stack_pos) { - /* remove the stack position */ - ph->_priv->placement_stack = - g_slist_remove_link (ph->_priv->placement_stack, - ph->_priv->placement_stack); - - /* connect to the new host */ - disconnect_host (ph); - connect_host (ph, GDL_DOCK_OBJECT (l->data)); - - /* recurse... */ - if (!GDL_DOCK_OBJECT_IN_REFLOW (l->data)) - do_excursion (ph); - - break; - } - } - g_list_free (children); - } -} - -static void -dock_cb (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data, - gpointer user_data) -{ - GdlDockPlacement pos = GDL_DOCK_NONE; - GdlDockPlaceholder *ph; - - g_return_if_fail (user_data != NULL && GDL_IS_DOCK_PLACEHOLDER (user_data)); - ph = GDL_DOCK_PLACEHOLDER (user_data); - g_return_if_fail (ph->_priv->host == object); - - /* see if the given position is compatible for the stack's top - element */ - if (!ph->_priv->sticky && ph->_priv->placement_stack) { - pos = (GdlDockPlacement) ph->_priv->placement_stack->data; - if (gdl_dock_object_child_placement (object, requestor, &pos)) { - if (pos == (GdlDockPlacement) ph->_priv->placement_stack->data) { - /* the position is compatible: excurse down */ - do_excursion (ph); - } - } - } -#ifdef PLACEHOLDER_DEBUG - print_placement_stack (ph); -#endif -} - -static void -disconnect_host (GdlDockPlaceholder *ph) -{ - if (!ph->_priv->host) - return; - - if (ph->_priv->host_detach_handler) - g_signal_handler_disconnect (ph->_priv->host, ph->_priv->host_detach_handler); - if (ph->_priv->host_dock_handler) - g_signal_handler_disconnect (ph->_priv->host, ph->_priv->host_dock_handler); - ph->_priv->host_detach_handler = 0; - ph->_priv->host_dock_handler = 0; - - /* remove weak ref to object */ - g_object_weak_unref (G_OBJECT (ph->_priv->host), - gdl_dock_placeholder_weak_notify, ph); - ph->_priv->host = NULL; - -#ifdef PLACEHOLDER_DEBUG - g_message ("Host just disconnected!, ph = %p", ph); -#endif -} - -static void -connect_host (GdlDockPlaceholder *ph, - GdlDockObject *new_host) -{ - if (ph->_priv->host) - disconnect_host (ph); - - ph->_priv->host = new_host; - g_object_weak_ref (G_OBJECT (ph->_priv->host), - gdl_dock_placeholder_weak_notify, ph); - - ph->_priv->host_detach_handler = - g_signal_connect (ph->_priv->host, - "detach", - (GCallback) detach_cb, - (gpointer) ph); - - ph->_priv->host_dock_handler = - g_signal_connect (ph->_priv->host, - "dock", - (GCallback) dock_cb, - (gpointer) ph); - -#ifdef PLACEHOLDER_DEBUG - g_message ("Host just connected!, ph = %p", ph); -#endif -} - -void -gdl_dock_placeholder_attach (GdlDockPlaceholder *ph, - GdlDockObject *object) -{ - g_return_if_fail (ph != NULL && GDL_IS_DOCK_PLACEHOLDER (ph)); - g_return_if_fail (ph->_priv != NULL); - g_return_if_fail (object != NULL); - - /* object binding */ - if (!gdl_dock_object_is_bound (GDL_DOCK_OBJECT (ph))) - gdl_dock_object_bind (GDL_DOCK_OBJECT (ph), object->master); - - g_return_if_fail (GDL_DOCK_OBJECT (ph)->master == object->master); - - gdl_dock_object_freeze (GDL_DOCK_OBJECT (ph)); - - /* detach from previous host first */ - if (ph->_priv->host) - gdl_dock_object_detach (GDL_DOCK_OBJECT (ph), FALSE); - - connect_host (ph, object); - - GDL_DOCK_OBJECT_SET_FLAGS (ph, GDL_DOCK_ATTACHED); - - gdl_dock_object_thaw (GDL_DOCK_OBJECT (ph)); -} diff --git a/src/libgdl/gdl-dock-placeholder.h b/src/libgdl/gdl-dock-placeholder.h deleted file mode 100644 index c7e57e204..000000000 --- a/src/libgdl/gdl-dock-placeholder.h +++ /dev/null @@ -1,69 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-placeholder.h - Placeholders for docking items - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_PLACEHOLDER_H__ -#define __GDL_DOCK_PLACEHOLDER_H__ - -#include "libgdl/gdl-dock-object.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_PLACEHOLDER (gdl_dock_placeholder_get_type ()) -#define GDL_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholder)) -#define GDL_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) -#define GDL_IS_DOCK_PLACEHOLDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_PLACEHOLDER)) -#define GDL_IS_DOCK_PLACEHOLDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_PLACEHOLDER)) -#define GDL_DOCK_PLACEHOLDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_PLACEHOLDER, GdlDockPlaceholderClass)) - -/* data types & structures */ -typedef struct _GdlDockPlaceholder GdlDockPlaceholder; -typedef struct _GdlDockPlaceholderClass GdlDockPlaceholderClass; -typedef struct _GdlDockPlaceholderPrivate GdlDockPlaceholderPrivate; - -struct _GdlDockPlaceholder { - GdlDockObject object; - - GdlDockPlaceholderPrivate *_priv; -}; - -struct _GdlDockPlaceholderClass { - GdlDockObjectClass parent_class; -}; - -/* public interface */ - -GType gdl_dock_placeholder_get_type (void); - -GtkWidget *gdl_dock_placeholder_new (const gchar *name, - GdlDockObject *object, - GdlDockPlacement position, - gboolean sticky); - -void gdl_dock_placeholder_attach (GdlDockPlaceholder *ph, - GdlDockObject *object); - - -G_END_DECLS - -#endif /* __GDL_DOCK_PLACEHOLDER_H__ */ diff --git a/src/libgdl/gdl-dock-tablabel.c b/src/libgdl/gdl-dock-tablabel.c deleted file mode 100644 index 441db3438..000000000 --- a/src/libgdl/gdl-dock-tablabel.c +++ /dev/null @@ -1,632 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-tablabel.c - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include - -#include "gdl-dock-tablabel.h" -#include "gdl-dock-item.h" -#include "libgdlmarshal.h" - - -/* ----- Private prototypes ----- */ - -static void gdl_dock_tablabel_class_init (GdlDockTablabelClass *klass); - -static void gdl_dock_tablabel_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_tablabel_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_dock_tablabel_item_notify (GObject *master, - GParamSpec *pspec, - gpointer data); - -static void gdl_dock_tablabel_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gdl_dock_tablabel_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); - -static void gdl_dock_tablabel_paint (GtkWidget *widget, - GdkEventExpose *event); -static gint gdl_dock_tablabel_expose (GtkWidget *widget, - GdkEventExpose *event); - -static gboolean gdl_dock_tablabel_button_event (GtkWidget *widget, - GdkEventButton *event); -static gboolean gdl_dock_tablabel_motion_event (GtkWidget *widget, - GdkEventMotion *event); - -static void gdl_dock_tablabel_realize (GtkWidget *widget); -static void gdl_dock_tablabel_unrealize (GtkWidget *widget); -static void gdl_dock_tablabel_map (GtkWidget *widget); -static void gdl_dock_tablabel_unmap (GtkWidget *widget); - -/* ----- Private data types and variables ----- */ - -#define DEFAULT_DRAG_HANDLE_SIZE 10 -#define HANDLE_RATIO 1.0 - -enum { - BUTTON_PRESSED_HANDLE, - LAST_SIGNAL -}; - -enum { - PROP_0, - PROP_ITEM -}; - - -static guint dock_tablabel_signals [LAST_SIGNAL] = { 0 }; - - -/* ----- Private interface ----- */ - -G_DEFINE_TYPE (GdlDockTablabel, gdl_dock_tablabel, GTK_TYPE_BIN); - -static void -gdl_dock_tablabel_class_init (GdlDockTablabelClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - g_object_class = G_OBJECT_CLASS (klass); - object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - - g_object_class->set_property = gdl_dock_tablabel_set_property; - g_object_class->get_property = gdl_dock_tablabel_get_property; - - widget_class->size_request = gdl_dock_tablabel_size_request; - widget_class->size_allocate = gdl_dock_tablabel_size_allocate; - widget_class->expose_event = gdl_dock_tablabel_expose; - widget_class->button_press_event = gdl_dock_tablabel_button_event; - widget_class->button_release_event = gdl_dock_tablabel_button_event; - widget_class->motion_notify_event = gdl_dock_tablabel_motion_event; - widget_class->realize = gdl_dock_tablabel_realize; - widget_class->unrealize = gdl_dock_tablabel_unrealize; - widget_class->map = gdl_dock_tablabel_map; - widget_class->unmap = gdl_dock_tablabel_unmap; - - g_object_class_install_property ( - g_object_class, PROP_ITEM, - g_param_spec_object ("item", _("Controlling dock item"), - _("Dockitem which 'owns' this tablabel"), - GDL_TYPE_DOCK_ITEM, - G_PARAM_READWRITE)); - - dock_tablabel_signals [BUTTON_PRESSED_HANDLE] = - g_signal_new ("button_pressed_handle", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockTablabelClass, - button_pressed_handle), - NULL, NULL, - gdl_marshal_VOID__BOXED, - G_TYPE_NONE, - 1, - GDK_TYPE_EVENT | G_SIGNAL_TYPE_STATIC_SCOPE); - - klass->button_pressed_handle = NULL; -} - -static void -gdl_dock_tablabel_init (GdlDockTablabel *tablabel) -{ - GtkWidget *widget; - GtkWidget *label_widget; - - widget = GTK_WIDGET (tablabel); - - tablabel->drag_handle_size = DEFAULT_DRAG_HANDLE_SIZE; - tablabel->item = NULL; - - label_widget = gtk_label_new ("Dock item"); - gtk_container_add (GTK_CONTAINER (tablabel), label_widget); - gtk_widget_show (label_widget); - - tablabel->active = FALSE; - gtk_widget_set_state (GTK_WIDGET (tablabel), GTK_STATE_ACTIVE); -} - -static void -gdl_dock_tablabel_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDockTablabel *tablabel; - GtkBin *bin; - - tablabel = GDL_DOCK_TABLABEL (object); - - switch (prop_id) { - case PROP_ITEM: - if (tablabel->item) { - g_object_remove_weak_pointer (G_OBJECT (tablabel->item), - (gpointer *) &tablabel->item); - g_signal_handlers_disconnect_by_func ( - tablabel->item, gdl_dock_tablabel_item_notify, tablabel); - }; - - tablabel->item = g_value_get_object (value); - if (tablabel->item) { - gboolean locked; - gchar *long_name; - - g_object_add_weak_pointer (G_OBJECT (tablabel->item), - (gpointer *) &tablabel->item); - - g_signal_connect (tablabel->item, "notify::locked", - G_CALLBACK (gdl_dock_tablabel_item_notify), - tablabel); - g_signal_connect (tablabel->item, "notify::long_name", - G_CALLBACK (gdl_dock_tablabel_item_notify), - tablabel); - g_signal_connect (tablabel->item, "notify::grip_size", - G_CALLBACK (gdl_dock_tablabel_item_notify), - tablabel); - - g_object_get (tablabel->item, - "locked", &locked, - "long-name", &long_name, - "grip-size", &tablabel->drag_handle_size, - NULL); - - if (locked) - tablabel->drag_handle_size = 0; - - bin = GTK_BIN (tablabel); - if (gtk_bin_get_child (bin) && g_object_class_find_property ( - G_OBJECT_GET_CLASS (gtk_bin_get_child (bin)), "label")) - g_object_set (gtk_bin_get_child (bin), "label", long_name, NULL); - g_free (long_name); - }; - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_tablabel_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDockTablabel *tablabel; - - tablabel = GDL_DOCK_TABLABEL (object); - - switch (prop_id) { - case PROP_ITEM: - g_value_set_object (value, tablabel->item); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_tablabel_item_notify (GObject *master, - GParamSpec *pspec, - gpointer data) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (data); - gboolean locked; - gchar *label; - GtkBin *bin; - - g_object_get (master, - "locked", &locked, - "grip-size", &tablabel->drag_handle_size, - "long-name", &label, - NULL); - - if (locked) - tablabel->drag_handle_size = 0; - - bin = GTK_BIN (tablabel); - if (gtk_bin_get_child (bin) && g_object_class_find_property ( - G_OBJECT_GET_CLASS (gtk_bin_get_child (bin)), "label")) - g_object_set (gtk_bin_get_child (bin), "label", label, NULL); - g_free (label); - - gtk_widget_queue_resize (GTK_WIDGET (tablabel)); -} - -static void -gdl_dock_tablabel_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkBin *bin; - GtkRequisition child_req; - GdlDockTablabel *tablabel; - guint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_TABLABEL (widget)); - g_return_if_fail (requisition != NULL); - - tablabel = GDL_DOCK_TABLABEL (widget); - bin = GTK_BIN (widget); - - requisition->width = tablabel->drag_handle_size; - requisition->height = 0; - - if (gtk_bin_get_child (bin)) - gtk_widget_size_request (gtk_bin_get_child (bin), &child_req); - else - child_req.width = child_req.height = 0; - - requisition->width += child_req.width; - requisition->height += child_req.height; - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - requisition->width += border_width * 2; - requisition->height += border_width * 2; - - //gtk_widget_size_request (widget, requisition); -} - -static void -gdl_dock_tablabel_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkBin *bin; - GtkAllocation widget_allocation; - GdlDockTablabel *tablabel; - gint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK_TABLABEL (widget)); - g_return_if_fail (allocation != NULL); - - bin = GTK_BIN (widget); - tablabel = GDL_DOCK_TABLABEL (widget); - - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - gtk_widget_set_allocation (widget, allocation); - - if (gtk_widget_get_realized (widget)) - gdk_window_move_resize (tablabel->event_window, - allocation->x, - allocation->y, - allocation->width, - allocation->height); - - if (gtk_bin_get_child (bin) && gtk_widget_get_visible (gtk_bin_get_child (bin))) { - GtkAllocation child_allocation; - - gtk_widget_get_allocation (widget, &widget_allocation); - child_allocation.x = widget_allocation.x + border_width; - child_allocation.y = widget_allocation.y + border_width; - - allocation->width = MAX (1, (int) allocation->width - - (int) tablabel->drag_handle_size); - child_allocation.x += tablabel->drag_handle_size; - - child_allocation.width = - MAX (1, (int) allocation->width - 2 * border_width); - child_allocation.height = - MAX (1, (int) allocation->height - 2 * border_width); - - gtk_widget_size_allocate (gtk_bin_get_child (bin), &child_allocation); - } -} - -static void -gdl_dock_tablabel_paint (GtkWidget *widget, - GdkEventExpose *event) -{ - GdkRectangle dest, rect; - GtkBin *bin; - GtkAllocation widget_allocation; - GdlDockTablabel *tablabel; - gint border_width; - - bin = GTK_BIN (widget); - tablabel = GDL_DOCK_TABLABEL (widget); - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - gtk_widget_get_allocation (widget, &widget_allocation); - rect.x = widget_allocation.x + border_width; - rect.y = widget_allocation.y + border_width; - rect.width = tablabel->drag_handle_size * HANDLE_RATIO; - rect.height = widget_allocation.height - 2*border_width; - - if (gdk_rectangle_intersect (&event->area, &rect, &dest)) { - gtk_paint_handle (gtk_widget_get_style (widget), gtk_widget_get_window (widget), - tablabel->active ? GTK_STATE_NORMAL : GTK_STATE_ACTIVE, - GTK_SHADOW_NONE, - &dest, widget, "dock-tablabel", - rect.x, rect.y, rect.width, rect.height, - GTK_ORIENTATION_VERTICAL); - }; -} - -static gint -gdl_dock_tablabel_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - if (gtk_widget_get_visible (widget) && gtk_widget_get_mapped (widget)) { - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->expose_event (widget,event); - gdl_dock_tablabel_paint (widget, event); - }; - - return FALSE; -} - -static gboolean -gdl_dock_tablabel_button_event (GtkWidget *widget, - GdkEventButton *event) -{ - GdlDockTablabel *tablabel; - GtkAllocation widget_allocation; - gboolean event_handled; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - tablabel = GDL_DOCK_TABLABEL (widget); - - event_handled = FALSE; - - if (event->window != tablabel->event_window) - return FALSE; - - switch (event->type) { - case GDK_BUTTON_PRESS: - if (tablabel->active) { - gboolean in_handle; - gint rel_x, rel_y; - guint border_width; - GtkBin *bin; - - bin = GTK_BIN (widget); - border_width = gtk_container_get_border_width (GTK_CONTAINER (widget)); - - rel_x = event->x - border_width; - rel_y = event->y - border_width; - - /* Check if user clicked on the drag handle. */ - in_handle = (rel_x < tablabel->drag_handle_size * HANDLE_RATIO) && - (rel_x > 0); - - if (event->button == 1) { - tablabel->pre_drag = TRUE; - tablabel->drag_start_event = *event; - } - else { - g_signal_emit (widget, - dock_tablabel_signals [BUTTON_PRESSED_HANDLE], - 0, - event); - } - - event_handled = TRUE; - } - break; - - case GDK_BUTTON_RELEASE: - tablabel->pre_drag = FALSE; - break; - - default: - break; - } - - if (!event_handled) { - /* propagate the event to the parent's gdkwindow */ - GdkEventButton e; - - e = *event; - e.window = gtk_widget_get_parent_window (widget); - gtk_widget_get_allocation (widget, &widget_allocation); - e.x += widget_allocation.x; - e.y += widget_allocation.y; - - gdk_event_put ((GdkEvent *) &e); - }; - - return event_handled; -} - -static gboolean -gdl_dock_tablabel_motion_event (GtkWidget *widget, - GdkEventMotion *event) -{ - GdlDockTablabel *tablabel; - GtkAllocation widget_allocation; - gboolean event_handled; - - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GDL_IS_DOCK_TABLABEL (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - tablabel = GDL_DOCK_TABLABEL (widget); - - event_handled = FALSE; - - if (event->window != tablabel->event_window) - return FALSE; - - if (tablabel->pre_drag) { - if (gtk_drag_check_threshold (widget, - tablabel->drag_start_event.x, - tablabel->drag_start_event.y, - event->x, - event->y)) { - tablabel->pre_drag = FALSE; - g_signal_emit (widget, - dock_tablabel_signals [BUTTON_PRESSED_HANDLE], - 0, - &tablabel->drag_start_event); - event_handled = TRUE; - } - } - - if (!event_handled) { - /* propagate the event to the parent's gdkwindow */ - GdkEventMotion e; - - e = *event; - e.window = gtk_widget_get_parent_window (widget); - gtk_widget_get_allocation (widget, &widget_allocation); - e.x += widget_allocation.x; - e.y += widget_allocation.y; - - gdk_event_put ((GdkEvent *) &e); - }; - - return event_handled; -} - -static void -gdl_dock_tablabel_realize (GtkWidget *widget) -{ - GdlDockTablabel *tablabel; - GdkWindowAttr attributes; - GtkAllocation widget_allocation; - int attributes_mask; - - tablabel = GDL_DOCK_TABLABEL (widget); - - attributes.window_type = GDK_WINDOW_CHILD; - gtk_widget_get_allocation (widget, &widget_allocation); - attributes.x = widget_allocation.x; - attributes.y = widget_allocation.y; - attributes.width = widget_allocation.width; - attributes.height = widget_allocation.height; - attributes.wclass = GDK_INPUT_ONLY; - attributes.event_mask = gtk_widget_get_events (widget); - attributes.event_mask |= (GDK_EXPOSURE_MASK | - GDK_BUTTON_PRESS_MASK | - GDK_BUTTON_RELEASE_MASK | - GDK_ENTER_NOTIFY_MASK | - GDK_POINTER_MOTION_MASK | - GDK_LEAVE_NOTIFY_MASK); - attributes_mask = GDK_WA_X | GDK_WA_Y; - - gtk_widget_set_window (widget, gtk_widget_get_parent_window (widget)); - g_object_ref (gtk_widget_get_window (widget)); - - tablabel->event_window = - gdk_window_new (gtk_widget_get_parent_window (widget), - &attributes, attributes_mask); - gdk_window_set_user_data (tablabel->event_window, widget); - - gtk_widget_set_style (widget, gtk_style_attach (gtk_widget_get_style (widget), - gtk_widget_get_window (widget))); - - gtk_widget_set_realized (widget, TRUE); -} - -static void -gdl_dock_tablabel_unrealize (GtkWidget *widget) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); - - if (tablabel->event_window) { - gdk_window_set_user_data (tablabel->event_window, NULL); - gdk_window_destroy (tablabel->event_window); - tablabel->event_window = NULL; - } - - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->unrealize (widget); -} - -static void -gdl_dock_tablabel_map (GtkWidget *widget) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); - - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->map (widget); - - gdk_window_show (tablabel->event_window); -} - -static void -gdl_dock_tablabel_unmap (GtkWidget *widget) -{ - GdlDockTablabel *tablabel = GDL_DOCK_TABLABEL (widget); - - gdk_window_hide (tablabel->event_window); - - GTK_WIDGET_CLASS (gdl_dock_tablabel_parent_class)->unmap (widget); -} - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_tablabel_new (GdlDockItem *item) -{ - GdlDockTablabel *tablabel; - - tablabel = GDL_DOCK_TABLABEL (g_object_new (GDL_TYPE_DOCK_TABLABEL, - "item", item, - NULL)); - - return GTK_WIDGET (tablabel); -} - -void -gdl_dock_tablabel_activate (GdlDockTablabel *tablabel) -{ - g_return_if_fail (tablabel != NULL); - - tablabel->active = TRUE; - gtk_widget_set_state (GTK_WIDGET (tablabel), GTK_STATE_NORMAL); -} - -void -gdl_dock_tablabel_deactivate (GdlDockTablabel *tablabel) -{ - g_return_if_fail (tablabel != NULL); - - tablabel->active = FALSE; - /* yeah, i know it contradictive */ - gtk_widget_set_state (GTK_WIDGET (tablabel), GTK_STATE_ACTIVE); -} diff --git a/src/libgdl/gdl-dock-tablabel.h b/src/libgdl/gdl-dock-tablabel.h deleted file mode 100644 index b78c1c5c7..000000000 --- a/src/libgdl/gdl-dock-tablabel.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * gdl-dock-tablabel.h - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_TABLABEL_H__ -#define __GDL_DOCK_TABLABEL_H__ - -#include -#include "libgdl/gdl-dock-item.h" - - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK_TABLABEL (gdl_dock_tablabel_get_type ()) -#define GDL_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabel)) -#define GDL_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) -#define GDL_IS_DOCK_TABLABEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK_TABLABEL)) -#define GDL_IS_DOCK_TABLABEL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK_TABLABEL)) -#define GDL_DOCK_TABLABEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK_TABLABEL, GdlDockTablabelClass)) - -/* data types & structures */ -typedef struct _GdlDockTablabel GdlDockTablabel; -typedef struct _GdlDockTablabelClass GdlDockTablabelClass; - -struct _GdlDockTablabel { - GtkBin parent; - - guint drag_handle_size; - GtkWidget *item; - GdkWindow *event_window; - gboolean active; - - GdkEventButton drag_start_event; - gboolean pre_drag; -}; - -struct _GdlDockTablabelClass { - GtkBinClass parent_class; - - void (*button_pressed_handle) (GdlDockTablabel *tablabel, - GdkEventButton *event); -}; - -/* public interface */ - -GtkWidget *gdl_dock_tablabel_new (GdlDockItem *item); -GType gdl_dock_tablabel_get_type (void); - -void gdl_dock_tablabel_activate (GdlDockTablabel *tablabel); -void gdl_dock_tablabel_deactivate (GdlDockTablabel *tablabel); - -G_END_DECLS - -#endif diff --git a/src/libgdl/gdl-dock.c b/src/libgdl/gdl-dock.c deleted file mode 100644 index c87468e5c..000000000 --- a/src/libgdl/gdl-dock.c +++ /dev/null @@ -1,1365 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * 2007 Naba Kumar - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include -#include - -#include "gdl-dock.h" -#include "gdl-dock-master.h" -#include "gdl-dock-paned.h" -#include "gdl-dock-notebook.h" -#include "gdl-dock-placeholder.h" - -#include "libgdlmarshal.h" - -#ifndef __FUNCTION__ -#define __FUNCTION__ __func__ -#endif - -/* ----- Private prototypes ----- */ - -static void gdl_dock_class_init (GdlDockClass *class); - -static GObject *gdl_dock_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param); -static void gdl_dock_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_dock_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gdl_dock_notify_cb (GObject *object, - GParamSpec *pspec, - gpointer user_data); - -static void gdl_dock_set_title (GdlDock *dock); - -static void gdl_dock_destroy (GtkObject *object); - -static void gdl_dock_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gdl_dock_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void gdl_dock_map (GtkWidget *widget); -static void gdl_dock_unmap (GtkWidget *widget); -static void gdl_dock_show (GtkWidget *widget); -static void gdl_dock_hide (GtkWidget *widget); - -static void gdl_dock_add (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_remove (GtkContainer *container, - GtkWidget *widget); -static void gdl_dock_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static GType gdl_dock_child_type (GtkContainer *container); - -static void gdl_dock_detach (GdlDockObject *object, - gboolean recursive); -static void gdl_dock_reduce (GdlDockObject *object); -static gboolean gdl_dock_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request); -static void gdl_dock_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *other_data); -static gboolean gdl_dock_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data); - -static gboolean gdl_dock_floating_window_delete_event_cb (GtkWidget *widget); - -static gboolean gdl_dock_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement); - -static void gdl_dock_present (GdlDockObject *object, - GdlDockObject *child); - - -/* ----- Class variables and definitions ----- */ - -struct _GdlDockPrivate -{ - /* for floating docks */ - gboolean floating; - GtkWidget *window; - gboolean auto_title; - - gint float_x; - gint float_y; - gint width; - gint height; - - /* auxiliary fields */ - GdkGC *xor_gc; -}; - -enum { - LAYOUT_CHANGED, - LAST_SIGNAL -}; - -enum { - PROP_0, - PROP_FLOATING, - PROP_DEFAULT_TITLE, - PROP_WIDTH, - PROP_HEIGHT, - PROP_FLOAT_X, - PROP_FLOAT_Y -}; - -static guint dock_signals [LAST_SIGNAL] = { 0 }; - -#define SPLIT_RATIO 0.3 - - -/* ----- Private functions ----- */ - -G_DEFINE_TYPE (GdlDock, gdl_dock, GDL_TYPE_DOCK_OBJECT); - -static void -gdl_dock_class_init (GdlDockClass *klass) -{ - GObjectClass *g_object_class; - GtkObjectClass *gtk_object_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - GdlDockObjectClass *object_class; - - g_object_class = G_OBJECT_CLASS (klass); - gtk_object_class = GTK_OBJECT_CLASS (klass); - widget_class = GTK_WIDGET_CLASS (klass); - container_class = GTK_CONTAINER_CLASS (klass); - object_class = GDL_DOCK_OBJECT_CLASS (klass); - - g_object_class->constructor = gdl_dock_constructor; - g_object_class->set_property = gdl_dock_set_property; - g_object_class->get_property = gdl_dock_get_property; - - /* properties */ - - g_object_class_install_property ( - g_object_class, PROP_FLOATING, - g_param_spec_boolean ("floating", _("Floating"), - _("Whether the dock is floating in its own window"), - FALSE, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_DEFAULT_TITLE, - g_param_spec_string ("default-title", _("Default title"), - _("Default title for the newly created floating docks"), - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property ( - g_object_class, PROP_WIDTH, - g_param_spec_int ("width", _("Width"), - _("Width for the dock when it's of floating type"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_HEIGHT, - g_param_spec_int ("height", _("Height"), - _("Height for the dock when it's of floating type"), - -1, G_MAXINT, -1, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_FLOAT_X, - g_param_spec_int ("floatx", _("Float X"), - _("X coordinate for a floating dock"), - G_MININT, G_MAXINT, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - g_object_class_install_property ( - g_object_class, PROP_FLOAT_Y, - g_param_spec_int ("floaty", _("Float Y"), - _("Y coordinate for a floating dock"), - G_MININT, G_MAXINT, 0, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT | - GDL_DOCK_PARAM_EXPORT)); - - gtk_object_class->destroy = gdl_dock_destroy; - - widget_class->size_request = gdl_dock_size_request; - widget_class->size_allocate = gdl_dock_size_allocate; - widget_class->map = gdl_dock_map; - widget_class->unmap = gdl_dock_unmap; - widget_class->show = gdl_dock_show; - widget_class->hide = gdl_dock_hide; - - container_class->add = gdl_dock_add; - container_class->remove = gdl_dock_remove; - container_class->forall = gdl_dock_forall; - container_class->child_type = gdl_dock_child_type; - - object_class->is_compound = TRUE; - - object_class->detach = gdl_dock_detach; - object_class->reduce = gdl_dock_reduce; - object_class->dock_request = gdl_dock_dock_request; - object_class->dock = gdl_dock_dock; - object_class->reorder = gdl_dock_reorder; - object_class->child_placement = gdl_dock_child_placement; - object_class->present = gdl_dock_present; - - /* signals */ - - dock_signals [LAYOUT_CHANGED] = - g_signal_new ("layout-changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GdlDockClass, layout_changed), - NULL, /* accumulator */ - NULL, /* accu_data */ - gdl_marshal_VOID__VOID, - G_TYPE_NONE, /* return type */ - 0); - - klass->layout_changed = NULL; -} - -static void -gdl_dock_init (GdlDock *dock) -{ - gtk_widget_set_has_window (GTK_WIDGET (dock), FALSE); - - dock->root = NULL; - dock->_priv = g_new0 (GdlDockPrivate, 1); - dock->_priv->width = -1; - dock->_priv->height = -1; -} - -static gboolean -gdl_dock_floating_configure_event_cb (GtkWidget *widget, - GdkEventConfigure *event, - gpointer user_data) -{ - GdlDock *dock; - - g_return_val_if_fail (user_data != NULL && GDL_IS_DOCK (user_data), TRUE); - - dock = GDL_DOCK (user_data); - dock->_priv->float_x = event->x; - dock->_priv->float_y = event->y; - dock->_priv->width = event->width; - dock->_priv->height = event->height; - - return FALSE; -} - -static GObject * -gdl_dock_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_param) -{ - GObject *g_object; - - g_object = G_OBJECT_CLASS (gdl_dock_parent_class)-> constructor (type, - n_construct_properties, - construct_param); - if (g_object) { - GdlDock *dock = GDL_DOCK (g_object); - GdlDockMaster *master; - - /* create a master for the dock if none was provided in the construction */ - master = GDL_DOCK_OBJECT_GET_MASTER (GDL_DOCK_OBJECT (dock)); - if (!master) { - GDL_DOCK_OBJECT_UNSET_FLAGS (dock, GDL_DOCK_AUTOMATIC); - master = g_object_new (GDL_TYPE_DOCK_MASTER, NULL); - /* the controller owns the master ref */ - gdl_dock_object_bind (GDL_DOCK_OBJECT (dock), G_OBJECT (master)); - } - - if (dock->_priv->floating) { - /* create floating window for this dock */ - dock->_priv->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - g_object_set_data (G_OBJECT (dock->_priv->window), "dock", dock); - - /* set position and default size */ - gtk_window_set_position (GTK_WINDOW (dock->_priv->window), - GTK_WIN_POS_MOUSE); - gtk_window_set_default_size (GTK_WINDOW (dock->_priv->window), - dock->_priv->width, - dock->_priv->height); - gtk_window_set_type_hint (GTK_WINDOW (dock->_priv->window), - GDK_WINDOW_TYPE_HINT_NORMAL); - - gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dock->_priv->window), - TRUE); - - /* metacity ignores this */ - gtk_window_move (GTK_WINDOW (dock->_priv->window), - dock->_priv->float_x, - dock->_priv->float_y); - - /* connect to the configure event so we can track down window geometry */ - g_signal_connect (dock->_priv->window, "configure_event", - (GCallback) gdl_dock_floating_configure_event_cb, - dock); - - /* set the title and connect to the long_name notify queue - so we can reset the title when this prop changes */ - gdl_dock_set_title (dock); - g_signal_connect (dock, "notify::long-name", - (GCallback) gdl_dock_notify_cb, NULL); - - gtk_container_add (GTK_CONTAINER (dock->_priv->window), GTK_WIDGET (dock)); - - g_signal_connect (dock->_priv->window, "delete_event", - G_CALLBACK (gdl_dock_floating_window_delete_event_cb), - NULL); - } - GDL_DOCK_OBJECT_SET_FLAGS (dock, GDL_DOCK_ATTACHED); - } - - return g_object; -} - -static void -gdl_dock_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlDock *dock = GDL_DOCK (object); - - switch (prop_id) { - case PROP_FLOATING: - dock->_priv->floating = g_value_get_boolean (value); - break; - case PROP_DEFAULT_TITLE: - if (GDL_DOCK_OBJECT (object)->master) - g_object_set (GDL_DOCK_OBJECT (object)->master, - "default-title", g_value_get_string (value), - NULL); - break; - case PROP_WIDTH: - dock->_priv->width = g_value_get_int (value); - break; - case PROP_HEIGHT: - dock->_priv->height = g_value_get_int (value); - break; - case PROP_FLOAT_X: - dock->_priv->float_x = g_value_get_int (value); - break; - case PROP_FLOAT_Y: - dock->_priv->float_y = g_value_get_int (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } - - switch (prop_id) { - case PROP_WIDTH: - case PROP_HEIGHT: - case PROP_FLOAT_X: - case PROP_FLOAT_Y: - if (dock->_priv->floating && dock->_priv->window) { - gtk_window_resize (GTK_WINDOW (dock->_priv->window), - dock->_priv->width, - dock->_priv->height); - } - break; - } -} - -static void -gdl_dock_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlDock *dock = GDL_DOCK (object); - - switch (prop_id) { - case PROP_FLOATING: - g_value_set_boolean (value, dock->_priv->floating); - break; - case PROP_DEFAULT_TITLE: - if (GDL_DOCK_OBJECT (object)->master) { - gchar *default_title; - g_object_get (GDL_DOCK_OBJECT (object)->master, - "default-title", &default_title, - NULL); -#if GLIB_CHECK_VERSION(2,3,0) - g_value_take_string (value, default_title); -#else - g_value_set_string_take_ownership (value, default_title); -#endif - } - else - g_value_set_string (value, NULL); - break; - case PROP_WIDTH: - g_value_set_int (value, dock->_priv->width); - break; - case PROP_HEIGHT: - g_value_set_int (value, dock->_priv->height); - break; - case PROP_FLOAT_X: - g_value_set_int (value, dock->_priv->float_x); - break; - case PROP_FLOAT_Y: - g_value_set_int (value, dock->_priv->float_y); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_dock_set_title (GdlDock *dock) -{ - GdlDockObject *object = GDL_DOCK_OBJECT (dock); - gchar *title = NULL; - - if (!dock->_priv->window) - return; - - if (!dock->_priv->auto_title && object->long_name) { - title = object->long_name; - } - else if (object->master) { - g_object_get (object->master, "default-title", &title, NULL); - } - - if (!title && dock->root) { - g_object_get (dock->root, "long-name", &title, NULL); - } - - if (!title) { - /* set a default title in the long_name */ - dock->_priv->auto_title = TRUE; - title = g_strdup_printf ( - _("Dock #%d"), GDL_DOCK_MASTER (object->master)->dock_number++); - } - - gtk_window_set_title (GTK_WINDOW (dock->_priv->window), title); - - g_free (title); -} - -static void -gdl_dock_notify_cb (GObject *object, - GParamSpec *pspec, - gpointer user_data) -{ - GdlDock *dock; - gchar* long_name; - - g_return_if_fail (object != NULL || GDL_IS_DOCK (object)); - - g_object_get (object, "long-name", &long_name, NULL); - - if (long_name) - { - dock = GDL_DOCK (object); - dock->_priv->auto_title = FALSE; - gdl_dock_set_title (dock); - } - g_free (long_name); -} - -static void -gdl_dock_destroy (GtkObject *object) -{ - GdlDock *dock = GDL_DOCK (object); - - if (dock->_priv) { - GdlDockPrivate *priv = dock->_priv; - dock->_priv = NULL; - - if (priv->window) { - gtk_widget_destroy (priv->window); - priv->floating = FALSE; - priv->window = NULL; - } - - /* destroy the xor gc */ - if (priv->xor_gc) { - g_object_unref (priv->xor_gc); - priv->xor_gc = NULL; - } - - g_free (priv); - } - - GTK_OBJECT_CLASS (gdl_dock_parent_class)->destroy (object); -} - -static void -gdl_dock_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GdlDock *dock; - GtkContainer *container; - guint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - container = GTK_CONTAINER (widget); - border_width = gtk_container_get_border_width (container); - - /* make request to root */ - if (dock->root && gtk_widget_get_visible (GTK_WIDGET (dock->root))) - gtk_widget_size_request (GTK_WIDGET (dock->root), requisition); - else { - requisition->width = 0; - requisition->height = 0; - }; - - requisition->width += 2 * border_width; - requisition->height += 2 * border_width; - - //gtk_widget_size_request (widget, requisition); -} - -static void -gdl_dock_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GdlDock *dock; - GtkContainer *container; - guint border_width; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - container = GTK_CONTAINER (widget); - border_width = gtk_container_get_border_width (container); - - gtk_widget_set_allocation (widget, allocation); - - /* reduce allocation by border width */ - allocation->x += border_width; - allocation->y += border_width; - allocation->width = MAX (1, allocation->width - 2 * border_width); - allocation->height = MAX (1, allocation->height - 2 * border_width); - - if (dock->root && gtk_widget_get_visible (GTK_WIDGET (dock->root))) - gtk_widget_size_allocate (GTK_WIDGET (dock->root), allocation); -} - -static void -gdl_dock_map (GtkWidget *widget) -{ - GtkWidget *child; - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->map (widget); - - if (dock->root) { - child = GTK_WIDGET (dock->root); - if (gtk_widget_get_visible (child) && !gtk_widget_get_mapped (child)) - gtk_widget_map (child); - } -} - -static void -gdl_dock_unmap (GtkWidget *widget) -{ - GtkWidget *child; - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - dock = GDL_DOCK (widget); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->unmap (widget); - - if (dock->root) { - child = GTK_WIDGET (dock->root); - if (gtk_widget_get_visible (child) && gtk_widget_get_mapped (child)) - gtk_widget_unmap (child); - } - - if (dock->_priv->window) - gtk_widget_unmap (dock->_priv->window); -} - -static void -gdl_dock_foreach_automatic (GdlDockObject *object, - gpointer user_data) -{ - void (* function) (GtkWidget *) = user_data; - - if (GDL_DOCK_OBJECT_AUTOMATIC (object)) - (* function) (GTK_WIDGET (object)); -} - -static void -gdl_dock_show (GtkWidget *widget) -{ - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->show (widget); - - dock = GDL_DOCK (widget); - if (dock->_priv->floating && dock->_priv->window) - gtk_widget_show (dock->_priv->window); - - if (GDL_DOCK_IS_CONTROLLER (dock)) { - gdl_dock_master_foreach_toplevel (GDL_DOCK_OBJECT_GET_MASTER (dock), - FALSE, (GFunc) gdl_dock_foreach_automatic, - gtk_widget_show); - } -} - -static void -gdl_dock_hide (GtkWidget *widget) -{ - GdlDock *dock; - - g_return_if_fail (widget != NULL); - g_return_if_fail (GDL_IS_DOCK (widget)); - - GTK_WIDGET_CLASS (gdl_dock_parent_class)->hide (widget); - - dock = GDL_DOCK (widget); - if (dock->_priv->floating && dock->_priv->window) - gtk_widget_hide (dock->_priv->window); - - if (GDL_DOCK_IS_CONTROLLER (dock)) { - gdl_dock_master_foreach_toplevel (GDL_DOCK_OBJECT_GET_MASTER (dock), - FALSE, (GFunc) gdl_dock_foreach_automatic, - gtk_widget_hide); - } -} - -static void -gdl_dock_add (GtkContainer *container, - GtkWidget *widget) -{ - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK (container)); - g_return_if_fail (GDL_IS_DOCK_ITEM (widget)); - - gdl_dock_add_item (GDL_DOCK (container), - GDL_DOCK_ITEM (widget), - GDL_DOCK_TOP); /* default position */ -} - -static void -gdl_dock_remove (GtkContainer *container, - GtkWidget *widget) -{ - GdlDock *dock; - gboolean was_visible; - - g_return_if_fail (container != NULL); - g_return_if_fail (widget != NULL); - - dock = GDL_DOCK (container); - was_visible = gtk_widget_get_visible (widget); - - if (GTK_WIDGET (dock->root) == widget) { - dock->root = NULL; - GDL_DOCK_OBJECT_UNSET_FLAGS (widget, GDL_DOCK_ATTACHED); - gtk_widget_unparent (widget); - - if (was_visible && gtk_widget_get_visible (GTK_WIDGET (container))) - gtk_widget_queue_resize (GTK_WIDGET (dock)); - } -} - -static void -gdl_dock_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GdlDock *dock; - - g_return_if_fail (container != NULL); - g_return_if_fail (GDL_IS_DOCK (container)); - g_return_if_fail (callback != NULL); - - dock = GDL_DOCK (container); - - if (dock->root) - (*callback) (GTK_WIDGET (dock->root), callback_data); -} - -static GType -gdl_dock_child_type (GtkContainer *container) -{ - return GDL_TYPE_DOCK_ITEM; -} - -static void -gdl_dock_detach (GdlDockObject *object, - gboolean recursive) -{ - GdlDock *dock = GDL_DOCK (object); - - /* detach children */ - if (recursive && dock->root) { - gdl_dock_object_detach (dock->root, recursive); - } - GDL_DOCK_OBJECT_UNSET_FLAGS (object, GDL_DOCK_ATTACHED); -} - -static void -gdl_dock_reduce (GdlDockObject *object) -{ - GdlDock *dock = GDL_DOCK (object); - GtkWidget *parent; - - if (dock->root) - return; - - if (GDL_DOCK_OBJECT_AUTOMATIC (dock)) { - gtk_widget_destroy (GTK_WIDGET (dock)); - - } else if (!GDL_DOCK_OBJECT_ATTACHED (dock)) { - /* if the user explicitly detached the object */ - if (dock->_priv->floating) - gtk_widget_hide (GTK_WIDGET (dock)); - else { - GtkWidget *widget = GTK_WIDGET (object); - parent = gtk_widget_get_parent (widget); - if (parent) - gtk_container_remove (GTK_CONTAINER (parent), widget); - } - } -} - -static gboolean -gdl_dock_dock_request (GdlDockObject *object, - gint x, - gint y, - GdlDockRequest *request) -{ - GdlDock *dock; - guint bw; - gint rel_x, rel_y; - GtkAllocation alloc; - gboolean may_dock = FALSE; - GdlDockRequest my_request; - - g_return_val_if_fail (GDL_IS_DOCK (object), FALSE); - - /* we get (x,y) in our allocation coordinates system */ - - dock = GDL_DOCK (object); - - /* Get dock size. */ - gtk_widget_get_allocation (GTK_WIDGET (dock), &alloc); - bw = gtk_container_get_border_width (GTK_CONTAINER (dock)); - - /* Get coordinates relative to our allocation area. */ - rel_x = x - alloc.x; - rel_y = y - alloc.y; - - if (request) - my_request = *request; - - /* Check if coordinates are in GdlDock widget. */ - if (rel_x > 0 && rel_x < alloc.width && - rel_y > 0 && rel_y < alloc.height) { - - /* It's inside our area. */ - may_dock = TRUE; - - /* Set docking indicator rectangle to the GdlDock size. */ - my_request.rect.x = alloc.x + bw; - my_request.rect.y = alloc.y + bw; - my_request.rect.width = alloc.width - 2*bw; - my_request.rect.height = alloc.height - 2*bw; - - /* If GdlDock has no root item yet, set the dock itself as - possible target. */ - if (!dock->root) { - my_request.position = GDL_DOCK_TOP; - my_request.target = object; - } else { - my_request.target = dock->root; - - /* See if it's in the border_width band. */ - if (rel_x < (gint)bw) { - my_request.position = GDL_DOCK_LEFT; - my_request.rect.width *= SPLIT_RATIO; - } else if (rel_x > alloc.width - (gint)bw) { - my_request.position = GDL_DOCK_RIGHT; - my_request.rect.x += my_request.rect.width * (1 - SPLIT_RATIO); - my_request.rect.width *= SPLIT_RATIO; - } else if (rel_y < (gint)bw) { - my_request.position = GDL_DOCK_TOP; - my_request.rect.height *= SPLIT_RATIO; - } else if (rel_y > alloc.height - (gint)bw) { - my_request.position = GDL_DOCK_BOTTOM; - my_request.rect.y += my_request.rect.height * (1 - SPLIT_RATIO); - my_request.rect.height *= SPLIT_RATIO; - } else { - /* Otherwise try our children. */ - /* give them allocation coordinates (we are a - GTK_NO_WINDOW) widget */ - may_dock = gdl_dock_object_dock_request (GDL_DOCK_OBJECT (dock->root), - x, y, &my_request); - } - } - } - - if (may_dock && request) - *request = my_request; - - return may_dock; -} - -static void -gdl_dock_dock (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement position, - GValue *user_data) -{ - GdlDock *dock; - - g_return_if_fail (GDL_IS_DOCK (object)); - /* only dock items allowed at this time */ - g_return_if_fail (GDL_IS_DOCK_ITEM (requestor)); - - dock = GDL_DOCK (object); - - if (position == GDL_DOCK_FLOATING) { - GdlDockItem *item = GDL_DOCK_ITEM (requestor); - gint x, y, width, height; - - if (user_data && G_VALUE_HOLDS (user_data, GDK_TYPE_RECTANGLE)) { - GdkRectangle *rect; - - rect = g_value_get_boxed (user_data); - x = rect->x; - y = rect->y; - width = rect->width; - height = rect->height; - } - else { - x = y = 0; - width = height = -1; - } - - gdl_dock_add_floating_item (dock, item, - x, y, width, height); - } - else if (dock->root) { - /* This is somewhat a special case since we know which item to - pass the request on because we only have on child */ - gdl_dock_object_dock (dock->root, requestor, position, NULL); - gdl_dock_set_title (dock); - - } - else { /* Item about to be added is root item. */ - GtkWidget *widget = GTK_WIDGET (requestor); - - dock->root = requestor; - GDL_DOCK_OBJECT_SET_FLAGS (requestor, GDL_DOCK_ATTACHED); - gtk_widget_set_parent (widget, GTK_WIDGET (dock)); - - gdl_dock_item_show_grip (GDL_DOCK_ITEM (requestor)); - - /* Realize the item (create its corresponding GdkWindow) when - GdlDock has been realized. */ - if (gtk_widget_get_realized (GTK_WIDGET (dock))) - gtk_widget_realize (widget); - - /* Map the widget if it's visible and the parent is visible and has - been mapped. This is done to make sure that the GdkWindow is - visible. */ - if (gtk_widget_get_visible (GTK_WIDGET (dock)) && - gtk_widget_get_visible (widget)) { - if (gtk_widget_get_mapped (GTK_WIDGET (dock))) - gtk_widget_map (widget); - - /* Make the widget resize. */ - gtk_widget_queue_resize (widget); - } - gdl_dock_set_title (dock); - } -} - -static gboolean -gdl_dock_floating_window_delete_event_cb (GtkWidget *widget) -{ - GdlDock *dock; - - g_return_val_if_fail (GTK_IS_WINDOW (widget), FALSE); - - dock = GDL_DOCK (g_object_get_data (G_OBJECT (widget), "dock")); - if (dock->root) { - /* this will call reduce on ourselves, hiding the window if appropiate */ - gdl_dock_item_hide_item (GDL_DOCK_ITEM (dock->root)); - } - - return TRUE; -} - -static void -_gdl_dock_foreach_build_list (GdlDockObject *object, - gpointer user_data) -{ - GList **l = (GList **) user_data; - - if (GDL_IS_DOCK_ITEM (object)) - *l = g_list_prepend (*l, object); -} - -static gboolean -gdl_dock_reorder (GdlDockObject *object, - GdlDockObject *requestor, - GdlDockPlacement new_position, - GValue *other_data) -{ - GdlDock *dock = GDL_DOCK (object); - gboolean handled = FALSE; - - if (dock->_priv->floating && - new_position == GDL_DOCK_FLOATING && - dock->root == requestor) { - - if (other_data && G_VALUE_HOLDS (other_data, GDK_TYPE_RECTANGLE)) { - GdkRectangle *rect; - - rect = g_value_get_boxed (other_data); - gtk_window_move (GTK_WINDOW (dock->_priv->window), - rect->x, - rect->y); - handled = TRUE; - } - } - - return handled; -} - -static gboolean -gdl_dock_child_placement (GdlDockObject *object, - GdlDockObject *child, - GdlDockPlacement *placement) -{ - GdlDock *dock = GDL_DOCK (object); - gboolean retval = TRUE; - - if (dock->root == child) { - if (placement) { - if (*placement == GDL_DOCK_NONE || *placement == GDL_DOCK_FLOATING) - *placement = GDL_DOCK_TOP; - } - } else - retval = FALSE; - - return retval; -} - -static void -gdl_dock_present (GdlDockObject *object, - GdlDockObject *child) -{ - GdlDock *dock = GDL_DOCK (object); - - if (dock->_priv->floating) - gtk_window_present (GTK_WINDOW (dock->_priv->window)); -} - - -/* ----- Public interface ----- */ - -GtkWidget * -gdl_dock_new (void) -{ - GObject *dock; - - dock = g_object_new (GDL_TYPE_DOCK, NULL); - GDL_DOCK_OBJECT_UNSET_FLAGS (dock, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (dock); -} - -GtkWidget * -gdl_dock_new_from (GdlDock *original, - gboolean floating) -{ - GObject *new_dock; - - g_return_val_if_fail (original != NULL, NULL); - - new_dock = g_object_new (GDL_TYPE_DOCK, - "master", GDL_DOCK_OBJECT_GET_MASTER (original), - "floating", floating, - NULL); - GDL_DOCK_OBJECT_UNSET_FLAGS (new_dock, GDL_DOCK_AUTOMATIC); - - return GTK_WIDGET (new_dock); -} - -/* Depending on where the dock item (where new item will be docked) locates - * in the dock, we might need to change the docking placement. If the - * item is does not touches the center of dock, the new-item-to-dock would - * require a center dock on this item. - */ -static GdlDockPlacement -gdl_dock_refine_placement (GdlDock *dock, GdlDockItem *dock_item, - GdlDockPlacement placement) -{ - GtkAllocation allocation; - GtkRequisition object_size; - - gdl_dock_item_preferred_size (dock_item, &object_size); - gtk_widget_get_allocation (GTK_WIDGET (dock), &allocation); - - g_return_val_if_fail (allocation.width > 0, placement); - g_return_val_if_fail (allocation.height > 0, placement); - g_return_val_if_fail (object_size.width > 0, placement); - g_return_val_if_fail (object_size.height > 0, placement); - - if (placement == GDL_DOCK_LEFT || placement == GDL_DOCK_RIGHT) { - /* Check if dock_object touches center in terms of width */ - if (allocation.width/2 > object_size.width) { - return GDL_DOCK_CENTER; - } - } else if (placement == GDL_DOCK_TOP || placement == GDL_DOCK_BOTTOM) { - /* Check if dock_object touches center in terms of height */ - if (allocation.height/2 > object_size.height) { - return GDL_DOCK_CENTER; - } - } - return placement; -} - -/* Determines the larger item of the two based on the placement: - * for left/right placement, height determines it. - * for top/bottom placement, width determines it. - * for center placement, area determines it. - */ -static GdlDockItem* -gdl_dock_select_larger_item (GdlDockItem *dock_item_1, - GdlDockItem *dock_item_2, - GdlDockPlacement placement, - gint level /* for debugging */) -{ - GtkRequisition size_1, size_2; - - g_return_val_if_fail (dock_item_1 != NULL, dock_item_2); - g_return_val_if_fail (dock_item_2 != NULL, dock_item_1); - - gdl_dock_item_preferred_size (dock_item_1, &size_1); - gdl_dock_item_preferred_size (dock_item_2, &size_2); - - g_return_val_if_fail (size_1.width > 0, dock_item_2); - g_return_val_if_fail (size_1.height > 0, dock_item_2); - g_return_val_if_fail (size_2.width > 0, dock_item_1); - g_return_val_if_fail (size_2.height > 0, dock_item_1); - - if (placement == GDL_DOCK_LEFT || placement == GDL_DOCK_RIGHT) - { - /* For left/right placement, height is what matters */ - return (size_1.height >= size_2.height? - dock_item_1 : dock_item_2); - } else if (placement == GDL_DOCK_TOP || placement == GDL_DOCK_BOTTOM) - { - /* For top/bottom placement, width is what matters */ - return (size_1.width >= size_2.width? - dock_item_1 : dock_item_2); - } else if (placement == GDL_DOCK_CENTER) { - /* For center place, area is what matters */ - return ((size_1.width * size_1.height) - >= (size_2.width * size_2.height)? - dock_item_1 : dock_item_2); - } else if (placement == GDL_DOCK_NONE) { - return dock_item_1; - } else { - g_warning ("Should not reach here: %s:%d", __FUNCTION__, __LINE__); - } - return dock_item_1; -} - -/* Determines the best dock item to dock a new item with the given placement. - * It traverses the dock tree and (based on the placement) tries to find - * the best located item wrt to the placement. The approach is to find the - * largest item on/around the placement side (for side placements) and to - * find the largest item for center placement. In most situations, this is - * what user wants and the heuristic should be therefore sufficient. - */ -static GdlDockItem* -gdl_dock_find_best_placement_item (GdlDockItem *dock_item, - GdlDockPlacement placement, - gint level /* for debugging */) -{ - GdlDockItem *ret_item = NULL; - - if (GDL_IS_DOCK_PANED (dock_item)) - { - GtkOrientation orientation; - GdlDockItem *dock_item_1, *dock_item_2; - GList* children; - - children = gtk_container_get_children (GTK_CONTAINER (dock_item)); - - g_assert (g_list_length (children) == 2); - - g_object_get (dock_item, "orientation", &orientation, NULL); - if ((orientation == GTK_ORIENTATION_HORIZONTAL && - placement == GDL_DOCK_LEFT) || - (orientation == GTK_ORIENTATION_VERTICAL && - placement == GDL_DOCK_TOP)) { - /* Return left or top pane widget */ - ret_item = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->data), - placement, level + 1); - } else if ((orientation == GTK_ORIENTATION_HORIZONTAL && - placement == GDL_DOCK_RIGHT) || - (orientation == GTK_ORIENTATION_VERTICAL && - placement == GDL_DOCK_BOTTOM)) { - /* Return right or top pane widget */ - ret_item = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->next->data), - placement, level + 1); - } else { - /* Evaluate which of the two sides is bigger */ - dock_item_1 = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->data), - placement, level + 1); - dock_item_2 = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM - (children->next->data), - placement, level + 1); - ret_item = gdl_dock_select_larger_item (dock_item_1, - dock_item_2, - placement, level); - } - g_list_free (children); - } - else if (GDL_IS_DOCK_ITEM (dock_item)) - { - ret_item = dock_item; - } - else - { - /* should not be here */ - g_warning ("Should not reach here: %s:%d", __FUNCTION__, __LINE__); - } - return ret_item; -} - -void -gdl_dock_add_item (GdlDock *dock, - GdlDockItem *item, - GdlDockPlacement placement) -{ - g_return_if_fail (dock != NULL); - g_return_if_fail (item != NULL); - - if (placement == GDL_DOCK_FLOATING) - /* Add the item to a new floating dock */ - gdl_dock_add_floating_item (dock, item, 0, 0, -1, -1); - - else { - GdlDockItem *best_dock_item; - /* Non-floating item. */ - if (dock->root) { - GdlDockPlacement local_placement; - - best_dock_item = - gdl_dock_find_best_placement_item (GDL_DOCK_ITEM (dock->root), - placement, 0); - local_placement = gdl_dock_refine_placement (dock, best_dock_item, - placement); - gdl_dock_object_dock (GDL_DOCK_OBJECT (best_dock_item), - GDL_DOCK_OBJECT (item), - local_placement, NULL); - } else { - gdl_dock_object_dock (GDL_DOCK_OBJECT (dock), - GDL_DOCK_OBJECT (item), - placement, NULL); - } - } -} - -void -gdl_dock_add_floating_item (GdlDock *dock, - GdlDockItem *item, - gint x, - gint y, - gint width, - gint height) -{ - GdlDock *new_dock; - - g_return_if_fail (dock != NULL); - g_return_if_fail (item != NULL); - - new_dock = GDL_DOCK (g_object_new (GDL_TYPE_DOCK, - "master", GDL_DOCK_OBJECT_GET_MASTER (dock), - "floating", TRUE, - "width", width, - "height", height, - "floatx", x, - "floaty", y, - NULL)); - - if (gtk_widget_get_visible (GTK_WIDGET (dock))) { - gtk_widget_show (GTK_WIDGET (new_dock)); - if (gtk_widget_get_mapped (GTK_WIDGET (dock))) - gtk_widget_map (GTK_WIDGET (new_dock)); - - /* Make the widget resize. */ - gtk_widget_queue_resize (GTK_WIDGET (new_dock)); - } - - gdl_dock_add_item (GDL_DOCK (new_dock), item, GDL_DOCK_TOP); -} - -GdlDockItem * -gdl_dock_get_item_by_name (GdlDock *dock, - const gchar *name) -{ - GdlDockObject *found; - - g_return_val_if_fail (dock != NULL && name != NULL, NULL); - - /* proxy the call to our master */ - found = gdl_dock_master_get_object (GDL_DOCK_OBJECT_GET_MASTER (dock), name); - - return (found && GDL_IS_DOCK_ITEM (found)) ? GDL_DOCK_ITEM (found) : NULL; -} - -GdlDockPlaceholder * -gdl_dock_get_placeholder_by_name (GdlDock *dock, - const gchar *name) -{ - GdlDockObject *found; - - g_return_val_if_fail (dock != NULL && name != NULL, NULL); - - /* proxy the call to our master */ - found = gdl_dock_master_get_object (GDL_DOCK_OBJECT_GET_MASTER (dock), name); - - return (found && GDL_IS_DOCK_PLACEHOLDER (found)) ? - GDL_DOCK_PLACEHOLDER (found) : NULL; -} - -GList * -gdl_dock_get_named_items (GdlDock *dock) -{ - GList *list = NULL; - - g_return_val_if_fail (dock != NULL, NULL); - - gdl_dock_master_foreach (GDL_DOCK_OBJECT_GET_MASTER (dock), - (GFunc) _gdl_dock_foreach_build_list, &list); - - return list; -} - -GdlDock * -gdl_dock_object_get_toplevel (GdlDockObject *object) -{ - GdlDockObject *parent = object; - - g_return_val_if_fail (object != NULL, NULL); - - while (parent && !GDL_IS_DOCK (parent)) - parent = gdl_dock_object_get_parent_object (parent); - - return parent ? GDL_DOCK (parent) : NULL; -} - -void -gdl_dock_xor_rect (GdlDock *dock, - GdkRectangle *rect) -{ - GtkWidget *widget; - GdkWindow *window; - gint8 dash_list [2]; - - widget = GTK_WIDGET (dock); - - if (!dock->_priv->xor_gc) { - if (gtk_widget_get_realized (widget)) { - GdkGCValues values; - - values.function = GDK_INVERT; - values.subwindow_mode = GDK_INCLUDE_INFERIORS; - dock->_priv->xor_gc = gdk_gc_new_with_values - (gtk_widget_get_window (widget), &values, GDK_GC_FUNCTION | GDK_GC_SUBWINDOW); - } else - return; - }; - - gdk_gc_set_line_attributes (dock->_priv->xor_gc, 1, - GDK_LINE_ON_OFF_DASH, - GDK_CAP_NOT_LAST, - GDK_JOIN_BEVEL); - - window = gtk_widget_get_window (widget); - - dash_list [0] = 1; - dash_list [1] = 1; - - gdk_gc_set_dashes (dock->_priv->xor_gc, 1, dash_list, 2); - - gdk_draw_rectangle (window, dock->_priv->xor_gc, FALSE, - rect->x, rect->y, - rect->width, rect->height); - - gdk_gc_set_dashes (dock->_priv->xor_gc, 0, dash_list, 2); - - gdk_draw_rectangle (window, dock->_priv->xor_gc, FALSE, - rect->x + 1, rect->y + 1, - rect->width - 2, rect->height - 2); -} diff --git a/src/libgdl/gdl-dock.h b/src/libgdl/gdl-dock.h deleted file mode 100644 index 2259d395d..000000000 --- a/src/libgdl/gdl-dock.h +++ /dev/null @@ -1,99 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 2002 Gustavo Giráldez - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_DOCK_H__ -#define __GDL_DOCK_H__ - -#include -#include "libgdl/gdl-dock-object.h" -#include "libgdl/gdl-dock-item.h" -#include "libgdl/gdl-dock-placeholder.h" - -G_BEGIN_DECLS - -/* standard macros */ -#define GDL_TYPE_DOCK (gdl_dock_get_type ()) -#define GDL_DOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_DOCK, GdlDock)) -#define GDL_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_DOCK, GdlDockClass)) -#define GDL_IS_DOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_DOCK)) -#define GDL_IS_DOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDL_TYPE_DOCK)) -#define GDL_DOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_DOCK, GdlDockClass)) - -/* data types & structures */ -typedef struct _GdlDock GdlDock; -typedef struct _GdlDockClass GdlDockClass; -typedef struct _GdlDockPrivate GdlDockPrivate; - -struct _GdlDock { - GdlDockObject object; - - GdlDockObject *root; - - GdlDockPrivate *_priv; -}; - -struct _GdlDockClass { - GdlDockObjectClass parent_class; - - void (* layout_changed) (GdlDock *dock); /* proxy signal for the master */ -}; - -/* additional macros */ -#define GDL_DOCK_IS_CONTROLLER(dock) \ - (gdl_dock_master_get_controller (GDL_DOCK_OBJECT_GET_MASTER (dock)) == \ - GDL_DOCK_OBJECT (dock)) - -/* public interface */ - -GtkWidget *gdl_dock_new (void); - -GtkWidget *gdl_dock_new_from (GdlDock *original, - gboolean floating); - -GType gdl_dock_get_type (void); - -void gdl_dock_add_item (GdlDock *dock, - GdlDockItem *item, - GdlDockPlacement place); - -void gdl_dock_add_floating_item (GdlDock *dock, - GdlDockItem *item, - gint x, - gint y, - gint width, - gint height); - -GdlDockItem *gdl_dock_get_item_by_name (GdlDock *dock, - const gchar *name); - -GdlDockPlaceholder *gdl_dock_get_placeholder_by_name (GdlDock *dock, - const gchar *name); - -GList *gdl_dock_get_named_items (GdlDock *dock); - -GdlDock *gdl_dock_object_get_toplevel (GdlDockObject *object); - -void gdl_dock_xor_rect (GdlDock *dock, - GdkRectangle *rect); - -G_END_DECLS - -#endif diff --git a/src/libgdl/gdl-i18n.c b/src/libgdl/gdl-i18n.c deleted file mode 100644 index 5f92b66c7..000000000 --- a/src/libgdl/gdl-i18n.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation - * All rights reserved. - * - * This file is part of the Gnome Devtools Library. - * - * The Gnome Devtools Library is free software; you can redistribute - * it and/or modify it under the terms of the GNU Library General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * The Gnome Devtools Library is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "gdl-i18n.h" - -char * -gdl_gettext (const char *msgid) -{ - static gboolean initialized = FALSE; - - if (!initialized) { -/* bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); */ - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - initialized = TRUE; - } - - return dgettext (GETTEXT_PACKAGE, msgid); -} - - diff --git a/src/libgdl/gdl-i18n.h b/src/libgdl/gdl-i18n.h deleted file mode 100644 index 1582e957d..000000000 --- a/src/libgdl/gdl-i18n.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation - * All rights reserved. - * - * This file is part of the Gnome Devtools Library. - * - * The Gnome Devtools Library is free software; you can redistribute - * it and/or modify it under the terms of the GNU Library General - * Public License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * The Gnome Devtools Library is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with the Gnome Library; see the file COPYING.LIB. If not, - * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ -/* - @NOTATION@ - */ - -/* - * Handles all of the internationalization configuration options. - * Author: Tom Tromey - */ - -#ifndef __GDL_18N_H__ -#define __GDL_18N_H__ 1 - -#include - - -G_BEGIN_DECLS - -#ifdef ENABLE_NLS -# include -# undef _ -# define _(String) gdl_gettext (String) -# ifdef gettext_noop -# define N_(String) gettext_noop (String) -# else -# define N_(String) (String) -# endif -#else -/* Stubs that do something close enough. */ -# undef textdomain -# define textdomain(String) (String) -# undef gettext -# define gettext(String) (String) -# undef dgettext -# define dgettext(Domain,Message) (Message) -# undef dcgettext -# define dcgettext(Domain,Message,Type) (Message) -# undef bindtextdomain -# define bindtextdomain(Domain,Directory) (Domain) -# undef bind_textdomain_codeset -# define bind_textdomain_codeset(Domain,CodeSet) (Domain) -# undef _ -# define _(String) (String) -# undef N_ -# define N_(String) (String) -#endif - -char *gdl_gettext (const char *msgid); - -G_END_DECLS - -#endif /* __GDL_I18N_H__ */ diff --git a/src/libgdl/gdl-switcher.c b/src/libgdl/gdl-switcher.c deleted file mode 100644 index 53a4b1989..000000000 --- a/src/libgdl/gdl-switcher.c +++ /dev/null @@ -1,1031 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* gdl-switcher.c - * - * Copyright (C) 2003 Ettore Perazzoli, - * 2007 Naba Kumar - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - * Copied and adapted from ESidebar.[ch] from evolution - * - * Authors: Ettore Perazzoli - * Naba Kumar - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gdl-i18n.h" -#include "gdl-switcher.h" -#include "libgdlmarshal.h" -#include "libgdltypebuiltins.h" - -#include - -static void gdl_switcher_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gdl_switcher_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); - -static void gdl_switcher_add_button (GdlSwitcher *switcher, - const gchar *label, - const gchar *tooltips, - const gchar *stock_id, - GdkPixbuf *pixbuf_icon, - gint switcher_id, - GtkWidget *page); -/* static void gdl_switcher_remove_button (GdlSwitcher *switcher, gint switcher_id); */ -static void gdl_switcher_select_page (GdlSwitcher *switcher, gint switcher_id); -static void gdl_switcher_select_button (GdlSwitcher *switcher, gint switcher_id); -static void gdl_switcher_set_show_buttons (GdlSwitcher *switcher, gboolean show); -static void gdl_switcher_set_style (GdlSwitcher *switcher, - GdlSwitcherStyle switcher_style); -static GdlSwitcherStyle gdl_switcher_get_style (GdlSwitcher *switcher); - -enum { - PROP_0, - PROP_SWITCHER_STYLE -}; - -typedef struct { - GtkWidget *button_widget; - GtkWidget *label; - GtkWidget *icon; - GtkWidget *arrow; - GtkWidget *hbox; - GtkWidget *page; - int id; -} Button; - -struct _GdlSwitcherPrivate { - GdlSwitcherStyle switcher_style; - GdlSwitcherStyle toolbar_style; - - gboolean show; - GSList *buttons; - - guint style_changed_id; - gint buttons_height_request; - gboolean in_toggle; -}; - -G_DEFINE_TYPE (GdlSwitcher, gdl_switcher, GTK_TYPE_NOTEBOOK) - -#define INTERNAL_MODE(switcher) (switcher->priv->switcher_style == \ - GDL_SWITCHER_STYLE_TOOLBAR ? switcher->priv->toolbar_style : \ - switcher->priv->switcher_style) - -#define H_PADDING 2 -#define V_PADDING 2 - -/* Utility functions. */ - -static void -gdl_switcher_long_name_changed (GObject* object, - GParamSpec* spec, - gpointer user_data) -{ - Button* button = user_data; - gchar* label; - - g_object_get (object, "long-name", &label, NULL); - gtk_label_set_text (GTK_LABEL (button->label), label); - g_free (label); -} - -static void -gdl_switcher_stock_id_changed (GObject* object, - GParamSpec* spec, - gpointer user_data) -{ - Button* button = user_data; - gchar* id; - - g_object_get (object, "stock-id", &id, NULL); - gtk_image_set_from_stock (GTK_IMAGE(button->icon), id, GTK_ICON_SIZE_MENU); - g_free (id); -} - - -static Button * -button_new (GtkWidget *button_widget, GtkWidget *label, GtkWidget *icon, - GtkWidget *arrow, GtkWidget *hbox, int id, GtkWidget *page) -{ - Button *button = g_new (Button, 1); - - button->button_widget = button_widget; - button->label = label; - button->icon = icon; - button->arrow = arrow; - button->hbox = hbox; - button->id = id; - button->page = page; - - g_signal_connect (page, "notify::long-name", G_CALLBACK (gdl_switcher_long_name_changed), - button); - g_signal_connect (page, "notify::stock-id", G_CALLBACK (gdl_switcher_stock_id_changed), - button); - - g_object_ref (button_widget); - g_object_ref (label); - g_object_ref (icon); - g_object_ref (arrow); - g_object_ref (hbox); - - return button; -} - -static void -button_free (Button *button) -{ - g_signal_handlers_disconnect_by_func (button->page, - gdl_switcher_long_name_changed, - button); - g_signal_handlers_disconnect_by_func (button->page, - gdl_switcher_stock_id_changed, - button); - - g_object_unref (button->button_widget); - g_object_unref (button->label); - g_object_unref (button->icon); - g_object_unref (button->hbox); - g_free (button); -} - -static gint -gdl_switcher_get_page_id (GtkWidget *widget) -{ - static gint switcher_id_count = 0; - gint switcher_id; - switcher_id = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), - "__switcher_id")); - if (switcher_id <= 0) { - switcher_id = ++switcher_id_count; - g_object_set_data (G_OBJECT (widget), "__switcher_id", - GINT_TO_POINTER (switcher_id)); - } - return switcher_id; -} - -static void -update_buttons (GdlSwitcher *switcher, int new_selected_id) -{ - GSList *p; - - switcher->priv->in_toggle = TRUE; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->id == new_selected_id) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), TRUE); - gtk_widget_set_sensitive (button->arrow, TRUE); - } else { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), FALSE); - gtk_widget_set_sensitive (button->arrow, FALSE); - } - } - - switcher->priv->in_toggle = FALSE; -} - -/* Callbacks. */ - -static void -button_toggled_callback (GtkToggleButton *toggle_button, - GdlSwitcher *switcher) -{ - int id = 0; - gboolean is_active = FALSE; - GSList *p; - - if (switcher->priv->in_toggle) - return; - - switcher->priv->in_toggle = TRUE; - - if (gtk_toggle_button_get_active (toggle_button)) - is_active = TRUE; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->button_widget != GTK_WIDGET (toggle_button)) { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), FALSE); - gtk_widget_set_sensitive (button->arrow, FALSE); - } else { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (button->button_widget), TRUE); - gtk_widget_set_sensitive (button->arrow, TRUE); - id = button->id; - } - } - - switcher->priv->in_toggle = FALSE; - - if (is_active) - { - gdl_switcher_select_page (switcher, id); - } -} - -/* Returns -1 if layout didn't happen because a resize request was queued */ -static int -layout_buttons (GdlSwitcher *switcher) -{ - GtkRequisition client_requisition = {0,0}; - GtkAllocation allocation; - GdlSwitcherStyle switcher_style; - gboolean icons_only; - int num_btns = g_slist_length (switcher->priv->buttons); - unsigned int btns_per_row; - GSList **rows, *p; - Button *button; - int row_number; - int max_btn_width = 0, max_btn_height = 0; - int optimal_layout_width = 0; - int row_last; - int x, y; - int i; - int rows_count; - int last_buttons_height; - - gtk_widget_get_allocation (GTK_WIDGET (switcher), &allocation); - - last_buttons_height = switcher->priv->buttons_height_request; - - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->size_request (GTK_WIDGET (switcher), &client_requisition); - - y = allocation.y + allocation.height - V_PADDING - 1; - - if (num_btns == 0) - return y; - - switcher_style = INTERNAL_MODE (switcher); - icons_only = (switcher_style == GDL_SWITCHER_STYLE_ICON); - - /* Figure out the max width and height */ - optimal_layout_width = H_PADDING; - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkRequisition requisition; - - button = p->data; - gtk_widget_size_request (GTK_WIDGET (button->button_widget), - &requisition); - optimal_layout_width += requisition.width + H_PADDING; - max_btn_height = MAX (max_btn_height, requisition.height); - max_btn_width = MAX (max_btn_width, requisition.width); - } - - /* Figure out how many rows and columns we'll use. */ - btns_per_row = allocation.width / (max_btn_width + H_PADDING); - /* Use at least one column */ - if (btns_per_row == 0) btns_per_row = 1; - - /* If all the buttons could fit in the single row, have it so */ - if (allocation.width >= optimal_layout_width) - { - btns_per_row = num_btns; - } - if (!icons_only) { - /* If using text buttons, we want to try to have a - * completely filled-in grid, but if we can't, we want - * the odd row to have just a single button. - */ - while (num_btns % btns_per_row > 1) - btns_per_row--; - } - - rows_count = num_btns / btns_per_row; - if (num_btns % btns_per_row != 0) - rows_count++; - - /* Assign buttons to rows */ - rows = g_new0 (GSList *, rows_count); - - if (!icons_only && num_btns % btns_per_row != 0) { - button = switcher->priv->buttons->data; - rows [0] = g_slist_append (rows [0], button->button_widget); - - p = switcher->priv->buttons->next; - row_number = p ? 1 : 0; - } else { - p = switcher->priv->buttons; - row_number = 0; - } - - for (; p != NULL; p = p->next) { - button = p->data; - - if (g_slist_length (rows [row_number]) == btns_per_row) - row_number ++; - - rows [row_number] = g_slist_append (rows [row_number], - button->button_widget); - } - - row_last = row_number; - - /* If there are more than 1 row of buttons, save the current height - * requirement for subsequent size requests. - */ - if (row_last > 0) - { - switcher->priv->buttons_height_request = - (row_last + 1) * (max_btn_height + V_PADDING) + 1; - } else { /* Otherwize clear it */ - if (last_buttons_height >= 0) { - - switcher->priv->buttons_height_request = -1; - } - } - - /* If it turns out that we now require smaller height for the buttons - * than it was last time, make a resize request to ensure our - * size requisition is properly communicated to the parent (otherwise - * parent tend to keep assuming the older size). - */ - if (last_buttons_height > switcher->priv->buttons_height_request) - { - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - y = -1; // set return value - } - else - { - /* Layout the buttons. */ - for (i = row_last; i >= 0; i --) { - int len, extra_width; - - y -= max_btn_height; - - /* Check for possible size over flow (taking into account client - * requisition - */ - if (y < (allocation.y + client_requisition.height)) { - /* We have an overflow: Insufficient allocation */ - if (last_buttons_height < switcher->priv->buttons_height_request) { - /* Request for a new resize */ - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - y = -1; // set return value - goto exit; - } - } - x = H_PADDING + allocation.x; - len = g_slist_length (rows[i]); - if (switcher_style == GDL_SWITCHER_STYLE_TEXT || - switcher_style == GDL_SWITCHER_STYLE_BOTH) - extra_width = (allocation.width - (len * max_btn_width ) - - (len * H_PADDING)) / len; - else - extra_width = 0; - for (p = rows [i]; p != NULL; p = p->next) { - GtkAllocation child_allocation; - - child_allocation.x = x; - child_allocation.y = y; - if (rows_count == 1 && row_number == 0) - { - GtkRequisition child_requisition; - gtk_widget_size_request (GTK_WIDGET (p->data), - &child_requisition); - child_allocation.width = child_requisition.width; - } - else - { - child_allocation.width = max_btn_width + extra_width; - } - child_allocation.height = max_btn_height; - - gtk_widget_size_allocate (GTK_WIDGET (p->data), &child_allocation); - - x += child_allocation.width + H_PADDING; - } - - y -= V_PADDING; - } - } - - exit: - for (i = 0; i <= row_last; i ++) { - g_slist_free (rows [i]); - } - g_free (rows); - - return y; -} - -static void -do_layout (GdlSwitcher *switcher) -{ - GtkAllocation allocation; - GtkAllocation child_allocation; - int y; - - gtk_widget_get_allocation (GTK_WIDGET (switcher), &allocation); - - if (switcher->priv->show) { - y = layout_buttons (switcher); - if (y < 0) /* Layout did not happen and a resize was requested */ - return; - } - else - y = allocation.y + allocation.height; - - /* Place the parent widget. */ - child_allocation.x = allocation.x; - child_allocation.y = allocation.y; - child_allocation.width = allocation.width; - child_allocation.height = y - allocation.y; - - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->size_allocate (GTK_WIDGET (switcher), &child_allocation); -} - -/* GtkContainer methods. */ - -static void -gdl_switcher_forall (GtkContainer *container, gboolean include_internals, - GtkCallback callback, void *callback_data) -{ - GdlSwitcher *switcher = - GDL_SWITCHER (container); - GSList *p; - - GTK_CONTAINER_CLASS (gdl_switcher_parent_class)->forall (GTK_CONTAINER (switcher), - include_internals, - callback, callback_data); - if (include_internals) { - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkWidget *widget = ((Button *) p->data)->button_widget; - (* callback) (widget, callback_data); - } - } -} - -static void -gdl_switcher_remove (GtkContainer *container, GtkWidget *widget) -{ - gint switcher_id; - GdlSwitcher *switcher = - GDL_SWITCHER (container); - GSList *p; - - switcher_id = gdl_switcher_get_page_id (widget); - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *b = (Button *) p->data; - - if (b->id == switcher_id) { - gtk_widget_unparent (b->button_widget); - switcher->priv->buttons = - g_slist_remove_link (switcher->priv->buttons, p); - button_free (b); - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - break; - } - } - GTK_CONTAINER_CLASS (gdl_switcher_parent_class)->remove (GTK_CONTAINER (switcher), widget); -} - -/* GtkWidget methods. */ - -static void -gdl_switcher_size_request (GtkWidget *widget, GtkRequisition *requisition) -{ - GdlSwitcher *switcher = GDL_SWITCHER (widget); - GSList *p; - gint button_height = 0; - - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->size_request (GTK_WIDGET (switcher), requisition); - - if (!switcher->priv->show) - return; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - gint button_width; - Button *button = p->data; - GtkRequisition button_requisition; - - gtk_widget_size_request (button->button_widget, &button_requisition); - button_width = button_requisition.width + 2 * H_PADDING; - requisition->width = MAX (requisition->width, button_width); - button_height = MAX (button_height, - button_requisition.height + 2 * V_PADDING); - } - - if (switcher->priv->buttons_height_request > 0) { - requisition->height += switcher->priv->buttons_height_request; - } else { - requisition->height += button_height + V_PADDING; - } -} - -static void -gdl_switcher_size_allocate (GtkWidget *widget, GtkAllocation *allocation) -{ - gtk_widget_set_allocation (widget, allocation); - do_layout (GDL_SWITCHER (widget)); -} - -static gint -gdl_switcher_expose (GtkWidget *widget, GdkEventExpose *event) -{ - GSList *p; - GdlSwitcher *switcher = GDL_SWITCHER (widget); - if (switcher->priv->show) { - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkWidget *button = ((Button *) p->data)->button_widget; - gtk_container_propagate_expose (GTK_CONTAINER (widget), - button, event); - } - } - return GTK_WIDGET_CLASS (gdl_switcher_parent_class)->expose_event (widget, event); -} - -static void -gdl_switcher_map (GtkWidget *widget) -{ - GSList *p; - GdlSwitcher *switcher = GDL_SWITCHER (widget); - - if (switcher->priv->show) { - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - GtkWidget *button = ((Button *) p->data)->button_widget; - gtk_widget_map (button); - } - } - GTK_WIDGET_CLASS (gdl_switcher_parent_class)->map (widget); -} - -/* GObject methods. */ - -static void -gdl_switcher_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GdlSwitcher *switcher = GDL_SWITCHER (object); - - switch (prop_id) { - case PROP_SWITCHER_STYLE: - gdl_switcher_set_style (switcher, g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_switcher_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GdlSwitcher *switcher = GDL_SWITCHER (object); - - switch (prop_id) { - case PROP_SWITCHER_STYLE: - g_value_set_enum (value, gdl_switcher_get_style (switcher)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -gdl_switcher_dispose (GObject *object) -{ - GdlSwitcherPrivate *priv = GDL_SWITCHER (object)->priv; - -#if HAVE_GNOME - GConfClient *gconf_client = gconf_client_get_default (); - - if (priv->style_changed_id) { - gconf_client_notify_remove (gconf_client, priv->style_changed_id); - priv->style_changed_id = 0; - } - g_object_unref (gconf_client); -#endif - - g_slist_foreach (priv->buttons, (GFunc) button_free, NULL); - g_slist_free (priv->buttons); - priv->buttons = NULL; - - G_OBJECT_CLASS (gdl_switcher_parent_class)->dispose (object); -} - -static void -gdl_switcher_finalize (GObject *object) -{ - GdlSwitcherPrivate *priv = GDL_SWITCHER (object)->priv; - - g_free (priv); - - G_OBJECT_CLASS (gdl_switcher_parent_class)->finalize (object); -} - -/* Signal handlers */ - -static void -gdl_switcher_notify_cb (GObject *g_object, GParamSpec *pspec, - GdlSwitcher *switcher) -{ -} - -static void -gdl_switcher_switch_page_cb (GtkNotebook *nb, GtkWidget *page_widget, - gint page_num, GdlSwitcher *switcher) -{ - gint switcher_id; - - /* Change switcher button */ - switcher_id = gdl_switcher_get_page_id (page_widget); - gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); -} - -static void -gdl_switcher_page_added_cb (GtkNotebook *nb, GtkWidget *page, - gint page_num, GdlSwitcher *switcher) -{ - gint switcher_id; - - (void)nb; - (void)page_num; - switcher_id = gdl_switcher_get_page_id (page); - - gdl_switcher_add_button (GDL_SWITCHER (switcher), NULL, NULL, NULL, NULL, - switcher_id, page); - gdl_switcher_select_button (GDL_SWITCHER (switcher), switcher_id); -} - -static void -gdl_switcher_select_page (GdlSwitcher *switcher, gint id) -{ - GList *children, *node; - children = gtk_container_get_children (GTK_CONTAINER (switcher)); - node = children; - while (node) - { - gint switcher_id; - switcher_id = gdl_switcher_get_page_id (GTK_WIDGET (node->data)); - if (switcher_id == id) - { - gint page_num; - page_num = gtk_notebook_page_num (GTK_NOTEBOOK (switcher), - GTK_WIDGET (node->data)); - g_signal_handlers_block_by_func (switcher, - gdl_switcher_switch_page_cb, - switcher); - gtk_notebook_set_current_page (GTK_NOTEBOOK (switcher), page_num); - g_signal_handlers_unblock_by_func (switcher, - gdl_switcher_switch_page_cb, - switcher); - break; - } - node = g_list_next (node); - } - g_list_free (children); -} - -/* Initialization. */ - -static void -gdl_switcher_class_init (GdlSwitcherClass *klass) -{ - GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - container_class->forall = gdl_switcher_forall; - container_class->remove = gdl_switcher_remove; - - widget_class->size_request = gdl_switcher_size_request; - widget_class->size_allocate = gdl_switcher_size_allocate; - widget_class->expose_event = gdl_switcher_expose; - widget_class->map = gdl_switcher_map; - - object_class->dispose = gdl_switcher_dispose; - object_class->finalize = gdl_switcher_finalize; - object_class->set_property = gdl_switcher_set_property; - object_class->get_property = gdl_switcher_get_property; - - g_object_class_install_property ( - object_class, PROP_SWITCHER_STYLE, - g_param_spec_enum ("switcher-style", _("Switcher Style"), - _("Switcher buttons style"), - GDL_TYPE_SWITCHER_STYLE, - GDL_SWITCHER_STYLE_BOTH, - G_PARAM_READWRITE)); - - gtk_rc_parse_string ("style \"gdl-button-style\"\n" - "{\n" - "GtkWidget::focus-padding = 1\n" - "GtkWidget::focus-line-width = 1\n" - "xthickness = 0\n" - "ythickness = 0\n" - "}\n" - "widget \"*.gdl-button\" style \"gdl-button-style\""); -} - -static void -gdl_switcher_init (GdlSwitcher *switcher) -{ - GdlSwitcherPrivate *priv; - - gtk_widget_set_has_window (GTK_WIDGET (switcher), FALSE); - - priv = g_new0 (GdlSwitcherPrivate, 1); - switcher->priv = priv; - - priv->show = TRUE; - priv->buttons_height_request = -1; - - gtk_notebook_set_tab_pos (GTK_NOTEBOOK (switcher), GTK_POS_BOTTOM); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), FALSE); - gtk_notebook_set_show_border (GTK_NOTEBOOK (switcher), FALSE); - gdl_switcher_set_style (switcher, GDL_SWITCHER_STYLE_BOTH); - - /* notebook signals */ - g_signal_connect (switcher, "switch-page", - G_CALLBACK (gdl_switcher_switch_page_cb), switcher); - g_signal_connect (switcher, "page-added", - G_CALLBACK (gdl_switcher_page_added_cb), switcher); - g_signal_connect (switcher, "notify::show-tabs", - G_CALLBACK (gdl_switcher_notify_cb), switcher); -} - -GtkWidget * -gdl_switcher_new (void) -{ - GdlSwitcher *switcher = g_object_new (gdl_switcher_get_type (), NULL); - return GTK_WIDGET (switcher); -} - -static void -gdl_switcher_add_button (GdlSwitcher *switcher, const gchar *label, - const gchar *tooltips, const gchar *stock_id, - GdkPixbuf *pixbuf_icon, - gint switcher_id, GtkWidget* page) -{ - GtkWidget *button_widget; - GtkWidget *hbox; - GtkWidget *icon_widget; - GtkWidget *label_widget; - GtkWidget *arrow; - - button_widget = gtk_toggle_button_new (); - gtk_widget_set_name (button_widget, "gdl-button"); - gtk_button_set_relief (GTK_BUTTON(button_widget), GTK_RELIEF_HALF); - if (switcher->priv->show) - gtk_widget_show (button_widget); - g_signal_connect (button_widget, "toggled", - G_CALLBACK (button_toggled_callback), - switcher); - hbox = gtk_hbox_new (FALSE, 3); - gtk_container_set_border_width (GTK_CONTAINER (hbox), 0); - gtk_container_add (GTK_CONTAINER (button_widget), hbox); - gtk_widget_show (hbox); - - if (stock_id) { - icon_widget = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_MENU); - } else if (pixbuf_icon) { - icon_widget = gtk_image_new_from_pixbuf (pixbuf_icon); - } else { - icon_widget = gtk_image_new_from_stock (GTK_STOCK_NEW, GTK_ICON_SIZE_MENU); - } - - gtk_widget_show (icon_widget); - - if (!label) { - gchar *text = g_strdup_printf ("Item %d", switcher_id); - label_widget = gtk_label_new (text); - g_free (text); - } else { - label_widget = gtk_label_new (label); - } - gtk_misc_set_alignment (GTK_MISC (label_widget), 0.0, 0.5); - gtk_widget_show (label_widget); - - - gtk_widget_set_tooltip_text (button_widget, - tooltips); - - switch (INTERNAL_MODE (switcher)) { - case GDL_SWITCHER_STYLE_TEXT: - gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - break; - case GDL_SWITCHER_STYLE_ICON: - gtk_box_pack_start (GTK_BOX (hbox), icon_widget, TRUE, TRUE, 0); - break; - case GDL_SWITCHER_STYLE_BOTH: - default: - gtk_box_pack_start (GTK_BOX (hbox), icon_widget, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (hbox), label_widget, TRUE, TRUE, 0); - break; - } - arrow = gtk_arrow_new (GTK_ARROW_UP, GTK_SHADOW_NONE); - gtk_widget_show (arrow); - gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0); - - switcher->priv->buttons = - g_slist_append (switcher->priv->buttons, - button_new (button_widget, label_widget, - icon_widget, - arrow, hbox, switcher_id, page)); - - gtk_widget_set_parent (button_widget, GTK_WIDGET (switcher)); - gtk_widget_queue_resize (GTK_WIDGET (switcher)); -} - -#if 0 -static void -gdl_switcher_remove_button (GdlSwitcher *switcher, gint switcher_id) -{ - GSList *p; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (button->id == switcher_id) - { - gtk_container_remove (GTK_CONTAINER (switcher), - button->button_widget); - break; - } - } - gtk_widget_queue_resize (GTK_WIDGET (switcher)); -} -#endif - -static void -gdl_switcher_select_button (GdlSwitcher *switcher, gint switcher_id) -{ - update_buttons (switcher, switcher_id); - - /* Select the notebook page associated with this button */ - gdl_switcher_select_page (switcher, switcher_id); -} - - -gint -gdl_switcher_insert_page (GdlSwitcher *switcher, GtkWidget *page, - GtkWidget *tab_widget, const gchar *label, - const gchar *tooltips, const gchar *stock_id, - GdkPixbuf *pixbuf_icon, gint position) -{ - gint ret_position; - gint switcher_id; - g_signal_handlers_block_by_func (switcher, - gdl_switcher_page_added_cb, - switcher); - - if (!tab_widget) { - tab_widget = gtk_label_new (label); - gtk_widget_show (tab_widget); - } - switcher_id = gdl_switcher_get_page_id (page); - gdl_switcher_add_button (switcher, label, tooltips, stock_id, pixbuf_icon, switcher_id, page); - - ret_position = gtk_notebook_insert_page (GTK_NOTEBOOK (switcher), page, - tab_widget, position); - g_signal_handlers_unblock_by_func (switcher, - gdl_switcher_page_added_cb, - switcher); - - return ret_position; -} - -static void -set_switcher_style_toolbar (GdlSwitcher *switcher, - GdlSwitcherStyle switcher_style) -{ - GSList *p; - - if (switcher_style == GDL_SWITCHER_STYLE_NONE - || switcher_style == GDL_SWITCHER_STYLE_TABS) - return; - - if (switcher_style == GDL_SWITCHER_STYLE_TOOLBAR) - switcher_style = GDL_SWITCHER_STYLE_BOTH; - - if (switcher_style == INTERNAL_MODE (switcher)) - return; - - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), FALSE); - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - gtk_container_remove (GTK_CONTAINER (button->hbox), button->arrow); - - if (gtk_widget_get_parent (button->icon)) - gtk_container_remove (GTK_CONTAINER (button->hbox), button->icon); - if (gtk_widget_get_parent (button->label)) - gtk_container_remove (GTK_CONTAINER (button->hbox), button->label); - - switch (switcher_style) { - case GDL_SWITCHER_STYLE_TEXT: - gtk_box_pack_start (GTK_BOX (button->hbox), button->label, - TRUE, TRUE, 0); - gtk_widget_show (button->label); - break; - - case GDL_SWITCHER_STYLE_ICON: - gtk_box_pack_start (GTK_BOX (button->hbox), button->icon, - TRUE, TRUE, 0); - gtk_widget_show (button->icon); - break; - - case GDL_SWITCHER_STYLE_BOTH: - gtk_box_pack_start (GTK_BOX (button->hbox), button->icon, - FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX (button->hbox), button->label, - TRUE, TRUE, 0); - gtk_widget_show (button->icon); - gtk_widget_show (button->label); - break; - - default: - break; - } - - gtk_box_pack_start (GTK_BOX (button->hbox), button->arrow, - FALSE, FALSE, 0); - } - - gdl_switcher_set_show_buttons (switcher, TRUE); -} - -static void -gdl_switcher_set_style (GdlSwitcher *switcher, GdlSwitcherStyle switcher_style) -{ - if (switcher->priv->switcher_style == switcher_style) - return; - - if (switcher_style == GDL_SWITCHER_STYLE_NONE) { - gdl_switcher_set_show_buttons (switcher, FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), FALSE); - } - else if (switcher_style == GDL_SWITCHER_STYLE_TABS) { - gdl_switcher_set_show_buttons (switcher, FALSE); - gtk_notebook_set_show_tabs (GTK_NOTEBOOK (switcher), TRUE); - } - else - set_switcher_style_toolbar (switcher, switcher_style); - - gtk_widget_queue_resize (GTK_WIDGET (switcher)); - switcher->priv->switcher_style = switcher_style; -} - -static void -gdl_switcher_set_show_buttons (GdlSwitcher *switcher, gboolean show) -{ - GSList *p; - - if (switcher->priv->show == show) - return; - - for (p = switcher->priv->buttons; p != NULL; p = p->next) { - Button *button = p->data; - - if (show) - gtk_widget_show (button->button_widget); - else - gtk_widget_hide (button->button_widget); - } - - switcher->priv->show = show; - - gtk_widget_queue_resize (GTK_WIDGET (switcher)); -} - -static GdlSwitcherStyle -gdl_switcher_get_style (GdlSwitcher *switcher) -{ - if (!switcher->priv->show) - return GDL_SWITCHER_STYLE_TABS; - return switcher->priv->switcher_style; -} diff --git a/src/libgdl/gdl-switcher.h b/src/libgdl/gdl-switcher.h deleted file mode 100644 index 0caf3a0aa..000000000 --- a/src/libgdl/gdl-switcher.h +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 8 -*- */ -/* gdl-switcher.h - * - * Copyright (C) 2003 Ettore Perazzoli - * 2007 Naba Kumar - * -* This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - * - * - * Authors: Ettore Perazzoli - * Naba Kumar - */ - -#ifndef _GDL_SWITCHER_H_ -#define _GDL_SWITCHER_H_ - -#include - -G_BEGIN_DECLS - -#define GDL_TYPE_SWITCHER (gdl_switcher_get_type ()) -#define GDL_SWITCHER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDL_TYPE_SWITCHER, GdlSwitcher)) -#define GDL_SWITCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDL_TYPE_SWITCHER, GdlSwitcherClass)) -#define GDL_IS_SWITCHER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDL_TYPE_SWITCHER)) -#define GDL_IS_SWITCHER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), GDL_TYPE_SWITCHER)) - -typedef struct _GdlSwitcher GdlSwitcher; -typedef struct _GdlSwitcherPrivate GdlSwitcherPrivate; -typedef struct _GdlSwitcherClass GdlSwitcherClass; - -struct _GdlSwitcher { - GtkNotebook parent; - - GdlSwitcherPrivate *priv; -}; - -struct _GdlSwitcherClass { - GtkNotebookClass parent_class; -}; - -GType gdl_switcher_get_type (void); -GtkWidget *gdl_switcher_new (void); - -gint gdl_switcher_insert_page (GdlSwitcher *switcher, - GtkWidget *page, - GtkWidget *tab_widget, - const gchar *label, - const gchar *tooltips, - const gchar *stock_id, - GdkPixbuf *pixbuf_icon, - gint position); -G_END_DECLS - -#endif /* _GDL_SWITCHER_H_ */ diff --git a/src/libgdl/gdl-win32.c b/src/libgdl/gdl-win32.c deleted file mode 100644 index f23036ed6..000000000 --- a/src/libgdl/gdl-win32.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Windows stuff - * - * Author: - * Albin Sunnanbo - * Based on code by Lauris Kaplinski (/src/extension/internal/win32.cpp) - * - * This code is in public domain - */ -#ifdef WIN32 - -#include "gdl-win32.h" -#include - -/* Platform detection */ -gboolean -is_os_vista() -{ - static gboolean initialized = FALSE; - static gboolean is_vista = FALSE; - static OSVERSIONINFOA osver; - - if ( !initialized ) - { - BOOL result; - - initialized = TRUE; - - memset (&osver, 0, sizeof(OSVERSIONINFOA)); - osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); - result = GetVersionExA (&osver); - if (result) - { - if (osver.dwMajorVersion == WIN32_MAJORVERSION_VISTA) - is_vista = TRUE; - } - } - - return is_vista; -} - -#endif diff --git a/src/libgdl/gdl-win32.h b/src/libgdl/gdl-win32.h deleted file mode 100644 index 90c0cbafa..000000000 --- a/src/libgdl/gdl-win32.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Windows stuff - * - * Author: - * Albin Sunnanbo - * - * This code is in public domain - */ -#ifndef __INKSCAPE_GDL_WIN32_H__ -#define __INKSCAPE_GDL_WIN32_H__ -#ifdef WIN32 - -#include - -#define WIN32_MAJORVERSION_VISTA 0x0006 - -/* Platform detection */ -gboolean is_os_vista(); - -#endif // ifdef WIN32 -#endif /* __INKSCAPE_GDL_WIN32_H__ */ diff --git a/src/libgdl/gdl.h b/src/libgdl/gdl.h deleted file mode 100644 index 235c5e3eb..000000000 --- a/src/libgdl/gdl.h +++ /dev/null @@ -1,32 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * This file is part of the GNOME Devtools Libraries. - * - * Copyright (C) 1999-2000 Dave Camp - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef __GDL_H__ -#define __GDL_H__ - -#include "libgdl/gdl-dock-object.h" -#include "libgdl/gdl-dock-master.h" -#include "libgdl/gdl-dock.h" -#include "libgdl/gdl-dock-item.h" -#include "libgdl/gdl-dock-item-grip.h" -#include "libgdl/gdl-dock-bar.h" - -#endif diff --git a/src/libgdl/libgdlmarshal.c b/src/libgdl/libgdlmarshal.c deleted file mode 100644 index a2a9fe220..000000000 --- a/src/libgdl/libgdlmarshal.c +++ /dev/null @@ -1,173 +0,0 @@ -#include "libgdlmarshal.h" - -#include - - -#ifdef G_ENABLE_DEBUG -#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) -#define g_marshal_value_peek_char(v) g_value_get_char (v) -#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) -#define g_marshal_value_peek_int(v) g_value_get_int (v) -#define g_marshal_value_peek_uint(v) g_value_get_uint (v) -#define g_marshal_value_peek_long(v) g_value_get_long (v) -#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) -#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) -#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) -#define g_marshal_value_peek_enum(v) g_value_get_enum (v) -#define g_marshal_value_peek_flags(v) g_value_get_flags (v) -#define g_marshal_value_peek_float(v) g_value_get_float (v) -#define g_marshal_value_peek_double(v) g_value_get_double (v) -#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) -#define g_marshal_value_peek_param(v) g_value_get_param (v) -#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) -#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) -#define g_marshal_value_peek_object(v) g_value_get_object (v) -#define g_marshal_value_peek_variant(v) g_value_get_variant (v) -#else /* !G_ENABLE_DEBUG */ -/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. - * Do not access GValues directly in your code. Instead, use the - * g_value_get_*() functions - */ -#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int -#define g_marshal_value_peek_char(v) (v)->data[0].v_int -#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint -#define g_marshal_value_peek_int(v) (v)->data[0].v_int -#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint -#define g_marshal_value_peek_long(v) (v)->data[0].v_long -#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 -#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 -#define g_marshal_value_peek_enum(v) (v)->data[0].v_long -#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_float(v) (v)->data[0].v_float -#define g_marshal_value_peek_double(v) (v)->data[0].v_double -#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer -#endif /* !G_ENABLE_DEBUG */ - - -/* VOID:VOID (./libgdlmarshal.list:1) */ - -/* VOID:ENUM (./libgdlmarshal.list:2) */ - -/* VOID:INT,INT (./libgdlmarshal.list:3) */ -void -gdl_marshal_VOID__INT_INT (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__INT_INT) (gpointer data1, - gint arg_1, - gint arg_2, - gpointer data2); - register GMarshalFunc_VOID__INT_INT callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 3); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__INT_INT) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_int (param_values + 1), - g_marshal_value_peek_int (param_values + 2), - data2); -} - -/* VOID:UINT,UINT (./libgdlmarshal.list:4) */ -void -gdl_marshal_VOID__UINT_UINT (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1, - guint arg_1, - guint arg_2, - gpointer data2); - register GMarshalFunc_VOID__UINT_UINT callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 3); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_uint (param_values + 1), - g_marshal_value_peek_uint (param_values + 2), - data2); -} - -/* VOID:BOOLEAN (./libgdlmarshal.list:5) */ - -/* VOID:OBJECT,ENUM,BOXED (./libgdlmarshal.list:6) */ -void -gdl_marshal_VOID__OBJECT_ENUM_BOXED (GClosure *closure, - GValue *return_value G_GNUC_UNUSED, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint G_GNUC_UNUSED, - gpointer marshal_data) -{ - typedef void (*GMarshalFunc_VOID__OBJECT_ENUM_BOXED) (gpointer data1, - gpointer arg_1, - gint arg_2, - gpointer arg_3, - gpointer data2); - register GMarshalFunc_VOID__OBJECT_ENUM_BOXED callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - - g_return_if_fail (n_param_values == 4); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_VOID__OBJECT_ENUM_BOXED) (marshal_data ? marshal_data : cc->callback); - - callback (data1, - g_marshal_value_peek_object (param_values + 1), - g_marshal_value_peek_enum (param_values + 2), - g_marshal_value_peek_boxed (param_values + 3), - data2); -} - -/* VOID:BOXED (./libgdlmarshal.list:7) */ - diff --git a/src/libgdl/libgdlmarshal.h b/src/libgdl/libgdlmarshal.h deleted file mode 100644 index 2d6bc800f..000000000 --- a/src/libgdl/libgdlmarshal.h +++ /dev/null @@ -1,48 +0,0 @@ - -#ifndef __gdl_marshal_MARSHAL_H__ -#define __gdl_marshal_MARSHAL_H__ - -#include - -G_BEGIN_DECLS - -/* VOID:VOID (./libgdlmarshal.list:1) */ -#define gdl_marshal_VOID__VOID g_cclosure_marshal_VOID__VOID - -/* VOID:ENUM (./libgdlmarshal.list:2) */ -#define gdl_marshal_VOID__ENUM g_cclosure_marshal_VOID__ENUM - -/* VOID:INT,INT (./libgdlmarshal.list:3) */ -extern void gdl_marshal_VOID__INT_INT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:UINT,UINT (./libgdlmarshal.list:4) */ -extern void gdl_marshal_VOID__UINT_UINT (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:BOOLEAN (./libgdlmarshal.list:5) */ -#define gdl_marshal_VOID__BOOLEAN g_cclosure_marshal_VOID__BOOLEAN - -/* VOID:OBJECT,ENUM,BOXED (./libgdlmarshal.list:6) */ -extern void gdl_marshal_VOID__OBJECT_ENUM_BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -/* VOID:BOXED (./libgdlmarshal.list:7) */ -#define gdl_marshal_VOID__BOXED g_cclosure_marshal_VOID__BOXED - -G_END_DECLS - -#endif /* __gdl_marshal_MARSHAL_H__ */ - diff --git a/src/libgdl/libgdlmarshal.list b/src/libgdl/libgdlmarshal.list deleted file mode 100644 index 750989abc..000000000 --- a/src/libgdl/libgdlmarshal.list +++ /dev/null @@ -1,7 +0,0 @@ -VOID:VOID -VOID:ENUM -VOID:INT,INT -VOID:UINT,UINT -VOID:BOOLEAN -VOID:OBJECT,ENUM,BOXED -VOID:BOXED diff --git a/src/libgdl/libgdltypebuiltins.c b/src/libgdl/libgdltypebuiltins.c deleted file mode 100644 index b347fe6f5..000000000 --- a/src/libgdl/libgdltypebuiltins.c +++ /dev/null @@ -1,162 +0,0 @@ - - - -#include -#include "libgdltypebuiltins.h" - - -/* enumerations from "gdl-dock-object.h" */ -static const GFlagsValue _gdl_dock_param_flags_values[] = { - { GDL_DOCK_PARAM_EXPORT, "GDL_DOCK_PARAM_EXPORT", "export" }, - { GDL_DOCK_PARAM_AFTER, "GDL_DOCK_PARAM_AFTER", "after" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_param_flags_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockParamFlags", _gdl_dock_param_flags_values); - - return type; -} - -static const GFlagsValue _gdl_dock_object_flags_values[] = { - { GDL_DOCK_AUTOMATIC, "GDL_DOCK_AUTOMATIC", "automatic" }, - { GDL_DOCK_ATTACHED, "GDL_DOCK_ATTACHED", "attached" }, - { GDL_DOCK_IN_REFLOW, "GDL_DOCK_IN_REFLOW", "in-reflow" }, - { GDL_DOCK_IN_DETACH, "GDL_DOCK_IN_DETACH", "in-detach" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_object_flags_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockObjectFlags", _gdl_dock_object_flags_values); - - return type; -} - -static const GEnumValue _gdl_dock_placement_values[] = { - { GDL_DOCK_NONE, "GDL_DOCK_NONE", "none" }, - { GDL_DOCK_TOP, "GDL_DOCK_TOP", "top" }, - { GDL_DOCK_BOTTOM, "GDL_DOCK_BOTTOM", "bottom" }, - { GDL_DOCK_RIGHT, "GDL_DOCK_RIGHT", "right" }, - { GDL_DOCK_LEFT, "GDL_DOCK_LEFT", "left" }, - { GDL_DOCK_CENTER, "GDL_DOCK_CENTER", "center" }, - { GDL_DOCK_FLOATING, "GDL_DOCK_FLOATING", "floating" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_placement_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_enum_register_static ("GdlDockPlacement", _gdl_dock_placement_values); - - return type; -} - - -/* enumerations from "gdl-dock-master.h" */ -static const GEnumValue _gdl_switcher_style_values[] = { - { GDL_SWITCHER_STYLE_TEXT, "GDL_SWITCHER_STYLE_TEXT", "text" }, - { GDL_SWITCHER_STYLE_ICON, "GDL_SWITCHER_STYLE_ICON", "icon" }, - { GDL_SWITCHER_STYLE_BOTH, "GDL_SWITCHER_STYLE_BOTH", "both" }, - { GDL_SWITCHER_STYLE_TOOLBAR, "GDL_SWITCHER_STYLE_TOOLBAR", "toolbar" }, - { GDL_SWITCHER_STYLE_TABS, "GDL_SWITCHER_STYLE_TABS", "tabs" }, - { GDL_SWITCHER_STYLE_NONE, "GDL_SWITCHER_STYLE_NONE", "none" }, - { 0, NULL, NULL } -}; - -GType -gdl_switcher_style_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_enum_register_static ("GdlSwitcherStyle", _gdl_switcher_style_values); - - return type; -} - - -/* enumerations from "gdl-dock-item.h" */ -static const GFlagsValue _gdl_dock_item_behavior_values[] = { - { GDL_DOCK_ITEM_BEH_NORMAL, "GDL_DOCK_ITEM_BEH_NORMAL", "normal" }, - { GDL_DOCK_ITEM_BEH_NEVER_FLOATING, "GDL_DOCK_ITEM_BEH_NEVER_FLOATING", "never-floating" }, - { GDL_DOCK_ITEM_BEH_NEVER_VERTICAL, "GDL_DOCK_ITEM_BEH_NEVER_VERTICAL", "never-vertical" }, - { GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL, "GDL_DOCK_ITEM_BEH_NEVER_HORIZONTAL", "never-horizontal" }, - { GDL_DOCK_ITEM_BEH_LOCKED, "GDL_DOCK_ITEM_BEH_LOCKED", "locked" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP, "GDL_DOCK_ITEM_BEH_CANT_DOCK_TOP", "cant-dock-top" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM, "GDL_DOCK_ITEM_BEH_CANT_DOCK_BOTTOM", "cant-dock-bottom" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT, "GDL_DOCK_ITEM_BEH_CANT_DOCK_LEFT", "cant-dock-left" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT, "GDL_DOCK_ITEM_BEH_CANT_DOCK_RIGHT", "cant-dock-right" }, - { GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER, "GDL_DOCK_ITEM_BEH_CANT_DOCK_CENTER", "cant-dock-center" }, - { GDL_DOCK_ITEM_BEH_CANT_CLOSE, "GDL_DOCK_ITEM_BEH_CANT_CLOSE", "cant-close" }, - { GDL_DOCK_ITEM_BEH_CANT_ICONIFY, "GDL_DOCK_ITEM_BEH_CANT_ICONIFY", "cant-iconify" }, - { GDL_DOCK_ITEM_BEH_NO_GRIP, "GDL_DOCK_ITEM_BEH_NO_GRIP", "no-grip" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_item_behavior_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockItemBehavior", _gdl_dock_item_behavior_values); - - return type; -} - -static const GFlagsValue _gdl_dock_item_flags_values[] = { - { GDL_DOCK_IN_DRAG, "GDL_DOCK_IN_DRAG", "in-drag" }, - { GDL_DOCK_IN_PREDRAG, "GDL_DOCK_IN_PREDRAG", "in-predrag" }, - { GDL_DOCK_ICONIFIED, "GDL_DOCK_ICONIFIED", "iconified" }, - { GDL_DOCK_USER_ACTION, "GDL_DOCK_USER_ACTION", "user-action" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_item_flags_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_flags_register_static ("GdlDockItemFlags", _gdl_dock_item_flags_values); - - return type; -} - - -/* enumerations from "gdl-dock-bar.h" */ -static const GEnumValue _gdl_dock_bar_style_values[] = { - { GDL_DOCK_BAR_ICONS, "GDL_DOCK_BAR_ICONS", "icons" }, - { GDL_DOCK_BAR_TEXT, "GDL_DOCK_BAR_TEXT", "text" }, - { GDL_DOCK_BAR_BOTH, "GDL_DOCK_BAR_BOTH", "both" }, - { GDL_DOCK_BAR_AUTO, "GDL_DOCK_BAR_AUTO", "auto" }, - { 0, NULL, NULL } -}; - -GType -gdl_dock_bar_style_get_type (void) -{ - static GType type = 0; - - if (!type) - type = g_enum_register_static ("GdlDockBarStyle", _gdl_dock_bar_style_values); - - return type; -} - - - - diff --git a/src/libgdl/libgdltypebuiltins.h b/src/libgdl/libgdltypebuiltins.h deleted file mode 100644 index 19eac4989..000000000 --- a/src/libgdl/libgdltypebuiltins.h +++ /dev/null @@ -1,38 +0,0 @@ - - - -#ifndef __LIBGDLTYPEBUILTINS_H__ -#define __LIBGDLTYPEBUILTINS_H__ 1 - -#include "libgdl/gdl.h" - -G_BEGIN_DECLS - - -/* --- gdl-dock-object.h --- */ -#define GDL_TYPE_DOCK_PARAM_FLAGS gdl_dock_param_flags_get_type() -GType gdl_dock_param_flags_get_type (void); -#define GDL_TYPE_DOCK_OBJECT_FLAGS gdl_dock_object_flags_get_type() -GType gdl_dock_object_flags_get_type (void); -#define GDL_TYPE_DOCK_PLACEMENT gdl_dock_placement_get_type() -GType gdl_dock_placement_get_type (void); - -/* --- gdl-dock-master.h --- */ -#define GDL_TYPE_SWITCHER_STYLE gdl_switcher_style_get_type() -GType gdl_switcher_style_get_type (void); - -/* --- gdl-dock-item.h --- */ -#define GDL_TYPE_DOCK_ITEM_BEHAVIOR gdl_dock_item_behavior_get_type() -GType gdl_dock_item_behavior_get_type (void); -#define GDL_TYPE_DOCK_ITEM_FLAGS gdl_dock_item_flags_get_type() -GType gdl_dock_item_flags_get_type (void); - -/* --- gdl-dock-bar.h --- */ -#define GDL_TYPE_DOCK_BAR_STYLE gdl_dock_bar_style_get_type() -GType gdl_dock_bar_style_get_type (void); -G_END_DECLS - -#endif /* __LIBGDLTYPEBUILTINS_H__ */ - - - diff --git a/src/libgdl/makefile.in b/src/libgdl/makefile.in deleted file mode 100644 index 9dc8cb2ca..000000000 --- a/src/libgdl/makefile.in +++ /dev/null @@ -1,17 +0,0 @@ -# Convenience stub makefile to call the real Makefile. - -@SET_MAKE@ - -OBJEXT = @OBJEXT@ - -# Explicit so that it's the default rule. -all: - cd .. && $(MAKE) libgdl/all - -clean %.a %.$(OBJEXT): - cd .. && $(MAKE) libgdl/$@ - -.PHONY: all clean - -.SUFFIXES: -.SUFFIXES: .a .$(OBJEXT) diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index 225afe317..ba71b39f4 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -33,6 +33,7 @@ set(widgets_SRC gradient-toolbar.cpp gradient-vector.cpp icon.cpp + image-menu-item.c ink-action.cpp ink-comboboxentry-action.cpp paint-selector.cpp @@ -88,6 +89,7 @@ set(widgets_SRC gradient-toolbar.h gradient-vector.h icon.h + image-menu-item.h ink-action.h ink-comboboxentry-action.h paint-selector.h @@ -108,11 +110,6 @@ set(widgets_SRC widget-sizes.h ) -if(${WITH_GTK3_EXPERIMENTAL}) - set(image_menu_item_SRC image-menu-item.h image-menu-item.c) - add_inkscape_source("${image_menu_item_SRC}") -endif() - # add_inkscape_lib(widgets_LIB "${widgets_SRC}") add_inkscape_source("${widgets_SRC}") diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert index c9f04de14..8f10e1d56 100644 --- a/src/widgets/Makefile_insert +++ b/src/widgets/Makefile_insert @@ -1,11 +1,5 @@ ## Makefile.am fragment sourced by src/Makefile.am. -if WITH_GTKMM_3_0 -ink_common_sources += \ - widgets/image-menu-item.c \ - widgets/image-menu-item.h -endif - ink_common_sources += \ widgets/arc-toolbar.cpp \ widgets/arc-toolbar.h \ @@ -50,6 +44,8 @@ ink_common_sources += \ widgets/gradient-vector.h \ widgets/icon.cpp \ widgets/icon.h \ + widgets/image-menu-item.c \ + widgets/image-menu-item.h \ widgets/ink-action.cpp \ widgets/ink-action.h \ widgets/ink-comboboxentry-action.cpp \ -- cgit v1.2.3 From caaf88e07254f7bb824cd60bd13bf6ed4bef0bfa Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:33:52 +0100 Subject: device-manager: Drop GTK2 fallbacks (bzr r15023.2.2) --- src/device-manager.cpp | 48 +++++++++--------------------------------------- 1 file changed, 9 insertions(+), 39 deletions(-) diff --git a/src/device-manager.cpp b/src/device-manager.cpp index aa3874da8..96d6d6d1b 100644 --- a/src/device-manager.cpp +++ b/src/device-manager.cpp @@ -14,15 +14,12 @@ #include "preferences.h" #include #include +#include -#if WITH_GTKMM_3_0 -# include -#endif +#include #include -#include - #define noDEBUG_VERBOSE 1 @@ -49,11 +46,7 @@ static bool isValidDevice(Glib::RefPtr device) const bool source_matches = (device->get_source() == (*it).source); const bool mode_matches = (device->get_mode() == (*it).mode); const bool num_axes_matches = (device->get_n_axes() == (*it).num_axes); -#if WITH_GTKMM_3_0 const bool num_keys_matches = (device->get_n_keys() == (*it).num_keys); -#else - const bool num_keys_matches = (gdk_device_get_n_keys(device->gobj()) == (*it).num_keys); -#endif if (name_matches && source_matches && mode_matches && num_axes_matches && num_keys_matches) @@ -177,13 +170,7 @@ public: virtual Gdk::InputMode getMode() const {return (device->get_mode());} virtual gint getNumAxes() const {return device->get_n_axes();} virtual bool hasCursor() const {return device->get_has_cursor();} - -#if WITH_GTKMM_3_0 virtual int getNumKeys() const {return device->get_n_keys();} -#else - virtual int getNumKeys() const {return gdk_device_get_n_keys(device->gobj());} -#endif - virtual Glib::ustring getLink() const {return link;} virtual void setLink( Glib::ustring const& link ) {this->link = link;} virtual gint getLiveAxes() const {return liveAxes;} @@ -328,12 +315,8 @@ DeviceManagerImpl::DeviceManagerImpl() : { Glib::RefPtr display = Gdk::Display::get_default(); -#if WITH_GTKMM_3_0 - Glib::RefPtr dm = display->get_device_manager(); - std::vector< Glib::RefPtr > devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); -#else - std::vector< Glib::RefPtr > devList = display->list_devices(); -#endif + auto dm = display->get_device_manager(); + auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); if (fakeList.empty()) { createFakeList(); @@ -342,24 +325,19 @@ DeviceManagerImpl::DeviceManagerImpl() : std::set knownIDs; - for ( std::vector< Glib::RefPtr >::iterator dev = devList.begin(); dev != devList.end(); ++dev ) { -#if WITH_GTKMM_3_0 + for (auto dev : devList) { // GTK+ 3 has added keyboards to the list of supported devices. - if((*dev)->get_source() != Gdk::SOURCE_KEYBOARD) { -#endif + if(dev->get_source() != Gdk::SOURCE_KEYBOARD) { #if DEBUG_VERBOSE g_message("device: name[%s] source[0x%x] mode[0x%x] cursor[%s] axis count[%d] key count[%d]", dev->name, dev->source, dev->mode, dev->has_cursor?"Yes":"no", dev->num_axes, dev->num_keys); #endif - InputDeviceImpl* device = new InputDeviceImpl(*dev, knownIDs); + InputDeviceImpl* device = new InputDeviceImpl(dev, knownIDs); device->reference(); devices.push_back(Glib::RefPtr(device)); - -#if WITH_GTKMM_3_0 } -#endif } } @@ -669,12 +647,8 @@ static void createFakeList() { // try to find the first *real* core pointer Glib::RefPtr display = Gdk::Display::get_default(); -#if WITH_GTKMM_3_0 - Glib::RefPtr dm = display->get_device_manager(); - std::vector< Glib::RefPtr > devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); -#else - std::vector< Glib::RefPtr > devList = display->list_devices(); -#endif + auto dm = display->get_device_manager(); + auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); // Set iterator to point at beginning of device list std::vector< Glib::RefPtr >::iterator dev = devList.begin(); @@ -691,11 +665,7 @@ static void createFakeList() { fakeList[4].mode = device->get_mode(); fakeList[4].has_cursor = device->get_has_cursor(); fakeList[4].num_axes = device->get_n_axes(); -#if WITH_GTKMM_3_0 fakeList[4].num_keys = device->get_n_keys(); -#else - fakeList[4].num_keys = gdk_device_get_n_keys(device->gobj()); -#endif } else { fakeList[4].name = "Core Pointer"; fakeList[4].source = Gdk::SOURCE_MOUSE; -- cgit v1.2.3 From a2d656579397cef6bdfd4d9501af3b542e3b5617 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:37:57 +0100 Subject: display.canvas-*grid: Drop GTK2 fallbacks (bzr r15023.2.3) --- src/display/canvas-axonomgrid.cpp | 40 ++------------------------------------- src/display/canvas-grid.cpp | 40 ++------------------------------------- 2 files changed, 4 insertions(+), 76 deletions(-) diff --git a/src/display/canvas-axonomgrid.cpp b/src/display/canvas-axonomgrid.cpp index 14f36376f..421a39fbd 100644 --- a/src/display/canvas-axonomgrid.cpp +++ b/src/display/canvas-axonomgrid.cpp @@ -19,12 +19,7 @@ #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include @@ -94,15 +89,10 @@ namespace Inkscape { #define SPACE_SIZE_X 15 #define SPACE_SIZE_Y 10 static inline void -#if WITH_GTKMM_3_0 attach_all(Gtk::Grid &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#else -attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#endif { for (unsigned i=0, r=start; i(*arr[i])).set_hexpand(); (const_cast(*arr[i])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i]), 1, r, 1, 1); @@ -110,44 +100,23 @@ attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], unsigned size, int (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 2, r, 1, 1); -#else - table.attach (const_cast(*arr[i]), 1, 2, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach (const_cast(*arr[i+1]), 2, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { if (arr[i+1]) { -#if WITH_GTKMM_3_0 (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 1, r, 2, 1); -#else - table.attach (const_cast(*arr[i+1]), 1, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else if (arr[i]) { Gtk::Label& label = reinterpret_cast (const_cast(*arr[i])); label.set_alignment (0.0); -#if WITH_GTKMM_3_0 label.set_hexpand(); label.set_valign(Gtk::ALIGN_CENTER); table.attach(label, 0, r, 3, 1); -#else - table.attach (label, 0, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_halign(Gtk::ALIGN_CENTER); space->set_valign(Gtk::ALIGN_CENTER); table.attach(*space, 0, r, 1, 1); -#else - table.attach (*space, 0, 1, r, r+1, - (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); -#endif } } ++r; @@ -342,14 +311,9 @@ CanvasAxonomGrid::onReprAttrChanged(Inkscape::XML::Node */*repr*/, gchar const * Gtk::Widget * CanvasAxonomGrid::newSpecificWidget() { -#if WITH_GTKMM_3_0 - Gtk::Grid *table = Gtk::manage(new Gtk::Grid()); + auto table = Gtk::manage(new Gtk::Grid()); table->set_row_spacing(2); table->set_column_spacing(2); -#else - Gtk::Table * table = Gtk::manage( new Gtk::Table(1,1) ); - table->set_spacings(2); -#endif _wr.setUpdating (true); diff --git a/src/display/canvas-grid.cpp b/src/display/canvas-grid.cpp index decf93626..fa45fe02c 100644 --- a/src/display/canvas-grid.cpp +++ b/src/display/canvas-grid.cpp @@ -19,12 +19,7 @@ #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include @@ -400,15 +395,10 @@ void CanvasGrid::setOrigin(Geom::Point const &origin_px) **/ #define SPACE_SIZE_X 15 #define SPACE_SIZE_Y 10 -#if WITH_GTKMM_3_0 static inline void attach_all(Gtk::Grid &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#else -static inline void attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], unsigned size, int start = 0) -#endif { for (unsigned i=0, r=start; i(*arr[i])).set_hexpand(); (const_cast(*arr[i])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i]), 1, r, 1, 1); @@ -416,44 +406,23 @@ static inline void attach_all(Gtk::Table &table, Gtk::Widget const *const arr[], (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 2, r, 1, 1); -#else - table.attach (const_cast(*arr[i]), 1, 2, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach (const_cast(*arr[i+1]), 2, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { if (arr[i+1]) { -#if WITH_GTKMM_3_0 (const_cast(*arr[i+1])).set_hexpand(); (const_cast(*arr[i+1])).set_valign(Gtk::ALIGN_CENTER); table.attach(const_cast(*arr[i+1]), 1, r, 2, 1); -#else - table.attach (const_cast(*arr[i+1]), 1, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else if (arr[i]) { Gtk::Label& label = reinterpret_cast (const_cast(*arr[i])); label.set_alignment (0.0); -#if WITH_GTKMM_3_0 label.set_hexpand(); label.set_valign(Gtk::ALIGN_CENTER); table.attach(label, 0, r, 3, 1); -#else - table.attach (label, 0, 3, r, r+1, - Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_halign(Gtk::ALIGN_CENTER); space->set_valign(Gtk::ALIGN_CENTER); table.attach(*space, 0, r, 1, 1); -#else - table.attach (*space, 0, 1, r, r+1, - (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); -#endif } } ++r; @@ -684,14 +653,9 @@ CanvasXYGrid::onReprAttrChanged(Inkscape::XML::Node */*repr*/, gchar const */*ke Gtk::Widget * CanvasXYGrid::newSpecificWidget() { -#if WITH_GTKMM_3_0 - Gtk::Grid * table = Gtk::manage( new Gtk::Grid() ); + auto table = Gtk::manage( new Gtk::Grid() ); table->set_row_spacing(2); table->set_column_spacing(2); -#else - Gtk::Table * table = Gtk::manage( new Gtk::Table(1,1) ); - table->set_spacings(2); -#endif Inkscape::UI::Widget::RegisteredUnitMenu *_rumg = Gtk::manage( new Inkscape::UI::Widget::RegisteredUnitMenu( _("Grid _units:"), "units", _wr, repr, doc) ); -- cgit v1.2.3 From 9e1a6b6cdc87bde1b85137f2841a510283904b71 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 27 Jul 2016 17:45:46 +0100 Subject: widgets/ruler: Drop GTK2 fallbacks (bzr r15023.2.4) --- src/widgets/ruler.cpp | 154 -------------------------------------------------- 1 file changed, 154 deletions(-) diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp index deffd384a..92c2b611d 100644 --- a/src/widgets/ruler.cpp +++ b/src/widgets/ruler.cpp @@ -120,7 +120,6 @@ static void sp_ruler_unmap (GtkWidget *widget); static void sp_ruler_size_allocate (GtkWidget *widget, GtkAllocation *allocation); -#if GTK_CHECK_VERSION(3,0,0) static void sp_ruler_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width); @@ -129,21 +128,11 @@ static void sp_ruler_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height); static void sp_ruler_style_updated (GtkWidget *widget); -#else -static void sp_ruler_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void sp_ruler_style_set (GtkWidget *widget, - GtkStyle *prev_style); -#endif static gboolean sp_ruler_motion_notify (GtkWidget *widget, GdkEventMotion *event); static gboolean sp_ruler_draw (GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) -static gboolean sp_ruler_expose (GtkWidget *widget, - GdkEventExpose *event); -#endif static void sp_ruler_draw_ticks (SPRuler *ruler); static GdkRectangle sp_ruler_get_pos_rect (SPRuler *ruler, gdouble position); @@ -181,16 +170,10 @@ sp_ruler_class_init (SPRulerClass *klass) widget_class->map = sp_ruler_map; widget_class->unmap = sp_ruler_unmap; widget_class->size_allocate = sp_ruler_size_allocate; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = sp_ruler_get_preferred_width; widget_class->get_preferred_height = sp_ruler_get_preferred_height; widget_class->style_updated = sp_ruler_style_updated; widget_class->draw = sp_ruler_draw; -#else - widget_class->size_request = sp_ruler_size_request; - widget_class->style_set = sp_ruler_style_set; - widget_class->expose_event = sp_ruler_expose; -#endif widget_class->motion_notify_event = sp_ruler_motion_notify; g_type_class_add_private (object_class, sizeof (SPRulerPrivate)); @@ -487,16 +470,10 @@ sp_ruler_realize (GtkWidget *widget) attributes.width = allocation.width; attributes.height = allocation.height; attributes.wclass = GDK_INPUT_ONLY; -#if GTK_CHECK_VERSION(3,0,0) attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); -#else - attributes.event_mask = (gtk_widget_get_events (widget) | - GDK_EXPOSURE_MASK | - GDK_POINTER_MOTION_MASK); -#endif attributes_mask = GDK_WA_X | GDK_WA_Y; @@ -599,7 +576,6 @@ sp_ruler_size_request (GtkWidget *widget, size = 2 + ink_rect.height * 1.7; -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkBorder border; @@ -607,47 +583,25 @@ sp_ruler_size_request (GtkWidget *widget, requisition->width = border.left + border.right; requisition->height = border.top + border.bottom; -#else - GtkStyle *style = gtk_widget_get_style(widget); -#endif if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { -#if GTK_CHECK_VERSION(3,0,0) requisition->width += 1; requisition->height += size; -#else - requisition->width = style->xthickness * 2 + 1; - requisition->height = style->ythickness * 2 + size; -#endif } else { -#if GTK_CHECK_VERSION(3,0,0) requisition->width += size; requisition->height += 1; -#else - requisition->width = style->xthickness * 2 + size; - requisition->height = style->ythickness * 2 + 1; -#endif } } static void -#if GTK_CHECK_VERSION(3,0,0) sp_ruler_style_updated (GtkWidget *widget) -#else -sp_ruler_style_set (GtkWidget *widget, - GtkStyle *prev_style) -#endif { SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (widget); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS (sp_ruler_parent_class)->style_updated (widget); -#else - GTK_WIDGET_CLASS (sp_ruler_parent_class)->style_set (widget, prev_style); -#endif gtk_widget_style_get (widget, "font-scale", &priv->font_scale, @@ -660,7 +614,6 @@ sp_ruler_style_set (GtkWidget *widget, } } -#if GTK_CHECK_VERSION(3,0,0) static void sp_ruler_get_preferred_width (GtkWidget *widget, gint *minimum_width, @@ -684,26 +637,6 @@ sp_ruler_get_preferred_height (GtkWidget *widget, *minimum_height = *natural_height = requisition.height; } -#else -static gboolean -sp_ruler_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget)); - GtkAllocation allocation; - - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - gtk_widget_get_allocation (widget, &allocation); - - gboolean result = sp_ruler_draw (widget, cr); - - cairo_destroy (cr); - - return result; -} -#endif static gboolean sp_ruler_draw (GtkWidget *widget, @@ -749,13 +682,8 @@ sp_ruler_draw_pos (SPRuler *ruler, { GtkWidget *widget = GTK_WIDGET (ruler); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GdkRGBA color; -#else - GtkStyle *style = gtk_widget_get_style (widget); - GtkStateType state = gtk_widget_get_state (widget); -#endif SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); GdkRectangle pos_rect; @@ -767,13 +695,9 @@ sp_ruler_draw_pos (SPRuler *ruler, if ((pos_rect.width > 0) && (pos_rect.height > 0)) { -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), &color); gdk_cairo_set_source_rgba (cr, &color); -#else - gdk_cairo_set_source_color (cr, &style->fg[state]); -#endif cairo_move_to (cr, pos_rect.x, pos_rect.y); @@ -1112,16 +1036,9 @@ sp_ruler_draw_ticks (SPRuler *ruler) { GtkWidget *widget = GTK_WIDGET (ruler); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkBorder border; GdkRGBA color; -#else - GtkStyle *style = gtk_widget_get_style (widget); - GtkStateType state = gtk_widget_get_state (widget); - gint xthickness; - gint ythickness; -#endif SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); GtkAllocation allocation; @@ -1150,12 +1067,7 @@ sp_ruler_draw_ticks (SPRuler *ruler) gtk_widget_get_allocation (widget, &allocation); -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_get_border (context, static_cast(0), &border); -#else - xthickness = style->xthickness; - ythickness = style->ythickness; -#endif layout = sp_ruler_get_layout (widget, "0123456789"); pango_layout_get_extents (layout, &ink_rect, &logical_rect); @@ -1166,25 +1078,16 @@ sp_ruler_draw_ticks (SPRuler *ruler) if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { width = allocation.width; -#if GTK_CHECK_VERSION(3,0,0) height = allocation.height - (border.top + border.bottom); -#else - height = allocation.height - ythickness * 2; -#endif } else { width = allocation.height; -#if GTK_CHECK_VERSION(3,0,0) height = allocation.width - (border.top + border.bottom); -#else - height = allocation.width - ythickness * 2; -#endif } cr = cairo_create (priv->backing_store); -#if GTK_CHECK_VERSION(3,0,0) gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); @@ -1208,30 +1111,6 @@ sp_ruler_draw_ticks (SPRuler *ruler) 1, allocation.height - (border.top + border.bottom)); } -#else - gdk_cairo_set_source_color (cr, &style->bg[state]); - - cairo_paint (cr); - - gdk_cairo_set_source_color(cr, &style->fg[state]); - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_rectangle (cr, - xthickness, - height + ythickness, - allocation.width - 2 * xthickness, - 1); - } - else - { - cairo_rectangle (cr, - height + xthickness, - ythickness, - 1, - allocation.height - 2 * ythickness); - } -#endif sp_ruler_get_range (ruler, &lower, &upper, &max_size); @@ -1312,7 +1191,6 @@ sp_ruler_draw_ticks (SPRuler *ruler) // by a pixel, and jump back on the next redraw). This is suppressed by adding 1e-9 (that's only one nanopixel ;-)) pos = gint(Inkscape::round((cur - lower) * increment + 1e-12)); -#if GTK_CHECK_VERSION(3,0,0) if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { cairo_rectangle (cr, @@ -1325,20 +1203,6 @@ sp_ruler_draw_ticks (SPRuler *ruler) height + border.left - length, pos, length, 1); } -#else - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - cairo_rectangle (cr, - pos, height + ythickness - length, - 1, length); - } - else - { - cairo_rectangle (cr, - height + xthickness - length, pos, - length, 1); - } -#endif /* draw label */ double label_spacing_px = fabs(increment*(double)ruler_metric.ruler_scale[scale]/ruler_metric.subdivide[i]); @@ -1356,15 +1220,9 @@ sp_ruler_draw_ticks (SPRuler *ruler) pango_layout_set_text (layout, unit_str, -1); pango_layout_get_extents (layout, &logical_rect, NULL); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, pos + 2, border.top + PANGO_PIXELS (logical_rect.y - digit_offset)); -#else - cairo_move_to (cr, - pos + 2, - ythickness + PANGO_PIXELS (logical_rect.y - digit_offset)); -#endif pango_cairo_show_layout(cr, layout); } @@ -1378,15 +1236,9 @@ sp_ruler_draw_ticks (SPRuler *ruler) pango_layout_set_text (layout, digit_str, 1); pango_layout_get_extents (layout, NULL, &logical_rect); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, border.left + 1, pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset)); -#else - cairo_move_to (cr, - xthickness + 1, - pos + digit_height * j + 2 + PANGO_PIXELS (logical_rect.y - digit_offset)); -#endif pango_cairo_show_layout (cr, layout); } } @@ -1423,7 +1275,6 @@ sp_ruler_get_pos_rect (SPRuler *ruler, gtk_widget_get_allocation (widget, &allocation); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context (widget); GtkBorder padding; @@ -1431,11 +1282,6 @@ sp_ruler_get_pos_rect (SPRuler *ruler, xthickness = padding.left + padding.right; ythickness = padding.top + padding.bottom; -#else - GtkStyle *style = gtk_widget_get_style (widget); - xthickness = style->xthickness; - ythickness = style->ythickness; -#endif if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) { -- cgit v1.2.3 From 97982ed4dad36def90c0d365eea721282b964ca6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 27 Jul 2016 12:32:27 -0500 Subject: Switch to using the desktop helpers (bzr r14950.1.13) --- snapcraft.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/snapcraft.yaml b/snapcraft.yaml index f9e49b466..ac3e1b640 100644 --- a/snapcraft.yaml +++ b/snapcraft.yaml @@ -37,7 +37,7 @@ parts: - liblcms2-dev - libmagick++-dev - libpango1.0-dev - - libpng16-dev + - libpng12-dev - libpoppler-glib-dev - libpoppler-private-dev - libpopt-dev @@ -71,22 +71,22 @@ parts: - libvisio-0.1-1 - libwpg-0.3-3 - libglib2.0-bin - - light-themes + stage: + - -usr/sbin/update-icon-caches + - -usr/share/pkgconfig snap: - -lib/inkscape/*.a + after: [desktop/gtk2] snapcraft-wrapper: plugin: copy files: snapcraft.sh: snapcraft.sh README: lib/share/README - gtklaunch: - plugin: make - source: https://github.com/dplanella/gtkconf.git apps: inkscape: - command: snapcraft.sh gtk-launch inkscape + command: snapcraft.sh desktop-launch inkscape plugs: [home, unity7] viewer: - command: snapcraft.sh gtk-launch inkview + command: snapcraft.sh desktop-launch inkview plugs: [home, unity7] -- cgit v1.2.3 From 4404c64b1a54c3d4a5aa49aef6b48cc6a542b8e1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 27 Jul 2016 12:38:20 -0500 Subject: Adding gsettings interface and moving files (bzr r14950.1.14) --- .snapcraft.yaml | 92 +++++++++++++++++++++++++++++++++++++++++++ packaging/snappy/snapcraft.sh | 6 +++ snapcraft.sh | 6 --- snapcraft.yaml | 92 ------------------------------------------- 4 files changed, 98 insertions(+), 98 deletions(-) create mode 100644 .snapcraft.yaml create mode 100755 packaging/snappy/snapcraft.sh delete mode 100755 snapcraft.sh delete mode 100644 snapcraft.yaml diff --git a/.snapcraft.yaml b/.snapcraft.yaml new file mode 100644 index 000000000..8ab13715f --- /dev/null +++ b/.snapcraft.yaml @@ -0,0 +1,92 @@ +name: inkscape +version: 0.91+devel +summary: Vector Graphics Editor +description: | + An Open Source vector graphics editor, with capabilities similar to + Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector + Graphics (SVG) file format. + + Inkscape supports many advanced SVG features (markers, clones, alpha blending, + etc.) and great care is taken in designing a streamlined interface. + It is very easy to edit nodes, perform complex path operations, trace + bitmaps and much more. + + We also aim to maintain a thriving user and developer community by using + open, community-oriented development. +confinement: devmode # use "strict" to enforce system access only via declared interfaces + +parts: + inkscape: + plugin: cmake + source: . + configflags: ['-DENABLE_BINRELOC=ON'] + build-packages: + - cmake + - intltool + - libart-2.0-dev + - libaspell-dev + - libboost-dev + - libcdr-dev + - libgc-dev + - libglib2.0-dev + - libgnomevfs2-dev + - libgsl-dev + - libgtk2.0-dev + - libgtkmm-2.4-dev + - libgtkspell-dev + - liblcms2-dev + - libmagick++-dev + - libpango1.0-dev + - libpng12-dev + - libpoppler-glib-dev + - libpoppler-private-dev + - libpopt-dev + - librevenge-dev + - libsigc++-2.0-dev + - libtool + - libvisio-dev + - libwpg-dev + - libxml-parser-perl + - libxml2-dev + - libxslt1-dev + - pkg-config + - python-dev + - python-lxml + - zlib1g-dev + stage-packages: + - libaspell15 + - libatkmm-1.6-1v5 + - libcairomm-1.0-1v5 + - libcdr-0.1-1 + - libgdk-pixbuf2.0-0 + - libglibmm-2.4-1v5 + - libgnomevfs2-0 + - libgtkmm-2.4-1v5 + - libgtkspell0 + - liblcms2-2 + - libmagick++-6.q16-5v5 + - libpangomm-1.4-1v5 + - libpoppler-glib8 + - librevenge-0.0-0 + - libvisio-0.1-1 + - libwpg-0.3-3 + - libglib2.0-bin + stage: + - -usr/sbin/update-icon-caches + - -usr/share/pkgconfig + snap: + - -lib/inkscape/*.a + after: [desktop/gtk2] + snapcraft-wrapper: + plugin: copy + files: + packaging/snappy/snapcraft.sh: snapcraft.sh + README: lib/share/README + +apps: + inkscape: + command: snapcraft.sh desktop-launch inkscape + plugs: [home, unity7, gsettings] + viewer: + command: snapcraft.sh desktop-launch inkview + plugs: [home, unity7, gsettings] diff --git a/packaging/snappy/snapcraft.sh b/packaging/snappy/snapcraft.sh new file mode 100755 index 000000000..7e12fe964 --- /dev/null +++ b/packaging/snappy/snapcraft.sh @@ -0,0 +1,6 @@ +#!/bin/sh -e + +export INKSCAPE_PORTABLE_PROFILE_DIR="${SNAP_USER_DATA}" +export INKSCAPE_LOCALEDIR="${SNAP}/share/locale/" + +exec $@ diff --git a/snapcraft.sh b/snapcraft.sh deleted file mode 100755 index 7e12fe964..000000000 --- a/snapcraft.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -e - -export INKSCAPE_PORTABLE_PROFILE_DIR="${SNAP_USER_DATA}" -export INKSCAPE_LOCALEDIR="${SNAP}/share/locale/" - -exec $@ diff --git a/snapcraft.yaml b/snapcraft.yaml deleted file mode 100644 index ac3e1b640..000000000 --- a/snapcraft.yaml +++ /dev/null @@ -1,92 +0,0 @@ -name: inkscape -version: 0.91+devel -summary: Vector Graphics Editor -description: | - An Open Source vector graphics editor, with capabilities similar to - Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector - Graphics (SVG) file format. - - Inkscape supports many advanced SVG features (markers, clones, alpha blending, - etc.) and great care is taken in designing a streamlined interface. - It is very easy to edit nodes, perform complex path operations, trace - bitmaps and much more. - - We also aim to maintain a thriving user and developer community by using - open, community-oriented development. -confinement: devmode # use "strict" to enforce system access only via declared interfaces - -parts: - inkscape: - plugin: cmake - source: . - configflags: ['-DENABLE_BINRELOC=ON'] - build-packages: - - cmake - - intltool - - libart-2.0-dev - - libaspell-dev - - libboost-dev - - libcdr-dev - - libgc-dev - - libglib2.0-dev - - libgnomevfs2-dev - - libgsl-dev - - libgtk2.0-dev - - libgtkmm-2.4-dev - - libgtkspell-dev - - liblcms2-dev - - libmagick++-dev - - libpango1.0-dev - - libpng12-dev - - libpoppler-glib-dev - - libpoppler-private-dev - - libpopt-dev - - librevenge-dev - - libsigc++-2.0-dev - - libtool - - libvisio-dev - - libwpg-dev - - libxml-parser-perl - - libxml2-dev - - libxslt1-dev - - pkg-config - - python-dev - - python-lxml - - zlib1g-dev - stage-packages: - - libaspell15 - - libatkmm-1.6-1v5 - - libcairomm-1.0-1v5 - - libcdr-0.1-1 - - libgdk-pixbuf2.0-0 - - libglibmm-2.4-1v5 - - libgnomevfs2-0 - - libgtkmm-2.4-1v5 - - libgtkspell0 - - liblcms2-2 - - libmagick++-6.q16-5v5 - - libpangomm-1.4-1v5 - - libpoppler-glib8 - - librevenge-0.0-0 - - libvisio-0.1-1 - - libwpg-0.3-3 - - libglib2.0-bin - stage: - - -usr/sbin/update-icon-caches - - -usr/share/pkgconfig - snap: - - -lib/inkscape/*.a - after: [desktop/gtk2] - snapcraft-wrapper: - plugin: copy - files: - snapcraft.sh: snapcraft.sh - README: lib/share/README - -apps: - inkscape: - command: snapcraft.sh desktop-launch inkscape - plugs: [home, unity7] - viewer: - command: snapcraft.sh desktop-launch inkview - plugs: [home, unity7] -- cgit v1.2.3 From 9c5237f32f59176c16371a54a25e9c840b25e958 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 27 Jul 2016 12:40:46 -0500 Subject: Adding a pre translated desktop file (bzr r14950.1.15) --- setup/gui/inkscape.desktop | 337 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 setup/gui/inkscape.desktop diff --git a/setup/gui/inkscape.desktop b/setup/gui/inkscape.desktop new file mode 100644 index 000000000..4340421aa --- /dev/null +++ b/setup/gui/inkscape.desktop @@ -0,0 +1,337 @@ +[Desktop Entry] +Version=1.0 +Name[ar]=إنكسكيب +Name[as]=ইনসà§à¦•েপ +Name[be]=Inkscape +Name[bn_BD]=ইনà§à¦•সà§à¦•েপ +Name[br]=Inkscape +Name[brx]=इङà¥à¤•सà¥à¤•ेप +Name[ca]=Inkscape +Name[ca@valencia]=Inkscape +Name[cs]=Inkscape +Name[da]=Inkscape +Name[de]=Inkscape +Name[doi]=इंकसà¥à¤•ेप +Name[el]=Inkscape +Name[en_GB]=Inkscape +Name[en_US@piglatin]=Inkscape +Name[es]=Inkscape +Name[eu]=Inkscape +Name[fr]=Inkscape +Name[gl]=Inkscape +Name[gu]=Inkscape +Name[he]=×ינקסקייפ +Name[hi]=इंकसà¥à¤•ेप +Name[hu]=Inkscape +Name[id]=Inkscape +Name[is]=Inkscape +Name[it]=Inkscape +Name[ja]=Inkscape +Name[km]=Inkscape +Name[kn]=ಇಂಕà³â€Œà²¸à³à²•ೇಪೠ+Name[ko]=Inkscape +Name[kok]=इंकसà¥à¤•ेप +Name[kok@latin]=Inkscape +Name[ks@aran]=اÙنکسکیپ +Name[ks@deva]=इनकसकेप +Name[lv]=Inkscape +Name[mai]=Inkscape +Name[ml]=ഇങàµà´•àµà´¸àµà´•െയàµà´ªàµ +Name[mni]=ê¯ê¯ªê¯›ê¯ê¯­ê¯€ê¯¦ê¯ž +Name[mni@beng]=ইঙà§à¦•সà§à¦•েপ +Name[mr]=इंकसà¥à¤•ेप +Name[nl]=Inkscape +Name[or]=ଇଙà­à¬•à­à¬¸à­à¬•େପ +Name[pl]=Inkscape +Name[pt_BR]=Inkscape +Name[ro]=Inkscape +Name[ru]=Inkscape +Name[sa]=इङà¥à¤•à¥à¤¸à¥à¤•ेपॠ+Name[sat@deva]=काली ञेनेल +Name[sat]=ᱠᱟᱞᱤ ᱧᱮᱱᱮᱞ +Name[sd]=اÙنڪسڪيپ +Name[sd@deva]=इंकसà¥à¤•ेप +Name[sk]=Inkscape +Name[sl]=Inkscape +Name[sr@latin]=Inkscape +Name[sr]=Inkscape +Name[ta]=Inkscape +Name[te]=ఇంకà±â€Œà°¸à±à°•ేపౠ+Name[tr]=Inkscape +Name[uk]=Inkscape +Name[ur]=انك اسكیپ +Name[vi]=Inkscape +Name[zh_CN]=Inkscape +Name[zh_TW]=Inkscape +Name=Inkscape +GenericName[ar]=محرر الرسومات الشعاعية +GenericName[as]=ভেকà§à¦Ÿà§° গà§à§°à¦¾à¦«à¦¿à¦•à§à¦¸ সমà§à¦ªà¦¾à¦¦à¦¨à¦•à§°à§à¦¤à¦¾ +GenericName[be]=РÑдактар вÑктарнай ґрафікі +GenericName[bn_BD]=ভেকà§à¦Ÿà¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ সমà§à¦ªà¦¾à¦¦à¦• +GenericName[br]=Embanner kevregadoù sturiadel +GenericName[brx]=भेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ सà¥à¤œà¥à¤—िरि +GenericName[ca]=Editor de gràfics vectorials +GenericName[ca@valencia]=Editor de gràfics vectorials +GenericName[cs]=editor vektorové grafiky +GenericName[da]=Vectorgrafik redigering +GenericName[de]=Vektorgrafikeditor +GenericName[doi]=वैकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +GenericName[el]=ΕπεξεÏγαστής διανυσματικών γÏαφικών +GenericName[en_GB]=Vector Graphics Editor +GenericName[en_US@piglatin]=Ectorvay Aphicsgray Editorway +GenericName[es]=Editor de gráficos vectoriales +GenericName[eu]=Bektore-grafikoen editorea +GenericName[fr]=Éditeur d'images vectorielles SVG Inkscape +GenericName[gl]=Editor de imaxes vectoriais +GenericName[gu]=વà«àª¹à«‡àª•à«àªŸàª° ગà«àª°àª¾àª«àª¿àª•à«àª¸ સંપાદક +GenericName[he]=עורך גרפיקה וקטורית +GenericName[hi]=वेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +GenericName[hu]=Vektorgrafikai szerkesztÅ‘ +GenericName[id]=Penyunting Grafik Vektor +GenericName[is]=Teikniforrit fyrir vigramyndir / línuteikningar +GenericName[it]=Grafica vettoriale SVG +GenericName[ja]=ベクターグラフィックエディター +GenericName[km]=កម្មវិធី​កែ​សម្រួល​ក្រាហ្វិក​វ៉ិចទáŸážš +GenericName[kn]=ವೆಕà³à²Ÿà²°à³ ಗà³à²°à²¾à²«à²¿à²•à³à²¸à³ ಸಂಪಾದಕ +GenericName[ko]=벡터 그래픽 편집기 +GenericName[kok]=वà¥à¤¹à¥‡à¤•à¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +GenericName[kok@latin]=vekttor grafiks edittor +GenericName[ks@aran]=ویکٹر گراÙکس اڈیٹر +GenericName[ks@deva]=वयकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¼à¤¿à¤•à¥à¤¸ अडीटर +GenericName[lv]=Vektoru grafikas redaktors +GenericName[mai]=सदिश आलेखी संपादक +GenericName[ml]=വെകàµà´Ÿà´°àµâ€ à´—àµà´°à´¾à´«à´¿à´•àµà´¸àµ à´Žà´¡à´¿à´±àµà´±à´°àµâ€ +GenericName[mni]=ꯚꯦꯛꯇꯔ ꯒ꯭ꯔꯥê¯ê¯¤ê¯›ê¯ ê¯ê¯—ꯤꯇꯔ +GenericName[mni@beng]=ভেকà§à¦¤à¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ ইদিতর +GenericName[mr]=वà¥à¤¹à¥‡à¤•à¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +GenericName[nl]=Vector tekenpakket +GenericName[or]=ଭେକà­à¬Ÿà¬° ଗà­à¬°à¬¾à¬«à¬¿à¬•à­à¬¸ ସଂପାଦà­à¬• +GenericName[pl]=Edytor grafiki wektorowej +GenericName[pt_BR]=Editor de Imagens Vetoriais +GenericName[ro]=Editor de grafică vectorială +GenericName[ru]=Редактор векторной графики +GenericName[sa]=वेकà¥à¤Ÿà¤°à¥ सà¥à¤šà¤¿à¤¤à¥à¤°à¥€à¤¯à¤¸à¤‚पादकः +GenericName[sat@deva]=वेकà¥à¤Ÿà¤° गार चिता़र सासापड़ाव +GenericName[sat]=ᱣᱮᱠᱴᱨ ᱜᱟᱨ ᱪᱤᱛᱟᱹᱨ ᱥᱟᱥᱟᱯᱲᱟᱣ +GenericName[sd]=ويڪٽر اکري Ú†Ù½ سمپادڪ +GenericName[sd@deva]=वेकà¥à¤Ÿà¤° अखिरी चिट संपादकॠ+GenericName[sk]=editor vektorovej grafiky +GenericName[sl]=Urejevalnik vektorskih slik +GenericName[sr@latin]=Program za vektorsko crtanje +GenericName[sr]=Програм за векторÑко цртање +GenericName[ta]=வெகà¯à®Ÿà®¾à®°à¯ வரைகலை எடிடà¯à®Ÿà®°à¯ +GenericName[te]=సదిశ రేఖాచితà±à°°à°¾à°² కూరà±à°ªà°°à°¿ +GenericName[tr]=Vektörel Grafik Düzenleyici +GenericName[uk]=Редактор векторної графіки +GenericName[ur]=انك اسكیپ ویكٹر گراÙیكس ایڈیٹر +GenericName[vi]=Trình xá»­ lý ảnh Véc-tÆ¡ +GenericName[zh_CN]=矢é‡å›¾å½¢ç¼–辑器 +GenericName[zh_TW]=å‘é‡ç¹ªåœ–軟體 +GenericName=Vector Graphics Editor +X-GNOME-FullName[ar]=إنكسكيب محرر الرسومات الشعاعية +X-GNOME-FullName[as]=ইনসà§à¦•েপ ভেকà§à¦Ÿà§° গà§à§°à¦¾à¦«à¦¿à¦•à§à¦¸ সমà§à¦ªà¦¾à¦¦à¦¨à¦•à§°à§à¦¤à¦¾ +X-GNOME-FullName[be]=РÑдактар вÑктарнай ґрафікі Inkscape +X-GNOME-FullName[bg]=Inkscape илюÑтратор за векторна графика +X-GNOME-FullName[bn_BD]=ইনà§à¦•সà§à¦•েপ ভেকà§à¦Ÿà¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ সমà§à¦ªà¦¾à¦¦à¦• +X-GNOME-FullName[br]=Inkscape Embanner kevregadoù sturiadel +X-GNOME-FullName[brx]=इङà¥à¤•सà¥à¤•ेप भेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ सà¥à¤œà¥à¤—िरि +X-GNOME-FullName[ca]=Editor de gràfics vectorials Inkscape +X-GNOME-FullName[ca@valencia]=Editor de gràfics vectorials Inkscape +X-GNOME-FullName[cs]=Inkscape - editor vektorové grafiky +X-GNOME-FullName[da]=Inkscape vektorgrafik redigering +X-GNOME-FullName[de]=Vektorgrafikeditor Inkscape +X-GNOME-FullName[doi]=इंकसà¥à¤•ेप वैकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +X-GNOME-FullName[el]=ΕπεξεÏγαστής διανυσματικών γÏαφικών Inkscape +X-GNOME-FullName[en_GB]=Inkscape Vector Graphics Editor +X-GNOME-FullName[en_US@piglatin]=Inkscape Ectorvay Aphicsgray Editorway +X-GNOME-FullName[eo]=Inkscape: Ilustrilo por Vektoraj Bildoj +X-GNOME-FullName[es]=Editor de gráficos vectoriales Inkscape +X-GNOME-FullName[et]=Inkscape, vektorgraafika redaktor +X-GNOME-FullName[eu]=Inkscape bektore-grafikoen editorea +X-GNOME-FullName[fi]=Inkscape vektorigrafiikkatyökalu +X-GNOME-FullName[fr]=Éditeur d'images vectorielles SVG Inkscape +X-GNOME-FullName[gl]=Editor de imaxes vectoriais Inkscape +X-GNOME-FullName[gu]=Inkscape વà«àª¹à«‡àª•à«àªŸàª° ગà«àª°àª¾àª«àª¿àª•à«àª¸ સંપાદક +X-GNOME-FullName[he]=×ינקסקייפ — עורך גרפיקה וקטורית +X-GNOME-FullName[hi]=इंकसà¥à¤•ेप वेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +X-GNOME-FullName[hr]=Inkscape - program za vektorsko crtanje +X-GNOME-FullName[hu]=Inkscape - vektorgrafikai szerkesztÅ‘ +X-GNOME-FullName[hy]=Inkscape ÕŽÕ¥Õ¯Õ¿Õ¸Ö€Õ¡ÕµÕ«Õ¶ Ô³Ö€Õ¡Ö†Õ«Õ¯Õ¡ÕµÕ« Ô½Õ´Õ¢Õ¡Õ£Õ«Ö€ +X-GNOME-FullName[id]=Penyunting Grafik Vektor Inkscape +X-GNOME-FullName[is]=Inkscape teikniforrit fyrir vigramyndir +X-GNOME-FullName[it]=Inkscape - Grafica vettoriale SVG +X-GNOME-FullName[ja]=Inkscape ベクターグラフィックエディター +X-GNOME-FullName[km]=កម្មវិធី​កែ​សម្រួល​ក្រាហ្វិក​វ៉ិចទáŸážšâ€‹ážšáž”ស់​ Inkscape +X-GNOME-FullName[kn]=ಇಂಕà³â€Œà²¸à³à²•ೇಪೠವೆಕà³à²Ÿà²°à³ ಗà³à²°à²¾à²«à²¿à²•à³à²¸à³ ಸಂಪಾದಕ +X-GNOME-FullName[ko]=Inkscape 벡터 그래픽 편집기 +X-GNOME-FullName[kok]=इंकसà¥à¤•ेप वà¥à¤¹à¥‡à¤•à¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +X-GNOME-FullName[kok@latin]=Inkscape vekttor grafiks edittor +X-GNOME-FullName[ks@aran]=اÙنسکیپ ویکٹر گراÙکس اڈیٹر +X-GNOME-FullName[ks@deva]=इनकसकेप वेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¼à¤¿à¤•à¥à¤¸ अडीटर +X-GNOME-FullName[lt]=Inkscape vektorinÄ—s grafikos rengyklÄ— +X-GNOME-FullName[lv]=Vektoru grafikas redaktors Inkscape +X-GNOME-FullName[mai]=Inkscape सदिश आलेखी संपादक +X-GNOME-FullName[ml]=ഇങàµà´•àµà´¸àµà´•െയàµà´ªàµ വെകàµà´Ÿà´°àµâ€ à´—àµà´°à´¾à´«à´¿à´•àµà´¸àµ à´Žà´¡à´¿à´±àµà´±à´°àµâ€ +X-GNOME-FullName[mni]=ê¯ê¯ªê¯›ê¯ê¯­ê¯€ê¯¦ê¯ž ꯚꯦꯛꯇꯔ ꯒ꯭ꯔꯥê¯ê¯¤ê¯›ê¯ ê¯ê¯—ꯤꯇꯔ +X-GNOME-FullName[mni@beng]=ইঙà§à¦•সà§à¦•েপ ভেকà§à¦¤à¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ ইদিতর +X-GNOME-FullName[mr]=इंकसà¥à¤•ेप वà¥à¤¹à¥‡à¤•à¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ संपादक +X-GNOME-FullName[nb]=Inkscape vektor-tegneprogram +X-GNOME-FullName[nl]=Inkscape vector tekenpakket +X-GNOME-FullName[or]=ଇଙà­à¬•ସà­à¬•େପ ଭେକà­à¬Ÿà¬° ଗà­à¬°à¬¾à¬«à¬¿à¬•à­à¬¸ ସଂପାଦକ +X-GNOME-FullName[pl]=Inkscape - edytor grafiki wektorowej +X-GNOME-FullName[pt_BR]=Editor de Imagens Vetoriais Inkscape +X-GNOME-FullName[pt]=Inkscape Editor de Imagem Vectorial +X-GNOME-FullName[ro]=Inkscape – Editor de grafică vectorială +X-GNOME-FullName[ru]=Редактор векторной графики Inkscape +X-GNOME-FullName[sa]=इङà¥à¤•à¥à¤¸à¥à¤•ेपॠवेकà¥à¤Ÿà¤°à¥ सà¥à¤šà¤¿à¤¤à¥à¤°à¥€à¤¯à¤¸à¤‚पादकः +X-GNOME-FullName[sat@deva]=काली ञेनेल वेकà¥à¤Ÿà¤° गार चिता़र सासापड़ाव +X-GNOME-FullName[sat]=ᱠᱟᱞᱤ ᱧᱮᱱᱮᱞ ᱣᱮᱠᱴᱨ ᱜᱟᱨ ᱪᱤᱛᱟᱹᱨ ᱥᱟᱥᱟᱯᱲᱟᱣ +X-GNOME-FullName[sd]=اÙنڪسڪيپ ويڪٽر اکري Ú†Ù½ +X-GNOME-FullName[sd@deva]=इंकसà¥à¤•ेप वेकà¥à¤Ÿà¤° अखिरी चिट संपादकॠ+X-GNOME-FullName[sk]=Inkscape - editor vektorovej grafiky +X-GNOME-FullName[sl]=Urejevalnik vektorskih slik Inkscape +X-GNOME-FullName[sr@latin]=Inkscape program za vektorsko crtanje +X-GNOME-FullName[sr]=Inkscape програм за векторÑко цртање +X-GNOME-FullName[sv]=Vektorillustratören Inkscape +X-GNOME-FullName[ta]=Inkscape வெகà¯à®Ÿà®°à¯ வரைகலை எடிடà¯à®Ÿà®°à¯ +X-GNOME-FullName[te]=ఇంకà±â€Œà°¸à±à°•ేపౠసదిశ రేఖాచితà±à°°à°¾à°² కూరà±à°ªà°°à°¿ +X-GNOME-FullName[tr]=Inkscape Vektörel Grafik Düzenleyici +X-GNOME-FullName[uk]=Редактор векторної графіки Inkscape +X-GNOME-FullName[ur]=انك اسكیپ ویكٹر گراÙیكس ایڈیٹر +X-GNOME-FullName[vi]=Inkscape - Trình Xá»­ lý Ảnh Véc-tÆ¡ +X-GNOME-FullName[zh_CN]=Inkscape 矢é‡ç»˜å›¾è½¯ä»¶ +X-GNOME-FullName[zh_TW]=Inkscape å‘é‡ç¹ªåœ–軟體 +X-GNOME-FullName=Inkscape Vector Graphics Editor +Comment[ar]=إنشاء Ùˆ تحرير الرسومات الشعاعية +Comment[as]=জà§à¦–িব পৰা ভেকà§à¦Ÿà§° গà§à§°à¦¾à¦«à¦¿à¦•à§à¦¸ ছবিবোৰ তৈয়াৰ আৰৠসমà§à¦ªà¦¾à¦¦à¦¨à¦¾ কৰক +Comment[be]=СтварÑньне й зьмÑненьне відарыÑаў вÑктарнай ґрафікі (SVG) +Comment[bg]=Създаване и Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Scalable Vector Graphics +Comment[bn]=সà§à¦•েলেবল ভেকà§à¦Ÿà¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ ছবি তৈরী ও সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨ +Comment[bn_BD]=সà§à¦•েলেবল ভেকà§à¦Ÿà¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ ছবি তৈরী ও সমà§à¦ªà¦¾à¦¦à¦¨à¦¾ করà§à¦¨ +Comment[br]=Krouiñ hag embann skeudennoù mod SVG (Scalable Vector Graphics) +Comment[brx]=सà¥à¤œà¤¾à¤¥à¤¾à¤µ भेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ मà¥à¤¸à¥à¤–ाफोर सोरजि आरो सà¥à¤œà¥ +Comment[ca]=Creeu i editeu imatges de gràfics de vectors escalables +Comment[ca@valencia]=Creeu i editeu imatges de gràfics de vectors escalables +Comment[cs]=Vytvářejte a upravujte vektorovou grafiku (SVG) +Comment[da]=Opret og redigér SVG-billeder +Comment[de]=Skalierbare Vektorgrafiken erstellen und bearbeiten +Comment[doi]=मापजोग वैकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ बिंब बनाओ ते संपादत करो +Comment[dz]=ཆ་ཚད་འཇལ་བà½à½´à½–་པའི་མཉམ་à½à½²à½‚་ཚད་རིས་ཀྱི་གཟུགས་བརྙན་ཚུ་གསར་བསà¾à¾²à½´à½“་དང་ཞུན་དག་འབད༠+Comment[el]=ΔημιουÏγία και Ï„Ïοποποίηση κλιμακώσιμων διανυσματικών εικόνων γÏαφικών +Comment[en_AU]=Create and edit Scalable Vector Graphics images +Comment[en_GB]=Create and edit Scalable Vector Graphics images +Comment[en_US@piglatin]=Eatecray andway editway Alablescay Ectorvay Aphicsgray imagesway +Comment[eo]=Kreu kaj redaktu bildoj en formato SVG (Scalable Vector Graphics) +Comment[es]=Cree y edite Gráficos Vectoriales Escalables (SVG) +Comment[et]=SVG-vektorgraafikas piltide joonistamine ja muutmine +Comment[eu]=Sortu eta editatu Grafiko Bektorial Eskalakor (SVG) irudiak +Comment[fi]=Luo ja muokkaa Scalable Vector Graphics -piirroksia +Comment[fr]=Créer et éditer des images Scalable Vector Graphics +Comment[gl]=Cree e edite imaxes Scalable Vector Graphics +Comment[gu]=માપવાયોગà«àª¯ વà«àª¹à«‡àª•à«àªŸàª° ગà«àª°àª¾àª«àª¿àª•à«àª¸ છવિઓ બનાવો અને સંપાદિત કરો +Comment[he]=יצירה ועריכה של תמונות בגרפיקת ×•×§×˜×•×¨×™× × ×ž×ª×—×ª +Comment[hi]=मापनीय वेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ छवियां बनाà¤à¤‚ और संपादित करें +Comment[hr]=Stvaranje i ureÄ‘ivanje vektorskih crteža +Comment[hu]=Scalable Vector Graphics (méretezhetÅ‘ vektorgrafika, SVG)-képek létrehozása és szerkesztése +Comment[id]=Membuat dan mengedit gambar Scalable Vector Graphics +Comment[is]=Vinna með SVG vektorteikningar (Scalable Vector Graphics) +Comment[it]=Crea e modifica immagini Scalable Vector Graphics +Comment[ja]=Scalable Vector Graphics (SVG) ç”»åƒã®ä½œæˆã¨ç·¨é›†ã‚’行ã„ã¾ã™ +Comment[km]=បង្កើហនិង​កែសម្រួល​​​រូបភាព​ក្រាហ្វិក​វ៉ិចទáŸážšâ€‹ážŠáŸ‚ល​អាច​ធ្វើ​មាážáŸ’រដ្ឋាន​បាន​​ +Comment[kn]=ಸà³à²•ೇಲೆಬಲೠವೆಕà³à²Ÿà²°à³ ಗà³à²°à²¾à²«à²¿à²•à³à²¸à³ ಚಿತà³à²°à²—ಳನà³à²¨à³ ರಚಿಸಿ ಹಾಗೠಸಂಪಾದಿಸಿ +Comment[ko]=SVG ì´ë¯¸ì§€ ìƒì„± ë° íŽ¸ì§‘ +Comment[kok]=सà¥à¤•ेलेबल वà¥à¤¹à¥‡à¤•à¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ पà¥à¤°à¤¤à¤¿à¤®à¤¾ तयार आणि संपादित करात +Comment[kok@latin]=Mapache vekttor grafiks rupnnem roch ani sompadit kor +Comment[ks@aran]=بناویوتÛÙ• ادارت کٔریو قابلئ پیمائش ویکٹر گراÙکس Ø´Ú©Ù„ÛÙ• +Comment[ks@deva]=बनावीव तअ. इदारत कॲरीव क़ाबलिअ पेयमाईश वयकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¼à¤¿à¤•à¥à¤¸ शकलअ. +Comment[lt]=Kurti ir redaguoti vektorinius grafinius pieÅ¡inius +Comment[lv]=Izveidojiet un labojiet mÄ“rogojamÄs vektoru grafikas (SVG) attÄ“lus +Comment[mai]=मापनीय सदिश आलेखी छवि बनाउ आओर संपादित करू +Comment[ml]=à´¸àµà´•െയിലബിളàµâ€ വെകàµà´±àµà´±à´°àµâ€ à´—àµà´°à´¾à´«à´¿à´•àµà´¸àµ à´šà´¿à´¤àµà´°à´™àµà´™à´³àµ† നിരàµâ€à´®àµà´®à´¿à´•àµà´•àµà´•യൊ à´Žà´¡à´¿à´±àµà´±àµ†à´¾ ചെയàµà´¯àµà´• +Comment[mni]=ê¯ê¯­ê¯€ê¯¦ê¯‚ꯦꯕꯜ ꯚꯦꯛꯇꯔ ꯒ꯭ꯔꯥê¯ê¯¤ê¯›ê¯ ê¯ê¯ƒê¯¦ê¯–ê¯ê¯¤ê¯¡ ê¯ê¯¦ê¯ê¯’ꯠꯂꯣ ꯑꯃê¯ê¯¨ê¯¡ ê¯ê¯¦ê¯ê¯—ꯣꯛꯎ +Comment[mni@beng]=সà§à¦•েলেবল ভেকà§à¦¤à¦° গà§à¦°à¦¾à¦«à¦¿à¦•à§à¦¸ ইমেজশিং শেমগৎলো অমসà§à¦‚ শেমদোকউ +Comment[mr]=सà¥à¤•ेलेबल वà¥à¤¹à¥‡à¤•à¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ पà¥à¤°à¤¤à¤¿à¤®à¤¾ तयार आणि संपादित करा +Comment[nb]=Lag og rediger Skalerbar VektorGrafikk-bilder +Comment[ne]=सà¥à¤•ेलेबà¥à¤² भेकà¥à¤Ÿà¤° गà¥à¤°à¤¾à¤«à¤¿à¤•à¥à¤¸ छविहरू सिरà¥à¤œà¤¨à¤¾ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ र समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ +Comment[nl]=Scalable Vector Graphics-afbeeldingen maken en bewerken +Comment[nn]=Lag og rediger skalerbare vektorbilete (SVG) +Comment[or]=ସà­à¬•େଲେବଲ େଭକà­à¬Ÿà¬° ଗà­à¬°à¬¾à¬«à¬¿à¬•à­à¬¸ ଚିତà­à¬°à¬¸à¬¬à­ ସୃଷà­à¬Ÿà¬¿ à¬à¬¬à¬‚ ସଂପାଦନା କରନà­à­à¬¤à­ +Comment[pa]=ਸਕੇਲੇਬਲ ਵੈਕਟਰ ਗਰਾਫਿਕਸ ਚਿੱਤਰ ਬਣਾਓ ਅਤੇ ਸੋਧੋ +Comment[pl]=Tworzenie i edycja grafiki wektorowej SVG +Comment[pt_BR]=Crie e edite desenhos vetoriais escaláveis (SVG) +Comment[pt]=Crie e edite imagens Gráficas Vectoriais Escalaveis +Comment[ro]=Creează È™i editează imagini în format Scalable Vector Graphics +Comment[ru]=Создание и редактирование маÑштабируемой векторной графики в формате SVG +Comment[sa]=मापà¥à¤¯-वेकà¥à¤Ÿà¤°à¥-सà¥à¤šà¤¿à¤¤à¥à¤°à¥€à¤¯-चितà¥à¤°à¤¾à¤£à¤¿ उतà¥à¤ªà¤¾à¤¦à¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¯ +Comment[sat@deva]=नाप दाड़ेयाकॠवेकà¥à¤Ÿà¤° गार चिता़र आहला तेयार मे आर सासापड़ाव मे +Comment[sat]=ᱱᱟᱯ ᱫᱟᱲᱮᱭᱟᱜ ᱣᱮᱠᱴᱨ ᱜᱟᱨ ᱪᱤᱛᱟᱹᱨ ᱟᱦᱞᱟ ᱛᱮᱭᱟᱨ ᱢᱮ ᱟᱨ ᱥᱟᱥᱟᱯᱲᱟᱣ ᱢᱮ +Comment[sd]=ماپڻ جوڳا ويڪٽر اکري Ú†Ù½ Û½ عڪس خلقيو Û½ سمپادت ڪريو +Comment[sd@deva]=मापण जोॻो वेकà¥à¤Ÿà¤° अखिरी चिट à¤à¤‚ अकà¥à¤¸ खलिकियो à¤à¤‚ संपादित करियो. +Comment[sk]=Tvorba a úprava obrázkov Scalable Vector Graphics +Comment[sl]=Ustvarjajte in urejajte vektorske slike SVG +Comment[sr@latin]=Pravljenje i ureÄ‘ivanje SVG vektorskih slika +Comment[sr]=Прављење и уређивање SVG векторÑких Ñлика +Comment[sv]=Skapa och redigera SVG-bilder +Comment[ta]=அளவிடகà¯à®•ூடிய வெகà¯à®Ÿà®¾à®°à¯ வரைகலைகளின௠படஙà¯à®•ளை உரà¯à®µà®¾à®•à¯à®•ி திரà¯à®¤à¯à®¤à®µà¯à®®à¯ +Comment[te]=సదిశ రేఖాచితà±à°°à°¾à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚à°šà°‚à°¡à°¿ మరియౠదిదà±à°¦à±à°¬à°¾à°Ÿà± చేయండి +Comment[th]=สร้างà¹à¸¥à¸°à¹à¸à¹‰à¹„ขภาพ Scalable Vector Graphics +Comment[tr]=Ölçeklenebilir Vektör İmgeleri oluÅŸturur ve düzenler +Comment[uk]=Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚Ð° Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½ÑŒ у форматі SVG +Comment[ur]=اسكیلیبل ویكٹر گراÙیكس امیجس تخلیق اور مرتب كریں +Comment[vi]=Tạo và sá»­a ảnh véc-tÆ¡ co giãn được +Comment[zh_CN]=创建ã€ç¼–辑å¯ç¼©æ”¾çŸ¢é‡å›¾å½¢å›¾åƒ +Comment[zh_TW]=建立和編輯å¯ç¸®æ”¾å‘é‡ç¹ªåœ–圖形 +Comment=Create and edit Scalable Vector Graphics images +Keywords[de]=image;editor;vector;drawing; +Keywords[en_GB]=image;editor;vector;drawing; +Keywords[fr]=image;éditeur;vectoriel;dessin; +Keywords[is]=mynd;ritill;vigur;vektor;línur;teikning; +Keywords[it]=immagine;editor;vettoriale;disegno; +Keywords[lv]=attÄ“ls;redaktors;vektors;zÄ«mÄ“jums; +Keywords[nl]=image;editor;vector;drawing; +Keywords[uk]=image;editor;vector;drawing;зображеннÑ;редактор;векторне;вектор;малюваннÑ; +Keywords[zh_CN]=image;editor;vector;drawing;矢é‡;图åƒ;编辑;编辑器;å‘é‡;绘图; +Keywords=image;editor;vector;drawing; +Type=Application +Categories=Graphics;VectorGraphics;GTK; +MimeType=image/svg+xml;image/svg+xml-compressed;application/vnd.corel-draw;application/pdf;application/postscript;image/x-eps;application/illustrator;image/cgm;image/x-wmf;application/x-xccx;application/x-xcgm;application/x-xcdt;application/x-xsk1;application/x-xcmx;image/x-xcdr;application/visio;application/x-visio;application/vnd.visio;application/visio.drawing;application/vsd;application/x-vsd;image/x-vsd; +Exec=inkscape %F +TryExec=inkscape +Terminal=false +StartupNotify=true +Icon=inkscape +X-Ayatana-Desktop-Shortcuts=Drawing + +[Drawing Shortcut Group] +Name[ar]=رسم جديد +Name[bn_BD]=নতà§à¦¨ ডà§à¦°à¦‡à¦‚ +Name[br]=Tresadenn nevez +Name[ca]=Dibuix nou +Name[cs]=Kresba +Name[da]=Ny tegning +Name[de]=Neue Zeichnung +Name[el]=Îέο σχέδιο +Name[en_GB]=New Drawing +Name[es]=Dibujo nuevo +Name[eu]=Marrazki berria +Name[fr]=Nouveau dessin +Name[hu]=Új rajz +Name[is]=Ný teikning +Name[it]=Nuovo disegno +Name[ja]=æ–°ã—ã„ãƒ™ã‚¯ã‚¿ãƒ¼ç”»åƒ +Name[lv]=Jauns zÄ«mÄ“jums +Name[nl]=Nieuwe tekening +Name[pl]=Nowy Rysunek +Name[ro]=Desen nou +Name[ru]=Ðовый риÑунок +Name[sk]=Nová kresba +Name[sl]=Nova risba +Name[sr@latin]=Novi crtež +Name[sr]=Ðови цртеж +Name[tr]=Yeni Çizim +Name[uk]=Ðовий малюнок +Name[zh_CN]=新建绘图 +Name[zh_TW]=新增圖畫 +Name=New Drawing +Exec=inkscape +TargetEnvironment=Unity -- cgit v1.2.3 From 94a90f737c9bb0a07552d3ae0f210221cc70c5c0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 27 Jul 2016 12:58:57 -0500 Subject: Drop helper (bzr r14950.1.16) --- setup/gui/inkscape.desktop | 35 ----------------------------------- 1 file changed, 35 deletions(-) diff --git a/setup/gui/inkscape.desktop b/setup/gui/inkscape.desktop index 4340421aa..f7eb9cbef 100644 --- a/setup/gui/inkscape.desktop +++ b/setup/gui/inkscape.desktop @@ -300,38 +300,3 @@ TryExec=inkscape Terminal=false StartupNotify=true Icon=inkscape -X-Ayatana-Desktop-Shortcuts=Drawing - -[Drawing Shortcut Group] -Name[ar]=رسم جديد -Name[bn_BD]=নতà§à¦¨ ডà§à¦°à¦‡à¦‚ -Name[br]=Tresadenn nevez -Name[ca]=Dibuix nou -Name[cs]=Kresba -Name[da]=Ny tegning -Name[de]=Neue Zeichnung -Name[el]=Îέο σχέδιο -Name[en_GB]=New Drawing -Name[es]=Dibujo nuevo -Name[eu]=Marrazki berria -Name[fr]=Nouveau dessin -Name[hu]=Új rajz -Name[is]=Ný teikning -Name[it]=Nuovo disegno -Name[ja]=æ–°ã—ã„ãƒ™ã‚¯ã‚¿ãƒ¼ç”»åƒ -Name[lv]=Jauns zÄ«mÄ“jums -Name[nl]=Nieuwe tekening -Name[pl]=Nowy Rysunek -Name[ro]=Desen nou -Name[ru]=Ðовый риÑунок -Name[sk]=Nová kresba -Name[sl]=Nova risba -Name[sr@latin]=Novi crtež -Name[sr]=Ðови цртеж -Name[tr]=Yeni Çizim -Name[uk]=Ðовий малюнок -Name[zh_CN]=新建绘图 -Name[zh_TW]=新增圖畫 -Name=New Drawing -Exec=inkscape -TargetEnvironment=Unity -- cgit v1.2.3 From cebbe5b970cba85a5e21f8347f0a20e78351d394 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 11:22:07 +0100 Subject: extensions: Drop GTKMM2 fallbacks (bzr r15023.2.5) --- src/extension/error-file.cpp | 6 +---- src/extension/extension.cpp | 22 ++-------------- src/extension/extension.h | 9 ------- src/extension/implementation/script.cpp | 6 +---- src/extension/internal/cdr-input.cpp | 11 +------- src/extension/internal/pdfinput/pdf-input.cpp | 36 +-------------------------- src/extension/internal/pdfinput/pdf-input.h | 15 +---------- src/extension/internal/vsd-input.cpp | 12 +-------- src/extension/param/bool.cpp | 6 +---- src/extension/param/float.cpp | 12 ++------- src/extension/param/int.cpp | 13 ++-------- src/extension/param/notebook.cpp | 8 ------ src/extension/param/radiobutton.cpp | 9 ++----- src/extension/prefdialog.cpp | 27 +------------------- 14 files changed, 16 insertions(+), 176 deletions(-) diff --git a/src/extension/error-file.cpp b/src/extension/error-file.cpp index db354c0ce..467ff95be 100644 --- a/src/extension/error-file.cpp +++ b/src/extension/error-file.cpp @@ -56,11 +56,7 @@ ErrorFileNotice::ErrorFileNotice (void) : g_free(ext_error_file); set_message(dialog_text, true); -#if WITH_GTKMM_3_0 - Gtk::Box * vbox = get_content_area(); -#else - Gtk::Box * vbox = get_vbox(); -#endif + auto vbox = get_content_area(); /* This is some filler text, needs to change before relase */ Inkscape::Preferences *prefs = Inkscape::Preferences::get(); diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp index 6f7539360..5d150b703 100644 --- a/src/extension/extension.cpp +++ b/src/extension/extension.cpp @@ -22,12 +22,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include "inkscape.h" @@ -766,11 +761,7 @@ Extension::get_info_widget(void) Gtk::Frame * info = Gtk::manage(new Gtk::Frame("General Extension Information")); retval->pack_start(*info, true, true, 5); -#if WITH_GTKMM_3_0 - Gtk::Grid * table = Gtk::manage(new Gtk::Grid()); -#else - Gtk::Table * table = Gtk::manage(new Gtk::Table()); -#endif + auto table = Gtk::manage(new Gtk::Grid()); info->add(*table); @@ -784,11 +775,7 @@ Extension::get_info_widget(void) return retval; } -#if WITH_GTKMM_3_0 void Extension::add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Grid * table, int * row) -#else -void Extension::add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Table * table, int * row) -#endif { Gtk::Label * label; Gtk::Label * value; @@ -797,13 +784,8 @@ void Extension::add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Tab label = Gtk::manage(new Gtk::Label(labelstr)); value = Gtk::manage(new Gtk::Label(valuestr)); -#if WITH_GTKMM_3_0 table->attach(*label, 0, (*row) - 1, 1, 1); table->attach(*value, 1, (*row) - 1, 1, 1); -#else - table->attach(*label, 0, 1, (*row) - 1, *row); - table->attach(*value, 1, 2, (*row) - 1, *row); -#endif label->show(); value->show(); diff --git a/src/extension/extension.h b/src/extension/extension.h index 1fb8bdfec..cd29e1636 100644 --- a/src/extension/extension.h +++ b/src/extension/extension.h @@ -22,12 +22,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else - class Table; -#endif - class VBox; class Widget; } @@ -300,11 +295,7 @@ public: Gtk::VBox * get_help_widget(void); Gtk::VBox * get_params_widget(void); protected: -#if WITH_GTKMM_3_0 inline static void add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Grid * table, int * row); -#else - inline static void add_val(Glib::ustring labelstr, Glib::ustring valuestr, Gtk::Table * table, int * row); -#endif }; diff --git a/src/extension/implementation/script.cpp b/src/extension/implementation/script.cpp index 01323bee2..72a189c3f 100644 --- a/src/extension/implementation/script.cpp +++ b/src/extension/implementation/script.cpp @@ -942,11 +942,7 @@ void Script::checkStderr (const Glib::ustring &data, GtkWidget *dlg = GTK_WIDGET(warning.gobj()); sp_transientize(dlg); -#if WITH_GTKMM_3_0 - Gtk::Box * vbox = warning.get_content_area(); -#else - Gtk::Box * vbox = warning.get_vbox(); -#endif + auto vbox = warning.get_content_area(); /* Gtk::TextView * textview = new Gtk::TextView(Gtk::TextBuffer::create()); */ Gtk::TextView * textview = new Gtk::TextView(); diff --git a/src/extension/internal/cdr-input.cpp b/src/extension/internal/cdr-input.cpp index a26af2078..b94b6d019 100644 --- a/src/extension/internal/cdr-input.cpp +++ b/src/extension/internal/cdr-input.cpp @@ -111,11 +111,7 @@ CdrImportDialog::CdrImportDialog(const std::vector &vec) _previewArea = Gtk::manage(new class Gtk::VBox()); vbox1 = Gtk::manage(new class Gtk::VBox()); vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*vbox1); -#else - this->get_vbox()->pack_start(*vbox1); -#endif // CONTROLS @@ -137,13 +133,8 @@ CdrImportDialog::CdrImportDialog(const std::vector &vec) g_free(label_text); // Adjustment + spinner -#if WITH_GTKMM_3_0 - Glib::RefPtr _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); + auto _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(_pageNumberSpin_adj, 1, 0)); -#else - Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage(new class Gtk::Adjustment(1, 1, _vec.size(), 1, 10, 0)); - _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(*_pageNumberSpin_adj, 1, 0)); -#endif _pageNumberSpin->set_can_focus(); _pageNumberSpin->set_update_policy(Gtk::UPDATE_ALWAYS); _pageNumberSpin->set_numeric(true); diff --git a/src/extension/internal/pdfinput/pdf-input.cpp b/src/extension/internal/pdfinput/pdf-input.cpp index c1940b16a..0c22fa399 100644 --- a/src/extension/internal/pdfinput/pdf-input.cpp +++ b/src/extension/internal/pdfinput/pdf-input.cpp @@ -39,10 +39,8 @@ #include #include -#if WITH_GTKMM_3_0 #include #include -#endif #include "extension/system.h" #include "extension/input.h" @@ -92,14 +90,8 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) _labelSelect = Gtk::manage(new class Gtk::Label(_("Select page:"))); // Page number -#if WITH_GTKMM_3_0 - Glib::RefPtr _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _pdf_doc->getNumPages(), 1, 10, 0); + auto _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _pdf_doc->getNumPages(), 1, 10, 0); _pageNumberSpin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(_pageNumberSpin_adj, 1, 1)); -#else - Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage( - new class Gtk::Adjustment(1, 1, _pdf_doc->getNumPages(), 1, 10, 0)); - _pageNumberSpin = Gtk::manage(new class Inkscape::UI::Widget::SpinButton(*_pageNumberSpin_adj, 1, 1)); -#endif _labelTotalPages = Gtk::manage(new class Gtk::Label()); hbox2 = Gtk::manage(new class Gtk::HBox(false, 0)); // Disable the page selector when there's only one page @@ -137,13 +129,8 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) _labelViaInternal = Gtk::manage(new class Gtk::Label(_("Import via internal (Poppler derived) library. Text is stored as text but white space is missing. Meshes are converted to tiles, the number depends on the precision set below."))); #endif -#if WITH_GTKMM_3_0 _fallbackPrecisionSlider_adj = Gtk::Adjustment::create(2, 1, 256, 1, 10, 10); _fallbackPrecisionSlider = Gtk::manage(new class Gtk::Scale(_fallbackPrecisionSlider_adj)); -#else - _fallbackPrecisionSlider_adj = Gtk::manage(new class Gtk::Adjustment(2, 1, 256, 1, 10, 10)); - _fallbackPrecisionSlider = Gtk::manage(new class Gtk::HScale(*_fallbackPrecisionSlider_adj)); -#endif _fallbackPrecisionSlider->set_value(2.0); _labelPrecisionComment = Gtk::manage(new class Gtk::Label(_("rough"))); hbox6 = Gtk::manage(new class Gtk::HBox(false, 4)); @@ -278,15 +265,9 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) hbox1->pack_start(*vbox1); hbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 4); -#if WITH_GTKMM_3_0 get_content_area()->set_homogeneous(false); get_content_area()->set_spacing(0); get_content_area()->pack_start(*hbox1); -#else - this->get_vbox()->set_homogeneous(false); - this->get_vbox()->set_spacing(0); - this->get_vbox()->pack_start(*hbox1); -#endif this->set_title(_("PDF Import Settings")); this->set_modal(true); @@ -300,12 +281,7 @@ PdfImportDialog::PdfImportDialog(PDFDoc *doc, const gchar */*uri*/) this->show_all(); // Connect signals -#if WITH_GTKMM_3_0 _previewArea->signal_draw().connect(sigc::mem_fun(*this, &PdfImportDialog::_onDraw)); -#else - _previewArea->signal_expose_event().connect(sigc::mem_fun(*this, &PdfImportDialog::_onExposePreview)); -#endif - _pageNumberSpin_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPageNumberChanged)); _cropCheck->signal_toggled().connect(sigc::mem_fun(*this, &PdfImportDialog::_onToggleCropping)); _fallbackPrecisionSlider_adj->signal_value_changed().connect(sigc::mem_fun(*this, &PdfImportDialog::_onPrecisionChanged)); @@ -527,16 +503,6 @@ static void copy_cairo_surface_to_pixbuf (cairo_surface_t *surface, #endif -/** - * \brief Updates the preview area with the previously rendered thumbnail - */ -#if !WITH_GTKMM_3_0 -bool PdfImportDialog::_onExposePreview(GdkEventExpose * /*event*/) { - Cairo::RefPtr cr = _previewArea->get_window()->create_cairo_context(); - return _onDraw(cr); -} -#endif - bool PdfImportDialog::_onDraw(const Cairo::RefPtr& cr) { // Check if we have a thumbnail at all if (!_thumb_data) { diff --git a/src/extension/internal/pdfinput/pdf-input.h b/src/extension/internal/pdfinput/pdf-input.h index 6e36603c3..c338207c1 100644 --- a/src/extension/internal/pdfinput/pdf-input.h +++ b/src/extension/internal/pdfinput/pdf-input.h @@ -39,11 +39,7 @@ namespace Gtk { class DrawingArea; class Frame; class HBox; -#if WITH_GTKMM_3_0 class Scale; -#else - class HScale; -#endif class RadioButton; class VBox; class Label; @@ -79,10 +75,6 @@ private: void _setPreviewPage(int page); // Signal handlers -#if !WITH_GTKMM_3_0 - bool _onExposePreview(GdkEventExpose *event); -#endif - bool _onDraw(const Cairo::RefPtr& cr); void _onPageNumberChanged(); void _onToggleCropping(); @@ -110,13 +102,8 @@ private: class Gtk::RadioButton * _importViaInternal; // Use native (poppler based) importing class Gtk::Label * _labelViaInternal; #endif -#if WITH_GTKMM_3_0 - class Gtk::Scale * _fallbackPrecisionSlider; + Gtk::Scale * _fallbackPrecisionSlider; Glib::RefPtr _fallbackPrecisionSlider_adj; -#else - class Gtk::HScale * _fallbackPrecisionSlider; - class Gtk::Adjustment *_fallbackPrecisionSlider_adj; -#endif class Gtk::Label * _labelPrecisionComment; class Gtk::HBox * hbox6; class Gtk::Label * _labelText; diff --git a/src/extension/internal/vsd-input.cpp b/src/extension/internal/vsd-input.cpp index a3d4aad37..2de2d0ec6 100644 --- a/src/extension/internal/vsd-input.cpp +++ b/src/extension/internal/vsd-input.cpp @@ -113,12 +113,7 @@ VsdImportDialog::VsdImportDialog(const std::vector &vec) _previewArea = Gtk::manage(new class Gtk::VBox()); vbox1 = Gtk::manage(new class Gtk::VBox()); vbox1->pack_start(*_previewArea, Gtk::PACK_EXPAND_WIDGET, 0); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*vbox1); -#else - this->get_vbox()->pack_start(*vbox1); -#endif - // CONTROLS @@ -140,13 +135,8 @@ VsdImportDialog::VsdImportDialog(const std::vector &vec) g_free(label_text); // Adjustment + spinner -#if WITH_GTKMM_3_0 - Glib::RefPtr _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); + auto _pageNumberSpin_adj = Gtk::Adjustment::create(1, 1, _vec.size(), 1, 10, 0); _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(_pageNumberSpin_adj, 1, 0)); -#else - Gtk::Adjustment *_pageNumberSpin_adj = Gtk::manage(new class Gtk::Adjustment(1, 1, _vec.size(), 1, 10, 0)); - _pageNumberSpin = Gtk::manage(new Gtk::SpinButton(*_pageNumberSpin_adj, 1, 0)); -#endif _pageNumberSpin->set_can_focus(); _pageNumberSpin->set_update_policy(Gtk::UPDATE_ALWAYS); _pageNumberSpin->set_numeric(true); diff --git a/src/extension/param/bool.cpp b/src/extension/param/bool.cpp index d64f798ba..e67d3e3f5 100644 --- a/src/extension/param/bool.cpp +++ b/src/extension/param/bool.cpp @@ -129,12 +129,8 @@ Gtk::Widget *ParamBool::get_widget(SPDocument * doc, Inkscape::XML::Node * node, return NULL; } -#if WITH_GTKMM_3_0 - Gtk::Box * hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); + auto hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); hbox->set_homogeneous(false); -#else - Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); -#endif Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START)); label->show(); diff --git a/src/extension/param/float.cpp b/src/extension/param/float.cpp index dff7cbf46..d4c33ec94 100644 --- a/src/extension/param/float.cpp +++ b/src/extension/param/float.cpp @@ -176,12 +176,8 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); -#if WITH_GTKMM_3_0 - ParamFloatAdjustment * pfa = new ParamFloatAdjustment(this, doc, node, changeSignal); + auto pfa = new ParamFloatAdjustment(this, doc, node, changeSignal); Glib::RefPtr fadjust(pfa); -#else - ParamFloatAdjustment * fadjust = Gtk::manage(new ParamFloatAdjustment(this, doc, node, changeSignal)); -#endif if (_mode == FULL) { @@ -197,11 +193,7 @@ Gtk::Widget * ParamFloat::get_widget(SPDocument * doc, Inkscape::XML::Node * nod label->show(); hbox->pack_start(*label, true, true, _indent); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 0.1, _precision)); -#else - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(*fadjust, 0.1, _precision)); -#endif + auto spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 0.1, _precision)); spin->show(); hbox->pack_start(*spin, false, false); } diff --git a/src/extension/param/int.cpp b/src/extension/param/int.cpp index dda801282..533ee3886 100644 --- a/src/extension/param/int.cpp +++ b/src/extension/param/int.cpp @@ -157,13 +157,8 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); - -#if WITH_GTKMM_3_0 - ParamIntAdjustment * pia = new ParamIntAdjustment(this, doc, node, changeSignal); + auto pia = new ParamIntAdjustment(this, doc, node, changeSignal); Glib::RefPtr fadjust(pia); -#else - ParamIntAdjustment * fadjust = Gtk::manage(new ParamIntAdjustment(this, doc, node, changeSignal)); -#endif if (_mode == FULL) { @@ -178,11 +173,7 @@ ParamInt::get_widget (SPDocument * doc, Inkscape::XML::Node * node, sigc::signal label->show(); hbox->pack_start(*label, true, true, _indent); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 1.0, 0)); -#else - Inkscape::UI::Widget::SpinButton * spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(*fadjust, 1.0, 0)); -#endif + auto spin = Gtk::manage(new Inkscape::UI::Widget::SpinButton(fadjust, 1.0, 0)); spin->show(); hbox->pack_start(*spin, false, false); } diff --git a/src/extension/param/notebook.cpp b/src/extension/param/notebook.cpp index 20c8e8481..957d12d06 100644 --- a/src/extension/param/notebook.cpp +++ b/src/extension/param/notebook.cpp @@ -353,11 +353,7 @@ public: // hook function this->signal_switch_page().connect(sigc::mem_fun(this, &ParamNotebookWdg::changed_page)); }; -#if WITH_GTKMM_3_0 void changed_page(Gtk::Widget *page, guint pagenum); -#else - void changed_page(GtkNotebookPage *page, guint pagenum); -#endif bool activated; }; @@ -368,11 +364,7 @@ public: * is actually visible. This to exclude 'fake' changes when the * notebookpages are added or removed. */ -#if WITH_GTKMM_3_0 void ParamNotebookWdg::changed_page(Gtk::Widget * /*page*/, guint pagenum) -#else -void ParamNotebookWdg::changed_page(GtkNotebookPage * /*page*/, guint pagenum) -#endif { if (get_visible()) { _pref->set((int)pagenum, _doc, _node); diff --git a/src/extension/param/radiobutton.cpp b/src/extension/param/radiobutton.cpp index 1d1b860c6..ed28c0d75 100644 --- a/src/extension/param/radiobutton.cpp +++ b/src/extension/param/radiobutton.cpp @@ -303,15 +303,10 @@ Gtk::Widget * ParamRadioButton::get_widget(SPDocument * doc, Inkscape::XML::Node return NULL; } -#if WITH_GTKMM_3_0 - Gtk::Box * hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); + auto hbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 4)); hbox->set_homogeneous(false); - Gtk::Box * vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0)); + auto vbox = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL, 0)); vbox->set_homogeneous(false); -#else - Gtk::HBox * hbox = Gtk::manage(new Gtk::HBox(false, 4)); - Gtk::VBox * vbox = Gtk::manage(new Gtk::VBox(false, 0)); -#endif Gtk::Label * label = Gtk::manage(new Gtk::Label(_text, Gtk::ALIGN_START, Gtk::ALIGN_START)); label->show(); diff --git a/src/extension/prefdialog.cpp b/src/extension/prefdialog.cpp index 2521dc1de..1ca590e85 100644 --- a/src/extension/prefdialog.cpp +++ b/src/extension/prefdialog.cpp @@ -41,11 +41,7 @@ namespace Extension { them. It also places the passed-in widgets into the dialog. */ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * controls, Effect * effect) : -#if WITH_GTKMM_3_0 Gtk::Dialog(_(name.c_str()), true), -#else - Gtk::Dialog(_(name.c_str()), true, true), -#endif _help(help), _name(name), _button_ok(NULL), @@ -68,11 +64,7 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co hbox->pack_start(*controls, true, true, 6); hbox->show(); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*hbox, true, true, 6); -#else - this->get_vbox()->pack_start(*hbox, true, true, 6); -#endif /* Gtk::Button * help_button = add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP); @@ -97,19 +89,10 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co _param_preview = Parameter::make(doc->root(), _effect); } -#if WITH_GTKMM_3_0 - Gtk::Separator * sep = Gtk::manage(new Gtk::Separator()); -#else - Gtk::HSeparator * sep = Gtk::manage(new Gtk::HSeparator()); -#endif - + auto sep = Gtk::manage(new Gtk::Separator()); sep->show(); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*sep, true, true, 4); -#else - this->get_vbox()->pack_start(*sep, true, true, 4); -#endif hbox = Gtk::manage(new Gtk::HBox()); _button_preview = _param_preview->get_widget(NULL, NULL, &_signal_preview); @@ -117,19 +100,11 @@ PrefDialog::PrefDialog (Glib::ustring name, gchar const * help, Gtk::Widget * co hbox->pack_start(*_button_preview, true, true,6); hbox->show(); -#if WITH_GTKMM_3_0 this->get_content_area()->pack_start(*hbox, true, true, 6); -#else - this->get_vbox()->pack_start(*hbox, true, true, 6); -#endif Gtk::Box * hbox = dynamic_cast(_button_preview); if (hbox != NULL) { -#if WITH_GTKMM_3_0 _checkbox_preview = dynamic_cast(hbox->get_children().front()); -#else - _checkbox_preview = dynamic_cast(hbox->children().back().get_widget()); -#endif } preview_toggle(); -- cgit v1.2.3 From 58111034d09da960cf9982b703c6ab2647422e0b Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 13:19:42 +0100 Subject: ui/widgets: Drop GTK2 fallbacks (bzr r15023.2.6) --- src/ui/widget/addtoicon.cpp | 33 ----- src/ui/widget/addtoicon.h | 14 -- src/ui/widget/anchor-selector.cpp | 10 -- src/ui/widget/anchor-selector.h | 12 +- src/ui/widget/clipmaskicon.cpp | 33 ----- src/ui/widget/clipmaskicon.h | 13 -- src/ui/widget/color-icc-selector.cpp | 23 --- src/ui/widget/color-icc-selector.h | 8 - src/ui/widget/color-notebook.cpp | 30 ---- src/ui/widget/color-notebook.h | 8 - src/ui/widget/color-picker.cpp | 5 - src/ui/widget/color-preview.cpp | 26 ---- src/ui/widget/color-preview.h | 6 - src/ui/widget/color-scales.cpp | 27 ---- src/ui/widget/color-scales.h | 8 - src/ui/widget/color-slider.cpp | 122 +--------------- src/ui/widget/color-slider.h | 18 --- src/ui/widget/color-wheel-selector.cpp | 46 +----- src/ui/widget/color-wheel-selector.h | 12 -- src/ui/widget/dock-item.cpp | 8 - src/ui/widget/dock.cpp | 12 -- src/ui/widget/gimpspinscale.c | 260 +-------------------------------- src/ui/widget/highlight-picker.cpp | 33 ----- src/ui/widget/highlight-picker.h | 14 -- src/ui/widget/imagetoggler.cpp | 33 ----- src/ui/widget/imagetoggler.h | 14 -- src/ui/widget/insertordericon.cpp | 32 ---- src/ui/widget/insertordericon.h | 13 -- src/ui/widget/layertypeicon.cpp | 33 ----- src/ui/widget/layertypeicon.h | 14 -- src/ui/widget/licensor.cpp | 8 - src/ui/widget/notebook-page.cpp | 12 -- src/ui/widget/notebook-page.h | 13 -- src/ui/widget/page-sizer.cpp | 43 ------ src/ui/widget/page-sizer.h | 26 +--- src/ui/widget/panel.cpp | 6 - src/ui/widget/panel.h | 18 +-- src/ui/widget/point.cpp | 4 - src/ui/widget/point.h | 4 - src/ui/widget/preferences-widget.cpp | 80 +--------- src/ui/widget/preferences-widget.h | 25 ---- src/ui/widget/random.cpp | 4 - src/ui/widget/random.h | 4 - src/ui/widget/scalar.cpp | 10 +- src/ui/widget/scalar.h | 4 - src/ui/widget/selected-style.cpp | 37 ----- src/ui/widget/selected-style.h | 15 +- src/ui/widget/spin-scale.cpp | 28 +--- src/ui/widget/spin-scale.h | 25 +--- src/ui/widget/spin-slider.cpp | 61 +------- src/ui/widget/spin-slider.h | 18 +-- src/ui/widget/style-swatch.cpp | 23 +-- src/ui/widget/style-swatch.h | 8 - src/ui/widget/tolerance-slider.cpp | 10 +- src/ui/widget/tolerance-slider.h | 10 -- src/widgets/desktop-widget.cpp | 1 - 56 files changed, 41 insertions(+), 1376 deletions(-) diff --git a/src/ui/widget/addtoicon.cpp b/src/ui/widget/addtoicon.cpp index 10294125d..ab50fcd8f 100644 --- a/src/ui/widget/addtoicon.cpp +++ b/src/ui/widget/addtoicon.cpp @@ -51,8 +51,6 @@ AddToIcon::AddToIcon() : set_pixbuf(); } - -#if WITH_GTKMM_3_0 void AddToIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -82,47 +80,16 @@ void AddToIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void AddToIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = phys;//+= (*width) >> 1; - } - if ( height ) { - *height =phys;//+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void AddToIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void AddToIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { set_pixbuf(); -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool AddToIcon::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/addtoicon.h b/src/ui/widget/addtoicon.h index a8d900d1f..3b2228754 100644 --- a/src/ui/widget/addtoicon.h +++ b/src/ui/widget/addtoicon.h @@ -31,8 +31,6 @@ public: Glib::PropertyProxy< Glib::RefPtr > property_pixbuf_off(); protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -46,18 +44,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index df00b786a..0d6030ac6 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -28,11 +28,7 @@ void AnchorSelector::setupButton(const Glib::ustring& icon, Gtk::ToggleButton& b AnchorSelector::AnchorSelector() : Gtk::Alignment(0.5, 0, 0, 0), -#if WITH_GTKMM_3_0 _container() -#else - _container(3, 3, true) -#endif { setupButton(INKSCAPE_ICON("boundingbox_top_left"), _buttons[0]); setupButton(INKSCAPE_ICON("boundingbox_top"), _buttons[1]); @@ -44,20 +40,14 @@ AnchorSelector::AnchorSelector() setupButton(INKSCAPE_ICON("boundingbox_bottom"), _buttons[7]); setupButton(INKSCAPE_ICON("boundingbox_bottom_right"), _buttons[8]); -#if WITH_GTKMM_3_0 _container.set_row_homogeneous(); _container.set_column_homogeneous(true); -#endif for(int i = 0; i < 9; ++i) { _buttons[i].signal_clicked().connect( sigc::bind(sigc::mem_fun(*this, &AnchorSelector::btn_activated), i)); -#if WITH_GTKMM_3_0 _container.attach(_buttons[i], i % 3, i / 3, 1, 1); -#else - _container.attach(_buttons[i], i % 3, i % 3+1, i / 3, i / 3+1, Gtk::FILL, Gtk::FILL); -#endif } _selection = 4; _buttons[4].set_active(); diff --git a/src/ui/widget/anchor-selector.h b/src/ui/widget/anchor-selector.h index 0a702d296..96331fae3 100644 --- a/src/ui/widget/anchor-selector.h +++ b/src/ui/widget/anchor-selector.h @@ -16,12 +16,7 @@ #include #include - -#if WITH_GTKMM_3_0 - #include -#else - #include -#endif +#include namespace Inkscape { namespace UI { @@ -32,12 +27,7 @@ class AnchorSelector : public Gtk::Alignment private: Gtk::ToggleButton _buttons[9]; int _selection; - -#if WITH_GTKMM_3_0 Gtk::Grid _container; -#else - Gtk::Table _container; -#endif sigc::signal _selectionChanged; diff --git a/src/ui/widget/clipmaskicon.cpp b/src/ui/widget/clipmaskicon.cpp index 421f1df1e..b914eeb2d 100644 --- a/src/ui/widget/clipmaskicon.cpp +++ b/src/ui/widget/clipmaskicon.cpp @@ -63,8 +63,6 @@ ClipMaskIcon::ClipMaskIcon() : property_pixbuf() = Glib::RefPtr(0); } - -#if WITH_GTKMM_3_0 void ClipMaskIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -94,39 +92,12 @@ void ClipMaskIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void ClipMaskIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = phys;//+= (*width) >> 1; - } - if ( height ) { - *height =phys;//+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void ClipMaskIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void ClipMaskIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { switch (_property_active.get_value()) { @@ -143,11 +114,7 @@ void ClipMaskIcon::render_vfunc( const Glib::RefPtr& window, property_pixbuf() = Glib::RefPtr(0); break; } -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool ClipMaskIcon::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/clipmaskicon.h b/src/ui/widget/clipmaskicon.h index eca852a83..0d149edb8 100644 --- a/src/ui/widget/clipmaskicon.h +++ b/src/ui/widget/clipmaskicon.h @@ -32,7 +32,6 @@ public: protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -46,18 +45,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp index e4f58fe8a..04a5ab368 100644 --- a/src/ui/widget/color-icc-selector.cpp +++ b/src/ui/widget/color-icc-selector.cpp @@ -87,7 +87,6 @@ GtkAttachOptions operator|(GtkAttachOptions lhs, GtkAttachOptions rhs) void attachToGridOrTable(GtkWidget *parent, GtkWidget *child, guint left, guint top, guint width, guint height, bool hexpand = false, bool centered = false, guint xpadding = XPAD, guint ypadding = YPAD) { -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(child, xpadding); gtk_widget_set_margin_end(child, xpadding); @@ -106,14 +105,6 @@ void attachToGridOrTable(GtkWidget *parent, GtkWidget *child, guint left, guint gtk_widget_set_valign(child, GTK_ALIGN_CENTER); } gtk_grid_attach(GTK_GRID(parent), child, left, top, width, height); -#else - GtkAttachOptions xoptions = - centered ? static_cast(0) : hexpand ? (GTK_EXPAND | GTK_FILL) : GTK_FILL; - GtkAttachOptions yoptions = centered ? static_cast(0) : GTK_FILL; - - gtk_table_attach(GTK_TABLE(parent), child, left, left + width, top, top + height, xoptions, yoptions, xpadding, - ypadding); -#endif } } // namespace @@ -431,12 +422,7 @@ void ColorICCSelector::init() _impl->_compUI[i]._label = gtk_label_new_with_mnemonic(labelStr.c_str()); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_impl->_compUI[i]._label, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_impl->_compUI[i]._label), 1.0, 0.5); -#endif - gtk_widget_show(_impl->_compUI[i]._label); gtk_widget_set_no_show_all(_impl->_compUI[i]._label, TRUE); @@ -495,12 +481,7 @@ void ColorICCSelector::init() // Label _impl->_label = gtk_label_new_with_mnemonic(_("_A:")); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_impl->_label, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_impl->_label), 1.0, 0.5); -#endif - gtk_widget_show(_impl->_label); attachToGridOrTable(t, _impl->_label, 0, row, 1, 1); @@ -727,11 +708,7 @@ void ColorICCSelectorImpl::_profilesChanged(std::string const & /*name*/) {} void ColorICCSelector::on_show() { -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Grid::on_show(); -#else - Gtk::Table::on_show(); -#endif _colorChanged(); } diff --git a/src/ui/widget/color-icc-selector.h b/src/ui/widget/color-icc-selector.h index 1bcb0a540..aaa8372b8 100644 --- a/src/ui/widget/color-icc-selector.h +++ b/src/ui/widget/color-icc-selector.h @@ -6,11 +6,7 @@ #endif #include -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/selected-color.h" @@ -24,11 +20,7 @@ namespace Widget { class ColorICCSelectorImpl; class ColorICCSelector -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: static const gchar *MODE_NAME; diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp index 6d7ada734..d2c4efc74 100644 --- a/src/ui/widget/color-notebook.cpp +++ b/src/ui/widget/color-notebook.cpp @@ -56,13 +56,8 @@ namespace Widget { ColorNotebook::ColorNotebook(SelectedColor &color) -#if GTK_CHECK_VERSION(3, 0, 0) : Gtk::Grid() -#else - : Gtk::Table(2, 3, false) -#endif , _selected_color(color) - { Page *page; @@ -110,12 +105,8 @@ void ColorNotebook::_initUI() notebook->set_show_tabs(false); _book = GTK_WIDGET(notebook->gobj()); -#if GTK_CHECK_VERSION(3, 0, 0) _buttonbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 2); gtk_box_set_homogeneous(GTK_BOX(_buttonbox), TRUE); -#else - _buttonbox = gtk_hbox_new(TRUE, 2); -#endif gtk_widget_show(_buttonbox); _buttons = new GtkWidget *[_available_pages.size()]; @@ -126,7 +117,6 @@ void ColorNotebook::_initUI() sp_set_font_size_smaller(_buttonbox); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_buttonbox, XPAD); gtk_widget_set_margin_end(_buttonbox, XPAD); @@ -139,14 +129,9 @@ void ColorNotebook::_initUI() gtk_widget_set_hexpand(_buttonbox, TRUE); gtk_widget_set_valign(_buttonbox, GTK_ALIGN_CENTER); attach(*Glib::wrap(_buttonbox), 0, row, 2, 1); -#else - attach(*Glib::wrap(_buttonbox), 0, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, static_cast(0), - XPAD, YPAD); -#endif row++; -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_book, XPAD * 2); gtk_widget_set_margin_end(_book, XPAD * 2); @@ -159,20 +144,13 @@ void ColorNotebook::_initUI() gtk_widget_set_hexpand(_book, TRUE); gtk_widget_set_vexpand(_book, TRUE); attach(*notebook, 0, row, 2, 1); -#else - attach(*notebook, 0, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL, XPAD * 2, YPAD); -#endif // restore the last active page Inkscape::Preferences *prefs = Inkscape::Preferences::get(); _setCurrentPage(prefs->getInt("/colorselector/page", 0)); row++; -#if GTK_CHECK_VERSION(3, 0, 0) GtkWidget *rgbabox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); -#else - GtkWidget *rgbabox = gtk_hbox_new(FALSE, 0); -#endif #if defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) /* Create color management icons */ @@ -210,11 +188,7 @@ void ColorNotebook::_initUI() /* Create RGBA entry and color preview */ _rgbal = gtk_label_new_with_mnemonic(_("RGBA_:")); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_rgbal, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_rgbal), 1.0, 0.5); -#endif gtk_box_pack_start(GTK_BOX(rgbabox), _rgbal, TRUE, TRUE, 2); ColorEntry *rgba_entry = Gtk::manage(new ColorEntry(_selected_color)); @@ -230,7 +204,6 @@ void ColorNotebook::_initUI() gtk_widget_hide(GTK_WIDGET(_box_toomuchink)); #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(rgbabox, XPAD); gtk_widget_set_margin_end(rgbabox, XPAD); @@ -241,9 +214,6 @@ void ColorNotebook::_initUI() gtk_widget_set_margin_top(rgbabox, YPAD); gtk_widget_set_margin_bottom(rgbabox, YPAD); attach(*Glib::wrap(rgbabox), 0, row, 2, 1); -#else - attach(*Glib::wrap(rgbabox), 0, 2, row, row + 1, Gtk::FILL, Gtk::SHRINK, XPAD, YPAD); -#endif #ifdef SPCS_PREVIEW _p = sp_color_preview_new(0xffffffff); diff --git a/src/ui/widget/color-notebook.h b/src/ui/widget/color-notebook.h index d28028c72..35e46ef14 100644 --- a/src/ui/widget/color-notebook.h +++ b/src/ui/widget/color-notebook.h @@ -19,11 +19,7 @@ #endif #include -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include #include @@ -35,11 +31,7 @@ namespace UI { namespace Widget { class ColorNotebook -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: ColorNotebook(SelectedColor &color); diff --git a/src/ui/widget/color-picker.cpp b/src/ui/widget/color-picker.cpp index a66fbfc9c..5a62c3c98 100644 --- a/src/ui/widget/color-picker.cpp +++ b/src/ui/widget/color-picker.cpp @@ -59,13 +59,8 @@ void ColorPicker::setupDialog(const Glib::ustring &title) _color_selector = Gtk::manage(new ColorNotebook(_selected_color)); -#if WITH_GTKMM_3_0 _colorSelectorDialog.get_content_area()->pack_start ( *_color_selector, true, true, 0); -#else - _colorSelectorDialog.get_vbox()->pack_start ( - *_color_selector, true, true, 0); -#endif _color_selector->show(); } diff --git a/src/ui/widget/color-preview.cpp b/src/ui/widget/color-preview.cpp index 62c7cca1d..c9b6e56d2 100644 --- a/src/ui/widget/color-preview.cpp +++ b/src/ui/widget/color-preview.cpp @@ -34,7 +34,6 @@ ColorPreview::on_size_allocate (Gtk::Allocation &all) queue_draw(); } -#if WITH_GTKMM_3_0 void ColorPreview::get_preferred_height_vfunc(int& minimum_height, int& natural_height) const { @@ -58,31 +57,6 @@ ColorPreview::get_preferred_width_for_height_vfunc(int /* height */, int& minimu { minimum_width = natural_width = SPCP_DEFAULT_WIDTH; } -#else -void -ColorPreview::on_size_request (Gtk::Requisition *req) -{ - req->width = SPCP_DEFAULT_WIDTH; - req->height = SPCP_DEFAULT_HEIGHT; -} - -bool -ColorPreview::on_expose_event (GdkEventExpose *event) -{ - bool result = true; - - if (get_is_drawable()) - { - Cairo::RefPtr cr = get_window()->create_cairo_context(); - cr->rectangle(event->area.x, event->area.y, - event->area.width, event->area.height); - cr->clip(); - result = on_draw(cr); - } - - return result; -} -#endif void ColorPreview::setRgba32 (guint32 rgba) diff --git a/src/ui/widget/color-preview.h b/src/ui/widget/color-preview.h index caddfb9a2..1276cf42b 100644 --- a/src/ui/widget/color-preview.h +++ b/src/ui/widget/color-preview.h @@ -33,16 +33,10 @@ public: protected: virtual void on_size_allocate (Gtk::Allocation &all); -#if WITH_GTKMM_3_0 virtual void get_preferred_height_vfunc(int& minimum_height, int& natural_height) const; virtual void get_preferred_height_for_width_vfunc(int width, int& minimum_height, int& natural_height) const; virtual void get_preferred_width_vfunc(int& minimum_width, int& natural_width) const; virtual void get_preferred_width_for_height_vfunc(int height, int& minimum_width, int& natural_width) const; -#else - virtual void on_size_request (Gtk::Requisition *req); - virtual bool on_expose_event(GdkEventExpose *event); -#endif - virtual bool on_draw(const Cairo::RefPtr& cr); guint32 _rgba; diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp index 48a2693bc..6afa7f939 100644 --- a/src/ui/widget/color-scales.cpp +++ b/src/ui/widget/color-scales.cpp @@ -46,11 +46,7 @@ static const gchar *sp_color_scales_hue_map(); const gchar *ColorScales::SUBMODE_NAMES[] = { N_("None"), N_("RGB"), N_("HSL"), N_("CMYK") }; ColorScales::ColorScales(SelectedColor &color, SPColorScalesMode mode) -#if GTK_CHECK_VERSION(3, 0, 0) : Gtk::Grid() -#else - : Gtk::Table(5, 3, false) -#endif , _color(color) , _rangeLimit(255.0) , _updating(FALSE) @@ -93,15 +89,9 @@ void ColorScales::_initUI(SPColorScalesMode mode) /* Label */ _l[i] = gtk_label_new(""); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(_l[i], GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(_l[i]), 1.0, 0.5); -#endif - gtk_widget_show(_l[i]); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_l[i], XPAD); gtk_widget_set_margin_end(_l[i], XPAD); @@ -112,9 +102,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) gtk_widget_set_margin_top(_l[i], YPAD); gtk_widget_set_margin_bottom(_l[i], YPAD); gtk_grid_attach(GTK_GRID(t), _l[i], 0, i, 1, 1); -#else - gtk_table_attach(GTK_TABLE(t), _l[i], 0, 1, i, i + 1, GTK_FILL, GTK_FILL, XPAD, YPAD); -#endif /* Adjustment */ _a[i] = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, 0.0, _rangeLimit, 1.0, 10.0, 10.0)); @@ -122,7 +109,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) _s[i] = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(Glib::wrap(_a[i], true))); _s[i]->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) _s[i]->set_margin_start(XPAD); _s[i]->set_margin_end(XPAD); @@ -134,10 +120,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) _s[i]->set_margin_bottom(YPAD); _s[i]->set_hexpand(true); gtk_grid_attach(GTK_GRID(t), _s[i]->gobj(), 1, i, 1, 1); -#else - gtk_table_attach(GTK_TABLE(t), _s[i]->gobj(), 1, 2, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - GTK_FILL, XPAD, YPAD); -#endif /* Spinbutton */ _b[i] = gtk_spin_button_new(GTK_ADJUSTMENT(_a[i]), 1.0, 0); @@ -145,7 +127,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) gtk_label_set_mnemonic_widget(GTK_LABEL(_l[i]), _b[i]); gtk_widget_show(_b[i]); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) gtk_widget_set_margin_start(_b[i], XPAD); gtk_widget_set_margin_end(_b[i], XPAD); @@ -158,9 +139,6 @@ void ColorScales::_initUI(SPColorScalesMode mode) gtk_widget_set_halign(_b[i], GTK_ALIGN_CENTER); gtk_widget_set_valign(_b[i], GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(t), _b[i], 2, i, 1, 1); -#else - gtk_table_attach(GTK_TABLE(t), _b[i], 2, 3, i, i + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, XPAD, YPAD); -#endif /* Attach channel value to adjustment */ g_object_set_data(G_OBJECT(_a[i]), "channel", GINT_TO_POINTER(i)); @@ -272,7 +250,6 @@ void ColorScales::_setRangeLimit(gdouble upper) _rangeLimit = upper; for (gint i = 0; i < static_cast(G_N_ELEMENTS(_a)); i++) { gtk_adjustment_set_upper(_a[i], upper); - gtk_adjustment_changed(_a[i]); } } @@ -286,11 +263,7 @@ void ColorScales::_onColorChanged() void ColorScales::on_show() { -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Grid::on_show(); -#else - Gtk::Table::on_show(); -#endif _updateDisplay(); } diff --git a/src/ui/widget/color-scales.h b/src/ui/widget/color-scales.h index aeacfbcc1..1e86d762d 100644 --- a/src/ui/widget/color-scales.h +++ b/src/ui/widget/color-scales.h @@ -5,11 +5,7 @@ #include #endif -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/selected-color.h" @@ -27,11 +23,7 @@ typedef enum { } SPColorScalesMode; class ColorScales -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: static const gchar *SUBMODE_NAMES[]; diff --git a/src/ui/widget/color-slider.cpp b/src/ui/widget/color-slider.cpp index 0c9586a67..2a8b6a7a2 100644 --- a/src/ui/widget/color-slider.cpp +++ b/src/ui/widget/color-slider.cpp @@ -19,12 +19,7 @@ #include #include #include -#if WITH_GTKMM_3_0 #include -#else -#include -#endif -#include #include "ui/widget/color-scales.h" #include "ui/widget/color-slider.h" @@ -43,14 +38,8 @@ namespace Inkscape { namespace UI { namespace Widget { -#if GTK_CHECK_VERSION(3, 0, 0) ColorSlider::ColorSlider(Glib::RefPtr adjustment) : _dragging(false) -#else -ColorSlider::ColorSlider(Gtk::Adjustment *adjustment) - : _dragging(false) - , _adjustment(NULL) -#endif , _value(0.0) , _oldvalue(0.0) , _mapsize(0) @@ -83,12 +72,7 @@ ColorSlider::~ColorSlider() if (_adjustment) { _adjustment_changed_connection.disconnect(); _adjustment_value_changed_connection.disconnect(); -#if GTK_CHECK_VERSION(3, 0, 0) _adjustment.reset(); -#else - _adjustment->unreference(); - _adjustment = NULL; -#endif } } @@ -109,26 +93,15 @@ void ColorSlider::on_realize() attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gdk_screen_get_system_visual(gdk_screen_get_default()); -#if !GTK_CHECK_VERSION(3, 0, 0) - attributes.colormap = gdk_screen_get_system_colormap(gdk_screen_get_default()); -#endif attributes.event_mask = get_events(); attributes.event_mask |= (Gdk::EXPOSURE_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK); -#if GTK_CHECK_VERSION(3, 0, 0) attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; -#else - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; -#endif _gdk_window = Gdk::Window::create(get_parent_window(), &attributes, attributes_mask); set_window(_gdk_window); _gdk_window->set_user_data(gobj()); - -#if !GTK_CHECK_VERSION(3, 0, 0) - style_attach(); -#endif } } @@ -149,8 +122,6 @@ void ColorSlider::on_size_allocate(Gtk::Allocation &allocation) } } -#if GTK_CHECK_VERSION(3, 0, 0) - void ColorSlider::get_preferred_width_vfunc(int &minimum_width, int &natural_width) const { Glib::RefPtr style_context = get_style_context(); @@ -177,38 +148,12 @@ void ColorSlider::get_preferred_height_for_width_vfunc(int /*width*/, int &minim get_preferred_height(minimum_height, natural_height); } -#else - -void ColorSlider::on_size_request(Gtk::Requisition *requisition) -{ - GtkStyle *style = gtk_widget_get_style(gobj()); - requisition->width = SLIDER_WIDTH + style->xthickness * 2; - requisition->height = SLIDER_HEIGHT + style->ythickness * 2; -} - -bool ColorSlider::on_expose_event(GdkEventExpose *event) -{ - bool result = false; - - if (get_is_drawable()) { - Cairo::RefPtr cr = _gdk_window->create_cairo_context(); - result = on_draw(cr); - } - return result; -} - -#endif - bool ColorSlider::on_button_press_event(GdkEventButton *event) { if (event->button == 1) { Gtk::Allocation allocation = get_allocation(); gint cx, cw; -#if GTK_CHECK_VERSION(3, 0, 0) cx = get_style_context()->get_padding(get_state_flags()).get_left(); -#else - cx = get_style()->get_xthickness(); -#endif cw = allocation.get_width() - 2 * cx; signal_grabbed.emit(); _dragging = true; @@ -216,15 +161,9 @@ bool ColorSlider::on_button_press_event(GdkEventButton *event) ColorScales::setScaled(_adjustment->gobj(), CLAMP((gfloat)(event->x - cx) / cw, 0.0, 1.0)); signal_dragged.emit(); -#if GTK_CHECK_VERSION(3, 0, 0) gdk_device_grab( gdk_event_get_device(reinterpret_cast(event)), _gdk_window->gobj(), GDK_OWNERSHIP_NONE, FALSE, static_cast(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), NULL, event->time); -#else - gdk_pointer_grab(get_window()->gobj(), FALSE, - static_cast(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK), NULL, NULL, - event->time); -#endif } return false; @@ -233,13 +172,8 @@ bool ColorSlider::on_button_press_event(GdkEventButton *event) bool ColorSlider::on_button_release_event(GdkEventButton *event) { if (event->button == 1) { - -#if GTK_CHECK_VERSION(3, 0, 0) gdk_device_ungrab(gdk_event_get_device(reinterpret_cast(event)), gdk_event_get_time(reinterpret_cast(event))); -#else - get_window()->pointer_ungrab(event->time); -#endif _dragging = false; signal_released.emit(); @@ -256,11 +190,7 @@ bool ColorSlider::on_motion_notify_event(GdkEventMotion *event) if (_dragging) { gint cx, cw; Gtk::Allocation allocation = get_allocation(); -#if GTK_CHECK_VERSION(3, 0, 0) cx = get_style_context()->get_padding(get_state_flags()).get_left(); -#else - cx = get_style()->get_xthickness(); -#endif cw = allocation.get_width() - 2 * cx; ColorScales::setScaled(_adjustment->gobj(), CLAMP((gfloat)(event->x - cx) / cw, 0.0, 1.0)); signal_dragged.emit(); @@ -269,19 +199,10 @@ bool ColorSlider::on_motion_notify_event(GdkEventMotion *event) return false; } -#if GTK_CHECK_VERSION(3, 0, 0) void ColorSlider::setAdjustment(Glib::RefPtr adjustment) { -#else -void ColorSlider::setAdjustment(Gtk::Adjustment *adjustment) -{ -#endif if (!adjustment) { -#if GTK_CHECK_VERSION(3, 0, 0) _adjustment = Gtk::Adjustment::create(0.0, 0.0, 1.0, 0.01, 0.0, 0.0); -#else - _adjustment = Gtk::manage(new Gtk::Adjustment(0.0, 0.0, 1.0, 0.01, 0.0, 0.0)); -#endif } else { adjustment->set_page_increment(0.0); @@ -292,9 +213,6 @@ void ColorSlider::setAdjustment(Gtk::Adjustment *adjustment) if (_adjustment) { _adjustment_changed_connection.disconnect(); _adjustment_value_changed_connection.disconnect(); -#if !GTK_CHECK_VERSION(3, 0, 0) - _adjustment->unreference(); -#endif } _adjustment = adjustment; @@ -315,18 +233,11 @@ void ColorSlider::_onAdjustmentValueChanged() { if (_value != ColorScales::getScaled(_adjustment->gobj())) { gint cx, cy, cw, ch; -#if GTK_CHECK_VERSION(3, 0, 0) - Glib::RefPtr style_context = get_style_context(); - Gtk::Allocation allocation = get_allocation(); - Gtk::Border padding = style_context->get_padding(get_state_flags()); + auto style_context = get_style_context(); + auto allocation = get_allocation(); + auto padding = style_context->get_padding(get_state_flags()); cx = padding.get_left(); cy = padding.get_top(); -#else - Glib::RefPtr style = get_style(); - Gtk::Allocation allocation = get_allocation(); - cx = style->get_xthickness(); - cy = style->get_ythickness(); -#endif cw = allocation.get_width() - 2 * cx; ch = allocation.get_height() - 2 * cy; if ((gint)(ColorScales::getScaled(_adjustment->gobj()) * cw) != (gint)(_value * cw)) { @@ -390,40 +301,22 @@ bool ColorSlider::on_draw(const Cairo::RefPtr &cr) { gboolean colorsOnTop = Inkscape::Preferences::get()->getBool("/options/workarounds/colorsontop", false); - Gtk::Allocation allocation = get_allocation(); - -#if GTK_CHECK_VERSION(3, 0, 0) - Glib::RefPtr style_context = get_style_context(); -#else - Glib::RefPtr window = get_window(); - Glib::RefPtr style = get_style(); -#endif + auto allocation = get_allocation(); + auto style_context = get_style_context(); // Draw shadow if (colorsOnTop) { -#if GTK_CHECK_VERSION(3, 0, 0) style_context->render_frame(cr, 0, 0, allocation.get_width(), allocation.get_height()); -#else - gtk_paint_shadow(style->gobj(), window->gobj(), gtk_widget_get_state(gobj()), GTK_SHADOW_IN, NULL, gobj(), - "colorslider", 0, 0, allocation.get_width(), allocation.get_height()); -#endif } /* Paintable part of color gradient area */ Gdk::Rectangle carea; - -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Border padding; padding = style_context->get_padding(get_state_flags()); carea.set_x(padding.get_left()); carea.set_y(padding.get_top()); - ; -#else - carea.set_x(style->get_xthickness()); - carea.set_y(style->get_ythickness()); -#endif carea.set_width(allocation.get_width() - 2 * carea.get_x()); carea.set_height(allocation.get_height() - 2 * carea.get_y()); @@ -491,12 +384,7 @@ bool ColorSlider::on_draw(const Cairo::RefPtr &cr) /* Draw shadow */ if (!colorsOnTop) { -#if GTK_CHECK_VERSION(3, 0, 0) style_context->render_frame(cr, 0, 0, allocation.get_width(), allocation.get_height()); -#else - gtk_paint_shadow(style->gobj(), window->gobj(), gtk_widget_get_state(gobj()), GTK_SHADOW_IN, NULL, gobj(), - "colorslider", 0, 0, allocation.get_width(), allocation.get_height()); -#endif } /* Draw arrow */ diff --git a/src/ui/widget/color-slider.h b/src/ui/widget/color-slider.h index 253f3123c..9be6c356a 100644 --- a/src/ui/widget/color-slider.h +++ b/src/ui/widget/color-slider.h @@ -24,18 +24,10 @@ namespace Widget { */ class ColorSlider : public Gtk::Widget { public: -#if GTK_CHECK_VERSION(3, 0, 0) ColorSlider(Glib::RefPtr adjustment); -#else - ColorSlider(Gtk::Adjustment *adjustment); -#endif ~ColorSlider(); -#if GTK_CHECK_VERSION(3, 0, 0) void setAdjustment(Glib::RefPtr adjustment); -#else - void setAdjustment(Gtk::Adjustment *adjustment); -#endif void setColors(guint32 start, guint32 mid, guint32 end); @@ -56,16 +48,10 @@ protected: bool on_button_release_event(GdkEventButton *event); bool on_motion_notify_event(GdkEventMotion *event); bool on_draw(const Cairo::RefPtr &cr); - -#if GTK_CHECK_VERSION(3, 0, 0) void get_preferred_width_vfunc(int &minimum_width, int &natural_width) const; void get_preferred_width_for_height_vfunc(int height, int &minimum_width, int &natural_width) const; void get_preferred_height_vfunc(int &minimum_height, int &natural_height) const; void get_preferred_height_for_width_vfunc(int width, int &minimum_height, int &natural_height) const; -#else - void on_size_request(Gtk::Requisition *requisition); - bool on_expose_event(GdkEventExpose *event); -#endif private: void _onAdjustmentChanged(); @@ -73,11 +59,7 @@ private: bool _dragging; -#if GTK_CHECK_VERSION(3, 0, 0) Glib::RefPtr _adjustment; -#else - Gtk::Adjustment *_adjustment; -#endif sigc::connection _adjustment_changed_connection; sigc::connection _adjustment_value_changed_connection; diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp index 22c616325..9b4119572 100644 --- a/src/ui/widget/color-wheel-selector.cpp +++ b/src/ui/widget/color-wheel-selector.cpp @@ -29,16 +29,9 @@ namespace Widget { const gchar *ColorWheelSelector::MODE_NAME = N_("Wheel"); ColorWheelSelector::ColorWheelSelector(SelectedColor &color) -#if GTK_CHECK_VERSION(3, 0, 0) : Gtk::Grid() -#else - : Gtk::Table(5, 3, false) -#endif , _color(color) , _updating(false) -#if !GTK_CHECK_VERSION(3, 0, 0) - , _alpha_adjustment(NULL) -#endif , _wheel(0) , _slider(0) { @@ -50,9 +43,6 @@ ColorWheelSelector::ColorWheelSelector(SelectedColor &color) ColorWheelSelector::~ColorWheelSelector() { _wheel = 0; -#if !GTK_CHECK_VERSION(3, 0, 0) - delete _alpha_adjustment; -#endif _color_changed_connection.disconnect(); _color_dragged_connection.disconnect(); @@ -66,16 +56,11 @@ void ColorWheelSelector::_initUI() _wheel = gimp_color_wheel_new(); gtk_widget_show(_wheel); -#if GTK_CHECK_VERSION(3, 0, 0) gtk_widget_set_halign(_wheel, GTK_ALIGN_FILL); gtk_widget_set_valign(_wheel, GTK_ALIGN_FILL); gtk_widget_set_hexpand(_wheel, TRUE); gtk_widget_set_vexpand(_wheel, TRUE); gtk_grid_attach(GTK_GRID(gobj()), _wheel, 0, row, 3, 1); -#else - gtk_table_attach(GTK_TABLE(gobj()), _wheel, 0, 3, row, row + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif row++; @@ -84,7 +69,6 @@ void ColorWheelSelector::_initUI() label->set_alignment(1.0, 0.5); label->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) label->set_margin_start(XPAD); label->set_margin_end(XPAD); @@ -97,22 +81,15 @@ void ColorWheelSelector::_initUI() label->set_halign(Gtk::ALIGN_FILL); label->set_valign(Gtk::ALIGN_FILL); attach(*label, 0, row, 1, 1); -#else - attach(*label, 0, 1, row, row + 1, Gtk::FILL, Gtk::FILL, XPAD, YPAD); -#endif -/* Adjustment */ -#if GTK_CHECK_VERSION(3, 0, 0) + /* Adjustment */ _alpha_adjustment = Gtk::Adjustment::create(0.0, 0.0, 255.0, 1.0, 10.0, 10.0); -#else - _alpha_adjustment = new Gtk::Adjustment(0.0, 0.0, 255.0, 1.0, 10.0, 10.0); -#endif + /* Slider */ _slider = Gtk::manage(new Inkscape::UI::Widget::ColorSlider(_alpha_adjustment)); _slider->set_tooltip_text(_("Alpha (opacity)")); _slider->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) _slider->set_margin_start(XPAD); _slider->set_margin_end(XPAD); @@ -126,25 +103,17 @@ void ColorWheelSelector::_initUI() _slider->set_halign(Gtk::ALIGN_FILL); _slider->set_valign(Gtk::ALIGN_FILL); attach(*_slider, 1, row, 1, 1); -#else - attach(*_slider, 1, 2, row, row + 1, Gtk::EXPAND | Gtk::FILL, Gtk::FILL, XPAD, YPAD); -#endif _slider->setColors(SP_RGBA32_F_COMPOSE(1.0, 1.0, 1.0, 0.0), SP_RGBA32_F_COMPOSE(1.0, 1.0, 1.0, 0.5), SP_RGBA32_F_COMPOSE(1.0, 1.0, 1.0, 1.0)); -/* Spinbutton */ -#if GTK_CHECK_VERSION(3, 0, 0) - Gtk::SpinButton *spin_button = Gtk::manage(new Gtk::SpinButton(_alpha_adjustment, 1.0, 0)); -#else - Gtk::SpinButton *spin_button = Gtk::manage(new Gtk::SpinButton(*_alpha_adjustment, 1.0, 0)); -#endif + /* Spinbutton */ + auto spin_button = Gtk::manage(new Gtk::SpinButton(_alpha_adjustment, 1.0, 0)); spin_button->set_tooltip_text(_("Alpha (opacity)")); sp_dialog_defocus_on_enter(GTK_WIDGET(spin_button->gobj())); label->set_mnemonic_widget(*spin_button); spin_button->show(); -#if GTK_CHECK_VERSION(3, 0, 0) #if GTK_CHECK_VERSION(3, 12, 0) spin_button->set_margin_start(XPAD); spin_button->set_margin_end(XPAD); @@ -157,9 +126,6 @@ void ColorWheelSelector::_initUI() spin_button->set_halign(Gtk::ALIGN_CENTER); spin_button->set_valign(Gtk::ALIGN_CENTER); attach(*spin_button, 2, row, 1, 1); -#else - attach(*spin_button, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, XPAD, YPAD); -#endif /* Signals */ _alpha_adjustment->signal_value_changed().connect(sigc::mem_fun(this, &ColorWheelSelector::_adjustmentChanged)); @@ -172,11 +138,7 @@ void ColorWheelSelector::_initUI() void ColorWheelSelector::on_show() { -#if GTK_CHECK_VERSION(3, 0, 0) Gtk::Grid::on_show(); -#else - Gtk::Table::on_show(); -#endif _updateDisplay(); } diff --git a/src/ui/widget/color-wheel-selector.h b/src/ui/widget/color-wheel-selector.h index 5711d417c..ee7bd9b83 100644 --- a/src/ui/widget/color-wheel-selector.h +++ b/src/ui/widget/color-wheel-selector.h @@ -16,11 +16,7 @@ #include #endif -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/selected-color.h" @@ -33,11 +29,7 @@ namespace Widget { class ColorSlider; class ColorWheelSelector -#if GTK_CHECK_VERSION(3, 0, 0) : public Gtk::Grid -#else - : public Gtk::Table -#endif { public: static const gchar *MODE_NAME; @@ -61,11 +53,7 @@ protected: SelectedColor &_color; bool _updating; -#if GTK_CHECK_VERSION(3, 0, 0) Glib::RefPtr _alpha_adjustment; -#else - Gtk::Adjustment *_alpha_adjustment; -#endif GtkWidget *_wheel; Inkscape::UI::Widget::ColorSlider *_slider; diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index 8d960ddc3..fc41efe52 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -59,11 +59,7 @@ DockItem::DockItem(Dock& dock, const Glib::ustring& name, const Glib::ustring& l Gtk::StockItem item; Gtk::StockID stockId(icon_name); if ( Gtk::StockItem::lookup(stockId, item) ) { -#if WITH_GTKMM_3_0 _icon_pixbuf = _dock.getWidget().render_icon_pixbuf( stockId, Gtk::ICON_SIZE_MENU ); -#else - _icon_pixbuf = _dock.getWidget().render_icon( stockId, Gtk::ICON_SIZE_MENU ); -#endif } } } @@ -175,12 +171,8 @@ DockItem::set_size_request(int width, int height) void DockItem::size_request(Gtk::Requisition& requisition) { -#if WITH_GTKMM_3_0 Gtk::Requisition req_natural; getWidget().get_preferred_size(req_natural, requisition); -#else - requisition = getWidget().size_request(); -#endif } void diff --git a/src/ui/widget/dock.cpp b/src/ui/widget/dock.cpp index fda647182..7744cb695 100644 --- a/src/ui/widget/dock.cpp +++ b/src/ui/widget/dock.cpp @@ -65,7 +65,6 @@ Dock::Dock(Gtk::Orientation orientation) static_cast(orientation)); #endif -#if WITH_GTKMM_3_0 switch(orientation) { case Gtk::ORIENTATION_VERTICAL: _dock_box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); @@ -75,17 +74,6 @@ Dock::Dock(Gtk::Orientation orientation) } _paned = Gtk::manage(new Gtk::Paned(orientation)); -#else - switch (orientation) { - case Gtk::ORIENTATION_VERTICAL: - _dock_box = Gtk::manage(new Gtk::HBox()); - _paned = Gtk::manage(new Gtk::VPaned()); - break; - case Gtk::ORIENTATION_HORIZONTAL: - _dock_box = Gtk::manage(new Gtk::VBox()); - _paned = Gtk::manage(new Gtk::HPaned()); - } -#endif _scrolled_window->add(*_dock_box); _scrolled_window->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); diff --git a/src/ui/widget/gimpspinscale.c b/src/ui/widget/gimpspinscale.c index d99646a64..8d8c6c935 100644 --- a/src/ui/widget/gimpspinscale.c +++ b/src/ui/widget/gimpspinscale.c @@ -41,10 +41,8 @@ typedef enum { TARGET_NUMBER, TARGET_UPPER, - TARGET_LOWER -#if WITH_GTKMM_3_0 - ,TARGET_NONE -#endif + TARGET_LOWER, + TARGET_NONE } SpinScaleTarget; typedef enum @@ -94,7 +92,6 @@ static void gimp_spin_scale_get_property (GObject *object, static void gimp_spin_scale_style_set (GtkWidget *widget, GtkStyle *prev_style); -#if WITH_GTKMM_3_0 static void gimp_spin_scale_get_preferred_width (GtkWidget *widget, gint *minimum_width, gint *natural_width); @@ -103,13 +100,6 @@ static void gimp_spin_scale_get_preferred_height (GtkWidget *widget gint *natural_width); static gboolean gimp_spin_scale_draw (GtkWidget *widget, cairo_t *cr); -#else -static void gimp_spin_scale_size_request (GtkWidget *widget, - GtkRequisition *requisition); - -static gboolean gimp_spin_scale_expose (GtkWidget *widget, - GdkEventExpose *event); -#endif static gboolean gimp_spin_scale_button_press (GtkWidget *widget, GdkEventButton *event); @@ -145,14 +135,9 @@ gimp_spin_scale_class_init (GimpSpinScaleClass *klass) object_class->get_property = gimp_spin_scale_get_property; widget_class->style_set = gimp_spin_scale_style_set; -#if WITH_GTKMM_3_0 widget_class->get_preferred_width = gimp_spin_scale_get_preferred_width; widget_class->get_preferred_height = gimp_spin_scale_get_preferred_height; widget_class->draw = gimp_spin_scale_draw; -#else - widget_class->size_request = gimp_spin_scale_size_request; - widget_class->expose_event = gimp_spin_scale_expose; -#endif widget_class->button_press_event = gimp_spin_scale_button_press; widget_class->button_release_event = gimp_spin_scale_button_release; widget_class->motion_notify_event = gimp_spin_scale_motion_notify; @@ -294,7 +279,6 @@ gimp_spin_scale_set_appearance( GtkWidget *widget, const gchar *appearance) } } -#if GTK_CHECK_VERSION(3,0,0) static void gimp_spin_scale_get_preferred_width (GtkWidget *widget, gint *minimum_width, @@ -355,48 +339,6 @@ gimp_spin_scale_get_preferred_height (GtkWidget *widget, pango_font_metrics_unref (metrics); } -#else -static void -gimp_spin_scale_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GimpSpinScalePrivate *private = GET_PRIVATE (widget); - GtkStyle *style = gtk_widget_get_style (widget); - PangoContext *context = gtk_widget_get_pango_context (widget); - PangoFontMetrics *metrics; - gint height; - - GTK_WIDGET_CLASS (parent_class)->size_request (widget, requisition); - - metrics = pango_context_get_metrics (context, style->font_desc, - pango_context_get_language (context)); - - height = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) + - pango_font_metrics_get_descent (metrics)); - - if (private->appearanceMode == APPEARANCE_COMPACT) { - requisition->height += 1; - } else { - requisition->height += height; - } - - if (private->label) - { - gint char_width; - gint digit_width; - gint char_pixels; - - char_width = pango_font_metrics_get_approximate_char_width (metrics); - digit_width = pango_font_metrics_get_approximate_digit_width (metrics); - char_pixels = PANGO_PIXELS (MAX (char_width, digit_width)); - - /* ~3 chars for the ellipses */ - requisition->width += char_pixels * 3; - } - - pango_font_metrics_unref (metrics); -} -#endif static void gimp_spin_scale_style_set (GtkWidget *widget, @@ -415,16 +357,10 @@ gimp_spin_scale_style_set (GtkWidget *widget, static gboolean -#if GTK_CHECK_VERSION(3,0,0) gimp_spin_scale_draw (GtkWidget *widget, cairo_t *cr) -#else - gimp_spin_scale_expose (GtkWidget *widget, - GdkEventExpose *event) -#endif { GimpSpinScalePrivate *private = GET_PRIVATE (widget); -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *style = gtk_widget_get_style_context(widget); GtkAllocation allocation; GdkRGBA color; @@ -434,66 +370,31 @@ static gboolean cairo_restore (cr); gtk_widget_get_allocation (widget, &allocation); -#else - GtkStyle *style = gtk_widget_get_style (widget); - cairo_t *cr; - gint w; - - GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); - - cr = gdk_cairo_create (event->window); - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - w = gdk_window_get_width (event->window); -#endif cairo_set_line_width (cr, 1.0); -#if GTK_CHECK_VERSION(3,0,0) if (private->label) { GdkRectangle text_area; gint minimum_width; gint natural_width; -#else - if (private->label && - gtk_widget_is_drawable (widget) && - event->window == gtk_entry_get_text_window (GTK_ENTRY (widget))) - { - GtkRequisition requisition; - GtkAllocation allocation; -#endif PangoRectangle logical; gint layout_offset_x; gint layout_offset_y; -#if GTK_CHECK_VERSION(3,0,0) GtkStateFlags state; GdkRGBA text_color; GdkRGBA bar_text_color; -#else - GtkStateType state; - GdkColor text_color; - GdkColor bar_text_color; - gint window_width; - gint window_height; -#endif gdouble progress_fraction; gint progress_x; gint progress_y; gint progress_width; gint progress_height; -#if GTK_CHECK_VERSION(3,0,0) gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); GTK_WIDGET_CLASS (parent_class)->get_preferred_width (widget, &minimum_width, &natural_width); -#else - GTK_WIDGET_CLASS (parent_class)->size_request (widget, &requisition); - gtk_widget_get_allocation (widget, &allocation); -#endif if (! private->layout) { @@ -504,27 +405,18 @@ static gboolean pango_layout_set_width (private->layout, PANGO_SCALE * -#if GTK_CHECK_VERSION(3,0,0) (allocation.width - minimum_width)); -#else - (allocation.width - requisition.width)); -#endif pango_layout_get_pixel_extents (private->layout, NULL, &logical); gtk_entry_get_layout_offsets (GTK_ENTRY (widget), NULL, &layout_offset_y); if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) -#if GTK_CHECK_VERSION(3,0,0) layout_offset_x = text_area.x + text_area.width - logical.width - 4; -#else - layout_offset_x = w - logical.width - 4; -#endif else layout_offset_x = 4; layout_offset_x -= logical.x; -#if GTK_CHECK_VERSION(3,0,0) state = gtk_widget_get_state_flags (widget); gtk_style_context_get_color (style, state, &text_color); @@ -533,16 +425,6 @@ static gboolean gtk_style_context_add_class (style, GTK_STYLE_CLASS_PROGRESSBAR); gtk_style_context_get_color (style, state, &bar_text_color); gtk_style_context_restore (style); -#else - state = GTK_STATE_SELECTED; - if (! gtk_widget_get_sensitive (widget)) - state = GTK_STATE_INSENSITIVE; - text_color = style->text[gtk_widget_get_state (widget)]; - bar_text_color = style->fg[state]; - - window_width = gdk_window_get_width (event->window); - window_height = gdk_window_get_height (event->window); -#endif progress_fraction = gtk_entry_get_progress_fraction (GTK_ENTRY (widget)); @@ -550,53 +432,30 @@ static gboolean { progress_fraction = 1.0 - progress_fraction; -#if GTK_CHECK_VERSION(3,0,0) progress_x = text_area.width * progress_fraction; -#else - progress_x = window_width * progress_fraction; -#endif progress_y = 0; -#if GTK_CHECK_VERSION(3,0,0) progress_width = text_area.width - progress_x; progress_height = text_area.height; -#else - progress_width = window_width - progress_x; - progress_height = window_height; -#endif } else { progress_x = 0; progress_y = 0; -#if GTK_CHECK_VERSION(3,0,0) progress_width = text_area.width * progress_fraction; progress_height = text_area.height; -#else - progress_width = window_width * progress_fraction; - progress_height = window_height; -#endif } cairo_save (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_EVEN_ODD); -#if GTK_CHECK_VERSION(3,0,0) cairo_rectangle (cr, 0, 0, text_area.width, text_area.height); -#else - cairo_rectangle (cr, 0, 0, window_width, window_height); -#endif cairo_rectangle (cr, progress_x, progress_y, progress_width, progress_height); cairo_clip (cr); cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); gdk_cairo_set_source_rgba (cr, &text_color); -#else - cairo_move_to (cr, layout_offset_x, layout_offset_y-3); - gdk_cairo_set_source_color (cr, &text_color); -#endif pango_cairo_show_layout (cr, private->layout); cairo_restore (cr); @@ -604,24 +463,14 @@ static gboolean progress_width, progress_height); cairo_clip (cr); -#if GTK_CHECK_VERSION(3,0,0) cairo_move_to (cr, layout_offset_x, text_area.y + layout_offset_y-3); gdk_cairo_set_source_rgba (cr, &bar_text_color); -#else - cairo_move_to (cr, layout_offset_x, layout_offset_y-3); - gdk_cairo_set_source_color (cr, &bar_text_color); -#endif pango_cairo_show_layout (cr, private->layout); } -#if !GTK_CHECK_VERSION(3,0,0) - cairo_destroy (cr); -#endif - return FALSE; } -#if WITH_GTKMM_3_0 /* Returns TRUE if a translation should be done */ static gboolean gtk_widget_get_translation_to_window (GtkWidget *widget, @@ -685,7 +534,6 @@ gimp_spin_scale_event_to_widget_coords (GtkWidget *widget, *widget_x = event_x; *widget_y = event_y; } -#endif static SpinScaleTarget gimp_spin_scale_get_target (GtkWidget *widget, @@ -702,7 +550,6 @@ gimp_spin_scale_get_target (GtkWidget *widget, pango_layout_get_pixel_extents (gtk_entry_get_layout (GTK_ENTRY (widget)), NULL, &logical); -#if WITH_GTKMM_3_0 GdkRectangle text_area; gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); @@ -726,19 +573,6 @@ gimp_spin_scale_get_target (GtkWidget *widget, } return TARGET_NONE; -#else - if (x > layout_x && x < layout_x + logical.width && - y > layout_y && y < layout_y + logical.height) - { - return TARGET_NUMBER; - } - - else if (y > allocation.height / 2) - { - return TARGET_LOWER; - } - return TARGET_UPPER; -#endif } static void @@ -773,49 +607,21 @@ gimp_spin_scale_change_value (GtkWidget *widget, gdouble lower; gdouble upper; gdouble value; -#if WITH_GTKMM_3_0 -#else -#endif -#if WITH_GTKMM_3_0 GdkRectangle text_area; gtk_entry_get_text_area (GTK_ENTRY (widget), &text_area); gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper); -#else - GdkWindow *text_window = gtk_entry_get_text_window (GTK_ENTRY (widget)); - gint width; - - gimp_spin_scale_get_limits (GIMP_SPIN_SCALE (widget), &lower, &upper); - - width = gdk_window_get_width (text_window); -#endif - if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) -#if WITH_GTKMM_3_0 x = text_area.width - x; -#else - x = width - x; -#endif - if (private->relative_change) { gdouble diff; gdouble step; - -#if WITH_GTKMM_3_0 step = (upper - lower) / text_area.width / 10.0; -#else - step = (upper - lower) / width / 10.0; -#endif if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) - -#if WITH_GTKMM_3_0 diff = x - (text_area.width - private->start_x); -#else - diff = x - (width - private->start_x); -#endif else diff = x - private->start_x; @@ -825,12 +631,7 @@ gimp_spin_scale_change_value (GtkWidget *widget, { gdouble fraction; - -#if WITH_GTKMM_3_0 fraction = x / (gdouble) text_area.width; -#else - fraction = x / (gdouble) width; -#endif if (fraction > 0.0) fraction = pow (fraction, private->gamma); @@ -849,7 +650,6 @@ gimp_spin_scale_button_press (GtkWidget *widget, private->changing_value = FALSE; private->relative_change = FALSE; -#if WITH_GTKMM_3_0 gint x, y; gimp_spin_scale_event_to_widget_coords (widget, event->window, event->x, event->y, @@ -879,36 +679,6 @@ gimp_spin_scale_button_press (GtkWidget *widget, default: break; } -#else - if (event->window == gtk_entry_get_text_window (GTK_ENTRY (widget))) - { - switch (gimp_spin_scale_get_target (widget, event->x, event->y)) - { - case TARGET_UPPER: - private->changing_value = TRUE; - - gtk_widget_grab_focus (widget); - - gimp_spin_scale_change_value (widget, event->x); - - return TRUE; - - case TARGET_LOWER: - private->changing_value = TRUE; - - gtk_widget_grab_focus (widget); - - private->relative_change = TRUE; - private->start_x = event->x; - private->start_value = gtk_adjustment_get_value (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (widget))); - - return TRUE; - - default: - break; - } - } -#endif return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event); } @@ -918,22 +688,16 @@ gimp_spin_scale_button_release (GtkWidget *widget, GdkEventButton *event) { GimpSpinScalePrivate *private = GET_PRIVATE (widget); -#if WITH_GTKMM_3_0 gint x, y; gimp_spin_scale_event_to_widget_coords (widget, event->window, event->x, event->y, &x, &y); -#endif if (private->changing_value) { private->changing_value = FALSE; -#if WITH_GTKMM_3_0 gimp_spin_scale_change_value (widget, x); -#else - gimp_spin_scale_change_value (widget, event->x); -#endif return TRUE; } @@ -948,21 +712,15 @@ gimp_spin_scale_motion_notify (GtkWidget *widget, gdk_event_request_motions (event); -#if WITH_GTKMM_3_0 gint x, y; gimp_spin_scale_event_to_widget_coords (widget, event->window, event->x, event->y, &x, &y); -#endif if (private->changing_value) { -#if WITH_GTKMM_3_0 gimp_spin_scale_change_value (widget, x); -#else - gimp_spin_scale_change_value (widget, event->x); -#endif return TRUE; } @@ -971,20 +729,12 @@ gimp_spin_scale_motion_notify (GtkWidget *widget, if (! (event->state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) -#if WITH_GTKMM_3_0 -#else - && event->window == gtk_entry_get_text_window (GTK_ENTRY (widget)) -#endif ) { GdkDisplay *display = gtk_widget_get_display (widget); GdkCursor *cursor = NULL; -#if WITH_GTKMM_3_0 switch (gimp_spin_scale_get_target (widget, x, y)) -#else - switch (gimp_spin_scale_get_target (widget, event->x, event->y)) -#endif { case TARGET_NUMBER: cursor = gdk_cursor_new_for_display (display, GDK_XTERM); @@ -1002,17 +752,11 @@ gimp_spin_scale_motion_notify (GtkWidget *widget, break; } - -#if WITH_GTKMM_3_0 if (cursor) { gdk_window_set_cursor (event->window, cursor); g_object_unref (cursor); } -#else - gdk_window_set_cursor (event->window, cursor); - gdk_cursor_unref (cursor); -#endif } return FALSE; diff --git a/src/ui/widget/highlight-picker.cpp b/src/ui/widget/highlight-picker.cpp index 09999b52d..e4447cb9e 100644 --- a/src/ui/widget/highlight-picker.cpp +++ b/src/ui/widget/highlight-picker.cpp @@ -35,8 +35,6 @@ HighlightPicker::~HighlightPicker() { } - -#if WITH_GTKMM_3_0 void HighlightPicker::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -66,39 +64,12 @@ void HighlightPicker::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void HighlightPicker::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = 10;//+= (*width) >> 1; - } - if ( height ) { - *height = 20; //cell_area ? cell_area->get_height() / 2 : 50; //+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void HighlightPicker::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void HighlightPicker::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { GdkRectangle carea; @@ -140,11 +111,7 @@ void HighlightPicker::render_vfunc( const Glib::RefPtr& window, convert_pixbuf_argb32_to_normal(pixbuf); property_pixbuf() = Glib::wrap(pixbuf); -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool HighlightPicker::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/highlight-picker.h b/src/ui/widget/highlight-picker.h index c5fe4c02c..c459b0dcd 100644 --- a/src/ui/widget/highlight-picker.h +++ b/src/ui/widget/highlight-picker.h @@ -29,8 +29,6 @@ public: Glib::PropertyProxy property_active() { return _property_active.get_proxy(); } protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -44,18 +42,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/imagetoggler.cpp b/src/ui/widget/imagetoggler.cpp index 29907f4c9..987cc67bb 100644 --- a/src/ui/widget/imagetoggler.cpp +++ b/src/ui/widget/imagetoggler.cpp @@ -53,8 +53,6 @@ ImageToggler::ImageToggler( char const* on, char const* off) : property_pixbuf() = _property_pixbuf_off.get_value(); } - -#if WITH_GTKMM_3_0 void ImageToggler::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -84,46 +82,15 @@ void ImageToggler::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void ImageToggler::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width += (*width) >> 1; - } - if ( height ) { - *height += (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void ImageToggler::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void ImageToggler::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { property_pixbuf() = _property_active.get_value() ? _property_pixbuf_on : _property_pixbuf_off; -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool diff --git a/src/ui/widget/imagetoggler.h b/src/ui/widget/imagetoggler.h index 7b02fa4dc..d4f27cf11 100644 --- a/src/ui/widget/imagetoggler.h +++ b/src/ui/widget/imagetoggler.h @@ -36,8 +36,6 @@ public: Glib::PropertyProxy< Glib::RefPtr > property_pixbuf_off(); protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -51,18 +49,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/insertordericon.cpp b/src/ui/widget/insertordericon.cpp index 9aec7d135..7ed1ed2e2 100644 --- a/src/ui/widget/insertordericon.cpp +++ b/src/ui/widget/insertordericon.cpp @@ -52,7 +52,6 @@ InsertOrderIcon::InsertOrderIcon() : } -#if WITH_GTKMM_3_0 void InsertOrderIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -82,39 +81,12 @@ void InsertOrderIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void InsertOrderIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width = phys;//+= (*width) >> 1; - } - if ( height ) { - *height =phys;//+= (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void InsertOrderIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void InsertOrderIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { switch (_property_active.get_value()) { @@ -128,11 +100,7 @@ void InsertOrderIcon::render_vfunc( const Glib::RefPtr& window, property_pixbuf() = Glib::RefPtr(0); break; } -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool InsertOrderIcon::activate_vfunc(GdkEvent* /*event*/, diff --git a/src/ui/widget/insertordericon.h b/src/ui/widget/insertordericon.h index bf8ac4fa7..43188fa5b 100644 --- a/src/ui/widget/insertordericon.h +++ b/src/ui/widget/insertordericon.h @@ -33,7 +33,6 @@ public: protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -47,18 +46,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/layertypeicon.cpp b/src/ui/widget/layertypeicon.cpp index 672c607e5..36742b953 100644 --- a/src/ui/widget/layertypeicon.cpp +++ b/src/ui/widget/layertypeicon.cpp @@ -64,8 +64,6 @@ LayerTypeIcon::LayerTypeIcon() : property_pixbuf() = _property_pixbuf_path.get_value(); } - -#if WITH_GTKMM_3_0 void LayerTypeIcon::get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const @@ -95,46 +93,15 @@ void LayerTypeIcon::get_preferred_width_vfunc(Gtk::Widget& widget, nat_w += (nat_w) >> 1; } } -#else -void LayerTypeIcon::get_size_vfunc(Gtk::Widget& widget, - const Gdk::Rectangle* cell_area, - int* x_offset, - int* y_offset, - int* width, - int* height ) const -{ - Gtk::CellRendererPixbuf::get_size_vfunc( widget, cell_area, x_offset, y_offset, width, height ); - - if ( width ) { - *width += (*width) >> 1; - } - if ( height ) { - *height += (*height) >> 1; - } -} -#endif -#if WITH_GTKMM_3_0 void LayerTypeIcon::render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags ) -#else -void LayerTypeIcon::render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ) -#endif { property_pixbuf() = _property_active.get_value() == 1 ? _property_pixbuf_group : (_property_active.get_value() == 2 ? _property_pixbuf_layer : _property_pixbuf_path); -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc( cr, widget, background_area, cell_area, flags ); -#else - Gtk::CellRendererPixbuf::render_vfunc( window, widget, background_area, cell_area, expose_area, flags ); -#endif } bool diff --git a/src/ui/widget/layertypeicon.h b/src/ui/widget/layertypeicon.h index 6c71ce361..f12029c12 100644 --- a/src/ui/widget/layertypeicon.h +++ b/src/ui/widget/layertypeicon.h @@ -35,8 +35,6 @@ public: Glib::PropertyProxy< Glib::RefPtr > property_pixbuf_off(); protected: - -#if WITH_GTKMM_3_0 virtual void render_vfunc( const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, @@ -50,18 +48,6 @@ protected: virtual void get_preferred_height_vfunc(Gtk::Widget& widget, int& min_h, int& nat_h) const; -#else - virtual void render_vfunc( const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags ); - - virtual void get_size_vfunc( Gtk::Widget &widget, - Gdk::Rectangle const *cell_area, - int *x_offset, int *y_offset, int *width, int *height ) const; -#endif virtual bool activate_vfunc(GdkEvent *event, Gtk::Widget &widget, diff --git a/src/ui/widget/licensor.cpp b/src/ui/widget/licensor.cpp index d21e848f2..66ee612bf 100644 --- a/src/ui/widget/licensor.cpp +++ b/src/ui/widget/licensor.cpp @@ -134,18 +134,10 @@ void Licensor::update (SPDocument *doc) for (i=0; rdf_licenses[i].name; i++) if (license == &rdf_licenses[i]) break; -#if WITH_GTKMM_3_0 static_cast(get_children()[i+1])->set_active(); -#else - static_cast(children()[i+1].get_widget())->set_active(); -#endif } else { -#if WITH_GTKMM_3_0 static_cast(get_children()[0])->set_active(); -#else - static_cast(children()[0].get_widget())->set_active(); -#endif } /* update the URI */ diff --git a/src/ui/widget/notebook-page.cpp b/src/ui/widget/notebook-page.cpp index 2f03ed23b..6d8ff1d75 100644 --- a/src/ui/widget/notebook-page.cpp +++ b/src/ui/widget/notebook-page.cpp @@ -11,31 +11,19 @@ #include "notebook-page.h" -#if WITH_GTKMM_3_0 # include -#else -# include -#endif namespace Inkscape { namespace UI { namespace Widget { NotebookPage::NotebookPage(int n_rows, int n_columns, bool expand, bool fill, guint padding) -#if WITH_GTKMM_3_0 :_table(Gtk::manage(new Gtk::Grid())) -#else - :_table(Gtk::manage(new Gtk::Table(n_rows, n_columns))) -#endif { set_border_width(2); -#if WITH_GTKMM_3_0 _table->set_row_spacing(2); _table->set_column_spacing(2); -#else - _table->set_spacings(2); -#endif pack_start(*_table, expand, fill, padding); } diff --git a/src/ui/widget/notebook-page.h b/src/ui/widget/notebook-page.h index c11de1b5b..6eb23907c 100644 --- a/src/ui/widget/notebook-page.h +++ b/src/ui/widget/notebook-page.h @@ -17,11 +17,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { @@ -42,19 +38,10 @@ public: */ NotebookPage(int n_rows, int n_columns, bool expand=false, bool fill=false, guint padding=0); -#if WITH_GTKMM_3_0 Gtk::Grid& table() { return *_table; } -#else - Gtk::Table& table() { return *_table; } -#endif protected: - -#if WITH_GTKMM_3_0 Gtk::Grid *_table; -#else - Gtk::Table *_table; -#endif }; } // namespace Widget diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp index 19ab1a280..c71130586 100644 --- a/src/ui/widget/page-sizer.cpp +++ b/src/ui/widget/page-sizer.cpp @@ -353,7 +353,6 @@ PageSizer::PageSizer(Registry & _wr) _customDimTable.set_border_width(4); -#if WITH_GTKMM_3_0 _customDimTable.set_row_spacing(4); _customDimTable.set_column_spacing(4); @@ -372,15 +371,6 @@ PageSizer::PageSizer(Registry & _wr) _fitPageMarginExpander.set_hexpand(); _fitPageMarginExpander.set_vexpand(); _customDimTable.attach(_fitPageMarginExpander, 0, 2, 2, 1); -#else - _customDimTable.resize(3, 2); - _customDimTable.set_row_spacings(4); - _customDimTable.set_col_spacings(4); - _customDimTable.attach(_dimensionWidth, 0,1, 0,1); - _customDimTable.attach(_dimensionUnits, 1,2, 0,1); - _customDimTable.attach(_dimensionHeight, 0,1, 1,2); - _customDimTable.attach(_fitPageMarginExpander, 0,2, 2,3); -#endif _dimTabOrderGList = NULL; _dimTabOrderGList = g_list_append(_dimTabOrderGList, _dimensionWidth.gobj()); @@ -398,7 +388,6 @@ PageSizer::PageSizer(Registry & _wr) //## Set up margin settings _marginTable.set_border_width(4); -#if WITH_GTKMM_3_0 _marginTable.set_row_spacing(4); _marginTable.set_column_spacing(4); @@ -421,16 +410,6 @@ PageSizer::PageSizer(Registry & _wr) _fitPageButtonAlign.set_hexpand(); _fitPageButtonAlign.set_vexpand(); _marginTable.attach(_fitPageButtonAlign, 0, 3, 2, 1); -#else - _marginTable.set_border_width(4); - _marginTable.set_row_spacings(4); - _marginTable.set_col_spacings(4); - _marginTable.attach(_marginTopAlign, 0,2, 0,1); - _marginTable.attach(_marginLeftAlign, 0,1, 1,2); - _marginTable.attach(_marginRightAlign, 1,2, 1,2); - _marginTable.attach(_marginBottomAlign, 0,2, 2,3); - _marginTable.attach(_fitPageButtonAlign, 0,2, 3,4); -#endif _marginTopAlign.set(0.5, 0.5, 0.0, 1.0); _marginTopAlign.add(_marginTop); @@ -453,7 +432,6 @@ PageSizer::PageSizer(Registry & _wr) _scaleTable.set_border_width(4); -#if WITH_GTKMM_3_0 _scaleTable.set_row_spacing(4); _scaleTable.set_column_spacing(4); @@ -465,16 +443,6 @@ PageSizer::PageSizer(Registry & _wr) _viewboxExpander.set_hexpand(); _viewboxExpander.set_vexpand(); _scaleTable.attach(_viewboxExpander, 0, 2, 2, 1); -#else - _scaleTable.resize(3, 2); - _scaleTable.set_row_spacings(4); - _scaleTable.set_col_spacings(4); - _scaleTable.attach(_scaleX, 0,1, 0,1); - _scaleTable.attach(_scaleY, 1,2, 0,1); - _scaleTable.attach(_scaleLabel, 2,3, 0,1); - _scaleTable.attach(_scaleWarning, 0,3, 1,2, Gtk::FILL); - _scaleTable.attach(_viewboxExpander, 0,3, 2,3); -#endif _scaleWarning.set_label(_("While SVG allows non-uniform scaling it is recommended to use only uniform scaling in Inkscape. To set a non-uniform scaling, set the 'viewBox' directly.")); _scaleWarning.set_line_wrap( true ); @@ -483,7 +451,6 @@ PageSizer::PageSizer(Registry & _wr) _viewboxExpander.set_label(_("_Viewbox...")); _viewboxExpander.add(_viewboxTable); -#if WITH_GTKMM_3_0 _viewboxTable.set_row_spacing(2); _viewboxTable.set_column_spacing(2); @@ -503,16 +470,6 @@ PageSizer::PageSizer(Registry & _wr) _viewboxH.set_vexpand(); _viewboxTable.attach(_viewboxH, 1, 1, 1, 1); -#else - _viewboxTable.set_border_width(4); - _viewboxTable.set_row_spacings(2); - _viewboxTable.set_col_spacings(2); - _viewboxTable.attach(_viewboxX, 0,1, 0,1); - _viewboxTable.attach(_viewboxY, 1,2, 0,1); - _viewboxTable.attach(_viewboxW, 0,1, 1,2); - _viewboxTable.attach(_viewboxH, 1,2, 1,2); -#endif - _wr.setUpdating (true); updateScaleUI(); _wr.setUpdating (false); diff --git a/src/ui/widget/page-sizer.h b/src/ui/widget/page-sizer.h index 0eea28e61..f1966f848 100644 --- a/src/ui/widget/page-sizer.h +++ b/src/ui/widget/page-sizer.h @@ -23,15 +23,9 @@ #include #include #include +#include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - #include namespace Inkscape { @@ -222,12 +216,7 @@ protected: //### Custom size frame Gtk::Frame _customFrame; - -#if WITH_GTKMM_3_0 Gtk::Grid _customDimTable; -#else - Gtk::Table _customDimTable; -#endif RegisteredUnitMenu _dimensionUnits; RegisteredScalarUnit _dimensionWidth; @@ -237,12 +226,7 @@ protected: //### Fit Page options Gtk::Expander _fitPageMarginExpander; -#if WITH_GTKMM_3_0 Gtk::Grid _marginTable; -#else - Gtk::Table _marginTable; -#endif - Gtk::Alignment _marginTopAlign; Gtk::Alignment _marginLeftAlign; Gtk::Alignment _marginRightAlign; @@ -257,11 +241,7 @@ protected: // Document scale Gtk::Frame _scaleFrame; -#if WITH_GTKMM_3_0 Gtk::Grid _scaleTable; -#else - Gtk::Table _scaleTable; -#endif Gtk::Label _scaleLabel; Gtk::Label _scaleWarning; @@ -271,11 +251,7 @@ protected: // Viewbox Gtk::Expander _viewboxExpander; -#if WITH_GTKMM_3_0 Gtk::Grid _viewboxTable; -#else - Gtk::Table _viewboxTable; -#endif RegisteredScalar _viewboxX; RegisteredScalar _viewboxY; diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index ab13577d7..8f695013d 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -74,9 +74,7 @@ Panel::Panel(Glib::ustring const &label, gchar const *prefs_path, _fillable(0) { set_name( "InkscapePanel" ); -#if WITH_GTKMM_3_0 set_orientation( Gtk::ORIENTATION_VERTICAL ); -#endif _init(); } @@ -598,13 +596,9 @@ void Panel::_addResponseButton(Gtk::Button *button, int response_id, bool pack_s { // Create a button box for the response buttons if it's the first button to be added if (!_action_area) { -#if WITH_GTKMM_3_0 _action_area = new Gtk::ButtonBox(); _action_area->set_layout(Gtk::BUTTONBOX_END); _action_area->set_spacing(6); -#else - _action_area = new Gtk::HButtonBox(Gtk::BUTTONBOX_END, 6); -#endif _action_area->set_border_width(4); pack_end(*_action_area, Gtk::PACK_SHRINK, 0); } diff --git a/src/ui/widget/panel.h b/src/ui/widget/panel.h index 7b2836fe8..370779586 100644 --- a/src/ui/widget/panel.h +++ b/src/ui/widget/panel.h @@ -31,13 +31,7 @@ class SPDocument; namespace Gtk { class CheckMenuItem; - -#if WITH_GTKMM_3_0 class ButtonBox; -#else - class HButtonBox; -#endif - class MenuItem; } @@ -64,12 +58,7 @@ namespace Widget { * @see UI::Dialog::DesktopTracker to handle desktop change, selection change and selected object modifications. * @see UI::Dialog::DialogManager manages the dialogs within inkscape. */ -#if WITH_GTKMM_3_0 class Panel : public Gtk::Box { -#else -class Panel : public Gtk::VBox { -#endif - public: static void prep(); @@ -172,12 +161,7 @@ private: Gtk::EventBox _menu_popper; Gtk::Button _close_button; Gtk::Menu *_menu; - -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *_action_area; //< stores response buttons -#else - Gtk::HButtonBox *_action_area; //< stores response buttons -#endif + Gtk::ButtonBox *_action_area; //< stores response buttons std::vector _non_horizontal; std::vector _non_vertical; diff --git a/src/ui/widget/point.cpp b/src/ui/widget/point.cpp index 6aa6196bb..66f5e41a3 100644 --- a/src/ui/widget/point.cpp +++ b/src/ui/widget/point.cpp @@ -53,11 +53,7 @@ Point::Point(Glib::ustring const &label, Glib::ustring const &tooltip, } Point::Point(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits, Glib::ustring const &suffix, Glib::ustring const &icon, diff --git a/src/ui/widget/point.h b/src/ui/widget/point.h index 17078df8f..71bfd8473 100644 --- a/src/ui/widget/point.h +++ b/src/ui/widget/point.h @@ -82,11 +82,7 @@ public: */ Point( Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits = 0, Glib::ustring const &suffix = "", Glib::ustring const &icon = "", diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index d56506d62..2e6e3f0db 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -55,14 +55,9 @@ DialogPage::DialogPage() { set_border_width(12); -#if WITH_GTKMM_3_0 set_orientation(Gtk::ORIENTATION_VERTICAL); set_column_spacing(12); set_row_spacing(6); -#else - set_col_spacings(12); - set_row_spacings(6); -#endif } /** @@ -101,12 +96,7 @@ void DialogPage::add_line(bool indent, // be indented if desired Gtk::Alignment* w_alignment = Gtk::manage(new Gtk::Alignment()); w_alignment->add(*hb); - -#if WITH_GTKMM_3_0 w_alignment->set_valign(Gtk::ALIGN_CENTER); -#else - guint row = property_n_rows(); -#endif // Add a label in the first column if provided if (label != "") @@ -122,17 +112,12 @@ void DialogPage::add_line(bool indent, if (indent) label_alignment->set_padding(0, 0, 12, 0); -#if WITH_GTKMM_3_0 label_alignment->set_valign(Gtk::ALIGN_CENTER); add(*label_alignment); attach_next_to(*w_alignment, *label_alignment, Gtk::POS_RIGHT, 1, 1); -#else - attach(*label_alignment, 0, 1, row, row + 1, Gtk::FILL, Gtk::AttachOptions(), 0, 0); -#endif } // Now add the widget to the bottom of the dialog -#if WITH_GTKMM_3_0 if (label == "") { if (indent) @@ -145,17 +130,6 @@ void DialogPage::add_line(bool indent, g_value_set_int(&width, 2); gtk_container_child_set_property(GTK_CONTAINER(gobj()), GTK_WIDGET(w_alignment->gobj()), "width", &width); } -#else - // The widget should span two columns if there is no label - int w_col_span = 1; - if (label == "") - w_col_span = 2; - - attach(*w_alignment, 2 - w_col_span, 2, row, row + 1, - Gtk::FILL | Gtk::EXPAND, - Gtk::AttachOptions(), - 0, 0); -#endif // Add a label on the right of the widget if desired if (suffix != "") @@ -174,18 +148,8 @@ void DialogPage::add_group_header(Glib::ustring name) Glib::ustring(""/*"*/) , Gtk::ALIGN_START , Gtk::ALIGN_CENTER, true)); label_widget->set_use_markup(true); - -#if WITH_GTKMM_3_0 label_widget->set_valign(Gtk::ALIGN_CENTER); add(*label_widget); -// if (row != 1) - // set_row_spacing(row - 1, 18); -#else - int row = property_n_rows(); - attach(*label_widget , 0, 4, row, row + 1, Gtk::FILL, Gtk::AttachOptions(), 0, 0); - if (row != 1) - set_row_spacing(row - 1, 18); -#endif } } @@ -427,24 +391,6 @@ ZoomCorrRuler::draw_marks(Cairo::RefPtr cr, double dist, int maj } } -#if !WITH_GTKMM_3_0 -bool -ZoomCorrRuler::on_expose_event(GdkEventExpose *event) { - bool result = false; - - if(get_is_drawable()) - { - Cairo::RefPtr cr = get_window()->create_cairo_context(); - cr->rectangle(event->area.x, event->area.y, - event->area.width, event->area.height); - cr->clip(); - result = on_draw(cr); - } - - return result; -} -#endif - bool ZoomCorrRuler::on_draw(const Cairo::RefPtr& cr) { Glib::RefPtr window = get_window(); @@ -548,11 +494,7 @@ ZoomCorrRulerSlider::init(int ruler_width, int ruler_height, double lower, doubl _ruler.set_size(ruler_width, ruler_height); -#if WITH_GTKMM_3_0 _slider = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); -#else - _slider = Gtk::manage(new Gtk::HScale()); -#endif _slider->set_size_request(_ruler.width(), -1); _slider->set_range (lower, upper); @@ -579,21 +521,13 @@ ZoomCorrRulerSlider::init(int ruler_width, int ruler_height, double lower, doubl alignment1->add(_sb); alignment2->add(_unit); -#if WITH_GTKMM_3_0 - Gtk::Grid *table = Gtk::manage(new Gtk::Grid()); + auto table = Gtk::manage(new Gtk::Grid()); table->attach(*_slider, 0, 0, 1, 1); alignment1->set_halign(Gtk::ALIGN_CENTER); table->attach(*alignment1, 1, 0, 1, 1); table->attach(_ruler, 0, 1, 1, 1); alignment2->set_halign(Gtk::ALIGN_CENTER); table->attach(*alignment2, 1, 1, 1, 1); -#else - Gtk::Table *table = Gtk::manage(new Gtk::Table()); - table->attach(*_slider, 0, 1, 0, 1); - table->attach(*alignment1, 1, 2, 0, 1, static_cast(0)); - table->attach(_ruler, 0, 1, 1, 2); - table->attach(*alignment2, 1, 2, 1, 2, static_cast(0)); -#endif pack_start(*table, Gtk::PACK_SHRINK); } @@ -640,11 +574,7 @@ PrefSlider::init(Glib::ustring const &prefs_path, freeze = false; -#if WITH_GTKMM_3_0 _slider = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); -#else - _slider = Gtk::manage(new Gtk::HScale()); -#endif _slider->set_range (lower, upper); _slider->set_increments (step_increment, page_increment); @@ -661,17 +591,11 @@ PrefSlider::init(Glib::ustring const &prefs_path, Gtk::Alignment *alignment1 = Gtk::manage(new Gtk::Alignment(0.5,1,0,0)); alignment1->add(_sb); -#if WITH_GTKMM_3_0 - Gtk::Grid *table = Gtk::manage(new Gtk::Grid()); + auto table = Gtk::manage(new Gtk::Grid()); _slider->set_hexpand(); table->attach(*_slider, 0, 0, 1, 1); alignment1->set_halign(Gtk::ALIGN_CENTER); table->attach(*alignment1, 1, 0, 1, 1); -#else - Gtk::Table *table = Gtk::manage(new Gtk::Table()); - table->attach(*_slider, 0, 1, 0, 1); - table->attach(*alignment1, 1, 2, 0, 1, static_cast(0)); -#endif this->pack_start(*table, Gtk::PACK_EXPAND_WIDGET); } diff --git a/src/ui/widget/preferences-widget.h b/src/ui/widget/preferences-widget.h index 1d2d77699..142793509 100644 --- a/src/ui/widget/preferences-widget.h +++ b/src/ui/widget/preferences-widget.h @@ -30,12 +30,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include "ui/widget/color-picker.h" #include "ui/widget/unit-menu.h" @@ -43,11 +38,7 @@ #include "ui/widget/scalar-unit.h" namespace Gtk { -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } namespace Inkscape { @@ -126,10 +117,6 @@ public: static const double textpadding; private: -#if !WITH_GTKMM_3_0 - bool on_expose_event(GdkEventExpose *event); -#endif - bool on_draw(const Cairo::RefPtr& cr); void draw_marks(Cairo::RefPtr cr, double dist, int major_interval); @@ -155,11 +142,7 @@ private: Inkscape::UI::Widget::SpinButton _sb; UnitMenu _unit; -#if WITH_GTKMM_3_0 Gtk::Scale* _slider; -#else - Gtk::HScale* _slider; -#endif ZoomCorrRuler _ruler; bool freeze; // used to block recursive updates of slider and spinbutton }; @@ -178,11 +161,7 @@ private: Glib::ustring _prefs_path; Inkscape::UI::Widget::SpinButton _sb; -#if WITH_GTKMM_3_0 Gtk::Scale* _slider; -#else - Gtk::HScale* _slider; -#endif bool freeze; // used to block recursive updates of slider and spinbutton }; @@ -279,11 +258,7 @@ protected: void on_changed(); }; -#if WITH_GTKMM_3_0 class DialogPage : public Gtk::Grid -#else -class DialogPage : public Gtk::Table -#endif { public: DialogPage(); diff --git a/src/ui/widget/random.cpp b/src/ui/widget/random.cpp index 0a646b6fb..8551e2add 100644 --- a/src/ui/widget/random.cpp +++ b/src/ui/widget/random.cpp @@ -47,11 +47,7 @@ Random::Random(Glib::ustring const &label, Glib::ustring const &tooltip, } Random::Random(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits, Glib::ustring const &suffix, Glib::ustring const &icon, diff --git a/src/ui/widget/random.h b/src/ui/widget/random.h index dc2b457c2..d86ab6246 100644 --- a/src/ui/widget/random.h +++ b/src/ui/widget/random.h @@ -75,11 +75,7 @@ public: */ Random(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits = 0, Glib::ustring const &suffix = "", Glib::ustring const &icon = "", diff --git a/src/ui/widget/scalar.cpp b/src/ui/widget/scalar.cpp index fca8a7974..434c2c0bb 100644 --- a/src/ui/widget/scalar.cpp +++ b/src/ui/widget/scalar.cpp @@ -43,11 +43,7 @@ Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip, } Scalar::Scalar(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits, Glib::ustring const &suffix, Glib::ustring const &icon, @@ -141,11 +137,7 @@ void Scalar::update() void Scalar::addSlider() { -#if WITH_GTKMM_3_0 - Gtk::Scale *scale = new Gtk::Scale(static_cast(_widget)->get_adjustment()); -#else - Gtk::HScale *scale = new Gtk::HScale( * static_cast(_widget)->get_adjustment() ); -#endif + auto scale = new Gtk::Scale(static_cast(_widget)->get_adjustment()); scale->set_draw_value(false); add (*manage (scale)); } diff --git a/src/ui/widget/scalar.h b/src/ui/widget/scalar.h index 86d7aee28..847790b96 100644 --- a/src/ui/widget/scalar.h +++ b/src/ui/widget/scalar.h @@ -73,11 +73,7 @@ public: */ Scalar(Glib::ustring const &label, Glib::ustring const &tooltip, -#if WITH_GTKMM_3_0 Glib::RefPtr &adjust, -#else - Gtk::Adjustment &adjust, -#endif unsigned digits = 0, Glib::ustring const &suffix = "", Glib::ustring const &icon = "", diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index f7fd63f51..7679fadb4 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -123,11 +123,7 @@ SelectedStyle::SelectedStyle(bool /*layout*/) current_stroke_width(0), _desktop (NULL), -#if WITH_GTKMM_3_0 _table(), -#else - _table(2, 6), -#endif _fill_label (_("Fill:")), _stroke_label (_("Stroke:")), _opacity_label (_("O:")), @@ -139,11 +135,7 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _stroke_flag_place (), _opacity_place (), -#if WITH_GTKMM_3_0 _opacity_adjustment(Gtk::Adjustment::create(100, 0.0, 100, 1.0, 10.0)), -#else - _opacity_adjustment (100, 0.0, 100, 1.0, 10.0), -#endif _opacity_sb (0.02, 0), _stroke (), @@ -166,13 +158,8 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _opacity_label.set_alignment(0.0, 0.5); _opacity_label.set_padding(0, 0); -#if WITH_GTKMM_3_0 _table.set_column_spacing(2); _table.set_row_spacing(0); -#else - _table.set_col_spacings (2); - _table.set_row_spacings (0); -#endif for (int i = SS_FILL; i <= SS_STROKE; i++) { @@ -379,7 +366,6 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _opacity_sb.set_size_request (SELECTED_STYLE_SB_WIDTH, -1); _opacity_sb.set_sensitive (false); -#if WITH_GTKMM_3_0 _table.attach(_fill_label, 0, 0, 1, 1); _table.attach(_stroke_label, 0, 1, 1, 1); @@ -388,26 +374,11 @@ SelectedStyle::SelectedStyle(bool /*layout*/) _table.attach(_fill_place, 2, 0, 1, 1); _table.attach(_stroke, 2, 1, 1, 1); -#else - _table.attach(_fill_label, 0,1, 0,1, Gtk::FILL, Gtk::SHRINK); - _table.attach(_stroke_label, 0,1, 1,2, Gtk::FILL, Gtk::SHRINK); - - _table.attach(_fill_flag_place, 1,2, 0,1, Gtk::SHRINK, Gtk::SHRINK); - _table.attach(_stroke_flag_place, 1,2, 1,2, Gtk::SHRINK, Gtk::SHRINK); - - _table.attach(_fill_place, 2,3, 0,1); - _table.attach(_stroke, 2,3, 1,2); -#endif _opacity_place.add(_opacity_label); -#if WITH_GTKMM_3_0 _table.attach(_opacity_place, 4, 0, 1, 2); _table.attach(_opacity_sb, 5, 0, 1, 2); -#else - _table.attach(_opacity_place, 4,5, 0,2, Gtk::SHRINK, Gtk::SHRINK); - _table.attach(_opacity_sb, 5,6, 0,2, Gtk::SHRINK, Gtk::SHRINK); -#endif pack_start(_table, true, true, 2); @@ -1120,11 +1091,7 @@ SelectedStyle::update() if (_opacity_blocked) break; _opacity_blocked = true; _opacity_sb.set_sensitive(true); -#if WITH_GTKMM_3_0 _opacity_adjustment->set_value(SP_SCALE24_TO_FLOAT(query.opacity.value) * 100); -#else - _opacity_adjustment.set_value(SP_SCALE24_TO_FLOAT(query.opacity.value) * 100); -#endif _opacity_blocked = false; break; } @@ -1224,11 +1191,7 @@ void SelectedStyle::on_opacity_changed () _opacity_blocked = true; SPCSSAttr *css = sp_repr_css_attr_new (); Inkscape::CSSOStringStream os; -#if WITH_GTKMM_3_0 os << CLAMP ((_opacity_adjustment->get_value() / 100), 0.0, 1.0); -#else - os << CLAMP ((_opacity_adjustment.get_value() / 100), 0.0, 1.0); -#endif sp_repr_css_set_property (css, "opacity", os.str().c_str()); // FIXME: workaround for GTK breakage: display interruptibility sometimes results in GTK // sending multiple value-changed events. As if when Inkscape interrupts redraw for main loop diff --git a/src/ui/widget/selected-style.h b/src/ui/widget/selected-style.h index 804a6fef6..efac29f73 100644 --- a/src/ui/widget/selected-style.h +++ b/src/ui/widget/selected-style.h @@ -16,12 +16,7 @@ #endif #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -140,11 +135,7 @@ public: protected: SPDesktop *_desktop; -#if WITH_GTKMM_3_0 Gtk::Grid _table; -#else - Gtk::Table _table; -#endif Gtk::Label _fill_label; Gtk::Label _stroke_label; @@ -157,11 +148,7 @@ protected: Gtk::EventBox _stroke_flag_place; Gtk::EventBox _opacity_place; -#if WITH_GTKMM_3_0 Glib::RefPtr _opacity_adjustment; -#else - Gtk::Adjustment _opacity_adjustment; -#endif Inkscape::UI::Widget::SpinButton _opacity_sb; Gtk::Label _na[2]; diff --git a/src/ui/widget/spin-scale.cpp b/src/ui/widget/spin-scale.cpp index bb08d67df..f2a163c84 100644 --- a/src/ui/widget/spin-scale.cpp +++ b/src/ui/widget/spin-scale.cpp @@ -22,13 +22,8 @@ SpinScale::SpinScale(const char* label, double value, double lower, double upper double /*climb_rate*/, int digits, const SPAttributeEnum a, const char* tip_text) : AttrWidget(a, value) { -#if WITH_GTKMM_3_0 _adjustment = Gtk::Adjustment::create(value, lower, upper, step_inc); _spinscale = gimp_spin_scale_new (_adjustment->gobj(), label, digits); -#else - _adjustment = new Gtk::Adjustment(value, lower, upper, step_inc); - _spinscale = gimp_spin_scale_new (_adjustment->gobj(), label, digits); -#endif signal_value_changed().connect(signal_attr_changed().make_slot()); @@ -42,12 +37,10 @@ SpinScale::SpinScale(const char* label, double value, double lower, double upper } SpinScale::SpinScale(const char* label, -#if WITH_GTKMM_3_0 - Glib::RefPtr adj, -#else - Gtk::Adjustment *adj, -#endif - int digits, const SPAttributeEnum a, const char* tip_text) + Glib::RefPtr adj, + int digits, + const SPAttributeEnum a, + const char* tip_text) : AttrWidget(a, 0.0), _adjustment(adj) @@ -111,19 +104,12 @@ void SpinScale::set_appearance(const gchar* appearance) gimp_spin_scale_set_appearance(_spinscale, appearance); } -#if WITH_GTKMM_3_0 -const Glib::RefPtr SpinScale::get_adjustment() const -#else -const Gtk::Adjustment *SpinScale::get_adjustment() const -#endif +const decltype(SpinScale::_adjustment) SpinScale::get_adjustment() const { return _adjustment; } -#if WITH_GTKMM_3_0 -Glib::RefPtr SpinScale::get_adjustment() -#else -Gtk::Adjustment *SpinScale::get_adjustment() -#endif + +decltype(SpinScale::_adjustment) SpinScale::get_adjustment() { return _adjustment; } diff --git a/src/ui/widget/spin-scale.h b/src/ui/widget/spin-scale.h index 50e4fc953..d7030bed3 100644 --- a/src/ui/widget/spin-scale.h +++ b/src/ui/widget/spin-scale.h @@ -36,12 +36,8 @@ public: int digits, const SPAttributeEnum a = SP_ATTR_INVALID, const char* tip_text = NULL); SpinScale(const char* label, -#if WITH_GTKMM_3_0 - Glib::RefPtr adj, -#else - Gtk::Adjustment *adj, -#endif - int digits, const SPAttributeEnum a = SP_ATTR_INVALID, const char* tip_text = NULL); + Glib::RefPtr adj, + int digits, const SPAttributeEnum a = SP_ATTR_INVALID, const char* tip_text = NULL); virtual Glib::ustring get_as_attribute() const; virtual void set_from_attribute(SPObject*); @@ -52,23 +48,14 @@ public: void set_value(const double); void set_focuswidget(GtkWidget *widget); void set_appearance(const gchar* appearance); - -#if WITH_GTKMM_3_0 - const Glib::RefPtr get_adjustment() const; - Glib::RefPtr get_adjustment(); -#else - const Gtk::Adjustment *get_adjustment() const; - Gtk::Adjustment *get_adjustment(); -#endif private: -#if WITH_GTKMM_3_0 Glib::RefPtr _adjustment; -#else - Gtk::Adjustment *_adjustment; -#endif - GtkWidget *_spinscale; + +public: + const decltype(_adjustment) get_adjustment() const; + decltype(_adjustment) get_adjustment(); }; diff --git a/src/ui/widget/spin-slider.cpp b/src/ui/widget/spin-slider.cpp index 9b361ae78..f17b9b26c 100644 --- a/src/ui/widget/spin-slider.cpp +++ b/src/ui/widget/spin-slider.cpp @@ -20,11 +20,7 @@ namespace Widget { SpinSlider::SpinSlider(double value, double lower, double upper, double step_inc, double climb_rate, int digits, const SPAttributeEnum a, const char* tip_text) : AttrWidget(a, value), -#if WITH_GTKMM_3_0 _adjustment(Gtk::Adjustment::create(value, lower, upper, step_inc)), -#else - _adjustment(value, lower, upper, step_inc), -#endif _scale(_adjustment), _spin(_adjustment, climb_rate, digits) { signal_value_changed().connect(signal_attr_changed().make_slot()); @@ -43,11 +39,7 @@ SpinSlider::SpinSlider(double value, double lower, double upper, double step_inc Glib::ustring SpinSlider::get_as_attribute() const { -#if WITH_GTKMM_3_0 - const double val = _adjustment->get_value(); -#else - const double val = _adjustment.get_value(); -#endif + const auto val = _adjustment->get_value(); if(_spin.get_digits() == 0) return Glib::Ascii::dtostr((int)val); @@ -58,77 +50,43 @@ Glib::ustring SpinSlider::get_as_attribute() const void SpinSlider::set_from_attribute(SPObject* o) { const gchar* val = attribute_value(o); -#if WITH_GTKMM_3_0 if(val) _adjustment->set_value(Glib::Ascii::strtod(val)); else _adjustment->set_value(get_default()->as_double()); -#else - if(val) - _adjustment.set_value(Glib::Ascii::strtod(val)); - else - _adjustment.set_value(get_default()->as_double()); -#endif } Glib::SignalProxy0 SpinSlider::signal_value_changed() { -#if WITH_GTKMM_3_0 return _adjustment->signal_value_changed(); -#else - return _adjustment.signal_value_changed(); -#endif } double SpinSlider::get_value() const { -#if WITH_GTKMM_3_0 return _adjustment->get_value(); -#else - return _adjustment.get_value(); -#endif } void SpinSlider::set_value(const double val) { -#if WITH_GTKMM_3_0 _adjustment->set_value(val); -#else - _adjustment.set_value(val); -#endif } -#if WITH_GTKMM_3_0 -const Glib::RefPtr SpinSlider::get_adjustment() const -#else -const Gtk::Adjustment& SpinSlider::get_adjustment() const -#endif +const decltype(SpinSlider::_adjustment) SpinSlider::get_adjustment() const { return _adjustment; } -#if WITH_GTKMM_3_0 -Glib::RefPtr SpinSlider::get_adjustment() -#else -Gtk::Adjustment& SpinSlider::get_adjustment() -#endif + +decltype(SpinSlider::_adjustment) SpinSlider::get_adjustment() { return _adjustment; } -#if WITH_GTKMM_3_0 const Gtk::Scale& SpinSlider::get_scale() const -#else -const Gtk::HScale& SpinSlider::get_scale() const -#endif { return _scale; } -#if WITH_GTKMM_3_0 Gtk::Scale& SpinSlider::get_scale() -#else -Gtk::HScale& SpinSlider::get_scale() -#endif { return _scale; } @@ -157,15 +115,9 @@ DualSpinSlider::DualSpinSlider(double value, double lower, double upper, double { signal_value_changed().connect(signal_attr_changed().make_slot()); -#if WITH_GTKMM_3_0 _s1.get_adjustment()->signal_value_changed().connect(_signal_value_changed.make_slot()); _s2.get_adjustment()->signal_value_changed().connect(_signal_value_changed.make_slot()); _s1.get_adjustment()->signal_value_changed().connect(sigc::mem_fun(*this, &DualSpinSlider::update_linked)); -#else - _s1.get_adjustment().signal_value_changed().connect(_signal_value_changed.make_slot()); - _s2.get_adjustment().signal_value_changed().connect(_signal_value_changed.make_slot()); - _s1.get_adjustment().signal_value_changed().connect(sigc::mem_fun(*this, &DualSpinSlider::update_linked)); -#endif _link.signal_toggled().connect(sigc::mem_fun(*this, &DualSpinSlider::link_toggled)); Gtk::VBox* vb = Gtk::manage(new Gtk::VBox); @@ -202,13 +154,8 @@ void DualSpinSlider::set_from_attribute(SPObject* o) _link.set_active(toks[1] == 0); -#if WITH_GTKMM_3_0 _s1.get_adjustment()->set_value(v1); _s2.get_adjustment()->set_value(v2); -#else - _s1.get_adjustment().set_value(v1); - _s2.get_adjustment().set_value(v2); -#endif g_strfreev(toks); } diff --git a/src/ui/widget/spin-slider.h b/src/ui/widget/spin-slider.h index a5999f14f..5a29c1b67 100644 --- a/src/ui/widget/spin-slider.h +++ b/src/ui/widget/spin-slider.h @@ -42,17 +42,8 @@ public: double get_value() const; void set_value(const double); -#if WITH_GTKMM_3_0 - const Glib::RefPtr get_adjustment() const; - Glib::RefPtr get_adjustment(); const Gtk::Scale& get_scale() const; Gtk::Scale& get_scale(); -#else - const Gtk::Adjustment& get_adjustment() const; - Gtk::Adjustment& get_adjustment(); - const Gtk::HScale& get_scale() const; - Gtk::HScale& get_scale(); -#endif const Inkscape::UI::Widget::SpinButton& get_spin_button() const; Inkscape::UI::Widget::SpinButton& get_spin_button(); @@ -60,14 +51,13 @@ public: // Change the SpinSlider into a SpinButton with AttrWidget support) void remove_scale(); private: -#if WITH_GTKMM_3_0 Glib::RefPtr _adjustment; Gtk::Scale _scale; -#else - Gtk::Adjustment _adjustment; - Gtk::HScale _scale; -#endif Inkscape::UI::Widget::SpinButton _spin; + +public: + const decltype(_adjustment) get_adjustment() const; + decltype(_adjustment) get_adjustment(); }; /** diff --git a/src/ui/widget/style-swatch.cpp b/src/ui/widget/style-swatch.cpp index 188be705d..21701c4c0 100644 --- a/src/ui/widget/style-swatch.cpp +++ b/src/ui/widget/style-swatch.cpp @@ -34,11 +34,7 @@ #include "verbs.h" #include -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include enum { SS_FILL, @@ -117,11 +113,7 @@ StyleSwatch::StyleSwatch(SPCSSAttr *css, gchar const *main_tip) _css(NULL), _tool_obs(NULL), _style_obs(NULL), -#if WITH_GTKMM_3_0 _table(Gtk::manage(new Gtk::Grid())), -#else - _table(Gtk::manage(new Gtk::Table(2, 6))), -#endif _sw_unit(NULL) { set_name("StyleSwatch"); @@ -139,13 +131,8 @@ StyleSwatch::StyleSwatch(SPCSSAttr *css, gchar const *main_tip) _opacity_value.set_alignment(0.0, 0.5); _opacity_value.set_padding(0, 0); -#if WITH_GTKMM_3_0 _table->set_column_spacing(2); _table->set_row_spacing(0); -#else - _table->set_col_spacings(2); - _table->set_row_spacings(0); -#endif _stroke.pack_start(_place[SS_STROKE]); _stroke_width_place.add(_stroke_width); @@ -153,19 +140,11 @@ StyleSwatch::StyleSwatch(SPCSSAttr *css, gchar const *main_tip) _opacity_place.add(_opacity_value); -#if WITH_GTKMM_3_0 _table->attach(_label[SS_FILL], 0, 0, 1, 1); _table->attach(_label[SS_STROKE], 0, 1, 1, 1); _table->attach(_place[SS_FILL], 1, 0, 1, 1); _table->attach(_stroke, 1, 1, 1, 1); _table->attach(_opacity_place, 2, 0, 1, 2); -#else - _table->attach(_label[SS_FILL], 0,1, 0,1, Gtk::FILL, Gtk::SHRINK); - _table->attach(_label[SS_STROKE], 0,1, 1,2, Gtk::FILL, Gtk::SHRINK); - _table->attach(_place[SS_FILL], 1,2, 0,1); - _table->attach(_stroke, 1,2, 1,2); - _table->attach(_opacity_place, 2,3, 0,2, Gtk::SHRINK, Gtk::SHRINK); -#endif _swatch.add(*_table); pack_start(_swatch, true, true, 0); diff --git a/src/ui/widget/style-swatch.h b/src/ui/widget/style-swatch.h index 0016e0256..81a907d16 100644 --- a/src/ui/widget/style-swatch.h +++ b/src/ui/widget/style-swatch.h @@ -29,11 +29,7 @@ class SPStyle; class SPCSSAttr; namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { @@ -75,11 +71,7 @@ private: Gtk::EventBox _swatch; -#if WITH_GTKMM_3_0 Gtk::Grid *_table; -#else - Gtk::Table *_table; -#endif Gtk::Label _label[2]; Gtk::EventBox _place[2]; diff --git a/src/ui/widget/tolerance-slider.cpp b/src/ui/widget/tolerance-slider.cpp index ced811c57..a87ed7c0f 100644 --- a/src/ui/widget/tolerance-slider.cpp +++ b/src/ui/widget/tolerance-slider.cpp @@ -76,12 +76,8 @@ void ToleranceSlider::init (const Glib::ustring& label1, const Glib::ustring& la // align the label with the checkbox text above by indenting 22 px. _hbox->pack_start(*theLabel1, Gtk::PACK_EXPAND_WIDGET, 22); -#if WITH_GTKMM_3_0 _hscale = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); _hscale->set_range(1.0, 51.0); -#else - _hscale = Gtk::manage (new Gtk::HScale (1.0, 51, 1.0)); -#endif theLabel1->set_mnemonic_widget (*_hscale); _hscale->set_draw_value (true); @@ -121,11 +117,7 @@ void ToleranceSlider::init (const Glib::ustring& label1, const Glib::ustring& la void ToleranceSlider::setValue (double val) { -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = _hscale->get_adjustment(); -#else - Gtk::Adjustment *adj = _hscale->get_adjustment(); -#endif + auto adj = _hscale->get_adjustment(); adj->set_lower (1.0); adj->set_upper (51.0); diff --git a/src/ui/widget/tolerance-slider.h b/src/ui/widget/tolerance-slider.h index 7ae8e4712..3d2548ebe 100644 --- a/src/ui/widget/tolerance-slider.h +++ b/src/ui/widget/tolerance-slider.h @@ -14,11 +14,7 @@ namespace Gtk { class RadioButton; -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } namespace Inkscape { @@ -60,13 +56,7 @@ protected: void on_toggled(); void update (double val); Gtk::HBox *_hbox; - -#if WITH_GTKMM_3_0 Gtk::Scale *_hscale; -#else - Gtk::HScale *_hscale; -#endif - Gtk::RadioButtonGroup _radio_button_group; Gtk::RadioButton *_button1; Gtk::RadioButton *_button2; diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 164a06910..ef1f31751 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -2211,7 +2211,6 @@ set_adjustment (GtkAdjustment *adj, double l, double u, double ps, double si, do gtk_adjustment_set_page_size(adj, ps); gtk_adjustment_set_step_increment(adj, si); gtk_adjustment_set_page_increment(adj, pi); - gtk_adjustment_changed (adj); } } -- cgit v1.2.3 From dcd91f59f597ab4af07cee5929ce0e2e1f9104d5 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 16:16:18 +0100 Subject: Drop remaining GTKMM 2 fallback support (bzr r15023.2.7) --- CMakeScripts/DefineDependsandFlags.cmake | 1 - configure.ac | 3 +- src/color-profile.cpp | 45 +----- src/desktop-events.cpp | 4 +- src/ui/clipboard.cpp | 11 +- src/ui/dialog/aboutbox.cpp | 14 +- src/ui/dialog/align-and-distribute.cpp | 38 +---- src/ui/dialog/align-and-distribute.h | 38 +---- src/ui/dialog/calligraphic-profile-rename.cpp | 25 +-- src/ui/dialog/calligraphic-profile-rename.h | 9 -- src/ui/dialog/clonetiler.cpp | 217 ++++---------------------- src/ui/dialog/clonetiler.h | 5 - src/ui/dialog/debug.cpp | 7 +- src/ui/dialog/document-metadata.cpp | 31 ---- src/ui/dialog/document-metadata.h | 12 +- src/ui/dialog/document-properties.cpp | 129 +-------------- src/ui/dialog/document-properties.h | 6 +- src/ui/dialog/export.cpp | 90 +---------- src/ui/dialog/export.h | 40 ----- src/ui/dialog/filedialogimpl-gtkmm.cpp | 86 ++-------- src/ui/dialog/filedialogimpl-win32.cpp | 4 - src/ui/dialog/fill-and-stroke.cpp | 19 --- src/ui/dialog/fill-and-stroke.h | 4 - src/ui/dialog/filter-effects-dialog.cpp | 164 ++----------------- src/ui/dialog/filter-effects-dialog.h | 12 -- src/ui/dialog/find.h | 6 - src/ui/dialog/floating-behavior.cpp | 8 - src/ui/dialog/glyphs.cpp | 79 +--------- src/ui/dialog/grid-arrange-tab.cpp | 20 +-- src/ui/dialog/grid-arrange-tab.h | 5 - src/ui/dialog/guides.cpp | 58 +------ src/ui/dialog/guides.h | 12 +- src/ui/dialog/icon-preview.h | 6 - src/ui/dialog/inkscape-preferences.cpp | 42 +---- src/ui/dialog/inkscape-preferences.h | 8 - src/ui/dialog/input.cpp | 131 +--------------- src/ui/dialog/layer-properties.cpp | 31 +--- src/ui/dialog/layer-properties.h | 10 -- src/ui/dialog/layers.cpp | 4 - src/ui/dialog/layers.h | 6 - src/ui/dialog/livepatheffect-add.cpp | 6 +- src/ui/dialog/livepatheffect-editor.cpp | 7 - src/ui/dialog/livepatheffect-editor.h | 4 - src/ui/dialog/new-from-template.cpp | 8 - src/ui/dialog/object-properties.cpp | 94 +---------- src/ui/dialog/object-properties.h | 4 - src/ui/dialog/objects.cpp | 21 --- src/ui/dialog/objects.h | 10 -- src/ui/dialog/ocaldialogs.cpp | 162 +------------------ src/ui/dialog/ocaldialogs.h | 41 +---- src/ui/dialog/polar-arrange-tab.cpp | 31 ---- src/ui/dialog/polar-arrange-tab.h | 11 +- src/ui/dialog/spellcheck.h | 15 -- src/ui/dialog/svg-fonts-dialog.cpp | 5 - src/ui/dialog/svg-fonts-dialog.h | 9 -- src/ui/dialog/swatches.cpp | 4 - src/ui/dialog/symbols.cpp | 49 +----- src/ui/dialog/tags.cpp | 4 - src/ui/dialog/tags.h | 6 - src/ui/dialog/text-edit.cpp | 25 +-- src/ui/dialog/text-edit.h | 11 -- src/ui/dialog/tile.h | 5 - src/ui/dialog/transformation.cpp | 102 ------------ src/ui/dialog/transformation.h | 4 - src/ui/dialog/undo-history.cpp | 33 ---- src/ui/dialog/undo-history.h | 18 --- src/ui/dialog/xml-tree.cpp | 18 --- src/ui/dialog/xml-tree.h | 11 -- src/ui/previewholder.cpp | 119 +++----------- src/ui/previewholder.h | 9 -- src/ui/tools/tool-base.cpp | 6 - src/widgets/dash-selector.cpp | 14 +- src/widgets/dash-selector.h | 5 - src/widgets/desktop-widget.cpp | 178 ++------------------- src/widgets/sp-attribute-widget.cpp | 27 +--- src/widgets/sp-attribute-widget.h | 9 -- src/widgets/stroke-style.cpp | 60 ------- src/widgets/stroke-style.h | 11 -- src/widgets/toolbox.cpp | 55 ++----- 79 files changed, 165 insertions(+), 2486 deletions(-) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 7117c1f7e..2c5acaff3 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -247,7 +247,6 @@ set(TRY_GTKSPELL 1) gdl-3.0>=3.4 ) list(APPEND INKSCAPE_CXX_FLAGS ${GTK3_CFLAGS_OTHER}) - set(WITH_GTKMM_3_0 1) set(WITH_EXT_GDL 1) # Check whether we can use new features in Gtkmm 3.10 diff --git a/configure.ac b/configure.ac index bd20b8e6d..d18c62a95 100644 --- a/configure.ac +++ b/configure.ac @@ -731,8 +731,7 @@ AC_CHECK_HEADER([boost/unordered_set.hpp], [AC_DEFINE(HAVE_BOOST_UNORDERED_SET, gdkmm-3.0 >= 3.8) -dnl Drop these hacks as soon as we've got rid of all GTK+ 2/3 conditional blocks -AC_DEFINE([WITH_GTKMM_3_0], [1], [Use GTKmm 3.0 or higher]) +dnl Drop this hack as soon as we've got rid of all GTK+ 2/3 conditional blocks AC_DEFINE([WITH_EXT_GDL], [1], [Use external GDL]) # Check whether we can use new features in Gtkmm 3.10 diff --git a/src/color-profile.cpp b/src/color-profile.cpp index aea9ccab0..031d3f6f5 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -4,11 +4,7 @@ #define noDEBUG_LCMS -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -1002,11 +998,7 @@ void loadProfiles() static bool gamutWarn = false; -#if WITH_GTKMM_3_0 static Gdk::RGBA lastGamutColor("#808080"); -#else -static Gdk::Color lastGamutColor("#808080"); -#endif static bool lastBPC = false; #if defined(cmsFLAGS_PRESERVEBLACK) @@ -1152,12 +1144,7 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayTransform() bool preserveBlack = prefs->getBool( "/options/softproof/preserveblack"); #endif //defined(cmsFLAGS_PRESERVEBLACK) Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); - -#if WITH_GTKMM_3_0 Gdk::RGBA gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#else - Gdk::Color gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#endif if ( (warn != gamutWarn) || (lastIntent != intent) @@ -1189,15 +1176,9 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayTransform() if ( gamutWarn ) { dwFlags |= cmsFLAGS_GAMUTCHECK; -#if WITH_GTKMM_3_0 - gushort gamutColor_r = gamutColor.get_red_u(); - gushort gamutColor_g = gamutColor.get_green_u(); - gushort gamutColor_b = gamutColor.get_blue_u(); -#else - gushort gamutColor_r = gamutColor.get_red(); - gushort gamutColor_g = gamutColor.get_green(); - gushort gamutColor_b = gamutColor.get_blue(); -#endif + auto gamutColor_r = gamutColor.get_red_u(); + auto gamutColor_g = gamutColor.get_green_u(); + auto gamutColor_b = gamutColor.get_blue_u(); #if HAVE_LIBLCMS1 cmsSetAlarmCodes(gamutColor_r >> 8, gamutColor_g >> 8, gamutColor_b >> 8); @@ -1338,12 +1319,7 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayPer( Glib::ustring const& id ) bool preserveBlack = prefs->getBool( "/options/softproof/preserveblack"); #endif //defined(cmsFLAGS_PRESERVEBLACK) Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); - -#if WITH_GTKMM_3_0 Gdk::RGBA gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#else - Gdk::Color gamutColor( colorStr.empty() ? "#808080" : colorStr ); -#endif if ( (warn != gamutWarn) || (lastIntent != intent) @@ -1373,16 +1349,9 @@ cmsHTRANSFORM Inkscape::CMSSystem::getDisplayPer( Glib::ustring const& id ) cmsUInt32Number dwFlags = cmsFLAGS_SOFTPROOFING; if ( gamutWarn ) { dwFlags |= cmsFLAGS_GAMUTCHECK; - -#if WITH_GTKMM_3_0 - gushort gamutColor_r = gamutColor.get_red_u(); - gushort gamutColor_g = gamutColor.get_green_u(); - gushort gamutColor_b = gamutColor.get_blue_u(); -#else - gushort gamutColor_r = gamutColor.get_red(); - gushort gamutColor_g = gamutColor.get_green(); - gushort gamutColor_b = gamutColor.get_blue(); -#endif + auto gamutColor_r = gamutColor.get_red_u(); + auto gamutColor_g = gamutColor.get_green_u(); + auto gamutColor_b = gamutColor.get_blue_u(); #if HAVE_LIBLCMS1 cmsSetAlarmCodes(gamutColor_r >> 8, gamutColor_g >> 8, gamutColor_b >> 8); diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index b9bd949ff..9ad06e2ec 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -21,9 +21,7 @@ #include "ui/dialog/guides.h" #include "desktop-events.h" -#if WITH_GTKMM_3_0 -# include -#endif +#include #include <2geom/line.h> #include <2geom/angle.h> diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index d581dbf7e..6b24c5a2d 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -1300,11 +1300,7 @@ Geom::Scale ClipboardManagerImpl::_getScale(SPDesktop *desktop, Geom::Point cons */ Glib::ustring ClipboardManagerImpl::_getBestTarget() { -#if WITH_GTKMM_3_0 - std::vector targets = _clipboard->wait_for_targets(); -#else - std::list targets = _clipboard->wait_for_targets(); -#endif + auto targets = _clipboard->wait_for_targets(); // clipboard target debugging snippet /* @@ -1363,12 +1359,7 @@ void ClipboardManagerImpl::_setClipboardTargets() { Inkscape::Extension::DB::OutputList outlist; Inkscape::Extension::db.get_output_list(outlist); - -#if WITH_GTKMM_3_0 std::vector target_list; -#else - std::list target_list; -#endif bool plaintextSet = false; for (Inkscape::Extension::DB::OutputList::const_iterator out = outlist.begin() ; out != outlist.end() ; ++out) { diff --git a/src/ui/dialog/aboutbox.cpp b/src/ui/dialog/aboutbox.cpp index 6276d3391..ffb46fd1b 100644 --- a/src/ui/dialog/aboutbox.cpp +++ b/src/ui/dialog/aboutbox.cpp @@ -98,11 +98,7 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { tabs->append_page(*manage( make_scrolled_text(license_text)), _("_License"), true); -#if WITH_GTKMM_3_0 get_content_area()->pack_end(*manage(tabs), true, true); -#else - get_vbox()->pack_end(*manage(tabs), true, true); -#endif tabs->show_all(); @@ -130,20 +126,12 @@ AboutBox::AboutBox() : Gtk::Dialog(_("About Inkscape")) { link->set_selectable(true); link->show(); -#if WITH_GTKMM_3_0 get_content_area()->pack_start(*manage(label), false, false); get_content_area()->pack_start(*manage(link), false, false); -#else - get_vbox()->pack_start(*manage(label), false, false); - get_vbox()->pack_start(*manage(link), false, false); -#endif Gtk::Requisition requisition; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(reinterpret_cast(gobj()), &requisition, NULL); -#else - gtk_widget_size_request (reinterpret_cast(gobj()), &requisition); -#endif + // allow window to shrink set_size_request(0, 0); set_default_size(requisition.width, requisition.height); diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 8f87932b8..971275e59 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -61,11 +61,7 @@ namespace Dialog { Action::Action(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column, -#if WITH_GTKMM_3_0 - Gtk::Grid &parent, -#else - Gtk::Table &parent, -#endif + Gtk::Grid &parent, AlignAndDistribute &dialog): _dialog(dialog), _id(id), @@ -81,11 +77,7 @@ Action::Action(const Glib::ustring &id, pButton->signal_clicked() .connect(sigc::mem_fun(*this, &Action::on_button_click)); pButton->set_tooltip_text(tiptext); -#if WITH_GTKMM_3_0 parent.attach(*pButton, column, row, 1, 1); -#else - parent.attach(*pButton, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL); -#endif } @@ -447,11 +439,7 @@ public: Action(id, tiptext, row, column + 4, dialog.removeOverlap_table(), dialog) { -#if WITH_GTKMM_3_0 dialog.removeOverlap_table().set_column_spacing(3); -#else - dialog.removeOverlap_table().set_col_spacings(3); -#endif removeOverlapXGap.set_digits(1); removeOverlapXGap.set_size_request(60, -1); @@ -473,17 +461,10 @@ public: removeOverlapYGapLabel.set_text_with_mnemonic(C_("Gap", "_V:")); removeOverlapYGapLabel.set_mnemonic_widget(removeOverlapYGap); -#if WITH_GTKMM_3_0 dialog.removeOverlap_table().attach(removeOverlapXGapLabel, column, row, 1, 1); dialog.removeOverlap_table().attach(removeOverlapXGap, column+1, row, 1, 1); dialog.removeOverlap_table().attach(removeOverlapYGapLabel, column+2, row, 1, 1); dialog.removeOverlap_table().attach(removeOverlapYGap, column+3, row, 1, 1); -#else - dialog.removeOverlap_table().attach(removeOverlapXGapLabel, column, column+1, row, row+1, Gtk::FILL, Gtk::FILL); - dialog.removeOverlap_table().attach(removeOverlapXGap, column+1, column+2, row, row+1, Gtk::FILL, Gtk::FILL); - dialog.removeOverlap_table().attach(removeOverlapYGapLabel, column+2, column+3, row, row+1, Gtk::FILL, Gtk::FILL); - dialog.removeOverlap_table().attach(removeOverlapYGap, column+3, column+4, row, row+1, Gtk::FILL, Gtk::FILL); -#endif } private : @@ -762,11 +743,7 @@ public : guint row, guint column, AlignAndDistribute &dialog, -#if WITH_GTKMM_3_0 Gtk::Grid &table, -#else - Gtk::Table &table, -#endif Geom::Dim2 orientation, bool distribute): Action(id, tiptext, row, column, table, dialog), @@ -939,19 +916,11 @@ AlignAndDistribute::AlignAndDistribute() _rearrangeFrame(_("Rearrange")), _removeOverlapFrame(_("Remove overlaps")), _nodesFrame(_("Nodes")), -#if WITH_GTKMM_3_0 _alignTable(), _distributeTable(), _rearrangeTable(), _removeOverlapTable(), _nodesTable(), -#else - _alignTable(2, 6, true), - _distributeTable(2, 6, true), - _rearrangeTable(1, 5, false), - _removeOverlapTable(1, 5, false), - _nodesTable(1, 4, true), -#endif _anchorLabel(_("Relative to: ")), _anchorLabelNode(_("Relative to: ")), _selgrpLabel(_("_Treat selection as group: "), 1) @@ -1316,13 +1285,8 @@ void AlignAndDistribute::addRandomizeButton(const Glib::ustring &id, const Glib: ); } -#if WITH_GTKMM_3_0 void AlignAndDistribute::addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Grid &table, Geom::Dim2 orientation, bool distribute) -#else -void AlignAndDistribute::addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, - guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute) -#endif { _actionList.push_back( new ActionBaseline( diff --git a/src/ui/dialog/align-and-distribute.h b/src/ui/dialog/align-and-distribute.h index f8cc61af2..acb3d02ed 100644 --- a/src/ui/dialog/align-and-distribute.h +++ b/src/ui/dialog/align-and-distribute.h @@ -22,15 +22,11 @@ #include #include #include -#include "2geom/rect.h" -#include "ui/dialog/desktop-tracker.h" - -#if WITH_GTKMM_3_0 #include #include -#else -#include -#endif + +#include "2geom/rect.h" +#include "ui/dialog/desktop-tracker.h" class SPItem; @@ -51,19 +47,11 @@ public: static AlignAndDistribute &getInstance() { return *new AlignAndDistribute(); } -#if WITH_GTKMM_3_0 Gtk::Grid &align_table(){return _alignTable;} Gtk::Grid &distribute_table(){return _distributeTable;} Gtk::Grid &rearrange_table(){return _rearrangeTable;} Gtk::Grid &removeOverlap_table(){return _removeOverlapTable;} Gtk::Grid &nodes_table(){return _nodesTable;} -#else - Gtk::Table &align_table(){return _alignTable;} - Gtk::Table &distribute_table(){return _distributeTable;} - Gtk::Table &rearrange_table(){return _rearrangeTable;} - Gtk::Table &removeOverlap_table(){return _removeOverlapTable;} - Gtk::Table &nodes_table(){return _nodesTable;} -#endif void setMode(bool nodeEdit); @@ -100,22 +88,13 @@ protected: guint row, guint col); void addRandomizeButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col); -#if WITH_GTKMM_3_0 void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, guint row, guint col, Gtk::Grid &table, Geom::Dim2 orientation, bool distribute); -#else - void addBaselineButton(const Glib::ustring &id, const Glib::ustring tiptext, - guint row, guint col, Gtk::Table &table, Geom::Dim2 orientation, bool distribute); -#endif void setTargetDesktop(SPDesktop *desktop); std::list _actionList; UI::Widget::Frame _alignFrame, _distributeFrame, _rearrangeFrame, _removeOverlapFrame, _nodesFrame; -#if WITH_GTKMM_3_0 Gtk::Grid _alignTable, _distributeTable, _rearrangeTable, _removeOverlapTable, _nodesTable; -#else - Gtk::Table _alignTable, _distributeTable, _rearrangeTable, _removeOverlapTable, _nodesTable; -#endif Gtk::HBox _anchorBox; Gtk::HBox _selgrpBox; Gtk::VBox _alignBox; @@ -163,11 +142,7 @@ public : Action(const Glib::ustring &id, const Glib::ustring &tiptext, guint row, guint column, - #if WITH_GTKMM_3_0 - Gtk::Grid &parent, - #else - Gtk::Table &parent, - #endif + Gtk::Grid &parent, AlignAndDistribute &dialog); virtual ~Action(){} @@ -178,12 +153,7 @@ private : virtual void on_button_click(){} Glib::ustring _id; - -#if WITH_GTKMM_3_0 Gtk::Grid &_parent; -#else - Gtk::Table &_parent; -#endif }; diff --git a/src/ui/dialog/calligraphic-profile-rename.cpp b/src/ui/dialog/calligraphic-profile-rename.cpp index 9ae22db2d..50dae0fd8 100644 --- a/src/ui/dialog/calligraphic-profile-rename.cpp +++ b/src/ui/dialog/calligraphic-profile-rename.cpp @@ -16,12 +16,7 @@ #include "calligraphic-profile-rename.h" #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include "desktop.h" @@ -30,40 +25,24 @@ namespace UI { namespace Dialog { CalligraphicProfileRename::CalligraphicProfileRename() : -#if WITH_GTKMM_3_0 _layout_table(Gtk::manage(new Gtk::Grid())), -#else - _layout_table(Gtk::manage(new Gtk::Table(1, 2))), -#endif _applied(false) { set_title(_("Edit profile")); -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); + auto mainVBox = get_content_area(); _layout_table->set_column_spacing(4); _layout_table->set_row_spacing(4); -#else - Gtk::Box *mainVBox = get_vbox(); - _layout_table->set_spacings(4); -#endif _profile_name_entry.set_activates_default(true); _profile_name_label.set_label(_("Profile name:")); _profile_name_label.set_alignment(1.0, 0.5); -#if WITH_GTKMM_3_0 _layout_table->attach(_profile_name_label, 0, 0, 1, 1); _profile_name_entry.set_hexpand(); _layout_table->attach(_profile_name_entry, 1, 0, 1, 1); -#else - _layout_table->attach(_profile_name_label, - 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); - _layout_table->attach(_profile_name_entry, - 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); -#endif mainVBox->pack_start(*_layout_table, false, false, 4); // Buttons diff --git a/src/ui/dialog/calligraphic-profile-rename.h b/src/ui/dialog/calligraphic-profile-rename.h index 4ef71900b..b7a97a1e7 100644 --- a/src/ui/dialog/calligraphic-profile-rename.h +++ b/src/ui/dialog/calligraphic-profile-rename.h @@ -20,11 +20,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } class SPDesktop; @@ -59,12 +55,7 @@ protected: Gtk::Label _profile_name_label; Gtk::Entry _profile_name_entry; - -#if WITH_GTKMM_3_0 Gtk::Grid* _layout_table; -#else - Gtk::Table* _layout_table; -#endif Gtk::Button _close_button; Gtk::Button _delete_button; diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index b727c87ee..da00b7b00 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -91,12 +91,8 @@ CloneTiler::CloneTiler () : dlg = GTK_WIDGET(gobj()); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + auto mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(mainbox), FALSE); -#else - GtkWidget *mainbox = gtk_vbox_new(FALSE, 4); -#endif gtk_container_set_border_width (GTK_CONTAINER (mainbox), 6); contents->pack_start (*Gtk::manage(Glib::wrap(mainbox)), true, true, 0); @@ -651,12 +647,8 @@ CloneTiler::CloneTiler () : GtkWidget *vb = clonetiler_new_tab (nb, _("Co_lor")); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new (FALSE, 0); -#endif GtkWidget *l = gtk_label_new (_("Initial color: ")); gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); @@ -777,12 +769,8 @@ CloneTiler::CloneTiler () : { GtkWidget *vb = clonetiler_new_tab (nb, _("_Trace")); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0); b = gtk_check_button_new_with_label (_("Trace the drawing under the clones/sprayed items")); @@ -797,12 +785,8 @@ CloneTiler::CloneTiler () : } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_box_set_homogeneous(GTK_BOX(vvb), FALSE); -#else - GtkWidget *vvb = gtk_vbox_new (FALSE, 0); -#endif gtk_box_pack_start (GTK_BOX (vb), vvb, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(dlg), "dotrace", (gpointer) vvb); @@ -811,15 +795,9 @@ CloneTiler::CloneTiler () : GtkWidget *frame = gtk_frame_new (_("1. Pick from the drawing:")); gtk_box_pack_start (GTK_BOX (vvb), frame, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (3, 3, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_add(GTK_CONTAINER(frame), table); @@ -895,15 +873,9 @@ CloneTiler::CloneTiler () : GtkWidget *frame = gtk_frame_new (_("2. Tweak the picked value:")); gtk_box_pack_start (GTK_BOX (vvb), frame, FALSE, FALSE, VB_MARGIN); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (4, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_add(GTK_CONTAINER(frame), table); @@ -944,15 +916,9 @@ CloneTiler::CloneTiler () : GtkWidget *frame = gtk_frame_new (_("3. Apply the value to the clones':")); gtk_box_pack_start (GTK_BOX (vvb), frame, FALSE, FALSE, 0); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_add(GTK_CONTAINER(frame), table); { @@ -1000,12 +966,8 @@ CloneTiler::CloneTiler () : } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *l = gtk_label_new(_("")); gtk_label_set_markup (GTK_LABEL(l), _("Apply to tiled clones:")); @@ -1013,42 +975,24 @@ CloneTiler::CloneTiler () : } // Rows/columns, width/height { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 4); gtk_grid_set_column_spacing(GTK_GRID(table), 6); -#else - GtkWidget *table = gtk_table_new (2, 2, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 4); - gtk_table_set_col_spacings (GTK_TABLE (table), 6); -#endif gtk_container_set_border_width (GTK_CONTAINER (table), VB_MARGIN); gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif g_object_set_data (G_OBJECT(dlg), "rowscols", (gpointer) hb); { -#if WITH_GTKMM_3_0 - Glib::RefPtra = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); -#else - Gtk::Adjustment *a = new Gtk::Adjustment (0.0, 1, 500, 1, 10, 0); -#endif + auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); int value = prefs->getInt(prefs_path + "jmax", 2); a->set_value (value); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); -#else - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton (*a, 1.0, 0); -#endif + auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); sb->set_tooltip_text (_("How many rows in the tiling")); sb->set_width_chars (7); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0); @@ -1061,28 +1005,16 @@ CloneTiler::CloneTiler () : { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), "×"); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); } { -#if WITH_GTKMM_3_0 - Glib::RefPtr a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); -#else - Gtk::Adjustment *a = new Gtk::Adjustment (0.0, 1, 500, 1, 10, 0); -#endif + auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0); int value = prefs->getInt(prefs_path + "imax", 2); a->set_value (value); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); -#else - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton (*a, 1.0, 0); -#endif + auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0); sb->set_tooltip_text (_("How many columns in the tiling")); sb->set_width_chars (7); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0); @@ -1096,12 +1028,8 @@ CloneTiler::CloneTiler () : } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif g_object_set_data (G_OBJECT(dlg), "widthheight", (gpointer) hb); // unitmenu @@ -1112,59 +1040,39 @@ CloneTiler::CloneTiler () : { // Width spinbutton -#if WITH_GTKMM_3_0 fill_width = Gtk::Adjustment::create(0.0, -1e6, 1e6, 1.0, 10.0, 0); -#else - fill_width = new Gtk::Adjustment (0.0, -1e6, 1e6, 1.0, 10.0, 0); -#endif double value = prefs->getDouble(prefs_path + "fillwidth", 50.0); Inkscape::Util::Unit const *unit = unit_menu->getUnit(); gdouble const units = Inkscape::Util::Quantity::convert(value, "px", unit); fill_width->set_value (units); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton(fill_width, 1.0, 2); -#else - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton (*fill_width, 1.0, 2); -#endif + auto e = new Inkscape::UI::Widget::SpinButton(fill_width, 1.0, 2); e->set_tooltip_text (_("Width of the rectangle to be filled")); e->set_width_chars (7); e->set_digits (4); gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0); // TODO: C++ification - g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed", + g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed", G_CALLBACK(clonetiler_fill_width_changed), unit_menu); } { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), "×"); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); -#endif gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0); } { // Height spinbutton -#if WITH_GTKMM_3_0 fill_height = Gtk::Adjustment::create(0.0, -1e6, 1e6, 1.0, 10.0, 0); -#else - fill_height = new Gtk::Adjustment (0.0, -1e6, 1e6, 1.0, 10.0, 0); -#endif double value = prefs->getDouble(prefs_path + "fillheight", 50.0); Inkscape::Util::Unit const *unit = unit_menu->getUnit(); gdouble const units = Inkscape::Util::Quantity::convert(value, "px", unit); fill_height->set_value (units); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton(fill_height, 1.0, 2); -#else - Inkscape::UI::Widget::SpinButton *e = new Inkscape::UI::Widget::SpinButton (*fill_height, 1.0, 2); -#endif + auto e = new Inkscape::UI::Widget::SpinButton(fill_height, 1.0, 2); e->set_tooltip_text (_("Height of the rectangle to be filled")); e->set_width_chars (7); e->set_digits (4); @@ -1206,12 +1114,8 @@ CloneTiler::CloneTiler () : // Use saved pos { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *b = gtk_check_button_new_with_label (_("Use saved size and position of the tile")); @@ -1226,12 +1130,8 @@ CloneTiler::CloneTiler () : // Statusbar { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_end (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); GtkWidget *l = gtk_label_new(""); g_object_set_data (G_OBJECT(dlg), "status", (gpointer) l); @@ -1240,12 +1140,8 @@ CloneTiler::CloneTiler () : // Buttons { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0); { @@ -1259,12 +1155,8 @@ CloneTiler::CloneTiler () : } { // buttons which are enabled only when there are tiled clones -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(sb), FALSE); -#else - GtkWidget *sb = gtk_hbox_new(FALSE, 0); -#endif gtk_box_pack_end (GTK_BOX (hb), sb, FALSE, FALSE, 0); g_object_set_data (G_OBJECT(dlg), "buttons_on_tiles", (gpointer) sb); { @@ -2673,12 +2565,8 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg) GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label) { GtkWidget *l = gtk_label_new_with_mnemonic (label); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN); + auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_vbox_new (FALSE, VB_MARGIN); -#endif gtk_container_set_border_width (GTK_CONTAINER (vb), VB_MARGIN); gtk_notebook_append_page (GTK_NOTEBOOK (nb), vb, l); return vb; @@ -2693,12 +2581,8 @@ void CloneTiler::clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, VB_MARGIN); -#endif GtkWidget *b = gtk_check_button_new (); gtk_widget_set_tooltip_text (b, tip); @@ -2725,44 +2609,23 @@ void CloneTiler::clonetiler_value_changed(GtkAdjustment *adj, gpointer data) GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 0); -#endif { -#if WITH_GTKMM_3_0 Glib::RefPtr a; if (exponent) { a = Gtk::Adjustment::create(1.0, lower, upper, 0.01, 0.05, 0); } else { a = Gtk::Adjustment::create(0.0, lower, upper, 0.1, 0.5, 0); } -#else - Gtk::Adjustment *a; - if (exponent) { - a = new Gtk::Adjustment (1.0, lower, upper, 0.01, 0.05, 0); - } else { - a = new Gtk::Adjustment (0.0, lower, upper, 0.1, 0.5, 0); - } -#endif Inkscape::UI::Widget::SpinButton *sb; -#if WITH_GTKMM_3_0 if (exponent) { sb = new Inkscape::UI::Widget::SpinButton(a, 0.01, 2); } else { sb = new Inkscape::UI::Widget::SpinButton(a, 0.1, 1); } -#else - if (exponent) { - sb = new Inkscape::UI::Widget::SpinButton (*a, 0.01, 2); - } else { - sb = new Inkscape::UI::Widget::SpinButton (*a, 0.1, 1); - } -#endif sb->set_tooltip_text (tip); sb->set_width_chars (5); @@ -2786,12 +2649,8 @@ GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, do { GtkWidget *l = gtk_label_new (""); gtk_label_set_markup (GTK_LABEL(l), suffix); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); gtk_widget_set_valign(l, GTK_ALIGN_START); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0); -#endif gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0); } @@ -2867,38 +2726,22 @@ void CloneTiler::clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg) void CloneTiler::clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col) { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(widget, GTK_ALIGN_FILL); gtk_widget_set_valign(widget, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(table), widget, col, row, 1, 1); -#else - GtkWidget *a = gtk_alignment_new (align, 0, 0, 0); - gtk_container_add(GTK_CONTAINER(a), widget); - gtk_table_attach ( GTK_TABLE (table), a, col, col + 1, row, row + 1, GTK_FILL, (GtkAttachOptions)0, 0, 0 ); -#endif } GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *table = gtk_grid_new(); + auto table = gtk_grid_new(); gtk_grid_set_row_spacing(GTK_GRID(table), 6); gtk_grid_set_column_spacing(GTK_GRID(table), 8); -#else - GtkWidget *table = gtk_table_new (values + 2, 5, FALSE); - gtk_table_set_row_spacings (GTK_TABLE (table), 6); - gtk_table_set_col_spacings (GTK_TABLE (table), 8); -#endif gtk_container_set_border_width (GTK_CONTAINER (table), VB_MARGIN); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new (FALSE, 0); -#endif GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-rows")); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); @@ -2911,12 +2754,8 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values) } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new (FALSE, 0); -#endif GtkWidget *i = sp_icon_new (Inkscape::ICON_SIZE_DECORATION, INKSCAPE_ICON("object-columns")); gtk_box_pack_start (GTK_BOX (hb), i, FALSE, FALSE, 2); diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h index a8f1df0a0..e76ad028e 100644 --- a/src/ui/dialog/clonetiler.h +++ b/src/ui/dialog/clonetiler.h @@ -121,13 +121,8 @@ private: GtkSizeGroup* table_row_labels; Inkscape::UI::Widget::UnitMenu *unit_menu; -#if WITH_GTKMM_3_0 Glib::RefPtr fill_width; Glib::RefPtr fill_height; -#else - Gtk::Adjustment *fill_width; - Gtk::Adjustment *fill_height; -#endif sigc::connection desktopChangeConn; sigc::connection selectChangedConn; diff --git a/src/ui/dialog/debug.cpp b/src/ui/dialog/debug.cpp index d127261c0..48d7abbdd 100644 --- a/src/ui/dialog/debug.cpp +++ b/src/ui/dialog/debug.cpp @@ -68,12 +68,7 @@ DebugDialogImpl::DebugDialogImpl() { set_title(_("Messages")); set_size_request(300, 400); - -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); -#else - Gtk::Box *mainVBox = get_vbox(); -#endif + auto mainVBox = get_content_area(); //## Add a menu for clear() Gtk::MenuItem* item = Gtk::manage(new Gtk::MenuItem(_("_File"), true)); diff --git a/src/ui/dialog/document-metadata.cpp b/src/ui/dialog/document-metadata.cpp index da1facc08..602c3d6be 100644 --- a/src/ui/dialog/document-metadata.cpp +++ b/src/ui/dialog/document-metadata.cpp @@ -61,12 +61,7 @@ DocumentMetadata::getInstance() DocumentMetadata::DocumentMetadata() -#if WITH_GTKMM_3_0 : UI::Widget::Panel ("", "/dialogs/documentmetadata", SP_VERB_DIALOG_METADATA) -#else - : UI::Widget::Panel ("", "/dialogs/documentmetadata", SP_VERB_DIALOG_METADATA), - _page_metadata1(1, 1), _page_metadata2(1, 1) -#endif { hide(); _getContents()->set_spacing (4); @@ -75,15 +70,10 @@ DocumentMetadata::DocumentMetadata() _page_metadata1.set_border_width(2); _page_metadata2.set_border_width(2); -#if WITH_GTKMM_3_0 _page_metadata1.set_column_spacing(2); _page_metadata2.set_column_spacing(2); _page_metadata1.set_row_spacing(2); _page_metadata2.set_row_spacing(2); -#else - _page_metadata1.set_spacings(2); - _page_metadata2.set_spacings(2); -#endif _notebook.append_page(_page_metadata1, _("Metadata")); _notebook.append_page(_page_metadata2, _("License")); @@ -126,12 +116,8 @@ DocumentMetadata::build_metadata() label->set_markup (_("Dublin Core Entities")); label->set_alignment (0.0); -#if WITH_GTKMM_3_0 label->set_valign(Gtk::ALIGN_CENTER); _page_metadata1.attach(*label, 0, 0, 3, 1); -#else - _page_metadata1.attach(*label, 0,3,0,1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add generic metadata entry areas */ struct rdf_work_entity_t * entity; @@ -143,7 +129,6 @@ DocumentMetadata::build_metadata() Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata1.attach(*space, 0, row, 1, 1); @@ -153,11 +138,6 @@ DocumentMetadata::build_metadata() w->_packable->set_hexpand(); w->_packable->set_valign(Gtk::ALIGN_CENTER); _page_metadata1.attach(*w->_packable, 2, row, 1, 1); -#else - _page_metadata1.attach(*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1.attach(w->_label, 1,2, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1.attach(*w->_packable, 2,3, row, row+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } } @@ -167,31 +147,20 @@ DocumentMetadata::build_metadata() Gtk::Label *llabel = Gtk::manage (new Gtk::Label); llabel->set_markup (_("License")); llabel->set_alignment (0.0); - -#if WITH_GTKMM_3_0 llabel->set_valign(Gtk::ALIGN_CENTER); _page_metadata2.attach(*llabel, 0, row, 3, 1); -#else - _page_metadata2.attach(*llabel, 0,3, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add license selector pull-down and URI */ ++row; _licensor.init (_wr); Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); - -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata2.attach(*space, 0, row, 1, 1); _licensor.set_hexpand(); _licensor.set_valign(Gtk::ALIGN_CENTER); _page_metadata2.attach(_licensor, 1, row, 2, 1); -#else - _page_metadata2.attach(*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata2.attach(_licensor, 1,3, row, row+1, Gtk::EXPAND|Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif } /** diff --git a/src/ui/dialog/document-metadata.h b/src/ui/dialog/document-metadata.h index cde5d92fd..2c56e9317 100644 --- a/src/ui/dialog/document-metadata.h +++ b/src/ui/dialog/document-metadata.h @@ -21,12 +21,7 @@ #include #include "ui/widget/panel.h" #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include "inkscape.h" #include "ui/widget/licensor.h" @@ -62,13 +57,8 @@ protected: Gtk::Notebook _notebook; -#if WITH_GTKMM_3_0 Gtk::Grid _page_metadata1; Gtk::Grid _page_metadata2; -#else - Gtk::Table _page_metadata1; - Gtk::Table _page_metadata2; -#endif //--------------------------------------------------------------- RDElist _rdflist; diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 589973162..33f134c11 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -223,25 +223,16 @@ DocumentProperties::~DocumentProperties() * widget in columns 2-3; (non-0, 0) means label in columns 1-3; and * (non-0, non-0) means two widgets in columns 2 and 3. */ -#if WITH_GTKMM_3_0 inline void attach_all(Gtk::Grid &table, Gtk::Widget *const arr[], unsigned const n, int start = 0, int docum_prop_flag = 0) -#else -inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned const n, int start = 0, int docum_prop_flag = 0) -#endif { for (unsigned i = 0, r = start; i < n; i += 2) { if (arr[i] && arr[i+1]) { -#if WITH_GTKMM_3_0 arr[i]->set_hexpand(); arr[i+1]->set_hexpand(); arr[i]->set_valign(Gtk::ALIGN_CENTER); arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i], 1, r, 1, 1); table.attach(*arr[i+1], 2, r, 1, 1); -#else - table.attach(*arr[i], 1, 2, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); - table.attach(*arr[i+1], 2, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { if (arr[i+1]) { Gtk::AttachOptions yoptions = (Gtk::AttachOptions)0; @@ -252,7 +243,6 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con if (docum_prop_flag) { // this sets the padding for subordinate widgets on the "Page" page if( i==(n-8) || i==(n-10) ) { -#if WITH_GTKMM_3_0 arr[i+1]->set_hexpand(); arr[i+1]->set_margin_left(20); arr[i+1]->set_margin_right(20); @@ -263,11 +253,7 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i+1], 1, r, 2, 1); -#else - table.attach(*arr[i+1], 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, yoptions, 20,0); -#endif } else { -#if WITH_GTKMM_3_0 arr[i+1]->set_hexpand(); if (yoptions & Gtk::EXPAND) @@ -276,12 +262,8 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i+1], 1, r, 2, 1); -#else - table.attach(*arr[i+1], 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, yoptions, 0,0); -#endif } } else { -#if WITH_GTKMM_3_0 arr[i+1]->set_hexpand(); if (yoptions & Gtk::EXPAND) @@ -290,32 +272,21 @@ inline void attach_all(Gtk::Table &table, Gtk::Widget *const arr[], unsigned con arr[i+1]->set_valign(Gtk::ALIGN_CENTER); table.attach(*arr[i+1], 1, r, 2, 1); -#else - table.attach(*arr[i+1], 1, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, yoptions, 0,0); -#endif } } else if (arr[i]) { Gtk::Label& label = reinterpret_cast(*arr[i]); label.set_alignment (0.0); -#if WITH_GTKMM_3_0 label.set_hexpand(); label.set_valign(Gtk::ALIGN_CENTER); table.attach(label, 0, r, 3, 1); -#else - table.attach (label, 0, 3, r, r+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } else { Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_halign(Gtk::ALIGN_CENTER); space->set_valign(Gtk::ALIGN_CENTER); table.attach(*space, 0, r, 1, 1); -#else - table.attach (*space, 0, 1, r, r+1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0,0,0); -#endif } } ++r; @@ -685,52 +656,35 @@ void DocumentProperties::build_cms() label_link->set_alignment(0.0); -#if WITH_GTKMM_3_0 label_link->set_hexpand(); label_link->set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(*label_link, 0, row, 3, 1); -#else - _page_cms->table().attach(*label_link, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _LinkedProfilesListScroller.set_hexpand(); _LinkedProfilesListScroller.set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(_LinkedProfilesListScroller, 0, row, 3, 1); -#else - _page_cms->table().attach(_LinkedProfilesListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; Gtk::HBox* spacer = Gtk::manage(new Gtk::HBox()); spacer->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 spacer->set_hexpand(); spacer->set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(*spacer, 0, row, 3, 1); -#else - _page_cms->table().attach(*spacer, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; label_avail->set_alignment(0.0); -#if WITH_GTKMM_3_0 label_avail->set_hexpand(); label_avail->set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(*label_avail, 0, row, 3, 1); -#else - _page_cms->table().attach(*label_avail, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _AvailableProfilesList.set_hexpand(); _AvailableProfilesList.set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(_AvailableProfilesList, 0, row, 1, 1); @@ -744,11 +698,6 @@ void DocumentProperties::build_cms() _unlink_btn.set_halign(Gtk::ALIGN_CENTER); _unlink_btn.set_valign(Gtk::ALIGN_CENTER); _page_cms->table().attach(_unlink_btn, 2, row, 1, 1); -#else - _page_cms->table().attach(_AvailableProfilesList, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); - _page_cms->table().attach(_link_btn, 1, 2, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 2, 0); - _page_cms->table().attach(_unlink_btn, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 0, 0); -#endif // Set up the Avialable Profiles combo box _AvailableProfilesListStore = Gtk::ListStore::create(_AvailableProfilesListColumns); @@ -815,41 +764,27 @@ void DocumentProperties::build_scripting() gint row = 0; label_external->set_alignment(0.0); - -#if WITH_GTKMM_3_0 label_external->set_hexpand(); label_external->set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(*label_external, 0, row, 3, 1); -#else - _page_external_scripts->table().attach(*label_external, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _ExternalScriptsListScroller.set_hexpand(); _ExternalScriptsListScroller.set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(_ExternalScriptsListScroller, 0, row, 3, 1); -#else - _page_external_scripts->table().attach(_ExternalScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; Gtk::HBox* spacer_external = Gtk::manage(new Gtk::HBox()); spacer_external->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 spacer_external->set_hexpand(); spacer_external->set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(*spacer_external, 0, row, 3, 1); -#else - _page_external_scripts->table().attach(*spacer_external, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _script_entry.set_hexpand(); _script_entry.set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(_script_entry, 0, row, 1, 1); @@ -863,11 +798,6 @@ void DocumentProperties::build_scripting() _external_remove_btn.set_halign(Gtk::ALIGN_CENTER); _external_remove_btn.set_valign(Gtk::ALIGN_CENTER); _page_external_scripts->table().attach(_external_remove_btn, 2, row, 1, 1); -#else - _page_external_scripts->table().attach(_script_entry, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); - _page_external_scripts->table().attach(_external_add_btn, 1, 2, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 2, 0); - _page_external_scripts->table().attach(_external_remove_btn, 2, 3, row, row + 1, (Gtk::AttachOptions)0, (Gtk::AttachOptions)0, 0, 0); -#endif //# Set up the External Scripts box _ExternalScriptsListStore = Gtk::ListStore::create(_ExternalScriptsListColumns); @@ -888,12 +818,6 @@ void DocumentProperties::build_scripting() _embed_remove_btn.set_tooltip_text(_("Remove")); docprops_style_button(_embed_remove_btn, INKSCAPE_ICON("list-remove")); -#if !WITH_GTKMM_3_0 - // TODO: This has been removed from Gtkmm 3.0. Check that - // everything still looks OK! - _embed_button_box.set_child_min_width( 16 ); - _embed_button_box.set_spacing( 4 ); -#endif _embed_button_box.set_layout (Gtk::BUTTONBOX_START); _embed_button_box.add(_embed_new_btn); _embed_button_box.add(_embed_remove_btn); @@ -902,47 +826,29 @@ void DocumentProperties::build_scripting() row = 0; label_embedded->set_alignment(0.0); - -#if WITH_GTKMM_3_0 label_embedded->set_hexpand(); label_embedded->set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(*label_embedded, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(*label_embedded, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _EmbeddedScriptsListScroller.set_hexpand(); _EmbeddedScriptsListScroller.set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(_EmbeddedScriptsListScroller, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(_EmbeddedScriptsListScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _embed_button_box.set_hexpand(); _embed_button_box.set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(_embed_button_box, 0, row, 1, 1); -#else - _page_embedded_scripts->table().attach(_embed_button_box, 0, 1, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; Gtk::HBox* spacer_embedded = Gtk::manage(new Gtk::HBox()); spacer_embedded->set_size_request(SPACE_SIZE_X, SPACE_SIZE_Y); - -#if WITH_GTKMM_3_0 spacer_embedded->set_hexpand(); spacer_embedded->set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(*spacer_embedded, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(*spacer_embedded, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; @@ -958,24 +864,15 @@ void DocumentProperties::build_scripting() label_embedded_content->set_markup (_("Content:")); label_embedded_content->set_alignment(0.0); - -#if WITH_GTKMM_3_0 label_embedded_content->set_hexpand(); label_embedded_content->set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(*label_embedded_content, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(*label_embedded_content, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif row++; -#if WITH_GTKMM_3_0 _EmbeddedContentScroller.set_hexpand(); _EmbeddedContentScroller.set_valign(Gtk::ALIGN_CENTER); _page_embedded_scripts->table().attach(_EmbeddedContentScroller, 0, row, 3, 1); -#else - _page_embedded_scripts->table().attach(_EmbeddedContentScroller, 0, 3, row, row + 1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0, 0, 0); -#endif _EmbeddedContentScroller.add(_EmbeddedContent); _EmbeddedContentScroller.set_shadow_type(Gtk::SHADOW_IN); @@ -1037,12 +934,8 @@ void DocumentProperties::build_metadata() label->set_markup (_("Dublin Core Entities")); label->set_alignment (0.0); -#if WITH_GTKMM_3_0 label->set_valign(Gtk::ALIGN_CENTER); _page_metadata1->table().attach (*label, 0,0,3,1); -#else - _page_metadata1->table().attach (*label, 0,3,0,1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add generic metadata entry areas */ struct rdf_work_entity_t * entity; @@ -1053,8 +946,6 @@ void DocumentProperties::build_metadata() _rdflist.push_back (w); Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); - -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata1->table().attach(*space, 0, row, 1, 1); @@ -1064,11 +955,6 @@ void DocumentProperties::build_metadata() w->_packable->set_hexpand(); w->_packable->set_valign(Gtk::ALIGN_CENTER); _page_metadata1->table().attach(*w->_packable, 2, row, 1, 1); -#else - _page_metadata1->table().attach (*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1->table().attach (w->_label, 1,2, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata1->table().attach (*w->_packable, 2,3, row, row+1, Gtk::FILL|Gtk::EXPAND, (Gtk::AttachOptions)0,0,0); -#endif } } @@ -1077,11 +963,7 @@ void DocumentProperties::build_metadata() Gtk::Button *button_load = Gtk::manage (new Gtk::Button(_("Use _default"),1)); button_load->set_tooltip_text(_("Use the previously saved default metadata here")); -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *box_buttons = Gtk::manage (new Gtk::ButtonBox); -#else - Gtk::HButtonBox *box_buttons = Gtk::manage (new Gtk::HButtonBox); -#endif + auto box_buttons = Gtk::manage (new Gtk::ButtonBox); box_buttons->set_layout(Gtk::BUTTONBOX_END); box_buttons->set_spacing(4); @@ -1099,12 +981,8 @@ void DocumentProperties::build_metadata() llabel->set_markup (_("License")); llabel->set_alignment (0.0); -#if WITH_GTKMM_3_0 llabel->set_valign(Gtk::ALIGN_CENTER); _page_metadata2->table().attach(*llabel, 0, row, 3, 1); -#else - _page_metadata2->table().attach (*llabel, 0,3, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif /* add license selector pull-down and URI */ ++row; @@ -1112,17 +990,12 @@ void DocumentProperties::build_metadata() Gtk::HBox *space = Gtk::manage (new Gtk::HBox); space->set_size_request (SPACE_SIZE_X, SPACE_SIZE_Y); -#if WITH_GTKMM_3_0 space->set_valign(Gtk::ALIGN_CENTER); _page_metadata2->table().attach(*space, 0, row, 1, 1); _licensor.set_hexpand(); _licensor.set_valign(Gtk::ALIGN_CENTER); _page_metadata2->table().attach(_licensor, 1, row, 3, 1); -#else - _page_metadata2->table().attach (*space, 0,1, row, row+1, Gtk::FILL, (Gtk::AttachOptions)0,0,0); - _page_metadata2->table().attach (_licensor, 1,3, row, row+1, Gtk::EXPAND|Gtk::FILL, (Gtk::AttachOptions)0,0,0); -#endif } void DocumentProperties::addExternalScript(){ diff --git a/src/ui/dialog/document-properties.h b/src/ui/dialog/document-properties.h index 7f91d9ea0..8d1c6b38a 100644 --- a/src/ui/dialog/document-properties.h +++ b/src/ui/dialog/document-properties.h @@ -173,11 +173,7 @@ protected: Gtk::Button _external_remove_btn; Gtk::Button _embed_new_btn; Gtk::Button _embed_remove_btn; -#if WITH_GTKMM_3_0 - Gtk::ButtonBox _embed_button_box; -#else - Gtk::HButtonBox _embed_button_box; -#endif + Gtk::ButtonBox _embed_button_box; class ExternalScriptsColumns : public Gtk::TreeModel::ColumnRecord { diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 2fb5f9e3b..5e7c68985 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -29,11 +29,7 @@ #include #include #include -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -218,15 +214,9 @@ Export::Export (void) : selectiontype_buttons[i]->signal_clicked().connect(sigc::mem_fun(*this, &Export::onAreaToggled)); } -#if WITH_GTKMM_3_0 - Gtk::Grid* t = new Gtk::Grid(); + auto t = new Gtk::Grid(); t->set_row_spacing(4); t->set_column_spacing(4); -#else - Gtk::Table* t = new Gtk::Table(3, 4, false); - t->set_row_spacings (4); - t->set_col_spacings (4); -#endif x0_adj = createSpinbutton ( "x0", 0.0, -1000000.0, 1000000.0, 0.1, 1.0, t, 0, 0, _("_x0:"), "", EXPORT_COORD_PRECISION, 1, @@ -268,15 +258,9 @@ Export::Export (void) : bm_label->set_use_markup(true); size_box.pack_start(*bm_label, false, false, 0); -#if WITH_GTKMM_3_0 - Gtk::Grid *t = new Gtk::Grid(); + auto t = new Gtk::Grid(); t->set_row_spacing(4); t->set_column_spacing(4); -#else - Gtk::Table *t = new Gtk::Table(2, 5, false); - t->set_row_spacings (4); - t->set_col_spacings (4); -#endif size_box.pack_start(*t); @@ -484,27 +468,14 @@ void Export::set_default_filename () { } } -#if WITH_GTKMM_3_0 Glib::RefPtr Export::createSpinbutton( gchar const * /*key*/, float val, float min, float max, float step, float page, Gtk::Grid *t, int x, int y, const Glib::ustring& ll, const Glib::ustring& lr, int digits, unsigned int sensitive, void (Export::*cb)() ) -#else -Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, float min, float max, - float step, float page, - Gtk::Table *t, int x, int y, - const Glib::ustring& ll, const Glib::ustring& lr, - int digits, unsigned int sensitive, - void (Export::*cb)() ) -#endif { -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = Gtk::Adjustment::create(val, min, max, step, page, 0); -#else - Gtk::Adjustment *adj = new Gtk::Adjustment ( val, min, max, step, page, 0 ); -#endif + auto adj = Gtk::Adjustment::create(val, min, max, step, page, 0); int pos = 0; Gtk::Label *l = NULL; @@ -512,28 +483,17 @@ Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, fl if (!ll.empty()) { l = new Gtk::Label(ll,true); l->set_alignment (1.0, 0.5); - -#if WITH_GTKMM_3_0 l->set_hexpand(); l->set_vexpand(); t->attach(*l, x + pos, y, 1, 1); -#else - t->attach (*l, x + pos, x + pos + 1, y, y + 1, Gtk::EXPAND, Gtk::EXPAND, 0, 0 ); -#endif - l->set_sensitive(sensitive); pos++; } -#if WITH_GTKMM_3_0 - Gtk::SpinButton *sb = new Gtk::SpinButton(adj, 1.0, digits); + auto sb = new Gtk::SpinButton(adj, 1.0, digits); sb->set_hexpand(); sb->set_vexpand(); t->attach(*sb, x + pos, y, 1, 1); -#else - Gtk::SpinButton *sb = new Gtk::SpinButton(*adj, 1.0, digits); - t->attach (*sb, x + pos, x + pos + 1, y, y + 1, Gtk::EXPAND, Gtk::EXPAND, 0, 0 ); -#endif sb->set_width_chars(7); sb->set_sensitive (sensitive); @@ -546,15 +506,9 @@ Gtk::Adjustment * Export::createSpinbutton( gchar const * /*key*/, float val, fl if (!lr.empty()) { l = new Gtk::Label(lr,true); l->set_alignment (0.0, 0.5); - -#if WITH_GTKMM_3_0 l->set_hexpand(); l->set_vexpand(); t->attach(*l, x + pos, y, 1, 1); -#else - t->attach (*l, x + pos, x + pos + 1, y, y + 1, Gtk::EXPAND, Gtk::EXPAND, 0, 0 ); -#endif - l->set_sensitive (sensitive); pos++; l->set_mnemonic_widget (*sb); @@ -932,11 +886,7 @@ Gtk::Dialog * Export::create_progress_dialog (Glib::ustring progress_text) { Gtk::ProgressBar *prg = new Gtk::ProgressBar (); prg->set_text(progress_text); dlg->set_data ("progress", prg); -#if GTK_CHECK_VERSION(3,0,0) - Gtk::Box* CA = dlg->get_content_area(); -#else - Gtk::Box* CA = dlg->get_vbox(); -#endif + auto CA = dlg->get_content_area(); CA->pack_start(*prg, FALSE, FALSE, 4); Gtk::Button* btn = dlg->add_button (Gtk::Stock::CANCEL,Gtk::RESPONSE_CANCEL ); @@ -1357,11 +1307,7 @@ void Export::onBrowse () Glib::RefPtr parentWindow = desktop->getToplevel()->get_window(); g_assert(parentWindow->gobj() != NULL); -#if WITH_GTKMM_3_0 opf.hwndOwner = (HWND)gdk_win32_window_get_handle((GdkWindow*)parentWindow->gobj()); -#else - opf.hwndOwner = (HWND)gdk_win32_drawable_get_handle((GdkDrawable*)parentWindow->gobj()); -#endif opf.lpstrFilter = filter_string; opf.lpstrCustomFilter = 0; opf.nMaxCustFilter = 0L; @@ -1521,11 +1467,7 @@ void Export::detectSize() { } /* sp_export_detect_size */ /// Called when area x0 value is changed -#if WITH_GTKMM_3_0 void Export::areaXChange(Glib::RefPtr& adj) -#else -void Export::areaXChange (Gtk::Adjustment *adj) -#endif { float x0, x1, xdpi, width; @@ -1564,11 +1506,7 @@ void Export::areaXChange (Gtk::Adjustment *adj) } // end of sp_export_area_x_value_changed() /// Called when area y0 value is changed. -#if WITH_GTKMM_3_0 void Export::areaYChange(Glib::RefPtr& adj) -#else -void Export::areaYChange (Gtk::Adjustment *adj) -#endif { float y0, y1, ydpi, height; @@ -1875,11 +1813,7 @@ void Export::setArea( double x0, double y0, double x1, double y1 ) * @param adj The adjustment widget * @param val What value to set it to. */ -#if WITH_GTKMM_3_0 void Export::setValue(Glib::RefPtr& adj, double val ) -#else -void Export::setValue( Gtk::Adjustment *adj, double val ) -#endif { if (adj) { adj->set_value(val); @@ -1897,11 +1831,7 @@ void Export::setValue( Gtk::Adjustment *adj, double val ) * @param adj The adjustment widget * @param val What the value should be in points. */ -#if WITH_GTKMM_3_0 void Export::setValuePx(Glib::RefPtr& adj, double val) -#else -void Export::setValuePx( Gtk::Adjustment *adj, double val) -#endif { Unit const *unit = unit_selector.getUnit(); @@ -1920,11 +1850,7 @@ void Export::setValuePx( Gtk::Adjustment *adj, double val) * * @return The value in the specified adjustment. */ -#if WITH_GTKMM_3_0 float Export::getValue(Glib::RefPtr& adj) -#else -float Export::getValue( Gtk::Adjustment *adj ) -#endif { if (!adj) { g_message("sp_export_value_get : adj is NULL"); @@ -1946,11 +1872,7 @@ float Export::getValue( Gtk::Adjustment *adj ) * * @return The value in the adjustment in points. */ -#if WITH_GTKMM_3_0 float Export::getValuePx(Glib::RefPtr& adj) -#else -float Export::getValuePx( Gtk::Adjustment *adj ) -#endif { float value = getValue( adj); Unit const *unit = unit_selector.getUnit(); diff --git a/src/ui/dialog/export.h b/src/ui/dialog/export.h index 23af0109b..a1c44714b 100644 --- a/src/ui/dialog/export.h +++ b/src/ui/dialog/export.h @@ -79,17 +79,10 @@ private: /* * Getter/setter style functions for the spinbuttons */ -#if WITH_GTKMM_3_0 void setValue(Glib::RefPtr& adj, double val); void setValuePx(Glib::RefPtr& adj, double val); float getValue(Glib::RefPtr& adj); float getValuePx(Glib::RefPtr& adj); -#else - void setValue (Gtk::Adjustment *adj, double val); - void setValuePx (Gtk::Adjustment *adj, double val); - float getValue (Gtk::Adjustment *adj); - float getValuePx (Gtk::Adjustment *adj); -#endif /** * Helper function to create, style and pack spinbuttons for the export dialog. @@ -112,21 +105,12 @@ private: * * No unit_selector is stored in the created spinbutton, relies on external unit management */ -#if WITH_GTKMM_3_0 Glib::RefPtr createSpinbutton( gchar const *key, float val, float min, float max, float step, float page, Gtk::Grid *t, int x, int y, const Glib::ustring& ll, const Glib::ustring& lr, int digits, unsigned int sensitive, void (Export::*cb)() ); -#else - Gtk::Adjustment * createSpinbutton( gchar const *key, float val, float min, float max, - float step, float page, - Gtk::Table *t, int x, int y, - const Glib::ustring& ll, const Glib::ustring& lr, - int digits, unsigned int sensitive, - void (Export::*cb)() ); -#endif /** * One of the area select radio buttons was pressed @@ -152,11 +136,7 @@ private: void onAreaX1Change() { areaXChange(x1_adj); } ; -#if WITH_GTKMM_3_0 void areaXChange(Glib::RefPtr& adj); -#else - void areaXChange ( Gtk::Adjustment *adj); -#endif /** * Area Y value changed callback @@ -167,11 +147,7 @@ private: void onAreaY1Change() { areaYChange(y1_adj); } ; -#if WITH_GTKMM_3_0 void areaYChange(Glib::RefPtr& adj); -#else - void areaYChange ( Gtk::Adjustment *adj); -#endif /** * Unit changed callback @@ -298,7 +274,6 @@ private: Gtk::VBox area_box; Gtk::VBox singleexport_box; -#if WITH_GTKMM_3_0 /* Custom size widgets */ Glib::RefPtr x0_adj; Glib::RefPtr x1_adj; @@ -312,21 +287,6 @@ private: Glib::RefPtr bmheight_adj; Glib::RefPtr xdpi_adj; Glib::RefPtr ydpi_adj; -#else - /* Custom size widgets */ - Gtk::Adjustment *x0_adj; - Gtk::Adjustment *x1_adj; - Gtk::Adjustment *y0_adj; - Gtk::Adjustment *y1_adj; - Gtk::Adjustment *width_adj; - Gtk::Adjustment *height_adj; - - /* Bitmap size widgets */ - Gtk::Adjustment *bmwidth_adj; - Gtk::Adjustment *bmheight_adj; - Gtk::Adjustment *xdpi_adj; - Gtk::Adjustment *ydpi_adj; -#endif Gtk::VBox size_box; Gtk::Label* bm_label; diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp index 042637d22..e8c1bf723 100644 --- a/src/ui/dialog/filedialogimpl-gtkmm.cpp +++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp @@ -754,16 +754,9 @@ FileOpenDialogImplGtk::~FileOpenDialogImplGtk() void FileOpenDialogImplGtk::addFilterMenu(Glib::ustring name, Glib::ustring pattern) { - -#if WITH_GTKMM_3_0 - Glib::RefPtr allFilter = Gtk::FileFilter::create(); + auto allFilter = Gtk::FileFilter::create(); allFilter->set_name(_(name.c_str())); allFilter->add_pattern(pattern); -#else - Gtk::FileFilter allFilter; - allFilter.set_name(_(name.c_str())); - allFilter.add_pattern(pattern); -#endif extensionMap[Glib::ustring(_("All Files"))] = NULL; add_filter(allFilter); } @@ -775,51 +768,27 @@ void FileOpenDialogImplGtk::createFilterMenu() } if (_dialogType == EXE_TYPES) { -#if WITH_GTKMM_3_0 - Glib::RefPtr allFilter = Gtk::FileFilter::create(); + auto allFilter = Gtk::FileFilter::create(); allFilter->set_name(_("All Files")); allFilter->add_pattern("*"); -#else - Gtk::FileFilter allFilter; - allFilter.set_name(_("All Files")); - allFilter.add_pattern("*"); -#endif extensionMap[Glib::ustring(_("All Files"))] = NULL; add_filter(allFilter); } else { -#if WITH_GTKMM_3_0 - Glib::RefPtr allInkscapeFilter = Gtk::FileFilter::create(); + auto allInkscapeFilter = Gtk::FileFilter::create(); allInkscapeFilter->set_name(_("All Inkscape Files")); - Glib::RefPtr allFilter = Gtk::FileFilter::create(); + auto allFilter = Gtk::FileFilter::create(); allFilter->set_name(_("All Files")); allFilter->add_pattern("*"); - Glib::RefPtr allImageFilter = Gtk::FileFilter::create(); + auto allImageFilter = Gtk::FileFilter::create(); allImageFilter->set_name(_("All Images")); - Glib::RefPtr allVectorFilter = Gtk::FileFilter::create(); + auto allVectorFilter = Gtk::FileFilter::create(); allVectorFilter->set_name(_("All Vectors")); - Glib::RefPtr allBitmapFilter = Gtk::FileFilter::create(); + auto allBitmapFilter = Gtk::FileFilter::create(); allBitmapFilter->set_name(_("All Bitmaps")); -#else - Gtk::FileFilter allInkscapeFilter; - allInkscapeFilter.set_name(_("All Inkscape Files")); - - Gtk::FileFilter allFilter; - allFilter.set_name(_("All Files")); - allFilter.add_pattern("*"); - - Gtk::FileFilter allImageFilter; - allImageFilter.set_name(_("All Images")); - - Gtk::FileFilter allVectorFilter; - allVectorFilter.set_name(_("All Vectors")); - - Gtk::FileFilter allBitmapFilter; - allBitmapFilter.set_name(_("All Bitmaps")); -#endif extensionMap[Glib::ustring(_("All Inkscape Files"))] = NULL; add_filter(allInkscapeFilter); @@ -854,29 +823,16 @@ void FileOpenDialogImplGtk::createFilterMenu() Glib::ustring uname(_(imod->get_filetypename())); -#if WITH_GTKMM_3_0 - Glib::RefPtr filter = Gtk::FileFilter::create(); + auto filter = Gtk::FileFilter::create(); filter->set_name(uname); filter->add_pattern(upattern); -#else - Gtk::FileFilter filter; - filter.set_name(uname); - filter.add_pattern(upattern); -#endif - add_filter(filter); extensionMap[uname] = imod; // g_message("ext %s:%s '%s'\n", ioext->name, ioext->mimetype, upattern.c_str()); -#if WITH_GTKMM_3_0 allInkscapeFilter->add_pattern(upattern); if (strncmp("image", imod->get_mimetype(), 5) == 0) allImageFilter->add_pattern(upattern); -#else - allInkscapeFilter.add_pattern(upattern); - if (strncmp("image", imod->get_mimetype(), 5) == 0) - allImageFilter.add_pattern(upattern); -#endif // uncomment this to find out all mime types supported by Inkscape import/open // g_print ("%s\n", imod->get_mimetype()); @@ -896,17 +852,9 @@ void FileOpenDialogImplGtk::createFilterMenu() strncmp("image/x-tga", imod->get_mimetype(), 11) == 0 || strncmp("image/x-pcx", imod->get_mimetype(), 11) == 0) { -#if WITH_GTKMM_3_0 allBitmapFilter->add_pattern(upattern); -#else - allBitmapFilter.add_pattern(upattern); -#endif } else { -#if WITH_GTKMM_3_0 allVectorFilter->add_pattern(upattern); -#else - allVectorFilter.add_pattern(upattern); -#endif } } } @@ -972,18 +920,13 @@ Glib::ustring FileOpenDialogImplGtk::getFilename(void) */ std::vector FileOpenDialogImplGtk::getFilenames() { -#if WITH_GTKMM_3_0 - std::vector result_tmp = get_filenames(); + auto result_tmp = get_filenames(); // Copy filenames to a vector of type Glib::ustring std::vector result; - for (std::vector::iterator it = result_tmp.begin(); it != result_tmp.end(); ++it) - result.push_back(*it); - -#else - std::vector result = get_filenames(); -#endif + for (auto it : result_tmp) + result.push_back(it); #ifdef WITH_GNOME_VFS if (result.empty() && gnome_vfs_initialized()) @@ -1170,13 +1113,8 @@ void FileSaveDialogImplGtk::fileTypeChangedCallback() // g_message("selected: %s\n", type.name.c_str()); extension = type.extension; -#if WITH_GTKMM_3_0 - Glib::RefPtr filter = Gtk::FileFilter::create(); + auto filter = Gtk::FileFilter::create(); filter->add_pattern(type.pattern); -#else - Gtk::FileFilter filter; - filter.add_pattern(type.pattern); -#endif set_filter(filter); updateNameAndExtension(); diff --git a/src/ui/dialog/filedialogimpl-win32.cpp b/src/ui/dialog/filedialogimpl-win32.cpp index cafc3be4f..02d77cba1 100644 --- a/src/ui/dialog/filedialogimpl-win32.cpp +++ b/src/ui/dialog/filedialogimpl-win32.cpp @@ -128,11 +128,7 @@ FileDialogBaseWin32::FileDialogBaseWin32(Gtk::Window &parent, Glib::RefPtr parentWindow = parent.get_window(); g_assert(parentWindow->gobj() != NULL); -#if WITH_GTKMM_3_0 _ownerHwnd = (HWND)gdk_win32_window_get_handle((GdkWindow*)parentWindow->gobj()); -#else - _ownerHwnd = (HWND)gdk_win32_drawable_get_handle((GdkDrawable*)parentWindow->gobj()); -#endif } FileDialogBaseWin32::~FileDialogBaseWin32() diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index 8141f7696..923993514 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -111,11 +111,7 @@ void FillAndStroke::setTargetDesktop(SPDesktop *desktop) } } -#if WITH_GTKMM_3_0 void FillAndStroke::_onSwitchPage(Gtk::Widget * /*page*/, guint pagenum) -#else -void FillAndStroke::_onSwitchPage(GtkNotebookPage * /*page*/, guint pagenum) -#endif { _savePagePref(pagenum); } @@ -132,24 +128,14 @@ void FillAndStroke::_layoutPageFill() { fillWdgt = Gtk::manage(sp_fill_style_widget_new()); - -#if WITH_GTKMM_3_0 _page_fill->table().attach(*fillWdgt, 0, 0, 1, 1); -#else - _page_fill->table().attach(*fillWdgt, 0, 1, 0, 1); -#endif } void FillAndStroke::_layoutPageStrokePaint() { strokeWdgt = Gtk::manage(sp_stroke_style_paint_widget_new()); - -#if WITH_GTKMM_3_0 _page_stroke_paint->table().attach(*strokeWdgt, 0, 0, 1, 1); -#else - _page_stroke_paint->table().attach(*strokeWdgt, 0, 1, 0, 1); -#endif } void @@ -158,12 +144,7 @@ FillAndStroke::_layoutPageStrokeStyle() //Gtk::Widget *strokeStyleWdgt = manage(Glib::wrap(sp_stroke_style_line_widget_new())); //Gtk::Widget *strokeStyleWdgt = static_cast(sp_stroke_style_line_widget_new()); strokeStyleWdgt = sp_stroke_style_line_widget_new(); - -#if WITH_GTKMM_3_0 _page_stroke_style->table().attach(*strokeStyleWdgt, 0, 0, 1, 1); -#else - _page_stroke_style->table().attach(*strokeStyleWdgt, 0, 1, 0, 1); -#endif } void diff --git a/src/ui/dialog/fill-and-stroke.h b/src/ui/dialog/fill-and-stroke.h index f2a6bf39d..67e9d60ed 100644 --- a/src/ui/dialog/fill-and-stroke.h +++ b/src/ui/dialog/fill-and-stroke.h @@ -64,11 +64,7 @@ protected: void _layoutPageStrokePaint(); void _layoutPageStrokeStyle(); void _savePagePref(guint page_num); -#if WITH_GTKMM_3_0 void _onSwitchPage(Gtk::Widget *page, guint pagenum); -#else - void _onSwitchPage(GtkNotebookPage *page, guint pagenum); -#endif private: FillAndStroke(FillAndStroke const &d); diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index d3ad5d1da..acf230b7f 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -22,9 +22,7 @@ #include "dialog-manager.h" #include -#if GTK_CHECK_VERSION(3,0,0) -# include -#endif +#include #include "ui/widget/spinbutton.h" @@ -319,15 +317,9 @@ public: set_tooltip_text(tip_text); } -#if WITH_GTKMM_3_0 Gdk::RGBA col; col.set_rgba_u(65535, 65535, 65535); set_rgba(col); -#else - Gdk::Color col; - col.set_rgb(65535, 65535, 65535); - set_color(col); -#endif } // Returns the color in 'rgb(r,g,b)' form. @@ -336,13 +328,8 @@ public: // no doubles here, so we can use the standard string stream. std::ostringstream os; -#if WITH_GTKMM_3_0 - const Gdk::RGBA c = get_rgba(); - const int r = c.get_red_u() / 257, g = c.get_green_u() / 257, b = c.get_blue_u() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256? -#else - const Gdk::Color c = get_color(); - const int r = c.get_red() / 257, g = c.get_green() / 257, b = c.get_blue() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256? -#endif + const auto c = get_rgba(); + const int r = c.get_red_u() / 257, g = c.get_green_u() / 257, b = c.get_blue_u() / 257;//TO-DO: verify this. This sounds a lot strange! shouldn't it be 256? os << "rgb(" << r << "," << g << "," << b << ")"; return os.str(); } @@ -359,15 +346,9 @@ public: } const int r = SP_RGBA32_R_U(i), g = SP_RGBA32_G_U(i), b = SP_RGBA32_B_U(i); -#if WITH_GTKMM_3_0 Gdk::RGBA col; col.set_rgba_u(r * 256, g * 256, b * 256); set_rgba(col); -#else - Gdk::Color col; - col.set_rgb(r * 256, g * 256, b * 256); - set_color(col); -#endif } }; @@ -1730,7 +1711,6 @@ Glib::PropertyProxy FilterEffectsDialog::CellRendererConnection::property return _primitive.get_proxy(); } -#if WITH_GTKMM_3_0 void FilterEffectsDialog::CellRendererConnection::get_preferred_width_vfunc(Gtk::Widget& widget, int& minimum_width, int& natural_width) const @@ -1764,27 +1744,6 @@ void FilterEffectsDialog::CellRendererConnection::get_preferred_height_for_width { get_preferred_height(widget, minimum_height, natural_height); } -#else -void FilterEffectsDialog::CellRendererConnection::get_size_vfunc( - Gtk::Widget& widget, const Gdk::Rectangle* /*cell_area*/, - int* x_offset, int* y_offset, int* width, int* height) const -{ - PrimitiveList& primlist = dynamic_cast(widget); - - if(x_offset) - (*x_offset) = 0; - if(y_offset) - (*y_offset) = 0; - if(width) - (*width) = size * primlist.primitive_count() + (primlist.get_input_type_width()) * 6; - if(height) { - // Scale the height depending on the number of inputs, unless it's - // the first primitive, in which case there are no connections - SPFilterPrimitive* prim = SP_FILTER_PRIMITIVE(_primitive.get_value()); - (*height) = size * input_count(prim); - } -} -#endif /*** PrimitiveList ***/ FilterEffectsDialog::PrimitiveList::PrimitiveList(FilterEffectsDialog& d) @@ -1792,13 +1751,8 @@ FilterEffectsDialog::PrimitiveList::PrimitiveList(FilterEffectsDialog& d) _in_drag(0), _observer(new Inkscape::XML::SignalObserver) { -#if WITH_GTKMM_3_0 d.signal_draw().connect(sigc::mem_fun(*this, &PrimitiveList::on_draw_signal)); signal_draw().connect(sigc::mem_fun(*this, &PrimitiveList::on_draw_signal)); -#else - d.signal_expose_event().connect(sigc::mem_fun(*this, &PrimitiveList::on_expose_signal)); - signal_expose_event().connect(sigc::mem_fun(*this, &PrimitiveList::on_expose_signal)); -#endif add_events(Gdk::POINTER_MOTION_MASK | Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK); @@ -1961,25 +1915,9 @@ void FilterEffectsDialog::PrimitiveList::remove_selected() } } -#if !WITH_GTKMM_3_0 -bool FilterEffectsDialog::PrimitiveList::on_expose_signal(GdkEventExpose * /*evt*/) -{ - bool result = false; - - if (get_is_drawable()) - { - Cairo::RefPtr cr = get_bin_window()->create_cairo_context(); - result = on_draw_signal(cr); - } - - return result; -} -#endif - bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtr & cr) { cr->set_line_width(1.0); -#if GTK_CHECK_VERSION(3,0,0) // In GTK+ 3, the draw function receives the widget window, not the // bin_window (i.e., just the area under the column headers). We // therefore translate the origin of our coordinate system to account for this @@ -1987,7 +1925,7 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrtranslate(x_origin, y_origin); - GtkStyleContext *sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); + auto sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); GdkRGBA bg_color, fg_color; gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_NORMAL, &bg_color); gtk_style_context_get_color(sc, GTK_STATE_FLAG_NORMAL, &fg_color); @@ -2005,9 +1943,6 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrchildren().size(); @@ -2026,25 +1961,15 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); cr->rectangle(x, 0, get_input_type_width(), vis.get_height()); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), &bg_color); cr->fill_preserve(); gdk_cairo_set_source_rgba(cr->cobj(), &fg_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->bg[GTK_STATE_NORMAL])); - cr->fill_preserve(); - gdk_cairo_set_source_color(cr->cobj(), &(style->text[GTK_STATE_NORMAL])); -#endif cr->move_to(x+get_input_type_width(), 0); cr->rotate_degrees(90); _vertical_layout->show_in_cairo_context(cr); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), &mid_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL])); -#endif cr->move_to(x, 0); cr->line_to(x, vis.get_height()); cr->stroke(); @@ -2061,24 +1986,16 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtr display = get_bin_window()->get_display(); - Glib::RefPtr dm = display->get_device_manager(); - Glib::RefPtr device = dm->get_client_pointer(); + auto display = get_bin_window()->get_display(); + auto dm = display->get_device_manager(); + auto device = dm->get_client_pointer(); get_bin_window()->get_device_position(device, mx, my, mask); -#else - get_bin_window()->get_pointer(mx, my, mask); -#endif // Outline the bottom of the connection area const int outline_x = x + fheight * (row_count - row_index); cr->save(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), &mid_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL])); -#endif cr->move_to(x, y + h); cr->line_to(outline_x, y + h); @@ -2101,17 +2018,10 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), inside && mask & GDK_BUTTON1_MASK ? &mid_color : &mid_color_active); -#else - gdk_cairo_set_source_color(cr->cobj(), - inside && mask & GDK_BUTTON1_MASK ? - &(style->dark[GTK_STATE_NORMAL]) : - &(style->dark[GTK_STATE_ACTIVE])); -#endif draw_connection_node(cr, con_poly, inside); @@ -2137,17 +2047,10 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), inside && mask & GDK_BUTTON1_MASK ? &mid_color : &mid_color_active); -#else - gdk_cairo_set_source_color(cr->cobj(), - inside && mask & GDK_BUTTON1_MASK ? - &(style->dark[GTK_STATE_NORMAL]) : - &(style->dark[GTK_STATE_ACTIVE])); -#endif draw_connection_node(cr, con_poly, inside); @@ -2170,17 +2073,10 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) gdk_cairo_set_source_rgba(cr->cobj(), inside && mask & GDK_BUTTON1_MASK ? &mid_color : &mid_color_active); -#else - gdk_cairo_set_source_color(cr->cobj(), - inside && mask & GDK_BUTTON1_MASK ? - &(style->dark[GTK_STATE_NORMAL]) : - &(style->dark[GTK_STATE_ACTIVE])); -#endif draw_connection_node(cr, con_poly, inside); @@ -2216,8 +2112,7 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtrsave(); -#if GTK_CHECK_VERSION(3,0,0) - GtkStyleContext *sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); + auto sc = gtk_widget_get_style_context(GTK_WIDGET(gobj())); GdkRGBA bg_color, fg_color; gtk_style_context_get_background_color(sc, GTK_STATE_FLAG_NORMAL, &bg_color); @@ -2227,9 +2122,6 @@ void FilterEffectsDialog::PrimitiveList::draw_connection(const Cairo::RefPtrcobj(), &mid_color); -#else - gdk_cairo_set_source_color(cr->cobj(), &(style->dark[GTK_STATE_NORMAL])); -#endif else cr->set_source_rgb(0.0, 0.0, 0.0); @@ -2669,8 +2557,7 @@ void FilterEffectsDialog::PrimitiveList::on_drag_end(const Glib::RefPtr a = dynamic_cast(get_parent())->get_vadjustment(); + auto a = dynamic_cast(get_parent())->get_vadjustment(); double v = a->get_value() + _autoscroll_y; if(v < 0) @@ -2679,25 +2566,13 @@ bool FilterEffectsDialog::PrimitiveList::on_scroll_timeout() v = a->get_upper() - a->get_page_size(); a->set_value(v); -#else - Gtk::Adjustment& a = *dynamic_cast(get_parent())->get_vadjustment(); - double v = a.get_value() + _autoscroll_y; - - if(v < 0) - v = 0; - if(v > a.get_upper() - a.get_page_size()) - v = a.get_upper() - a.get_page_size(); - - a.set_value(v); -#endif queue_draw(); } if(_autoscroll_x) { -#if WITH_GTKMM_3_0 - Glib::RefPtr a_h = dynamic_cast(get_parent())->get_hadjustment(); + auto a_h = dynamic_cast(get_parent())->get_hadjustment(); double h = a_h->get_value() + _autoscroll_x; if(h < 0) @@ -2706,18 +2581,6 @@ bool FilterEffectsDialog::PrimitiveList::on_scroll_timeout() h = a_h->get_upper() - a_h->get_page_size(); a_h->set_value(h); -#else - Gtk::Adjustment& a_h = *dynamic_cast(get_parent())->get_hadjustment(); - double h = a_h.get_value() + _autoscroll_x; - - if(h < 0) - h = 0; - if(h > a_h.get_upper() - a_h.get_page_size()) - h = a_h.get_upper() - a_h.get_page_size(); - - a_h.set_value(h); - -#endif queue_draw(); } @@ -2759,13 +2622,8 @@ FilterEffectsDialog::FilterEffectsDialog() _sizegroup->set_ignore_hidden(); // Initialize widget hierarchy -#if WITH_GTKMM_3_0 - Gtk::Paned* hpaned = Gtk::manage(new Gtk::Paned); + auto hpaned = Gtk::manage(new Gtk::Paned); _primitive_box = Gtk::manage(new Gtk::Paned); -#else - Gtk::HPaned* hpaned = Gtk::manage(new Gtk::HPaned); - _primitive_box = Gtk::manage(new Gtk::VPaned); -#endif _sw_infobox = Gtk::manage(new Gtk::ScrolledWindow); Gtk::ScrolledWindow* sw_prims = Gtk::manage(new Gtk::ScrolledWindow); diff --git a/src/ui/dialog/filter-effects-dialog.h b/src/ui/dialog/filter-effects-dialog.h index 7c715327e..eae0fc317 100644 --- a/src/ui/dialog/filter-effects-dialog.h +++ b/src/ui/dialog/filter-effects-dialog.h @@ -163,7 +163,6 @@ private: static const int size = 24; protected: -#if WITH_GTKMM_3_0 virtual void get_preferred_width_vfunc(Gtk::Widget& widget, int& minimum_width, int& natural_width) const; @@ -181,10 +180,6 @@ private: int width, int& minimum_height, int& natural_height) const; -#else - virtual void get_size_vfunc(Gtk::Widget& widget, const Gdk::Rectangle* cell_area, - int* x_offset, int* y_offset, int* width, int* height) const; -#endif private: // void* should be SPFilterPrimitive*, some weirdness with properties prevents this Glib::Property _primitive; @@ -211,9 +206,6 @@ private: protected: bool on_draw_signal(const Cairo::RefPtr &cr); -#if !WITH_GTKMM_3_0 - bool on_expose_signal(GdkEventExpose*); -#endif bool on_button_press_event(GdkEventButton*); bool on_motion_notify_event(GdkEventMotion*); @@ -283,11 +275,7 @@ private: Gtk::ScrolledWindow* _sw_infobox; // View/add primitives -#if WITH_GTKMM_3_0 Gtk::Paned* _primitive_box; -#else - Gtk::VPaned* _primitive_box; -#endif UI::Widget::ComboBoxEnum _add_primitive_type; Gtk::Button _add_primitive; diff --git a/src/ui/dialog/find.h b/src/ui/dialog/find.h index 4bcb900b6..94d635037 100644 --- a/src/ui/dialog/find.h +++ b/src/ui/dialog/find.h @@ -286,13 +286,7 @@ private: Gtk::Label status; UI::Widget::Button button_find; UI::Widget::Button button_replace; - -#if WITH_GTKMM_3_0 Gtk::ButtonBox box_buttons; -#else - Gtk::HButtonBox box_buttons; -#endif - Gtk::HBox hboxbutton_row; /** diff --git a/src/ui/dialog/floating-behavior.cpp b/src/ui/dialog/floating-behavior.cpp index 55ef0c5bb..20209e2c9 100644 --- a/src/ui/dialog/floating-behavior.cpp +++ b/src/ui/dialog/floating-behavior.cpp @@ -140,11 +140,7 @@ FloatingBehavior::create(Dialog &dialog) inline FloatingBehavior::operator Gtk::Widget &() { return *_d; } inline GtkWidget *FloatingBehavior::gobj() { return GTK_WIDGET(_d->gobj()); } inline Gtk::Box* FloatingBehavior::get_vbox() { -#if WITH_GTKMM_3_0 return _d->get_content_area(); -#else - return _d->get_vbox(); -#endif } inline void FloatingBehavior::present() { _d->present(); } inline void FloatingBehavior::hide() { _d->hide(); } @@ -155,12 +151,8 @@ inline void FloatingBehavior::move(int x, int y) { _d-> inline void FloatingBehavior::set_position(Gtk::WindowPosition position) { _d->set_position(position); } inline void FloatingBehavior::set_size_request(int width, int height) { _d->set_size_request(width, height); } inline void FloatingBehavior::size_request(Gtk::Requisition &requisition) { -#if WITH_GTKMM_3_0 Gtk::Requisition requisition_natural; _d->get_preferred_size(requisition, requisition_natural); -#else - requisition = _d->size_request(); -#endif } inline void FloatingBehavior::get_position(int &x, int &y) { _d->get_position(x, y); } inline void FloatingBehavior::get_size(int &width, int &height) { _d->get_size(width, height); } diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp index 56b001291..1453797de 100644 --- a/src/ui/dialog/glyphs.cpp +++ b/src/ui/dialog/glyphs.cpp @@ -19,13 +19,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - +#include #include #include @@ -342,12 +336,7 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : instanceConns(), desktopConns() { -#if WITH_GTKMM_3_0 - Gtk::Grid *table = new Gtk::Grid(); -#else - Gtk::Table *table = new Gtk::Table(3, 1, false); -#endif - + auto table = new Gtk::Grid(); _getContents()->pack_start(*Gtk::manage(table), Gtk::PACK_EXPAND_WIDGET); guint row = 0; @@ -360,29 +349,16 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : gtk_widget_set_size_request (fontsel, 0, 150); g_signal_connect( G_OBJECT(fontsel), "font_set", G_CALLBACK(fontChangeCB), this ); -#if WITH_GTKMM_3_0 table->attach(*Gtk::manage(Glib::wrap(fontsel)), 0, row, 3, 1); -#else - table->attach(*Gtk::manage(Glib::wrap(fontsel)), - 0, 3, row, row + 1, - Gtk::SHRINK|Gtk::FILL, Gtk::SHRINK|Gtk::FILL); -#endif - row++; // ------------------------------- { - Gtk::Label *label = new Gtk::Label(_("Script: ")); + auto label = new Gtk::Label(_("Script: ")); -#if WITH_GTKMM_3_0 table->attach( *Gtk::manage(label), 0, row, 1, 1); -#else - table->attach( *Gtk::manage(label), - 0, 1, row, row + 1, - Gtk::SHRINK, Gtk::SHRINK); -#endif scriptCombo = new Gtk::ComboBoxText(); for (std::map::iterator it = getScriptToName().begin(); it != getScriptToName().end(); ++it) @@ -396,14 +372,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : Gtk::Alignment *align = Gtk::manage(new Gtk::Alignment(Gtk::ALIGN_START, Gtk::ALIGN_START, 0.0, 0.0)); align->add(*Gtk::manage(scriptCombo)); -#if WITH_GTKMM_3_0 align->set_hexpand(); table->attach( *align, 1, row, 1, 1); -#else - table->attach( *align, - 1, 2, row, row + 1, - Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK); -#endif } row++; @@ -411,15 +381,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : // ------------------------------- { - Gtk::Label *label = new Gtk::Label(_("Range: ")); - -#if WITH_GTKMM_3_0 + auto label = new Gtk::Label(_("Range: ")); table->attach( *Gtk::manage(label), 0, row, 1, 1); -#else - table->attach( *Gtk::manage(label), - 0, 1, row, row + 1, - Gtk::SHRINK, Gtk::SHRINK); -#endif rangeCombo = new Gtk::ComboBoxText(); for ( std::vector::iterator it = getRanges().begin(); it != getRanges().end(); ++it ) { @@ -431,15 +394,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : instanceConns.push_back(conn); Gtk::Alignment *align = new Gtk::Alignment(Gtk::ALIGN_START, Gtk::ALIGN_START, 0.0, 0.0); align->add(*Gtk::manage(rangeCombo)); - -#if WITH_GTKMM_3_0 align->set_hexpand(); table->attach( *Gtk::manage(align), 1, row, 1, 1); -#else - table->attach( *Gtk::manage(align), - 1, 2, row, row + 1, - Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK); -#endif } row++; @@ -462,16 +418,9 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : Gtk::ScrolledWindow *scroller = new Gtk::ScrolledWindow(); scroller->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scroller->add(*Gtk::manage(iconView)); - -#if WITH_GTKMM_3_0 scroller->set_hexpand(); scroller->set_vexpand(); table->attach(*Gtk::manage(scroller), 0, row, 3, 1); -#else - table->attach(*Gtk::manage(scroller), - 0, 3, row, row + 1, - Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL); -#endif row++; @@ -501,15 +450,8 @@ GlyphsPanel::GlyphsPanel(gchar const *prefsPath) : insertBtn->set_sensitive(false); box->pack_end(*Gtk::manage(insertBtn), Gtk::PACK_SHRINK); - -#if WITH_GTKMM_3_0 box->set_hexpand(); table->attach( *Gtk::manage(box), 0, row, 3, 1); -#else - table->attach( *Gtk::manage(box), - 0, 3, row, row + 1, - Gtk::EXPAND|Gtk::FILL, Gtk::SHRINK); -#endif row++; @@ -591,12 +533,7 @@ void GlyphsPanel::insertText() if (entry->get_text_length() > 0) { glyphs = entry->get_text(); } else { - -#if WITH_GTKMM_3_0 - std::vector itemArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths itemArray = iconView->get_selected_items(); -#endif + auto itemArray = iconView->get_selected_items(); if (!itemArray.empty()) { Gtk::TreeModel::Path const & path = *itemArray.begin(); @@ -641,11 +578,7 @@ void GlyphsPanel::glyphActivated(Gtk::TreeModel::Path const & path) void GlyphsPanel::glyphSelectionChanged() { -#if WITH_GTKMM_3_0 - std::vector itemArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths itemArray = iconView->get_selected_items(); -#endif + auto itemArray = iconView->get_selected_items(); if (itemArray.empty()) { label->set_text(" "); diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 639e463ea..eaf4e8ec0 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -19,12 +19,7 @@ #include //for GTK_RESPONSE* types #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include <2geom/transforms.h> @@ -570,11 +565,7 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) : Parent(parent), XPadding(_("X:"), _("Horizontal spacing between columns."), UNIT_TYPE_LINEAR, "", "object-columns", &PaddingUnitMenu), YPadding(_("Y:"), _("Vertical spacing between rows."), XPadding, "", "object-rows", &PaddingUnitMenu), -#if WITH_GTKMM_3_0 PaddingTable(Gtk::manage(new Gtk::Grid())) -#else - PaddingTable(Gtk::manage(new Gtk::Table(2, 2, false))) -#endif { // bool used by spin button callbacks to stop loops where they change each other. updating = false; @@ -736,20 +727,11 @@ GridArrangeTab::GridArrangeTab(ArrangeDialog *parent) } PaddingTable->set_border_width(MARGIN); - -#if WITH_GTKMM_3_0 PaddingTable->set_row_spacing(MARGIN); PaddingTable->set_column_spacing(MARGIN); PaddingTable->attach(XPadding, 0, 0, 1, 1); PaddingTable->attach(PaddingUnitMenu, 1, 0, 1, 1); PaddingTable->attach(YPadding, 0, 1, 1, 1); -#else - PaddingTable->set_row_spacings(MARGIN); - PaddingTable->set_col_spacings(MARGIN); - PaddingTable->attach(XPadding, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - PaddingTable->attach(PaddingUnitMenu, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - PaddingTable->attach(YPadding, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif TileBox.pack_start(*PaddingTable, false, false, MARGIN); diff --git a/src/ui/dialog/grid-arrange-tab.h b/src/ui/dialog/grid-arrange-tab.h index a137d1694..891849f1a 100644 --- a/src/ui/dialog/grid-arrange-tab.h +++ b/src/ui/dialog/grid-arrange-tab.h @@ -111,12 +111,7 @@ private: Inkscape::UI::Widget::UnitMenu PaddingUnitMenu; Inkscape::UI::Widget::ScalarUnit XPadding; Inkscape::UI::Widget::ScalarUnit YPadding; - -#if WITH_GTKMM_3_0 Gtk::Grid *PaddingTable; -#else - Gtk::Table *PaddingTable; -#endif // BBox or manual spacing Gtk::VBox SpacingVBox; diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp index 556d77a28..eb0fce978 100644 --- a/src/ui/dialog/guides.cpp +++ b/src/ui/dialog/guides.cpp @@ -124,13 +124,8 @@ void GuidelinePropertiesDialog::_onOK() g_free((gpointer) name); -#if WITH_GTKMM_3_0 - const Gdk::RGBA c = _color.get_rgba(); + const auto c = _color.get_rgba(); unsigned r = c.get_red_u()/257, g = c.get_green_u()/257, b = c.get_blue_u()/257; -#else - const Gdk::Color c = _color.get_color(); - unsigned r = c.get_red()/257, g = c.get_green()/257, b = c.get_blue()/257; -#endif //TODO: why 257? verify this! _guide->set_color(r, g, b, true); @@ -171,15 +166,9 @@ void GuidelinePropertiesDialog::_setup() { add_button(Gtk::Stock::DELETE, -12); add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); + auto mainVBox = get_content_area(); _layout_table.set_row_spacing(4); _layout_table.set_column_spacing(4); -#else - Gtk::Box *mainVBox = get_vbox(); - _layout_table.set_spacings(4); - _layout_table.resize (3, 4); -#endif mainVBox->pack_start(_layout_table, false, false, 0); @@ -189,7 +178,6 @@ void GuidelinePropertiesDialog::_setup() { _label_descr.set_label("foo1"); _label_descr.set_alignment(0, 0.5); -#if WITH_GTKMM_3_0 _label_name.set_halign(Gtk::ALIGN_FILL); _label_name.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_label_name, 0, 0, 3, 1); @@ -207,19 +195,6 @@ void GuidelinePropertiesDialog::_setup() { _color.set_valign(Gtk::ALIGN_FILL); _color.set_hexpand(); _layout_table.attach(_color, 1, 3, 2, 1); -#else - _layout_table.attach(_label_name, - 0, 3, 0, 1, Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_label_descr, - 0, 3, 1, 2, Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_label_entry, - 1, 3, 2, 3, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_color, - 1, 3, 3, 4, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); -#endif // unitmenus /* fixme: We should allow percents here too, as percents of the canvas size */ @@ -238,7 +213,6 @@ void GuidelinePropertiesDialog::_setup() { _spin_button_y.setIncrements(1.0, 10.0); _spin_button_y.setRange(-1e6, 1e6); -#if WITH_GTKMM_3_0 _spin_button_x.set_halign(Gtk::ALIGN_FILL); _spin_button_x.set_valign(Gtk::ALIGN_FILL); _spin_button_x.set_hexpand(); @@ -252,22 +226,12 @@ void GuidelinePropertiesDialog::_setup() { _unit_menu.set_halign(Gtk::ALIGN_FILL); _unit_menu.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_unit_menu, 2, 4, 1, 1); -#else - _layout_table.attach(_spin_button_x, - 1, 2, 4, 5, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - _layout_table.attach(_spin_button_y, - 1, 2, 5, 6, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - _layout_table.attach(_unit_menu, - 2, 3, 4, 5, Gtk::FILL, Gtk::FILL); -#endif // angle spinbutton _spin_angle.setDigits(3); _spin_angle.setIncrements(1.0, 10.0); _spin_angle.setRange(-3600., 3600.); -#if WITH_GTKMM_3_0 _spin_angle.set_halign(Gtk::ALIGN_FILL); _spin_angle.set_valign(Gtk::ALIGN_FILL); _spin_angle.set_hexpand(); @@ -284,18 +248,6 @@ void GuidelinePropertiesDialog::_setup() { _locked_toggle.set_valign(Gtk::ALIGN_FILL); _locked_toggle.set_hexpand(); _layout_table.attach(_locked_toggle, 1, 8, 2, 1); -#else - _layout_table.attach(_spin_angle, - 1, 3, 6, 7, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - // mode radio button - _layout_table.attach(_relative_toggle, - 1, 3, 7, 8, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); - - // locked radio button - _layout_table.attach(_locked_toggle, - 1, 3, 8, 9, Gtk::EXPAND | Gtk::FILL, Gtk::FILL); -#endif _relative_toggle.signal_toggled().connect(sigc::mem_fun(*this, &GuidelinePropertiesDialog::_modeChanged)); _relative_toggle.set_active(_relative_toggle_status); @@ -348,15 +300,9 @@ void GuidelinePropertiesDialog::_setup() { // init name entry _label_entry.getEntry()->set_text(_guide->getLabel() ? _guide->getLabel() : ""); -#if WITH_GTKMM_3_0 Gdk::RGBA c; c.set_rgba(((_guide->getColor()>>24)&0xff) / 255.0, ((_guide->getColor()>>16)&0xff) / 255.0, ((_guide->getColor()>>8)&0xff) / 255.0); _color.set_rgba(c); -#else - Gdk::Color c; - c.set_rgb_p(((_guide->getColor()>>24)&0xff) / 255.0, ((_guide->getColor()>>16)&0xff) / 255.0, ((_guide->getColor()>>8)&0xff) / 255.0); - _color.set_color(c); -#endif _modeChanged(); // sets values of spinboxes. diff --git a/src/ui/dialog/guides.h b/src/ui/dialog/guides.h index 5dce0d6ed..25d32015c 100644 --- a/src/ui/dialog/guides.h +++ b/src/ui/dialog/guides.h @@ -16,12 +16,7 @@ #endif #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include #include @@ -71,12 +66,7 @@ private: SPDesktop *_desktop; SPGuide *_guide; -#if WITH_GTKMM_3_0 - Gtk::Grid _layout_table; -#else - Gtk::Table _layout_table; -#endif - + Gtk::Grid _layout_table; Gtk::Label _label_name; Gtk::Label _label_descr; Inkscape::UI::Widget::CheckButton _locked_toggle; diff --git a/src/ui/dialog/icon-preview.h b/src/ui/dialog/icon-preview.h index 8a6e19a25..caec7e3b5 100644 --- a/src/ui/dialog/icon-preview.h +++ b/src/ui/dialog/icon-preview.h @@ -66,13 +66,7 @@ private: gdouble minDelay; Gtk::VBox iconBox; - -#if WITH_GTKMM_3_0 Gtk::Paned splitter; -#else - Gtk::HPaned splitter; -#endif - Glib::ustring targetId; int hot; int numEntries; diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 6dd62d3bb..8a69ef8e1 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -86,12 +86,8 @@ InkscapePreferences::InkscapePreferences() _getContents()->add(*sb); show_all_children(); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; sb->get_preferred_size(sreq_natural, sreq); -#else - sreq = sb->size_request(); -#endif _sb_width = sreq.width; _getContents()->remove(*sb); delete sb; @@ -863,17 +859,10 @@ static void proofComboChanged( Gtk::ComboBoxText* combo ) } static void gamutColorChanged( Gtk::ColorButton* btn ) { -#if WITH_GTKMM_3_0 - Gdk::RGBA rgba = btn->get_rgba(); - gushort r = rgba.get_red_u(); - gushort g = rgba.get_green_u(); - gushort b = rgba.get_blue_u(); -#else - Gdk::Color color = btn->get_color(); - gushort r = color.get_red(); - gushort g = color.get_green(); - gushort b = color.get_blue(); -#endif + auto rgba = btn->get_rgba(); + auto r = rgba.get_red_u(); + auto g = rgba.get_green_u(); + auto b = rgba.get_blue_u(); gchar* tmp = g_strdup_printf("#%02x%02x%02x", (r >> 8), (g >> 8), (b >> 8) ); @@ -1043,13 +1032,8 @@ void InkscapePreferences::initPageIO() Glib::ustring colorStr = prefs->getString("/options/softproof/gamutcolor"); -#if WITH_GTKMM_3_0 Gdk::RGBA tmpColor( colorStr.empty() ? "#00ff00" : colorStr); _cms_gamutcolor.set_rgba( tmpColor ); -#else - Gdk::Color tmpColor( colorStr.empty() ? "#00ff00" : colorStr); - _cms_gamutcolor.set_color( tmpColor ); -#endif _page_cms.add_line( true, _("Out of gamut warning color:"), _cms_gamutcolor, "", _("Selects the color used for out of gamut warning"), false); @@ -1594,31 +1578,19 @@ void InkscapePreferences::initKeyboardShortcuts(Gtk::TreeModel::iterator iter_ui int row = 3; -#if WITH_GTKMM_3_0 scroller->set_hexpand(); scroller->set_vexpand(); _page_keyshortcuts.attach(*scroller, 0, row, 2, 1); -#else - _page_keyshortcuts.attach(*scroller, 0, 2, row, row+1, Gtk::EXPAND | Gtk::FILL, Gtk::EXPAND | Gtk::FILL); -#endif row++; -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *box_buttons = Gtk::manage(new Gtk::ButtonBox); -#else - Gtk::HButtonBox *box_buttons = Gtk::manage (new Gtk::HButtonBox); -#endif + auto box_buttons = Gtk::manage(new Gtk::ButtonBox); box_buttons->set_layout(Gtk::BUTTONBOX_END); box_buttons->set_spacing(4); -#if WITH_GTKMM_3_0 box_buttons->set_hexpand(); _page_keyshortcuts.attach(*box_buttons, 0, row, 3, 1); -#else - _page_keyshortcuts.attach(*box_buttons, 0, 3, row, row+1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK); -#endif UI::Widget::Button *kb_reset = Gtk::manage(new UI::Widget::Button(_("Reset"), _("Remove all your customized keyboard shortcuts, and revert to the shortcuts in the shortcut file listed above"))); box_buttons->pack_start(*kb_reset, true, true, 6); @@ -2051,12 +2023,8 @@ bool InkscapePreferences::SetMaxDialogSize(const Gtk::TreeModel::iterator& iter) _page_frame.add(*page); this->show_all_children(); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; this->get_preferred_size(sreq_natural, sreq); -#else - sreq = this->size_request(); -#endif _max_dialog_width=std::max(_max_dialog_width, sreq.width); _max_dialog_height=std::max(_max_dialog_height, sreq.height); _page_frame.remove(); diff --git a/src/ui/dialog/inkscape-preferences.h b/src/ui/dialog/inkscape-preferences.h index d1abcfc58..781b5e48e 100644 --- a/src/ui/dialog/inkscape-preferences.h +++ b/src/ui/dialog/inkscape-preferences.h @@ -97,11 +97,7 @@ enum { }; namespace Gtk { -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } namespace Inkscape { @@ -206,11 +202,7 @@ protected: UI::Widget::PrefCheckButton _scroll_space; UI::Widget::PrefCheckButton _wheel_zoom; -#if WITH_GTKMM_3_0 Gtk::Scale *_slider_snapping_delay; -#else - Gtk::HScale *_slider_snapping_delay; -#endif UI::Widget::PrefCheckButton _snap_indicator; UI::Widget::PrefCheckButton _snap_closest_only; diff --git a/src/ui/dialog/input.cpp b/src/ui/dialog/input.cpp index 8343cd6fe..e731ed3ff 100644 --- a/src/ui/dialog/input.cpp +++ b/src/ui/dialog/input.cpp @@ -33,13 +33,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - +#include #include #include #include @@ -431,13 +425,7 @@ private: Blink watcher; Gtk::CheckButton useExt; Gtk::Button save; - -#if WITH_GTKMM_3_0 Gtk::Paned pane; -#else - Gtk::HPaned pane; -#endif - Gtk::VBox detailsBox; Gtk::HBox titleFrame; Gtk::Label titleLabel; @@ -498,27 +486,14 @@ private: Inkscape::UI::Widget::Frame axisFrame; Gtk::ScrolledWindow treeScroller; Gtk::ScrolledWindow detailScroller; - -#if WITH_GTKMM_3_0 Gtk::Paned splitter; Gtk::Paned split2; -#else - Gtk::HPaned splitter; - Gtk::VPaned split2; -#endif - Gtk::Label devName; Gtk::Label devKeyCount; Gtk::Label devAxesCount; Gtk::ComboBoxText axesCombo; Gtk::ProgressBar axesValues[6]; - -#if WITH_GTKMM_3_0 Gtk::Grid axisTable; -#else - Gtk::Table axisTable; -#endif - Gtk::ComboBoxText buttonCombo; Gtk::ComboBoxText linkCombo; sigc::connection linkConnection; @@ -528,13 +503,7 @@ private: Gtk::Image testThumb; Gtk::Image testButtons[24]; Gtk::Image testAxes[8]; - -#if WITH_GTKMM_3_0 Gtk::Grid imageTable; -#else - Gtk::Table imageTable; -#endif - Gtk::EventBox testDetector; ConfPanel cfgPanel; @@ -620,20 +589,11 @@ InputDialogImpl::InputDialogImpl() : treeScroller(), detailScroller(), splitter(), -#if WITH_GTKMM_3_0 split2(Gtk::ORIENTATION_VERTICAL), axisTable(), -#else - split2(), - axisTable(11, 2), -#endif linkCombo(), topHolder(), -#if WITH_GTKMM_3_0 imageTable(), -#else - imageTable(8, 7), -#endif testDetector(), cfgPanel() { @@ -655,27 +615,16 @@ InputDialogImpl::InputDialogImpl() : testFrame.add(testDetector); testThumb.set(getPix(PIX_TABLET)); testThumb.set_padding(24, 24); - -#if WITH_GTKMM_3_0 testThumb.set_hexpand(); testThumb.set_vexpand(); imageTable.attach(testThumb, 0, 0, 8, 1); -#else - imageTable.attach(testThumb, 0, 8, 0, 1, ::Gtk::EXPAND, ::Gtk::EXPAND); -#endif { guint col = 0; guint row = 1; for ( guint num = 0; num < G_N_ELEMENTS(testButtons); num++ ) { testButtons[num].set(getPix(PIX_BUTTONS_NONE)); - -#if WITH_GTKMM_3_0 imageTable.attach(testButtons[num], col, row, 1, 1); -#else - imageTable.attach(testButtons[num], col, col + 1, row, row + 1, ::Gtk::FILL, ::Gtk::FILL); -#endif - col++; if (col > 7) { col = 0; @@ -686,13 +635,7 @@ InputDialogImpl::InputDialogImpl() : col = 0; for ( guint num = 0; num < G_N_ELEMENTS(testAxes); num++ ) { testAxes[num].set(getPix(PIX_AXIS_NONE)); - -#if WITH_GTKMM_3_0 imageTable.attach(testAxes[num], col * 2, row, 2, 1); -#else - imageTable.attach(testAxes[num], col * 2, (col + 1) * 2, row, row + 1, ::Gtk::FILL, ::Gtk::FILL); -#endif - col++; if (col > 3) { col = 0; @@ -730,45 +673,17 @@ InputDialogImpl::InputDialogImpl() : axisFrame.add(axisTable); Gtk::Label *lbl = Gtk::manage(new Gtk::Label(_("Link:"))); - -#if WITH_GTKMM_3_0 axisTable.attach(*lbl, 0, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif - linkCombo.append(_("None")); linkCombo.set_active_text(_("None")); linkCombo.set_sensitive(false); linkConnection = linkCombo.signal_changed().connect(sigc::mem_fun(*this, &InputDialogImpl::linkComboChanged)); - -#if WITH_GTKMM_3_0 axisTable.attach(linkCombo, 1, rowNum, 1, 1); -#else - axisTable.attach(linkCombo, 1, 2, rowNum, rowNum + 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif - rowNum++; - lbl = Gtk::manage(new Gtk::Label(_("Axes count:"))); - -#if WITH_GTKMM_3_0 axisTable.attach(*lbl, 0, rowNum, 1, 1); axisTable.attach(devAxesCount, 1, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::FILL, - ::Gtk::SHRINK); - axisTable.attach(devAxesCount, 1, 2, rowNum, rowNum + 1, - ::Gtk::SHRINK, - ::Gtk::SHRINK); -#endif - rowNum++; @@ -786,22 +701,11 @@ InputDialogImpl::InputDialogImpl() : for ( guint barNum = 0; barNum < static_cast(G_N_ELEMENTS(axesValues)); barNum++ ) { lbl = Gtk::manage(new Gtk::Label(_("axis:"))); - -#if WITH_GTKMM_3_0 lbl->set_hexpand(); axisTable.attach(*lbl, 0, rowNum, 1, 1); axesValues[barNum].set_hexpand(); axisTable.attach(axesValues[barNum], 1, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::EXPAND, - ::Gtk::SHRINK); - axisTable.attach(axesValues[barNum], 1, 2, rowNum, rowNum + 1, - ::Gtk::EXPAND, - ::Gtk::SHRINK); -#endif - axesValues[barNum].set_sensitive(false); rowNum++; @@ -811,17 +715,8 @@ InputDialogImpl::InputDialogImpl() : lbl = Gtk::manage(new Gtk::Label(_("Button count:"))); -#if WITH_GTKMM_3_0 axisTable.attach(*lbl, 0, rowNum, 1, 1); axisTable.attach(devKeyCount, 1, rowNum, 1, 1); -#else - axisTable.attach(*lbl, 0, 1, rowNum, rowNum+ 1, - ::Gtk::FILL, - ::Gtk::SHRINK); - axisTable.attach(devKeyCount, 1, 2, rowNum, rowNum + 1, - ::Gtk::SHRINK, - ::Gtk::SHRINK); -#endif rowNum++; @@ -837,13 +732,7 @@ InputDialogImpl::InputDialogImpl() : rowNum++; */ -#if WITH_GTKMM_3_0 axisTable.attach(keyVal, 0, rowNum, 2, 1); -#else - axisTable.attach(keyVal, 0, 2, rowNum, rowNum + 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif rowNum++; @@ -857,18 +746,9 @@ InputDialogImpl::InputDialogImpl() : // TODO: Extension event stuff has been removed from public API in GTK+ 3 // Need to check that this hasn't broken anything -#if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_extension_events( GTK_WIDGET(testDetector.gobj()), GDK_EXTENSION_EVENTS_ALL ); -#endif testDetector.add_events(Gdk::POINTER_MOTION_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK |Gdk::PROXIMITY_IN_MASK|Gdk::PROXIMITY_OUT_MASK|Gdk::SCROLL_MASK); -#if WITH_GTKMM_3_0 axisTable.attach(keyEntry, 0, rowNum, 2, 1); -#else - axisTable.attach(keyEntry, 0, 2, rowNum, rowNum + 1, - ::Gtk::FILL, - ::Gtk::SHRINK); -#endif rowNum++; @@ -1150,12 +1030,7 @@ InputDialogImpl::ConfPanel::ConfPanel() : useExt.set_active(Preferences::get()->getBool("/options/useextinput/value")); useExt.signal_toggled().connect(sigc::mem_fun(*this, &InputDialogImpl::ConfPanel::useExtToggled)); -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *buttonBox = Gtk::manage(new Gtk::ButtonBox); -#else - Gtk::HButtonBox *buttonBox = Gtk::manage (new Gtk::HButtonBox); -#endif - + auto buttonBox = Gtk::manage(new Gtk::ButtonBox); buttonBox->set_layout (Gtk::BUTTONBOX_END); //Gtk::Alignment *align = new Gtk::Alignment(Gtk::ALIGN_END, Gtk::ALIGN_START, 0, 0); buttonBox->add(save); @@ -1939,7 +1814,6 @@ bool InputDialogImpl::eventSnoop(GdkEvent* event) testThumb.set(getPix(PIX_ERASER)); break; } -#if WITH_GTKMM_3_0 /// \fixme GTK3 added new GDK_SOURCEs that should be handled here! case GDK_SOURCE_KEYBOARD: case GDK_SOURCE_TOUCHSCREEN: @@ -1947,7 +1821,6 @@ bool InputDialogImpl::eventSnoop(GdkEvent* event) g_warning("InputDialogImpl::eventSnoop : unhandled GDK_SOURCE type!"); break; } -#endif } updateTestButtons(key, hotButton); diff --git a/src/ui/dialog/layer-properties.cpp b/src/ui/dialog/layer-properties.cpp index 5d550ed48..6f5def886 100644 --- a/src/ui/dialog/layer-properties.cpp +++ b/src/ui/dialog/layer-properties.cpp @@ -40,22 +40,15 @@ namespace Dialogs { LayerPropertiesDialog::LayerPropertiesDialog() : _strategy(NULL), _desktop(NULL), _layer(NULL), _position_visible(false) { -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); + auto mainVBox = get_content_area(); _layout_table.set_row_spacing(4); _layout_table.set_column_spacing(4); -#else - Gtk::Box *mainVBox = get_vbox(); - _layout_table.set_spacings(4); - _layout_table.resize (1, 2); -#endif // Layer name widgets _layer_name_entry.set_activates_default(true); _layer_name_label.set_label(_("Layer name:")); _layer_name_label.set_alignment(1.0, 0.5); -#if WITH_GTKMM_3_0 _layer_name_label.set_halign(Gtk::ALIGN_FILL); _layer_name_label.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_layer_name_label, 0, 0, 1, 1); @@ -64,12 +57,6 @@ LayerPropertiesDialog::LayerPropertiesDialog() _layer_name_entry.set_valign(Gtk::ALIGN_FILL); _layer_name_entry.set_hexpand(); _layout_table.attach(_layer_name_entry, 1, 0, 1, 1); -#else - _layout_table.attach(_layer_name_label, - 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); - _layout_table.attach(_layer_name_entry, - 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); -#endif mainVBox->pack_start(_layout_table, true, true, 4); @@ -166,10 +153,6 @@ LayerPropertiesDialog::_setup_position_controls() { _layer_position_combo.set_cell_data_func(_label_renderer, sigc::mem_fun(*this, &LayerPropertiesDialog::_prepareLabelRenderer)); -#if !WITH_GTKMM_3_0 - _layout_table.resize (2, 2); -#endif - Gtk::ListStore::iterator row; row = _dropdown_list->append(); row->set_value(_dropdown_columns.position, LPOS_ABOVE); @@ -185,7 +168,6 @@ LayerPropertiesDialog::_setup_position_controls() { _layer_position_label.set_label(_("Position:")); _layer_position_label.set_alignment(1.0, 0.5); -#if WITH_GTKMM_3_0 _layer_position_combo.set_halign(Gtk::ALIGN_FILL); _layer_position_combo.set_valign(Gtk::ALIGN_FILL); _layer_position_combo.set_hexpand(); @@ -194,12 +176,6 @@ LayerPropertiesDialog::_setup_position_controls() { _layer_position_label.set_halign(Gtk::ALIGN_FILL); _layer_position_label.set_valign(Gtk::ALIGN_FILL); _layout_table.attach(_layer_position_label, 0, 1, 1, 1); -#else - _layout_table.attach(_layer_position_combo, - 1, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL); - _layout_table.attach(_layer_position_label, - 0, 1, 1, 2, Gtk::FILL, Gtk::FILL); -#endif show_all_children(); } @@ -254,16 +230,11 @@ LayerPropertiesDialog::_setup_layers_controls() { _layout_table.remove(_layer_name_entry); _layout_table.remove(_layer_name_label); -#if WITH_GTKMM_3_0 _scroller.set_halign(Gtk::ALIGN_FILL); _scroller.set_valign(Gtk::ALIGN_FILL); _scroller.set_hexpand(); _scroller.set_vexpand(); _layout_table.attach(_scroller, 0, 1, 2, 1); -#else - _layout_table.attach(_scroller, - 0, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::EXPAND); -#endif show_all_children(); } diff --git a/src/ui/dialog/layer-properties.h b/src/ui/dialog/layer-properties.h index c75a7f190..f62f22782 100644 --- a/src/ui/dialog/layer-properties.h +++ b/src/ui/dialog/layer-properties.h @@ -19,12 +19,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include #include @@ -102,12 +97,7 @@ protected: Gtk::Entry _layer_name_entry; Gtk::Label _layer_position_label; Gtk::ComboBox _layer_position_combo; - -#if WITH_GTKMM_3_0 Gtk::Grid _layout_table; -#else - Gtk::Table _layout_table; -#endif bool _position_visible; diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index 1c022ecad..77ced6d71 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -866,12 +866,8 @@ LayersPanel::LayersPanel() : _scroller.set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); _scroller.set_shadow_type(Gtk::SHADOW_IN); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; _scroller.get_preferred_size(sreq_natural, sreq); -#else - sreq = _scroller.size_request(); -#endif int minHeight = 70; if (sreq.height < minHeight) { // Set a min height to see the layers when used with Ubuntu liboverlay-scrollbar diff --git a/src/ui/dialog/layers.h b/src/ui/dialog/layers.h index 9cd2c3b92..893b31557 100644 --- a/src/ui/dialog/layers.h +++ b/src/ui/dialog/layers.h @@ -124,15 +124,9 @@ private: Gtk::TreeView _tree; Gtk::CellRendererText *_text_renderer; Gtk::TreeView::Column *_name_column; -#if WITH_GTKMM_3_0 Gtk::Box _buttonsRow; Gtk::Box _buttonsPrimary; Gtk::Box _buttonsSecondary; -#else - Gtk::HBox _buttonsRow; - Gtk::HBox _buttonsPrimary; - Gtk::HBox _buttonsSecondary; -#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp index c558eddaf..4346ebd3d 100644 --- a/src/ui/dialog/livepatheffect-add.cpp +++ b/src/ui/dialog/livepatheffect-add.cpp @@ -74,11 +74,7 @@ LivePathEffectAdd::LivePathEffectAdd() : add_button.set_use_underline(true); add_button.set_can_default(); -#if WITH_GTKMM_3_0 - Gtk::Box *mainVBox = get_content_area(); -#else - Gtk::Box *mainVBox = get_vbox(); -#endif + auto mainVBox = get_content_area(); mainVBox->pack_start(scrolled_window, true, true); add_action_widget(close_button, Gtk::RESPONSE_CLOSE); diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index 422ec10ae..f19652746 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -134,13 +134,6 @@ LivePathEffectEditor::LivePathEffectEditor() // Add toolbar items to toolbar toolbar_hbox.set_layout (Gtk::BUTTONBOX_END); - -#if !WITH_GTKMM_3_0 - // TODO: This has been removed from Gtkmm 3.0. Check that - // everything still looks OK! - toolbar_hbox.set_child_min_width( 16 ); -#endif - toolbar_hbox.add( button_add ); toolbar_hbox.set_child_secondary( button_add , true); toolbar_hbox.add( button_remove ); diff --git a/src/ui/dialog/livepatheffect-editor.h b/src/ui/dialog/livepatheffect-editor.h index 4aac25eaa..b69ee007a 100644 --- a/src/ui/dialog/livepatheffect-editor.h +++ b/src/ui/dialog/livepatheffect-editor.h @@ -112,11 +112,7 @@ private: void on_visibility_toggled( Glib::ustring const& str ); -#if WITH_GTKMM_3_0 Gtk::ButtonBox toolbar_hbox; -#else - Gtk::HButtonBox toolbar_hbox; -#endif Gtk::Button button_add; Gtk::Button button_remove; Gtk::Button button_up; diff --git a/src/ui/dialog/new-from-template.cpp b/src/ui/dialog/new-from-template.cpp index 74ec7111e..aed57871a 100644 --- a/src/ui/dialog/new-from-template.cpp +++ b/src/ui/dialog/new-from-template.cpp @@ -31,20 +31,12 @@ NewFromTemplate::NewFromTemplate() _main_widget = new TemplateLoadTab(this); -#if WITH_GTKMM_3_0 get_content_area()->pack_start(*_main_widget); -#else - get_vbox()->pack_start(*_main_widget); -#endif Gtk::Alignment *align; align = Gtk::manage(new Gtk::Alignment(Gtk::ALIGN_END, Gtk::ALIGN_CENTER, 0.0, 0.0)); -#if WITH_GTKMM_3_0 get_content_area()->pack_end(*align, Gtk::PACK_SHRINK); -#else - get_vbox()->pack_end(*align, Gtk::PACK_SHRINK); -#endif align->set_padding(0, 0, 0, 15); align->add(_create_template_button); diff --git a/src/ui/dialog/object-properties.cpp b/src/ui/dialog/object-properties.cpp index be46129c4..9e10bbbeb 100644 --- a/src/ui/dialog/object-properties.cpp +++ b/src/ui/dialog/object-properties.cpp @@ -40,12 +40,7 @@ #include "xml/repr.h" #include -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif - +#include namespace Inkscape { namespace UI { @@ -106,16 +101,9 @@ void ObjectProperties::_init() Gtk::Box *contents = _getContents(); contents->set_spacing(0); -#if WITH_GTKMM_3_0 - Gtk::Grid *grid_top = Gtk::manage(new Gtk::Grid()); + auto grid_top = Gtk::manage(new Gtk::Grid()); grid_top->set_row_spacing(4); grid_top->set_column_spacing(0); -#else - Gtk::Table *grid_top = Gtk::manage(new Gtk::Table(4, 4)); - grid_top->set_row_spacings(4); - grid_top->set_col_spacings(0); -#endif - grid_top->set_border_width(4); contents->pack_start(*grid_top, false, false, 0); @@ -124,29 +112,14 @@ void ObjectProperties::_init() /* Create the label for the object id */ _label_id.set_label(_label_id.get_label() + " "); _label_id.set_alignment(1, 0.5); - -#if WITH_GTKMM_3_0 _label_id.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_id, 0, 0, 1, 1); -#else - grid_top->attach(_label_id, 0, 1, 0, 1, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif - /* Create the entry box for the object id */ _entry_id.set_tooltip_text(_("The id= attribute (only letters, digits, and the characters .-_: allowed)")); _entry_id.set_max_length(64); - -#if WITH_GTKMM_3_0 _entry_id.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_entry_id, 1, 0, 1, 1); -#else - grid_top->attach(_entry_id, 1, 2, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_id.set_mnemonic_widget(_entry_id); @@ -160,29 +133,16 @@ void ObjectProperties::_init() _label_label.set_label(_label_label.get_label() + " "); _label_label.set_alignment(1, 0.5); -#if WITH_GTKMM_3_0 _label_label.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_label, 0, 1, 1, 1); -#else - grid_top->attach(_label_label, 0, 1, 1, 2, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif - /* Create the entry box for the object label */ _entry_label.set_tooltip_text(_("A freeform label for the object")); _entry_label.set_max_length(256); -#if WITH_GTKMM_3_0 _entry_label.set_hexpand(); _entry_label.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_entry_label, 1, 1, 1, 1); -#else - grid_top->attach(_entry_label, 1, 2, 1, 2, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_label.set_mnemonic_widget(_entry_label); @@ -194,28 +154,16 @@ void ObjectProperties::_init() _label_title.set_label(_label_title.get_label() + " "); _label_title.set_alignment (1, 0.5); -#if WITH_GTKMM_3_0 _label_title.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_title, 0, 2, 1, 1); -#else - grid_top->attach(_label_title, 0, 1, 2, 3, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif /* Create the entry box for the object title */ _entry_title.set_sensitive (FALSE); _entry_title.set_max_length (256); -#if WITH_GTKMM_3_0 _entry_title.set_hexpand(); _entry_title.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_entry_title, 1, 2, 1, 1); -#else - grid_top->attach(_entry_title, 1, 2, 2, 3, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_title.set_mnemonic_widget(_entry_title); // pressing enter in the label field is the same as clicking Set: @@ -244,14 +192,8 @@ void ObjectProperties::_init() _label_image_rendering.set_label(_label_image_rendering.get_label() + " "); _label_image_rendering.set_alignment(1, 0.5); -#if WITH_GTKMM_3_0 _label_image_rendering.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_label_image_rendering, 0, 3, 1, 1); -#else - grid_top->attach(_label_image_rendering, 0, 1, 3, 4, - Gtk::SHRINK | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif /* Create the combo box text for the 'image-rendering' property */ _combo_image_rendering.append( "auto" ); @@ -259,14 +201,8 @@ void ObjectProperties::_init() _combo_image_rendering.append( "optimizeSpeed" ); _combo_image_rendering.set_tooltip_text(_("The 'image-rendering' property can influence how a bitmap is up-scaled:\n\t'auto' no preference;\n\t'optimizeQuality' smooth;\n\t'optimizeSpeed' blocky.\nNote that this behaviour is not defined in the SVG 1.1 specification and not all browsers follow this interpretation.")); -#if WITH_GTKMM_3_0 _combo_image_rendering.set_valign(Gtk::ALIGN_CENTER); grid_top->attach(_combo_image_rendering, 1, 3, 1, 1); -#else - grid_top->attach(_combo_image_rendering, 1, 2, 3, 4, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _label_image_rendering.set_mnemonic_widget(_combo_image_rendering); @@ -278,60 +214,36 @@ void ObjectProperties::_init() Gtk::HBox *hb_checkboxes = Gtk::manage(new Gtk::HBox()); contents->pack_start(*hb_checkboxes, FALSE, FALSE, 0); -#if WITH_GTKMM_3_0 - Gtk::Grid *grid_cb = Gtk::manage(new Gtk::Grid()); + auto grid_cb = Gtk::manage(new Gtk::Grid()); grid_cb->set_row_homogeneous(); grid_cb->set_column_homogeneous(true); -#else - Gtk::Table *grid_cb = Gtk::manage(new Gtk::Table(1, 2, true)); -#endif grid_cb->set_border_width(4); hb_checkboxes->pack_start(*grid_cb, true, true, 0); /* Hide */ _cb_hide.set_tooltip_text (_("Check to make the object invisible")); - -#if WITH_GTKMM_3_0 _cb_hide.set_hexpand(); _cb_hide.set_valign(Gtk::ALIGN_CENTER); grid_cb->attach(_cb_hide, 0, 0, 1, 1); -#else - grid_cb->attach(_cb_hide, 0, 1, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _cb_hide.signal_toggled().connect(sigc::mem_fun(this, &ObjectProperties::_hiddenToggled)); /* Lock */ // TRANSLATORS: "Lock" is a verb here _cb_lock.set_tooltip_text(_("Check to make the object insensitive (not selectable by mouse)")); - -#if WITH_GTKMM_3_0 _cb_lock.set_hexpand(); _cb_lock.set_valign(Gtk::ALIGN_CENTER); grid_cb->attach(_cb_lock, 1, 0, 1, 1); -#else - grid_cb->attach(_cb_lock, 1, 2, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif _cb_lock.signal_toggled().connect(sigc::mem_fun(this, &ObjectProperties::_sensitivityToggled)); /* Button for setting the object's id, label, title and description. */ Gtk::Button *btn_set = Gtk::manage(new Gtk::Button(_("_Set"), 1)); -#if WITH_GTKMM_3_0 btn_set->set_hexpand(); btn_set->set_valign(Gtk::ALIGN_CENTER); grid_cb->attach(*btn_set, 2, 0, 1, 1); -#else - grid_cb->attach(*btn_set, 2, 3, 0, 1, - Gtk::EXPAND | Gtk::FILL, - Gtk::AttachOptions(), 0, 0 ); -#endif btn_set->signal_clicked().connect(sigc::mem_fun(this, &ObjectProperties::_labelChanged)); diff --git a/src/ui/dialog/object-properties.h b/src/ui/dialog/object-properties.h index dc28c0bad..8551d5fca 100644 --- a/src/ui/dialog/object-properties.h +++ b/src/ui/dialog/object-properties.h @@ -50,11 +50,7 @@ class SPDesktop; class SPItem; namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 27694a9ac..e4b48d10b 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -511,11 +511,7 @@ void ObjectsPanel::_setCompositingValues(SPItem *item) _blurConnection.block(); //Set the opacity -#if WITH_GTKMM_3_0 _opacity_adjustment->set_value((item->style->opacity.set ? SP_SCALE24_TO_FLOAT(item->style->opacity.value) : 1) * _opacity_adjustment->get_upper()); -#else - _opacity_adjustment.set_value((item->style->opacity.set ? SP_SCALE24_TO_FLOAT(item->style->opacity.value) : 1) * _opacity_adjustment.get_upper()); -#endif SPFeBlend *spblend = NULL; SPGaussianBlur *spblur = NULL; if (item->style->getFilter()) @@ -1481,11 +1477,7 @@ void ObjectsPanel::_opacityChangedIter(const Gtk::TreeIter& iter) if (item) { item->style->opacity.set = TRUE; -#if WITH_GTKMM_3_0 item->style->opacity.value = SP_SCALE24_FROM_FLOAT(_opacity_adjustment->get_value() / _opacity_adjustment->get_upper()); -#else - item->style->opacity.value = SP_SCALE24_FROM_FLOAT(_opacity_adjustment.get_value() / _opacity_adjustment.get_upper()); -#endif item->updateRepr(SP_OBJECT_WRITE_NO_CHILDREN | SP_OBJECT_WRITE_EXT); } } @@ -1628,11 +1620,7 @@ ObjectsPanel::ObjectsPanel() : _opacity_vbox(false, 0), _opacity_label(_("Opacity:")), _opacity_label_unit(_("%")), -#if WITH_GTKMM_3_0 _opacity_adjustment(Gtk::Adjustment::create(100.0, 0.0, 100.0, 1.0, 1.0, 0.0)), -#else - _opacity_adjustment(100.0, 0.0, 100.0, 1.0, 1.0, 0.0), -#endif _opacity_hscale(_opacity_adjustment), _opacity_spin_button(_opacity_adjustment, 0.01, 1), _fe_cb(UI::Widget::SimpleFilterModifier::BLEND), @@ -1762,12 +1750,8 @@ ObjectsPanel::ObjectsPanel() : _scroller.set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); _scroller.set_shadow_type(Gtk::SHADOW_IN); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; _scroller.get_preferred_size(sreq_natural, sreq); -#else - sreq = _scroller.size_request(); -#endif int minHeight = 70; if (sreq.height < minHeight) { // Set a min height to see the layers when used with Ubuntu liboverlay-scrollbar @@ -1800,13 +1784,8 @@ ObjectsPanel::ObjectsPanel() : _opacity_hbox.pack_start(_opacity_spin_button, false, false, 0); _opacity_hbox.pack_start(_opacity_label_unit, false, false, 3); _opacity_hscale.set_draw_value(false); -#if WITH_GTKMM_3_0 _opacityConnection = _opacity_adjustment->signal_value_changed().connect(sigc::mem_fun(*this, &ObjectsPanel::_opacityValueChanged)); _opacity_label.set_mnemonic_widget(_opacity_hscale); -#else - _opacityConnection = _opacity_adjustment.signal_value_changed().connect(sigc::mem_fun(*this, &ObjectsPanel::_opacityValueChanged)); - _opacity_label.set_mnemonic_widget(_opacity_hscale); -#endif //Keep the labels aligned GtkSizeGroup *labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); diff --git a/src/ui/dialog/objects.h b/src/ui/dialog/objects.h index 9b9a6025a..018f9191f 100644 --- a/src/ui/dialog/objects.h +++ b/src/ui/dialog/objects.h @@ -134,15 +134,9 @@ private: Gtk::TreeView _tree; Gtk::CellRendererText *_text_renderer; Gtk::TreeView::Column *_name_column; -#if WITH_GTKMM_3_0 Gtk::Box _buttonsRow; Gtk::Box _buttonsPrimary; Gtk::Box _buttonsSecondary; -#else - Gtk::HBox _buttonsRow; - Gtk::HBox _buttonsPrimary; - Gtk::HBox _buttonsSecondary; -#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; @@ -161,11 +155,7 @@ private: Gtk::HBox _opacity_hbox; Gtk::Label _opacity_label; Gtk::Label _opacity_label_unit; -#if WITH_GTKMM_3_0 Glib::RefPtr _opacity_adjustment; -#else - Gtk::Adjustment _opacity_adjustment; -#endif Gtk::HScale _opacity_hscale; Inkscape::UI::Widget::SpinButton _opacity_spin_button; diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index f2ee79d06..9e9037fdd 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -316,27 +316,10 @@ LoadingBox::LoadingBox() : Gtk::EventBox() draw_spinner = false; spinner_step = 0; -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &LoadingBox::_on_draw), false); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &LoadingBox::_on_expose_event), false); -#endif -} - -#if !WITH_GTKMM_3_0 -bool LoadingBox::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); } -#endif -bool LoadingBox::_on_draw(const Cairo::RefPtr & -#if WITH_GTKMM_3_0 -cr -#endif -) +bool LoadingBox::_on_draw(const Cairo::RefPtr &cr) { // Draw shadow int x = get_allocation().get_x(); @@ -344,27 +327,14 @@ cr int width = get_allocation().get_width(); int height = get_allocation().get_height(); -#if WITH_GTKMM_3_0 get_style_context()->render_frame(cr, x, y, width, height); -#else - get_style()->paint_shadow(get_window(), get_state(), Gtk::SHADOW_IN, - Gdk::Rectangle(x, y, width, height), - *this, Glib::ustring("viewport"), x, y, width, height); -#endif if (draw_spinner) { int spinner_size = 16; int spinner_x = x + (width - spinner_size) / 2; int spinner_y = y + (height - spinner_size) / 2; -#if WITH_GTKMM_3_0 get_style_context()->render_activity(cr, spinner_x, spinner_y, spinner_size, spinner_size); -#else - gtk_paint_spinner(gtk_widget_get_style(GTK_WIDGET(gobj())), - gtk_widget_get_window(GTK_WIDGET(gobj())), - gtk_widget_get_state(GTK_WIDGET(gobj())), NULL, GTK_WIDGET(gobj()), - NULL, spinner_step, spinner_x, spinner_y, spinner_size, spinner_size); -#endif } return false; @@ -434,11 +404,7 @@ PreviewWidget::PreviewWidget() : Gtk::VBox(false, 12) box_loading->set_size_request(90, 90); set_border_width(12); -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &PreviewWidget::_on_draw), false); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &PreviewWidget::_on_expose_event), false); -#endif clear(); } @@ -482,15 +448,6 @@ void PreviewWidget::clear() image->hide(); } -#if !WITH_GTKMM_3_0 -bool PreviewWidget::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); -} -#endif - bool PreviewWidget::_on_draw(const Cairo::RefPtr& cr) { // Draw background @@ -499,16 +456,10 @@ bool PreviewWidget::_on_draw(const Cairo::RefPtr& cr) int width = get_allocation().get_width(); int height = get_allocation().get_height(); -#if WITH_GTKMM_3_0 Gdk::RGBA background_fill; get_style_context()->lookup_color("base_color", background_fill); cr->rectangle(x, y, width, height); Gdk::Cairo::set_source_rgba(cr, background_fill); -#else - Gdk::Color background_fill = get_style()->get_base(get_state()); - cr->rectangle(x, y, width, height); - Gdk::Cairo::set_source_color(cr, background_fill); -#endif cr->fill(); @@ -573,57 +524,12 @@ void StatusWidget::end_process() clear(); } -#if !GTK_CHECK_VERSION(3,0,0) -SearchEntry::SearchEntry() : Gtk::Entry() -{ - signal_changed().connect(sigc::mem_fun(*this, &SearchEntry::_on_changed)); - signal_icon_press().connect(sigc::mem_fun(*this, &SearchEntry::_on_icon_pressed)); - - set_icon_from_icon_name(INKSCAPE_ICON("edit-find"), Gtk::ENTRY_ICON_PRIMARY); - gtk_entry_set_icon_from_icon_name(gobj(), GTK_ENTRY_ICON_SECONDARY, NULL); -} - -void SearchEntry::_on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* /*event*/) -{ - if (icon_position == Gtk::ENTRY_ICON_SECONDARY) { - grab_focus(); - delete_text(0, -1); - } else if (icon_position == Gtk::ENTRY_ICON_PRIMARY) { - select_region(0, -1); - grab_focus(); - } -} - -void SearchEntry::_on_changed() -{ - if (get_text().empty()) { - gtk_entry_set_icon_from_icon_name(gobj(), GTK_ENTRY_ICON_SECONDARY, NULL); - } else { - set_icon_from_icon_name(INKSCAPE_ICON("edit-clear"), Gtk::ENTRY_ICON_SECONDARY); - } -} -#endif - - BaseBox::BaseBox() : Gtk::EventBox() { -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &BaseBox::_on_draw), false); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &BaseBox::_on_expose_event), false); -#endif set_visible_window(false); } -#if !WITH_GTKMM_3_0 -bool BaseBox::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); -} -#endif - bool BaseBox::_on_draw(const Cairo::RefPtr& cr) { // Draw background and shadow @@ -632,23 +538,12 @@ bool BaseBox::_on_draw(const Cairo::RefPtr& cr) int width = get_allocation().get_width(); int height = get_allocation().get_height(); -#if WITH_GTKMM_3_0 Gdk::RGBA background_fill; get_style_context()->lookup_color("base_color", background_fill); cr->rectangle(x, y, width, height); Gdk::Cairo::set_source_rgba(cr, background_fill); cr->fill(); get_style_context()->render_frame(cr, x, y, width, height); -#else - Gdk::Color background_fill = get_style()->get_base(get_state()); - cr->rectangle(x, y, width, height); - Gdk::Cairo::set_source_color(cr, background_fill); - cr->fill(); - - get_style()->paint_shadow(get_window(), get_state(), Gtk::SHADOW_IN, - Gdk::Rectangle(x, y, width, height), - *this, Glib::ustring("viewport"), x, y, width, height); -#endif return false; } @@ -665,23 +560,10 @@ LogoArea::LogoArea() : Gtk::EventBox() draw_logo = false; } -#if WITH_GTKMM_3_0 signal_draw().connect(sigc::mem_fun(*this, &LogoArea::_on_draw)); -#else - signal_expose_event().connect(sigc::mem_fun(*this, &LogoArea::_on_expose_event)); -#endif set_visible_window(false); } -#if !WITH_GTKMM_3_0 -bool LogoArea::_on_expose_event(GdkEventExpose* /*event*/) -{ - Cairo::RefPtr cr = get_window()->create_cairo_context(); - - return _on_draw(cr); -} -#endif - bool LogoArea::_on_draw(const Cairo::RefPtr& cr) { if (draw_logo) { @@ -692,16 +574,9 @@ bool LogoArea::_on_draw(const Cairo::RefPtr& cr) int x_logo = x + (width - 220) / 2; int y_logo = y + (height - 76) / 2; - // Draw logo, we mask [read fill] it with the mid colour from the - // user's GTK theme -#if WITH_GTKMM_3_0 - // For GTK+ 3, use grey + // Draw logo, we mask [read fill] it with grey Gdk::RGBA logo_fill("grey"); Gdk::Cairo::set_source_rgba(cr, logo_fill); -#else - Gdk::Color logo_fill = get_style()->get_mid(get_state()); - Gdk::Cairo::set_source_color(cr, logo_fill); -#endif cr->mask(logo_mask, x_logo, y_logo); } @@ -1179,16 +1054,9 @@ void ImportDialog::update_label_no_search_results() Glib::ustring msg_two = _("Please make sure all keywords are spelled correctly," " or try again with different keywords."); -#if WITH_GTKMM_3_0 - Glib::ustring markup = Glib::ustring::compose( + auto markup = Glib::ustring::compose( "%1\n%2", msg_one, msg_two); -#else - Gdk::Color grey = entry_search->get_style()->get_text_aa(entry_search->get_state()); - Glib::ustring markup = Glib::ustring::compose( - "%1\n%3", - msg_one, grey.to_string(), msg_two); -#endif label_not_found->set_markup(markup); } @@ -1208,33 +1076,17 @@ ImportDialog::ImportDialog(Gtk::Window& parent_window, FileDialogType file_types dialogType = file_types; // Creation - Gtk::VBox *vbox = new Gtk::VBox(false, 0); - -#if WITH_GTKMM_3_0 - Gtk::ButtonBox *hbuttonbox_bottom = new Gtk::ButtonBox(); -#else - Gtk::HButtonBox *hbuttonbox_bottom = new Gtk::HButtonBox(); -#endif - - Gtk::HBox *hbox_bottom = new Gtk::HBox(false, 12); + auto vbox = new Gtk::VBox(false, 0); + auto hbuttonbox_bottom = new Gtk::ButtonBox(); + auto hbox_bottom = new Gtk::HBox(false, 12); BaseBox *basebox_logo = new BaseBox(); BaseBox *basebox_no_search_results = new BaseBox(); label_not_found = new Gtk::Label(); label_description = new Gtk::Label(); - -#if GTK_CHECK_VERSION(3,0,0) entry_search = new Gtk::SearchEntry(); -#else - entry_search = new SearchEntry(); -#endif - button_search = new Gtk::Button(_("Search")); -#if WITH_GTKMM_3_0 - Gtk::ButtonBox* hbuttonbox_search = new Gtk::ButtonBox(); -#else - Gtk::HButtonBox* hbuttonbox_search = new Gtk::HButtonBox(); -#endif + auto hbuttonbox_search = new Gtk::ButtonBox(); Gtk::ScrolledWindow* scrolledwindow_preview = new Gtk::ScrolledWindow(); preview_files = new PreviewWidget(); diff --git a/src/ui/dialog/ocaldialogs.h b/src/ui/dialog/ocaldialogs.h index 9de24d821..db3c60786 100644 --- a/src/ui/dialog/ocaldialogs.h +++ b/src/ui/dialog/ocaldialogs.h @@ -17,19 +17,16 @@ # include #endif -//Gtk includes +// Gtkmm includes #include #include #include #include +#include #include #include -#if GTK_CHECK_VERSION(3,0,0) -# include -#endif - #include //Inkscape includes @@ -283,10 +280,6 @@ private: sigc::connection timeout; bool draw_spinner; -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif - bool _on_draw(const Cairo::RefPtr& cr); bool on_timeout(); }; @@ -310,10 +303,6 @@ private: WrapLabel* label_description; WrapLabel* label_time; -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif - bool _on_draw(const Cairo::RefPtr& cr); }; @@ -336,21 +325,6 @@ public: Gtk::Label* label; }; -#if !GTK_CHECK_VERSION(3,0,0) -/** - * A Gtk::Entry with search & clear icons - */ -class SearchEntry : public Gtk::Entry -{ -public: - SearchEntry(); - -private: - void _on_icon_pressed(Gtk::EntryIconPosition icon_position, const GdkEventButton* event); - void _on_changed(); -}; -#endif - /** * A box which paints an overlay of the OCAL logo */ @@ -359,9 +333,6 @@ class LogoArea : public Gtk::EventBox public: LogoArea(); private: -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif bool _on_draw(const Cairo::RefPtr& cr); bool draw_logo; Cairo::RefPtr logo_mask; @@ -375,9 +346,6 @@ class BaseBox : public Gtk::EventBox public: BaseBox(); private: -#if !WITH_GTKMM_3_0 - bool _on_expose_event(GdkEventExpose* event); -#endif bool _on_draw(const Cairo::RefPtr& cr); }; @@ -459,12 +427,7 @@ protected: private: Glib::ustring filename_image; Glib::ustring filename_thumbnail; - -#if GTK_CHECK_VERSION(3,0,0) Gtk::SearchEntry *entry_search; -#else - SearchEntry *entry_search; -#endif LogoArea *drawingarea_logo; SearchResultList *list_results; diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp index 5ec1285c1..5c588ebac 100644 --- a/src/ui/dialog/polar-arrange-tab.cpp +++ b/src/ui/dialog/polar-arrange-tab.cpp @@ -33,11 +33,7 @@ namespace Dialog { PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) : parent(parent_), -#if WITH_GTKMM_3_0 parametersTable(), -#else - parametersTable(3, 3, false), -#endif centerY("", C_("Polar arrange tab", "Y coordinate of the center"), UNIT_TYPE_LINEAR), centerX("", C_("Polar arrange tab", "X coordinate of the center"), centerY), radiusY("", C_("Polar arrange tab", "Y coordinate of the radius"), UNIT_TYPE_LINEAR), @@ -81,11 +77,7 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) pack_start(arrangeOnParametersRadio, false, false); centerLabel.set_text(C_("Polar arrange tab", "Center X/Y:")); -#if WITH_GTKMM_3_0 parametersTable.attach(centerLabel, 0, 0, 1, 1); -#else - parametersTable.attach(centerLabel, 0, 1, 0, 1, Gtk::FILL); -#endif centerX.setDigits(2); centerX.setIncrements(0.2, 0); centerX.setRange(-10000, 10000); @@ -94,20 +86,11 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) centerY.setIncrements(0.2, 0); centerY.setRange(-10000, 10000); centerY.setValue(0, "px"); -#if WITH_GTKMM_3_0 parametersTable.attach(centerX, 1, 0, 1, 1); parametersTable.attach(centerY, 2, 0, 1, 1); -#else - parametersTable.attach(centerX, 1, 2, 0, 1, Gtk::FILL); - parametersTable.attach(centerY, 2, 3, 0, 1, Gtk::FILL); -#endif radiusLabel.set_text(C_("Polar arrange tab", "Radius X/Y:")); -#if WITH_GTKMM_3_0 parametersTable.attach(radiusLabel, 0, 1, 1, 1); -#else - parametersTable.attach(radiusLabel, 0, 1, 1, 2, Gtk::FILL); -#endif radiusX.setDigits(2); radiusX.setIncrements(0.2, 0); radiusX.setRange(0.001, 10000); @@ -116,20 +99,11 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) radiusY.setIncrements(0.2, 0); radiusY.setRange(0.001, 10000); radiusY.setValue(100, "px"); -#if WITH_GTKMM_3_0 parametersTable.attach(radiusX, 1, 1, 1, 1); parametersTable.attach(radiusY, 2, 1, 1, 1); -#else - parametersTable.attach(radiusX, 1, 2, 1, 2, Gtk::FILL); - parametersTable.attach(radiusY, 2, 3, 1, 2, Gtk::FILL); -#endif angleLabel.set_text(_("Angle X/Y:")); -#if WITH_GTKMM_3_0 parametersTable.attach(angleLabel, 0, 2, 1, 1); -#else - parametersTable.attach(angleLabel, 0, 1, 2, 3, Gtk::FILL); -#endif angleX.setDigits(2); angleX.setIncrements(0.2, 0); angleX.setRange(-10000, 10000); @@ -138,13 +112,8 @@ PolarArrangeTab::PolarArrangeTab(ArrangeDialog *parent_) angleY.setIncrements(0.2, 0); angleY.setRange(-10000, 10000); angleY.setValue(180, "°"); -#if WITH_GTKMM_3_0 parametersTable.attach(angleX, 1, 2, 1, 1); parametersTable.attach(angleY, 2, 2, 1, 1); -#else - parametersTable.attach(angleX, 1, 2, 2, 3, Gtk::FILL); - parametersTable.attach(angleY, 2, 3, 2, 3, Gtk::FILL); -#endif pack_start(parametersTable, false, false); rotateObjectsCheckBox.set_label(_("Rotate objects")); diff --git a/src/ui/dialog/polar-arrange-tab.h b/src/ui/dialog/polar-arrange-tab.h index f7d7bf11f..1a4e04eda 100644 --- a/src/ui/dialog/polar-arrange-tab.h +++ b/src/ui/dialog/polar-arrange-tab.h @@ -20,12 +20,7 @@ #include #include - -#if WITH_GTKMM_3_0 - #include -#else - #include -#endif +#include namespace Inkscape { namespace UI { @@ -75,11 +70,7 @@ private: Gtk::RadioButton arrangeOnLastCircleRadio; Gtk::RadioButton arrangeOnParametersRadio; -#if WITH_GTKMM_3_0 Gtk::Grid parametersTable; -#else - Gtk::Table parametersTable; -#endif Gtk::Label centerLabel; Inkscape::UI::Widget::ScalarUnit centerY; diff --git a/src/ui/dialog/spellcheck.h b/src/ui/dialog/spellcheck.h index e98a9d80e..834f23c24 100644 --- a/src/ui/dialog/spellcheck.h +++ b/src/ui/dialog/spellcheck.h @@ -225,11 +225,7 @@ private: * Dialogs widgets */ Gtk::Label banner_label; -#if WITH_GTKMM_3_0 Gtk::ButtonBox banner_hbox; -#else - Gtk::HButtonBox banner_hbox; -#endif Gtk::ScrolledWindow scrolled_window; Gtk::TreeView tree_view; Glib::RefPtr model; @@ -243,21 +239,10 @@ private: Gtk::Button add_button; GtkWidget * dictionary_combo; Gtk::HBox dictionary_hbox; - -#if WITH_GTKMM_3_0 Gtk::Separator action_sep; -#else - Gtk::HSeparator action_sep; -#endif - Gtk::Button stop_button; Gtk::Button start_button; - -#if WITH_GTKMM_3_0 Gtk::ButtonBox actionbutton_hbox; -#else - Gtk::HButtonBox actionbutton_hbox; -#endif SPDesktop * desktop; DesktopTracker deskTrack; diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 08ebbcf14..58ac62cb0 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -890,12 +890,7 @@ void SvgFontsDialog::add_font(){ SvgFontsDialog::SvgFontsDialog() : UI::Widget::Panel("", "/dialogs/svgfonts", SP_VERB_DIALOG_SVG_FONTS), _add(Gtk::Stock::NEW) { -#if WITH_GTKMM_3_0 kerning_slider = Gtk::manage(new Gtk::Scale(Gtk::ORIENTATION_HORIZONTAL)); -#else - kerning_slider = Gtk::manage(new Gtk::HScale); -#endif - _add.signal_clicked().connect(sigc::mem_fun(*this, &SvgFontsDialog::add_font)); Gtk::HBox* hbox = Gtk::manage(new Gtk::HBox()); diff --git a/src/ui/dialog/svg-fonts-dialog.h b/src/ui/dialog/svg-fonts-dialog.h index e80bbfd39..1588c0fc2 100644 --- a/src/ui/dialog/svg-fonts-dialog.h +++ b/src/ui/dialog/svg-fonts-dialog.h @@ -27,11 +27,7 @@ #include "xml/helper-observer.h" namespace Gtk { -#if WITH_GTKMM_3_0 class Scale; -#else -class HScale; -#endif } class SPGlyph; @@ -216,12 +212,7 @@ private: GlyphComboBox first_glyph, second_glyph; SPGlyphKerning* kerning_pair; Inkscape::UI::Widget::SpinButton setwidth_spin; - -#if WITH_GTKMM_3_0 Gtk::Scale* kerning_slider; -#else - Gtk::HScale* kerning_slider; -#endif class EntryWidget : public Gtk::HBox { diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 6577c8d4e..964e844b2 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -658,12 +658,8 @@ SwatchesPanel::SwatchesPanel(gchar const* prefsPath) : if (Glib::ustring(prefsPath) == "/dialogs/swatches") { Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; get_preferred_size(sreq_natural, sreq); -#else - sreq = size_request(); -#endif int minHeight = 60; if (sreq.height < minHeight) { set_size_request(70, minHeight); diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 06c17611f..597f90e95 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -20,14 +20,8 @@ #include #include - -#if WITH_GTKMM_3_0 -# include -# include -#else -# include -#endif - +#include +#include #include #include #include @@ -121,11 +115,7 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : { /******************** Table *************************/ -#if WITH_GTKMM_3_0 - Gtk::Grid *table = new Gtk::Grid(); -#else - Gtk::Table *table = new Gtk::Table(2, 4, false); -#endif + auto table = new Gtk::Grid(); // panel is a cloked Gtk::VBox _getContents()->pack_start(*Gtk::manage(table), Gtk::PACK_EXPAND_WIDGET); @@ -133,24 +123,12 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : /******************** Symbol Sets *************************/ Gtk::Label* labelSet = new Gtk::Label(_("Symbol set: ")); - -#if WITH_GTKMM_3_0 table->attach(*Gtk::manage(labelSet),0,row,1,1); -#else - table->attach(*Gtk::manage(labelSet),0,1,row,row+1,Gtk::SHRINK,Gtk::SHRINK); -#endif - symbolSet = new Gtk::ComboBoxText(); // Fill in later symbolSet->append(_("Current Document")); symbolSet->set_active_text(_("Current Document")); - -#if WITH_GTKMM_3_0 symbolSet->set_hexpand(); table->attach(*Gtk::manage(symbolSet),1,row,1,1); -#else - table->attach(*Gtk::manage(symbolSet),1,2,row,row+1,Gtk::FILL|Gtk::EXPAND,Gtk::SHRINK); -#endif - sigc::connection connSet = symbolSet->signal_changed().connect( sigc::mem_fun(*this, &SymbolsDialog::rebuild)); instanceConns.push_back(connSet); @@ -183,14 +161,9 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : Gtk::ScrolledWindow *scroller = new Gtk::ScrolledWindow(); scroller->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_ALWAYS); scroller->add(*Gtk::manage(iconView)); - -#if WITH_GTKMM_3_0 scroller->set_hexpand(); scroller->set_vexpand(); table->attach(*Gtk::manage(scroller),0,row,2,1); -#else - table->attach(*Gtk::manage(scroller),0,2,row,row+1,Gtk::EXPAND|Gtk::FILL,Gtk::EXPAND|Gtk::FILL); -#endif ++row; @@ -199,12 +172,8 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) : Gtk::HBox* tools = new Gtk::HBox(); //tools->set_layout( Gtk::BUTTONBOX_END ); -#if WITH_GTKMM_3_0 scroller->set_hexpand(); table->attach(*Gtk::manage(tools),0,row,2,1); -#else - table->attach(*Gtk::manage(tools),0,2,row,row+1,Gtk::EXPAND|Gtk::FILL,Gtk::FILL); -#endif addSymbol = Gtk::manage(new Gtk::Button()); addSymbol->add(*Gtk::manage(Glib::wrap( @@ -398,11 +367,7 @@ void SymbolsDialog::revertSymbol() { void SymbolsDialog::iconDragDataGet(const Glib::RefPtr& /*context*/, Gtk::SelectionData& data, guint /*info*/, guint /*time*/) { -#if WITH_GTKMM_3_0 - std::vector iconArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths iconArray = iconView->get_selected_items(); -#endif + auto iconArray = iconView->get_selected_items(); if( iconArray.empty() ) { //std::cout << " iconArray empty: huh? " << std::endl; @@ -455,11 +420,7 @@ SPDocument* SymbolsDialog::selectedSymbols() { Glib::ustring SymbolsDialog::selectedSymbolId() { -#if WITH_GTKMM_3_0 - std::vector iconArray = iconView->get_selected_items(); -#else - Gtk::IconView::ArrayHandle_TreePaths iconArray = iconView->get_selected_items(); -#endif + auto iconArray = iconView->get_selected_items(); if( !iconArray.empty() ) { Gtk::TreeModel::Path const & path = *iconArray.begin(); diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index c99c1bff3..be91ca8af 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -980,12 +980,8 @@ TagsPanel::TagsPanel() : _scroller.set_policy( Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC ); _scroller.set_shadow_type(Gtk::SHADOW_IN); Gtk::Requisition sreq; -#if WITH_GTKMM_3_0 Gtk::Requisition sreq_natural; _scroller.get_preferred_size(sreq_natural, sreq); -#else - sreq = _scroller.size_request(); -#endif int minHeight = 70; if (sreq.height < minHeight) { // Set a min height to see the layers when used with Ubuntu liboverlay-scrollbar diff --git a/src/ui/dialog/tags.h b/src/ui/dialog/tags.h index 3576bd111..bdda22dd4 100644 --- a/src/ui/dialog/tags.h +++ b/src/ui/dialog/tags.h @@ -141,15 +141,9 @@ private: Gtk::TreeView _tree; Gtk::CellRendererText *_text_renderer; Gtk::TreeView::Column *_name_column; -#if WITH_GTKMM_3_0 Gtk::Box _buttonsRow; Gtk::Box _buttonsPrimary; Gtk::Box _buttonsSecondary; -#else - Gtk::HBox _buttonsRow; - Gtk::HBox _buttonsPrimary; - Gtk::HBox _buttonsSecondary; -#endif Gtk::ScrolledWindow _scroller; Gtk::Menu _popupMenu; Inkscape::UI::Widget::SpinButton _spinBtn; diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index c01da8864..83b636ae2 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -99,9 +99,7 @@ TextEdit::TextEdit() styleButton(&align_right, _("Align right"), INKSCAPE_ICON("format-justify-right"), &align_left); styleButton(&align_justify, _("Justify (only flowed text)"), INKSCAPE_ICON("format-justify-fill"), &align_left); -#if WITH_GTKMM_3_0 align_sep.set_orientation(Gtk::ORIENTATION_VERTICAL); -#endif layout_hbox.pack_start(align_sep, false, false, 10); @@ -109,9 +107,7 @@ TextEdit::TextEdit() styleButton(&text_horizontal, _("Horizontal text"), INKSCAPE_ICON("format-text-direction-horizontal"), NULL); styleButton(&text_vertical, _("Vertical text"), INKSCAPE_ICON("format-text-direction-vertical"), &text_horizontal); -#if WITH_GTKMM_3_0 text_sep.set_orientation(Gtk::ORIENTATION_VERTICAL); -#endif layout_hbox.pack_start(text_sep, false, false, 10); @@ -146,12 +142,8 @@ TextEdit::TextEdit() gtk_widget_set_tooltip_text(startOffset, _("Text path offset")); -#if WITH_GTKMM_3_0 - Gtk::Separator *sep = Gtk::manage(new Gtk::Separator()); + auto sep = Gtk::manage(new Gtk::Separator()); sep->set_orientation(Gtk::ORIENTATION_VERTICAL); -#else - Gtk::VSeparator *sep = Gtk::manage(new Gtk::VSeparator); -#endif layout_hbox.pack_start(*sep, false, false, 10); layout_hbox.pack_start(*Gtk::manage(Glib::wrap(startOffset)), false, false); @@ -175,7 +167,6 @@ TextEdit::TextEdit() gtk_text_view_set_wrap_mode ((GtkTextView *) text_view, GTK_WRAP_WORD); #ifdef WITH_GTKSPELL -#ifdef WITH_GTKMM_3_0 /* TODO: Use computed xml:lang attribute of relevant element, if present, to specify the language (either as 2nd arg of gtkspell_new_attach, or with explicit @@ -187,20 +178,6 @@ TextEdit::TextEdit() if (! gtk_spell_checker_attach(speller, GTK_TEXT_VIEW(text_view))) { g_print("gtkspell error:\n"); } -#else - GError *error = NULL; - -/* - TODO: Use computed xml:lang attribute of relevant element, if present, to specify the - language (either as 2nd arg of gtkspell_new_attach, or with explicit - gtkspell_set_language call in; see advanced.c example in gtkspell docs). - onReadSelection looks like a suitable place. -*/ - if (gtkspell_new_attach(GTK_TEXT_VIEW(text_view), NULL, &error) == NULL) { - g_print("gtkspell error: %s\n", error->message); - g_error_free(error); - } -#endif #endif gtk_widget_set_size_request (text_view, -1, 64); diff --git a/src/ui/dialog/text-edit.h b/src/ui/dialog/text-edit.h index cfe612268..e974874d2 100644 --- a/src/ui/dialog/text-edit.h +++ b/src/ui/dialog/text-edit.h @@ -198,21 +198,10 @@ private: Gtk::RadioButton align_center; Gtk::RadioButton align_right; Gtk::RadioButton align_justify; - -#if WITH_GTKMM_3_0 Gtk::Separator align_sep; -#else - Gtk::VSeparator align_sep; -#endif - Gtk::RadioButton text_vertical; Gtk::RadioButton text_horizontal; - -#if WITH_GTKMM_3_0 Gtk::Separator text_sep; -#else - Gtk::VSeparator text_sep; -#endif GtkWidget *spacing_combo; diff --git a/src/ui/dialog/tile.h b/src/ui/dialog/tile.h index de1d3028b..2c29f85b8 100644 --- a/src/ui/dialog/tile.h +++ b/src/ui/dialog/tile.h @@ -29,12 +29,7 @@ namespace Gtk { class Button; - -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index b7638e8c1..72133f448 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -216,38 +216,20 @@ void Transformation::layoutPageMove() //_scalar_move_vertical.set_label_image( INKSCAPE_STOCK_ARROWS_HOR ); -#if WITH_GTKMM_3_0 _page_move.table().attach(_scalar_move_horizontal, 0, 0, 2, 1); _page_move.table().attach(_units_move, 2, 0, 1, 1); -#else - _page_move.table() - .attach(_scalar_move_horizontal, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); - - _page_move.table() - .attach(_units_move, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_move_horizontal.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onMoveValueChanged)); //_scalar_move_vertical.set_label_image( INKSCAPE_STOCK_ARROWS_VER ); -#if WITH_GTKMM_3_0 _page_move.table().attach(_scalar_move_vertical, 0, 1, 2, 1); -#else - _page_move.table() - .attach(_scalar_move_vertical, 0, 2, 1, 2, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_move_vertical.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onMoveValueChanged)); // Relative moves -#if WITH_GTKMM_3_0 _page_move.table().attach(_check_move_relative, 0, 2, 2, 1); -#else - _page_move.table() - .attach(_check_move_relative, 0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK); -#endif _check_move_relative.set_active(true); _check_move_relative.signal_toggled() @@ -273,36 +255,18 @@ void Transformation::layoutPageScale() _scalar_scale_vertical.setAbsoluteIsIncrement(true); _scalar_scale_vertical.setPercentageIsIncrement(true); -#if WITH_GTKMM_3_0 _page_scale.table().attach(_scalar_scale_horizontal, 0, 0, 2, 1); -#else - _page_scale.table() - .attach(_scalar_scale_horizontal, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_scale_horizontal.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onScaleXValueChanged)); -#if WITH_GTKMM_3_0 _page_scale.table().attach(_units_scale, 2, 0, 1, 1); _page_scale.table().attach(_scalar_scale_vertical, 0, 1, 2, 1); -#else - _page_scale.table() - .attach(_units_scale, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_scale.table() - .attach(_scalar_scale_vertical, 0, 2, 1, 2, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_scale_vertical.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onScaleYValueChanged)); -#if WITH_GTKMM_3_0 _page_scale.table().attach(_check_scale_proportional, 0, 2, 2, 1); -#else - _page_scale.table() - .attach(_check_scale_proportional, 0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK); -#endif _check_scale_proportional.set_active(false); _check_scale_proportional.signal_toggled() @@ -334,24 +298,10 @@ void Transformation::layoutPageRotate() Gtk::RadioButton::Group group = _counterclockwise_rotate.get_group(); _clockwise_rotate.set_group(group); -#if WITH_GTKMM_3_0 _page_rotate.table().attach(_scalar_rotate, 0, 0, 2, 1); _page_rotate.table().attach(_units_rotate, 2, 0, 1, 1); _page_rotate.table().attach(_counterclockwise_rotate, 3, 0, 1, 1); _page_rotate.table().attach(_clockwise_rotate, 4, 0, 1, 1); -#else - _page_rotate.table() - .attach(_scalar_rotate, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); - - _page_rotate.table() - .attach(_units_rotate, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_rotate.table() - .attach(_counterclockwise_rotate, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_rotate.table() - .attach(_clockwise_rotate, 4, 5, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/dialogs/transformation/rotateCounterClockwise", TRUE)) { @@ -385,26 +335,13 @@ void Transformation::layoutPageSkew() _scalar_skew_vertical.setDigits(3); _scalar_skew_vertical.setIncrements(0.1, 1.0); -#if WITH_GTKMM_3_0 _page_skew.table().attach(_scalar_skew_horizontal, 0, 0, 2, 1); -#else - _page_skew.table() - .attach(_scalar_skew_horizontal, 0, 2, 0, 1, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_skew_horizontal.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onSkewValueChanged)); -#if WITH_GTKMM_3_0 _page_skew.table().attach(_units_skew, 2, 0, 1, 1); _page_skew.table().attach(_scalar_skew_vertical, 0, 1, 2, 1); -#else - _page_skew.table() - .attach(_units_skew, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); - - _page_skew.table() - .attach(_scalar_skew_vertical, 0, 2, 1, 2, Gtk::FILL, Gtk::SHRINK); -#endif _scalar_skew_vertical.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onSkewValueChanged)); @@ -422,12 +359,7 @@ void Transformation::layoutPageTransform() _scalar_transform_a.setIncrements(0.1, 1.0); _scalar_transform_a.setValue(1.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_a, 0, 0, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_a, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_a.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -438,12 +370,7 @@ void Transformation::layoutPageTransform() _scalar_transform_b.setIncrements(0.1, 1.0); _scalar_transform_b.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_b, 0, 1, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_b, 0, 1, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_b.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -454,12 +381,7 @@ void Transformation::layoutPageTransform() _scalar_transform_c.setIncrements(0.1, 1.0); _scalar_transform_c.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_c, 1, 0, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_c, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_c.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -471,12 +393,7 @@ void Transformation::layoutPageTransform() _scalar_transform_d.setIncrements(0.1, 1.0); _scalar_transform_d.setValue(1.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_d, 1, 1, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_d, 1, 2, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_d.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -488,12 +405,7 @@ void Transformation::layoutPageTransform() _scalar_transform_e.setIncrements(0.1, 1.0); _scalar_transform_e.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_e, 2, 0, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_e, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_e.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); @@ -505,23 +417,13 @@ void Transformation::layoutPageTransform() _scalar_transform_f.setIncrements(0.1, 1.0); _scalar_transform_f.setValue(0.0); -#if WITH_GTKMM_3_0 _page_transform.table().attach(_scalar_transform_f, 2, 1, 1, 1); -#else - _page_transform.table() - .attach(_scalar_transform_f, 2, 3, 1, 2, Gtk::SHRINK, Gtk::SHRINK); -#endif _scalar_transform_f.signal_value_changed() .connect(sigc::mem_fun(*this, &Transformation::onTransformValueChanged)); // Edit existing matrix -#if WITH_GTKMM_3_0 _page_transform.table().attach(_check_replace_matrix, 0, 2, 2, 1); -#else - _page_transform.table() - .attach(_check_replace_matrix, 0, 2, 2, 3, Gtk::FILL, Gtk::SHRINK); -#endif _check_replace_matrix.set_active(false); _check_replace_matrix.signal_toggled() @@ -568,11 +470,7 @@ void Transformation::updateSelection(PageType page, Inkscape::Selection *selecti selection && !selection->isEmpty()); } -#if WITH_GTKMM_3_0 void Transformation::onSwitchPage(Gtk::Widget * /*page*/, guint pagenum) -#else -void Transformation::onSwitchPage(GtkNotebookPage * /*page*/, guint pagenum) -#endif { updateSelection((PageType)pagenum, getDesktop()->getSelection()); } diff --git a/src/ui/dialog/transformation.h b/src/ui/dialog/transformation.h index 89aa95d90..9595e87bc 100644 --- a/src/ui/dialog/transformation.h +++ b/src/ui/dialog/transformation.h @@ -169,11 +169,7 @@ protected: virtual void _apply(); void presentPage(PageType page); -#if WITH_GTKMM_3_0 void onSwitchPage(Gtk::Widget *page, guint pagenum); -#else - void onSwitchPage(GtkNotebookPage *page, guint pagenum); -#endif /** * Callbacks for when a user changes values on the panels diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp index a50a169eb..e7e68ed87 100644 --- a/src/ui/dialog/undo-history.cpp +++ b/src/ui/dialog/undo-history.cpp @@ -35,20 +35,11 @@ namespace UI { namespace Dialog { /* Rendering functions for custom cell renderers */ -#if WITH_GTKMM_3_0 void CellRendererSPIcon::render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags) -#else -void CellRendererSPIcon::render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags) -#endif { // if this event type doesn't have an icon... if ( !Inkscape::Verb::get(_property_event_type)->get_image() ) return; @@ -67,13 +58,8 @@ void CellRendererSPIcon::render_vfunc(const Glib::RefPtr& window, sp_icon_fetch_pixbuf(sp_icon); _property_icon = Glib::wrap(sp_icon->pb, true); } else if ( GTK_IS_IMAGE(icon->gobj()) ) { -#if WITH_GTKMM_3_0 _property_icon = Gtk::Invisible().render_icon_pixbuf(Gtk::StockID(image), Gtk::ICON_SIZE_MENU); -#else - _property_icon = Gtk::Invisible().render_icon(Gtk::StockID(image), - Gtk::ICON_SIZE_MENU); -#endif } else { delete icon; return; @@ -87,42 +73,23 @@ void CellRendererSPIcon::render_vfunc(const Glib::RefPtr& window, property_pixbuf() = _icon_cache[_property_event_type]; } -#if WITH_GTKMM_3_0 Gtk::CellRendererPixbuf::render_vfunc(cr, widget, background_area, cell_area, flags); -#else - Gtk::CellRendererPixbuf::render_vfunc(window, widget, background_area, - cell_area, expose_area, flags); -#endif } -#if WITH_GTKMM_3_0 void CellRendererInt::render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags) -#else -void CellRendererInt::render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags) -#endif { if( _filter(_property_number) ) { std::ostringstream s; s << _property_number << std::flush; property_text() = s.str(); -#if WITH_GTKMM_3_0 Gtk::CellRendererText::render_vfunc(cr, widget, background_area, cell_area, flags); -#else - Gtk::CellRendererText::render_vfunc(window, widget, background_area, - cell_area, expose_area, flags); -#endif } } diff --git a/src/ui/dialog/undo-history.h b/src/ui/dialog/undo-history.h index b0cc283cf..48929a0d0 100644 --- a/src/ui/dialog/undo-history.h +++ b/src/ui/dialog/undo-history.h @@ -50,20 +50,11 @@ public: property_event_type() { return _property_event_type.get_proxy(); } protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags); -#else - virtual void render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags); -#endif private: Glib::Property > _property_icon; @@ -95,20 +86,11 @@ public: static const Filter& no_filter; protected: -#if WITH_GTKMM_3_0 virtual void render_vfunc(const Cairo::RefPtr& cr, Gtk::Widget& widget, const Gdk::Rectangle& background_area, const Gdk::Rectangle& cell_area, Gtk::CellRendererState flags); -#else - virtual void render_vfunc(const Glib::RefPtr& window, - Gtk::Widget& widget, - const Gdk::Rectangle& background_area, - const Gdk::Rectangle& cell_area, - const Gdk::Rectangle& expose_area, - Gtk::CellRendererState flags); -#endif private: diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index 99a4acc69..714d59c50 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -79,11 +79,7 @@ XmlTree::XmlTree (void) : xml_attribute_delete_button (_("Delete attribute")), text_container (), attr_container (), -#if WITH_GTKMM_3_0 attr_subpaned_container(Gtk::ORIENTATION_VERTICAL), -#else - attr_subpaned_container(), -#endif set_attr (_("Set")), new_window(NULL) { @@ -100,9 +96,7 @@ XmlTree::XmlTree (void) : status.set_alignment( 0.0, 0.5); status.set_size_request(1, -1); status.set_markup(""); -#if WITH_GTKMM_3_0 status.set_line_wrap(true); -#endif status_box.pack_start( status, TRUE, TRUE, 0); contents->pack_end(status_box, false, false, 2); @@ -881,31 +875,19 @@ void XmlTree::cmd_new_element_node() g_signal_connect(G_OBJECT(new_window), "destroy", gtk_main_quit, NULL); g_signal_connect(G_OBJECT(new_window), "key-press-event", G_CALLBACK(quit_on_esc), new_window); -#if GTK_CHECK_VERSION(3,0,0) vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE); -#else - vbox = gtk_vbox_new(FALSE, 4); -#endif gtk_container_add(GTK_CONTAINER(new_window), vbox); name_entry = new Gtk::Entry(); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(name_entry->gobj()), FALSE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) sep = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); -#else - sep = gtk_hseparator_new(); -#endif gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); -#else - bbox = gtk_hbutton_box_new(); -#endif gtk_container_set_border_width(GTK_CONTAINER(bbox), 4); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); diff --git a/src/ui/dialog/xml-tree.h b/src/ui/dialog/xml-tree.h index 58ef3aef8..a4c3fffcb 100644 --- a/src/ui/dialog/xml-tree.h +++ b/src/ui/dialog/xml-tree.h @@ -218,13 +218,7 @@ private: Gtk::Button *create_button; Gtk::Entry *name_entry; - -#if WITH_GTKMM_3_0 Gtk::Paned paned; -#else - Gtk::HPaned paned; -#endif - Gtk::VBox left_box; Gtk::VBox right_box; Gtk::HBox status_box; @@ -248,12 +242,7 @@ private: Gtk::ScrolledWindow text_container; Gtk::HBox attr_hbox; Gtk::VBox attr_container; - -#if WITH_GTKMM_3_0 Gtk::Paned attr_subpaned_container; -#else - Gtk::VPaned attr_subpaned_container; -#endif Gtk::Button set_attr; diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 5e75179a3..8336467c4 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -18,12 +18,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #define COLUMNS_FOR_SMALL 16 #define COLUMNS_FOR_LARGE 8 @@ -55,7 +50,6 @@ PreviewHolder::PreviewHolder() : ((Gtk::ScrolledWindow *)_scroller)->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); _insides->set_name( "PreviewHolderGrid" ); _insides->set_column_spacing(8); @@ -66,21 +60,9 @@ PreviewHolder::PreviewHolder() : _scroller->set_hexpand(); _scroller->set_vexpand(); -#else - _insides = Gtk::manage(new Gtk::Table( 1, 2 )); - _insides->set_col_spacings( 8 ); - - // Add a container with the scroller and a spacer - Gtk::Table* spaceHolder = Gtk::manage( new Gtk::Table(1, 2) ); -#endif - _scroller->add( *_insides ); -#if WITH_GTKMM_3_0 spaceHolder->attach( *_scroller, 0, 0, 1, 1); -#else - spaceHolder->attach( *_scroller, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif pack_start(*spaceHolder, Gtk::PACK_EXPAND_WIDGET); } @@ -93,11 +75,7 @@ PreviewHolder::~PreviewHolder() bool PreviewHolder::on_scroll_event(GdkEventScroll *event) { // Scroll horizontally by page on mouse wheel -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = dynamic_cast(_scroller)->get_hadjustment(); -#else - Gtk::Adjustment *adj = dynamic_cast(_scroller)->get_hadjustment(); -#endif + auto adj = dynamic_cast(_scroller)->get_hadjustment(); if (!adj) { return FALSE; @@ -141,7 +119,6 @@ void PreviewHolder::addPreview( Previewable* preview ) Gtk::Widget* label = Gtk::manage(preview->getPreview(PREVIEW_STYLE_BLURB, VIEW_TYPE_LIST, _baseSize, _ratio, _border)); Gtk::Widget* thing = Gtk::manage(preview->getPreview(PREVIEW_STYLE_PREVIEW, VIEW_TYPE_LIST, _baseSize, _ratio, _border)); -#if WITH_GTKMM_3_0 thing->set_hexpand(); thing->set_vexpand(); _insides->attach(*thing, 0, i, 1, 1); @@ -149,10 +126,6 @@ void PreviewHolder::addPreview( Previewable* preview ) label->set_hexpand(); label->set_valign(Gtk::ALIGN_CENTER); _insides->attach(*label, 1, i, 1, 1); -#else - _insides->attach( *thing, 0, 1, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); - _insides->attach( *label, 1, 2, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK ); -#endif } break; @@ -168,44 +141,25 @@ void PreviewHolder::addPreview( Previewable* preview ) int col = i % width; int row = i / width; -#if !WITH_GTKMM_3_0 - // If the existing grid isn't wide enough, we need to resize - // it and re-pack the existing widgets - if ( _insides && width > (int)_insides->property_n_columns() ) { - _insides->resize( height, width ); -#endif - std::vectorkids = _insides->get_children(); - int childCount = (int)kids.size(); - // g_message(" %3d resize from %d to %d (r:%d, c:%d) with %d children", i, oldWidth, width, row, col, childCount ); - - // Loop through the existing widgets and move them to new location - for ( int j = 1; j < childCount; j++ ) { - Gtk::Widget* target = kids[childCount - (j + 1)]; - int col2 = j % width; - int row2 = j / width; - Glib::RefPtr handle(target); - _insides->remove( *target ); - -#if WITH_GTKMM_3_0 - target->set_hexpand(); - target->set_vexpand(); - _insides->attach( *target, col2, row2, 1, 1); -#else - _insides->attach( *target, col2, col2+1, row2, row2+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif - } -#if WITH_GTKMM_3_0 - thing->set_hexpand(); - thing->set_vexpand(); - _insides->attach(*thing, col, row, 1, 1); -#else - } else if ( col == 0 ) { - // we just started a new row - _insides->resize( row + 1, width ); - } - - _insides->attach( *thing, col, col+1, row, row+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif + auto kids = _insides->get_children(); + int childCount = (int)kids.size(); + // g_message(" %3d resize from %d to %d (r:%d, c:%d) with %d children", i, oldWidth, width, row, col, childCount ); + + // Loop through the existing widgets and move them to new location + for ( int j = 1; j < childCount; j++ ) { + auto target = kids[childCount - (j + 1)]; + int col2 = j % width; + int row2 = j / width; + Glib::RefPtr handle(target); + _insides->remove( *target ); + + target->set_hexpand(); + target->set_vexpand(); + _insides->attach( *target, col2, row2, 1, 1); + } + thing->set_hexpand(); + thing->set_vexpand(); + _insides->attach(*thing, col, row, 1, 1); } } @@ -416,21 +370,11 @@ void PreviewHolder::rebuildUI() switch(_view) { case VIEW_TYPE_LIST: { - -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); _insides->set_column_spacing(8); -#else - _insides = Gtk::manage(new Gtk::Table( 1, 2 )); - _insides->set_col_spacings( 8 ); -#endif if (_border == BORDER_WIDE) { -#if WITH_GTKMM_3_0 _insides->set_row_spacing(1); -#else - _insides->set_row_spacings( 1 ); -#endif } for ( unsigned int i = 0; i < items.size(); i++ ) { @@ -439,7 +383,6 @@ void PreviewHolder::rebuildUI() Gtk::Widget* thing = Gtk::manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, _view, _baseSize, _ratio, _border)); -#if WITH_GTKMM_3_0 thing->set_hexpand(); thing->set_vexpand(); _insides->attach(*thing, 0, i, 1, 1); @@ -447,10 +390,6 @@ void PreviewHolder::rebuildUI() label->set_hexpand(); label->set_valign(Gtk::ALIGN_CENTER); _insides->attach(*label, 1, i, 1, 1); -#else - _insides->attach( *thing, 0, 1, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); - _insides->attach( *label, 1, 2, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK ); -#endif } _scroller->add( *_insides ); @@ -473,28 +412,16 @@ void PreviewHolder::rebuildUI() if ( !_insides ) { calcGridSize( thing, items.size(), width, height ); -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); if (_border == BORDER_WIDE) { _insides->set_column_spacing(1); _insides->set_row_spacing(1); } -#else - _insides = Gtk::manage(new Gtk::Table( height, width )); - if (_border == BORDER_WIDE) { - _insides->set_col_spacings( 1 ); - _insides->set_row_spacings( 1 ); - } -#endif } -#if WITH_GTKMM_3_0 thing->set_hexpand(); thing->set_vexpand(); _insides->attach( *thing, col, row, 1, 1); -#else - _insides->attach( *thing, col, col+1, row, row+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); -#endif if ( ++col >= width ) { col = 0; @@ -502,11 +429,7 @@ void PreviewHolder::rebuildUI() } } if ( !_insides ) { -#if WITH_GTKMM_3_0 _insides = Gtk::manage(new Gtk::Grid()); -#else - _insides = Gtk::manage(new Gtk::Table( 1, 2 )); -#endif } _scroller->add( *_insides ); diff --git a/src/ui/previewholder.h b/src/ui/previewholder.h index 28c0fd865..d370e8fc8 100644 --- a/src/ui/previewholder.h +++ b/src/ui/previewholder.h @@ -21,11 +21,7 @@ #include namespace Gtk { -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } #include "previewfillable.h" @@ -68,12 +64,7 @@ private: std::vector items; Gtk::Bin *_scroller; - -#if WITH_GTKMM_3_0 Gtk::Grid *_insides; -#else - Gtk::Table *_insides; -#endif int _prefCols; bool _updatesFrozen; diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 72ba499de..17debb59c 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -149,16 +149,10 @@ void ToolBase::sp_event_context_set_cursor(GdkCursorType cursor_type) { GdkDisplay *display = gdk_display_get_default(); GdkCursor *cursor = gdk_cursor_new_for_display(display, cursor_type); -#if WITH_GTKMM_3_0 if (cursor) { gdk_window_set_cursor (gtk_widget_get_window (w), cursor); g_object_unref (cursor); } -#else - gdk_window_set_cursor (gtk_widget_get_window (w), cursor); - gdk_cursor_unref (cursor); -#endif - } /** diff --git a/src/widgets/dash-selector.cpp b/src/widgets/dash-selector.cpp index 9d591d33d..7c6c22ba3 100644 --- a/src/widgets/dash-selector.cpp +++ b/src/widgets/dash-selector.cpp @@ -61,18 +61,9 @@ SPDashSelector::SPDashSelector() dash_combo.signal_changed().connect( sigc::mem_fun(*this, &SPDashSelector::on_selection) ); this->pack_start(dash_combo, false, false, 0); - -#if WITH_GTKMM_3_0 offset = Gtk::Adjustment::create(0.0, 0.0, 10.0, 0.1, 1.0, 0.0); -#else - offset = new Gtk::Adjustment(0.0, 0.0, 10.0, 0.1, 1.0, 0.0); -#endif offset->signal_value_changed().connect(sigc::mem_fun(*this, &SPDashSelector::offset_value_changed)); -#if WITH_GTKMM_3_0 - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(offset, 0.1, 2); -#else - Inkscape::UI::Widget::SpinButton *sb = new Inkscape::UI::Widget::SpinButton(*offset, 0.1, 2); -#endif + auto sb = new Inkscape::UI::Widget::SpinButton(offset, 0.1, 2); sb->set_tooltip_text(_("Pattern offset")); sp_dialog_defocus_on_enter_cpp(sb); sb->show(); @@ -99,9 +90,6 @@ SPDashSelector::SPDashSelector() SPDashSelector::~SPDashSelector() { // FIXME: for some reason this doesn't get called; does the call to manage() in // sp_stroke_style_line_widget_new() not processed correctly? -#if !WITH_GTKMM_3_0 - delete offset; -#endif } void SPDashSelector::prepareImageRenderer( Gtk::TreeModel::const_iterator const &row ) { diff --git a/src/widgets/dash-selector.h b/src/widgets/dash-selector.h index ec5a1cbd5..f176acf04 100644 --- a/src/widgets/dash-selector.h +++ b/src/widgets/dash-selector.h @@ -85,12 +85,7 @@ private: Glib::RefPtr dash_store; Gtk::ComboBox dash_combo; Gtk::CellRendererPixbuf image_renderer; - -#if WITH_GTKMM_3_0 Glib::RefPtr offset; -#else - Gtk::Adjustment *offset; -#endif static gchar const *const _prefs_path; int preview_width; diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index ef1f31751..8b035eb15 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -70,9 +70,7 @@ #include "widget-sizes.h" #include "verbs.h" -#if GTK_CHECK_VERSION(3,0,0) -# include -#endif +#include #include #include @@ -256,16 +254,11 @@ Geom::Point SPDesktopWidget::window_get_pointer() { gint x,y; - GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(canvas)); - -#if GTK_CHECK_VERSION(3,0,0) - GdkDisplay *display = gdk_window_get_display(window); - GdkDeviceManager *dm = gdk_display_get_device_manager(display); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto window = gtk_widget_get_window(GTK_WIDGET(canvas)); + auto display = gdk_window_get_display(window); + auto dm = gdk_display_get_device_manager(display); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_window_get_device_position(window, device, &x, &y, NULL); -#else - gdk_window_get_pointer(window, &x, &y, NULL); -#endif return Geom::Point(x,y); } @@ -344,21 +337,11 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->_interaction_disabled_counter = 0; /* Main table */ -#if GTK_CHECK_VERSION(3,0,0) dtw->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(dtw->vbox, "DesktopMainTable"); -#else - dtw->vbox = gtk_vbox_new (FALSE, 0); -#endif gtk_container_add( GTK_CONTAINER(dtw), GTK_WIDGET(dtw->vbox) ); - -#if GTK_CHECK_VERSION(3,0,0) dtw->statusbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_name(dtw->statusbar, "DesktopStatusBar"); -#else - dtw->statusbar = gtk_hbox_new (FALSE, 0); -#endif - //gtk_widget_set_usize (dtw->statusbar, -1, BOTTOM_BAR_HEIGHT); gtk_box_pack_end (GTK_BOX (dtw->vbox), dtw->statusbar, FALSE, TRUE, 0); { @@ -366,19 +349,12 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->panels = new SwatchesPanel("/embedded/swatches" /*false*/); dtw->panels->setOrientation(SP_ANCHOR_SOUTH); -#if GTK_CHECK_VERSION(3,0,0) dtw->panels->set_vexpand(false); -#endif - gtk_box_pack_end( GTK_BOX( dtw->vbox ), GTK_WIDGET(dtw->panels->gobj()), FALSE, TRUE, 0 ); } -#if GTK_CHECK_VERSION(3,0,0) dtw->hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_name(dtw->hbox, "DesktopHbox"); -#else - dtw->hbox = gtk_hbox_new(FALSE, 0); -#endif gtk_box_pack_end( GTK_BOX (dtw->vbox), dtw->hbox, TRUE, TRUE, 0 ); gtk_widget_show(dtw->hbox); @@ -402,14 +378,12 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) NULL, INKSCAPE_ICON("object-locked"), _("Toggle lock of all guides in the document")); -#if GTK_CHECK_VERSION(3,0,0) - Glib::RefPtr guides_lock_style_provider = Gtk::CssProvider::create(); + auto guides_lock_style_provider = Gtk::CssProvider::create(); guides_lock_style_provider->load_from_data("GtkWidget { padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0; }"); - Gtk::Widget * wnd = Glib::wrap(dtw->guides_lock); + auto wnd = Glib::wrap(dtw->guides_lock); wnd->set_name("LockGuides"); - Glib::RefPtr context = wnd->get_style_context(); + auto context = wnd->get_style_context(); context->add_provider(guides_lock_style_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); -#endif /* Horizontal ruler */ GtkWidget *eventbox = gtk_event_box_new (); @@ -424,29 +398,13 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) g_signal_connect (G_OBJECT (eventbox), "button_release_event", G_CALLBACK (sp_dt_hruler_event), dtw); g_signal_connect (G_OBJECT (eventbox), "motion_notify_event", G_CALLBACK (sp_dt_hruler_event), dtw); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tbl_wrapper = gtk_grid_new(); // Is this widget really needed? + auto tbl_wrapper = gtk_grid_new(); // Is this widget really needed? gtk_widget_set_name(tbl_wrapper, "CanvasTableWrapper"); dtw->canvas_tbl = gtk_grid_new(); gtk_widget_set_name(dtw->canvas_tbl, "CanvasTable"); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->guides_lock, 0, 0, 1, 1); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), eventbox, 1, 0, 1, 1); -#else - GtkWidget *tbl_wrapper = gtk_table_new(2, 3, FALSE); - dtw->canvas_tbl = gtk_table_new(3, 3, FALSE); - - gtk_table_attach(GTK_TABLE(dtw->canvas_tbl), - dtw->guides_lock, - 0, 1, 0, 1, - GTK_FILL, GTK_FILL, - 0, 0); - gtk_table_attach(GTK_TABLE(dtw->canvas_tbl), - eventbox, - 1, 2, 0, 1, - GTK_FILL, GTK_FILL, - 0, 0); -#endif g_signal_connect (G_OBJECT (dtw->guides_lock), "toggled", G_CALLBACK (sp_update_guides_lock), dtw); gtk_box_pack_start( GTK_BOX(dtw->hbox), tbl_wrapper, TRUE, TRUE, 1 ); @@ -460,16 +418,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) sp_ruler_set_unit (SP_RULER (dtw->vruler), pt); gtk_widget_set_tooltip_text (dtw->vruler_box, gettext(pt->name_plural.c_str())); gtk_container_add (GTK_CONTAINER (eventbox), GTK_WIDGET (dtw->vruler)); - -#if GTK_CHECK_VERSION(3,0,0) gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), eventbox, 0, 1, 1, 1); -#else - gtk_table_attach(GTK_TABLE (dtw->canvas_tbl), - eventbox, - 0, 1, 1, 2, - GTK_FILL, GTK_FILL, - 0, 0); -#endif g_signal_connect (G_OBJECT (eventbox), "button_press_event", G_CALLBACK (sp_dt_vruler_event), dtw); g_signal_connect (G_OBJECT (eventbox), "button_release_event", G_CALLBACK (sp_dt_vruler_event), dtw); @@ -477,19 +426,10 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) // Horizontal scrollbar dtw->hadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -4000.0, 4000.0, 10.0, 100.0, 4.0)); - -#if GTK_CHECK_VERSION(3,0,0) dtw->hscrollbar = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_ADJUSTMENT (dtw->hadj)); gtk_widget_set_name(dtw->hscrollbar, "HorizontalScrollbar"); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->hscrollbar, 1, 2, 1, 1); dtw->vscrollbar_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); -#else - dtw->hscrollbar = gtk_hscrollbar_new (GTK_ADJUSTMENT (dtw->hadj)); - gtk_table_attach(GTK_TABLE (dtw->canvas_tbl), dtw->hscrollbar, 1, 2, 2, 3, - GTK_FILL, GTK_SHRINK, - 0, 0); - dtw->vscrollbar_box = gtk_vbox_new (FALSE, 0); -#endif // Sticky zoom button dtw->sticky_zoom = sp_button_new_from_data ( Inkscape::ICON_SIZE_DECORATION, @@ -504,23 +444,10 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) // Vertical scrollbar dtw->vadj = GTK_ADJUSTMENT(gtk_adjustment_new(0.0, -4000.0, 4000.0, 10.0, 100.0, 4.0)); - -#if GTK_CHECK_VERSION(3,0,0) dtw->vscrollbar = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, GTK_ADJUSTMENT(dtw->vadj)); gtk_widget_set_name(dtw->vscrollbar, "VerticalScrollbar"); -#else - dtw->vscrollbar = gtk_vscrollbar_new (GTK_ADJUSTMENT (dtw->vadj)); -#endif - gtk_box_pack_start (GTK_BOX (dtw->vscrollbar_box), dtw->vscrollbar, TRUE, TRUE, 0); - -#if GTK_CHECK_VERSION(3,0,0) gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), dtw->vscrollbar_box, 2, 0, 1, 2); -#else - gtk_table_attach(GTK_TABLE(dtw->canvas_tbl), dtw->vscrollbar_box, 2, 3, 0, 2, - GTK_SHRINK, GTK_FILL, - 0, 0); -#endif gchar const* tip = ""; Inkscape::Verb* verb = Inkscape::Verb::get( SP_VERB_VIEW_CMS_TOGGLE ); @@ -554,15 +481,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) cms_adjust_set_sensitive(dtw, FALSE); #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) -#if GTK_CHECK_VERSION(3,0,0) gtk_grid_attach( GTK_GRID(dtw->canvas_tbl), dtw->cms_adjust, 2, 2, 1, 1); -#else - gtk_table_attach( GTK_TABLE(dtw->canvas_tbl), dtw->cms_adjust, 2, 3, 2, 3, - (GtkAttachOptions)(GTK_SHRINK), - (GtkAttachOptions)(GTK_SHRINK), - 0, 0); -#endif - { if (!watcher) { watcher = new CMSPrefWatcher(); @@ -579,10 +498,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) sp_ruler_add_track_widget (SP_RULER(dtw->hruler), GTK_WIDGET(dtw->canvas)); sp_ruler_add_track_widget (SP_RULER(dtw->vruler), GTK_WIDGET(dtw->canvas)); - -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); - GtkStyleContext *style_context = gtk_widget_get_style_context(GTK_WIDGET(dtw->canvas)); + auto css_provider = gtk_css_provider_new(); + auto style_context = gtk_widget_get_style_context(GTK_WIDGET(dtw->canvas)); gtk_css_provider_load_from_data(css_provider, "SPCanvas {\n" @@ -593,21 +510,11 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - GtkStyle *style = gtk_style_copy(gtk_widget_get_style(GTK_WIDGET(dtw->canvas))); - style->bg[GTK_STATE_NORMAL] = style->white; - gtk_widget_set_style (GTK_WIDGET (dtw->canvas), style); -#endif - g_signal_connect (G_OBJECT (dtw->canvas), "event", G_CALLBACK (sp_desktop_widget_event), dtw); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(GTK_WIDGET(dtw->canvas), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(dtw->canvas), TRUE); gtk_grid_attach(GTK_GRID(dtw->canvas_tbl), GTK_WIDGET(dtw->canvas), 1, 1, 1, 1); -#else - gtk_table_attach (GTK_TABLE (dtw->canvas_tbl), GTK_WIDGET(dtw->canvas), 1, 2, 1, 2, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), 0, 0); -#endif /* Dock */ bool create_dock = @@ -616,12 +523,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) if (create_dock) { dtw->dock = new Inkscape::UI::Widget::Dock(); -#if WITH_GTKMM_3_0 - Gtk::Paned *paned = new Gtk::Paned(); + auto paned = new Gtk::Paned(); paned->set_name("Canvas_and_Dock"); -#else - Gtk::HPaned *paned = new Gtk::HPaned(); -#endif paned->pack1(*Glib::wrap(dtw->canvas_tbl)); paned->pack2(dtw->dock->getWidget(), Gtk::FILL); @@ -632,24 +535,13 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) paned_class->cycle_handle_focus = NULL; } -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(GTK_WIDGET(paned->gobj()), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(paned->gobj()), TRUE); gtk_grid_attach(GTK_GRID(tbl_wrapper), GTK_WIDGET (paned->gobj()), 1, 1, 1, 1); -#else - gtk_table_attach (GTK_TABLE (tbl_wrapper), GTK_WIDGET (paned->gobj()), 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif - } else { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(GTK_WIDGET(dtw->canvas_tbl), TRUE); gtk_widget_set_vexpand(GTK_WIDGET(dtw->canvas_tbl), TRUE); gtk_grid_attach(GTK_GRID(tbl_wrapper), GTK_WIDGET (dtw->canvas_tbl), 1, 1, 1, 1); -#else - gtk_table_attach (GTK_TABLE (tbl_wrapper), GTK_WIDGET (dtw->canvas_tbl), 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); -#endif } // connect scrollbar signals @@ -666,11 +558,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) // Separator gtk_box_pack_start(GTK_BOX(dtw->statusbar), -#if GTK_CHECK_VERSION(3,0,0) gtk_separator_new(GTK_ORIENTATION_VERTICAL), -#else - gtk_vseparator_new(), -#endif FALSE, FALSE, 0); // Layer Selector @@ -689,12 +577,7 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_label_set_lines (GTK_LABEL(dtw->select_status), 2); #endif -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(dtw->select_status, GTK_ALIGN_START); -#else - gtk_misc_set_alignment (GTK_MISC (dtw->select_status), 0.0, 0.5); -#endif - gtk_widget_set_size_request (dtw->select_status, 1, -1); // Display the initial welcome message in the statusbar @@ -720,65 +603,36 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) dtw->zoom_update = g_signal_connect (G_OBJECT (dtw->zoom_status), "populate_popup", G_CALLBACK (sp_dtw_zoom_populate_popup), dtw); // Cursor coordinates -#if GTK_CHECK_VERSION(3,0,0) dtw->coord_status = gtk_grid_new(); gtk_widget_set_name(dtw->coord_status, "CoordinateAndZStatus"); gtk_grid_set_row_spacing(GTK_GRID(dtw->coord_status), 0); gtk_grid_set_column_spacing(GTK_GRID(dtw->coord_status), 2); - GtkWidget* sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL); + auto sep = gtk_separator_new(GTK_ORIENTATION_VERTICAL); gtk_widget_set_name(sep, "CoordinateSeparator"); gtk_grid_attach(GTK_GRID(dtw->coord_status), GTK_WIDGET(sep), 0, 0, 1, 2); -#else - dtw->coord_status = gtk_table_new(5, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(dtw->coord_status), 0); - gtk_table_set_col_spacings(GTK_TABLE(dtw->coord_status), 2); - gtk_table_attach(GTK_TABLE(dtw->coord_status), - gtk_vseparator_new(), - 0, 1, 0, 2, - GTK_FILL, GTK_FILL, 0, 0); -#endif gtk_widget_set_tooltip_text (dtw->coord_status, _("Cursor coordinates")); - GtkWidget *label_x = gtk_label_new(_("X:")); - GtkWidget *label_y = gtk_label_new(_("Y:")); - -#if GTK_CHECK_VERSION(3,0,0) + auto label_x = gtk_label_new(_("X:")); + auto label_y = gtk_label_new(_("Y:")); gtk_widget_set_halign(label_x, GTK_ALIGN_START); gtk_widget_set_halign(label_y, GTK_ALIGN_START); gtk_grid_attach(GTK_GRID(dtw->coord_status), label_x, 1, 0, 1, 1); gtk_grid_attach(GTK_GRID(dtw->coord_status), label_y, 1, 1, 1, 1); -#else - gtk_misc_set_alignment (GTK_MISC(label_x), 0.0, 0.5); - gtk_misc_set_alignment (GTK_MISC(label_y), 0.0, 0.5); - gtk_table_attach(GTK_TABLE(dtw->coord_status), label_x, 1,2, 0,1, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), label_y, 1,2, 1,2, GTK_FILL, GTK_FILL, 0, 0); -#endif - dtw->coord_status_x = gtk_label_new(NULL); dtw->coord_status_y = gtk_label_new(NULL); gtk_label_set_markup( GTK_LABEL(dtw->coord_status_x), " 0.00 " ); gtk_label_set_markup( GTK_LABEL(dtw->coord_status_y), " 0.00 " ); - GtkWidget* label_z = gtk_label_new(_("Z:")); + auto label_z = gtk_label_new(_("Z:")); gtk_widget_set_name(label_z, "ZLabel"); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(dtw->coord_status_x, GTK_ALIGN_END); gtk_widget_set_halign(dtw->coord_status_y, GTK_ALIGN_END); gtk_grid_attach(GTK_GRID(dtw->coord_status), dtw->coord_status_x, 2, 0, 1, 1); gtk_grid_attach(GTK_GRID(dtw->coord_status), dtw->coord_status_y, 2, 1, 1, 1); gtk_grid_attach(GTK_GRID(dtw->coord_status), label_z, 3, 0, 1, 2); gtk_grid_attach(GTK_GRID(dtw->coord_status), dtw->zoom_status, 4, 0, 1, 2); -#else - gtk_misc_set_alignment (GTK_MISC(dtw->coord_status_x), 1.0, 0.5); - gtk_misc_set_alignment (GTK_MISC(dtw->coord_status_y), 1.0, 0.5); - gtk_table_attach(GTK_TABLE(dtw->coord_status), dtw->coord_status_x, 2,3, 0,1, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), dtw->coord_status_y, 2,3, 1,2, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), label_z, 3,4, 0,2, GTK_FILL, GTK_FILL, 0, 0); - gtk_table_attach(GTK_TABLE(dtw->coord_status), dtw->zoom_status, 4,5, 0,2, GTK_FILL, GTK_FILL, 0, 0); -#endif sp_set_font_size_smaller (dtw->coord_status); diff --git a/src/widgets/sp-attribute-widget.cpp b/src/widgets/sp-attribute-widget.cpp index fb7eb1420..2e782cf16 100644 --- a/src/widgets/sp-attribute-widget.cpp +++ b/src/widgets/sp-attribute-widget.cpp @@ -17,12 +17,7 @@ #include #include #include - -#if WITH_GTKMM_3_0 -# include -#else -# include -#endif +#include #include #include @@ -156,11 +151,7 @@ void SPAttributeTable::set_object(SPObject *object, release_connection = object->connectRelease (sigc::bind<1>(sigc::ptr_fun(&sp_attribute_table_object_release), this)); // Create table -#if WITH_GTKMM_3_0 table = new Gtk::Grid(); -#else - table = new Gtk::Table(attributes.size(), 2, false); -#endif if (!(parent == NULL)) gtk_container_add(GTK_CONTAINER(parent), (GtkWidget*)table->gobj()); @@ -171,27 +162,17 @@ void SPAttributeTable::set_object(SPObject *object, Gtk::Label *ll = new Gtk::Label (_(labels[i].c_str())); ll->show(); ll->set_alignment (1.0, 0.5); - -#if WITH_GTKMM_3_0 ll->set_vexpand(); ll->set_margin_left(XPAD); ll->set_margin_right(XPAD); ll->set_margin_top(XPAD); ll->set_margin_bottom(XPAD); table->attach(*ll, 0, i, 1, 1); -#else - table->attach (*ll, 0, 1, i, i + 1, - Gtk::FILL, - (Gtk::EXPAND | Gtk::FILL), - XPAD, YPAD ); -#endif Gtk::Entry *ee = new Gtk::Entry(); ee->show(); const gchar *val = object->getRepr()->attribute(attributes[i].c_str()); ee->set_text (val ? val : (const gchar *) ""); - -#if WITH_GTKMM_3_0 ee->set_hexpand(); ee->set_vexpand(); ee->set_margin_left(XPAD); @@ -199,12 +180,6 @@ void SPAttributeTable::set_object(SPObject *object, ee->set_margin_top(XPAD); ee->set_margin_bottom(XPAD); table->attach(*ee, 1, i, 1, 1); -#else - table->attach (*ee, 1, 2, i, i + 1, - (Gtk::EXPAND | Gtk::FILL), - (Gtk::EXPAND | Gtk::FILL), - XPAD, YPAD ); -#endif _entries.push_back(ee); g_signal_connect ( ee->gobj(), "changed", diff --git a/src/widgets/sp-attribute-widget.h b/src/widgets/sp-attribute-widget.h index d9b972201..161bb706a 100644 --- a/src/widgets/sp-attribute-widget.h +++ b/src/widgets/sp-attribute-widget.h @@ -25,12 +25,7 @@ namespace Gtk { class Entry; - -#if WITH_GTKMM_3_0 class Grid; -#else -class Table; -#endif } namespace Inkscape { @@ -138,11 +133,7 @@ private: /** * Container widget for the dynamically created child widgets (labels and entry boxes). */ -#if WITH_GTKMM_3_0 Gtk::Grid *table; -#else - Gtk::Table *table; -#endif /** * List of attributes. diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 84a6e77ad..990ec8d35 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -155,17 +155,9 @@ StrokeStyle::StrokeStyle() : Gtk::HBox *f = new Gtk::HBox(false, 0); f->show(); add(*f); - -#if WITH_GTKMM_3_0 table = new Gtk::Grid(); table->set_border_width(4); table->set_row_spacing(4); -#else - table = new Gtk::Table(3, 6, false); - table->set_border_width(4); - table->set_row_spacings(4); -#endif - table->show(); f->add(*table); @@ -181,13 +173,7 @@ StrokeStyle::StrokeStyle() : // stroke_width_set_unit will be removed (because ScalarUnit takes care of conversions itself), and // with it, the two remaining calls of stroke_average_width, allowing us to get rid of that // function in desktop-style. - -#if WITH_GTKMM_3_0 widthAdj = new Glib::RefPtr(Gtk::Adjustment::create(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0)); -#else - widthAdj = new Gtk::Adjustment(1.0, 0.0, 1000.0, 0.1, 10.0, 0.0); -#endif - widthSpin = new Inkscape::UI::Widget::SpinButton(*widthAdj, 0.1, 3); widthSpin->set_tooltip_text(_("Stroke width")); widthSpin->show(); @@ -213,12 +199,7 @@ StrokeStyle::StrokeStyle() : us->show(); hb->pack_start(*us, FALSE, FALSE, 0); - -#if WITH_GTKMM_3_0 (*widthAdj)->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::widthChangedCB)); -#else - widthAdj->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::widthChangedCB)); -#endif i++; /* Dash */ @@ -230,16 +211,10 @@ StrokeStyle::StrokeStyle() : dashSelector = Gtk::manage(new SPDashSelector); dashSelector->show(); - -#if WITH_GTKMM_3_0 dashSelector->set_hexpand(); dashSelector->set_halign(Gtk::ALIGN_FILL); dashSelector->set_valign(Gtk::ALIGN_CENTER); table->attach(*dashSelector, 1, i, 3, 1); -#else - table->attach(*dashSelector, 1, 4, i, i+1, (Gtk::EXPAND | Gtk::FILL), static_cast(0), 0, 0); -#endif - dashSelector->changed_signal.connect(sigc::mem_fun(*this, &StrokeStyle::lineDashChangedCB)); i++; @@ -323,28 +298,14 @@ StrokeStyle::StrokeStyle() : // miter limit is to cut off such spikes (i.e. convert them into bevels) // when they become too long. //spw_label(t, _("Miter _limit:"), 0, i); - -#if WITH_GTKMM_3_0 miterLimitAdj = new Glib::RefPtr(Gtk::Adjustment::create(4.0, 0.0, 100.0, 0.1, 10.0, 0.0)); miterLimitSpin = new Inkscape::UI::Widget::SpinButton(*miterLimitAdj, 0.1, 2); -#else - miterLimitAdj = new Gtk::Adjustment(4.0, 0.0, 100.0, 0.1, 10.0, 0.0); - miterLimitSpin = new Inkscape::UI::Widget::SpinButton(*miterLimitAdj, 0.1, 2); -#endif - miterLimitSpin->set_tooltip_text(_("Maximum length of the miter (in units of stroke width)")); miterLimitSpin->show(); sp_dialog_defocus_on_enter_cpp(miterLimitSpin); hb->pack_start(*miterLimitSpin, false, false, 0); - -#if WITH_GTKMM_3_0 (*miterLimitAdj)->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::miterLimitChangedCB)); - -#else - miterLimitAdj->signal_value_changed().connect(sigc::mem_fun(*this, &StrokeStyle::miterLimitChangedCB)); -#endif - i++; /* Cap type */ @@ -927,17 +888,9 @@ StrokeStyle::updateLine() if (unit->type == Inkscape::Util::UNIT_TYPE_LINEAR) { double avgwidth = Inkscape::Util::Quantity::convert(query.stroke_width.computed, "px", unit); -#if WITH_GTKMM_3_0 (*widthAdj)->set_value(avgwidth); -#else - widthAdj->set_value(avgwidth); -#endif } else { -#if WITH_GTKMM_3_0 (*widthAdj)->set_value(100); -#else - widthAdj->set_value(100); -#endif } // if none of the selected objects has a stroke, than quite some controls should be disabled @@ -958,11 +911,7 @@ StrokeStyle::updateLine() } if (result_ml != QUERY_STYLE_NOTHING) -#if WITH_GTKMM_3_0 (*miterLimitAdj)->set_value(query.stroke_miterlimit.value); // TODO: reflect averagedness? -#else - miterLimitAdj->set_value(query.stroke_miterlimit.value); // TODO: reflect averagedness? -#endif if (result_join != QUERY_STYLE_MULTIPLE_DIFFERENT && result_join != QUERY_STYLE_NOTHING ) { @@ -1050,13 +999,8 @@ StrokeStyle::scaleLine() SPCSSAttr *css = sp_repr_css_attr_new(); if (!items.empty()) { -#if WITH_GTKMM_3_0 double width_typed = (*widthAdj)->get_value(); double const miterlimit = (*miterLimitAdj)->get_value(); -#else - double width_typed = widthAdj->get_value(); - double const miterlimit = miterLimitAdj->get_value(); -#endif Inkscape::Util::Unit const *const unit = unitSelector->getUnit(); @@ -1096,11 +1040,7 @@ StrokeStyle::scaleLine() if (unit->type != Inkscape::Util::UNIT_TYPE_LINEAR) { // reset to 100 percent -#if WITH_GTKMM_3_0 (*widthAdj)->set_value(100.0); -#else - widthAdj->set_value(100.0); -#endif } } diff --git a/src/widgets/stroke-style.h b/src/widgets/stroke-style.h index d83067a4a..76582602d 100644 --- a/src/widgets/stroke-style.h +++ b/src/widgets/stroke-style.h @@ -23,12 +23,7 @@ #include "widgets/dash-selector.h" #include - -#if WITH_GTKMM_3_0 #include -#else -#include -#endif #include @@ -189,15 +184,9 @@ private: MarkerComboBox *startMarkerCombo; MarkerComboBox *midMarkerCombo; MarkerComboBox *endMarkerCombo; -#if WITH_GTKMM_3_0 Gtk::Grid *table; Glib::RefPtr *widthAdj; Glib::RefPtr *miterLimitAdj; -#else - Gtk::Table *table; - Gtk::Adjustment *widthAdj; - Gtk::Adjustment *miterLimitAdj; -#endif Inkscape::UI::Widget::SpinButton *miterLimitSpin; Inkscape::UI::Widget::SpinButton *widthSpin; Inkscape::UI::Widget::UnitMenu *unitSelector; diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 8113c9619..caca0c267 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -1016,26 +1016,18 @@ static GtkWidget* toolboxNewCommon( GtkWidget* tb, BarId id, GtkPositionType /*h GtkWidget *ToolboxFactory::createToolToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "ToolToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_TOOL, GTK_POS_TOP ); } GtkWidget *ToolboxFactory::createAuxToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "AuxToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_AUX, GTK_POS_LEFT ); } @@ -1046,38 +1038,26 @@ GtkWidget *ToolboxFactory::createAuxToolbox() GtkWidget *ToolboxFactory::createCommandsToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "CommandsToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_COMMANDS, GTK_POS_LEFT ); } GtkWidget *ToolboxFactory::createSnapToolbox() { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + auto tb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(tb, "SnapToolbox"); gtk_box_set_homogeneous(GTK_BOX(tb), FALSE); -#else - GtkWidget *tb = gtk_vbox_new(FALSE, 0); -#endif return toolboxNewCommon( tb, BAR_SNAP, GTK_POS_LEFT ); } static GtkWidget* createCustomSlider( GtkAdjustment *adjustment, gdouble climbRate, guint digits, Inkscape::UI::Widget::UnitTracker *unit_tracker) { -#if WITH_GTKMM_3_0 - Glib::RefPtr adj = Glib::wrap(adjustment, true); - Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(adj, climbRate, digits); -#else - Inkscape::UI::Widget::SpinButton *inkSpinner = new Inkscape::UI::Widget::SpinButton(*Glib::wrap(adjustment, true), climbRate, digits); -#endif + auto adj = Glib::wrap(adjustment, true); + auto inkSpinner = new Inkscape::UI::Widget::SpinButton(adj, climbRate, digits); inkSpinner->addUnitTracker(unit_tracker); inkSpinner = Gtk::manage( inkSpinner ); GtkWidget *widget = GTK_WIDGET( inkSpinner->gobj() ); @@ -1439,17 +1419,10 @@ void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) if ( aux_toolboxes[i].prep_func ) { // converted to GtkActions and UIManager - GtkWidget* kludge = dataHolders[aux_toolboxes[i].type_name]; - -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* holder = gtk_grid_new(); + auto kludge = dataHolders[aux_toolboxes[i].type_name]; + auto holder = gtk_grid_new(); gtk_widget_set_name( holder, "ToolbarHolder" ); gtk_grid_attach( GTK_GRID(holder), kludge, 2, 0, 1, 1); -#else - GtkWidget* holder = gtk_table_new( 1, 3, FALSE ); - gtk_table_attach( GTK_TABLE(holder), kludge, 2, 3, 0, 1, GTK_SHRINK, GTK_SHRINK, 0, 0 ); -#endif - gchar* tmp = g_strdup_printf( "/ui/%s", aux_toolboxes[i].ui_name ); GtkWidget* toolBar = gtk_ui_manager_get_widget( mgr, tmp ); g_free( tmp ); @@ -1461,30 +1434,20 @@ void setup_aux_toolbox(GtkWidget *toolbox, SPDesktop *desktop) Inkscape::IconSize toolboxSize = ToolboxFactory::prefToSize("/toolbox/small"); gtk_toolbar_set_icon_size( GTK_TOOLBAR(toolBar), static_cast(toolboxSize) ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(toolBar, TRUE); gtk_grid_attach( GTK_GRID(holder), toolBar, 0, 0, 1, 1); -#else - gtk_table_attach( GTK_TABLE(holder), toolBar, 0, 1, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0 ); -#endif if ( aux_toolboxes[i].swatch_verb_id != SP_VERB_INVALID ) { Inkscape::UI::Widget::StyleSwatch *swatch = new Inkscape::UI::Widget::StyleSwatch( NULL, _(aux_toolboxes[i].swatch_tip) ); swatch->setDesktop( desktop ); swatch->setClickVerb( aux_toolboxes[i].swatch_verb_id ); swatch->setWatchedTool( aux_toolboxes[i].swatch_tool, true ); - GtkWidget *swatch_ = GTK_WIDGET( swatch->gobj() ); - -#if GTK_CHECK_VERSION(3,0,0) + auto swatch_ = GTK_WIDGET( swatch->gobj() ); gtk_widget_set_margin_left(swatch_, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_set_margin_right(swatch_, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_set_margin_top(swatch_, AUX_SPACING); gtk_widget_set_margin_bottom(swatch_, AUX_SPACING); gtk_grid_attach( GTK_GRID(holder), swatch_, 1, 0, 1, 1); -#else - gtk_table_attach( GTK_TABLE(holder), swatch_, 1, 2, 0, 1, (GtkAttachOptions)(GTK_SHRINK | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), AUX_BETWEEN_BUTTON_GROUPS, AUX_SPACING ); -#endif } if(i==0){ gtk_widget_show_all( holder ); -- cgit v1.2.3 From 75a253f4352498e0b7b7de71e7701d97741cadf8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 28 Jul 2016 11:11:07 -0500 Subject: Adding in the icon (bzr r14950.1.17) --- setup/gui/inkscape.svg | 1 + 1 file changed, 1 insertion(+) create mode 120000 setup/gui/inkscape.svg diff --git a/setup/gui/inkscape.svg b/setup/gui/inkscape.svg new file mode 120000 index 000000000..494db289d --- /dev/null +++ b/setup/gui/inkscape.svg @@ -0,0 +1 @@ +../../share/branding/inkscape.svg \ No newline at end of file -- cgit v1.2.3 From 49a7927ecf31ace696e9e5770e8d6543c356db7a Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 28 Jul 2016 19:15:34 +0100 Subject: Finish removing GTK+ 2 fallbacks (bzr r15023.2.8) --- CMakeScripts/DefineDependsandFlags.cmake | 1 - build-x64-gtk3.xml | 2 - build-x64.xml | 2 - build.xml | 2 - configure.ac | 117 ++++++++++------------ src/desktop-events.cpp | 46 ++------- src/desktop.cpp | 4 - src/display/sp-canvas.cpp | 100 ++----------------- src/display/sp-canvas.h | 7 -- src/inkview.cpp | 16 +-- src/knot.cpp | 41 +------- src/live_effects/parameter/togglebutton.cpp | 6 +- src/main.cpp | 5 - src/svg-view-widget.cpp | 37 +------ src/svg-view.cpp | 4 - src/ui/dialog/export.cpp | 5 - src/ui/dialog/font-substitution.cpp | 6 +- src/ui/interface.cpp | 32 +----- src/ui/previewholder.cpp | 22 +---- src/ui/tools/dropper-tool.cpp | 8 -- src/ui/tools/select-tool.cpp | 8 -- src/ui/tools/tool-base.cpp | 16 --- src/ui/widget/dock-item.h | 4 - src/ui/widget/gimpcolorwheel.c | 137 ------------------------- src/ui/widget/selected-style.cpp | 8 -- src/ui/widget/spinbutton.h | 4 - src/widgets/button.cpp | 29 ------ src/widgets/eek-preview.cpp | 148 +--------------------------- src/widgets/ege-adjustment-action.cpp | 12 +-- src/widgets/ege-output-action.cpp | 6 +- src/widgets/ege-select-one-action.cpp | 32 +----- src/widgets/font-selector.cpp | 33 +------ src/widgets/gradient-image.cpp | 45 --------- src/widgets/gradient-selector.cpp | 13 +-- src/widgets/gradient-selector.h | 8 -- src/widgets/gradient-vector.cpp | 65 +----------- src/widgets/gradient-vector.h | 8 -- src/widgets/icon.cpp | 51 ---------- src/widgets/ink-action.cpp | 39 +------- src/widgets/ink-comboboxentry-action.cpp | 14 --- src/widgets/paint-selector.cpp | 54 ++-------- src/widgets/paint-selector.h | 8 -- src/widgets/select-toolbar.cpp | 6 +- src/widgets/sp-color-selector.cpp | 6 -- src/widgets/sp-color-selector.h | 9 -- src/widgets/sp-widget.cpp | 30 ------ src/widgets/sp-xmlview-attr-list.cpp | 19 +--- src/widgets/sp-xmlview-content.cpp | 19 +--- src/widgets/sp-xmlview-tree.cpp | 20 +--- src/widgets/spw-utilities.cpp | 69 +------------ src/widgets/spw-utilities.h | 12 --- src/widgets/text-toolbar.cpp | 19 +--- testfiles/CMakeLists.txt | 4 - 53 files changed, 111 insertions(+), 1307 deletions(-) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 2c5acaff3..b56343eda 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -247,7 +247,6 @@ set(TRY_GTKSPELL 1) gdl-3.0>=3.4 ) list(APPEND INKSCAPE_CXX_FLAGS ${GTK3_CFLAGS_OTHER}) - set(WITH_EXT_GDL 1) # Check whether we can use new features in Gtkmm 3.10 # TODO: Drop this test and bump the version number in the GTK test above diff --git a/build-x64-gtk3.xml b/build-x64-gtk3.xml index c9f6db905..b4fa4f1e7 100644 --- a/build-x64-gtk3.xml +++ b/build-x64-gtk3.xml @@ -159,11 +159,9 @@ #define HAVE_LIBLCMS2 1 - #define WITH_GTKMM_3_0 1 #define WITH_GTKMM_3_10 1 //#define WITH_GLIBMM_2_32 1 #define HAVE_GLIBMM_THREADS_H 1 - #define WITH_EXT_GDL 1 #define WITH_GDL_3_6 1 #define ENABLE_NLS 1 diff --git a/build-x64.xml b/build-x64.xml index 1781f99ab..682fd712e 100644 --- a/build-x64.xml +++ b/build-x64.xml @@ -159,8 +159,6 @@ #define HAVE_LIBLCMS2 1 - #define WITH_GTKMM_2_24 1 - #define ENABLE_NLS 1 #define HAVE_BIND_TEXTDOMAIN_CODESET 1 diff --git a/build.xml b/build.xml index 1e437d772..b782183ae 100644 --- a/build.xml +++ b/build.xml @@ -158,8 +158,6 @@ #define HAVE_LIBLCMS2 1 - #define WITH_GTKMM_2_24 1 - #define ENABLE_NLS 1 #define HAVE_BIND_TEXTDOMAIN_CODESET 1 diff --git a/configure.ac b/configure.ac index d18c62a95..2d922addf 100644 --- a/configure.ac +++ b/configure.ac @@ -712,76 +712,67 @@ fi AC_CHECK_HEADER([boost/unordered_set.hpp], [AC_DEFINE(HAVE_BOOST_UNORDERED_SET, 1, [Boost unordered_set (Boost >= 1.36)])], []) - ink_spell_pkg= - if pkg-config --exists gtkspell-3.0; then - ink_spell_pkg=gtkspell-3.0 - AC_DEFINE(WITH_GTKSPELL, 1, [enable gtk spelling widget]) - fi +ink_spell_pkg= +if pkg-config --exists gtkspell-3.0; then + ink_spell_pkg=gtkspell-3.0 + AC_DEFINE(WITH_GTKSPELL, 1, [enable gtk spelling widget]) +fi - PKG_CHECK_MODULES(GTK, - gtk+-3.0 >= 3.8 - gdk-3.0 >= 3.8 - gdl-3.0 > 3.4 - $ink_spell_pkg) - - dnl Separate out dependencies that are known to introduce - dnl C++-specific compiler flags - PKG_CHECK_MODULES(GTKMM, - gtkmm-3.0 >= 3.8 - gdkmm-3.0 >= 3.8) - - -dnl Drop this hack as soon as we've got rid of all GTK+ 2/3 conditional blocks -AC_DEFINE([WITH_EXT_GDL], [1], [Use external GDL]) - - # Check whether we can use new features in Gtkmm 3.10 - # TODO: Drop this test and bump the version number in the GTK test above - # as soon as all supported distributions provide Gtkmm >= 3.10 - PKG_CHECK_MODULES(GTKMM_3_10, - gtkmm-3.0 >= 3.10, - with_gtkmm_3_10=yes, - with_gtkmm_3_10=no) - - if test "x$with_gtkmm_3_10" = "xyes"; then - AC_MSG_RESULT([Using Gtkmm 3.10 build]) - AC_DEFINE(WITH_GTKMM_3_10,1,[Build with Gtkmm 3.10.x or higher]) - fi +PKG_CHECK_MODULES(GTK, + gtk+-3.0 >= 3.8 + gdk-3.0 >= 3.8 + gdl-3.0 > 3.4 + $ink_spell_pkg) - # Check whether we are using Gdl >= 3.6. This version introduced an API/ABI change. - # TODO: We should drop support for older versions of Gdl once all supported distros - # provide Gdl 3.6 or higher - PKG_CHECK_MODULES(GDL_3_6, gdl-3.0 >= 3.6, with_gdl_3_6=yes, with_gdl_3_6=no) +dnl Separate out dependencies that are known to introduce +dnl C++-specific compiler flags +PKG_CHECK_MODULES(GTKMM, + gtkmm-3.0 >= 3.8 + gdkmm-3.0 >= 3.8) + +# Check whether we can use new features in Gtkmm 3.10 +# TODO: Drop this test and bump the version number in the GTK test above +# as soon as all supported distributions provide Gtkmm >= 3.10 +PKG_CHECK_MODULES(GTKMM_3_10, + gtkmm-3.0 >= 3.10, + with_gtkmm_3_10=yes, + with_gtkmm_3_10=no) + +if test "x$with_gtkmm_3_10" = "xyes"; then + AC_MSG_RESULT([Using Gtkmm 3.10 build]) + AC_DEFINE(WITH_GTKMM_3_10,1,[Build with Gtkmm 3.10.x or higher]) +fi - if test "x$with_gdl_3_6" = "xyes"; then - AC_MSG_RESULT([Using Gdl 3.6 or higher]) - AC_DEFINE(WITH_GDL_3_6,1,[Build with Gdl 3.6 or higher]) - fi +# Check whether we are using Gdl >= 3.6. This version introduced an API/ABI change. +# TODO: We should drop support for older versions of Gdl once all supported distros +# provide Gdl 3.6 or higher +PKG_CHECK_MODULES(GDL_3_6, gdl-3.0 >= 3.6, with_gdl_3_6=yes, with_gdl_3_6=no) - dnl The following test is only defined if Gtk+ 3 development libraries - dnl are installed on the system. Therefore, it is guarded by an - dnl m4_ifdef statement. The ifdef can be probably be removed once we - dnl switch to Gtk+ 3 as a hard dependency +if test "x$with_gdl_3_6" = "xyes"; then + AC_MSG_RESULT([Using Gdl 3.6 or higher]) + AC_DEFINE(WITH_GDL_3_6,1,[Build with Gdl 3.6 or higher]) +fi - # Check whether we are using the X11 backend target for Gtk+ 3. - GTK_CHECK_BACKEND([x11], , [have_x11=yes], [have_x11=no]) +# Check whether we are using the X11 backend target for Gtk+ 3. +GTK_CHECK_BACKEND([x11], , [have_x11=yes], [have_x11=no]) - # Enable strict build options that should work on most systems unless - # the build has been configured not to do so - if test "x$enable_strict_build" != "xno"; then - # Add build flags here as soon as Inkscape trunk can build - # against Gtk+ 3 with the option enabled - echo "" - fi +# Enable strict build options that should work on most systems unless +# the build has been configured not to do so +if test "x$enable_strict_build" != "xno"; then + # Add build flags here as soon as Inkscape trunk can build + # against Gtk+ 3 with the option enabled + echo "" +fi - # Enable strict build options that are known to cause failure in - # Gtk+ 3 builds - if test "x$enable_strict_build" = "xhigh"; then - # Disable deprecated Gtk+ symbols that have been removed since - # Gtk+ 3. - CPPFLAGS="-DGTKMM_DISABLE_DEPRECATED $CPPFLAGS" - CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS" - CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS" - fi +# Enable strict build options that are known to cause failure in +# Gtk+ 3 builds +if test "x$enable_strict_build" = "xhigh"; then + # Disable deprecated Gtk+ symbols that have been removed since + # Gtk+ 3. + CPPFLAGS="-DGTKMM_DISABLE_DEPRECATED $CPPFLAGS" + CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS" + CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS" +fi INKSCAPE_CFLAGS="$GTK_CFLAGS $INKSCAPE_CFLAGS" INKSCAPE_CXX_DEPS_CFLAGS="$GTKMM_CFLAGS $INKSCAPE_CXX_DEPS_CFLAGS" diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp index 9ad06e2ec..1932a9864 100644 --- a/src/desktop-events.cpp +++ b/src/desktop-events.cpp @@ -95,14 +95,9 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge gint width, height; -#if GTK_CHECK_VERSION(3,0,0) - GdkDevice *device = gdk_event_get_device(event); + auto device = gdk_event_get_device(event); gdk_window_get_device_position(window, device, &wx, &wy, NULL); gdk_window_get_geometry(window, NULL /*x*/, NULL /*y*/, &width, &height); -#else - gdk_window_get_pointer(window, &wx, &wy, NULL); - gdk_window_get_geometry(window, NULL /*x*/, NULL /*y*/, &width, &height, NULL/*depth*/); -#endif Geom::Point const event_win(wx, wy); @@ -158,7 +153,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge guide = sp_guideline_new(desktop->guides, NULL, event_dt, normal); sp_guideline_set_color(SP_GUIDELINE(guide), desktop->namedview->guidehicolor); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_grab(device, gtk_widget_get_window(widget), GDK_OWNERSHIP_NONE, @@ -166,12 +160,6 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge (GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ), NULL, event->button.time); -#else - gdk_pointer_grab(gtk_widget_get_window (widget), FALSE, - (GdkEventMask)(GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK ), - NULL, NULL, - event->button.time); -#endif } break; case GDK_MOTION_NOTIFY: @@ -206,11 +194,7 @@ static gint sp_dt_ruler_event(GtkWidget *widget, GdkEvent *event, SPDesktopWidge if (clicked && event->button.button == 1) { sp_event_context_discard_delayed_snap_event(desktop->event_context); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_ungrab(device, event->button.time); -#else - gdk_pointer_ungrab(event->button.time); -#endif Geom::Point const event_w(sp_canvas_window_to_world(dtw->canvas, event_win)); Geom::Point event_dt(desktop->w2d(event_w)); @@ -535,11 +519,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) guide_cursor = sp_cursor_new_from_xpm(cursor_select_xpm , 1, 1); } gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(guide_cursor); -#else - gdk_cursor_unref(guide_cursor); -#endif char *guide_description = guide->description(); desktop->guidesMessageContext()->setF(Inkscape::NORMAL_MESSAGE, _("Guideline: %s"), guide_description); @@ -573,11 +553,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) GdkDisplay *display = gdk_display_get_default(); GdkCursor *guide_cursor = gdk_cursor_new_for_display(display, GDK_EXCHANGE); gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(guide_cursor); -#else - gdk_cursor_unref(guide_cursor); -#endif ret = TRUE; break; } @@ -595,11 +571,7 @@ gint sp_dt_guide_event(SPCanvasItem *item, GdkEvent *event, gpointer data) GdkDisplay *display = gdk_display_get_default(); GdkCursor *guide_cursor = gdk_cursor_new_for_display(display, GDK_EXCHANGE); gdk_window_set_cursor(gtk_widget_get_window (GTK_WIDGET(desktop->getCanvas())), guide_cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(guide_cursor); -#else - gdk_cursor_unref(guide_cursor); -#endif break; } default: @@ -622,19 +594,15 @@ static GdkInputSource lastType = GDK_SOURCE_MOUSE; static void init_extended() { Glib::ustring avoidName("pad"); - Glib::RefPtr display = Gdk::Display::get_default(); + auto display = Gdk::Display::get_default(); -#if GTK_CHECK_VERSION(3,0,0) - Glib::RefPtr dm = display->get_device_manager(); - std::vector< Glib::RefPtr > devices = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); -#else - std::vector< Glib::RefPtr > devices = display->list_devices(); -#endif + auto dm = display->get_device_manager(); + auto const devices = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE); if ( !devices.empty() ) { - for ( std::vector< Glib::RefPtr >::const_iterator dev = devices.begin(); dev != devices.end(); ++dev ) { - Glib::ustring const devName = (*dev)->get_name(); - Gdk::InputSource devSrc = (*dev)->get_source(); + for (auto const dev : devices) { + auto const devName = dev->get_name(); + auto devSrc = dev->get_source(); if ( !devName.empty() && (avoidName != devName) diff --git a/src/desktop.cpp b/src/desktop.cpp index d482d0d7f..83110f8e0 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -1444,11 +1444,7 @@ void SPDesktop::setWaitingCursor() GdkDisplay *display = gdk_display_get_default(); GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(getCanvas())), waiting); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(waiting); -#else - gdk_cursor_unref(waiting); -#endif // GDK needs the flush for the cursor change to take effect gdk_flush(); waiting_cursor = true; diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index 7d76fa043..9201168ef 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -322,13 +322,9 @@ void sp_canvas_item_dispose(GObject *object) if (item == item->canvas->_grabbed_item) { item->canvas->_grabbed_item = NULL; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_ungrab(device, GDK_CURRENT_TIME); -#else - gdk_pointer_ungrab (GDK_CURRENT_TIME); -#endif } if (item == item->canvas->_focused_item) { @@ -617,9 +613,8 @@ int sp_canvas_item_grab(SPCanvasItem *item, guint event_mask, GdkCursor *cursor, // fixme: Top hack (Lauris) // fixme: If we add key masks to event mask, Gdk will abort (Lauris) // fixme: But Canvas actualle does get key events, so all we need is routing these here -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_grab(device, getWindow(item->canvas), GDK_OWNERSHIP_NONE, @@ -627,11 +622,6 @@ int sp_canvas_item_grab(SPCanvasItem *item, guint event_mask, GdkCursor *cursor, (GdkEventMask)(event_mask & (~(GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK))), cursor, etime); -#else - gdk_pointer_grab( getWindow(item->canvas), FALSE, - (GdkEventMask)(event_mask & (~(GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK))), - NULL, cursor, etime); -#endif item->canvas->_grabbed_item = item; item->canvas->_grabbed_event_mask = event_mask; @@ -658,13 +648,9 @@ void sp_canvas_item_ungrab(SPCanvasItem *item, guint32 etime) item->canvas->_grabbed_item = NULL; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_ungrab(device, etime); -#else - gdk_pointer_ungrab (etime); -#endif } /** @@ -913,16 +899,9 @@ void sp_canvas_class_init(SPCanvasClass *klass) widget_class->realize = SPCanvas::handle_realize; widget_class->unrealize = SPCanvas::handle_unrealize; - -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = SPCanvas::handle_get_preferred_width; widget_class->get_preferred_height = SPCanvas::handle_get_preferred_height; widget_class->draw = SPCanvas::handle_draw; -#else - widget_class->size_request = SPCanvas::handle_size_request; - widget_class->expose_event = SPCanvas::handle_expose; -#endif - widget_class->size_allocate = SPCanvas::handle_size_allocate; widget_class->button_press_event = SPCanvas::handle_button; widget_class->button_release_event = SPCanvas::handle_button; @@ -980,13 +959,9 @@ void SPCanvas::shutdownTransients() if (_grabbed_item) { _grabbed_item = NULL; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_device_ungrab(device, GDK_CURRENT_TIME); -#else - gdk_pointer_ungrab(GDK_CURRENT_TIME); -#endif } removeIdle(); } @@ -1053,10 +1028,6 @@ void SPCanvas::handle_realize(GtkWidget *widget) attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gdk_visual_get_system(); -#if !GTK_CHECK_VERSION(3,0,0) - attributes.colormap = gdk_colormap_get_system(); -#endif - attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | @@ -1073,11 +1044,7 @@ void SPCanvas::handle_realize(GtkWidget *widget) GDK_SCROLL_MASK | GDK_FOCUS_CHANGE_MASK); -#if GTK_CHECK_VERSION(3,0,0) gint attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL; -#else - gint attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; -#endif GdkWindow *window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gtk_widget_set_window (widget, window); @@ -1086,18 +1053,8 @@ void SPCanvas::handle_realize(GtkWidget *widget) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); if (prefs->getBool("/options/useextinput/value", true)) { gtk_widget_set_events(widget, attributes.event_mask); -#if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_extension_events(widget, GDK_EXTENSION_EVENTS_ALL); - // TODO: Extension event stuff has been deprecated in GTK+ 3 -#endif } -#if !GTK_CHECK_VERSION(3,0,0) - // This does nothing in GTK+ 3 - GtkStyle *style = gtk_widget_get_style (widget); - gtk_widget_set_style (widget, gtk_style_attach (style, window)); -#endif - gtk_widget_set_realized (widget, TRUE); } @@ -1115,8 +1072,6 @@ void SPCanvas::handle_unrealize(GtkWidget *widget) (* GTK_WIDGET_CLASS(sp_canvas_parent_class)->unrealize)(widget); } - -#if GTK_CHECK_VERSION(3,0,0) void SPCanvas::handle_get_preferred_width(GtkWidget *widget, gint *minimum_width, gint *natural_width) { static_cast(SP_CANVAS (widget)); @@ -1130,16 +1085,6 @@ void SPCanvas::handle_get_preferred_height(GtkWidget *widget, gint *minimum_heig *minimum_height = 256; *natural_height = 256; } -#else -void SPCanvas::handle_size_request(GtkWidget *widget, GtkRequisition *req) -{ - static_cast(SP_CANVAS (widget)); - - req->width = 256; - req->height = 256; -} -#endif - void SPCanvas::handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { @@ -1219,9 +1164,7 @@ int SPCanvas::emitEvent(GdkEvent *event) break; case GDK_SCROLL: mask = GDK_SCROLL_MASK; -#if GTK_CHECK_VERSION(3,0,0) mask |= GDK_SMOOTH_SCROLL_MASK; -#endif break; default: mask = 0; @@ -1503,13 +1446,9 @@ gint SPCanvas::handle_scroll(GtkWidget *widget, GdkEventScroll *event) } static inline void request_motions(GdkWindow *w, GdkEventMotion *event) { -#if GTK_CHECK_VERSION(3,0,0) gdk_window_get_device_position(w, gdk_event_get_device((GdkEvent *)(event)), NULL, NULL, NULL); -#else - gdk_window_get_pointer(w, NULL, NULL, NULL); -#endif gdk_event_request_motions(event); } @@ -1746,16 +1685,12 @@ bool SPCanvas::paintRect(int xx0, int yy0, int xx1, int yy1) // Save the mouse location gint x, y; -#if GTK_CHECK_VERSION(3,0,0) - GdkDeviceManager *dm = gdk_display_get_device_manager(gdk_display_get_default()); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto dm = gdk_display_get_device_manager(gdk_display_get_default()); + auto device = gdk_device_manager_get_client_pointer(dm); gdk_window_get_device_position(gtk_widget_get_window(GTK_WIDGET(this)), device, &x, &y, NULL); -#else - gdk_window_get_pointer(gtk_widget_get_window(GTK_WIDGET(this)), &x, &y, NULL); -#endif setup.mouse_loc = sp_canvas_window_to_world(this, Geom::Point(x,y)); @@ -1818,21 +1753,6 @@ gboolean SPCanvas::handle_draw(GtkWidget *widget, cairo_t *cr) { return TRUE; } -#if !GTK_CHECK_VERSION(3,0,0) -gboolean SPCanvas::handle_expose(GtkWidget *widget, GdkEventExpose *event) -{ - cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(widget)); - - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - gboolean result = SPCanvas::handle_draw(widget, cr); - - cairo_destroy (cr); - - return result; -} -#endif - gint SPCanvas::handle_key_event(GtkWidget *widget, GdkEventKey *event) { diff --git a/src/display/sp-canvas.h b/src/display/sp-canvas.h index 171fdaf67..78d96d728 100644 --- a/src/display/sp-canvas.h +++ b/src/display/sp-canvas.h @@ -145,12 +145,8 @@ public: static void dispose(GObject *object); static void handle_realize(GtkWidget *widget); static void handle_unrealize(GtkWidget *widget); -#if GTK_CHECK_VERSION(3,0,0) static void handle_get_preferred_width(GtkWidget *widget, gint *min_w, gint *nat_w); static void handle_get_preferred_height(GtkWidget *widget, gint *min_h, gint *nat_h); -#else - static void handle_size_request(GtkWidget *widget, GtkRequisition *req); -#endif static void handle_size_allocate(GtkWidget *widget, GtkAllocation *allocation); static gint handle_button(GtkWidget *widget, GdkEventButton *event); @@ -162,9 +158,6 @@ public: static gint handle_scroll(GtkWidget *widget, GdkEventScroll *event); static gint handle_motion(GtkWidget *widget, GdkEventMotion *event); static gboolean handle_draw(GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) - static gboolean handle_expose(GtkWidget *widget, GdkEventExpose *event); -#endif static gint handle_key_event(GtkWidget *widget, GdkEventKey *event); static gint handle_crossing(GtkWidget *widget, GdkEventCrossing *event); static gint handle_focus_in(GtkWidget *widget, GdkEventFocus *event); diff --git a/src/inkview.cpp b/src/inkview.cpp index db4b1aeb0..f6dfe34fe 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -346,13 +346,7 @@ static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss) gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window)); g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss); g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); - -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); -#else - GtkWidget *t = gtk_hbutton_box_new(); -#endif - + auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(ctrlwin), t); #if GTK_CHECK_VERSION(3,10,0) @@ -431,19 +425,11 @@ static void sp_svgview_waiting_cursor(struct SPSlideShow *ss) GdkDisplay *display = gdk_display_get_default(); GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), waiting); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(waiting); -#else - gdk_cursor_unref(waiting); -#endif if (ctrlwin) { GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH); gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(waiting); -#else - gdk_cursor_unref(waiting); -#endif } while(gtk_events_pending()) { gtk_main_iteration(); diff --git a/src/knot.cpp b/src/knot.cpp index bfc0c4f0b..8027a0301 100644 --- a/src/knot.cpp +++ b/src/knot.cpp @@ -126,21 +126,14 @@ SPKnot::SPKnot(SPDesktop *desktop, gchar const *tip) } SPKnot::~SPKnot() { -#if GTK_CHECK_VERSION(3,0,0) - GdkDisplay *display = gdk_display_get_default(); - GdkDeviceManager *dm = gdk_display_get_device_manager(display); - GdkDevice *device = gdk_device_manager_get_client_pointer(dm); + auto display = gdk_display_get_default(); + auto dm = gdk_display_get_device_manager(display); + auto device = gdk_device_manager_get_client_pointer(dm); if ((this->flags & SP_KNOT_GRABBED) && gdk_display_device_is_grabbed(display, device)) { // This happens e.g. when deleting a node in node tool while dragging it gdk_device_ungrab(device, GDK_CURRENT_TIME); } -#else - if ((this->flags & SP_KNOT_GRABBED) && gdk_pointer_is_grabbed ()) { - // This happens e.g. when deleting a node in node tool while dragging it - gdk_pointer_ungrab (GDK_CURRENT_TIME); - } -#endif if (this->_event_handler_id > 0) { g_signal_handler_disconnect(G_OBJECT (this->item), this->_event_handler_id); @@ -154,11 +147,7 @@ SPKnot::~SPKnot() { for (gint i = 0; i < SP_KNOT_VISIBLE_STATES; i++) { if (this->cursor[i]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor[i]); -#else - gdk_cursor_unref(this->cursor[i]); -#endif this->cursor[i] = NULL; } } @@ -525,57 +514,33 @@ void SPKnot::setImage(guchar* normal, guchar* mouseover, guchar* dragging) { void SPKnot::setCursor(GdkCursor* normal, GdkCursor* mouseover, GdkCursor* dragging) { if (cursor[SP_KNOT_STATE_NORMAL]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor[SP_KNOT_STATE_NORMAL]); -#else - gdk_cursor_unref(cursor[SP_KNOT_STATE_NORMAL]); -#endif } cursor[SP_KNOT_STATE_NORMAL] = normal; if (normal) { -#if GTK_CHECK_VERSION(3,0,0) g_object_ref(normal); -#else - gdk_cursor_ref(normal); -#endif } if (cursor[SP_KNOT_STATE_MOUSEOVER]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor[SP_KNOT_STATE_MOUSEOVER]); -#else - gdk_cursor_unref(cursor[SP_KNOT_STATE_MOUSEOVER]); -#endif } cursor[SP_KNOT_STATE_MOUSEOVER] = mouseover; if (mouseover) { -#if GTK_CHECK_VERSION(3,0,0) g_object_ref(mouseover); -#else - gdk_cursor_ref(mouseover); -#endif } if (cursor[SP_KNOT_STATE_DRAGGING]) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor[SP_KNOT_STATE_DRAGGING]); -#else - gdk_cursor_unref(cursor[SP_KNOT_STATE_DRAGGING]); -#endif } cursor[SP_KNOT_STATE_DRAGGING] = dragging; if (dragging) { -#if GTK_CHECK_VERSION(3,0,0) g_object_ref(dragging); -#else - gdk_cursor_ref(dragging); -#endif } } diff --git a/src/live_effects/parameter/togglebutton.cpp b/src/live_effects/parameter/togglebutton.cpp index c761731b7..023bebc03 100644 --- a/src/live_effects/parameter/togglebutton.cpp +++ b/src/live_effects/parameter/togglebutton.cpp @@ -74,12 +74,8 @@ ToggleButtonParam::param_newWidget() false, param_effect->getRepr(), param_effect->getSPDoc()) ); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget * box_button = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + auto box_button = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(box_button), false); -#else - GtkWidget * box_button = gtk_hbox_new (false, 0); -#endif GtkWidget * label_button = gtk_label_new (""); if (!param_label.empty()) { if(value || inactive_label.empty()){ diff --git a/src/main.cpp b/src/main.cpp index 8cf52127b..3c0244e8b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -52,10 +52,8 @@ #include #include -#if GTK_CHECK_VERSION(3,0,0) #include #include -#endif #include "inkgc/gc-core.h" @@ -1056,8 +1054,6 @@ sp_main_gui(int argc, char const **argv) #endif g_free(usericondir); - -#if GTK_CHECK_VERSION(3,0,0) // Add style sheet (GTK3) Glib::RefPtr screen = Gdk::Screen::get_default(); @@ -1114,7 +1110,6 @@ sp_main_gui(int argc, char const **argv) Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } -#endif gdk_event_handler_set((GdkEventFunc)snooper, NULL, NULL); Inkscape::Debug::log_display_config(); diff --git a/src/svg-view-widget.cpp b/src/svg-view-widget.cpp index b1fddd7e6..7c72686b4 100644 --- a/src/svg-view-widget.cpp +++ b/src/svg-view-widget.cpp @@ -27,7 +27,6 @@ static void sp_svg_view_widget_dispose(GObject *object); static void sp_svg_view_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void sp_svg_view_widget_size_request (GtkWidget *widget, GtkRequisition *req); -#if GTK_CHECK_VERSION(3,0,0) static void sp_svg_view_widget_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width); @@ -35,7 +34,6 @@ static void sp_svg_view_widget_get_preferred_width(GtkWidget *widget, static void sp_svg_view_widget_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height); -#endif static void sp_svg_view_widget_view_resized (SPViewWidget *vw, Inkscape::UI::View::View *view, gdouble width, gdouble height); @@ -53,12 +51,8 @@ static void sp_svg_view_widget_class_init(SPSVGSPViewWidgetClass *klass) object_class->dispose = sp_svg_view_widget_dispose; widget_class->size_allocate = sp_svg_view_widget_size_allocate; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = sp_svg_view_widget_get_preferred_width; widget_class->get_preferred_height = sp_svg_view_widget_get_preferred_height; -#else - widget_class->size_request = sp_svg_view_widget_size_request; -#endif vw_class->view_resized = sp_svg_view_widget_view_resized; } @@ -83,16 +77,10 @@ static void sp_svg_view_widget_init(SPSVGSPViewWidget *vw) gtk_widget_show (vw->sw); /* Canvas */ -#if !GTK_CHECK_VERSION(3,0,0) - GdkColormap *cmap = gdk_colormap_get_system(); - gtk_widget_push_colormap(cmap); -#endif - vw->canvas = SPCanvas::createAA(); -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); - GtkStyleContext *style_context = gtk_widget_get_style_context(GTK_WIDGET(vw->canvas)); + auto css_provider = gtk_css_provider_new(); + auto style_context = gtk_widget_get_style_context(GTK_WIDGET(vw->canvas)); gtk_css_provider_load_from_data(css_provider, "SPCanvas {\n" @@ -103,19 +91,8 @@ static void sp_svg_view_widget_init(SPSVGSPViewWidget *vw) gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - gtk_widget_pop_colormap (); - GtkStyle *style = gtk_style_copy (gtk_widget_get_style (vw->canvas)); - style->bg[GTK_STATE_NORMAL] = style->white; - gtk_widget_set_style (vw->canvas, style); -#endif - -#if GTK_CHECK_VERSION(3,0,0) - gtk_container_add (GTK_CONTAINER (vw->sw), vw->canvas); -#else - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (vw->sw), vw->canvas); -#endif + gtk_container_add (GTK_CONTAINER (vw->sw), vw->canvas); gtk_widget_show (vw->canvas); /* View */ @@ -146,7 +123,6 @@ static void sp_svg_view_widget_size_request(GtkWidget *widget, GtkRequisition *r SPSVGSPViewWidget *vw = SP_SVG_VIEW_WIDGET (widget); Inkscape::UI::View::View *v = SP_VIEW_WIDGET_VIEW (widget); -#if GTK_CHECK_VERSION(3,0,0) if (GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->get_preferred_width && GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->get_preferred_height) { gint width_min, height_min, width_nat, height_nat; @@ -156,11 +132,6 @@ static void sp_svg_view_widget_size_request(GtkWidget *widget, GtkRequisition *r req->width=width_min; req->height=height_min; } -#else - if (GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->size_request) { - GTK_WIDGET_CLASS(sp_svg_view_widget_parent_class)->size_request(widget, req); - } -#endif if (v->doc()) { SPSVGView *svgv; @@ -189,7 +160,6 @@ static void sp_svg_view_widget_size_request(GtkWidget *widget, GtkRequisition *r } } -#if GTK_CHECK_VERSION(3,0,0) static void sp_svg_view_widget_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; @@ -203,7 +173,6 @@ static void sp_svg_view_widget_get_preferred_height(GtkWidget *widget, gint *min sp_svg_view_widget_size_request(widget, &requisition); *minimal_height = *natural_height = requisition.height; } -#endif /** * Callback connected with size_allocate signal. diff --git a/src/svg-view.cpp b/src/svg-view.cpp index 53fa8633f..00ea0d381 100644 --- a/src/svg-view.cpp +++ b/src/svg-view.cpp @@ -107,11 +107,7 @@ void SPSVGView::mouseover() GdkCursor *cursor = gdk_cursor_new_for_display(display, GDK_HAND2); GdkWindow *window = gtk_widget_get_window (GTK_WIDGET(SP_CANVAS_ITEM(_drawing)->canvas)); gdk_window_set_cursor(window, cursor); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor); -#else - gdk_cursor_unref(cursor); -#endif } void SPSVGView::mouseout() diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 5e7c68985..5167ca2a2 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -67,12 +67,7 @@ #include "helper/png-write.h" -#if WITH_EXT_GDL #include -#else -#include "libgdl/gdl-dock-item.h" -#endif - // required to set status message after export #include "desktop.h" diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index f219f3db6..18a7241a4 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -106,11 +106,7 @@ FontSubstitution::show(Glib::ustring out, std::vector &l) cbWarning->set_label(_("Don't show this warning again")); cbWarning->show(); -#if GTK_CHECK_VERSION(3,0,0) - Gtk::Box * box = warning.get_content_area(); -#else - Gtk::Box * box = warning.get_vbox(); -#endif + auto box = warning.get_content_area(); box->set_spacing(2); box->pack_start(*scrollwindow, true, true, 4); box->pack_start(*cbSelect, false, false, 0); diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index ab29471ed..1d2fa5b34 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -79,9 +79,7 @@ #include "message-stack.h" #include "ui/dialog/layer-properties.h" -#if GTK_CHECK_VERSION(3,0,0) - #include "widgets/image-menu-item.h" -#endif +#include "widgets/image-menu-item.h" #include @@ -417,11 +415,7 @@ sp_ui_menuitem_add_icon( GtkWidget *item, gchar *icon_name ) icon = sp_icon_new( Inkscape::ICON_SIZE_MENU, icon_name ); gtk_widget_show(icon); -#if GTK_CHECK_VERSION(3,0,0) image_menu_item_set_image((ImageMenuItem *) item, icon); -#else - gtk_image_menu_item_set_image((GtkImageMenuItem *) item, icon); -#endif } // end of sp_ui_menu_add_icon void @@ -475,11 +469,7 @@ static GtkWidget *sp_ui_menu_append_item_from_verb(GtkMenu *menu, Inkscape::Verb if (radio) { item = gtk_radio_menu_item_new_with_mnemonic(group, action->name); } else { -#if GTK_CHECK_VERSION(3,0,0) item = image_menu_item_new_with_mnemonic(action->name); -#else - item = gtk_image_menu_item_new_with_mnemonic(action->name); -#endif } gtk_label_set_markup_with_mnemonic( GTK_LABEL(gtk_bin_get_child(GTK_BIN (item))), action->name); @@ -570,11 +560,7 @@ static bool getViewStateFromPref(Inkscape::UI::View::View *view, gchar const *pr return prefs->getBool(pref_path, true); } -#if GTK_CHECK_VERSION(3,0,0) static gboolean checkitem_update(GtkWidget *widget, cairo_t * /*cr*/, gpointer user_data) -#else -static gboolean checkitem_update(GtkWidget *widget, GdkEventExpose * /*event*/, gpointer user_data) -#endif { GtkCheckMenuItem *menuitem=GTK_CHECK_MENU_ITEM(widget); @@ -631,11 +617,7 @@ static void taskToggled(GtkCheckMenuItem *menuitem, gpointer userData) /** * Callback function to update the status of the radio buttons in the View -> Display mode menu (Normal, No Filters, Outline) and Color display mode. */ -#if GTK_CHECK_VERSION(3,0,0) static gboolean update_view_menu(GtkWidget *widget, cairo_t * /*cr*/, gpointer user_data) -#else -static gboolean update_view_menu(GtkWidget *widget, GdkEventExpose * /*event*/, gpointer user_data) -#endif { SPAction *action = (SPAction *) user_data; g_assert(action->id != NULL); @@ -679,11 +661,7 @@ static gboolean update_view_menu(GtkWidget *widget, GdkEventExpose * /*event*/, static void sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View *view, gchar const *label, gchar const *tip, gchar const *pref, void (*callback_toggle)(GtkCheckMenuItem *, gpointer user_data), -#if GTK_CHECK_VERSION(3,0,0) gboolean (*callback_update)(GtkWidget *widget, cairo_t *cr, gpointer user_data), -#else - gboolean (*callback_update)(GtkWidget *widget, GdkEventExpose *event, gpointer user_data), -#endif Inkscape::Verb *verb) { unsigned int shortcut = (verb) ? sp_shortcut_get_primary(verb) : 0; @@ -707,11 +685,7 @@ sp_ui_menu_append_check_item_from_verb(GtkMenu *menu, Inkscape::UI::View::View * g_signal_connect( G_OBJECT(item), "toggled", (GCallback) callback_toggle, (void *) pref); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect( G_OBJECT(item), "draw", (GCallback) callback_update, (void *) pref); -#else - g_signal_connect( G_OBJECT(item), "expose_event", (GCallback) callback_update, (void *) pref); -#endif (*callback_update)(item, NULL, (void *)pref); @@ -854,11 +828,7 @@ static void sp_ui_build_dyn_menus(Inkscape::XML::Node *menus, GtkWidget *menu, I } if (verb->get_code() != SP_VERB_NONE) { SPAction *action = verb->get_action(Inkscape::ActionContext(view)); -#if GTK_CHECK_VERSION(3,0,0) g_signal_connect( G_OBJECT(item), "draw", (GCallback) update_view_menu, (void *) action); -#else - g_signal_connect( G_OBJECT(item), "expose_event", (GCallback) update_view_menu, (void *) action); -#endif } } else if (menu_pntr->attribute("check") != NULL) { if (verb->get_code() != SP_VERB_NONE) { diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 8336467c4..bb7f077b0 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -259,12 +259,8 @@ void PreviewHolder::on_size_allocate( Gtk::Allocation& allocation ) if ( _insides && !_wrap && (_view != VIEW_TYPE_LIST) && (_anchor == SP_ANCHOR_NORTH || _anchor == SP_ANCHOR_SOUTH) ) { Gtk::Requisition req; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition req_natural; _insides->get_preferred_size(req, req_natural); -#else - req = _insides->size_request(); -#endif gint delta = allocation.get_width() - req.width; if ( (delta > 4) && req.height < allocation.get_height() ) { @@ -306,43 +302,27 @@ void PreviewHolder::calcGridSize( const Gtk::Widget* thing, int itemCount, int& if ( _anchor == SP_ANCHOR_SOUTH || _anchor == SP_ANCHOR_NORTH ) { Gtk::Requisition req; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition req_natural; _scroller->get_preferred_size(req, req_natural); -#else - req = _scroller->size_request(); -#endif int currW = _scroller->get_width(); if ( currW > req.width ) { req.width = currW; } -#if GTK_CHECK_VERSION(3,0,0) - Gtk::Scrollbar* hs = dynamic_cast(_scroller)->get_hscrollbar(); -#else - Gtk::HScrollbar* hs = dynamic_cast(_scroller)->get_hscrollbar(); -#endif + auto hs = dynamic_cast(_scroller)->get_hscrollbar(); if ( hs ) { Gtk::Requisition scrollReq; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition scrollReq_natural; hs->get_preferred_size(scrollReq, scrollReq_natural); -#else - scrollReq = hs->size_request(); -#endif // the +8 is a temporary hack req.height -= scrollReq.height + 8; } Gtk::Requisition req2; -#if GTK_CHECK_VERSION(3,0,0) Gtk::Requisition req2_natural; const_cast(thing)->get_preferred_size(req2, req2_natural); -#else - req2 = const_cast(thing)->size_request(); -#endif int h2 = ((req2.height > 0) && (req.height > req2.height)) ? (req.height / req2.height) : 1; int w2 = ((req2.width > 0) && (req.width > req2.width)) ? (req.width / req2.width) : 1; diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp index c838c27d5..fbc5f088c 100644 --- a/src/ui/tools/dropper-tool.cpp +++ b/src/ui/tools/dropper-tool.cpp @@ -121,20 +121,12 @@ void DropperTool::finish() { } if (cursor_dropper_fill) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor_dropper_fill); -#else - gdk_cursor_unref (cursor_dropper_fill); -#endif cursor_dropper_fill = NULL; } if (cursor_dropper_stroke) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cursor_dropper_stroke); -#else - gdk_cursor_unref (cursor_dropper_stroke); -#endif cursor_dropper_fill = NULL; } diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index b5ec3d88e..b29fb6979 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -128,20 +128,12 @@ SelectTool::~SelectTool() { this->_describer = NULL; if (CursorSelectDragging) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(CursorSelectDragging); -#else - gdk_cursor_unref (CursorSelectDragging); -#endif CursorSelectDragging = NULL; } if (CursorSelectMouseover) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(CursorSelectMouseover); -#else - gdk_cursor_unref (CursorSelectMouseover); -#endif CursorSelectMouseover = NULL; } } diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 17debb59c..d504d82eb 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -118,11 +118,7 @@ ToolBase::~ToolBase() { } if (this->cursor != NULL) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor); -#else - gdk_cursor_unref(this->cursor); -#endif this->cursor = NULL; } @@ -182,11 +178,7 @@ void ToolBase::sp_event_context_update_cursor() { ); if (pixbuf != NULL) { if (this->cursor) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor); -#else - gdk_cursor_unref(this->cursor); -#endif } this->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, this->hot_x, this->hot_y); g_object_unref(pixbuf); @@ -196,11 +188,7 @@ void ToolBase::sp_event_context_update_cursor() { if (pixbuf) { if (this->cursor) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(this->cursor); -#else - gdk_cursor_unref(this->cursor); -#endif } this->cursor = gdk_cursor_new_from_pixbuf(display, pixbuf, this->hot_x, this->hot_y); @@ -771,11 +759,9 @@ bool ToolBase::root_handler(GdkEvent* event) { int const wheel_scroll = prefs->getIntLimited( "/options/wheelscroll/value", 40, 0, 1000); -#if GTK_CHECK_VERSION(3,0,0) // Size of smooth-scrolls (only used in GTK+ 3) gdouble delta_x = 0; gdouble delta_y = 0; -#endif /* shift + wheel, pan left--right */ if (event->scroll.state & GDK_SHIFT_MASK) { @@ -836,12 +822,10 @@ bool ToolBase::root_handler(GdkEvent* event) { desktop->scroll_world(-wheel_scroll, 0); break; -#if GTK_CHECK_VERSION(3,0,0) case GDK_SCROLL_SMOOTH: gdk_event_get_scroll_deltas(event, &delta_x, &delta_y); desktop->scroll_world(delta_x, delta_y); break; -#endif } } break; diff --git a/src/ui/widget/dock-item.h b/src/ui/widget/dock-item.h index 25a69d94c..2df45b207 100644 --- a/src/ui/widget/dock-item.h +++ b/src/ui/widget/dock-item.h @@ -19,11 +19,7 @@ #include #include -#if WITH_EXT_GDL #include -#else -#include "libgdl/gdl.h" -#endif namespace Gtk { class HButtonBox; diff --git a/src/ui/widget/gimpcolorwheel.c b/src/ui/widget/gimpcolorwheel.c index d54486505..212391497 100644 --- a/src/ui/widget/gimpcolorwheel.c +++ b/src/ui/widget/gimpcolorwheel.c @@ -110,7 +110,6 @@ static gboolean gimp_color_wheel_button_release (GtkWidget *widget, GdkEventButton *event); static gboolean gimp_color_wheel_motion (GtkWidget *widget, GdkEventMotion *event); -#if GTK_CHECK_VERSION(3,0,0) static gboolean gimp_color_wheel_draw (GtkWidget *widget, cairo_t *cr); static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, @@ -119,13 +118,6 @@ static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, static void gimp_color_wheel_get_preferred_height (GtkWidget *widget, gint *minimum_height, gint *natural_height); -#else -static gboolean gimp_color_wheel_expose (GtkWidget *widget, - GdkEventExpose *event); -static void gimp_color_wheel_size_request (GtkWidget *widget, - GtkRequisition *requisition); -#endif - static gboolean gimp_color_wheel_grab_broken (GtkWidget *widget, GdkEventGrabBroken *event); static gboolean gimp_color_wheel_focus (GtkWidget *widget, @@ -157,16 +149,9 @@ gimp_color_wheel_class_init (GimpColorWheelClass *class) widget_class->button_press_event = gimp_color_wheel_button_press; widget_class->button_release_event = gimp_color_wheel_button_release; widget_class->motion_notify_event = gimp_color_wheel_motion; - -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = gimp_color_wheel_get_preferred_width; widget_class->get_preferred_height = gimp_color_wheel_get_preferred_height; widget_class->draw = gimp_color_wheel_draw; -#else - widget_class->size_request = gimp_color_wheel_size_request; - widget_class->expose_event = gimp_color_wheel_expose; -#endif - widget_class->focus = gimp_color_wheel_focus; widget_class->grab_broken_event = gimp_color_wheel_grab_broken; @@ -302,10 +287,6 @@ gimp_color_wheel_realize (GtkWidget *widget) priv->window = gdk_window_new (parent_window, &attr, attr_mask); gdk_window_set_user_data (priv->window, wheel); - -#if !GTK_CHECK_VERSION(3,0,0) - gtk_widget_style_attach (widget); -#endif } static void @@ -321,7 +302,6 @@ gimp_color_wheel_unrealize (GtkWidget *widget) GTK_WIDGET_CLASS (parent_class)->unrealize (widget); } -#if GTK_CHECK_VERSION(3,0,0) static void gimp_color_wheel_get_preferred_width (GtkWidget *widget, gint *minimum_width, @@ -353,23 +333,6 @@ gimp_color_wheel_get_preferred_height (GtkWidget *widget, *minimum_height = *natural_height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); } -#else -static void -gimp_color_wheel_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - gint focus_width; - gint focus_pad; - - gtk_widget_style_get (widget, - "focus-line-width", &focus_width, - "focus-padding", &focus_pad, - NULL); - - requisition->width = DEFAULT_SIZE + 2 * (focus_width + focus_pad); - requisition->height = DEFAULT_SIZE + 2 * (focus_width + focus_pad); -} -#endif static void gimp_color_wheel_size_allocate (GtkWidget *widget, @@ -688,7 +651,6 @@ set_cross_grab (GimpColorWheel *wheel, gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (wheel)), GDK_CROSSHAIR); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_grab (gtk_get_current_event_device(), priv->window, GDK_OWNERSHIP_NONE, @@ -698,14 +660,6 @@ set_cross_grab (GimpColorWheel *wheel, GDK_BUTTON_RELEASE_MASK, cursor, time); g_object_unref (cursor); -#else - gdk_pointer_grab (priv->window, FALSE, - GDK_POINTER_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK, - NULL, cursor, time); - gdk_cursor_unref (cursor); -#endif } static gboolean gimp_color_wheel_grab_broken(GtkWidget *widget, GdkEventGrabBroken *event) @@ -805,13 +759,8 @@ gimp_color_wheel_button_release (GtkWidget *widget, else g_assert_not_reached (); -#if GTK_CHECK_VERSION(3,0,0) gdk_device_ungrab (gtk_get_current_event_device(), event->time); -#else - gdk_display_pointer_ungrab (gdk_window_get_display (event->window), - event->time); -#endif return TRUE; } @@ -859,11 +808,7 @@ static void paint_ring (GimpColorWheel *wheel, cairo_t *cr) { -#if GTK_CHECK_VERSION(3,0,0) GtkWidget *widget = GTK_WIDGET (wheel); -#else - GtkAllocation allocation; -#endif GimpColorWheelPrivate *priv = wheel->priv; gint width, height; gint xx, yy; @@ -879,14 +824,8 @@ paint_ring (GimpColorWheel *wheel, cairo_t *source_cr; gint stride; -#if GTK_CHECK_VERSION(3,0,0) width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); -#else - gtk_widget_get_allocation (GTK_WIDGET (wheel), &allocation); - width = allocation.width; - height = allocation.height; -#endif center_x = width / 2.0; center_y = height / 2.0; @@ -1027,19 +966,10 @@ paint_triangle (GimpColorWheel *wheel, gdouble r, g, b; gint stride; gint width, height; -#if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context; width = gtk_widget_get_allocated_width (widget); height = gtk_widget_get_allocated_height (widget); -#else - gchar *detail; - - GtkAllocation allocation; - gtk_widget_get_allocation (widget, &allocation); - width = allocation.width; - height = allocation.height; -#endif /* Compute triangle's vertices */ @@ -1180,28 +1110,18 @@ paint_triangle (GimpColorWheel *wheel, b = priv->v; hsv_to_rgb (&r, &g, &b); -#if GTK_CHECK_VERSION(3,0,0) context = gtk_widget_get_style_context (widget); gtk_style_context_save (context); -#endif if (INTENSITY (r, g, b) > 0.5) { -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_add_class (context, "light-area-focus"); -#else - detail = "colorwheel_light"; -#endif cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); } else { -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_add_class (context, "dark-area-focus"); -#else - detail = "colorwheel_dark"; -#endif cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); } @@ -1224,31 +1144,16 @@ paint_triangle (GimpColorWheel *wheel, "focus-padding", &focus_pad, NULL); -#if GTK_CHECK_VERSION(3,0,0) gtk_render_focus (context, cr, xx - FOCUS_RADIUS - focus_width - focus_pad, yy - FOCUS_RADIUS - focus_width - focus_pad, 2 * (FOCUS_RADIUS + focus_width + focus_pad), 2 * (FOCUS_RADIUS + focus_width + focus_pad)); -#else - gtk_widget_get_allocation (widget, &allocation); - gtk_paint_focus (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - NULL, widget, detail, - allocation.x + xx - FOCUS_RADIUS - focus_width - focus_pad, - allocation.y + yy - FOCUS_RADIUS - focus_width - focus_pad, - 2 * (FOCUS_RADIUS + focus_width + focus_pad), - 2 * (FOCUS_RADIUS + focus_width + focus_pad)); -#endif } -#if GTK_CHECK_VERSION(3,0,0) gtk_style_context_restore (context); -#endif } -#if GTK_CHECK_VERSION(3,0,0) static gboolean gimp_color_wheel_draw (GtkWidget *widget, cairo_t *cr) @@ -1273,48 +1178,6 @@ gimp_color_wheel_draw (GtkWidget *widget, return FALSE; } -#else -static gint -gimp_color_wheel_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - cairo_t *cr = gdk_cairo_create (gtk_widget_get_window (widget)); - - GimpColorWheel *wheel = GIMP_COLOR_WHEEL (widget); - GimpColorWheelPrivate *priv = wheel->priv; - gboolean draw_focus; - GtkAllocation allocation; - - if (! (event->window == gtk_widget_get_window (widget) && - gtk_widget_is_drawable (widget))) - return FALSE; - - gdk_cairo_region (cr, event->region); - cairo_clip (cr); - - gtk_widget_get_allocation (widget, &allocation); - cairo_translate (cr, allocation.x, allocation.y); - - draw_focus = gtk_widget_has_focus (widget); - - paint_ring (wheel, cr); - paint_triangle (wheel, cr, draw_focus); - - cairo_destroy (cr); - - if (draw_focus && priv->focus_on_ring) - gtk_paint_focus (gtk_widget_get_style (widget), - gtk_widget_get_window (widget), - gtk_widget_get_state (widget), - &event->area, widget, NULL, - allocation.x, - allocation.y, - allocation.width, - allocation.height); - - return FALSE; -} -#endif static gboolean gimp_color_wheel_focus (GtkWidget *widget, diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index 7679fadb4..418cd13ae 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -1320,11 +1320,7 @@ RotateableSwatch::do_motion(double by, guint modifier) { g_object_unref(pixbuf); gdk_window_set_cursor(gtk_widget_get_window(w), cr); -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cr); -#else - gdk_cursor_unref(cr); -#endif cr = NULL; cr_set = true; } @@ -1388,11 +1384,7 @@ RotateableSwatch::do_release(double by, guint modifier) { GtkWidget *w = GTK_WIDGET(gobj()); gdk_window_set_cursor(gtk_widget_get_window(w), NULL); if (cr) { -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(cr); -#else - gdk_cursor_unref (cr); -#endif cr = NULL; } cr_set = false; diff --git a/src/ui/widget/spinbutton.h b/src/ui/widget/spinbutton.h index 30ffc7d77..ae571994b 100644 --- a/src/ui/widget/spinbutton.h +++ b/src/ui/widget/spinbutton.h @@ -36,11 +36,7 @@ public: { connect_signals(); }; -#if GTK_CHECK_VERSION(3,0,0) explicit SpinButton(Glib::RefPtr& adjustment, double climb_rate = 0.0, guint digits = 0) -#else - explicit SpinButton(Gtk::Adjustment& adjustment, double climb_rate = 0.0, guint digits = 0) -#endif : Gtk::SpinButton(adjustment, climb_rate, digits), _unit_menu(NULL), _unit_tracker(NULL), diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp index 6ea8c1360..400cf2658 100644 --- a/src/widgets/button.cpp +++ b/src/widgets/button.cpp @@ -23,15 +23,8 @@ #include static void sp_button_dispose(GObject *object); - -#if GTK_CHECK_VERSION(3, 0, 0) static void sp_button_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width); - static void sp_button_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height); -#else -static void sp_button_size_request(GtkWidget *widget, GtkRequisition *requisition); -#endif - static void sp_button_clicked(GtkButton *button); static void sp_button_perform_action(SPButton *button, gpointer data); static gint sp_button_process_event(SPButton *button, GdkEvent *event); @@ -50,12 +43,8 @@ static void sp_button_class_init(SPButtonClass *klass) GtkButtonClass *button_class = GTK_BUTTON_CLASS(klass); object_class->dispose = sp_button_dispose; -#if GTK_CHECK_VERSION(3, 0, 0) widget_class->get_preferred_width = sp_button_get_preferred_width; widget_class->get_preferred_height = sp_button_get_preferred_height; -#else - widget_class->size_request = sp_button_size_request; -#endif button_class->clicked = sp_button_clicked; } @@ -92,7 +81,6 @@ static void sp_button_dispose(GObject *object) (G_OBJECT_CLASS(sp_button_parent_class))->dispose(object); } -#if GTK_CHECK_VERSION(3, 0, 0) static void sp_button_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkWidget *child = gtk_bin_get_child(GTK_BIN(widget)); @@ -136,23 +124,6 @@ static void sp_button_get_preferred_height(GtkWidget *widget, gint *minimal_heig *minimal_height += MAX(2, padding.top + padding.bottom + border.top + border.bottom); *natural_height += MAX(2, padding.top + padding.bottom + border.top + border.bottom); } -#else -static void sp_button_size_request(GtkWidget *widget, GtkRequisition *requisition) -{ - GtkWidget *child = gtk_bin_get_child(GTK_BIN(widget)); - GtkStyle *style = gtk_widget_get_style(widget); - - if (child) { - gtk_widget_size_request(GTK_WIDGET(child), requisition); - } else { - requisition->width = 0; - requisition->height = 0; - } - - requisition->width += 2 + 2 * MAX(2, style->xthickness); - requisition->height += 2 + 2 * MAX(2, style->ythickness); -} -#endif static void sp_button_clicked(GtkButton *button) { diff --git a/src/widgets/eek-preview.cpp b/src/widgets/eek-preview.cpp index 9951a8957..5f1997672 100644 --- a/src/widgets/eek-preview.cpp +++ b/src/widgets/eek-preview.cpp @@ -194,7 +194,6 @@ static void eek_preview_size_request( GtkWidget* widget, GtkRequisition* req ) req->height = height; } -#if GTK_CHECK_VERSION(3,0,0) static void eek_preview_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; @@ -208,7 +207,6 @@ static void eek_preview_get_preferred_height(GtkWidget *widget, gint *minimal_he eek_preview_size_request(widget, &requisition); *minimal_height = *natural_height = requisition.height; } -#endif enum { CLICKED_SIGNAL, @@ -219,22 +217,6 @@ enum { static guint eek_preview_signals[LAST_SIGNAL] = { 0 }; -#if !GTK_CHECK_VERSION(3,0,0) -static gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* /* event */ ) -{ - gboolean result = FALSE; - - if (gtk_widget_is_drawable(widget)) { - GdkWindow* window = gtk_widget_get_window(widget); - cairo_t* cr = gdk_cairo_create(window); - result = eek_preview_draw(widget, cr); - cairo_destroy(cr); - } - - return result; -} -#endif - static gboolean eek_preview_draw(GtkWidget *widget, cairo_t *cr) @@ -246,14 +228,6 @@ gboolean eek_preview_draw(GtkWidget *widget, GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); -#if !GTK_CHECK_VERSION(3,0,0) - GdkColor fg = { 0, - static_cast(priv->r), - static_cast(priv->g), - static_cast(priv->b) - }; -#endif - gint insetTop = 0, insetBottom = 0; gint insetLeft = 0, insetRight = 0; @@ -270,9 +244,7 @@ gboolean eek_preview_draw(GtkWidget *widget, insetLeft = insetRight = 1; } - -#if GTK_CHECK_VERSION(3,0,0) - GtkStyleContext *context = gtk_widget_get_style_context(widget); + auto context = gtk_widget_get_style_context(widget); gtk_render_frame(context, cr, @@ -283,22 +255,6 @@ gboolean eek_preview_draw(GtkWidget *widget, cr, 0, 0, allocation.width, allocation.height); -#else - GtkStyle *style = gtk_widget_get_style(widget); - GdkWindow *window = gtk_widget_get_window(widget); - - gtk_paint_flat_box( style, - window, - (GtkStateType)gtk_widget_get_state(widget), - GTK_SHADOW_NONE, - NULL, - widget, - NULL, - 0, 0, - allocation.width, allocation.height); - - gdk_colormap_alloc_color( gdk_colormap_get_system(), &fg, FALSE, TRUE ); -#endif // Border if (priv->border != BORDER_NONE) { @@ -377,27 +333,12 @@ gboolean eek_preview_draw(GtkWidget *widget, if (priv->linked & PREVIEW_LINK_IN) { -#if GTK_CHECK_VERSION(3,0,0) gtk_render_arrow(context, cr, G_PI, // Down-pointing arrow area.x, area.y, min(area.width, area.height) ); -#else - gtk_paint_arrow( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_IN, - NULL, /* clip area. &area, */ - widget, /* may be NULL */ - NULL, /* detail */ - GTK_ARROW_DOWN, - FALSE, - area.x, area.y, - area.width, area.height - ); -#endif } if (priv->linked & PREVIEW_LINK_OUT) @@ -407,27 +348,12 @@ gboolean eek_preview_draw(GtkWidget *widget, otherArea.y = possible.y + (possible.height - otherArea.height); } -#if GTK_CHECK_VERSION(3,0,0) gtk_render_arrow(context, cr, G_PI, // Down-pointing arrow otherArea.x, otherArea.y, min(otherArea.width, otherArea.height) ); -#else - gtk_paint_arrow( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, /* clip area. &area, */ - widget, /* may be NULL */ - NULL, /* detail */ - GTK_ARROW_DOWN, - FALSE, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height - ); -#endif } if (priv->linked & PREVIEW_LINK_OTHER) @@ -437,27 +363,12 @@ gboolean eek_preview_draw(GtkWidget *widget, otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } -#if GTK_CHECK_VERSION(3,0,0) gtk_render_arrow(context, cr, 1.5*G_PI, // Left-pointing arrow otherArea.x, otherArea.y, min(otherArea.width, otherArea.height) ); -#else - gtk_paint_arrow( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, /* clip area. &area, */ - widget, /* may be NULL */ - NULL, /* detail */ - GTK_ARROW_LEFT, - FALSE, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height - ); -#endif } @@ -469,22 +380,10 @@ gboolean eek_preview_draw(GtkWidget *widget, if ( otherArea.height < possible.height ) { otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } -#if GTK_CHECK_VERSION(3,0,0) gtk_render_check(context, cr, otherArea.x, otherArea.y, otherArea.width, otherArea.height ); -#else - gtk_paint_check( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, - widget, - NULL, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height ); -#endif } if (priv->linked & PREVIEW_STROKE) @@ -495,23 +394,11 @@ gboolean eek_preview_draw(GtkWidget *widget, if ( otherArea.height < possible.height ) { otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } -#if GTK_CHECK_VERSION(3,0,0) // This should be a diamond too? gtk_render_check(context, cr, otherArea.x, otherArea.y, otherArea.width, otherArea.height ); -#else - gtk_paint_diamond( style, - window, - gtk_widget_get_state (widget), - GTK_SHADOW_ETCHED_OUT, - NULL, - widget, - NULL, - otherArea.x, otherArea.y, - otherArea.width, otherArea.height ); -#endif } } @@ -519,21 +406,10 @@ gboolean eek_preview_draw(GtkWidget *widget, if ( gtk_widget_has_focus(widget) ) { gtk_widget_get_allocation (widget, &allocation); -#if GTK_CHECK_VERSION(3,0,0) gtk_render_focus(context, cr, 0 + 1, 0 + 1, allocation.width - 2, allocation.height - 2 ); -#else - gtk_paint_focus( style, - window, - GTK_STATE_NORMAL, - NULL, /* GdkRectangle *area, */ - widget, - NULL, - 0 + 1, 0 + 1, - allocation.width - 2, allocation.height - 2 ); -#endif } return FALSE; @@ -547,11 +423,7 @@ static gboolean eek_preview_enter_cb( GtkWidget* widget, GdkEventCrossing* event EekPreviewPrivate *priv = EEK_PREVIEW_GET_PRIVATE(preview); priv->within = TRUE; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, priv->hot ? GTK_STATE_FLAG_ACTIVE : GTK_STATE_FLAG_PRELIGHT, false ); -#else - gtk_widget_set_state( widget, priv->hot ? GTK_STATE_ACTIVE : GTK_STATE_PRELIGHT ); -#endif } return FALSE; @@ -564,11 +436,7 @@ static gboolean eek_preview_leave_cb( GtkWidget* widget, GdkEventCrossing* event EekPreviewPrivate *priv = EEK_PREVIEW_GET_PRIVATE(preview); priv->within = FALSE; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, GTK_STATE_FLAG_NORMAL, false ); -#else - gtk_widget_set_state( widget, GTK_STATE_NORMAL ); -#endif } return FALSE; @@ -593,11 +461,7 @@ static gboolean eek_preview_button_press_cb( GtkWidget* widget, GdkEventButton* if ( priv->within ) { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, GTK_STATE_FLAG_ACTIVE, false ); -#else - gtk_widget_set_state( widget, GTK_STATE_ACTIVE ); -#endif } } } @@ -612,11 +476,7 @@ static gboolean eek_preview_button_release_cb( GtkWidget* widget, GdkEventButton EekPreviewPrivate *priv = EEK_PREVIEW_GET_PRIVATE(preview); priv->hot = FALSE; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_state_flags( widget, GTK_STATE_FLAG_NORMAL, false ); -#else - gtk_widget_set_state( widget, GTK_STATE_NORMAL ); -#endif if ( priv->within && (event->button == PRIME_BUTTON_MAGIC_NUMBER || @@ -697,15 +557,9 @@ static void eek_preview_class_init( EekPreviewClass *klass ) parent_class = (GtkWidgetClass*)g_type_class_peek_parent( klass ); -#if GTK_CHECK_VERSION(3,0,0) widgetClass->get_preferred_width = eek_preview_get_preferred_width; widgetClass->get_preferred_height = eek_preview_get_preferred_height; widgetClass->draw = eek_preview_draw; -#else - widgetClass->size_request = eek_preview_size_request; - widgetClass->expose_event = eek_preview_expose_event; -#endif - widgetClass->button_press_event = eek_preview_button_press_cb; widgetClass->button_release_event = eek_preview_button_release_cb; widgetClass->enter_notify_event = eek_preview_enter_cb; diff --git a/src/widgets/ege-adjustment-action.cpp b/src/widgets/ege-adjustment-action.cpp index 272217aa4..8fef21741 100644 --- a/src/widgets/ege-adjustment-action.cpp +++ b/src/widgets/ege-adjustment-action.cpp @@ -813,12 +813,8 @@ static GtkWidget* create_tool_item( GtkAction* action ) if ( IS_EGE_ADJUSTMENT_ACTION(action) ) { EgeAdjustmentAction* act = EGE_ADJUSTMENT_ACTION( action ); GtkWidget* spinbutton = 0; -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget* hb = gtk_hbox_new( FALSE, 5 ); -#endif GValue value; memset( &value, 0, sizeof(value) ); g_value_init( &value, G_TYPE_STRING ); @@ -865,13 +861,7 @@ static GtkWidget* create_tool_item( GtkAction* action ) gtk_box_pack_start( GTK_BOX(hb), icon, FALSE, FALSE, 0 ); } else { GtkWidget* lbl = gtk_label_new( g_value_get_string( &value ) ? g_value_get_string( &value ) : "wwww" ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(lbl, GTK_ALIGN_END); -#else - gtk_misc_set_alignment( GTK_MISC(lbl), 1.0, 0.5 ); -#endif - gtk_box_pack_start( GTK_BOX(hb), lbl, FALSE, FALSE, 0 ); } } diff --git a/src/widgets/ege-output-action.cpp b/src/widgets/ege-output-action.cpp index 5dece8e91..da29524a5 100644 --- a/src/widgets/ege-output-action.cpp +++ b/src/widgets/ege-output-action.cpp @@ -166,12 +166,8 @@ GtkWidget* create_tool_item( GtkAction* action ) if ( IS_EGE_OUTPUT_ACTION(action) ) { GValue value; -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget* hb = gtk_hbox_new( FALSE, 5 ); -#endif GtkWidget* lbl = 0; memset( &value, 0, sizeof(value) ); diff --git a/src/widgets/ege-select-one-action.cpp b/src/widgets/ege-select-one-action.cpp index 2e106154e..5555663e4 100644 --- a/src/widgets/ege-select-one-action.cpp +++ b/src/widgets/ege-select-one-action.cpp @@ -632,12 +632,8 @@ GtkWidget* create_tool_item( GtkAction* action ) item = GTK_WIDGET( gtk_tool_item_new() ); if ( act->private_data->appearanceMode == APPEARANCE_FULL ) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(holder), FALSE); -#else - GtkWidget* holder = gtk_hbox_new( FALSE, 0 ); -#endif GtkRadioAction* ract = 0; GSList* group = 0; @@ -744,12 +740,8 @@ GtkWidget* create_tool_item( GtkAction* action ) gtk_container_add( GTK_CONTAINER(item), holder ); } else { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget* holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + auto holder = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_set_homogeneous(GTK_BOX(holder), FALSE); -#else - GtkWidget *holder = gtk_hbox_new( FALSE, 4 ); -#endif GtkEntry *entry = 0; GtkWidget *normal; @@ -818,14 +810,8 @@ GtkWidget* create_tool_item( GtkAction* action ) gtk_box_pack_start( GTK_BOX(holder), normal, FALSE, FALSE, 0 ); { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(holder, GTK_ALIGN_START); gtk_container_add(GTK_CONTAINER(item), holder); -#else - GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0); - gtk_container_add( GTK_CONTAINER(align), holder); - gtk_container_add( GTK_CONTAINER(item), align ); -#endif } } @@ -861,13 +847,6 @@ void resync_active( EgeSelectOneAction* act, gint active, gboolean override ) if ( children && children->data ) { gpointer combodata = g_object_get_data( G_OBJECT(children->data), "ege-combo-box" ); -#if !GTK_CHECK_VERSION(3,0,0) - if (!combodata && GTK_IS_ALIGNMENT(children->data)) { - GList *other = gtk_container_get_children( GTK_CONTAINER(children->data) ); - combodata = g_object_get_data( G_OBJECT(other->data), "ege-combo-box" ); - } -#endif - if ( GTK_IS_COMBO_BOX(combodata) ) { GtkComboBox* combo = GTK_COMBO_BOX(combodata); if ((active == -1) && (gtk_combo_box_get_has_entry(combo))) { @@ -925,13 +904,6 @@ void resync_sensitive( EgeSelectOneAction* act ) if ( children && children->data ) { gpointer combodata = g_object_get_data( G_OBJECT(children->data), "ege-combo-box" ); -#if !GTK_CHECK_VERSION(3,0,0) - if (!combodata && GTK_IS_ALIGNMENT(children->data)) { - GList *other = gtk_container_get_children( GTK_CONTAINER(children->data) ); - combodata = g_object_get_data( G_OBJECT(other->data), "ege-combo-box" ); - } -#endif - if ( GTK_IS_COMBO_BOX(combodata) ) { /* Not implemented */ } else if ( GTK_IS_BOX(children->data) ) { diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp index aefcb2e81..54b693ce0 100644 --- a/src/widgets/font-selector.cpp +++ b/src/widgets/font-selector.cpp @@ -36,11 +36,7 @@ struct SPFontSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox hbox; -#else - GtkHBox hbox; -#endif unsigned int block_emit : 1; @@ -61,11 +57,7 @@ struct SPFontSelector struct SPFontSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkHBoxClass parent_class; -#endif void (* font_set) (SPFontSelector *fsel, gchar *fontspec); }; @@ -91,11 +83,7 @@ static void sp_font_selector_set_sizes( SPFontSelector *fsel ); static guint fs_signals[LAST_SIGNAL] = { 0 }; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPFontSelector, sp_font_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPFontSelector, sp_font_selector, GTK_TYPE_HBOX); -#endif static void sp_font_selector_class_init(SPFontSelectorClass *c) { @@ -160,8 +148,7 @@ static void sp_font_selector_init(SPFontSelector *fsel) /* Muck with style, see text-toolbar.cpp */ gtk_widget_set_name( GTK_WIDGET(fsel->family_treeview), "font_selector_family" ); -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); + auto css_provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(css_provider, "#font_selector_family {\n" " -GtkWidget-wide-separators: true;\n" @@ -169,14 +156,10 @@ static void sp_font_selector_init(SPFontSelector *fsel) "}\n", -1, NULL); - GdkScreen *screen = gdk_screen_get_default(); + auto screen = gdk_screen_get_default(); gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - gtk_rc_parse_string ( - "widget \"*font_selector_family\" style \"fontfamily-separator-style\""); -#endif Inkscape::FontLister* fontlister = Inkscape::FontLister::get_instance(); Glib::RefPtr store = fontlister->get_font_list(); @@ -195,12 +178,8 @@ static void sp_font_selector_init(SPFontSelector *fsel) gtk_widget_show(f); gtk_box_pack_start(GTK_BOX (fsel), f, TRUE, TRUE, 0); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_vbox_new(FALSE, 4); -#endif gtk_widget_show(vb); gtk_container_set_border_width(GTK_CONTAINER (vb), 4); gtk_container_add(GTK_CONTAINER(f), vb); @@ -235,12 +214,8 @@ static void sp_font_selector_init(SPFontSelector *fsel) selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(fsel->style_treeview)); g_signal_connect (G_OBJECT(selection), "changed", G_CALLBACK (sp_font_selector_style_select_row), fsel); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 4); -#endif gtk_widget_show(hb); gtk_box_pack_start(GTK_BOX(vb), hb, FALSE, FALSE, 0); diff --git a/src/widgets/gradient-image.cpp b/src/widgets/gradient-image.cpp index 6901b8549..dff564feb 100644 --- a/src/widgets/gradient-image.cpp +++ b/src/widgets/gradient-image.cpp @@ -21,7 +21,6 @@ static void sp_gradient_image_size_request (GtkWidget *widget, GtkRequisition *requisition); -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_image_destroy(GtkWidget *object); static void sp_gradient_image_get_preferred_width(GtkWidget *widget, gint *minimal_width, @@ -30,11 +29,6 @@ static void sp_gradient_image_get_preferred_width(GtkWidget *widget, static void sp_gradient_image_get_preferred_height(GtkWidget *widget, gint *minimal_height, gint *natural_height); -#else -static void sp_gradient_image_destroy(GtkObject *object); -static gboolean sp_gradient_image_expose(GtkWidget *widget, GdkEventExpose *event); -#endif - static gboolean sp_gradient_image_draw(GtkWidget *widget, cairo_t *cr); static void sp_gradient_image_gradient_release (SPObject *, SPGradientImage *im); static void sp_gradient_image_gradient_modified (SPObject *, guint flags, SPGradientImage *im); @@ -46,18 +40,10 @@ static void sp_gradient_image_class_init(SPGradientImageClass *klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = sp_gradient_image_get_preferred_width; widget_class->get_preferred_height = sp_gradient_image_get_preferred_height; widget_class->draw = sp_gradient_image_draw; widget_class->destroy = sp_gradient_image_destroy; -#else - GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass); - - object_class->destroy = sp_gradient_image_destroy; - widget_class->size_request = sp_gradient_image_size_request; - widget_class->expose_event = sp_gradient_image_expose; -#endif } static void @@ -71,11 +57,7 @@ sp_gradient_image_init (SPGradientImage *image) new (&image->modified_connection) sigc::connection(); } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_image_destroy(GtkWidget *object) -#else -static void sp_gradient_image_destroy(GtkObject *object) -#endif { SPGradientImage *image = SP_GRADIENT_IMAGE (object); @@ -88,13 +70,8 @@ static void sp_gradient_image_destroy(GtkObject *object) image->release_connection.~connection(); image->modified_connection.~connection(); -#if GTK_CHECK_VERSION(3,0,0) if (GTK_WIDGET_CLASS(sp_gradient_image_parent_class)->destroy) GTK_WIDGET_CLASS(sp_gradient_image_parent_class)->destroy(object); -#else - if (GTK_OBJECT_CLASS(sp_gradient_image_parent_class)->destroy) - GTK_OBJECT_CLASS(sp_gradient_image_parent_class)->destroy(object); -#endif } static void sp_gradient_image_size_request(GtkWidget * /*widget*/, GtkRequisition *requisition) @@ -103,7 +80,6 @@ static void sp_gradient_image_size_request(GtkWidget * /*widget*/, GtkRequisitio requisition->height = 12; } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_image_get_preferred_width(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkRequisition requisition; @@ -117,27 +93,6 @@ static void sp_gradient_image_get_preferred_height(GtkWidget *widget, gint *mini sp_gradient_image_size_request(widget, &requisition); *minimal_height = *natural_height = requisition.height; } -#endif - -#if !GTK_CHECK_VERSION(3,0,0) -static gboolean sp_gradient_image_expose(GtkWidget *widget, GdkEventExpose *event) -{ - gboolean result = TRUE; - if(gtk_widget_is_drawable(widget)) { - cairo_t *ct = gdk_cairo_create(gtk_widget_get_window (widget)); - cairo_rectangle(ct, event->area.x, event->area.y, - event->area.width, event->area.height); - cairo_clip(ct); - GtkAllocation allocation; - gtk_widget_get_allocation(widget, &allocation); - cairo_translate(ct, allocation.x, allocation.y); - result = sp_gradient_image_draw(widget, ct); - cairo_destroy(ct); - } - - return result; -} -#endif static gboolean sp_gradient_image_draw(GtkWidget *widget, cairo_t *ct) { diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 604ecd108..7d88499ab 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -60,11 +60,7 @@ static void sp_gradient_selector_delete_vector_clicked (GtkWidget *w, SPGradient static guint signals[LAST_SIGNAL] = {0}; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPGradientSelector, sp_gradient_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPGradientSelector, sp_gradient_selector, GTK_TYPE_VBOX); -#endif static void sp_gradient_selector_class_init(SPGradientSelectorClass *klass) { @@ -116,9 +112,7 @@ static void sp_gradient_selector_init(SPGradientSelector *sel) sel->safelyInit = true; sel->blocked = false; -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(sel), GTK_ORIENTATION_VERTICAL); -#endif new (&sel->nonsolid) std::vector(); new (&sel->swatch_widgets) std::vector(); @@ -180,13 +174,8 @@ static void sp_gradient_selector_init(SPGradientSelector *sel) /* Create box for buttons */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new( FALSE, 2 ); -#endif - //sel->nonsolid.push_back(hb); gtk_box_pack_start( GTK_BOX(sel), hb, FALSE, FALSE, 0 ); sel->add = gtk_button_new(); diff --git a/src/widgets/gradient-selector.h b/src/widgets/gradient-selector.h index e090d7cbd..6b5d4ca60 100644 --- a/src/widgets/gradient-selector.h +++ b/src/widgets/gradient-selector.h @@ -45,11 +45,7 @@ class TreeView; struct SPGradientSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif enum SelectorMode { MODE_LINEAR, @@ -131,11 +127,7 @@ struct SPGradientSelector { }; struct SPGradientSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif void (* grabbed) (SPGradientSelector *sel); void (* dragged) (SPGradientSelector *sel); diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 97e65141f..ce571bb6f 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -66,11 +66,7 @@ enum { LAST_SIGNAL }; -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_selector_destroy(GtkWidget *object); -#else -static void sp_gradient_vector_selector_destroy(GtkObject *object); -#endif static void sp_gvs_gradient_release(SPObject *obj, SPGradientVectorSelector *gvs); static void sp_gvs_defs_release(SPObject *defs, SPGradientVectorSelector *gvs); @@ -89,11 +85,7 @@ static win_data wd; static gint x = -1000, y = -1000, w = 0, h = 0; // impossible original values to make sure they are read from prefs static Glib::ustring const prefs_path = "/dialogs/gradienteditor/"; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPGradientVectorSelector, sp_gradient_vector_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPGradientVectorSelector, sp_gradient_vector_selector, GTK_TYPE_VBOX); -#endif static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass *klass) { @@ -108,20 +100,13 @@ static void sp_gradient_vector_selector_class_init(SPGradientVectorSelectorClass G_TYPE_NONE, 1, G_TYPE_POINTER); -#if GTK_CHECK_VERSION(3,0,0) GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_gradient_vector_selector_destroy; -#else - GtkObjectClass *object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_gradient_vector_selector_destroy; -#endif } static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) { -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(gvs), GTK_ORIENTATION_VERTICAL); -#endif gvs->idlabel = TRUE; @@ -140,11 +125,7 @@ static void sp_gradient_vector_selector_init(SPGradientVectorSelector *gvs) } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_selector_destroy(GtkWidget *object) -#else -static void sp_gradient_vector_selector_destroy(GtkObject *object) -#endif { SPGradientVectorSelector *gvs = SP_GRADIENT_VECTOR_SELECTOR(object); @@ -165,15 +146,9 @@ static void sp_gradient_vector_selector_destroy(GtkObject *object) gvs->defs_modified_connection.~connection(); gvs->tree_select_connection.~connection(); -#if GTK_CHECK_VERSION(3,0,0) if ((GTK_WIDGET_CLASS(sp_gradient_vector_selector_parent_class))->destroy) { (GTK_WIDGET_CLASS(sp_gradient_vector_selector_parent_class))->destroy(object); } -#else - if ((GTK_OBJECT_CLASS(sp_gradient_vector_selector_parent_class))->destroy) { - (GTK_OBJECT_CLASS(sp_gradient_vector_selector_parent_class))->destroy(object); - } -#endif } GtkWidget *sp_gradient_vector_selector_new(SPDocument *doc, SPGradient *gr) @@ -484,15 +459,8 @@ static GtkWidget *sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *st static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradient *gradient); static gint sp_gradient_vector_dialog_delete(GtkWidget *widget, GdkEvent *event, GtkWidget *dialog); - -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_dialog_destroy(GtkWidget *object, gpointer data); static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer data); -#else -static void sp_gradient_vector_dialog_destroy(GtkObject *object, gpointer data); -static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer data); -#endif - static void sp_gradient_vector_gradient_release(SPObject *obj, GtkWidget *widget); static void sp_gradient_vector_gradient_modified(SPObject *obj, guint flags, GtkWidget *widget); static void sp_gradient_vector_color_dragged(Inkscape::UI::SelectedColor *selected_color, GObject *object); @@ -845,12 +813,8 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s g_return_val_if_fail(gradient != NULL, NULL); g_return_val_if_fail(SP_IS_GRADIENT(gradient), NULL); -#if GTK_CHECK_VERSION(3,0,0) vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, PAD); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - vb = gtk_vbox_new(FALSE, PAD); -#endif g_signal_connect(G_OBJECT(vb), "destroy", G_CALLBACK(sp_gradient_vector_widget_destroy), NULL); w = sp_gradient_image_new(gradient); @@ -883,12 +847,8 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s g_signal_connect(G_OBJECT(combo_box), "changed", G_CALLBACK(sp_grad_edit_combo_box_changed), vb); /* Add and Remove buttons */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 1); -#endif // TRANSLATORS: "Stop" means: a "phase" of a gradient GtkWidget *b = gtk_button_new_with_label(_("Add stop")); gtk_widget_show(b); @@ -905,21 +865,12 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s gtk_box_pack_start(GTK_BOX(vb),hb, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); /* Offset Slider and stuff */ -#if GTK_CHECK_VERSION(3,0,0) hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - hb = gtk_hbox_new(FALSE, 0); -#endif /* Label */ GtkWidget *l = gtk_label_new(C_("Gradient","Offset:")); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment(GTK_MISC(l), 1.0, 0.5); -#endif gtk_box_pack_start(GTK_BOX(hb),l, FALSE, FALSE, AUX_BETWEEN_BUTTON_GROUPS); gtk_widget_show(l); @@ -937,11 +888,7 @@ static GtkWidget * sp_gradient_vector_widget_new(SPGradient *gradient, SPStop *s gtk_adjustment_set_value(Offset_adj, stop->offset); /* Slider */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *slider = gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, Offset_adj); -#else - GtkWidget *slider = gtk_hscale_new(Offset_adj); -#endif + auto slider = gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, Offset_adj); gtk_scale_set_draw_value( GTK_SCALE(slider), FALSE ); gtk_widget_show(slider); gtk_box_pack_start(GTK_BOX(hb),slider, TRUE, TRUE, AUX_BETWEEN_BUTTON_GROUPS); @@ -1179,11 +1126,7 @@ static void sp_gradient_vector_widget_load_gradient(GtkWidget *widget, SPGradien blocked = FALSE; } -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_dialog_destroy(GtkWidget * /*object*/, gpointer /*data*/) -#else -static void sp_gradient_vector_dialog_destroy(GtkObject * /*object*/, gpointer /*data*/) -#endif { GObject *obj = G_OBJECT(dlg); assert(obj != NULL); @@ -1234,11 +1177,7 @@ static gboolean sp_gradient_vector_dialog_delete(GtkWidget */*widget*/, GdkEvent } /* Widget destroy handler */ -#if GTK_CHECK_VERSION(3,0,0) static void sp_gradient_vector_widget_destroy(GtkWidget *object, gpointer /*data*/) -#else -static void sp_gradient_vector_widget_destroy(GtkObject *object, gpointer /*data*/) -#endif { SPObject *gradient = SP_OBJECT(g_object_get_data(G_OBJECT(object), "gradient")); diff --git a/src/widgets/gradient-vector.h b/src/widgets/gradient-vector.h index 5ae90b28f..b51b276b9 100644 --- a/src/widgets/gradient-vector.h +++ b/src/widgets/gradient-vector.h @@ -35,11 +35,7 @@ class SPGradient; class SPStop; struct SPGradientVectorSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif guint idlabel : 1; @@ -61,11 +57,7 @@ struct SPGradientVectorSelector { }; struct SPGradientVectorSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif void (* vector_set) (SPGradientVectorSelector *gvs, SPGradient *gr); }; diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index f2031fe51..38b4f2897 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -64,10 +64,6 @@ struct IconImpl { static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation); static gboolean draw(GtkWidget *widget, cairo_t *cr); -#if !GTK_CHECK_VERSION(3,0,0) - static gboolean expose(GtkWidget *widget, GdkEventExpose *event); -#endif - static void screenChanged( GtkWidget *widget, GdkScreen *previous_screen ); static void styleSet( GtkWidget *widget, GtkStyle *previous_style ); static void themeChanged( SPIcon *icon ); @@ -149,14 +145,9 @@ sp_icon_class_init(SPIconClass *klass) object_class->dispose = IconImpl::dispose; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = IconImpl::getPreferredWidth; widget_class->get_preferred_height = IconImpl::getPreferredHeight; widget_class->draw = IconImpl::draw; -#else - widget_class->size_request = IconImpl::sizeRequest; - widget_class->expose_event = IconImpl::expose; -#endif widget_class->size_allocate = IconImpl::sizeAllocate; widget_class->screen_changed = IconImpl::screenChanged; widget_class->style_set = IconImpl::styleSet; @@ -244,37 +235,15 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) bool unref_image = false; /* copied from the expose function of GtkImage */ -#if GTK_CHECK_VERSION(3,0,0) if (gtk_widget_get_state_flags (GTK_WIDGET(icon)) != GTK_STATE_FLAG_NORMAL && image) { -#else - if (gtk_widget_get_state (GTK_WIDGET(icon)) != GTK_STATE_NORMAL && image) { - std::cerr << "IconImpl::draw: Ooops! It is called in GTK2" << std::endl; -#endif std::cerr << "IconImpl::draw: No image, creating fallback" << std::endl; -#if GTK_CHECK_VERSION(3,0,0) - // image = gtk_render_icon_pixbuf(gtk_widget_get_style_context(widget), - // source, - // (GtkIconSize)-1); - - // gtk_render_icon_pixbuf deprecated, replaced by: GtkIconTheme *icon_theme = gtk_icon_theme_get_default(); image = gtk_icon_theme_load_icon (icon_theme, "gtk-image", 32, (GtkIconLookupFlags)0, NULL); -#else - GtkIconSource *source = gtk_icon_source_new(); - gtk_icon_source_set_pixbuf(source, icon->pb); - gtk_icon_source_set_size(source, GTK_ICON_SIZE_SMALL_TOOLBAR); // note: this is boilerplate and not used - gtk_icon_source_set_size_wildcarded(source, FALSE); - image = gtk_style_render_icon(gtk_widget_get_style(widget), source, - gtk_widget_get_direction(widget), - (GtkStateType) gtk_widget_get_state(widget), - (GtkIconSize)-1, widget, "gtk-image"); - gtk_icon_source_free(source); -#endif unref_image = true; } @@ -283,12 +252,7 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) GtkAllocation allocation; GtkRequisition requisition; gtk_widget_get_allocation(widget, &allocation); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(widget, &requisition, NULL); -#else - gtk_widget_get_requisition(widget, &requisition); -#endif int x = floor(allocation.x + ((allocation.width - requisition.width) * 0.5)); int y = floor(allocation.y + ((allocation.height - requisition.height) * 0.5)); @@ -308,21 +272,6 @@ gboolean IconImpl::draw(GtkWidget *widget, cairo_t* cr) return TRUE; } -#if !GTK_CHECK_VERSION(3,0,0) -gboolean IconImpl::expose(GtkWidget *widget, GdkEventExpose * /*event*/) -{ - gboolean result = TRUE; - - if (gtk_widget_is_drawable(widget)) { - cairo_t * cr = gdk_cairo_create(gtk_widget_get_window(widget)); - result = draw(widget, cr); - cairo_destroy(cr); - } - - return result; -} -#endif - // PUBLIC CALL: void sp_icon_fetch_pixbuf( SPIcon *icon ) { diff --git a/src/widgets/ink-action.cpp b/src/widgets/ink-action.cpp index ace99d9aa..52999dcce 100644 --- a/src/widgets/ink-action.cpp +++ b/src/widgets/ink-action.cpp @@ -2,18 +2,12 @@ #include "icon-size.h" #include - +#include "widgets/image-menu-item.h" #include "widgets/ink-action.h" - #include "widgets/button.h" #include -#if GTK_CHECK_VERSION(3,0,0) - // Fork of gtk-imagemenuitem to continue support - #include "widgets/image-menu-item.h" - -#endif static void ink_action_finalize( GObject* obj ); static void ink_action_get_property( GObject* obj, guint propId, GValue* value, GParamSpec * pspec ); @@ -165,12 +159,7 @@ static GtkWidget* ink_action_create_menu_item( GtkAction* action ) if ( act->private_data->iconId ) { gchar* label = 0; g_object_get( G_OBJECT(act), "label", &label, NULL ); - -#if GTK_CHECK_VERSION(3,0,0) item = image_menu_item_new_with_mnemonic( label ); -#else - item = gtk_image_menu_item_new_with_mnemonic( label ); -#endif GtkWidget* child = sp_icon_new( Inkscape::ICON_SIZE_MENU, act->private_data->iconId ); // TODO this work-around is until SPIcon will live properly inside of a popup menu @@ -185,12 +174,7 @@ static GtkWidget* ink_action_create_menu_item( GtkAction* action ) } } gtk_widget_show_all( child ); - -#if GTK_CHECK_VERSION(3,0,0) image_menu_item_set_image( IMAGE_MENU_ITEM(item), child ); -#else - gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(item), child ); -#endif g_free( label ); label = 0; @@ -393,15 +377,9 @@ static GtkWidget* ink_toggle_action_create_tool_item( GtkAction* action ) if ( act->private_data->iconId ) { GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_tool_button_set_icon_widget(button, child); -#else - GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); - gtk_container_add( GTK_CONTAINER(align), child ); - gtk_tool_button_set_icon_widget( button, align ); -#endif } else { gchar *label = 0; g_object_get( G_OBJECT(action), "short_label", &label, NULL ); @@ -430,18 +408,10 @@ static void ink_toggle_action_update_icon( InkToggleAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(proxies->data); GtkWidget* child = sp_icon_new( action->private_data->iconSize, action->private_data->iconId ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_widget_show_all(child); gtk_tool_button_set_icon_widget(button, child); -#else - GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); - gtk_container_add( GTK_CONTAINER(align), child ); - gtk_widget_show_all( align ); - gtk_tool_button_set_icon_widget( button, align ); -#endif } } @@ -610,16 +580,9 @@ static GtkWidget* ink_radio_action_create_tool_item( GtkAction* action ) GtkToolButton* button = GTK_TOOL_BUTTON(item); GtkWidget* child = sp_icon_new( act->private_data->iconSize, act->private_data->iconId ); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_hexpand(child, FALSE); gtk_widget_set_vexpand(child, FALSE); gtk_tool_button_set_icon_widget(button, child); -#else - GtkWidget* align = gtk_alignment_new( 0.5, 0.5, 0.0, 0.0 ); - gtk_container_add( GTK_CONTAINER(align), child ); - gtk_tool_button_set_icon_widget( button, align ); -#endif } else { // For now trigger a warning but don't do anything else GtkToolButton* button = GTK_TOOL_BUTTON(item); diff --git a/src/widgets/ink-comboboxentry-action.cpp b/src/widgets/ink-comboboxentry-action.cpp index ec5e26cf5..2fecb06a4 100644 --- a/src/widgets/ink-comboboxentry-action.cpp +++ b/src/widgets/ink-comboboxentry-action.cpp @@ -371,16 +371,10 @@ GtkWidget* create_tool_item( GtkAction* action ) g_free( combobox_name ); { -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(comboBoxEntry, GTK_ALIGN_START); gtk_widget_set_hexpand(comboBoxEntry, FALSE); gtk_widget_set_vexpand(comboBoxEntry, FALSE); gtk_container_add(GTK_CONTAINER(item), comboBoxEntry); -#else - GtkWidget *align = gtk_alignment_new(0, 0.5, 0, 0); - gtk_container_add( GTK_CONTAINER(align), comboBoxEntry ); - gtk_container_add( GTK_CONTAINER(item), align ); -#endif } ink_comboboxentry_action->combobox = GTK_COMBO_BOX (comboBoxEntry); @@ -414,11 +408,7 @@ GtkWidget* create_tool_item( GtkAction* action ) // Optionally widen the combobox width... which widens the drop-down list in list mode. if( ink_comboboxentry_action->extra_width > 0 ) { GtkRequisition req; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(GTK_WIDGET(ink_comboboxentry_action->combobox), &req, NULL); -#else - gtk_widget_size_request( GTK_WIDGET( ink_comboboxentry_action->combobox ), &req ); -#endif gtk_widget_set_size_request( GTK_WIDGET( ink_comboboxentry_action->combobox ), req.width + ink_comboboxentry_action->extra_width, -1 ); } @@ -635,11 +625,7 @@ void ink_comboboxentry_action_set_extra_width( Ink_ComboBoxEntry_Action* action, // Widget may not have been created.... if( action->combobox ) { GtkRequisition req; -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_get_preferred_size(GTK_WIDGET(action->combobox), &req, NULL); -#else - gtk_widget_size_request( GTK_WIDGET( action->combobox ), &req ); -#endif gtk_widget_set_size_request( GTK_WIDGET( action->combobox ), req.width + action->extra_width, -1 ); } } diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 58a178aec..a554f3cde 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -134,11 +134,7 @@ static SPGradientSelector *getGradientFromData(SPPaintSelector const *psel) return grad; } -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPPaintSelector, sp_paint_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPPaintSelector, sp_paint_selector, GTK_TYPE_VBOX); -#endif static void sp_paint_selector_class_init(SPPaintSelectorClass *klass) @@ -197,19 +193,13 @@ sp_paint_selector_class_init(SPPaintSelectorClass *klass) static void sp_paint_selector_init(SPPaintSelector *psel) { -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(psel), GTK_ORIENTATION_VERTICAL); -#endif psel->mode = static_cast(-1); // huh? do you mean 0xff? -- I think this means "not in the enum" /* Paint style button box */ -#if GTK_CHECK_VERSION(3,0,0) psel->style = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(psel->style), FALSE); -#else - psel->style = gtk_hbox_new(FALSE, 0); -#endif gtk_widget_show(psel->style); gtk_container_set_border_width(GTK_CONTAINER(psel->style), 4); gtk_box_pack_start(GTK_BOX(psel), psel->style, FALSE, FALSE, 0); @@ -236,12 +226,8 @@ sp_paint_selector_init(SPPaintSelector *psel) /* Fillrule */ { -#if GTK_CHECK_VERSION(3,0,0) - psel->fillrulebox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous(GTK_BOX(psel->fillrulebox), FALSE); -#else - psel->fillrulebox = gtk_hbox_new(FALSE, 0); -#endif + psel->fillrulebox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + gtk_box_set_homogeneous(GTK_BOX(psel->fillrulebox), FALSE); gtk_box_pack_end(GTK_BOX(psel->style), psel->fillrulebox, FALSE, FALSE, 0); GtkWidget *w; @@ -270,22 +256,14 @@ sp_paint_selector_init(SPPaintSelector *psel) /* Frame */ psel->label = gtk_label_new(""); -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *lbbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + auto lbbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); gtk_box_set_homogeneous(GTK_BOX(lbbox), FALSE); -#else - GtkWidget *lbbox = gtk_hbox_new(FALSE, 4); -#endif gtk_widget_show(psel->label); gtk_box_pack_start(GTK_BOX(lbbox), psel->label, false, false, 4); gtk_box_pack_start(GTK_BOX(psel), lbbox, false, false, 4); -#if GTK_CHECK_VERSION(3,0,0) psel->frame = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(psel->frame), FALSE); -#else - psel->frame = gtk_vbox_new(FALSE, 4); -#endif gtk_widget_show(psel->frame); //gtk_container_set_border_width(GTK_CONTAINER(psel->frame), 0); gtk_box_pack_start(GTK_BOX(psel), psel->frame, TRUE, TRUE, 0); @@ -700,12 +678,8 @@ static void sp_paint_selector_set_mode_color(SPPaintSelector *psel, SPPaintSelec sp_paint_selector_clear_frame(psel); /* Create new color selector */ /* Create vbox */ -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); - gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_vbox_new(FALSE, 4); -#endif + auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); gtk_widget_show(vb); /* Color selector */ @@ -1046,21 +1020,13 @@ static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSel sp_paint_selector_clear_frame(psel); /* Create vbox */ -#if GTK_CHECK_VERSION(3,0,0) tbl = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(tbl), FALSE); -#else - tbl = gtk_vbox_new(FALSE, 4); -#endif gtk_widget_show(tbl); { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 1); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 1); -#endif /** * Create a combo_box and store with 4 columns, @@ -1088,13 +1054,9 @@ static void sp_paint_selector_set_mode_pattern(SPPaintSelector *psel, SPPaintSel } { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(hb), FALSE); -#else - GtkWidget *hb = gtk_hbox_new(FALSE, 0); -#endif - GtkWidget *l = gtk_label_new(NULL); + auto l = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(l), _("Use the Node tool to adjust position, scale, and rotation of the pattern on canvas. Use Object > Pattern > Objects to Pattern to create a new pattern from selection.")); gtk_label_set_line_wrap(GTK_LABEL(l), true); gtk_widget_set_size_request(l, 180, -1); diff --git a/src/widgets/paint-selector.h b/src/widgets/paint-selector.h index 23c2dd456..dde14b6a6 100644 --- a/src/widgets/paint-selector.h +++ b/src/widgets/paint-selector.h @@ -40,11 +40,7 @@ class SPStyle; * Generic paint selector widget. */ struct SPPaintSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif enum Mode { MODE_EMPTY, @@ -130,11 +126,7 @@ enum {COMBO_COL_LABEL=0, COMBO_COL_STOCK=1, COMBO_COL_PATTERN=2, COMBO_COL_SEP=3 /// The SPPaintSelector vtable struct SPPaintSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif void (* mode_changed) (SPPaintSelector *psel, SPPaintSelector::Mode mode); diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 9851b0606..7dfa18f49 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -415,12 +415,8 @@ void sp_select_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GOb g_object_set_data(G_OBJECT(spw), "dtw", desktop->getCanvas()); // The vb frame holds all other widgets and is used to set sensitivity depending on selection state. -#if GTK_CHECK_VERSION(3,0,0) - GtkWidget *vb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); + auto vb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -#else - GtkWidget *vb = gtk_hbox_new(FALSE, 0); -#endif gtk_widget_show(vb); gtk_container_add(GTK_CONTAINER(spw), vb); diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp index 93eaaee8b..1d448b67b 100644 --- a/src/widgets/sp-color-selector.cpp +++ b/src/widgets/sp-color-selector.cpp @@ -32,11 +32,7 @@ static guint csel_signals[LAST_SIGNAL] = {0}; double ColorSelector::_epsilon = 1e-4; -#if GTK_CHECK_VERSION(3,0,0) G_DEFINE_TYPE(SPColorSelector, sp_color_selector, GTK_TYPE_BOX); -#else -G_DEFINE_TYPE(SPColorSelector, sp_color_selector, GTK_TYPE_VBOX); -#endif void sp_color_selector_class_init( SPColorSelectorClass *klass ) { @@ -86,9 +82,7 @@ void sp_color_selector_class_init( SPColorSelectorClass *klass ) void sp_color_selector_init( SPColorSelector *csel ) { -#if GTK_CHECK_VERSION(3,0,0) gtk_orientable_set_orientation(GTK_ORIENTABLE(csel), GTK_ORIENTATION_VERTICAL); -#endif if ( csel->base ) { diff --git a/src/widgets/sp-color-selector.h b/src/widgets/sp-color-selector.h index 75cb79b00..14a9fccdf 100644 --- a/src/widgets/sp-color-selector.h +++ b/src/widgets/sp-color-selector.h @@ -64,21 +64,12 @@ private: #define SP_COLOR_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SP_TYPE_COLOR_SELECTOR, SPColorSelectorClass)) struct SPColorSelector { -#if GTK_CHECK_VERSION(3,0,0) GtkBox vbox; -#else - GtkVBox vbox; -#endif - ColorSelector* base; }; struct SPColorSelectorClass { -#if GTK_CHECK_VERSION(3,0,0) GtkBoxClass parent_class; -#else - GtkVBoxClass parent_class; -#endif const gchar **name; guint submode_count; diff --git a/src/widgets/sp-widget.cpp b/src/widgets/sp-widget.cpp index 5ab6b1bb5..0a4e722a5 100644 --- a/src/widgets/sp-widget.cpp +++ b/src/widgets/sp-widget.cpp @@ -41,7 +41,6 @@ public: static void show(GtkWidget *widget); static void hide(GtkWidget *widget); -#if GTK_CHECK_VERSION(3,0,0) static void getPreferredWidth(GtkWidget *widget, gint *minimal_width, gint *natural_width); @@ -50,10 +49,6 @@ public: gint *minimal_height, gint *natural_height); static gboolean draw(GtkWidget *widget, cairo_t *cr); -#else - static void sizeRequest(GtkWidget *widget, GtkRequisition *requisition); - static gboolean expose(GtkWidget *widget, GdkEventExpose *event); -#endif static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation); static void modifySelectionCB(Selection *selection, guint flags, SPWidget *spw); @@ -120,14 +115,9 @@ sp_widget_class_init(SPWidgetClass *klass) widget_class->show = SPWidgetImpl::show; widget_class->hide = SPWidgetImpl::hide; -#if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = SPWidgetImpl::getPreferredWidth; widget_class->get_preferred_height = SPWidgetImpl::getPreferredHeight; widget_class->draw = SPWidgetImpl::draw; -#else - widget_class->size_request = SPWidgetImpl::sizeRequest; - widget_class->expose_event = SPWidgetImpl::expose; -#endif widget_class->size_allocate = SPWidgetImpl::sizeAllocate; } @@ -207,27 +197,18 @@ void SPWidgetImpl::hide(GtkWidget *widget) } } -#if GTK_CHECK_VERSION(3,0,0) gboolean SPWidgetImpl::draw(GtkWidget *widget, cairo_t *cr) -#else -gboolean SPWidgetImpl::expose(GtkWidget *widget, GdkEventExpose *event) -#endif { GtkBin *bin = GTK_BIN(widget); GtkWidget *child = gtk_bin_get_child(bin); if (child) { -#if GTK_CHECK_VERSION(3,0,0) gtk_container_propagate_draw(GTK_CONTAINER(widget), child, cr); -#else - gtk_container_propagate_expose(GTK_CONTAINER(widget), child, event); -#endif } return FALSE; } -#if GTK_CHECK_VERSION(3,0,0) void SPWidgetImpl::getPreferredWidth(GtkWidget *widget, gint *minimal_width, gint *natural_width) { GtkBin *bin = GTK_BIN(widget); @@ -247,17 +228,6 @@ void SPWidgetImpl::getPreferredHeight(GtkWidget *widget, gint *minimal_height, g gtk_widget_get_preferred_height(child, minimal_height, natural_height); } } -#else -void SPWidgetImpl::sizeRequest(GtkWidget *widget, GtkRequisition *requisition) -{ - GtkBin *bin = GTK_BIN(widget); - GtkWidget *child = gtk_bin_get_child(bin); - - if (child) { - gtk_widget_size_request(child, requisition); - } -} -#endif void SPWidgetImpl::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation) { diff --git a/src/widgets/sp-xmlview-attr-list.cpp b/src/widgets/sp-xmlview-attr-list.cpp index a4c00db7c..8fe01a33d 100644 --- a/src/widgets/sp-xmlview-attr-list.cpp +++ b/src/widgets/sp-xmlview-attr-list.cpp @@ -20,11 +20,7 @@ #include "../xml/node-event-vector.h" #include "sp-xmlview-attr-list.h" -#if GTK_CHECK_VERSION(3,0,0) static void sp_xmlview_attr_list_destroy(GtkWidget * object); -#else -static void sp_xmlview_attr_list_destroy(GtkObject * object); -#endif static void event_attr_changed (Inkscape::XML::Node * repr, const gchar * name, const gchar * old_value, const gchar * new_value, bool is_interactive, gpointer data); @@ -87,13 +83,8 @@ G_DEFINE_TYPE(SPXMLViewAttrList, sp_xmlview_attr_list, GTK_TYPE_TREE_VIEW); void sp_xmlview_attr_list_class_init (SPXMLViewAttrListClass * klass) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_xmlview_attr_list_destroy; -#else - GtkObjectClass * object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_xmlview_attr_list_destroy; -#endif g_signal_new("row-value-changed", G_TYPE_FROM_CLASS(klass), @@ -112,11 +103,7 @@ sp_xmlview_attr_list_init (SPXMLViewAttrList * list) list->repr = NULL; } -#if GTK_CHECK_VERSION(3,0,0) void sp_xmlview_attr_list_destroy(GtkWidget * object) -#else -void sp_xmlview_attr_list_destroy(GtkObject * object) -#endif { SPXMLViewAttrList * list; @@ -125,11 +112,7 @@ void sp_xmlview_attr_list_destroy(GtkObject * object) g_object_unref(list->store); sp_xmlview_attr_list_set_repr (list, NULL); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS(sp_xmlview_attr_list_parent_class)->destroy (object); -#else - GTK_OBJECT_CLASS(sp_xmlview_attr_list_parent_class)->destroy (object); -#endif } void sp_xmlview_attr_list_select_row_by_key(SPXMLViewAttrList * list, const gchar *name) diff --git a/src/widgets/sp-xmlview-content.cpp b/src/widgets/sp-xmlview-content.cpp index a1d8475ba..6e59ba3cd 100644 --- a/src/widgets/sp-xmlview-content.cpp +++ b/src/widgets/sp-xmlview-content.cpp @@ -23,11 +23,7 @@ using Inkscape::DocumentUndo; -#if GTK_CHECK_VERSION(3,0,0) static void sp_xmlview_content_destroy(GtkWidget * object); -#else -static void sp_xmlview_content_destroy(GtkObject * object); -#endif void sp_xmlview_content_changed (GtkTextBuffer *tb, SPXMLViewContent *text); @@ -80,13 +76,8 @@ G_DEFINE_TYPE(SPXMLViewContent, sp_xmlview_content, GTK_TYPE_TEXT_VIEW); void sp_xmlview_content_class_init(SPXMLViewContentClass * klass) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_xmlview_content_destroy; -#else - GtkObjectClass * object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_xmlview_content_destroy; -#endif } void @@ -96,21 +87,13 @@ sp_xmlview_content_init (SPXMLViewContent *text) text->blocked = FALSE; } -#if GTK_CHECK_VERSION(3,0,0) void sp_xmlview_content_destroy(GtkWidget * object) -#else -void sp_xmlview_content_destroy(GtkObject * object) -#endif { SPXMLViewContent * text = SP_XMLVIEW_CONTENT (object); sp_xmlview_content_set_repr (text, NULL); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS (sp_xmlview_content_parent_class)->destroy (object); -#else - GTK_OBJECT_CLASS (sp_xmlview_content_parent_class)->destroy (object); -#endif } void diff --git a/src/widgets/sp-xmlview-tree.cpp b/src/widgets/sp-xmlview-tree.cpp index 5dff9adf3..131ac16bf 100644 --- a/src/widgets/sp-xmlview-tree.cpp +++ b/src/widgets/sp-xmlview-tree.cpp @@ -23,11 +23,7 @@ struct NodeData { enum { STORE_TEXT_COL = 0, STORE_DATA_COL, STORE_REPR_COL, STORE_N_COLS }; -#if GTK_CHECK_VERSION(3,0,0) static void sp_xmlview_tree_destroy(GtkWidget * object); -#else -static void sp_xmlview_tree_destroy(GtkObject * object); -#endif static NodeData * node_data_new (SPXMLViewTree * tree, GtkTreeIter * node, GtkTreeRowReference *rowref, Inkscape::XML::Node * repr); @@ -121,13 +117,8 @@ G_DEFINE_TYPE(SPXMLViewTree, sp_xmlview_tree, GTK_TYPE_TREE_VIEW); void sp_xmlview_tree_class_init(SPXMLViewTreeClass * klass) { -#if GTK_CHECK_VERSION(3,0,0) - GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + auto widget_class = GTK_WIDGET_CLASS(klass); widget_class->destroy = sp_xmlview_tree_destroy; -#else - GtkObjectClass * object_class = GTK_OBJECT_CLASS(klass); - object_class->destroy = sp_xmlview_tree_destroy; -#endif // Signal for when a tree drag and drop has completed g_signal_new ( "tree_move", @@ -148,22 +139,13 @@ sp_xmlview_tree_init (SPXMLViewTree * tree) tree->dndactive = FALSE; } - -#if GTK_CHECK_VERSION(3,0,0) void sp_xmlview_tree_destroy(GtkWidget * object) -#else -void sp_xmlview_tree_destroy(GtkObject * object) -#endif { SPXMLViewTree * tree = SP_XMLVIEW_TREE (object); sp_xmlview_tree_set_repr (tree, NULL); -#if GTK_CHECK_VERSION(3,0,0) GTK_WIDGET_CLASS(sp_xmlview_tree_parent_class)->destroy (object); -#else - GTK_OBJECT_CLASS(sp_xmlview_tree_parent_class)->destroy (object); -#endif } /* diff --git a/src/widgets/spw-utilities.cpp b/src/widgets/spw-utilities.cpp index 5500e1068..c0d4d9d58 100644 --- a/src/widgets/spw-utilities.cpp +++ b/src/widgets/spw-utilities.cpp @@ -19,12 +19,7 @@ #include #include - -#if GTK_CHECK_VERSION(3,0,0) #include -#else -#include -#endif #include "selection.h" @@ -36,11 +31,7 @@ * Creates a label widget with the given text, at the given col, row * position in the table. */ -#if GTK_CHECK_VERSION(3,0,0) Gtk::Label * spw_label(Gtk::Grid *table, const gchar *label_text, int col, int row, Gtk::Widget* target) -#else -Gtk::Label * spw_label(Gtk::Table *table, const gchar *label_text, int col, int row, Gtk::Widget* target) -#endif { Gtk::Label *label_widget = new Gtk::Label(); g_assert(label_widget != NULL); @@ -56,7 +47,6 @@ Gtk::Label * spw_label(Gtk::Table *table, const gchar *label_text, int col, int label_widget->set_alignment(1.0, 0.5); label_widget->show(); -#if GTK_CHECK_VERSION(3,0,0) label_widget->set_hexpand(); label_widget->set_halign(Gtk::ALIGN_FILL); label_widget->set_valign(Gtk::ALIGN_CENTER); @@ -70,9 +60,6 @@ Gtk::Label * spw_label(Gtk::Table *table, const gchar *label_text, int col, int #endif table->attach(*label_widget, col, row, 1, 1); -#else - table->attach(*label_widget, col, col+1, row, row+1, (Gtk::EXPAND | Gtk::FILL), static_cast(0), 4, 0); -#endif return label_widget; } @@ -84,16 +71,9 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) label_widget = gtk_label_new (label_text); g_assert(label_widget != NULL); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(label_widget, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (label_widget), 1.0, 0.5); -#endif - gtk_widget_show (label_widget); -#if GTK_CHECK_VERSION(3,0,0) #if GTK_CHECK_VERSION(3,12,0) gtk_widget_set_margin_start(label_widget, 4); gtk_widget_set_margin_end(label_widget, 4); @@ -105,10 +85,6 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) gtk_widget_set_halign(label_widget, GTK_ALIGN_FILL); gtk_widget_set_valign(label_widget, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), label_widget, col, row, 1, 1); -#else - gtk_table_attach(GTK_TABLE (table), label_widget, col, col+1, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 4, 0); -#endif return label_widget; } @@ -117,25 +93,16 @@ spw_label_old(GtkWidget *table, const gchar *label_text, int col, int row) * Creates a horizontal layout manager with 4-pixel spacing between children * and space for 'width' columns. */ -#if GTK_CHECK_VERSION(3,0,0) Gtk::HBox * spw_hbox(Gtk::Grid * table, int width, int col, int row) -#else -Gtk::HBox * spw_hbox(Gtk::Table * table, int width, int col, int row) -#endif { /* Create a new hbox with a 4-pixel spacing between children */ Gtk::HBox *hb = new Gtk::HBox(false, 4); g_assert(hb != NULL); hb->show(); - -#if GTK_CHECK_VERSION(3,0,0) hb->set_hexpand(); hb->set_halign(Gtk::ALIGN_FILL); hb->set_valign(Gtk::ALIGN_CENTER); table->attach(*hb, col, row, width, 1); -#else - table->attach(*hb, col, col+width, row, row+1, (Gtk::EXPAND | Gtk::FILL), static_cast(0), 0, 0); -#endif return hb; } @@ -177,37 +144,21 @@ spw_checkbutton(GtkWidget * dialog, GtkWidget * table, g_assert(table != NULL); GtkWidget *l = gtk_label_new (label); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_END); -#else - gtk_misc_set_alignment (GTK_MISC (l), 1.0, 0.5); -#endif - gtk_widget_show (l); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(l, GTK_ALIGN_FILL); gtk_widget_set_hexpand(l, TRUE); gtk_widget_set_valign(l, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), l, 0, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (table), l, 0, 1, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); -#endif b = gtk_check_button_new (); gtk_widget_show (b); -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(b, GTK_ALIGN_FILL); gtk_widget_set_hexpand(b, TRUE); gtk_widget_set_valign(b, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), b, 1, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (table), b, 1, 2, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); -#endif g_object_set_data (G_OBJECT (b), "key", key); g_object_set_data (G_OBJECT (dialog), key, b); @@ -235,16 +186,10 @@ spw_dropdown(GtkWidget * dialog, GtkWidget * table, spw_label_old(table, label_text, 0, row); gtk_widget_show (selector); - -#if GTK_CHECK_VERSION(3,0,0) gtk_widget_set_halign(selector, GTK_ALIGN_FILL); gtk_widget_set_hexpand(selector, TRUE); gtk_widget_set_valign(selector, GTK_ALIGN_CENTER); gtk_grid_attach(GTK_GRID(table), selector, 1, row, 1, 1); -#else - gtk_table_attach (GTK_TABLE (table), selector, 1, 2, row, row+1, - (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); -#endif g_object_set_data (G_OBJECT (dialog), key, selector); return selector; @@ -255,8 +200,7 @@ sp_set_font_size_recursive (GtkWidget *w, gpointer font) { guint size = GPOINTER_TO_UINT (font); -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); + auto css_provider = gtk_css_provider_new(); const double pt_size = size / static_cast(PANGO_SCALE); std::ostringstream css_data; @@ -268,25 +212,16 @@ sp_set_font_size_recursive (GtkWidget *w, gpointer font) css_data.str().c_str(), -1, NULL); - GtkStyleContext *style_context = gtk_widget_get_style_context(w); + auto style_context = gtk_widget_get_style_context(w); gtk_style_context_add_provider(style_context, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - PangoFontDescription* pan = pango_font_description_new (); - pango_font_description_set_size (pan, size); - gtk_widget_modify_font (w, pan); -#endif if (GTK_IS_CONTAINER(w)) { gtk_container_foreach (GTK_CONTAINER(w), (GtkCallback) sp_set_font_size_recursive, font); } -#if GTK_CHECK_VERSION(3,0,0) g_object_unref(css_provider); -#else - pango_font_description_free (pan); -#endif } void diff --git a/src/widgets/spw-utilities.h b/src/widgets/spw-utilities.h index 31f29e026..71b451631 100644 --- a/src/widgets/spw-utilities.h +++ b/src/widgets/spw-utilities.h @@ -20,25 +20,13 @@ namespace Gtk { class Label; - -#if GTK_CHECK_VERSION(3,0,0) class Grid; -#else - class Table; -#endif - class HBox; class Widget; } -#if GTK_CHECK_VERSION(3,0,0) Gtk::Label * spw_label(Gtk::Grid *table, gchar const *label_text, int col, int row, Gtk::Widget *target); Gtk::HBox * spw_hbox(Gtk::Grid *table, int width, int col, int row); -#else -Gtk::Label * spw_label(Gtk::Table *table, gchar const *label_text, int col, int row, Gtk::Widget *target); -Gtk::HBox * spw_hbox(Gtk::Table *table, int width, int col, int row); -#endif - GtkWidget * spw_label_old(GtkWidget *table, gchar const *label_text, int col, int row); GtkWidget * diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 23acb74af..f256b466c 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -1562,8 +1562,7 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje g_object_set_data( holder, "TextFontFamilyAction", act ); // Change style of drop-down from menu to list -#if GTK_CHECK_VERSION(3,0,0) - GtkCssProvider *css_provider = gtk_css_provider_new(); + auto css_provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(css_provider, "#TextFontFamilyAction_combobox {\n" " -GtkComboBox-appears-as-list: true;\n" @@ -1574,24 +1573,10 @@ void sp_text_toolbox_prep(SPDesktop *desktop, GtkActionGroup* mainActions, GObje "}\n", -1, NULL); - GdkScreen *screen = gdk_screen_get_default(); + auto screen = gdk_screen_get_default(); gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(css_provider), GTK_STYLE_PROVIDER_PRIORITY_USER); -#else - gtk_rc_parse_string ( - "style \"dropdown-as-list-style\"\n" - "{\n" - " GtkComboBox::appears-as-list = 1\n" - "}\n" - "widget \"*.TextFontFamilyAction_combobox\" style \"dropdown-as-list-style\"" - "style \"fontfamily-separator-style\"\n" - "{\n" - " GtkWidget::wide-separators = 1\n" - " GtkWidget::separator-height = 6\n" - "}\n" - "widget \"*gtk-combobox-popup-window.GtkScrolledWindow.GtkTreeView\" style \"fontfamily-separator-style\""); -#endif } /* Font size */ diff --git a/testfiles/CMakeLists.txt b/testfiles/CMakeLists.txt index ad022d21e..ea1febdd2 100644 --- a/testfiles/CMakeLists.txt +++ b/testfiles/CMakeLists.txt @@ -28,10 +28,6 @@ add_dependencies(unittest inkscape_version) set (_optional_unittest_libs ) -if (NOT "${WITH_EXT_GDL}") - list (APPEND _optional_unittest_libs "gdl_LIB") -endif() - target_link_libraries(unittest gmock_main -- cgit v1.2.3 From 1bd64804910f28ff16ea47e34baed41f22768fee Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 29 Jul 2016 14:35:20 +0100 Subject: ruler: Backport upstream patches (bzr r15023.2.9) --- src/widgets/ruler.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp index 92c2b611d..8b0a344f6 100644 --- a/src/widgets/ruler.cpp +++ b/src/widgets/ruler.cpp @@ -642,8 +642,14 @@ static gboolean sp_ruler_draw (GtkWidget *widget, cairo_t *cr) { - SPRuler *ruler = SP_RULER (widget); - SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + SPRuler *ruler = SP_RULER (widget); + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + GtkStyleContext *context = gtk_widget_get_style_context (widget); + GtkAllocation allocation; + + gtk_widget_get_allocation (widget, &allocation); + gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); + gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); sp_ruler_draw_ticks (ruler); @@ -669,7 +675,7 @@ sp_ruler_make_pixmap (SPRuler *ruler) priv->backing_store = gdk_window_create_similar_surface (gtk_widget_get_window (widget), - CAIRO_CONTENT_COLOR, + CAIRO_CONTENT_COLOR_ALPHA, allocation.width, allocation.height); @@ -1088,9 +1094,10 @@ sp_ruler_draw_ticks (SPRuler *ruler) cr = cairo_create (priv->backing_store); - gtk_render_background (context, cr, 0, 0, allocation.width, allocation.height); - gtk_render_frame (context, cr, 0, 0, allocation.width, allocation.height); - + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + gtk_style_context_get_color (context, gtk_widget_get_state_flags (widget), &color); gdk_cairo_set_source_rgba (cr, &color); @@ -1319,9 +1326,6 @@ sp_ruler_get_pos_rect (SPRuler *ruler, rect.y = ROUND ((position - lower) * increment) + (ythickness - rect.height) / 2 - 1; } - rect.x += allocation.x; - rect.y += allocation.y; - return rect; } @@ -1344,18 +1348,21 @@ sp_ruler_queue_pos_redraw (SPRuler *ruler) { SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); const GdkRectangle rect = sp_ruler_get_pos_rect (ruler, priv->position); + GtkAllocation allocation; + + gtk_widget_get_allocation (GTK_WIDGET(ruler), &allocation); gtk_widget_queue_draw_area (GTK_WIDGET(ruler), - rect.x, - rect.y, + rect.x + allocation.x, + rect.y + allocation.y, rect.width, rect.height); if (priv->last_pos_rect.width != 0 || priv->last_pos_rect.height != 0) { gtk_widget_queue_draw_area (GTK_WIDGET(ruler), - priv->last_pos_rect.x, - priv->last_pos_rect.y, + priv->last_pos_rect.x + allocation.x, + priv->last_pos_rect.y + allocation.y, priv->last_pos_rect.width, priv->last_pos_rect.height); -- cgit v1.2.3 From 50baf6a41f90c551fed1a2f26f42c8f03cd008b2 Mon Sep 17 00:00:00 2001 From: xande6ruz Date: Sat, 30 Jul 2016 18:39:35 +0200 Subject: [Bug #1604789] Portuguese translation - Interface Fixed bugs: - https://launchpad.net/bugs/1604789 (bzr r15023.3.2) --- po/pt.po | 19300 +++++++++++++++++++++++++++---------------------------------- 1 file changed, 8563 insertions(+), 10737 deletions(-) diff --git a/po/pt.po b/po/pt.po index 4bb9d0d7a..d85d49837 100644 --- a/po/pt.po +++ b/po/pt.po @@ -1,38 +1,47 @@ -# translation of pt.po to Português -# Portuguese translation for Inkscape. +# Translation of Inkscape to Portuguese. # This file is distributed under the same license as the Inkscape package. -# Copyright (C) 2004-2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 2000 - 2013 Free Software Foundation, Inc. +# +# Do original em Português do Brasil por: +# Equipe de Tradução Inkscape Brasil , 2007: +# Aurélio A. Heckert +# Fábio Sousa +# Frederico G. Guimarães +# Krishnamurti L. L. V. Nunes +# Samy M. Nascimento +# Thiago Pimentel +# Vilson Vieira +# Victor Westmann # Juarez Rudsatz , 2004. # Antônio Cláudio (LedStyle) , 2006. -# Equipe de Tradução Inkscape Brasil , 2007. -# Luis Duarte , 2008. # -#: ../src/ui/dialog/clonetiler.cpp:1010 +# Traduzido do original em Português do Brasil e em Inglês para Português Europeu por: +# Luis Duarte , 2008, 2016. +# Rui Cruz , 2016. +# Tiago Santos , 2016. +# msgid "" msgstr "" -"Project-Id-Version: \n" +"Project-Id-Version: inkscape 0.92\n" "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n" "POT-Creation-Date: 2016-06-02 12:12+0200\n" -"PO-Revision-Date: 2008-02-02 18:20-0000\n" -"Last-Translator: Luis Duarte \n" +"PO-Revision-Date: 2016-07-26 15:30+0100\n" +"Last-Translator: Rui Cruz \n" "Language-Team: \n" -"Language: \n" +"Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1\n" -"X-Poedit-Language: Portuguese\n" -"X-Poedit-Country: PORTUGAL\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 1.8.8\n" #: ../inkscape.appdata.xml.in.h:1 ../inkscape.desktop.in.h:1 -#, fuzzy msgid "Inkscape" -msgstr "Sair do Inkscape" +msgstr "Inkscape" #: ../inkscape.appdata.xml.in.h:2 ../inkscape.desktop.in.h:2 -#, fuzzy msgid "Vector Graphics Editor" -msgstr "Inkscape Editor de Imagem Vectorial" +msgstr "Editor de Imagens Vetoriais" #: ../inkscape.appdata.xml.in.h:3 msgid "" @@ -40,6 +49,9 @@ msgid "" "Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector " "Graphics (SVG) file format." msgstr "" +"Um editor de gráficos vetoriais com código-fonte aberto com capacidades " +"similares ao Illustrator, CorelDraw e Xara X, utilizando o formato padrão de " +"ficheiros do W3C: Scalable Vector Graphics (SVG)." #: ../inkscape.appdata.xml.in.h:4 msgid "" @@ -49,33 +61,37 @@ msgid "" "trace bitmaps and much more. We also aim to maintain a thriving user and " "developer community by using open, community-oriented development." msgstr "" +"O Inkscape suporta muitas funcionalidades SVG avançadas (marcadores, clones, " +"mistura de transparência, etc.) e é empregado bastante cuidado na concepção " +"de uma interface simples. É bastante fácil editar nós, fazer operações " +"complexas em linhas, vetorizar imagens bitmap e muito mais. Também " +"procuramos manter uma comunidade bem sucedida de utilizadores e " +"programadores ao utilizar um desenvolvimento transparente do programa " +"voltado para a comunidade." #: ../inkscape.appdata.xml.in.h:5 -#, fuzzy msgid "Main application window" -msgstr "Duplic_ar Janela" +msgstr "Janela principal da aplicação" #: ../inkscape.desktop.in.h:3 msgid "Inkscape Vector Graphics Editor" -msgstr "Inkscape Editor de Imagem Vectorial" +msgstr "Inkscape - Editor de Imagens Vetoriais" #: ../inkscape.desktop.in.h:4 msgid "Create and edit Scalable Vector Graphics images" -msgstr "Crie e edite imagens Gráficas Vectoriais Escalaveis" +msgstr "Criar e editar imagens gráficas vetoriais escaláveis" #: ../inkscape.desktop.in.h:5 msgid "image;editor;vector;drawing;" -msgstr "" +msgstr "imagem;editor;vetorial;desenho;" #: ../inkscape.desktop.in.h:6 -#, fuzzy msgid "New Drawing" -msgstr "Desenho" +msgstr "Novo Desenho" #: ../share/filters/filters.svg.h:2 -#, fuzzy msgid "Smart Jelly" -msgstr "Canal Fosco" +msgstr "Gelatina Inteligente" #: ../share/filters/filters.svg.h:3 ../share/filters/filters.svg.h:7 #: ../share/filters/filters.svg.h:15 ../share/filters/filters.svg.h:31 @@ -91,27 +107,24 @@ msgstr "Canal Fosco" #: ../src/extension/internal/filter/bevels.h:63 #: ../src/extension/internal/filter/bevels.h:144 #: ../src/extension/internal/filter/bevels.h:228 -#, fuzzy msgid "Bevels" -msgstr "Nível" +msgstr "Biselados" #: ../share/filters/filters.svg.h:4 msgid "Same as Matte jelly but with more controls" -msgstr "" +msgstr "O mesmo que a Gelatina Cinzenta mas com mais controlos" #: ../share/filters/filters.svg.h:6 -#, fuzzy msgid "Metal Casting" -msgstr "Ângulo esquerdo" +msgstr "Fundição" #: ../share/filters/filters.svg.h:8 msgid "Smooth drop-like bevel with metallic finish" -msgstr "" +msgstr "Biselado como gota com acabamento metálico" #: ../share/filters/filters.svg.h:10 -#, fuzzy msgid "Apparition" -msgstr "Saturação" +msgstr "Aparição" # Enevoar, desfocar ou borrar? -- krishna #: ../share/filters/filters.svg.h:11 ../share/filters/filters.svg.h:323 @@ -121,26 +134,24 @@ msgstr "Saturação" #: ../src/extension/internal/filter/blurs.h:201 #: ../src/extension/internal/filter/blurs.h:267 #: ../src/extension/internal/filter/blurs.h:351 -#, fuzzy msgid "Blurs" -msgstr "Desfocar" +msgstr "Desfocagens" #: ../share/filters/filters.svg.h:12 msgid "Edges are partly feathered out" -msgstr "" +msgstr "As bordas são parcialmente polidas para fora" #: ../share/filters/filters.svg.h:14 msgid "Jigsaw Piece" -msgstr "" +msgstr "Peça de Puzzle" #: ../share/filters/filters.svg.h:16 msgid "Low, sharp bevel" -msgstr "" +msgstr "Baixo, biselado facetado" #: ../share/filters/filters.svg.h:18 -#, fuzzy msgid "Rubber Stamp" -msgstr "Número de dentes" +msgstr "Carimbo" #: ../share/filters/filters.svg.h:19 ../share/filters/filters.svg.h:43 #: ../share/filters/filters.svg.h:47 ../share/filters/filters.svg.h:51 @@ -160,61 +171,54 @@ msgstr "Número de dentes" #: ../share/filters/filters.svg.h:711 ../share/filters/filters.svg.h:715 #: ../share/filters/filters.svg.h:723 #: ../src/extension/internal/filter/overlays.h:80 -#, fuzzy msgid "Overlays" -msgstr "Sobre" +msgstr "Sobreposições" #: ../share/filters/filters.svg.h:20 -#, fuzzy msgid "Random whiteouts inside" -msgstr "Posições aleatórias" +msgstr "Brancos aleatórios no interior" #: ../share/filters/filters.svg.h:22 -#, fuzzy msgid "Ink Bleed" -msgstr "Misturar" +msgstr "Desfocado com Bordas Esfarrapadas" #: ../share/filters/filters.svg.h:23 ../share/filters/filters.svg.h:27 #: ../share/filters/filters.svg.h:115 ../share/filters/filters.svg.h:431 -#, fuzzy msgid "Protrusions" -msgstr "Posição:" +msgstr "Prolongamentos" #: ../share/filters/filters.svg.h:24 msgid "Inky splotches underneath the object" msgstr "" +"Desfoca o objeto e prolonga as bordas como tecido felpudo rasgado nas pontas" #: ../share/filters/filters.svg.h:26 -#, fuzzy msgid "Fire" -msgstr "Ficheiro" +msgstr "Bordas a Arder" #: ../share/filters/filters.svg.h:28 msgid "Edges of object are on fire" -msgstr "" +msgstr "As bordas do objeto ficam em chamas" #: ../share/filters/filters.svg.h:30 -#, fuzzy msgid "Bloom" -msgstr "Ampliação" +msgstr "Eclodir" #: ../share/filters/filters.svg.h:32 msgid "Soft, cushion-like bevel with matte highlights" -msgstr "" +msgstr "Suave, biselado como almofada com luzes mate" #: ../share/filters/filters.svg.h:34 -#, fuzzy msgid "Ridged Border" -msgstr "Modo Limite" +msgstr "Moldura de Quadro" #: ../share/filters/filters.svg.h:36 msgid "Ridged border with inner bevel" -msgstr "" +msgstr "Borda de arestas biseladas por dentro" #: ../share/filters/filters.svg.h:38 -#, fuzzy msgid "Ripple" -msgstr "Substituir" +msgstr "Ondulação" #: ../share/filters/filters.svg.h:39 ../share/filters/filters.svg.h:123 #: ../share/filters/filters.svg.h:315 ../share/filters/filters.svg.h:319 @@ -223,47 +227,42 @@ msgstr "Substituir" #: ../share/filters/filters.svg.h:635 #: ../src/extension/internal/filter/distort.h:96 #: ../src/extension/internal/filter/distort.h:205 -#, fuzzy msgid "Distort" -msgstr "Divisor" +msgstr "Distorção" #: ../share/filters/filters.svg.h:40 -#, fuzzy msgid "Horizontal rippling of edges" -msgstr "Raio horizontal de cantos arredondados" +msgstr "Ondulado horizontal das bordas" # Tradução forçada... ao pé da letra... # - samymn #: ../share/filters/filters.svg.h:42 -#, fuzzy msgid "Speckle" -msgstr "Dessalpicar" +msgstr "Salpicado" #: ../share/filters/filters.svg.h:44 msgid "Fill object with sparse translucent specks" -msgstr "" +msgstr "Preencher o objeto com salpicos translucentes espaçados" #: ../share/filters/filters.svg.h:46 -#, fuzzy msgid "Oil Slick" -msgstr "Folga" +msgstr "Maré Negra" #: ../share/filters/filters.svg.h:48 msgid "Rainbow-colored semitransparent oily splotches" -msgstr "" +msgstr "Pontilhados oleosos semi-transparentes com cores do arco-íris" #: ../share/filters/filters.svg.h:50 -#, fuzzy msgid "Frost" -msgstr "Fonte" +msgstr "Gelo" #: ../share/filters/filters.svg.h:52 msgid "Flake-like white splotches" -msgstr "" +msgstr "Pontilhados brancos como flocos de neve" #: ../share/filters/filters.svg.h:54 msgid "Leopard Fur" -msgstr "" +msgstr "Pele de Leopardo" #: ../share/filters/filters.svg.h:55 ../share/filters/filters.svg.h:175 #: ../share/filters/filters.svg.h:179 ../share/filters/filters.svg.h:183 @@ -272,61 +271,56 @@ msgstr "" #: ../share/filters/filters.svg.h:247 ../share/filters/filters.svg.h:255 #: ../share/filters/filters.svg.h:387 ../share/filters/filters.svg.h:395 #: ../share/filters/filters.svg.h:399 ../share/filters/filters.svg.h:403 -#, fuzzy msgid "Materials" -msgstr "Matriz" +msgstr "Materiais" #: ../share/filters/filters.svg.h:56 msgid "Leopard spots (loses object's own color)" -msgstr "" +msgstr "Textura similar à pele de leopardo (perde-se a cor original)" #: ../share/filters/filters.svg.h:58 msgid "Zebra" -msgstr "" +msgstr "Zebra" #: ../share/filters/filters.svg.h:60 msgid "Irregular vertical dark stripes (loses object's own color)" -msgstr "" +msgstr "Listas escuras verticais irregulares (perde a cor do objeto)" #: ../share/filters/filters.svg.h:62 -#, fuzzy msgid "Clouds" -msgstr "Fe_char" +msgstr "Nuvens" #: ../share/filters/filters.svg.h:64 msgid "Airy, fluffy, sparse white clouds" -msgstr "" +msgstr "Nuvens brancas espaçadas" #: ../share/filters/filters.svg.h:66 #: ../src/extension/internal/bitmap/sharpen.cpp:38 msgid "Sharpen" -msgstr "Afiar" +msgstr "Nitidez" #: ../share/filters/filters.svg.h:67 ../share/filters/filters.svg.h:71 #: ../share/filters/filters.svg.h:87 ../share/filters/filters.svg.h:295 #: ../share/filters/filters.svg.h:415 #: ../src/extension/internal/filter/image.h:62 -#, fuzzy msgid "Image Effects" -msgstr "Gerenciar caminhos de efeitos" +msgstr "Efeitos de Imagem" #: ../share/filters/filters.svg.h:68 msgid "Sharpen edges and boundaries within the object, force=0.15" -msgstr "" +msgstr "Aumentar nitizez nas bordas e fronteiras dentro do objeto, grau=0.15" #: ../share/filters/filters.svg.h:70 -#, fuzzy msgid "Sharpen More" -msgstr "Afiar" +msgstr "Mais Nitidez" #: ../share/filters/filters.svg.h:72 msgid "Sharpen edges and boundaries within the object, force=0.3" -msgstr "" +msgstr "Aumentar nitidez nas bordas e fronteiras dentro do objeto, grau=0.3" #: ../share/filters/filters.svg.h:74 -#, fuzzy msgid "Oil painting" -msgstr "Pintura a Óleo" +msgstr "Pintura a óleo" #: ../share/filters/filters.svg.h:75 ../share/filters/filters.svg.h:79 #: ../share/filters/filters.svg.h:83 ../share/filters/filters.svg.h:447 @@ -346,12 +340,11 @@ msgstr "Pintura a Óleo" #: ../src/extension/internal/filter/paint.h:877 #: ../src/extension/internal/filter/paint.h:981 msgid "Image Paint and Draw" -msgstr "" +msgstr "Desenho e Pintura da Imagem" #: ../share/filters/filters.svg.h:76 -#, fuzzy msgid "Simulate oil painting style" -msgstr "Simular saída na Ecrã" +msgstr "Simular estilo de pintura a óleo" #. Pencil #: ../share/filters/filters.svg.h:78 @@ -361,30 +354,27 @@ msgstr "Lápis" #: ../share/filters/filters.svg.h:80 msgid "Detect color edges and retrace them in grayscale" -msgstr "" +msgstr "Detetar bordas de cor e redesenhar em escala de cinzas" #: ../share/filters/filters.svg.h:82 -#, fuzzy msgid "Blueprint" -msgstr "Largura igual" +msgstr "Cianotipo" #: ../share/filters/filters.svg.h:84 msgid "Detect color edges and retrace them in blue" -msgstr "" +msgstr "Detetar bordas de cor e redesenhar em azul" #: ../share/filters/filters.svg.h:86 -#, fuzzy msgid "Age" -msgstr "Ângulo" +msgstr "Antigo" #: ../share/filters/filters.svg.h:88 msgid "Imitate aged photograph" -msgstr "" +msgstr "Imitar fotografia envelhecida" #: ../share/filters/filters.svg.h:90 -#, fuzzy msgid "Organic" -msgstr "Origem X" +msgstr "Orgânico" #: ../share/filters/filters.svg.h:91 ../share/filters/filters.svg.h:119 #: ../share/filters/filters.svg.h:127 ../share/filters/filters.svg.h:187 @@ -396,109 +386,95 @@ msgstr "Origem X" #: ../share/filters/filters.svg.h:379 ../share/filters/filters.svg.h:383 #: ../share/filters/filters.svg.h:439 ../share/filters/filters.svg.h:467 #: ../share/filters/filters.svg.h:491 ../share/filters/filters.svg.h:531 -#, fuzzy msgid "Textures" -msgstr "Textos" +msgstr "Texturas" #: ../share/filters/filters.svg.h:92 msgid "Bulging, knotty, slick 3D surface" -msgstr "" +msgstr "Superfície 3D escorregadia, saliente com nós" #: ../share/filters/filters.svg.h:94 msgid "Barbed Wire" -msgstr "" +msgstr "Arame Farpado" #: ../share/filters/filters.svg.h:96 msgid "Gray bevelled wires with drop shadows" -msgstr "" +msgstr "Fios biselados a cinzento com sombras caídas" #: ../share/filters/filters.svg.h:98 -#, fuzzy msgid "Swiss Cheese" -msgstr "Curativo Ladrilhado" +msgstr "Queijo Suíço" #: ../share/filters/filters.svg.h:100 msgid "Random inner-bevel holes" -msgstr "" +msgstr "Buracos biselados para dentro aleatórios" #: ../share/filters/filters.svg.h:102 -#, fuzzy msgid "Blue Cheese" -msgstr "Canal Azul" +msgstr "Queijo Azul" #: ../share/filters/filters.svg.h:104 msgid "Marble-like bluish speckles" -msgstr "" +msgstr "Manchas azuladas como o mármore" #: ../share/filters/filters.svg.h:106 -#, fuzzy msgid "Button" -msgstr "Fundo" +msgstr "Botão 3D tipo Teclado" #: ../share/filters/filters.svg.h:108 msgid "Soft bevel, slightly depressed middle" -msgstr "" +msgstr "Biselado suave, com meio ligeiramente em depressão" #: ../share/filters/filters.svg.h:110 -#, fuzzy msgid "Inset" -msgstr "Co_mprimir" +msgstr "Inserção" #: ../share/filters/filters.svg.h:111 ../share/filters/filters.svg.h:267 #: ../share/filters/filters.svg.h:343 ../share/filters/filters.svg.h:435 #: ../share/filters/filters.svg.h:811 #: ../src/extension/internal/filter/shadows.h:81 -#, fuzzy msgid "Shadows and Glows" -msgstr "Desenhar Alças" +msgstr "Sobras e Auréolas" #: ../share/filters/filters.svg.h:112 -#, fuzzy msgid "Shadowy outer bevel" -msgstr "Alfa" +msgstr "Biselado por fora sombreado" #: ../share/filters/filters.svg.h:114 -#, fuzzy msgid "Dripping" -msgstr "Script" +msgstr "Escorrer" #: ../share/filters/filters.svg.h:116 msgid "Random paint streaks downwards" -msgstr "" +msgstr "Riscos de tinta aleatórios para baixo" #: ../share/filters/filters.svg.h:118 -#, fuzzy msgid "Jam Spread" -msgstr "Espalhar" +msgstr "Espalhamento de Geleia" #: ../share/filters/filters.svg.h:120 msgid "Glossy clumpy jam spread" -msgstr "" +msgstr "Espalhamento de geleia brilhante agrupada" #: ../share/filters/filters.svg.h:122 -#, fuzzy msgid "Pixel Smear" -msgstr "Pixels" +msgstr "Píxeis Esborratados" #: ../share/filters/filters.svg.h:124 -#, fuzzy msgid "Van Gogh painting effect for bitmaps" -msgstr "Converter textos em caminhos" +msgstr "Efeito de pintura Van Gogh para imagens bitmap" #: ../share/filters/filters.svg.h:126 -#, fuzzy msgid "Cracked Glass" -msgstr "Fechar intervalos" +msgstr "Vidro Rachado" #: ../share/filters/filters.svg.h:128 -#, fuzzy msgid "Under a cracked glass" -msgstr "Fechar intervalos" +msgstr "Por debaixo de um vidro rachado" #: ../share/filters/filters.svg.h:130 -#, fuzzy msgid "Bubbly Bumps" -msgstr "Bias" +msgstr "Saliências em Bolhas" #: ../share/filters/filters.svg.h:131 ../share/filters/filters.svg.h:307 #: ../share/filters/filters.svg.h:311 ../share/filters/filters.svg.h:347 @@ -516,250 +492,229 @@ msgstr "Bias" #: ../share/filters/filters.svg.h:799 ../share/filters/filters.svg.h:807 #: ../src/extension/internal/filter/bumps.h:142 #: ../src/extension/internal/filter/bumps.h:362 -#, fuzzy msgid "Bumps" -msgstr "Bias" +msgstr "Saliências" #: ../share/filters/filters.svg.h:132 msgid "Flexible bubbles effect with some displacement" -msgstr "" +msgstr "Efeito de bolhas flexível com algum deslocamento" #: ../share/filters/filters.svg.h:134 -#, fuzzy msgid "Glowing Bubble" -msgstr "Texto horizontal" +msgstr "Bolha com Auréola" #: ../share/filters/filters.svg.h:135 ../share/filters/filters.svg.h:155 #: ../share/filters/filters.svg.h:159 ../share/filters/filters.svg.h:203 #: ../share/filters/filters.svg.h:207 ../share/filters/filters.svg.h:215 #: ../share/filters/filters.svg.h:223 -#, fuzzy msgid "Ridges" -msgstr "Limite" +msgstr "Arestas" #: ../share/filters/filters.svg.h:136 msgid "Bubble effect with refraction and glow" -msgstr "" +msgstr "Efeito bolha com refração e halo" #: ../share/filters/filters.svg.h:138 -#, fuzzy msgid "Neon" -msgstr "Nenhum" +msgstr "Néon" #: ../share/filters/filters.svg.h:140 -#, fuzzy msgid "Neon light effect" -msgstr "Efeito actual" +msgstr "Efeito de luz néon" #: ../share/filters/filters.svg.h:142 -#, fuzzy msgid "Molten Metal" -msgstr "Meta-ficheiro otimizad" +msgstr "Metal a Derreter" #: ../share/filters/filters.svg.h:144 msgid "Melting parts of object together, with a glossy bevel and a glow" -msgstr "" +msgstr "Fundir partes do objeto, com um biselado brilhante e uma auréola" #: ../share/filters/filters.svg.h:146 -#, fuzzy msgid "Pressed Steel" -msgstr " R_edefinir " +msgstr "Aço Prensado" #: ../share/filters/filters.svg.h:148 -#, fuzzy msgid "Pressed metal with a rolled edge" -msgstr "Propriedades de Estrelas" +msgstr "Metal prensado com uma borda enrolada" #: ../share/filters/filters.svg.h:150 -#, fuzzy msgid "Matte Bevel" -msgstr "Colar tamanho" +msgstr "Biselado Mate" #: ../share/filters/filters.svg.h:152 msgid "Soft, pastel-colored, blurry bevel" -msgstr "" +msgstr "Biselado desfocado, suave, colorido a pastel" #: ../share/filters/filters.svg.h:154 msgid "Thin Membrane" -msgstr "" +msgstr "Membrana Fina" #: ../share/filters/filters.svg.h:156 msgid "Thin like a soap membrane" -msgstr "" +msgstr "Fino como uma bola de sabão" #: ../share/filters/filters.svg.h:158 -#, fuzzy msgid "Matte Ridge" -msgstr "Lugar de Luz" +msgstr "Fenda Mate" #: ../share/filters/filters.svg.h:160 -#, fuzzy msgid "Soft pastel ridge" -msgstr "Definir tamanho da página" +msgstr "Fenda em pastel suave" #: ../share/filters/filters.svg.h:162 -#, fuzzy msgid "Glowing Metal" -msgstr "Texto horizontal" +msgstr "Metal com Altas Luzes" #: ../share/filters/filters.svg.h:164 -#, fuzzy msgid "Glowing metal texture" -msgstr "Texto horizontal" +msgstr "Textura de metal com altas luzes direcionais brilhantes" #: ../share/filters/filters.svg.h:166 -#, fuzzy msgid "Leaves" -msgstr "Nível" +msgstr "Folhas" #: ../share/filters/filters.svg.h:167 ../share/filters/filters.svg.h:235 #: ../share/filters/filters.svg.h:271 ../share/filters/filters.svg.h:639 #: ../share/extensions/pathscatter.inx.h:1 -#, fuzzy msgid "Scatter" -msgstr "Padrão" +msgstr "Espalhar" #: ../share/filters/filters.svg.h:168 msgid "Leaves on the ground in Fall, or living foliage" msgstr "" +"Semelhante a folhas, quer mortas quer ainda verdes (cores conforme a imagem/" +"caminho original)" #: ../share/filters/filters.svg.h:170 #: ../src/extension/internal/filter/paint.h:339 -#, fuzzy msgid "Translucent" -msgstr "Único" +msgstr "Plástico Translucente" #: ../share/filters/filters.svg.h:172 msgid "Illuminated translucent plastic or glass effect" -msgstr "" +msgstr "Efeito de plástico ou vidro translucente e iluminado" #: ../share/filters/filters.svg.h:174 msgid "Iridescent Beeswax" -msgstr "" +msgstr "Cera de abelhas iridescente" #: ../share/filters/filters.svg.h:176 msgid "Waxy texture which keeps its iridescence through color fill change" msgstr "" +"Textura cerosa que mantém a sua iridescência através da alteração da cor do " +"preenchimento" #: ../share/filters/filters.svg.h:178 -#, fuzzy msgid "Eroded Metal" -msgstr "Meta-ficheiro otimizad" +msgstr "Metal Corroído" #: ../share/filters/filters.svg.h:180 msgid "Eroded metal texture with ridges, grooves, holes and bumps" -msgstr "" +msgstr "Textura de metal corroído com vincos, ranhuras, buracos e saliências." #: ../share/filters/filters.svg.h:182 -#, fuzzy msgid "Cracked Lava" -msgstr "Fechar intervalos" +msgstr "Lava com Rachas" #: ../share/filters/filters.svg.h:184 msgid "A volcanic texture, a little like leather" -msgstr "" +msgstr "Textura vulcânica, um pouco como o couro" #: ../share/filters/filters.svg.h:186 msgid "Bark" -msgstr "" +msgstr "Casca de Ãrvore" #: ../share/filters/filters.svg.h:188 msgid "Bark texture, vertical; use with deep colors" -msgstr "" +msgstr "Textura de casca de árvore, na vertical; usar com cores escuras" #: ../share/filters/filters.svg.h:190 msgid "Lizard Skin" -msgstr "" +msgstr "Pele de Lagarto" #: ../share/filters/filters.svg.h:192 msgid "Stylized reptile skin texture" -msgstr "" +msgstr "Textura estilizada de pele de réptil" #: ../share/filters/filters.svg.h:194 -#, fuzzy msgid "Stone Wall" -msgstr "Eliminar tudo" +msgstr "Muro de Pedra" #: ../share/filters/filters.svg.h:196 msgid "Stone wall texture to use with not too saturated colors" msgstr "" +"Textura de parede de pedra para ser usada com cores não muito saturadas" #: ../share/filters/filters.svg.h:198 msgid "Silk Carpet" -msgstr "" +msgstr "Carpete de Seda" #: ../share/filters/filters.svg.h:200 msgid "Silk carpet texture, horizontal stripes" -msgstr "" +msgstr "Textura de carpete de seda, riscas horizontais" #: ../share/filters/filters.svg.h:202 -#, fuzzy msgid "Refractive Gel A" -msgstr "Mudança rela_tiva" +msgstr "Gel Refratário A" #: ../share/filters/filters.svg.h:204 msgid "Gel effect with light refraction" -msgstr "" +msgstr "Efeito gel com baixa refração" #: ../share/filters/filters.svg.h:206 -#, fuzzy msgid "Refractive Gel B" -msgstr "Mudança rela_tiva" +msgstr "Gel Refratário B" #: ../share/filters/filters.svg.h:208 msgid "Gel effect with strong refraction" -msgstr "" +msgstr "Efeito gel com alta refração" #: ../share/filters/filters.svg.h:210 -#, fuzzy msgid "Metallized Paint" -msgstr "Ângulo esquerdo" +msgstr "Pintura Metalizada" #: ../share/filters/filters.svg.h:212 msgid "" "Metallized effect with a soft lighting, slightly translucent at the edges" msgstr "" +"Efeito metalizado com uma luz suave, ligeiramente translucente nas bordas" #: ../share/filters/filters.svg.h:214 -#, fuzzy msgid "Dragee" -msgstr "Arrastar curva" +msgstr "Pastilha" #: ../share/filters/filters.svg.h:216 msgid "Gel Ridge with a pearlescent look" -msgstr "" +msgstr "Borda de Gel com um aspeto pérola" #: ../share/filters/filters.svg.h:218 -#, fuzzy msgid "Raised Border" -msgstr "Levantar nó" +msgstr "Borda Levantada" #: ../share/filters/filters.svg.h:220 msgid "Strongly raised border around a flat surface" -msgstr "" +msgstr "Borda levantada à volta de uma superfície lisa" #: ../share/filters/filters.svg.h:222 -#, fuzzy msgid "Metallized Ridge" -msgstr "Ângulo esquerdo" +msgstr "Bordas Metalizadas" #: ../share/filters/filters.svg.h:224 msgid "Gel Ridge metallized at its top" -msgstr "" +msgstr "Borda de Gel metalizada no ponto mais alto" #: ../share/filters/filters.svg.h:226 -#, fuzzy msgid "Fat Oil" -msgstr "Cor lisa" +msgstr "Óleo Viscoso" #: ../share/filters/filters.svg.h:228 msgid "Fat oil with some adjustable turbulence" -msgstr "" +msgstr "Óleo gordo com alguma turbulência ajustável" #: ../share/filters/filters.svg.h:230 -#, fuzzy msgid "Black Hole" -msgstr "Traço preto" +msgstr "Buraco Negro" #: ../share/filters/filters.svg.h:231 ../share/filters/filters.svg.h:275 #: ../share/filters/filters.svg.h:279 ../share/filters/filters.svg.h:835 @@ -770,402 +725,381 @@ msgid "Morphology" msgstr "Morfologia" #: ../share/filters/filters.svg.h:232 -#, fuzzy msgid "Creates a black light inside and outside" -msgstr "Desenhar um caminho a uma grelha" +msgstr "Cria uma luz negra por dentro e por fora" #: ../share/filters/filters.svg.h:234 -#, fuzzy msgid "Cubes" -msgstr "Numerar Nós" +msgstr "Cubos" #: ../share/filters/filters.svg.h:236 msgid "Scattered cubes; adjust the Morphology primitive to vary size" -msgstr "" +msgstr "Cubos dispersos; ajustar a Morfologia para variar o tamanho" #: ../share/filters/filters.svg.h:238 -#, fuzzy msgid "Peel Off" -msgstr "Tipografia normal" +msgstr "Descascar" #: ../share/filters/filters.svg.h:240 msgid "Peeling painting on a wall" -msgstr "" +msgstr "Tinta a descascar numa parede" #: ../share/filters/filters.svg.h:242 -#, fuzzy msgid "Gold Splatter" -msgstr "Padrões" +msgstr "Borrifado a Ouro" #: ../share/filters/filters.svg.h:244 msgid "Splattered cast metal, with golden highlights" msgstr "" +"Semelhante a pedacinhos de folha de ouro amassados e rasgados com alto relevo" #: ../share/filters/filters.svg.h:246 -#, fuzzy msgid "Gold Paste" -msgstr "Proporção do raio:" +msgstr "Folha de Ouro Amassada" #: ../share/filters/filters.svg.h:248 msgid "Fat pasted cast metal, with golden highlights" msgstr "" +"Efeito de folha de ouro ligeiramente enrugada e rasgada nas bordas, com " +"altaz luzes douradas" #: ../share/filters/filters.svg.h:250 msgid "Crumpled Plastic" -msgstr "" +msgstr "Plástico Amassado" #: ../share/filters/filters.svg.h:252 msgid "Crumpled matte plastic, with melted edge" -msgstr "" +msgstr "Plástico amassado mate, com borda derretida" #: ../share/filters/filters.svg.h:254 msgid "Enamel Jewelry" -msgstr "" +msgstr "Jóia de Esmalte" #: ../share/filters/filters.svg.h:256 msgid "Slightly cracked enameled texture" -msgstr "" +msgstr "Textura de esmalte ligeiramente rachada" #: ../share/filters/filters.svg.h:258 -#, fuzzy msgid "Rough Paper" -msgstr "Modo áspero" +msgstr "Papel Rugoso" #: ../share/filters/filters.svg.h:260 msgid "Aquarelle paper effect which can be used for pictures as for objects" -msgstr "" +msgstr "Efeito de papel aguarela que pode ser usado em imagens e objetos" #: ../share/filters/filters.svg.h:262 -#, fuzzy msgid "Rough and Glossy" -msgstr "Modo áspero" +msgstr "Rugoso e Brilhante" #: ../share/filters/filters.svg.h:264 msgid "" "Crumpled glossy paper effect which can be used for pictures as for objects" msgstr "" +"Efeito de papel brilhante amassado que pode ser usado em imagens e objetos" #: ../share/filters/filters.svg.h:266 -#, fuzzy msgid "In and Out" -msgstr "Nenhuma pintura" +msgstr "Dentro e Fora" #: ../share/filters/filters.svg.h:268 msgid "Inner colorized shadow, outer black shadow" -msgstr "" +msgstr "Sombra por dentro colorida, com sombra por fora preta" #: ../share/filters/filters.svg.h:270 -#, fuzzy msgid "Air Spray" -msgstr "Espiral" +msgstr "Pulverização de Ar" #: ../share/filters/filters.svg.h:272 msgid "Convert to small scattered particles with some thickness" -msgstr "" +msgstr "Converte em pequenas partículas dispersas com alguma espessura" #: ../share/filters/filters.svg.h:274 -#, fuzzy msgid "Warm Inside" -msgstr "nó final" +msgstr "Quente por Dentro" #: ../share/filters/filters.svg.h:276 msgid "Blurred colorized contour, filled inside" -msgstr "" +msgstr "Contorno colorido desfocado, preenchido por dentro" #: ../share/filters/filters.svg.h:278 -#, fuzzy msgid "Cool Outside" -msgstr "Contorno da caixa" +msgstr "Frio por Fora" #: ../share/filters/filters.svg.h:280 msgid "Blurred colorized contour, empty inside" -msgstr "" +msgstr "Contorno colorido desfocado, vazio por dentro" #: ../share/filters/filters.svg.h:282 msgid "Electronic Microscopy" -msgstr "" +msgstr "Microscopia Eletrónica" #: ../share/filters/filters.svg.h:284 msgid "" "Bevel, crude light, discoloration and glow like in electronic microscopy" msgstr "" +"Biselado, luz crua, descoloração e auréola como na microscopia eletrónica" #: ../share/filters/filters.svg.h:286 -#, fuzzy msgid "Tartan" -msgstr "Alvo" +msgstr "Padrão escocês" #: ../share/filters/filters.svg.h:288 msgid "Checkered tartan pattern" -msgstr "" +msgstr "Padrão tartã quadricular" #: ../share/filters/filters.svg.h:290 -#, fuzzy msgid "Shaken Liquid" -msgstr "Alfa" +msgstr "Líquido Agitado" #: ../share/filters/filters.svg.h:292 msgid "Colorizable filling with flow inside like transparency" -msgstr "" +msgstr "Preenchimento colorizável com enchimento dentro como transparência" #: ../share/filters/filters.svg.h:294 msgid "Soft Focus Lens" -msgstr "" +msgstr "Lente de Foco Suave" #: ../share/filters/filters.svg.h:296 msgid "Glowing image content without blurring it" -msgstr "" +msgstr "Conteúdo da imagem como auréola sem desfocar" #: ../share/filters/filters.svg.h:298 -#, fuzzy msgid "Stained Glass" -msgstr "Fechar intervalos" +msgstr "Vitral" #: ../share/filters/filters.svg.h:300 -#, fuzzy msgid "Illuminated stained glass effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito vitral iluminado" #: ../share/filters/filters.svg.h:302 -#, fuzzy msgid "Dark Glass" -msgstr "Embutir" +msgstr "Vidro Escuro" #: ../share/filters/filters.svg.h:304 msgid "Illuminated glass effect with light coming from beneath" -msgstr "" +msgstr "Efeito de luz em vidro com luz por trás" #: ../share/filters/filters.svg.h:306 -#, fuzzy msgid "HSL Bumps Alpha" -msgstr "Bias" +msgstr "Transparência Saliente HSL" #: ../share/filters/filters.svg.h:308 msgid "Same as HSL Bumps but with transparent highlights" -msgstr "" +msgstr "O mesmo que o Saliente HSL com altas luzes transparentes" #: ../share/filters/filters.svg.h:310 -#, fuzzy msgid "Bubbly Bumps Alpha" -msgstr "Bias" +msgstr "Saliências em Bolhas Transparentes" #: ../share/filters/filters.svg.h:312 msgid "Same as Bubbly Bumps but with transparent highlights" -msgstr "" +msgstr "Igual a Saliências em Bolhas mas com altas luzes transparentes" #: ../share/filters/filters.svg.h:314 ../share/filters/filters.svg.h:362 -#, fuzzy msgid "Torn Edges" -msgstr "Mover nós" +msgstr "Bordas Rasgadas" #: ../share/filters/filters.svg.h:316 ../share/filters/filters.svg.h:364 msgid "" "Displace the outside of shapes and pictures without altering their content" msgstr "" +"Semelhante a papel rasgado, desloca as partes de fora das formas geométricas " +"e imagens sem alterar o conteúdo" #: ../share/filters/filters.svg.h:318 -#, fuzzy msgid "Roughen Inside" -msgstr "Modo áspero" +msgstr "Rugoso Dentro" #: ../share/filters/filters.svg.h:320 -#, fuzzy msgid "Roughen all inside shapes" -msgstr "Modo áspero" +msgstr "Torna rugoso todas as formas geométricas de dentro" #: ../share/filters/filters.svg.h:322 -#, fuzzy msgid "Evanescent" -msgstr "Único" +msgstr "Evanescente" #: ../share/filters/filters.svg.h:324 msgid "" "Blur the contents of objects, preserving the outline and adding progressive " "transparency at edges" msgstr "" +"Desfocar os conteúdos dos objetos, preservando o contorno e adicionando " +"transparência progressiva nas bordas" #: ../share/filters/filters.svg.h:326 msgid "Chalk and Sponge" -msgstr "" +msgstr "Giz e Esponja" #: ../share/filters/filters.svg.h:328 msgid "Low turbulence gives sponge look and high turbulence chalk" msgstr "" +"Turbulência baixa com aspeto de esponja e turbulência alta com aspeto de giz" #: ../share/filters/filters.svg.h:330 -#, fuzzy msgid "People" -msgstr "Substituir" +msgstr "Pessoas" #: ../share/filters/filters.svg.h:332 msgid "Colorized blotches, like a crowd of people" -msgstr "" +msgstr "Manchas coloridas, como uma multidão de pessoas" #: ../share/filters/filters.svg.h:334 -#, fuzzy msgid "Scotland" -msgstr "Folga" +msgstr "Escócia" #: ../share/filters/filters.svg.h:336 msgid "Colorized mountain tops out of the fog" -msgstr "" +msgstr "Cristas das montanhas acima do nevoeiro, colorizável" #: ../share/filters/filters.svg.h:338 -#, fuzzy msgid "Garden of Delights" -msgstr "Luminosidade" +msgstr "Jardim das Delícias" #: ../share/filters/filters.svg.h:340 msgid "" "Phantasmagorical turbulent wisps, like Hieronymus Bosch's Garden of Delights" msgstr "" +"Pequenas turbulências fantasmagóricas, como o quadro O Jardim das Delícias " +"Terrenas de Hieronymus Bosch" #: ../share/filters/filters.svg.h:342 -#, fuzzy msgid "Cutout Glow" -msgstr "recuar" +msgstr "Auréola Recortada" #: ../share/filters/filters.svg.h:344 msgid "In and out glow with a possible offset and colorizable flood" msgstr "" +"Auréola dentro e fora com deslocamento possível e inundação de cor " +"colorizável" #: ../share/filters/filters.svg.h:346 -#, fuzzy msgid "Dark Emboss" -msgstr "Embutir" +msgstr "Alto Relevo Escuro" #: ../share/filters/filters.svg.h:348 msgid "Emboss effect : 3D relief where white is replaced by black" -msgstr "" +msgstr "Efeito de alto relevo: relevo 3D onde o branco é substituído por preto" #: ../share/filters/filters.svg.h:350 -#, fuzzy msgid "Bubbly Bumps Matte" -msgstr "Bias" +msgstr "Saliências em Bolhas Mate" #: ../share/filters/filters.svg.h:352 msgid "Same as Bubbly Bumps but with a diffuse light instead of a specular one" msgstr "" +"Igual a Saliências em Bolhas mas com luz difusa em vez de uma especular" #: ../share/filters/filters.svg.h:354 -#, fuzzy msgid "Blotting Paper" -msgstr "Modo áspero" +msgstr "Papel Absorvente" #: ../share/filters/filters.svg.h:356 msgid "Inkblot on blotting paper" -msgstr "" +msgstr "Mancha de tinta em papel absorvente" #: ../share/filters/filters.svg.h:358 -#, fuzzy msgid "Wax Print" -msgstr "Impressão LaTeX" +msgstr "Impressão a Cera" #: ../share/filters/filters.svg.h:360 msgid "Wax print on tissue texture" -msgstr "" +msgstr "Impressão a cera em textura de tecido" #: ../share/filters/filters.svg.h:366 -#, fuzzy msgid "Watercolor" -msgstr "Colar cor" +msgstr "Aguarela" #: ../share/filters/filters.svg.h:368 msgid "Cloudy watercolor effect" -msgstr "" +msgstr "Efeito de aguarela nebulosa" #: ../share/filters/filters.svg.h:370 -#, fuzzy msgid "Felt" -msgstr "ArteLivre" +msgstr "Feltro" #: ../share/filters/filters.svg.h:372 msgid "" "Felt like texture with color turbulence and slightly darker at the edges" msgstr "" +"Textura como o feltro com turbulência de cor e ligeiramente mais escura nas " +"bordas" #: ../share/filters/filters.svg.h:374 -#, fuzzy msgid "Ink Paint" -msgstr "Nenhuma pintura" +msgstr "Pintura a Tinta" #: ../share/filters/filters.svg.h:376 msgid "Ink paint on paper with some turbulent color shift" -msgstr "" +msgstr "Pintura a tinta em papel com alguma descolocação turbulenta na cor" #: ../share/filters/filters.svg.h:378 -#, fuzzy msgid "Tinted Rainbow" -msgstr "Ângulo esquerdo" +msgstr "Arco-Ãris Tinturado" #: ../share/filters/filters.svg.h:380 msgid "Smooth rainbow colors melted along the edges and colorizable" -msgstr "" +msgstr "Cores do arco-íris suaves e fundidas ao longo das bordas e colorizável" #: ../share/filters/filters.svg.h:382 -#, fuzzy msgid "Melted Rainbow" -msgstr "Ângulo esquerdo" +msgstr "Arco-Ãris Fundido" #: ../share/filters/filters.svg.h:384 msgid "Smooth rainbow colors slightly melted along the edges" -msgstr "" +msgstr "Cores do arco-íris suaves ligeiramente fundidas ao longo das bordas" #: ../share/filters/filters.svg.h:386 -#, fuzzy msgid "Flex Metal" -msgstr "Meta-ficheiro otimizad" +msgstr "Metal Flexível" #: ../share/filters/filters.svg.h:388 msgid "Bright, polished uneven metal casting, colorizable" -msgstr "" +msgstr "Metal fundido, polido e desigual, colorizável" #: ../share/filters/filters.svg.h:390 -#, fuzzy msgid "Wavy Tartan" -msgstr "Alvo" +msgstr "Padrão Escocês Ondulado" #: ../share/filters/filters.svg.h:392 msgid "Tartan pattern with a wavy displacement and bevel around the edges" msgstr "" +"Padrão tartã com um deslocamento ondulado e biselado à volta das bordas" #: ../share/filters/filters.svg.h:394 msgid "3D Marble" -msgstr "" +msgstr "Mármore 3D" #: ../share/filters/filters.svg.h:396 msgid "3D warped marble texture" -msgstr "" +msgstr "Textura de mármure em 3D envolvente" #: ../share/filters/filters.svg.h:398 msgid "3D Wood" -msgstr "" +msgstr "Madeira 3D" #: ../share/filters/filters.svg.h:400 msgid "3D warped, fibered wood texture" -msgstr "" +msgstr "Textura de madeira fibrosa em 3D envolvente" #: ../share/filters/filters.svg.h:402 -#, fuzzy msgid "3D Mother of Pearl" -msgstr "Largura do papel" +msgstr "Madrepérola 3D" #: ../share/filters/filters.svg.h:404 msgid "3D warped, iridescent pearly shell texture" -msgstr "" +msgstr "Textura de concha de pérola iridescente em 3D envolvente" #: ../share/filters/filters.svg.h:406 msgid "Tiger Fur" -msgstr "" +msgstr "Pele de tigre" #: ../share/filters/filters.svg.h:408 msgid "Tiger fur pattern with folds and bevel around the edges" -msgstr "" +msgstr "Padrão de pele de tigre com dobras e saliências" #: ../share/filters/filters.svg.h:410 -#, fuzzy msgid "Black Light" -msgstr "Ponto Negro" +msgstr "Luz Negra" #: ../share/filters/filters.svg.h:411 ../share/filters/filters.svg.h:575 #: ../share/filters/filters.svg.h:587 ../share/filters/filters.svg.h:627 @@ -1231,41 +1165,36 @@ msgid "Color" msgstr "Cor" #: ../share/filters/filters.svg.h:412 -#, fuzzy msgid "Light areas turn to black" -msgstr "Brilho" +msgstr "Zonas claras tornam-se escuras" #: ../share/filters/filters.svg.h:414 -#, fuzzy msgid "Film Grain" -msgstr "Preencher com Tinta" +msgstr "Grão de Filme Fotográfico" #: ../share/filters/filters.svg.h:416 msgid "Adds a small scale graininess" -msgstr "" +msgstr "Adiciona pequenos grãos similares às películas fotográficas" #: ../share/filters/filters.svg.h:418 -#, fuzzy msgid "Plaster Color" -msgstr "Colar cor" +msgstr "Gesso Colorido" #: ../share/filters/filters.svg.h:420 -#, fuzzy msgid "Colored plaster emboss effect" -msgstr "Remover efeito de caminho" +msgstr "Efeito de alto relevo em gesso colorido" #: ../share/filters/filters.svg.h:422 msgid "Velvet Bumps" -msgstr "" +msgstr "Saliências de Veludo" #: ../share/filters/filters.svg.h:424 msgid "Gives Smooth Bumps velvet like" -msgstr "" +msgstr "Aplica saliências suaves como o veludo" #: ../share/filters/filters.svg.h:426 -#, fuzzy msgid "Comics Cream" -msgstr "Não redondo" +msgstr "Banda Desenhada Creme" #: ../share/filters/filters.svg.h:427 ../share/filters/filters.svg.h:727 #: ../share/filters/filters.svg.h:731 ../share/filters/filters.svg.h:735 @@ -1278,230 +1207,225 @@ msgstr "Não redondo" #: ../share/filters/filters.svg.h:787 ../share/filters/filters.svg.h:791 #: ../share/filters/filters.svg.h:795 msgid "Non realistic 3D shaders" -msgstr "" +msgstr "Sombreadores 3D não realistas" #: ../share/filters/filters.svg.h:428 msgid "Comics shader with creamy waves transparency" -msgstr "" +msgstr "Desenho de banda desenhada com transparência de ondas cremosas" #: ../share/filters/filters.svg.h:430 msgid "Chewing Gum" -msgstr "" +msgstr "Pastilha Elástica" #: ../share/filters/filters.svg.h:432 msgid "" "Creates colorizable blotches which smoothly flow over the edges of the lines " "at their crossings" msgstr "" +"Cria manchas colorizáveis que correm suavemente sobre as bordas das linhas " +"cruzadas" #: ../share/filters/filters.svg.h:434 -#, fuzzy msgid "Dark And Glow" -msgstr "Desenhar Alças" +msgstr "Escuro e Auréola" #: ../share/filters/filters.svg.h:436 msgid "Darkens the edge with an inner blur and adds a flexible glow" msgstr "" +"Escurece a borda com um desfocado interior e adiciona uma auréola flexível" #: ../share/filters/filters.svg.h:438 -#, fuzzy msgid "Warped Rainbow" -msgstr "Ângulo esquerdo" +msgstr "Arco-Ãris Distorcido" #: ../share/filters/filters.svg.h:440 msgid "Smooth rainbow colors warped along the edges and colorizable" -msgstr "" +msgstr "Cores do arco-íris suaves envolvido ao longo das bordas colorizável" #: ../share/filters/filters.svg.h:442 -#, fuzzy msgid "Rough and Dilate" -msgstr "Modo áspero" +msgstr "Rugoso e Dilatado" #: ../share/filters/filters.svg.h:444 msgid "Create a turbulent contour around" -msgstr "" +msgstr "Cria um contorno à volta turbulento" #: ../share/filters/filters.svg.h:446 -#, fuzzy msgid "Old Postcard" -msgstr "Pintura a Óleo" +msgstr "Postal Antigo" #: ../share/filters/filters.svg.h:448 msgid "Slightly posterize and draw edges like on old printed postcards" -msgstr "" +msgstr "Posterizar levemente e desenhar bordas como nos postais antigos" #: ../share/filters/filters.svg.h:450 -#, fuzzy msgid "Dots Transparency" -msgstr "0 (transparente)" +msgstr "Transparência de Pontos" #: ../share/filters/filters.svg.h:452 msgid "Gives a pointillist HSL sensitive transparency" -msgstr "" +msgstr "Aplica uma transparência sensível a HSL pontilhista" #: ../share/filters/filters.svg.h:454 -#, fuzzy msgid "Canvas Transparency" -msgstr "0 (transparente)" +msgstr "Transparência da Tela" #: ../share/filters/filters.svg.h:456 msgid "Gives a canvas like HSL sensitive transparency." -msgstr "" +msgstr "Aplica uma transparência sensível a HSL como tela de pintura." #: ../share/filters/filters.svg.h:458 -#, fuzzy msgid "Smear Transparency" -msgstr "0 (transparente)" +msgstr "Transparência Esborratada" #: ../share/filters/filters.svg.h:460 msgid "" "Paint objects with a transparent turbulence which turns around color edges" msgstr "" +"Pintar objetos com uma turbulência transparente que dá a volta às bordas de " +"cor" #: ../share/filters/filters.svg.h:462 -#, fuzzy msgid "Thick Paint" -msgstr "Nenhuma pintura" +msgstr "Pintura Espessa" #: ../share/filters/filters.svg.h:464 msgid "Thick painting effect with turbulence" -msgstr "" +msgstr "Efeito de pintura grossa com turbulência" # Enevoar, desfocar ou borrar? -- krishna #: ../share/filters/filters.svg.h:466 -#, fuzzy msgid "Burst" -msgstr "Desfocar" +msgstr "Rebentado" #: ../share/filters/filters.svg.h:468 msgid "Burst balloon texture crumpled and with holes" -msgstr "" +msgstr "Textura de balão rebentado e com buracos" #: ../share/filters/filters.svg.h:470 -#, fuzzy msgid "Embossed Leather" -msgstr "Sem efeito" +msgstr "Couro com Alto Relevo" #: ../share/filters/filters.svg.h:472 msgid "" "Combine a HSL edges detection bump with a leathery or woody and colorizable " "texture" msgstr "" +"Efeito que combina saliência de deteção de bordas HSL com textura colorível " +"de pele ou madeira" #: ../share/filters/filters.svg.h:474 -#, fuzzy msgid "Carnaval" -msgstr "Ciano" +msgstr "Carnaval" #: ../share/filters/filters.svg.h:476 msgid "White splotches evocating carnaval masks" -msgstr "" +msgstr "Salpicos brancos evocando máscaras de carnaval" #: ../share/filters/filters.svg.h:478 -#, fuzzy msgid "Plastify" -msgstr "Justificar" +msgstr "Plastificar" #: ../share/filters/filters.svg.h:480 msgid "" "HSL edges detection bump with a wavy reflective surface effect and variable " "crumple" msgstr "" +"Saliência de deteção de bordas HSL com um efeito de superfície ondulante " +"refletiva e amassado variável" #: ../share/filters/filters.svg.h:482 -#, fuzzy msgid "Plaster" -msgstr "Colar" +msgstr "Gesso" #: ../share/filters/filters.svg.h:484 msgid "" "Combine a HSL edges detection bump with a matte and crumpled surface effect" msgstr "" +"Efeito que combina saliência de deteção de bordas HSL e superfície amassada" #: ../share/filters/filters.svg.h:486 -#, fuzzy msgid "Rough Transparency" -msgstr "0 (transparente)" +msgstr "Transparência Rugosa" #: ../share/filters/filters.svg.h:488 msgid "Adds a turbulent transparency which displaces pixels at the same time" msgstr "" +"Adiciona uma transparência turbulenta que desloca simultaneamente os píxeis" #: ../share/filters/filters.svg.h:490 -#, fuzzy msgid "Gouache" -msgstr "Fonte" +msgstr "Guache" #: ../share/filters/filters.svg.h:492 msgid "Partly opaque water color effect with bleed" -msgstr "" +msgstr "Efeito de aguarela parcialmente opaca com sangria" #: ../share/filters/filters.svg.h:494 -#, fuzzy msgid "Alpha Engraving" -msgstr "Desenho" +msgstr "Gravura Transparente" #: ../share/filters/filters.svg.h:496 msgid "Gives a transparent engraving effect with rough line and filling" -msgstr "" +msgstr "Aplica um efeito gravura transparente com linha e preenchimento rude" #: ../share/filters/filters.svg.h:498 -#, fuzzy msgid "Alpha Draw Liquid" -msgstr "Alfa" +msgstr "Desenho Transparente Líquido" #: ../share/filters/filters.svg.h:500 msgid "Gives a transparent fluid drawing effect with rough line and filling" msgstr "" +"Aplica um efeito de desenho fluido transparente com linha e preenchimento " +"rude" #: ../share/filters/filters.svg.h:502 -#, fuzzy msgid "Liquid Drawing" -msgstr "desenho%s" +msgstr "Desenho Líquido" #: ../share/filters/filters.svg.h:504 msgid "Gives a fluid and wavy expressionist drawing effect to images" msgstr "" +"Aplica um efeito de desenho fluido e ondulante expressionista em imagens" #: ../share/filters/filters.svg.h:506 msgid "Marbled Ink" -msgstr "" +msgstr "Tinta Mármore" #: ../share/filters/filters.svg.h:508 msgid "Marbled transparency effect which conforms to image detected edges" msgstr "" +"Efeito de transparência marmoreada que conforma as bordas detetadas da imagem" #: ../share/filters/filters.svg.h:510 msgid "Thick Acrylic" -msgstr "" +msgstr "Acrílico Grosso" #: ../share/filters/filters.svg.h:512 msgid "Thick acrylic paint texture with high texture depth" -msgstr "" +msgstr "Textura de tinta de acrílico grossa com profundidade de textura alta" #: ../share/filters/filters.svg.h:514 -#, fuzzy msgid "Alpha Engraving B" -msgstr "Desenho" +msgstr "Gravura Transparente B" #: ../share/filters/filters.svg.h:516 msgid "" "Gives a controllable roughness engraving effect to bitmaps and materials" msgstr "" +"Fornece um efeito de gravura rugosa controlável para imagens e materiais" #: ../share/filters/filters.svg.h:518 -#, fuzzy msgid "Lapping" -msgstr "Alterar arredondamento" +msgstr "Borda Ondulante" #: ../share/filters/filters.svg.h:520 msgid "Something like a water noise" -msgstr "" +msgstr "Algo parecido com ruído de água" #: ../share/filters/filters.svg.h:522 -#, fuzzy msgid "Monochrome Transparency" -msgstr "0 (transparente)" +msgstr "Transparência Monocromática" #: ../share/filters/filters.svg.h:523 ../share/filters/filters.svg.h:527 #: ../share/filters/filters.svg.h:647 ../share/filters/filters.svg.h:651 @@ -1511,266 +1435,236 @@ msgstr "0 (transparente)" #: ../src/extension/internal/filter/transparency.h:215 #: ../src/extension/internal/filter/transparency.h:288 #: ../src/extension/internal/filter/transparency.h:350 -#, fuzzy msgid "Fill and Transparency" -msgstr "0 (transparente)" +msgstr "Preenchimento e Transparência" #: ../share/filters/filters.svg.h:524 -#, fuzzy msgid "Convert to a colorizable transparent positive or negative" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Converter numa transparência colorizável positiva ou negativa" #: ../share/filters/filters.svg.h:526 -#, fuzzy msgid "Saturation Map" -msgstr "Saturação" +msgstr "Mapa de Saturação" #: ../share/filters/filters.svg.h:528 msgid "" "Creates an approximative semi-transparent and colorizable image of the " "saturation levels" msgstr "" +"Cria uma aproximação a uma imagem colorizável dos níveis de saturação semi-" +"transparente" #: ../share/filters/filters.svg.h:530 -#, fuzzy msgid "Riddled" -msgstr "Ladrilhado" +msgstr "Esburacado" #: ../share/filters/filters.svg.h:532 msgid "Riddle the surface and add bump to images" -msgstr "" +msgstr "Esburacar a superície e adicionar saliências a imagens" #: ../share/filters/filters.svg.h:534 -#, fuzzy msgid "Wrinkled Varnish" -msgstr "Imprimir usando operadores PostScript" +msgstr "Verniz Enrugado" #: ../share/filters/filters.svg.h:536 msgid "Thick glossy and translucent paint texture with high depth" -msgstr "" +msgstr "Textura de tinta translucente grossa e brilhante com alta profundidade" #: ../share/filters/filters.svg.h:538 -#, fuzzy msgid "Canvas Bumps" -msgstr "Ciano" +msgstr "Saliência da Tela" #: ../share/filters/filters.svg.h:540 msgid "Canvas texture with an HSL sensitive height map" -msgstr "" +msgstr "Textura de tela com um mapa de altura sensível a HSL" #: ../share/filters/filters.svg.h:542 -#, fuzzy msgid "Canvas Bumps Matte" -msgstr "Ciano" +msgstr "Saliência da Ãrea Mate" #: ../share/filters/filters.svg.h:544 msgid "Same as Canvas Bumps but with a diffuse light instead of a specular one" -msgstr "" +msgstr "Saliência da Ãrea Transparente" #: ../share/filters/filters.svg.h:546 -#, fuzzy msgid "Canvas Bumps Alpha" -msgstr "Ciano" +msgstr "Saliência da Tela Transparente" #: ../share/filters/filters.svg.h:548 msgid "Same as Canvas Bumps but with transparent highlights" -msgstr "" +msgstr "Igual ao Saliência da Tela mas com altas luzes transparentes" #: ../share/filters/filters.svg.h:550 -#, fuzzy msgid "Bright Metal" -msgstr "Mais claro" +msgstr "Metal Brilhante" #: ../share/filters/filters.svg.h:552 msgid "Bright metallic effect for any color" -msgstr "" +msgstr "Efeito metal brilhante para qualquer cor" #: ../share/filters/filters.svg.h:554 msgid "Deep Colors Plastic" -msgstr "" +msgstr "Plástico Cores Profundas" #: ../share/filters/filters.svg.h:556 msgid "Transparent plastic with deep colors" -msgstr "" +msgstr "Plástico Transparente com cores profundas" #: ../share/filters/filters.svg.h:558 -#, fuzzy msgid "Melted Jelly Matte" -msgstr "Canal Fosco" +msgstr "Geleita Cinzenta Derretida" #: ../share/filters/filters.svg.h:560 -#, fuzzy msgid "Matte bevel with blurred edges" -msgstr "Propriedades de Estrelas" +msgstr "Saliência cinzenta com bordas desfocadas" #: ../share/filters/filters.svg.h:562 -#, fuzzy msgid "Melted Jelly" -msgstr "Canal Fosco" +msgstr "Geleia Derretida" #: ../share/filters/filters.svg.h:564 -#, fuzzy msgid "Glossy bevel with blurred edges" -msgstr "Propriedades de Estrelas" +msgstr "Saliência brilhante com bordas desfocadas" #: ../share/filters/filters.svg.h:566 -#, fuzzy msgid "Combined Lighting" -msgstr "Combinado" +msgstr "Luz Combinada" #: ../share/filters/filters.svg.h:568 #: ../src/extension/internal/filter/bevels.h:231 msgid "Basic specular bevel to use for building textures" -msgstr "" +msgstr "Biselado especular básico para criar texturas" #: ../share/filters/filters.svg.h:570 msgid "Tinfoil" -msgstr "" +msgstr "Papel de Alumínio" #: ../share/filters/filters.svg.h:572 msgid "Metallic foil effect combining two lighting types and variable crumple" -msgstr "" +msgstr "Efeito de folha metálica combinando 2 tipos de luz e amassado variável" #: ../share/filters/filters.svg.h:574 -#, fuzzy msgid "Soft Colors" -msgstr "Soltar cor" +msgstr "Cores Suaves" #: ../share/filters/filters.svg.h:576 msgid "Adds a colorizable edges glow inside objects and pictures" msgstr "" +"Adiciona uma auréola nas bordas colorizáveis dentro de objetos e imagens" #: ../share/filters/filters.svg.h:578 -#, fuzzy msgid "Relief Print" -msgstr "Largura igual" +msgstr "Impressão em Relevo" #: ../share/filters/filters.svg.h:580 msgid "Bumps effect with a bevel, color flood and complex lighting" -msgstr "" +msgstr "Efeito saliência com um biselado, preenchido com cor e luz complexa" #: ../share/filters/filters.svg.h:582 -#, fuzzy msgid "Growing Cells" -msgstr "Desenho cancelado" +msgstr "Células em Crescimento" #: ../share/filters/filters.svg.h:584 msgid "Random rounded living cells like fill" -msgstr "" +msgstr "Preenchimento de células vivas arredondadas e aleatórias" #: ../share/filters/filters.svg.h:586 -#, fuzzy msgid "Fluorescence" -msgstr "Presença" +msgstr "Fluorescência" #: ../share/filters/filters.svg.h:588 msgid "Oversaturate colors which can be fluorescent in real world" -msgstr "" +msgstr "Saturar cores que podem ser flourescentes na vida real" #: ../share/filters/filters.svg.h:590 -#, fuzzy msgid "Pixellize" -msgstr "Pixel" +msgstr "Pixelizar" #: ../share/filters/filters.svg.h:591 -#, fuzzy msgid "Pixel tools" -msgstr "Pixels" +msgstr "Píxeis" #: ../share/filters/filters.svg.h:592 msgid "Reduce or remove antialiasing around shapes" msgstr "" +"Rasteriza a imagem, diminuindo o anti-serrilhado (antialiasing) à volta das " +"formas geométricas" #: ../share/filters/filters.svg.h:594 -#, fuzzy msgid "Basic Diffuse Bump" -msgstr "Exponente Especular" +msgstr "Saliência Difusa Básica" #: ../share/filters/filters.svg.h:596 -#, fuzzy msgid "Matte emboss effect" -msgstr "Remover efeito de caminho" +msgstr "Efeito de alto relevo mate" #: ../share/filters/filters.svg.h:598 -#, fuzzy msgid "Basic Specular Bump" -msgstr "Exponente Especular" +msgstr "Saliência Especular Básica" #: ../share/filters/filters.svg.h:600 -#, fuzzy msgid "Specular emboss effect" -msgstr "Exponente Especular" +msgstr "Efeito de alto relevo especular" #: ../share/filters/filters.svg.h:602 msgid "Basic Two Lights Bump" -msgstr "" +msgstr "Saliência Básica de 2 Luzes" #: ../share/filters/filters.svg.h:604 -#, fuzzy msgid "Two types of lighting emboss effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Dois tipos de efeito de alto relevo de luz" #: ../share/filters/filters.svg.h:606 -#, fuzzy msgid "Linen Canvas" -msgstr "Ciano" +msgstr "Tela de Linho" #: ../share/filters/filters.svg.h:608 ../share/filters/filters.svg.h:616 -#, fuzzy msgid "Painting canvas emboss effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de alto relevo de tela de pintura" #: ../share/filters/filters.svg.h:610 -#, fuzzy msgid "Plasticine" -msgstr "Colar" +msgstr "Plasticina" #: ../share/filters/filters.svg.h:612 -#, fuzzy msgid "Matte modeling paste emboss effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de alto relevo de pasta de modelar mate" #: ../share/filters/filters.svg.h:614 -#, fuzzy msgid "Rough Canvas Painting" -msgstr "Pintura a Óleo" +msgstr "Pintura a Óleo Rugosa" #: ../share/filters/filters.svg.h:618 -#, fuzzy msgid "Paper Bump" -msgstr "Bias" +msgstr "Saliência do Papel" #: ../share/filters/filters.svg.h:620 -#, fuzzy msgid "Paper like emboss effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de alto relevo similar ao papel" #: ../share/filters/filters.svg.h:622 msgid "Jelly Bump" -msgstr "" +msgstr "Sobressair Geleia" #: ../share/filters/filters.svg.h:624 -#, fuzzy msgid "Convert pictures to thick jelly" -msgstr "Converter textos em caminhos" +msgstr "Converte imagens em gelatina espessa" #: ../share/filters/filters.svg.h:626 -#, fuzzy msgid "Blend Opposites" -msgstr "_Modo misturar:" +msgstr "Misturar Opostos" #: ../share/filters/filters.svg.h:628 msgid "Blend an image with its hue opposite" -msgstr "" +msgstr "Mistura uma imagem com a sua matiz oposta" #: ../share/filters/filters.svg.h:630 -#, fuzzy msgid "Hue to White" -msgstr "Rotacionar Matiz" +msgstr "Matiz para Branco" #: ../share/filters/filters.svg.h:632 msgid "Fades hue progressively to white" -msgstr "" +msgstr "Esvanece a matiz progressivamente para o branco" #: ../share/filters/filters.svg.h:634 #: ../src/extension/internal/bitmap/swirl.cpp:37 @@ -1781,563 +1675,496 @@ msgstr "Espiral" msgid "" "Paint objects with a transparent turbulence which wraps around color edges" msgstr "" +"Pintar objetos com uma turbulência transparente que envolve as bordas " +"coloridas" #: ../share/filters/filters.svg.h:638 -#, fuzzy msgid "Pointillism" -msgstr "Pontos" +msgstr "Pontilhismo" #: ../share/filters/filters.svg.h:640 msgid "Gives a turbulent pointillist HSL sensitive transparency" -msgstr "" +msgstr "Aplica uma transparência sensível a HSL como pontilhismo turbulento" #: ../share/filters/filters.svg.h:642 msgid "Silhouette Marbled" -msgstr "" +msgstr "Silhueta Marmoreada" #: ../share/filters/filters.svg.h:644 -#, fuzzy msgid "Basic noise transparency texture" -msgstr "0 (transparente)" +msgstr "Textura transparente de ruído básico" #: ../share/filters/filters.svg.h:646 -#, fuzzy msgid "Fill Background" -msgstr "Plano de fundo:" +msgstr "Preencher do Fundo" #: ../share/filters/filters.svg.h:648 -#, fuzzy msgid "Adds a colorizable opaque background" -msgstr "Desenhar um caminho a uma grelha" +msgstr "Adiciona um fundo opaco colorível" #: ../share/filters/filters.svg.h:650 -#, fuzzy msgid "Flatten Transparency" -msgstr "0 (transparente)" +msgstr "Transparência Achatada" #: ../share/filters/filters.svg.h:652 -#, fuzzy msgid "Adds a white opaque background" -msgstr "Remover fundo" +msgstr "Adiciona um fundo opaco branco" #: ../share/filters/filters.svg.h:654 -#, fuzzy msgid "Blur Double" -msgstr "_Modo misturar:" +msgstr "Desfocagem a Dobrar" #: ../share/filters/filters.svg.h:656 msgid "" "Overlays two copies with different blur amounts and modifiable blend and " "composite" msgstr "" +"Sobrepõe 2 cópias com diferentes desfocagens com mistura e compósito " +"alteráveis" #: ../share/filters/filters.svg.h:658 -#, fuzzy msgid "Image Drawing Basic" -msgstr "Desenho" +msgstr "Desenho Básico de Imagem" #: ../share/filters/filters.svg.h:660 -#, fuzzy msgid "Enhance and redraw color edges in 1 bit black and white" -msgstr "Inverter regiões pretas e brancas para traçados simples" +msgstr "Destaca e redesenha bordas coloridas em 1 bit a preto e branco" #: ../share/filters/filters.svg.h:662 -#, fuzzy msgid "Poster Draw" -msgstr "Colar" +msgstr "Desenho de Poster" #: ../share/filters/filters.svg.h:664 -#, fuzzy msgid "Enhance and redraw edges around posterized areas" -msgstr "Inverter regiões pretas e brancas para traçados simples" +msgstr "Destaca e redesenha bordas à volta de áreas posterizadas" #: ../share/filters/filters.svg.h:666 -#, fuzzy msgid "Cross Noise Poster" -msgstr "Ruído de Poisson" +msgstr "Poster de Ruído Cruzado" #: ../share/filters/filters.svg.h:668 msgid "Overlay with a small scale screen like noise" -msgstr "" +msgstr "Sobrecamada com um ecrã em pequena escala como ruído" #: ../share/filters/filters.svg.h:670 -#, fuzzy msgid "Cross Noise Poster B" -msgstr "Ruído de Poisson" +msgstr "Poster de Ruído Cruzado B" #: ../share/filters/filters.svg.h:672 msgid "Adds a small scale screen like noise locally" -msgstr "" +msgstr "Adiciona localmente uma sobrecamada com um ecrã pequeno como ruído" #: ../share/filters/filters.svg.h:674 -#, fuzzy msgid "Poster Color Fun" -msgstr "Colar cor" +msgstr "Poster a Cores Engraçado" #: ../share/filters/filters.svg.h:678 -#, fuzzy msgid "Poster Rough" -msgstr "Colar" +msgstr "Poster Rugoso" #: ../share/filters/filters.svg.h:680 msgid "Adds roughness to one of the two channels of the Poster paint filter" -msgstr "" +msgstr "Adiciona rugosidades a 1 ou 2 dos canais do filtro de pintura Poster" #: ../share/filters/filters.svg.h:682 msgid "Alpha Monochrome Cracked" -msgstr "" +msgstr "Transparência Monocromática Rachada" #: ../share/filters/filters.svg.h:684 ../share/filters/filters.svg.h:688 #: ../share/filters/filters.svg.h:692 ../share/filters/filters.svg.h:704 #: ../share/filters/filters.svg.h:708 ../share/filters/filters.svg.h:712 msgid "Basic noise fill texture; adjust color in Flood" -msgstr "" +msgstr "Textura do preenchimento de ruído básica; ajustar cor em Inudar" #: ../share/filters/filters.svg.h:686 -#, fuzzy msgid "Alpha Turbulent" -msgstr "Alfa (transparência)" +msgstr "Transparência Turbulenta" #: ../share/filters/filters.svg.h:690 -#, fuzzy msgid "Colorize Turbulent" -msgstr "Colorizar" +msgstr "Colorizar Turbulento" #: ../share/filters/filters.svg.h:694 -#, fuzzy msgid "Cross Noise B" -msgstr "Ruído de Poisson" +msgstr "Ruído Cruzado B" #: ../share/filters/filters.svg.h:696 msgid "Adds a small scale crossy graininess" -msgstr "" +msgstr "Adiciona um pequeno granulado cruzado" #: ../share/filters/filters.svg.h:698 -#, fuzzy msgid "Cross Noise" -msgstr "Ruído de Poisson" +msgstr "Ruído Cruzado" #: ../share/filters/filters.svg.h:700 msgid "Adds a small scale screen like graininess" -msgstr "" +msgstr "Adiciona uma tela pequena tipo granulado" #: ../share/filters/filters.svg.h:702 -#, fuzzy msgid "Duotone Turbulent" -msgstr "Turbulência" +msgstr "Turbulência em 2 Tons" #: ../share/filters/filters.svg.h:706 -#, fuzzy msgid "Light Eraser Cracked" -msgstr "Brilho" +msgstr "Apagador de Luz Rachado" #: ../share/filters/filters.svg.h:710 -#, fuzzy msgid "Poster Turbulent" -msgstr "Turbulência" +msgstr "Poster Turbulento" #: ../share/filters/filters.svg.h:714 -#, fuzzy msgid "Tartan Smart" -msgstr "Alvo" +msgstr "Tartã Esperto" #: ../share/filters/filters.svg.h:716 msgid "Highly configurable checkered tartan pattern" -msgstr "" +msgstr "Padrão de tartã quadriculado altamente configurável" #: ../share/filters/filters.svg.h:718 -#, fuzzy msgid "Light Contour" -msgstr "Fonte de Luz:" +msgstr "Contorno de Luz" #: ../share/filters/filters.svg.h:720 msgid "Uses vertical specular light to draw lines" -msgstr "" +msgstr "Usa luz especular vertical para desenhar linhas" #: ../share/filters/filters.svg.h:722 -#, fuzzy msgid "Liquid" -msgstr "desenho%s" +msgstr "Líquido" #: ../share/filters/filters.svg.h:724 -#, fuzzy msgid "Colorizable filling with liquid transparency" -msgstr "0 (transparente)" +msgstr "Preenchimento colorível com transparência líquida" #: ../share/filters/filters.svg.h:726 -#, fuzzy msgid "Aluminium" -msgstr "Tamanho mínimo" +msgstr "Alumínio" #: ../share/filters/filters.svg.h:728 msgid "Aluminium effect with sharp brushed reflections" -msgstr "" +msgstr "Efeito de alumínio com reflexões nítidas escovadas" #: ../share/filters/filters.svg.h:730 -#, fuzzy msgid "Comics" -msgstr "Combinar" +msgstr "Banda Desenhada" #: ../share/filters/filters.svg.h:732 -#, fuzzy msgid "Comics cartoon drawing effect" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Efeito de desenho de banda desenhada" #: ../share/filters/filters.svg.h:734 -#, fuzzy msgid "Comics Draft" -msgstr "Combinar" +msgstr "Esboço de Banda Desenhada" #: ../share/filters/filters.svg.h:736 ../share/filters/filters.svg.h:768 msgid "Draft painted cartoon shading with a glassy look" -msgstr "" +msgstr "Esboço de banda desenhada com aspeto vítreo" #: ../share/filters/filters.svg.h:738 -#, fuzzy msgid "Comics Fading" -msgstr "Combinar" +msgstr "Banda Desenhada a Desvanecer" #: ../share/filters/filters.svg.h:740 msgid "Cartoon paint style with some fading at the edges" -msgstr "" +msgstr "Desenho de banda desenhada a desvanecer nas bordas" #: ../share/filters/filters.svg.h:742 -#, fuzzy msgid "Brushed Metal" -msgstr "Meta-ficheiro otimizad" +msgstr "Metal Escovado" #: ../share/filters/filters.svg.h:744 -#, fuzzy msgid "Satiny metal surface effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de superfície metálica satinada" #: ../share/filters/filters.svg.h:746 -#, fuzzy msgid "Opaline" -msgstr "_Contorno" +msgstr "Opalino" #: ../share/filters/filters.svg.h:748 msgid "Contouring version of smooth shader" -msgstr "" +msgstr "Versão de contorno de sombreador suave" #: ../share/filters/filters.svg.h:750 -#, fuzzy msgid "Chrome" -msgstr "Combinar" +msgstr "Cromado" #: ../share/filters/filters.svg.h:752 -#, fuzzy msgid "Bright chrome effect" -msgstr "Mais claro" +msgstr "Efeito cromado brilhante" #: ../share/filters/filters.svg.h:754 -#, fuzzy msgid "Deep Chrome" -msgstr "Combinar" +msgstr "Cromado Profundo" #: ../share/filters/filters.svg.h:756 -#, fuzzy msgid "Dark chrome effect" -msgstr "Efeito actual" +msgstr "Efeito cromado escuro" #: ../share/filters/filters.svg.h:758 -#, fuzzy msgid "Emboss Shader" -msgstr "Sem efeito" +msgstr "Sombreado de Alto Relevo" #: ../share/filters/filters.svg.h:760 -#, fuzzy msgid "Combination of satiny and emboss effect" -msgstr "Remover efeito de caminho" +msgstr "Combinação de efeito alto relevo e sem defeitos" #: ../share/filters/filters.svg.h:762 -#, fuzzy msgid "Sharp Metal" -msgstr "Afiar" +msgstr "Metal Nítido" #: ../share/filters/filters.svg.h:764 -#, fuzzy msgid "Chrome effect with darkened edges" -msgstr "Propriedades de Estrelas" +msgstr "Efeito cromado com margens escurecidas" # Enevoar, desfocar ou borrar? -- krishna #: ../share/filters/filters.svg.h:766 -#, fuzzy msgid "Brush Draw" -msgstr "Desfocar" +msgstr "Desenho a Pincel" #: ../share/filters/filters.svg.h:770 -#, fuzzy msgid "Chrome Emboss" -msgstr "Embutir" +msgstr "Alto Relevo Cromado" #: ../share/filters/filters.svg.h:772 -#, fuzzy msgid "Embossed chrome effect" -msgstr "Remover efeito de caminho" +msgstr "Efeito de cromado em alto relevo" #: ../share/filters/filters.svg.h:774 -#, fuzzy msgid "Contour Emboss" -msgstr "Cores" +msgstr "Alto Relevo de Contorno" #: ../share/filters/filters.svg.h:776 -#, fuzzy msgid "Satiny and embossed contour effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de alto relevo e sem defeito no contorno" #: ../share/filters/filters.svg.h:778 -#, fuzzy msgid "Sharp Deco" -msgstr "Afiar" +msgstr "Nitidez Deco" #: ../share/filters/filters.svg.h:780 -#, fuzzy msgid "Unrealistic reflections with sharp edges" -msgstr "Propriedades de Estrelas" +msgstr "Reflexões não realísticas com bordas nítidas" #: ../share/filters/filters.svg.h:782 -#, fuzzy msgid "Deep Metal" -msgstr "Meta-ficheiro otimizad" +msgstr "Metal Profundo" #: ../share/filters/filters.svg.h:784 msgid "Deep and dark metal shading" -msgstr "" +msgstr "Sembreado de metal profundo" #: ../share/filters/filters.svg.h:786 -#, fuzzy msgid "Aluminium Emboss" -msgstr "Tamanho mínimo" +msgstr "Alto Relevo de Alumínio" #: ../share/filters/filters.svg.h:788 msgid "Satiny aluminium effect with embossing" -msgstr "" +msgstr "Efeito de alto relevo e sem defeito de alumínio" #: ../share/filters/filters.svg.h:790 -#, fuzzy msgid "Refractive Glass" -msgstr "Mudança rela_tiva" +msgstr "Vidro Refratário" #: ../share/filters/filters.svg.h:792 msgid "Double reflection through glass with some refraction" -msgstr "" +msgstr "Reflexo duplo através de vidro com alguma refraxão" #: ../share/filters/filters.svg.h:794 -#, fuzzy msgid "Frosted Glass" -msgstr "Fechar intervalos" +msgstr "Vidro Fosco" #: ../share/filters/filters.svg.h:796 -#, fuzzy msgid "Satiny glass effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de vidro satinado" #: ../share/filters/filters.svg.h:798 -#, fuzzy msgid "Bump Engraving" -msgstr "Desenho" +msgstr "Gravura em Alto Relevo" #: ../share/filters/filters.svg.h:800 -#, fuzzy msgid "Carving emboss effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de gravura a preto e branco com alto relevo" #: ../share/filters/filters.svg.h:802 msgid "Chromolitho Alternate" -msgstr "" +msgstr "Cromolito Alternativo" #: ../share/filters/filters.svg.h:804 -#, fuzzy msgid "Old chromolithographic effect" -msgstr "Criar e aplicar efeito de caminho" +msgstr "Efeito cromolitográfico antigo" #: ../share/filters/filters.svg.h:806 -#, fuzzy msgid "Convoluted Bump" -msgstr "Convolver" +msgstr "Alto Relevo Enrolado" #: ../share/filters/filters.svg.h:808 -#, fuzzy msgid "Convoluted emboss effect" -msgstr "Remover efeito de caminho" +msgstr "Efeito de alto relevo enrolado" #: ../share/filters/filters.svg.h:810 -#, fuzzy msgid "Emergence" -msgstr "Divergência" +msgstr "Surgir" #: ../share/filters/filters.svg.h:812 msgid "Cut out, add inner shadow and colorize some parts of an image" -msgstr "" +msgstr "Recortar, adicionar sombra dentro e colorizar algumas partes da imagem" #: ../share/filters/filters.svg.h:814 msgid "Litho" -msgstr "" +msgstr "Litografia" #: ../share/filters/filters.svg.h:816 -#, fuzzy msgid "Create a two colors lithographic effect" -msgstr "Criar e aplicar efeito de caminho" +msgstr "Cria um efeito litógráfico de 2 cores" #: ../share/filters/filters.svg.h:818 -#, fuzzy msgid "Paint Channels" -msgstr "Canal Ciano" +msgstr "Pintar canais" #: ../share/filters/filters.svg.h:820 msgid "Colorize separately the three color channels" -msgstr "" +msgstr "Colorir separadamente os 3 canais de cor" #: ../share/filters/filters.svg.h:822 -#, fuzzy msgid "Posterized Light Eraser" -msgstr "Brilho" +msgstr "Apagador de Luz Posterizado" #: ../share/filters/filters.svg.h:824 msgid "Create a semi transparent posterized image" -msgstr "" +msgstr "Cria uma imagem posterizada semi-transparente" #: ../share/filters/filters.svg.h:826 -#, fuzzy msgid "Trichrome" -msgstr "Combinar" +msgstr "Tricromia (3 cores)" #: ../share/filters/filters.svg.h:828 msgid "Like Duochrome but with three colors" -msgstr "" +msgstr "Como a Dicromia (2 cores) mas com 3 cores" #: ../share/filters/filters.svg.h:830 msgid "Simulate CMY" -msgstr "" +msgstr "Simular CMY" #: ../share/filters/filters.svg.h:832 msgid "Render Cyan, Magenta and Yellow channels with a colorizable background" -msgstr "" +msgstr "Renderiza os canais Ciano, Magenta e Amarelo com um fundo colorizável" #: ../share/filters/filters.svg.h:834 -#, fuzzy msgid "Contouring table" -msgstr "Único" +msgstr "Multiplicar Contornos" #: ../share/filters/filters.svg.h:836 -#, fuzzy msgid "Blurred multiple contours for objects" -msgstr "Encaixar nós e guias aos nós dos objectos" +msgstr "Contornos múltiplos desfocados nos objetos" #: ../share/filters/filters.svg.h:838 -#, fuzzy msgid "Posterized Blur" -msgstr "Brilho" +msgstr "Desfocado Posterizado" #: ../share/filters/filters.svg.h:840 msgid "Converts blurred contour to posterized steps" -msgstr "" +msgstr "Converte contornos desfocados em passos posterizados" #: ../share/filters/filters.svg.h:842 -#, fuzzy msgid "Contouring discrete" -msgstr "Continuando o caminho seleccionado" +msgstr "Contorno discreto" #: ../share/filters/filters.svg.h:844 -#, fuzzy msgid "Sharp multiple contour for objects" -msgstr "Encaixar nós e guias aos nós dos objectos" +msgstr "Aumentar nitidez em vários contornos para os objetos" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:2 -#, fuzzy msgctxt "Palette" msgid "Black" msgstr "Preto" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:3 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "90% Gray" -msgstr "Tons de cinza" +msgstr "90% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:4 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "80% Gray" -msgstr "Tons de cinza" +msgstr "80% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:5 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "70% Gray" -msgstr "Tons de cinza" +msgstr "70% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:6 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "60% Gray" -msgstr "Tons de cinza" +msgstr "60% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:7 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "50% Gray" -msgstr "Tons de cinza" +msgstr "50% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:8 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "40% Gray" -msgstr "Tons de cinza" +msgstr "40% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:9 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "30% Gray" -msgstr "Tons de cinza" +msgstr "30% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:10 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "20% Gray" -msgstr "Tons de cinza" +msgstr "20% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:11 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "10% Gray" -msgstr "Tons de cinza" +msgstr "10% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:12 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "7.5% Gray" -msgstr "Tons de cinza" +msgstr "7.5% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:13 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "5% Gray" -msgstr "Tons de cinza" +msgstr "5% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:14 -#, fuzzy, no-c-format +#, no-c-format msgctxt "Palette" msgid "2.5% Gray" -msgstr "Tons de cinza" +msgstr "2.5% Cinza" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:15 -#, fuzzy msgctxt "Palette" msgid "White" msgstr "Branco" @@ -2346,1277 +2173,1251 @@ msgstr "Branco" #: ../share/palettes/palettes.h:16 msgctxt "Palette" msgid "Maroon (#800000)" -msgstr "" +msgstr "Bordô (#800000)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:17 msgctxt "Palette" msgid "Red (#FF0000)" -msgstr "" +msgstr "Vermelho (#FF0000)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:18 msgctxt "Palette" msgid "Olive (#808000)" -msgstr "" +msgstr "Azeitona (#808000)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:19 msgctxt "Palette" msgid "Yellow (#FFFF00)" -msgstr "" +msgstr "Amarelo (#FFFF00)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:20 msgctxt "Palette" msgid "Green (#008000)" -msgstr "" +msgstr "Verde (#008000)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:21 msgctxt "Palette" msgid "Lime (#00FF00)" -msgstr "" +msgstr "Lima (#00FF00)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:22 msgctxt "Palette" msgid "Teal (#008080)" -msgstr "" +msgstr "Verde-azulado (#008080)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:23 msgctxt "Palette" msgid "Aqua (#00FFFF)" -msgstr "" +msgstr "Ãgua (#00FFFF)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:24 msgctxt "Palette" msgid "Navy (#000080)" -msgstr "" +msgstr "Azul-marinho (#000080)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:25 msgctxt "Palette" msgid "Blue (#0000FF)" -msgstr "" +msgstr "Azul (#0000FF)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:26 msgctxt "Palette" msgid "Purple (#800080)" -msgstr "" +msgstr "Púrpura (#800080)" #. Palette: ./inkscape.gpl #: ../share/palettes/palettes.h:27 msgctxt "Palette" msgid "Fuchsia (#FF00FF)" -msgstr "" +msgstr "Rosa vívido (#FF00FF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:28 msgctxt "Palette" msgid "black (#000000)" -msgstr "" +msgstr "preto (#000000)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:29 msgctxt "Palette" msgid "dimgray (#696969)" -msgstr "" +msgstr "cinza-escuro (#696969)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:30 msgctxt "Palette" msgid "gray (#808080)" -msgstr "" +msgstr "cinzento (#808080)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:31 msgctxt "Palette" msgid "darkgray (#A9A9A9)" -msgstr "" +msgstr "cinza-escuro (#A9A9A9)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:32 msgctxt "Palette" msgid "silver (#C0C0C0)" -msgstr "" +msgstr "prateado (#C0C0C0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:33 msgctxt "Palette" msgid "lightgray (#D3D3D3)" -msgstr "" +msgstr "cinza-claro (#D3D3D3)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:34 msgctxt "Palette" msgid "gainsboro (#DCDCDC)" -msgstr "" +msgstr "cinza-claro-azulado (#DCDCDC)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:35 msgctxt "Palette" msgid "whitesmoke (#F5F5F5)" -msgstr "" +msgstr "branco-fumo (#F5F5F5)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:36 msgctxt "Palette" msgid "white (#FFFFFF)" -msgstr "" +msgstr "branco (#FFFFFF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:37 msgctxt "Palette" msgid "rosybrown (#BC8F8F)" -msgstr "" +msgstr "castanho-rosado (#BC8F8F)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:38 msgctxt "Palette" msgid "indianred (#CD5C5C)" -msgstr "" +msgstr "vermelho-indiano (#CD5C5C)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:39 msgctxt "Palette" msgid "brown (#A52A2A)" -msgstr "" +msgstr "castanho (#A52A2A)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:40 msgctxt "Palette" msgid "firebrick (#B22222)" -msgstr "" +msgstr "cor-de-tijolo (#B22222)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:41 msgctxt "Palette" msgid "lightcoral (#F08080)" -msgstr "" +msgstr "coral-claro (#F08080)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:42 msgctxt "Palette" msgid "maroon (#800000)" -msgstr "" +msgstr "bordô (#800000)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:43 msgctxt "Palette" msgid "darkred (#8B0000)" -msgstr "" +msgstr "vermelho-escuro (#8B0000)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:44 msgctxt "Palette" msgid "red (#FF0000)" -msgstr "" +msgstr "vermelho (#FF0000)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:45 msgctxt "Palette" msgid "snow (#FFFAFA)" -msgstr "" +msgstr "neve (#FFFAFA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:46 msgctxt "Palette" msgid "mistyrose (#FFE4E1)" -msgstr "" +msgstr "rosa-místico (#FFE4E1)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:47 msgctxt "Palette" msgid "salmon (#FA8072)" -msgstr "" +msgstr "salmão (#FA8072)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:48 msgctxt "Palette" msgid "tomato (#FF6347)" -msgstr "" +msgstr "tomate (#FF6347)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:49 msgctxt "Palette" msgid "darksalmon (#E9967A)" -msgstr "" +msgstr "salmão-escuro (#E9967A)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:50 msgctxt "Palette" msgid "coral (#FF7F50)" -msgstr "" +msgstr "coral (#FF7F50)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:51 msgctxt "Palette" msgid "orangered (#FF4500)" -msgstr "" +msgstr "laranja-vermelho (#FF4500)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:52 msgctxt "Palette" msgid "lightsalmon (#FFA07A)" -msgstr "" +msgstr "salmão-claro (#FFA07A)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:53 msgctxt "Palette" msgid "sienna (#A0522D)" -msgstr "" +msgstr "sienna (#A0522D)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:54 msgctxt "Palette" msgid "seashell (#FFF5EE)" -msgstr "" +msgstr "concha-do-mar (#FFF5EE)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:55 msgctxt "Palette" msgid "chocolate (#D2691E)" -msgstr "" +msgstr "chocolate (#D2691E)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:56 msgctxt "Palette" msgid "saddlebrown (#8B4513)" -msgstr "" +msgstr "castanho-sela (#8B4513)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:57 msgctxt "Palette" msgid "sandybrown (#F4A460)" -msgstr "" +msgstr "castanho-areia (#F4A460)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:58 msgctxt "Palette" msgid "peachpuff (#FFDAB9)" -msgstr "" +msgstr "pêssego-rosa (#FFDAB9)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:59 msgctxt "Palette" msgid "peru (#CD853F)" -msgstr "" +msgstr "perú (#CD853F)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:60 msgctxt "Palette" msgid "linen (#FAF0E6)" -msgstr "" +msgstr "linho (#FAF0E6)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:61 msgctxt "Palette" msgid "bisque (#FFE4C4)" -msgstr "" +msgstr "rosa-bisque (#FFE4C4)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:62 msgctxt "Palette" msgid "darkorange (#FF8C00)" -msgstr "" +msgstr "laranja-escuro (#FF8C00)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:63 msgctxt "Palette" msgid "burlywood (#DEB887)" -msgstr "" +msgstr "castanho-areia (#DEB887)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:64 msgctxt "Palette" msgid "tan (#D2B48C)" -msgstr "" +msgstr "pardo (#D2B48C)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:65 msgctxt "Palette" msgid "antiquewhite (#FAEBD7)" -msgstr "" +msgstr "branco-envelhecido (#FAEBD7)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:66 msgctxt "Palette" msgid "navajowhite (#FFDEAD)" -msgstr "" +msgstr "branco-navajo (#FFDEAD)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:67 msgctxt "Palette" msgid "blanchedalmond (#FFEBCD)" -msgstr "" +msgstr "amêndoa-branqueada (#FFEBCD)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:68 msgctxt "Palette" msgid "papayawhip (#FFEFD5)" -msgstr "" +msgstr "papaia-batida (#FFEFD5)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:69 msgctxt "Palette" msgid "moccasin (#FFE4B5)" -msgstr "" +msgstr "mocassim (#FFE4B5)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:70 msgctxt "Palette" msgid "orange (#FFA500)" -msgstr "" +msgstr "laranja (#FFA500)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:71 msgctxt "Palette" msgid "wheat (#F5DEB3)" -msgstr "" +msgstr "trigo (#F5DEB3)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:72 msgctxt "Palette" msgid "oldlace (#FDF5E6)" -msgstr "" +msgstr "atacador-antigo (#FDF5E6)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:73 msgctxt "Palette" msgid "floralwhite (#FFFAF0)" -msgstr "" +msgstr "branco-floral (#FFFAF0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:74 msgctxt "Palette" msgid "darkgoldenrod (#B8860B)" -msgstr "" +msgstr "solidago-escuro (#B8860B)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:75 msgctxt "Palette" msgid "goldenrod (#DAA520)" -msgstr "" +msgstr "solidago (#DAA520)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:76 msgctxt "Palette" msgid "cornsilk (#FFF8DC)" -msgstr "" +msgstr "folha-de-milho-seca (#FFF8DC)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:77 msgctxt "Palette" msgid "gold (#FFD700)" -msgstr "" +msgstr "ouro (#FFD700)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:78 msgctxt "Palette" msgid "khaki (#F0E68C)" -msgstr "" +msgstr "caqui (#F0E68C)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:79 msgctxt "Palette" msgid "lemonchiffon (#FFFACD)" -msgstr "" +msgstr "bolo-limão (#FFFACD)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:80 msgctxt "Palette" msgid "palegoldenrod (#EEE8AA)" -msgstr "" +msgstr "ouro-pálido (#EEE8AA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:81 msgctxt "Palette" msgid "darkkhaki (#BDB76B)" -msgstr "" +msgstr "caqui-escuro (#BDB76B)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:82 msgctxt "Palette" msgid "beige (#F5F5DC)" -msgstr "" +msgstr "bege (#F5F5DC)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:83 msgctxt "Palette" msgid "lightgoldenrodyellow (#FAFAD2)" -msgstr "" +msgstr "ouro-pálido-claro (#FAFAD2)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:84 msgctxt "Palette" msgid "olive (#808000)" -msgstr "" +msgstr "oliva (#808000)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:85 msgctxt "Palette" msgid "yellow (#FFFF00)" -msgstr "" +msgstr "amarelo (#FFFF00)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:86 msgctxt "Palette" msgid "lightyellow (#FFFFE0)" -msgstr "" +msgstr "amarelo-claro (#FFFFE0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:87 msgctxt "Palette" msgid "ivory (#FFFFF0)" -msgstr "" +msgstr "marfim (#FFFFF0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:88 msgctxt "Palette" msgid "olivedrab (#6B8E23)" -msgstr "" +msgstr "verde-oliva (#6B8E23)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:89 msgctxt "Palette" msgid "yellowgreen (#9ACD32)" -msgstr "" +msgstr "amarelo-verde (#9ACD32)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:90 msgctxt "Palette" msgid "darkolivegreen (#556B2F)" -msgstr "" +msgstr "verde-azeitona-escuro" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:91 msgctxt "Palette" msgid "greenyellow (#ADFF2F)" -msgstr "" +msgstr "verde-amarelo (#ADFF2F)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:92 msgctxt "Palette" msgid "chartreuse (#7FFF00)" -msgstr "" +msgstr "verde-limão (#7FFF00)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:93 msgctxt "Palette" msgid "lawngreen (#7CFC00)" -msgstr "" +msgstr "verde-erva (#7CFC00)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:94 msgctxt "Palette" msgid "darkseagreen (#8FBC8F)" -msgstr "" +msgstr "verde-mar-escuro (#8FBC8F)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:95 msgctxt "Palette" msgid "forestgreen (#228B22)" -msgstr "" +msgstr "verde-floresta (#228B22)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:96 msgctxt "Palette" msgid "limegreen (#32CD32)" -msgstr "" +msgstr "verde-lima (#32CD32)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:97 msgctxt "Palette" msgid "lightgreen (#90EE90)" -msgstr "" +msgstr "verde-claro (#90EE90)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:98 msgctxt "Palette" msgid "palegreen (#98FB98)" -msgstr "" +msgstr "verde-pálido (#98FB98)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:99 msgctxt "Palette" msgid "darkgreen (#006400)" -msgstr "" +msgstr "verde-escuro (#006400)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:100 msgctxt "Palette" msgid "green (#008000)" -msgstr "" +msgstr "verde (#008000)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:101 msgctxt "Palette" msgid "lime (#00FF00)" -msgstr "" +msgstr "lima (#00FF00)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:102 msgctxt "Palette" msgid "honeydew (#F0FFF0)" -msgstr "" +msgstr "verde-melão (#F0FFF0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:103 msgctxt "Palette" msgid "seagreen (#2E8B57)" -msgstr "" +msgstr "verde-mar (#2E8B57)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:104 msgctxt "Palette" msgid "mediumseagreen (#3CB371)" -msgstr "" +msgstr "verde-mar-médio (#3CB371)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:105 msgctxt "Palette" msgid "springgreen (#00FF7F)" -msgstr "" +msgstr "verde-primavera (#00FF7F)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:106 msgctxt "Palette" msgid "mintcream (#F5FFFA)" -msgstr "" +msgstr "creme-menta (#F5FFFA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:107 msgctxt "Palette" msgid "mediumspringgreen (#00FA9A)" -msgstr "" +msgstr "verde-primavera-médio (#00FA9A)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:108 msgctxt "Palette" msgid "mediumaquamarine (#66CDAA)" -msgstr "" +msgstr "azul-marinho-médio (#66CDAA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:109 msgctxt "Palette" msgid "aquamarine (#7FFFD4)" -msgstr "" +msgstr "azul-marinho (#7FFFD4)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:110 msgctxt "Palette" msgid "turquoise (#40E0D0)" -msgstr "" +msgstr "turquesa (#40E0D0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:111 msgctxt "Palette" msgid "lightseagreen (#20B2AA)" -msgstr "" +msgstr "verde-mar-claro (#20B2AA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:112 msgctxt "Palette" msgid "mediumturquoise (#48D1CC)" -msgstr "" +msgstr "turquesa-médio (#48D1CC)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:113 msgctxt "Palette" msgid "darkslategray (#2F4F4F)" -msgstr "" +msgstr "ardósia-cinza-escuro" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:114 msgctxt "Palette" msgid "paleturquoise (#AFEEEE)" -msgstr "" +msgstr "turquesa-pálido (#AFEEEE)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:115 msgctxt "Palette" msgid "teal (#008080)" -msgstr "" +msgstr "verde-azulado (#008080)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:116 msgctxt "Palette" msgid "darkcyan (#008B8B)" -msgstr "" +msgstr "ciano-escuro (#008B8B)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:117 msgctxt "Palette" msgid "cyan (#00FFFF)" -msgstr "" +msgstr "ciano (#00FFFF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:118 msgctxt "Palette" msgid "lightcyan (#E0FFFF)" -msgstr "" +msgstr "ciano-claro (#E0FFFF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:119 msgctxt "Palette" msgid "azure (#F0FFFF)" -msgstr "" +msgstr "azul-ciano-céu (#F0FFFF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:120 msgctxt "Palette" msgid "darkturquoise (#00CED1)" -msgstr "" +msgstr "turquesa-escuro (#00CED1)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:121 msgctxt "Palette" msgid "cadetblue (#5F9EA0)" -msgstr "" +msgstr "azul-cadete (#5F9EA0)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:122 msgctxt "Palette" msgid "powderblue (#B0E0E6)" -msgstr "" +msgstr "azul-pó (#B0E0E6)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:123 msgctxt "Palette" msgid "lightblue (#ADD8E6)" -msgstr "" +msgstr "azul-claro (#ADD8E6)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:124 msgctxt "Palette" msgid "deepskyblue (#00BFFF)" -msgstr "" +msgstr "azul-céu-escuro (#00BFFF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:125 msgctxt "Palette" msgid "skyblue (#87CEEB)" -msgstr "" +msgstr "azul-céu (#87CEEB)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:126 msgctxt "Palette" msgid "lightskyblue (#87CEFA)" -msgstr "" +msgstr "azul-céu-claro (#87CEFA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:127 msgctxt "Palette" msgid "steelblue (#4682B4)" -msgstr "" +msgstr "azul-aço (#4682B4)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:128 msgctxt "Palette" msgid "aliceblue (#F0F8FF)" -msgstr "" +msgstr "azul-alice (#F0F8FF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:129 msgctxt "Palette" msgid "dodgerblue (#1E90FF)" -msgstr "" +msgstr "azul-dodger (#1E90FF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:130 msgctxt "Palette" msgid "slategray (#708090)" -msgstr "" +msgstr "cinza-ardósia (#708090)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:131 msgctxt "Palette" msgid "lightslategray (#778899)" -msgstr "" +msgstr "cinza-ardósia-claro (#778899)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:132 msgctxt "Palette" msgid "lightsteelblue (#B0C4DE)" -msgstr "" +msgstr "azul-aço-claro (#B0C4DE)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:133 msgctxt "Palette" msgid "cornflowerblue (#6495ED)" -msgstr "" +msgstr "azul-centáurea (#6495ED)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:134 msgctxt "Palette" msgid "royalblue (#4169E1)" -msgstr "" +msgstr "azul-real (#4169E1)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:135 msgctxt "Palette" msgid "midnightblue (#191970)" -msgstr "" +msgstr "azul-meia-noite (#191970)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:136 msgctxt "Palette" msgid "lavender (#E6E6FA)" -msgstr "" +msgstr "lavanda (#E6E6FA)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:137 msgctxt "Palette" msgid "navy (#000080)" -msgstr "" +msgstr "azul-marinho (#000080)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:138 msgctxt "Palette" msgid "darkblue (#00008B)" -msgstr "" +msgstr "azul-escuro (#00008B)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:139 msgctxt "Palette" msgid "mediumblue (#0000CD)" -msgstr "" +msgstr "azul-médio (#0000CD)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:140 msgctxt "Palette" msgid "blue (#0000FF)" -msgstr "" +msgstr "azul (#0000FF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:141 msgctxt "Palette" msgid "ghostwhite (#F8F8FF)" -msgstr "" +msgstr "branco-fantasma (#F8F8FF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:142 msgctxt "Palette" msgid "slateblue (#6A5ACD)" -msgstr "" +msgstr "azul-ardósia (#6A5ACD)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:143 msgctxt "Palette" msgid "darkslateblue (#483D8B)" -msgstr "" +msgstr "azul-ardósia-escuro (#483D8B)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:144 msgctxt "Palette" msgid "mediumslateblue (#7B68EE)" -msgstr "" +msgstr "azul-ardósia-médio (#7B68EE)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:145 msgctxt "Palette" msgid "mediumpurple (#9370DB)" -msgstr "" +msgstr "púrpura-médio (#9370DB)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:146 msgctxt "Palette" msgid "blueviolet (#8A2BE2)" -msgstr "" +msgstr "violeta-azul (#8A2BE2)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:147 msgctxt "Palette" msgid "indigo (#4B0082)" -msgstr "" +msgstr "indigo (#4B0082)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:148 msgctxt "Palette" msgid "darkorchid (#9932CC)" -msgstr "" +msgstr "orquídea-escuro (#9932CC)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:149 msgctxt "Palette" msgid "darkviolet (#9400D3)" -msgstr "" +msgstr "violeta-escuro (#9400D3)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:150 msgctxt "Palette" msgid "mediumorchid (#BA55D3)" -msgstr "" +msgstr "orquídea-médio (#BA55D3)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:151 msgctxt "Palette" msgid "thistle (#D8BFD8)" -msgstr "" +msgstr "cardo (#D8BFD8)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:152 msgctxt "Palette" msgid "plum (#DDA0DD)" -msgstr "" +msgstr "ameixa (#DDA0DD)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:153 msgctxt "Palette" msgid "violet (#EE82EE)" -msgstr "" +msgstr "violeta (#EE82EE)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:154 msgctxt "Palette" msgid "purple (#800080)" -msgstr "" +msgstr "púrpura (#800080)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:155 msgctxt "Palette" msgid "darkmagenta (#8B008B)" -msgstr "" +msgstr "magenta-escuro (#8B008B)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:156 msgctxt "Palette" msgid "magenta (#FF00FF)" -msgstr "" +msgstr "magenta (#FF00FF)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:157 msgctxt "Palette" msgid "orchid (#DA70D6)" -msgstr "" +msgstr "orquídea (#DA70D6)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:158 msgctxt "Palette" msgid "mediumvioletred (#C71585)" -msgstr "" +msgstr "vermelho-violeta-médio (#C71585)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:159 msgctxt "Palette" msgid "deeppink (#FF1493)" -msgstr "" +msgstr "rosa-escuro (#FF1493)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:160 msgctxt "Palette" msgid "hotpink (#FF69B4)" -msgstr "" +msgstr "rosa-choque (#FF69B4)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:161 msgctxt "Palette" msgid "lavenderblush (#FFF0F5)" -msgstr "" +msgstr "lavanda-corado (#FFF0F5)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:162 msgctxt "Palette" msgid "palevioletred (#DB7093)" -msgstr "" +msgstr "vermelho-violeta-pálido (#DB7093)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:163 msgctxt "Palette" msgid "crimson (#DC143C)" -msgstr "" +msgstr "carmesim (#DC143C)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:164 msgctxt "Palette" msgid "pink (#FFC0CB)" -msgstr "" +msgstr "rosa (#FFC0CB)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:165 msgctxt "Palette" msgid "lightpink (#FFB6C1)" -msgstr "" +msgstr "rosa-claro (#FFB6C1)" #. Palette: ./svg.gpl #: ../share/palettes/palettes.h:166 msgctxt "Palette" msgid "rebeccapurple (#663399)" -msgstr "" +msgstr "púrpura-rebbeca (#663399)" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:167 -#, fuzzy msgctxt "Palette" msgid "Butter 1" -msgstr "Sem ponta" +msgstr "Manteiga 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:168 -#, fuzzy msgctxt "Palette" msgid "Butter 2" -msgstr "Sem ponta" +msgstr "Manteiga 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:169 -#, fuzzy msgctxt "Palette" msgid "Butter 3" -msgstr "Sem ponta" +msgstr "Manteiga 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:170 msgctxt "Palette" msgid "Chameleon 1" -msgstr "" +msgstr "Camaleão 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:171 msgctxt "Palette" msgid "Chameleon 2" -msgstr "" +msgstr "Camaleão 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:172 msgctxt "Palette" msgid "Chameleon 3" -msgstr "" +msgstr "Camaleão 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:173 -#, fuzzy msgctxt "Palette" msgid "Orange 1" -msgstr "Ângulo" +msgstr "Laranja 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:174 -#, fuzzy msgctxt "Palette" msgid "Orange 2" -msgstr "Ângulo" +msgstr "Laranja 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:175 -#, fuzzy msgctxt "Palette" msgid "Orange 3" -msgstr "Ângulo" +msgstr "Laranja 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:176 msgctxt "Palette" msgid "Sky Blue 1" -msgstr "" +msgstr "Azul Céu 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:177 msgctxt "Palette" msgid "Sky Blue 2" -msgstr "" +msgstr "Azul Céu 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:178 msgctxt "Palette" msgid "Sky Blue 3" -msgstr "" +msgstr "Azul Céu 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:179 msgctxt "Palette" msgid "Plum 1" -msgstr "" +msgstr "Ameixa 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:180 msgctxt "Palette" msgid "Plum 2" -msgstr "" +msgstr "Ameixa 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:181 msgctxt "Palette" msgid "Plum 3" -msgstr "" +msgstr "Ameixa 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:182 msgctxt "Palette" msgid "Chocolate 1" -msgstr "" +msgstr "Chocolate 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:183 msgctxt "Palette" msgid "Chocolate 2" -msgstr "" +msgstr "Chocolate 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:184 msgctxt "Palette" msgid "Chocolate 3" -msgstr "" +msgstr "Chocolate 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:185 -#, fuzzy msgctxt "Palette" msgid "Scarlet Red 1" -msgstr "Escalar nós" +msgstr "Vermelho Escarlate 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:186 -#, fuzzy msgctxt "Palette" msgid "Scarlet Red 2" -msgstr "Escalar nós" +msgstr "Vermelho Escarlate 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:187 -#, fuzzy msgctxt "Palette" msgid "Scarlet Red 3" -msgstr "Escalar nós" +msgstr "Vermelho Escarlate 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:188 -#, fuzzy msgctxt "Palette" msgid "Snowy White" -msgstr "Branco" +msgstr "Branco Neve" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:189 -#, fuzzy msgctxt "Palette" msgid "Aluminium 1" -msgstr "Tamanho mínimo" +msgstr "Alumínio 1" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:190 -#, fuzzy msgctxt "Palette" msgid "Aluminium 2" -msgstr "Tamanho mínimo" +msgstr "Alumínio 2" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:191 -#, fuzzy msgctxt "Palette" msgid "Aluminium 3" -msgstr "Tamanho mínimo" +msgstr "Alumínio 3" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:192 -#, fuzzy msgctxt "Palette" msgid "Aluminium 4" -msgstr "Tamanho mínimo" +msgstr "Alumínio 4" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:193 -#, fuzzy msgctxt "Palette" msgid "Aluminium 5" -msgstr "Tamanho mínimo" +msgstr "Alumínio 5" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:194 -#, fuzzy msgctxt "Palette" msgid "Aluminium 6" -msgstr "Tamanho mínimo" +msgstr "Alumínio 6" #. Palette: ./Tango-Palette.gpl #: ../share/palettes/palettes.h:195 -#, fuzzy msgctxt "Palette" msgid "Jet Black" -msgstr "Preto" +msgstr "Preto Carvão" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:1" -msgstr "" +msgstr "Listrado 1:1" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:1 white" -msgstr "" +msgstr "Listrado 1:1 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:1.5" -msgstr "" +msgstr "Listrado 1:1.5" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:1.5 white" -msgstr "" +msgstr "Listrado 1:1.5 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:2" -msgstr "" +msgstr "Listrado 1:2" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:2 white" -msgstr "" +msgstr "Listrado 1:2 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:3" -msgstr "" +msgstr "Listrado 1:3" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:3 white" -msgstr "" +msgstr "Listrado 1:3 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:4" -msgstr "" +msgstr "Listrado 1:4" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:4 white" -msgstr "" +msgstr "Listrado 1:4 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:5" -msgstr "" +msgstr "Listrado 1:5" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:5 white" -msgstr "" +msgstr "Listrado 1:5 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:8" -msgstr "" +msgstr "Listrado 1:8" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:8 white" -msgstr "" +msgstr "Listrado 1:8 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:10" -msgstr "" +msgstr "Listrado 1:10" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:10 white" -msgstr "" +msgstr "Listrado 1:10 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:16" -msgstr "" +msgstr "Listrado 1:16" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:16 white" -msgstr "" +msgstr "Listrado 1:16 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:32" -msgstr "" +msgstr "Listrado 1:32" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:32 white" -msgstr "" +msgstr "Listrado 1:32 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 1:64" -msgstr "" +msgstr "Listrado 1:64" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 2:1" -msgstr "" +msgstr "Listrado 2:1" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 2:1 white" -msgstr "" +msgstr "Listrado 2:1 branco" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 4:1" -msgstr "" +msgstr "Listrado 4:1" #: ../share/patterns/patterns.svg.h:1 msgid "Stripes 4:1 white" -msgstr "" +msgstr "Listrado 4:1 branco" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Checkerboard" -msgstr "Whiteboa_rd" +msgstr "Tabuleiro" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Checkerboard white" -msgstr "Whiteboa_rd" +msgstr "Tabuleiro branco" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Packed circles" -msgstr "círculo" +msgstr "Círculos Abarrotados" #: ../share/patterns/patterns.svg.h:1 msgid "Polka dots, small" -msgstr "" +msgstr "Pontilhado, pequeno" #: ../share/patterns/patterns.svg.h:1 msgid "Polka dots, small white" -msgstr "" +msgstr "Pontilhado, pequeno branco" #: ../share/patterns/patterns.svg.h:1 msgid "Polka dots, medium" -msgstr "" +msgstr "Pontilhado, médio" #: ../share/patterns/patterns.svg.h:1 msgid "Polka dots, medium white" -msgstr "" +msgstr "Pontilhado, médio branco" #: ../share/patterns/patterns.svg.h:1 msgid "Polka dots, large" -msgstr "" +msgstr "Pontilhado, grande" #: ../share/patterns/patterns.svg.h:1 msgid "Polka dots, large white" -msgstr "" +msgstr "Pontilhado, grande branco" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Wavy" -msgstr "Onda" +msgstr "Ondulado" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Wavy white" -msgstr "Branco" +msgstr "Ondulado Branco" #: ../share/patterns/patterns.svg.h:1 msgid "Camouflage" -msgstr "" +msgstr "Camuflagem" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Ermine" -msgstr "Combinar" +msgstr "Arminho" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Sand (bitmap)" -msgstr "Vectorizar bitmap" +msgstr "Areia (bitmap)" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Cloth (bitmap)" -msgstr "Criar bitmap" +msgstr "Tecido (bitmap)" #: ../share/patterns/patterns.svg.h:1 -#, fuzzy msgid "Old paint (bitmap)" -msgstr "Imprimir como bitmap" +msgstr "Pintura antiga (bitmap)" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:2 msgctxt "Symbol" msgid "AIGA Symbol Signs" -msgstr "" +msgstr "Pictogramas AIGA" #. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg @@ -3624,311 +3425,294 @@ msgstr "" #: ../share/symbols/symbols.h:281 ../share/symbols/symbols.h:282 msgctxt "Symbol" msgid "Telephone" -msgstr "" +msgstr "Telefone" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:5 ../share/symbols/symbols.h:6 msgctxt "Symbol" msgid "Mail" -msgstr "" +msgstr "Correio" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:7 ../share/symbols/symbols.h:8 -#, fuzzy msgctxt "Symbol" msgid "Currency Exchange" -msgstr "Camada actual" +msgstr "Câmbio" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:9 ../share/symbols/symbols.h:10 msgctxt "Symbol" msgid "Currency Exchange - Euro" -msgstr "" +msgstr "Câmbio - Euro" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:11 ../share/symbols/symbols.h:12 msgctxt "Symbol" msgid "Cashier" -msgstr "" +msgstr "Caixa de Pagamento" #. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:13 ../share/symbols/symbols.h:14 #: ../share/symbols/symbols.h:213 ../share/symbols/symbols.h:214 -#, fuzzy msgctxt "Symbol" msgid "First Aid" -msgstr "Primeiro seleccionado" +msgstr "Primeiros Socorros" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:15 ../share/symbols/symbols.h:16 -#, fuzzy msgctxt "Symbol" msgid "Lost and Found" -msgstr "Não arredondado" +msgstr "Perdidos e Achados" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:17 ../share/symbols/symbols.h:18 msgctxt "Symbol" msgid "Coat Check" -msgstr "" +msgstr "Guarda-Roupas" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:19 ../share/symbols/symbols.h:20 msgctxt "Symbol" msgid "Baggage Lockers" -msgstr "" +msgstr "Cacifos de Bagagem" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:21 ../share/symbols/symbols.h:22 msgctxt "Symbol" msgid "Escalator" -msgstr "" +msgstr "Escadas Rolantes" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:23 ../share/symbols/symbols.h:24 msgctxt "Symbol" msgid "Escalator Down" -msgstr "" +msgstr "Escadas Rolantes para Baixo" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:25 ../share/symbols/symbols.h:26 msgctxt "Symbol" msgid "Escalator Up" -msgstr "" +msgstr "Escadas Rolantes para Cima" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:27 ../share/symbols/symbols.h:28 msgctxt "Symbol" msgid "Stairs" -msgstr "" +msgstr "Escadas" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:29 ../share/symbols/symbols.h:30 msgctxt "Symbol" msgid "Stairs Down" -msgstr "" +msgstr "Escadas para Baixo" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:31 ../share/symbols/symbols.h:32 msgctxt "Symbol" msgid "Stairs Up" -msgstr "" +msgstr "Escadas para Cima" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:33 ../share/symbols/symbols.h:34 -#, fuzzy msgctxt "Symbol" msgid "Elevator" -msgstr "Elevação" +msgstr "Elevador" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:35 ../share/symbols/symbols.h:36 msgctxt "Symbol" msgid "Toilets - Men" -msgstr "" +msgstr "Casas de Banho - Homens" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:37 ../share/symbols/symbols.h:38 msgctxt "Symbol" msgid "Toilets - Women" -msgstr "" +msgstr "Casas de Banho - Mulheres" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:39 ../share/symbols/symbols.h:40 msgctxt "Symbol" msgid "Toilets" -msgstr "" +msgstr "Casas de Banho" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:41 ../share/symbols/symbols.h:42 msgctxt "Symbol" msgid "Nursery" -msgstr "" +msgstr "Bersário" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:43 ../share/symbols/symbols.h:44 msgctxt "Symbol" msgid "Drinking Fountain" -msgstr "" +msgstr "Fonte de Ãgua Potável" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:45 ../share/symbols/symbols.h:46 -#, fuzzy msgctxt "Symbol" msgid "Waiting Room" -msgstr "Script" +msgstr "Sala de Espera" #. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:47 ../share/symbols/symbols.h:48 #: ../share/symbols/symbols.h:231 ../share/symbols/symbols.h:232 -#, fuzzy msgctxt "Symbol" msgid "Information" msgstr "Informação" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:49 ../share/symbols/symbols.h:50 -#, fuzzy msgctxt "Symbol" msgid "Hotel Information" -msgstr "Informação" +msgstr "Informação de Hotéis" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:51 ../share/symbols/symbols.h:52 -#, fuzzy msgctxt "Symbol" msgid "Air Transportation" -msgstr "Informação" +msgstr "Transportes Aéreos" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:53 ../share/symbols/symbols.h:54 msgctxt "Symbol" msgid "Heliport" -msgstr "" +msgstr "Heliporto" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:55 ../share/symbols/symbols.h:56 msgctxt "Symbol" msgid "Taxi" -msgstr "" +msgstr "Táxi" # Enevoar, desfocar ou borrar? -- krishna #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:57 ../share/symbols/symbols.h:58 -#, fuzzy msgctxt "Symbol" msgid "Bus" -msgstr "Desfocar" +msgstr "Autocarro" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:59 ../share/symbols/symbols.h:60 -#, fuzzy msgctxt "Symbol" msgid "Ground Transportation" -msgstr "Informação" +msgstr "Transporte Terrestre" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:61 ../share/symbols/symbols.h:62 -#, fuzzy msgctxt "Symbol" msgid "Rail Transportation" -msgstr "Informação" +msgstr "Transporte Ferroviário" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:63 ../share/symbols/symbols.h:64 -#, fuzzy msgctxt "Symbol" msgid "Water Transportation" -msgstr "Informação" +msgstr "Transporte Aquático" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:65 ../share/symbols/symbols.h:66 msgctxt "Symbol" msgid "Car Rental" -msgstr "" +msgstr "Aluguer de Carros" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:67 ../share/symbols/symbols.h:68 msgctxt "Symbol" msgid "Restaurant" -msgstr "" +msgstr "Restaurante" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:69 ../share/symbols/symbols.h:70 msgctxt "Symbol" msgid "Coffeeshop" -msgstr "" +msgstr "Café" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:71 ../share/symbols/symbols.h:72 -#, fuzzy msgctxt "Symbol" msgid "Bar" -msgstr "Marca" +msgstr "Bar" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:73 ../share/symbols/symbols.h:74 msgctxt "Symbol" msgid "Shops" -msgstr "" +msgstr "Lojas" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:75 ../share/symbols/symbols.h:76 msgctxt "Symbol" msgid "Barber Shop - Beauty Salon" -msgstr "" +msgstr "Salão de Beleza" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:77 ../share/symbols/symbols.h:78 msgctxt "Symbol" msgid "Barber Shop" -msgstr "" +msgstr "Barbearia" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:79 ../share/symbols/symbols.h:80 msgctxt "Symbol" msgid "Beauty Salon" -msgstr "" +msgstr "Salão de Beleza" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:81 ../share/symbols/symbols.h:82 msgctxt "Symbol" msgid "Ticket Purchase" -msgstr "" +msgstr "Compra de Bilhetes" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:83 ../share/symbols/symbols.h:84 msgctxt "Symbol" msgid "Baggage Check In" -msgstr "" +msgstr "Apresentação de Bagagem" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:85 ../share/symbols/symbols.h:86 msgctxt "Symbol" msgid "Baggage Claim" -msgstr "" +msgstr "Recepção de Bagagem" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:87 ../share/symbols/symbols.h:88 -#, fuzzy msgctxt "Symbol" msgid "Customs" -msgstr "_Personalizado" +msgstr "Alfândega" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:89 ../share/symbols/symbols.h:90 -#, fuzzy msgctxt "Symbol" msgid "Immigration" -msgstr "Configurações de Impressão" +msgstr "Imigração" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:91 ../share/symbols/symbols.h:92 -#, fuzzy msgctxt "Symbol" msgid "Departing Flights" -msgstr "Luz Distante" +msgstr "Partidas de Vôos" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:93 ../share/symbols/symbols.h:94 -#, fuzzy msgctxt "Symbol" msgid "Arriving Flights" -msgstr "Luminosidade" +msgstr "Chegadas de Vôos" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:95 ../share/symbols/symbols.h:96 msgctxt "Symbol" msgid "Smoking" -msgstr "" +msgstr "Fumadores" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:97 ../share/symbols/symbols.h:98 msgctxt "Symbol" msgid "No Smoking" -msgstr "" +msgstr "Não Fumadores" #. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg @@ -3936,820 +3720,775 @@ msgstr "" #: ../share/symbols/symbols.h:245 ../share/symbols/symbols.h:246 msgctxt "Symbol" msgid "Parking" -msgstr "" +msgstr "Estacionamento" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:101 ../share/symbols/symbols.h:102 msgctxt "Symbol" msgid "No Parking" -msgstr "" +msgstr "Proibido Estacionar" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:103 ../share/symbols/symbols.h:104 msgctxt "Symbol" msgid "No Dogs" -msgstr "" +msgstr "Proibido Cães" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:105 ../share/symbols/symbols.h:106 msgctxt "Symbol" msgid "No Entry" -msgstr "" +msgstr "Entrada Proibida" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:107 ../share/symbols/symbols.h:108 msgctxt "Symbol" msgid "Exit" -msgstr "" +msgstr "Saída" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:109 ../share/symbols/symbols.h:110 msgctxt "Symbol" msgid "Fire Extinguisher" -msgstr "" +msgstr "Extintor" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:111 ../share/symbols/symbols.h:112 -#, fuzzy msgctxt "Symbol" msgid "Right Arrow" -msgstr "Direitos" +msgstr "Seta para a Direita" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:113 ../share/symbols/symbols.h:114 msgctxt "Symbol" msgid "Forward and Right Arrow" -msgstr "" +msgstr "Seta para a Frente e Direita" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:115 ../share/symbols/symbols.h:116 -#, fuzzy msgctxt "Symbol" msgid "Up Arrow" -msgstr "Erros" +msgstr "Seta para Cima" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:117 ../share/symbols/symbols.h:118 msgctxt "Symbol" msgid "Forward and Left Arrow" -msgstr "" +msgstr "Seta para a Frente e Esquerda" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:119 ../share/symbols/symbols.h:120 -#, fuzzy msgctxt "Symbol" msgid "Left Arrow" -msgstr "Erros" +msgstr "Seta para a Esquerda" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:121 ../share/symbols/symbols.h:122 msgctxt "Symbol" msgid "Left and Down Arrow" -msgstr "" +msgstr "Seta para a Esquerda e para Baixo" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:123 ../share/symbols/symbols.h:124 -#, fuzzy msgctxt "Symbol" msgid "Down Arrow" -msgstr "Erros" +msgstr "Seta para Baixo" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:125 ../share/symbols/symbols.h:126 msgctxt "Symbol" msgid "Right and Down Arrow" -msgstr "" +msgstr "Seta para a Direita e para Baixo" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:127 ../share/symbols/symbols.h:128 msgctxt "Symbol" msgid "NPS Wheelchair Accessible - 1996" -msgstr "" +msgstr "Acessível a Cadeiras de Rodas - NPS 1996" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:129 ../share/symbols/symbols.h:130 msgctxt "Symbol" msgid "NPS Wheelchair Accessible" -msgstr "" +msgstr "Acessível a Cadeiras de Rodas - NPS" #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:131 ../share/symbols/symbols.h:132 msgctxt "Symbol" msgid "New Wheelchair Accessible" -msgstr "" +msgstr "Acessível a Cadeiras de Rodas - Novo" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:133 msgctxt "Symbol" msgid "Word Balloons" -msgstr "" +msgstr "Balão de Banda Desenhada" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:134 msgctxt "Symbol" msgid "Thought Balloon" -msgstr "" +msgstr "Balão de Pensamento" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:135 msgctxt "Symbol" msgid "Dream Speaking" -msgstr "" +msgstr "Sonho Falado" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:136 -#, fuzzy msgctxt "Symbol" msgid "Rounded Balloon" -msgstr "Junção redonda" +msgstr "Balão Redondo" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:137 -#, fuzzy msgctxt "Symbol" msgid "Squared Balloon" -msgstr "Ponta quadrada" +msgstr "Balão Quadrado" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:138 msgctxt "Symbol" msgid "Over the Phone" -msgstr "" +msgstr "Ao Telefone" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:139 msgctxt "Symbol" msgid "Hip Balloon" -msgstr "" +msgstr "Balão Oco" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:140 -#, fuzzy msgctxt "Symbol" msgid "Circle Balloon" -msgstr "Círculo" +msgstr "Balão Circular" #. Symbols: ./BalloonSymbols.svg #: ../share/symbols/symbols.h:141 msgctxt "Symbol" msgid "Exclaim Balloon" -msgstr "" +msgstr "Balão de Exclamação" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:142 msgctxt "Symbol" msgid "Flow Chart Shapes" -msgstr "" +msgstr "Formas de Fluxogramas" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:143 msgctxt "Symbol" msgid "Process" -msgstr "" +msgstr "Processo" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:144 -#, fuzzy msgctxt "Symbol" msgid "Input/Output" -msgstr "Saída" +msgstr "Entrada/Saída" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:145 -#, fuzzy msgctxt "Symbol" msgid "Document" -msgstr "Desenho SVG" +msgstr "Documento" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:146 -#, fuzzy msgctxt "Symbol" msgid "Manual Operation" -msgstr "Saturação" +msgstr "Operação Manual" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:147 -#, fuzzy msgctxt "Symbol" msgid "Preparation" -msgstr "Saturação" +msgstr "Preparação" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:148 -#, fuzzy msgctxt "Symbol" msgid "Merge" -msgstr "Mesclar" +msgstr "União" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:149 -#, fuzzy msgctxt "Symbol" msgid "Decision" -msgstr "Precisão" +msgstr "Decisão" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:150 msgctxt "Symbol" msgid "Magnetic Tape" -msgstr "" +msgstr "Fita magnética" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:151 -#, fuzzy msgctxt "Symbol" msgid "Display" -msgstr "_Modo de visão" +msgstr "Painel" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:152 msgctxt "Symbol" msgid "Auxiliary Operation" -msgstr "" +msgstr "Operação Auxiliar" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:153 -#, fuzzy msgctxt "Symbol" msgid "Manual Input" -msgstr "Entrada EMF" +msgstr "Entrada Manual" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:154 -#, fuzzy msgctxt "Symbol" msgid "Extract" -msgstr "Extrair Uma Imagem" +msgstr "Extrair" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:155 msgctxt "Symbol" msgid "Terminal/Interrupt" -msgstr "" +msgstr "Terminal/Interrupção" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:156 msgctxt "Symbol" msgid "Punched Card" -msgstr "" +msgstr "Cartão Perfurado" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:157 -#, fuzzy msgctxt "Symbol" msgid "Punch Tape" -msgstr "Traço preto" +msgstr "Fita Perfurada" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:158 msgctxt "Symbol" msgid "Online Storage" -msgstr "" +msgstr "Armazenamento Online" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:159 msgctxt "Symbol" msgid "Keying" -msgstr "" +msgstr "Entrada" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:160 msgctxt "Symbol" msgid "Sort" -msgstr "" +msgstr "Ordenação" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:161 -#, fuzzy msgctxt "Symbol" msgid "Connector" -msgstr "Conector" +msgstr "Conetor" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:162 -#, fuzzy msgctxt "Symbol" msgid "Off-Page Connector" -msgstr "Conector" +msgstr "Conetor Para Trás" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:163 msgctxt "Symbol" msgid "Transmittal Tape" -msgstr "" +msgstr "Banda de Transmissão" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:164 msgctxt "Symbol" msgid "Communication Link" -msgstr "" +msgstr "Ligação de Comunicação" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:165 -#, fuzzy msgctxt "Symbol" msgid "Collate" -msgstr "Modular" +msgstr "Comparar" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:166 msgctxt "Symbol" msgid "Comment/Annotation" -msgstr "" +msgstr "Comentário/Anotação" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:167 msgctxt "Symbol" msgid "Core" -msgstr "" +msgstr "Núcleo" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:168 msgctxt "Symbol" msgid "Predefined Process" -msgstr "" +msgstr "Processo Pré-definido" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:169 msgctxt "Symbol" msgid "Magnetic Disk (Database)" -msgstr "" +msgstr "Disco Magnético (Base de Dados)" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:170 msgctxt "Symbol" msgid "Magnetic Drum (Direct Access)" -msgstr "" +msgstr "Tambor Magnético (Acesso Direto)" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:171 msgctxt "Symbol" msgid "Offline Storage" -msgstr "" +msgstr "Armazenamento Offline" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:172 msgctxt "Symbol" msgid "Logical Or" -msgstr "" +msgstr "OR Lógico" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:173 msgctxt "Symbol" msgid "Logical And" -msgstr "" +msgstr "AND Lógico" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:174 msgctxt "Symbol" msgid "Delay" -msgstr "" +msgstr "Atraso" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:175 msgctxt "Symbol" msgid "Loop Limit Begin" -msgstr "" +msgstr "Início de Limite de Ciclo" #. Symbols: ./FlowSymbols.svg #: ../share/symbols/symbols.h:176 msgctxt "Symbol" msgid "Loop Limit End" -msgstr "" +msgstr "Fim de Limite de Ciclo" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:177 msgctxt "Symbol" msgid "Logic Symbols" -msgstr "" +msgstr "Símbolos Lógicos" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:178 msgctxt "Symbol" msgid "Xnor Gate" -msgstr "" +msgstr "Porta XNOR" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:179 msgctxt "Symbol" msgid "Xor Gate" -msgstr "" +msgstr "Porta XOR" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:180 msgctxt "Symbol" msgid "Nor Gate" -msgstr "" +msgstr "Porta NOR" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:181 msgctxt "Symbol" msgid "Or Gate" -msgstr "" +msgstr "Porta OR" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:182 msgctxt "Symbol" msgid "Nand Gate" -msgstr "" +msgstr "Porta NAND" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:183 msgctxt "Symbol" msgid "And Gate" -msgstr "" +msgstr "Porta AND" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:184 msgctxt "Symbol" msgid "Buffer" -msgstr "" +msgstr "Buffer" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:185 msgctxt "Symbol" msgid "Not Gate" -msgstr "" +msgstr "Não Porta" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:186 msgctxt "Symbol" msgid "Buffer Small" -msgstr "" +msgstr "Buffer Pequeno" #. Symbols: ./LogicSymbols.svg #: ../share/symbols/symbols.h:187 msgctxt "Symbol" msgid "Not Gate Small" -msgstr "" +msgstr "Não Porta Pequeno" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:188 msgctxt "Symbol" msgid "United States National Park Service Map Symbols" -msgstr "" +msgstr "Pictogramas do Serv.Parq.Nac.EUA" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:189 ../share/symbols/symbols.h:190 -#, fuzzy msgctxt "Symbol" msgid "Airport" -msgstr "Importar" +msgstr "Aeroporto" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:191 ../share/symbols/symbols.h:192 msgctxt "Symbol" msgid "Amphitheatre" -msgstr "" +msgstr "Anfiteatro" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:193 ../share/symbols/symbols.h:194 msgctxt "Symbol" msgid "Bicycle Trail" -msgstr "" +msgstr "Trilho de Bicicleta" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:195 ../share/symbols/symbols.h:196 msgctxt "Symbol" msgid "Boat Launch" -msgstr "" +msgstr "Rampa de Barcos" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:197 ../share/symbols/symbols.h:198 msgctxt "Symbol" msgid "Boat Tour" -msgstr "" +msgstr "Guia Turístico por Barco" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:199 ../share/symbols/symbols.h:200 -#, fuzzy msgctxt "Symbol" msgid "Bus Stop" -msgstr "_Aplicar" +msgstr "Paragem de Autocarro" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:201 ../share/symbols/symbols.h:202 -#, fuzzy msgctxt "Symbol" msgid "Campfire" -msgstr "Alterar arredondamento" +msgstr "Fogueira" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:203 ../share/symbols/symbols.h:204 -#, fuzzy msgctxt "Symbol" msgid "Campground" -msgstr "Alterar arredondamento" +msgstr "Parque de Campismo" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:205 ../share/symbols/symbols.h:206 msgctxt "Symbol" msgid "CanoeAccess" -msgstr "" +msgstr "Acesso a Canoas" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:207 ../share/symbols/symbols.h:208 msgctxt "Symbol" msgid "Crosscountry Ski Trail" -msgstr "" +msgstr "Trilho de Esqui Crosscountry" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:209 ../share/symbols/symbols.h:210 msgctxt "Symbol" msgid "Downhill Skiing" -msgstr "" +msgstr "Esqui Downhill" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:211 ../share/symbols/symbols.h:212 -#, fuzzy msgctxt "Symbol" msgid "Drinking Water" -msgstr "Imprimir usando operadores PostScript" +msgstr "Ãgua Potável" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:215 ../share/symbols/symbols.h:216 msgctxt "Symbol" msgid "Fishing" -msgstr "" +msgstr "Pesca" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:217 ../share/symbols/symbols.h:218 msgctxt "Symbol" msgid "Food Service" -msgstr "" +msgstr "Serviço de Comida" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:219 ../share/symbols/symbols.h:220 msgctxt "Symbol" msgid "Four Wheel Drive Road" -msgstr "" +msgstr "Estrada para Quatro Rodas" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:221 ../share/symbols/symbols.h:222 -#, fuzzy msgctxt "Symbol" msgid "Gas Station" -msgstr "Menos Saturação" +msgstr "Posto de combustível" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:223 ../share/symbols/symbols.h:224 -#, fuzzy msgctxt "Symbol" msgid "Golfing" -msgstr "Ponto" +msgstr "Golfe" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:225 ../share/symbols/symbols.h:226 msgctxt "Symbol" msgid "Horseback Riding" -msgstr "" +msgstr "Hipismo" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:227 ../share/symbols/symbols.h:228 msgctxt "Symbol" msgid "Hospital" -msgstr "" +msgstr "Hospital" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:229 ../share/symbols/symbols.h:230 -#, fuzzy msgctxt "Symbol" msgid "Ice Skating" -msgstr "Início" +msgstr "Patinagem no Gelo" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:233 ../share/symbols/symbols.h:234 msgctxt "Symbol" msgid "Litter Receptacle" -msgstr "" +msgstr "Caixote do Lixo" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:235 ../share/symbols/symbols.h:236 msgctxt "Symbol" msgid "Lodging" -msgstr "" +msgstr "Alojamento" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:237 ../share/symbols/symbols.h:238 msgctxt "Symbol" msgid "Marina" -msgstr "" +msgstr "Marina" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:239 ../share/symbols/symbols.h:240 msgctxt "Symbol" msgid "Motorbike Trail" -msgstr "" +msgstr "Trilho de Motocliclos" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:241 ../share/symbols/symbols.h:242 -#, fuzzy msgctxt "Symbol" msgid "Radiator Water" -msgstr "_Rotação" +msgstr "Ãgua de Refrigeração" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:243 ../share/symbols/symbols.h:244 msgctxt "Symbol" msgid "Recycling" -msgstr "" +msgstr "Reciclagem" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:247 ../share/symbols/symbols.h:248 -#, fuzzy msgctxt "Symbol" msgid "Pets On Leash" -msgstr "_Por no Caminho" +msgstr "Animais com Trela" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:249 ../share/symbols/symbols.h:250 -#, fuzzy msgctxt "Symbol" msgid "Picnic Area" -msgstr "Cor lisa" +msgstr "Ãrea de Pique-Niques" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:251 ../share/symbols/symbols.h:252 msgctxt "Symbol" msgid "Post Office" -msgstr "" +msgstr "Posto de Correios" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:253 ../share/symbols/symbols.h:254 -#, fuzzy msgctxt "Symbol" msgid "Ranger Station" -msgstr "Relação" +msgstr "Posto de Guarda Florestal" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:255 ../share/symbols/symbols.h:256 -#, fuzzy msgctxt "Symbol" msgid "RV Campground" -msgstr "Alterar arredondamento" +msgstr "Parque de Caravanas" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:257 ../share/symbols/symbols.h:258 msgctxt "Symbol" msgid "Restrooms" -msgstr "" +msgstr "Casas de Banho" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:259 ../share/symbols/symbols.h:260 -#, fuzzy msgctxt "Symbol" msgid "Sailing" -msgstr "Rolagem" +msgstr "Vela" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:261 ../share/symbols/symbols.h:262 msgctxt "Symbol" msgid "Sanitary Disposal Station" -msgstr "" +msgstr "Estação de Deposição Sanitária (caravanas)" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:263 ../share/symbols/symbols.h:264 -#, fuzzy msgctxt "Symbol" msgid "Scuba Diving" -msgstr "Divisão" +msgstr "Mergulho" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:265 ../share/symbols/symbols.h:266 msgctxt "Symbol" msgid "Self Guided Trail" -msgstr "" +msgstr "Trilho de Orientação" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:267 ../share/symbols/symbols.h:268 -#, fuzzy msgctxt "Symbol" msgid "Shelter" -msgstr "_Filtrar" +msgstr "Abrigo" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:269 ../share/symbols/symbols.h:270 -#, fuzzy msgctxt "Symbol" msgid "Showers" -msgstr "Mostrar:" +msgstr "Chuveiros" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:271 ../share/symbols/symbols.h:272 -#, fuzzy msgctxt "Symbol" msgid "Sledding" -msgstr "Espaçamento" +msgstr "Trenós de Escorregar" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:273 ../share/symbols/symbols.h:274 msgctxt "Symbol" msgid "SnowmobileTrail" -msgstr "" +msgstr "Trilho de Mota de Neve" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:275 ../share/symbols/symbols.h:276 -#, fuzzy msgctxt "Symbol" msgid "Stable" -msgstr "Tabela" +msgstr "Estábulo" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:277 ../share/symbols/symbols.h:278 msgctxt "Symbol" msgid "Store" -msgstr "" +msgstr "Loja" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:279 ../share/symbols/symbols.h:280 msgctxt "Symbol" msgid "Swimming" -msgstr "" +msgstr "Natação" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:283 ../share/symbols/symbols.h:284 -#, fuzzy msgctxt "Symbol" msgid "Emergency Telephone" -msgstr "Divergência" +msgstr "Telefone de Emergência" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:285 ../share/symbols/symbols.h:286 -#, fuzzy msgctxt "Symbol" msgid "Trailhead" -msgstr "Tipografia normal" +msgstr "Início do Trilho" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:287 ../share/symbols/symbols.h:288 msgctxt "Symbol" msgid "Wheelchair Accessible" -msgstr "" +msgstr "Acessível a Cadeiras de Rodas" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:289 ../share/symbols/symbols.h:290 msgctxt "Symbol" msgid "Wind Surfing" -msgstr "" +msgstr "Prancha à Vela (windsurf)" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:291 msgctxt "Symbol" msgid "Blank" -msgstr "" +msgstr "Vazio" #: ../share/templates/templates.h:1 msgid "CD Label 120mmx120mm " -msgstr "" +msgstr "Etiqueta de CD 120mmx120mm " #: ../share/templates/templates.h:1 msgid "Simple CD Label template with disc's pattern." -msgstr "" +msgstr "Modelo simples de etiqueta do CD com a figura do CD" #: ../share/templates/templates.h:1 msgid "CD label 120x120 disc disk" -msgstr "" +msgstr "Etiqueta de Disco de CD 120x120" #: ../share/templates/templates.h:1 -#, fuzzy msgid "No Layers" -msgstr "Camada" +msgstr "Sem Camadas" #: ../share/templates/templates.h:1 msgid "Empty sheet with no layers" -msgstr "" +msgstr "Folha vazia sem camadas" #: ../share/templates/templates.h:1 -#, fuzzy msgid "no layers empty" -msgstr "Mudar opacidade da camada" +msgstr "sem camadas vazias" #: ../share/templates/templates.h:1 -#, fuzzy msgid "LaTeX Beamer" -msgstr "Impressão LaTeX" +msgstr "LaTeX Beamer" #: ../share/templates/templates.h:1 msgid "LaTeX beamer template with helping grid." -msgstr "" +msgstr "Modelo LaTeX Beamer com grelha de ajuda." #: ../share/templates/templates.h:1 msgid "LaTex LaTeX latex grid beamer" -msgstr "" +msgstr "LaTex LaTeX latex - projetor de grelha" #: ../share/templates/templates.h:1 -#, fuzzy msgid "Typography Canvas" -msgstr "Espiral" +msgstr "Ãrea Tipográfica" #: ../share/templates/templates.h:1 msgid "Empty typography canvas with helping guidelines." -msgstr "" +msgstr "Ãrea de desenho tipográfico vazio com guias de ajuda." #: ../share/templates/templates.h:1 msgid "guidelines typography canvas" -msgstr "" +msgstr "guias de área de desenho tipográfico" #. 3D box #: ../src/box3d.cpp:255 ../src/box3d.cpp:1309 @@ -4757,17 +4496,16 @@ msgstr "" msgid "3D Box" msgstr "Caixa 3D" -#: ../src/color-profile.cpp:842 -#, fuzzy, c-format +#: ../src/color-profile.cpp:856 +#, c-format msgid "Color profiles directory (%s) is unavailable." -msgstr "Diretório de paletas (%s) não está disponível." +msgstr "A pasta de perfis de cores (%s) não está disponível." -#: ../src/color-profile.cpp:901 ../src/color-profile.cpp:918 +#: ../src/color-profile.cpp:928 ../src/color-profile.cpp:945 msgid "(invalid UTF-8 string)" -msgstr "" +msgstr "(expressão UTF-8 inválida)" -#: ../src/color-profile.cpp:903 -#, fuzzy +#: ../src/color-profile.cpp:930 msgctxt "Profile name" msgid "None" msgstr "Nenhum" @@ -4775,12 +4513,14 @@ msgstr "Nenhum" #: ../src/context-fns.cpp:33 ../src/context-fns.cpp:62 msgid "Current layer is hidden. Unhide it to be able to draw on it." msgstr "" -"A camada actual está escondida. Mostre-a para poder desenhar nela." +"A camada atual está oculta. Para desenhar nela é necessário desocultá-" +"la." #: ../src/context-fns.cpp:39 ../src/context-fns.cpp:68 msgid "Current layer is locked. Unlock it to be able to draw on it." msgstr "" -"A camada actual está bloqueada. Desbloque-a para poder desenhar nela." +"A camada atual está bloqueada. Para desenhar nela é necessário " +"desbloqueá-la." #: ../src/desktop-events.cpp:244 msgid "Create guide" @@ -4796,9 +4536,9 @@ msgid "Delete guide" msgstr "Eliminar guia" #: ../src/desktop-events.cpp:547 -#, fuzzy, c-format +#, c-format msgid "Guideline: %s" -msgstr "Linha guia: %s" +msgstr "Linha guia: %s" #: ../src/desktop.cpp:870 msgid "No previous zoom." @@ -4839,7 +4579,7 @@ msgstr "Espaçamento _Y:" #: ../src/display/canvas-axonomgrid.cpp:365 #: ../src/ui/dialog/inkscape-preferences.cpp:820 msgid "Base length of z-axis" -msgstr "" +msgstr "Comprimento base do eixo do Z" #: ../src/display/canvas-axonomgrid.cpp:368 #: ../src/ui/dialog/inkscape-preferences.cpp:823 @@ -4850,7 +4590,7 @@ msgstr "Ângulo X:" #: ../src/display/canvas-axonomgrid.cpp:368 #: ../src/ui/dialog/inkscape-preferences.cpp:823 msgid "Angle of x-axis" -msgstr "" +msgstr "Ângulo do eixo X" #: ../src/display/canvas-axonomgrid.cpp:370 #: ../src/ui/dialog/inkscape-preferences.cpp:824 @@ -4861,40 +4601,37 @@ msgstr "Ângulo Z:" #: ../src/display/canvas-axonomgrid.cpp:370 #: ../src/ui/dialog/inkscape-preferences.cpp:824 msgid "Angle of z-axis" -msgstr "" +msgstr "Ângulo do eixo Z" #: ../src/display/canvas-axonomgrid.cpp:374 ../src/display/canvas-grid.cpp:713 -#, fuzzy msgid "Minor grid line _color:" -msgstr "Cor da linha de grelha ma_ior:" +msgstr "_Cor da linha fina da grelha:" #: ../src/display/canvas-axonomgrid.cpp:374 ../src/display/canvas-grid.cpp:713 #: ../src/ui/dialog/inkscape-preferences.cpp:775 -#, fuzzy msgid "Minor grid line color" -msgstr "Cor da linha de grelha maior" +msgstr "Cor da linha fina da grelha" #: ../src/display/canvas-axonomgrid.cpp:374 ../src/display/canvas-grid.cpp:713 -#, fuzzy msgid "Color of the minor grid lines" -msgstr "Cor das linhas de grelha" +msgstr "Cor das linhas finas da grelha" #: ../src/display/canvas-axonomgrid.cpp:379 ../src/display/canvas-grid.cpp:718 msgid "Ma_jor grid line color:" -msgstr "Cor da linha de grelha ma_ior:" +msgstr "Cor da linha _grossa da grelha:" #: ../src/display/canvas-axonomgrid.cpp:379 ../src/display/canvas-grid.cpp:718 #: ../src/ui/dialog/inkscape-preferences.cpp:777 msgid "Major grid line color" -msgstr "Cor da linha de grelha maior" +msgstr "Cor da linha grossa da grelha" #: ../src/display/canvas-axonomgrid.cpp:380 ../src/display/canvas-grid.cpp:719 msgid "Color of the major (highlighted) grid lines" -msgstr "Cor da linha de grelha maior (destacada)" +msgstr "Cor das linhas grossas (destacadas) da grelha" #: ../src/display/canvas-axonomgrid.cpp:384 ../src/display/canvas-grid.cpp:723 msgid "_Major grid line every:" -msgstr "_Linha de grelha maior a cada:" +msgstr "_Linha grossa da grelha a cada:" #: ../src/display/canvas-axonomgrid.cpp:384 ../src/display/canvas-grid.cpp:723 msgid "lines" @@ -4914,23 +4651,27 @@ msgstr "Criar nova grelha" #: ../src/display/canvas-grid.cpp:312 msgid "_Enabled" -msgstr "_Activado" +msgstr "_Ativado" #: ../src/display/canvas-grid.cpp:313 msgid "" "Determines whether to snap to this grid or not. Can be 'on' for invisible " "grids." msgstr "" +"Determina a atração ou não a esta grelha. Pode estar 'ativado' para grelhas " +"invisíveis." #: ../src/display/canvas-grid.cpp:317 msgid "Snap to visible _grid lines only" -msgstr "" +msgstr "Atrair apenas a _grelhas visíveis" #: ../src/display/canvas-grid.cpp:318 msgid "" "When zoomed out, not all grid lines will be displayed. Only the visible ones " "will be snapped to" msgstr "" +"Ao afastar a vista, nem todas as linhas da grelha são mostradas. Apenas as " +"visíveis irão atrair" #: ../src/display/canvas-grid.cpp:322 msgid "_Visible" @@ -4941,6 +4682,8 @@ msgid "" "Determines whether the grid is displayed or not. Objects are still snapped " "to invisible grids." msgstr "" +"Determina se a grelha é mostrada ou não. Os objetos continuam a ser atraídos " +"a grelhas invisíveis." #: ../src/display/canvas-grid.cpp:705 msgid "Spacing _X:" @@ -4954,265 +4697,221 @@ msgstr "Distância vertical entre linhas da grelha" #: ../src/display/canvas-grid.cpp:708 #: ../src/ui/dialog/inkscape-preferences.cpp:798 msgid "Distance between horizontal grid lines" -msgstr "Distância horizontal entre linhas" +msgstr "Distância horizontal entre linhas da grelha" #: ../src/display/canvas-grid.cpp:740 msgid "_Show dots instead of lines" -msgstr "_Mostrar pontos ao invés de linhas" +msgstr "_Mostrar grelha de pontos em vez de linhas" #: ../src/display/canvas-grid.cpp:741 msgid "If set, displays dots at gridpoints instead of gridlines" -msgstr "Mostrar pontos na grelha ao invés de linhas" +msgstr "Se ativado, mostra a grelha numa série de pontos em vez de linhas" #. TRANSLATORS: undefined target for snapping #: ../src/display/snap-indicator.cpp:72 ../src/display/snap-indicator.cpp:75 #: ../src/display/snap-indicator.cpp:180 ../src/display/snap-indicator.cpp:183 msgid "UNDEFINED" -msgstr "" +msgstr "NÃO DEFINIDO" #: ../src/display/snap-indicator.cpp:79 -#, fuzzy msgid "grid line" -msgstr "Linha guia" +msgstr "linha da grelha" #: ../src/display/snap-indicator.cpp:82 -#, fuzzy msgid "grid intersection" -msgstr "Ajustar às interseções de guias com a grelha" +msgstr "interseção da grelha" #: ../src/display/snap-indicator.cpp:85 -#, fuzzy msgid "grid line (perpendicular)" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "linha da grelha (perpendicular)" #: ../src/display/snap-indicator.cpp:88 -#, fuzzy msgid "guide" -msgstr "Guias" +msgstr "guia" #: ../src/display/snap-indicator.cpp:91 -#, fuzzy msgid "guide intersection" -msgstr "Ajustar às interseções de guias com a grelha" +msgstr "interseção das guias" #: ../src/display/snap-indicator.cpp:94 -#, fuzzy msgid "guide origin" -msgstr "Cor da linha guia" +msgstr "origem da guia" #: ../src/display/snap-indicator.cpp:97 -#, fuzzy msgid "guide (perpendicular)" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "guia (perpendicular)" #: ../src/display/snap-indicator.cpp:100 -#, fuzzy msgid "grid-guide intersection" -msgstr "Ajustar às interseções de guias com a grelha" +msgstr "interseção da grelha e guia" #: ../src/display/snap-indicator.cpp:103 -#, fuzzy msgid "cusp node" -msgstr "Encaixar aos n_ós" +msgstr "nó afiado" #: ../src/display/snap-indicator.cpp:106 -#, fuzzy msgid "smooth node" -msgstr "Suavidade" +msgstr "nó suave" #: ../src/display/snap-indicator.cpp:109 -#, fuzzy msgid "path" -msgstr "Caminho" +msgstr "caminho" #: ../src/display/snap-indicator.cpp:112 -#, fuzzy msgid "path (perpendicular)" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "caminho (perpendicular)" #: ../src/display/snap-indicator.cpp:115 msgid "path (tangential)" -msgstr "" +msgstr "caminho (tangencial)" #: ../src/display/snap-indicator.cpp:118 -#, fuzzy msgid "path intersection" -msgstr "Intersecção" +msgstr "interseção dos caminhos" #: ../src/display/snap-indicator.cpp:121 -#, fuzzy msgid "guide-path intersection" -msgstr "Ajustar às interseções de guias com a grelha" +msgstr "interseção da guia e caminho" #: ../src/display/snap-indicator.cpp:124 -#, fuzzy msgid "clip-path" -msgstr "Definir caminho recortado" +msgstr "caminho-recortado" #: ../src/display/snap-indicator.cpp:127 -#, fuzzy msgid "mask-path" -msgstr "Definir máscara" +msgstr "caminho-máscara" #: ../src/display/snap-indicator.cpp:130 -#, fuzzy msgid "bounding box corner" -msgstr "_Cantos de caixas limitadoras" +msgstr "canto da caixa limitadora" #: ../src/display/snap-indicator.cpp:133 -#, fuzzy msgid "bounding box side" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "lado da caixa limitadora" #: ../src/display/snap-indicator.cpp:136 -#, fuzzy msgid "page border" -msgstr "Cor da borda da página" +msgstr "borda da página" #: ../src/display/snap-indicator.cpp:139 -#, fuzzy msgid "line midpoint" -msgstr "Largura da Linha" +msgstr "ponto central da linha" #: ../src/display/snap-indicator.cpp:142 -#, fuzzy msgid "object midpoint" -msgstr "Objectos" +msgstr "ponto central do objeto" #: ../src/display/snap-indicator.cpp:145 -#, fuzzy msgid "object rotation center" -msgstr "Encontrar objectos no desenho" +msgstr "centro de rotação do objeto" #: ../src/display/snap-indicator.cpp:148 -#, fuzzy msgid "bounding box side midpoint" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "ponto do meio da lateral da caixa limitadora" #: ../src/display/snap-indicator.cpp:151 -#, fuzzy msgid "bounding box midpoint" -msgstr "_Cantos de caixas limitadoras" +msgstr "ponto do meio da caixa limitadora" #: ../src/display/snap-indicator.cpp:154 -#, fuzzy msgid "page corner" -msgstr "Cor da borda da página" +msgstr "canto da página" #: ../src/display/snap-indicator.cpp:157 -#, fuzzy msgid "quadrant point" -msgstr "Aumentar espaçamento entre linhas" +msgstr "ponto quadrante" #: ../src/display/snap-indicator.cpp:161 -#, fuzzy msgid "corner" -msgstr "Esquinas" +msgstr "canto" #: ../src/display/snap-indicator.cpp:164 msgid "text anchor" -msgstr "" +msgstr "âncora do texto" #: ../src/display/snap-indicator.cpp:167 -#, fuzzy msgid "text baseline" -msgstr "Alinhar linhas base do texto" +msgstr "linha base do texto" #: ../src/display/snap-indicator.cpp:170 -#, fuzzy msgid "constrained angle" -msgstr "Rotação (graus)" +msgstr "ângulo restringido" #: ../src/display/snap-indicator.cpp:173 -#, fuzzy msgid "constraint" -msgstr "Constante" +msgstr "restrinção" #: ../src/display/snap-indicator.cpp:187 -#, fuzzy msgid "Bounding box corner" -msgstr "_Cantos de caixas limitadoras" +msgstr "Canto da caixa limitadora" #: ../src/display/snap-indicator.cpp:190 -#, fuzzy msgid "Bounding box midpoint" -msgstr "_Cantos de caixas limitadoras" +msgstr "Ponto central da caixa limitadora" #: ../src/display/snap-indicator.cpp:193 -#, fuzzy msgid "Bounding box side midpoint" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Ponto central do lado da caixa limitadora" #: ../src/display/snap-indicator.cpp:196 ../src/ui/tool/node.cpp:1484 -#, fuzzy msgid "Smooth node" -msgstr "Suavidade" +msgstr "Nó suave" #: ../src/display/snap-indicator.cpp:199 ../src/ui/tool/node.cpp:1483 -#, fuzzy msgid "Cusp node" -msgstr "Levantar nó" +msgstr "Nó afiado" #: ../src/display/snap-indicator.cpp:202 -#, fuzzy msgid "Line midpoint" -msgstr "Largura da Linha" +msgstr "Ponto central da linha" #: ../src/display/snap-indicator.cpp:205 -#, fuzzy msgid "Object midpoint" -msgstr "Objectos" +msgstr "Ponto central do objeto" #: ../src/display/snap-indicator.cpp:208 -#, fuzzy msgid "Object rotation center" -msgstr "Objecto para padrão" +msgstr "Centro de rotação do objeto" #: ../src/display/snap-indicator.cpp:212 -#, fuzzy msgid "Handle" -msgstr "Ângulo" +msgstr "Alça" #: ../src/display/snap-indicator.cpp:215 -#, fuzzy msgid "Path intersection" -msgstr "Intersecção" +msgstr "Interseção de caminhos" #: ../src/display/snap-indicator.cpp:218 -#, fuzzy msgid "Guide" -msgstr "Guias" +msgstr "Guia" #: ../src/display/snap-indicator.cpp:221 -#, fuzzy msgid "Guide origin" -msgstr "Cor da linha guia" +msgstr "Origem da guia" #: ../src/display/snap-indicator.cpp:224 msgid "Convex hull corner" -msgstr "" +msgstr "Canto convexo" #: ../src/display/snap-indicator.cpp:227 msgid "Quadrant point" -msgstr "" +msgstr "Ponto quadrante" #: ../src/display/snap-indicator.cpp:231 -#, fuzzy msgid "Corner" -msgstr "Esquinas" +msgstr "Canto" #: ../src/display/snap-indicator.cpp:234 -#, fuzzy msgid "Text anchor" -msgstr "Entrada de Texto" +msgstr "Âncora de texto" #: ../src/display/snap-indicator.cpp:237 msgid "Multiple of grid spacing" -msgstr "" +msgstr "Múltiplo do espaçamento da grelha" #: ../src/display/snap-indicator.cpp:286 msgid " to " -msgstr "" +msgstr " para " #: ../src/document.cpp:531 #, c-format @@ -5220,14 +4919,13 @@ msgid "New document %d" msgstr "Novo documento %d" #: ../src/document.cpp:536 -#, fuzzy, c-format +#, c-format msgid "Memory document %d" -msgstr "Documento de memória %d" +msgstr "Memória do documento %d" #: ../src/document.cpp:565 -#, fuzzy msgid "Memory document %1" -msgstr "Documento de memória %d" +msgstr "Memória do documento %1" #: ../src/document.cpp:864 #, c-format @@ -5236,12 +4934,12 @@ msgstr "Documento sem nome %d" #: ../src/event-log.cpp:185 msgid "[Unchanged]" -msgstr "[Inalterado]" +msgstr "[Sem alterações]" #. Edit #: ../src/event-log.cpp:371 ../src/event-log.cpp:374 ../src/verbs.cpp:2460 msgid "_Undo" -msgstr "_Desfazer" +msgstr "Desfa_zer" #: ../src/event-log.cpp:381 ../src/event-log.cpp:385 ../src/verbs.cpp:2462 msgid "_Redo" @@ -5261,7 +4959,7 @@ msgstr " localização: " #: ../src/extension/dependency.cpp:258 msgid " string: " -msgstr " frase: " +msgstr " expressão: " #: ../src/extension/dependency.cpp:261 msgid " description: " @@ -5272,9 +4970,8 @@ msgid " (No preferences)" msgstr "(Sem preferências)" #: ../src/extension/effect.h:70 ../src/verbs.cpp:2234 -#, fuzzy msgid "Extensions" -msgstr "Extensão \"" +msgstr "Extensões" #. \FIXME change this #. This is some filler text, needs to change before relase @@ -5290,19 +4987,19 @@ msgstr "" "Uma ou mais extensões não puderam ser " "carregadas\n" "\n" -"As extensões não carregadas foram puladas. O Inkscape irá continuar a rodar " -"normalmente, mas estas extensões não estarão disponíveis. Para maiores " -"detalhes sobre este problema, por favor verifique o log do erro localizado " -"em: " +"As extensões não carregadas foram ignoradas. O Inkscape irá continuar a " +"correr normalmente mas estas extensões não estarão disponíveis. Para mais " +"detalhes sobre este problema, por favor verifique o registo do erro " +"localizado em: " #: ../src/extension/error-file.cpp:67 msgid "Show dialog on startup" -msgstr "Mostrar diálogo ao iniciar" +msgstr "Mostrar janela ao iniciar" #: ../src/extension/execution-env.cpp:136 #, c-format msgid "'%s' working, please wait..." -msgstr "'%s' processando, por favor aguarde..." +msgstr "'%s' a processar, por favor aguarde..." #. static int i = 0; #. std::cout << "Checking module[" << i++ << "]: " << name << std::endl; @@ -5312,24 +5009,24 @@ msgid "" "inx file could have been caused by a faulty installation of Inkscape." msgstr "" " Isto foi causado por um ficheiro .inx impróprio para esta extensão. Um " -"ficheiro .inx impróprio poderia ter sido causado por uma instalação " -"defeituosa do Inkscape." +"ficheiro .inx impróprio pode ter sido causado por uma instalação defeituosa " +"do Inkscape." #: ../src/extension/extension.cpp:277 msgid "the extension is designed for Windows only." -msgstr "" +msgstr "a extensão foi comcebida apenas para o Microsoft Windows." #: ../src/extension/extension.cpp:282 msgid "an ID was not defined for it." -msgstr "um ID não foi definido." +msgstr "não foi definido um identificador (ID) para ele." #: ../src/extension/extension.cpp:286 msgid "there was no name defined for it." -msgstr "não houve nenhum nome definido." +msgstr "não houve nenhum nome definido para ele." #: ../src/extension/extension.cpp:290 msgid "the XML description of it got lost." -msgstr "a sua descrição XML se perdeu." +msgstr "a sua descrição XML foi perdida." #: ../src/extension/extension.cpp:294 msgid "no implementation was defined for the extension." @@ -5351,7 +5048,7 @@ msgstr "\" falha ao carregar porque " #: ../src/extension/extension.cpp:670 #, c-format msgid "Could not create extension error log file '%s'" -msgstr "Não foi possível criar o log de erro da extensão '%s'" +msgstr "Não foi possível criar o relatório de erros da extensão '%s'" #: ../src/extension/extension.cpp:778 #: ../share/extensions/webslicer_create_rect.inx.h:2 @@ -5384,6 +5081,9 @@ msgid "" "Inkscape website or ask on the mailing lists if you have questions regarding " "this extension." msgstr "" +"Neste momento não existe ajuda disponível para esta Extensão. Procure no " +"website do Inkscape ou pergunte nas listas de discussão ou fórum se tiver " +"questões sobre esta extensão." #: ../src/extension/implementation/script.cpp:1108 msgid "" @@ -5398,7 +5098,7 @@ msgstr "" #: ../src/extension/init.cpp:288 msgid "Null external module directory name. Modules will not be loaded." msgstr "" -"Nome de diretório externo do módulo inválido. Os módulos não serão " +"O nome da pasta do módulo externo é inválido. Os módulos não serão " "carregados." #: ../src/extension/init.cpp:302 @@ -5408,8 +5108,8 @@ msgid "" "Modules directory (%s) is unavailable. External modules in that directory " "will not be loaded." msgstr "" -"A pasta de módulos (%s) está indisponível. Módulos externos nesta pasta não " -"serão carregados." +"A pasta de módulos (%s) não está disponível. Os módulos externos nesta pasta " +"não serão carregados." #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:39 msgid "Adaptive Threshold" @@ -5442,7 +5142,7 @@ msgstr "Altura:" #: ../src/widgets/measure-toolbar.cpp:328 #: ../share/extensions/printing_marks.inx.h:12 msgid "Offset:" -msgstr "Offset:" +msgstr "Deslocamento:" #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:47 #: ../src/extension/internal/bitmap/addNoise.cpp:58 @@ -5480,12 +5180,11 @@ msgstr "Offset:" #: ../src/extension/internal/bitmap/unsharpmask.cpp:50 #: ../src/extension/internal/bitmap/wave.cpp:45 msgid "Raster" -msgstr "Rasterizar" +msgstr "Raster" #: ../src/extension/internal/bitmap/adaptiveThreshold.cpp:49 -#, fuzzy msgid "Apply adaptive thresholding to selected bitmap(s)" -msgstr "Aplicar limiar adaptativo para bitmaps(s) seleccionado(s)." +msgstr "Aplicar limiar adaptativo às imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/addNoise.cpp:45 msgid "Add Noise" @@ -5533,9 +5232,8 @@ msgid "Poisson Noise" msgstr "Ruído de Poisson" #: ../src/extension/internal/bitmap/addNoise.cpp:60 -#, fuzzy msgid "Add random noise to selected bitmap(s)" -msgstr "Adicionar ruído aleatório ao(s) bitmap(s) seleccionado(s)." +msgstr "Adicionar ruído aleatório às imagens bitmap selecionadas" # Enevoar, desfocar ou borrar? -- krishna #: ../src/extension/internal/bitmap/blur.cpp:38 @@ -5554,9 +5252,8 @@ msgstr "Desfocar" #: ../src/extension/internal/bitmap/sharpen.cpp:40 #: ../src/extension/internal/bitmap/unsharpmask.cpp:43 #: ../src/ui/dialog/filter-effects-dialog.cpp:2934 -#, fuzzy msgid "Radius:" -msgstr "Raio" +msgstr "Raio:" #: ../src/extension/internal/bitmap/blur.cpp:41 #: ../src/extension/internal/bitmap/charcoal.cpp:41 @@ -5564,22 +5261,20 @@ msgstr "Raio" #: ../src/extension/internal/bitmap/gaussianBlur.cpp:41 #: ../src/extension/internal/bitmap/sharpen.cpp:41 #: ../src/extension/internal/bitmap/unsharpmask.cpp:44 -#, fuzzy msgid "Sigma:" -msgstr "Sigma" +msgstr "Sigma:" #: ../src/extension/internal/bitmap/blur.cpp:47 msgid "Blur selected bitmap(s)" -msgstr "Desfocar bitmap(s) seleccionado(s)" +msgstr "Desfocar imagens bitmaps selecionadas" #: ../src/extension/internal/bitmap/channel.cpp:48 msgid "Channel" msgstr "Canal" #: ../src/extension/internal/bitmap/channel.cpp:50 -#, fuzzy msgid "Layer:" -msgstr "Camada" +msgstr "Camada:" #: ../src/extension/internal/bitmap/channel.cpp:51 #: ../src/extension/internal/bitmap/levelChannel.cpp:55 @@ -5627,9 +5322,8 @@ msgid "Matte Channel" msgstr "Canal Fosco" #: ../src/extension/internal/bitmap/channel.cpp:66 -#, fuzzy msgid "Extract specific channel from image" -msgstr "Extrair um canal específico de uma imagem." +msgstr "Extrair um canal específico de uma imagem" # Não sei se a traducao é essa mesmo... essa é traducao literal - krishna #: ../src/extension/internal/bitmap/charcoal.cpp:38 @@ -5637,21 +5331,19 @@ msgid "Charcoal" msgstr "Carvão" #: ../src/extension/internal/bitmap/charcoal.cpp:47 -#, fuzzy msgid "Apply charcoal stylization to selected bitmap(s)" -msgstr "Aplicar estilização de carvão aos bitmaps seleccionados." +msgstr "Aplicar estilização de carvão às imagens bitmaps selecionadas" #: ../src/extension/internal/bitmap/colorize.cpp:50 #: ../src/extension/internal/filter/color.h:392 msgid "Colorize" -msgstr "Colorizar" +msgstr "Colorir" #: ../src/extension/internal/bitmap/colorize.cpp:58 -#, fuzzy msgid "Colorize selected bitmap(s) with specified color, using given opacity" msgstr "" -"Colorizar bitmap(s) seleccionado(s) com uma cor específica, usando uma dada " -"opacidade." +"Colorir imagens bitmap selecionadas com uma cor específica, usando uma dada " +"opacidade" #: ../src/extension/internal/bitmap/contrast.cpp:40 #: ../src/extension/internal/filter/color.h:1189 @@ -5660,60 +5352,53 @@ msgid "Contrast" msgstr "Contraste" #: ../src/extension/internal/bitmap/contrast.cpp:42 -#, fuzzy msgid "Adjust:" -msgstr "Ajustar matiz" +msgstr "Ajustar:" #: ../src/extension/internal/bitmap/contrast.cpp:48 msgid "Increase or decrease contrast in bitmap(s)" -msgstr "" +msgstr "Aumentar ou diminuir contraste nas imagens bitmap" #: ../src/extension/internal/bitmap/crop.cpp:66 #: ../src/extension/internal/filter/bumps.h:86 #: ../src/extension/internal/filter/bumps.h:315 msgid "Crop" -msgstr "" +msgstr "Recortar" #: ../src/extension/internal/bitmap/crop.cpp:68 msgid "Top (px):" -msgstr "" +msgstr "Cima (px):" #: ../src/extension/internal/bitmap/crop.cpp:69 -#, fuzzy msgid "Bottom (px):" -msgstr "Fundo" +msgstr "Baixo (px):" #: ../src/extension/internal/bitmap/crop.cpp:70 -#, fuzzy msgid "Left (px):" -msgstr "Deslocamentos" +msgstr "Esquerda (px):" #: ../src/extension/internal/bitmap/crop.cpp:71 -#, fuzzy msgid "Right (px):" -msgstr "Direitos:" +msgstr "Direita (px):" #: ../src/extension/internal/bitmap/crop.cpp:77 -#, fuzzy msgid "Crop selected bitmap(s)" -msgstr "Desfocar bitmap(s) seleccionado(s)" +msgstr "Recortar imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/cycleColormap.cpp:37 msgid "Cycle Colormap" -msgstr "Trocar mapa de cores" +msgstr "Circular Mapa de Cores" #: ../src/extension/internal/bitmap/cycleColormap.cpp:39 #: ../src/extension/internal/bitmap/spread.cpp:39 #: ../src/extension/internal/bitmap/unsharpmask.cpp:45 #: ../src/widgets/spray-toolbar.cpp:411 -#, fuzzy msgid "Amount:" -msgstr "Quantidade" +msgstr "Quantidade:" #: ../src/extension/internal/bitmap/cycleColormap.cpp:45 -#, fuzzy msgid "Cycle colormap(s) of selected bitmap(s)" -msgstr "Trocar mapa de cores do(s) bitmap(s) seleccionado(s)." +msgstr "Alternar em círculo mapa de cores nas imagens bitmap selecionadas" # Tradução forçada... ao pé da letra... # - samymn @@ -5722,71 +5407,67 @@ msgid "Despeckle" msgstr "Dessalpicar" #: ../src/extension/internal/bitmap/despeckle.cpp:43 -#, fuzzy msgid "Reduce speckle noise of selected bitmap(s)" -msgstr "Reduzir o ruído salpicado do(s) bitmap(s) seleccionado(s)." +msgstr "Reduzir o ruído salpicado nas imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/edge.cpp:37 msgid "Edge" -msgstr "Limite" +msgstr "Borda" #: ../src/extension/internal/bitmap/edge.cpp:45 -#, fuzzy msgid "Highlight edges of selected bitmap(s)" -msgstr "Acender limites do(s) bitmap(s) seleccionado(s)." +msgstr "Destacar bordas das imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/emboss.cpp:38 msgid "Emboss" -msgstr "Embutir" +msgstr "Alto Relevo" #: ../src/extension/internal/bitmap/emboss.cpp:47 -#, fuzzy msgid "Emboss selected bitmap(s); highlight edges with 3D effect" -msgstr "Embutir bitmap(s) seleccionado(s) -- acender limites com efeito 3D." +msgstr "" +"Efeito de alto relevo nas imagens bitmap selecionadas; destacar bordas com " +"efeito 3D" #: ../src/extension/internal/bitmap/enhance.cpp:35 msgid "Enhance" msgstr "Realçar" #: ../src/extension/internal/bitmap/enhance.cpp:42 -#, fuzzy msgid "Enhance selected bitmap(s); minimize noise" -msgstr "Otimizar o(s) bitmap(s) seleccionado(s) -- minimizar ruído." +msgstr "" +"Realçar os detalhes das imagens bitmap selecionadas; reduzir o ruído das " +"imagens" #: ../src/extension/internal/bitmap/equalize.cpp:35 msgid "Equalize" msgstr "Equalizar" #: ../src/extension/internal/bitmap/equalize.cpp:42 -#, fuzzy msgid "Equalize selected bitmap(s); histogram equalization" -msgstr "Equalizar bitmap(s) seleccionado(s) -- equalização por histograma." +msgstr "Equalizar histograma nas imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/gaussianBlur.cpp:38 #: ../src/filter-enums.cpp:29 msgid "Gaussian Blur" -msgstr "Desfocagem gaussiana" +msgstr "Desfocagem Gaussiana" #: ../src/extension/internal/bitmap/gaussianBlur.cpp:40 #: ../src/extension/internal/bitmap/implode.cpp:39 #: ../src/extension/internal/bitmap/solarize.cpp:41 -#, fuzzy msgid "Factor:" -msgstr "Fator" +msgstr "Fator:" #: ../src/extension/internal/bitmap/gaussianBlur.cpp:47 -#, fuzzy msgid "Gaussian blur selected bitmap(s)" -msgstr "Aplicar desfocagem gaussiana no(s) bitmap(s) seleccionado(s)." +msgstr "Aplicar desfocagem gaussiana nas imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/implode.cpp:37 msgid "Implode" msgstr "Implodir" #: ../src/extension/internal/bitmap/implode.cpp:45 -#, fuzzy msgid "Implode selected bitmap(s)" -msgstr "Implodir bitmap(s) seleccionado(s)." +msgstr "Implodir imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/level.cpp:41 #: ../src/extension/internal/filter/color.h:817 @@ -5798,32 +5479,28 @@ msgstr "Nível" #: ../src/extension/internal/bitmap/level.cpp:43 #: ../src/extension/internal/bitmap/levelChannel.cpp:65 -#, fuzzy msgid "Black Point:" -msgstr "Ponto Negro" +msgstr "Ponto Preto:" #: ../src/extension/internal/bitmap/level.cpp:44 #: ../src/extension/internal/bitmap/levelChannel.cpp:66 -#, fuzzy msgid "White Point:" -msgstr "Ponto Branco" +msgstr "Ponto Branco:" #: ../src/extension/internal/bitmap/level.cpp:45 #: ../src/extension/internal/bitmap/levelChannel.cpp:67 -#, fuzzy msgid "Gamma Correction:" -msgstr "Correção Gama" +msgstr "Correção da Gama:" # Preciso que alguém revise isso -- krishna # É isso mesmo? -- samymn #: ../src/extension/internal/bitmap/level.cpp:51 -#, fuzzy msgid "" "Level selected bitmap(s) by scaling values falling between the given ranges " "to the full color range" msgstr "" -"Nivela o(s) bitmap(s) seleccionado(s) modificando os valores que caem entre " -"os intervalos dados para todo o espectro de cores." +"Nivela as imagens bitmap selecionadas redimensionando os valores que se " +"encontram entre os intervalos fornecidos e todo o espectro de cores." #: ../src/extension/internal/bitmap/levelChannel.cpp:52 msgid "Level (with Channel)" @@ -5831,93 +5508,81 @@ msgstr "Nível (com Canal)" #: ../src/extension/internal/bitmap/levelChannel.cpp:54 #: ../src/extension/internal/filter/color.h:711 -#, fuzzy msgid "Channel:" -msgstr "Canais:" +msgstr "Canal:" # Preciso que alguém dê uma olhada nisso -- krishna #: ../src/extension/internal/bitmap/levelChannel.cpp:73 -#, fuzzy msgid "" "Level the specified channel of selected bitmap(s) by scaling values falling " "between the given ranges to the full color range" msgstr "" -"Nivela o canal especificado do(s) bitmap(s) seleccionado(s)ao escalar os " -"valores que caem entre os intervalos dados para o intervalo de cor completo." +"Nivela o canal especificado nas imagens bitmap selecionadas ao redimensionar " +"os valores que caem entre os intervalos dados para o intervalo de cor total" #: ../src/extension/internal/bitmap/medianFilter.cpp:37 -#, fuzzy msgid "Median" -msgstr "Médio" +msgstr "Médiana" #: ../src/extension/internal/bitmap/medianFilter.cpp:45 -#, fuzzy msgid "" "Replace each pixel component with the median color in a circular neighborhood" msgstr "" -"Filtra o(s) bitmap(s) seleccionados, substituindo cada componente do pixel " -"pela cor média de uma vizinhança circular." +"Substitui cada componente de píxel com a cor média numa área circular de " +"píxeis vizinhos" #: ../src/extension/internal/bitmap/modulate.cpp:40 -#, fuzzy msgid "HSB Adjust" -msgstr "Ajustar matiz" +msgstr "Ajuste HSL" #: ../src/extension/internal/bitmap/modulate.cpp:42 -#, fuzzy msgid "Hue:" -msgstr "Matiz" +msgstr "Matiz:" #: ../src/extension/internal/bitmap/modulate.cpp:43 -#, fuzzy msgid "Saturation:" -msgstr "Saturação" +msgstr "Saturação:" #: ../src/extension/internal/bitmap/modulate.cpp:44 -#, fuzzy msgid "Brightness:" -msgstr "Luminosidade" +msgstr "Luminosidade:" #: ../src/extension/internal/bitmap/modulate.cpp:50 -#, fuzzy msgid "" "Adjust the amount of hue, saturation, and brightness in selected bitmap(s)" msgstr "" -"Modula percentagens de matiz, saturação e luminosidade do(s) bitmap(s) " -"seleccionado(s)." +"Ajusta a quantidade de matiz, saturação e luminosidade nas imagens bitmap " +"selecionadas" #: ../src/extension/internal/bitmap/negate.cpp:36 msgid "Negate" msgstr "Obter negativo" #: ../src/extension/internal/bitmap/negate.cpp:43 -#, fuzzy msgid "Negate (take inverse) selected bitmap(s)" -msgstr "Obter negativo do(s) bitmaps(s) seleccionado(s)." +msgstr "inverter as imagens bitmap selecionadas" #: ../src/extension/internal/bitmap/normalize.cpp:36 msgid "Normalize" msgstr "Normalizar" #: ../src/extension/internal/bitmap/normalize.cpp:43 -#, fuzzy msgid "" "Normalize selected bitmap(s), expanding color range to the full possible " "range of color" msgstr "" -"Normaliza o(s) bitmap(s) seleccionado(s), expandindo o intervalo de cores " -"para o intervalo completo possível de cor." +"Normaliza as imagens bitmap selecionadas, expandindo o intervalo de cores " +"para máximo possível do intervalo de cores" #: ../src/extension/internal/bitmap/oilPaint.cpp:37 msgid "Oil Paint" msgstr "Pintura a Óleo" #: ../src/extension/internal/bitmap/oilPaint.cpp:45 -#, fuzzy msgid "Stylize selected bitmap(s) so that they appear to be painted with oils" msgstr "" -"Estiliza o(s) bitmap(s) seleccionado(s) para que eles pareçam pintados com " -"tinta a óleo." +"Estiliza as imagens bitmaps selecionadas para que pareçam pintadas com tinta " +"a óleo" #: ../src/extension/internal/bitmap/opacity.cpp:38 #: ../src/extension/internal/filter/blurs.h:333 @@ -5928,17 +5593,16 @@ msgstr "" msgid "Opacity" msgstr "Opacidade" +# Por uma questão de coerência e claridade do texto, optou-se por usar sempre "transparência" em vez de "opacidade" #: ../src/extension/internal/bitmap/opacity.cpp:40 #: ../src/ui/dialog/filter-effects-dialog.cpp:2924 #: ../src/ui/dialog/objects.cpp:1629 ../src/widgets/dropper-toolbar.cpp:83 -#, fuzzy msgid "Opacity:" -msgstr "Opacidade" +msgstr "Transparência:" #: ../src/extension/internal/bitmap/opacity.cpp:46 -#, fuzzy msgid "Modify opacity channel(s) of selected bitmap(s)" -msgstr "Modifica o(s) canal(is) de opacidade do(s) bitmap(s) seleccionado(s)." +msgstr "Altera os canais de opacidade nas imagens bitmaps selecionadas" #: ../src/extension/internal/bitmap/raise.cpp:40 msgid "Raise" @@ -5949,16 +5613,15 @@ msgid "Raised" msgstr "Levantado" #: ../src/extension/internal/bitmap/raise.cpp:50 -#, fuzzy msgid "" "Alter lightness the edges of selected bitmap(s) to create a raised appearance" msgstr "" -"Ilumina alternadamente as bordas do(s) bitmap(s) seleccionado(s) para criar " -"uma impressão de que ele foi levantado." +"Altera a luminosidade das bordas as imagens bitmaps selecionadas para criar " +"a aparência que está levantada" #: ../src/extension/internal/bitmap/reduceNoise.cpp:40 msgid "Reduce Noise" -msgstr "Reduzir ruído" +msgstr "Reduzir Ruído" #. Paint order #. TRANSLATORS: Paint order determines the order the 'fill', 'stroke', and 'markers are painted. @@ -5967,95 +5630,84 @@ msgstr "Reduzir ruído" #: ../share/extensions/jessyInk_effects.inx.h:3 #: ../share/extensions/jessyInk_view.inx.h:3 #: ../share/extensions/lindenmayer.inx.h:5 -#, fuzzy msgid "Order:" -msgstr "Ordenar" +msgstr "Ordem:" #: ../src/extension/internal/bitmap/reduceNoise.cpp:48 -#, fuzzy msgid "" "Reduce noise in selected bitmap(s) using a noise peak elimination filter" msgstr "" -"Reduz o ruído em no(s) bitmap(s) seleccionado(s) usando um filtro de " -"eliminação de picos de ruído." +"Reduz o ruído nas imagens bitmaps selecionadas usando um filtro de " +"eliminação de picos de ruído" #: ../src/extension/internal/bitmap/sample.cpp:39 -#, fuzzy msgid "Resample" -msgstr "Amostra" +msgstr "Reamostra" #: ../src/extension/internal/bitmap/sample.cpp:48 -#, fuzzy msgid "" "Alter the resolution of selected image by resizing it to the given pixel size" msgstr "" -"Altera a resolução da imagem selecionada redimensionando-a pelos valores " -"dados." +"Altera a resolução da imagem selecionada redimensionando-a pelo tamanho em " +"píxeis indicado" #: ../src/extension/internal/bitmap/shade.cpp:40 msgid "Shade" msgstr "Sombra" #: ../src/extension/internal/bitmap/shade.cpp:42 -#, fuzzy msgid "Azimuth:" -msgstr "Azimute" +msgstr "Azimute:" #: ../src/extension/internal/bitmap/shade.cpp:43 -#, fuzzy msgid "Elevation:" -msgstr "Elevação" +msgstr "Elevação:" #: ../src/extension/internal/bitmap/shade.cpp:44 msgid "Colored Shading" -msgstr "Sombreamento colorido" +msgstr "Sombreamento Colorido" #: ../src/extension/internal/bitmap/shade.cpp:50 -#, fuzzy msgid "Shade selected bitmap(s) simulating distant light source" msgstr "" -"Sombrear bitmap(s) seleccionado(s) simulando uma fonte de luz distante." +"Sombrear as imagens bitmaps selecionadas simulando uma fonte de luz distante" #: ../src/extension/internal/bitmap/sharpen.cpp:47 -#, fuzzy msgid "Sharpen selected bitmap(s)" -msgstr "Focar bitmap(s) seleccionado(s)." +msgstr "Aumentar nitidez nas imagens bitmaps selecionadas" #: ../src/extension/internal/bitmap/solarize.cpp:39 #: ../src/extension/internal/filter/color.h:1569 #: ../src/extension/internal/filter/color.h:1573 msgid "Solarize" -msgstr "Ensolarar" +msgstr "Solarizar" #: ../src/extension/internal/bitmap/solarize.cpp:47 -#, fuzzy msgid "Solarize selected bitmap(s), like overexposing photographic film" msgstr "" -"Solariza o(s) bitmap(s) seleccionado(s), como em uma fotografia superexposta" +"Solariza as imagens bitmaps selecionadas, como numa película de fotografia " +"sobrexposta" #: ../src/extension/internal/bitmap/spread.cpp:37 -#, fuzzy msgid "Dither" -msgstr "Outro" +msgstr "Dispersão" #: ../src/extension/internal/bitmap/spread.cpp:45 -#, fuzzy msgid "" "Randomly scatter pixels in selected bitmap(s), within the given radius of " "the original position" msgstr "" -"Espalha pixels aleatoriamente no(s) bitmap(s) seleccionado(s), com o raio " -"'quantidade'" +"Dispersa píxeis aleatoriamente nas imagens bitmaps selecionadas, dentro do " +"raio da posição original" #: ../src/extension/internal/bitmap/swirl.cpp:39 msgid "Degrees:" msgstr "Graus:" #: ../src/extension/internal/bitmap/swirl.cpp:45 -#, fuzzy msgid "Swirl selected bitmap(s) around center point" msgstr "" -"Fazer espiral com bitmap(s) seleccionado(s) em redor de um ponto central." +"Fazer espiral nas imagens bitmaps selecionadas em redor de um ponto central" #. TRANSLATORS: see http://docs.gimp.org/en/gimp-tool-threshold.html #: ../src/extension/internal/bitmap/threshold.cpp:38 @@ -6069,39 +5721,34 @@ msgid "Threshold:" msgstr "Limiar:" #: ../src/extension/internal/bitmap/threshold.cpp:46 -#, fuzzy msgid "Threshold selected bitmap(s)" -msgstr "Aplica limiar ao(s) bitmap(s) seleccionado(s)." +msgstr "Aplica limiar às imagens bitmaps selecionadas" #: ../src/extension/internal/bitmap/unsharpmask.cpp:41 msgid "Unsharp Mask" -msgstr "Máscara de desaguçar" +msgstr "Máscara de Nitidez" #: ../src/extension/internal/bitmap/unsharpmask.cpp:52 -#, fuzzy msgid "Sharpen selected bitmap(s) using unsharp mask algorithms" msgstr "" -"Realça a nitidez do(s) bitmap(s) seleccionado(s) usando algoritmos de " -"máscara de desaguçar." +"Aumenta a nitidez das imagens bitmaps selecionadas usando algoritmos de " +"máscara de nitidez." #: ../src/extension/internal/bitmap/wave.cpp:38 msgid "Wave" msgstr "Onda" #: ../src/extension/internal/bitmap/wave.cpp:40 -#, fuzzy msgid "Amplitude:" -msgstr "Amplitude" +msgstr "Amplitude:" #: ../src/extension/internal/bitmap/wave.cpp:41 -#, fuzzy msgid "Wavelength:" -msgstr "Comprimento de onda" +msgstr "Comprimento de onda:" #: ../src/extension/internal/bitmap/wave.cpp:47 -#, fuzzy msgid "Alter selected bitmap(s) along sine wave" -msgstr "Altera bitmap(s) seleccionado(s) através de onda sinoidal." +msgstr "Altera as imagens bitmaps selecionadas ao longo de uma onda sinoidal" #: ../src/extension/internal/bluredge.cpp:132 msgid "Inset/Outset Halo" @@ -6112,13 +5759,12 @@ msgid "Width in px of the halo" msgstr "Largura em px do halo" #: ../src/extension/internal/bluredge.cpp:135 -#, fuzzy msgid "Number of steps:" -msgstr "Número de passos" +msgstr "Número de passos:" #: ../src/extension/internal/bluredge.cpp:135 msgid "Number of inset/outset copies of the object to make" -msgstr "Número de cópias internas/externas do objecto geradas" +msgstr "Número de cópias internas/externas do objeto a fazer" #: ../src/extension/internal/bluredge.cpp:139 #: ../share/extensions/extrude.inx.h:5 @@ -6128,49 +5774,43 @@ msgstr "Número de cópias internas/externas do objecto geradas" #: ../share/extensions/pathscatter.inx.h:20 #: ../share/extensions/voronoi2svg.inx.h:18 msgid "Generate from Path" -msgstr "Gerar do caminho" +msgstr "Gerar do Caminho" #: ../src/extension/internal/cairo-ps-out.cpp:327 #: ../share/extensions/ps_input.inx.h:3 -#, fuzzy msgid "PostScript" -msgstr "Postscript" +msgstr "PostScript" #: ../src/extension/internal/cairo-ps-out.cpp:329 #: ../src/extension/internal/cairo-ps-out.cpp:371 msgid "Restrict to PS level:" -msgstr "" +msgstr "Restringir ao nível do PostScript:" #: ../src/extension/internal/cairo-ps-out.cpp:330 #: ../src/extension/internal/cairo-ps-out.cpp:372 -#, fuzzy msgid "PostScript level 3" -msgstr "Ficheiro Postscript" +msgstr "Postscript nível 3" #: ../src/extension/internal/cairo-ps-out.cpp:331 #: ../src/extension/internal/cairo-ps-out.cpp:373 -#, fuzzy msgid "PostScript level 2" -msgstr "Ficheiro Postscript" +msgstr "Postscript nível 2" #: ../src/extension/internal/cairo-ps-out.cpp:333 #: ../src/extension/internal/cairo-ps-out.cpp:375 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:250 -#, fuzzy msgid "Text output options:" -msgstr "Orientação da página:" +msgstr "Opções de saída de texto:" #: ../src/extension/internal/cairo-ps-out.cpp:334 #: ../src/extension/internal/cairo-ps-out.cpp:376 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:251 -#, fuzzy msgid "Embed fonts" -msgstr "Embutir imagens" +msgstr "Embutir fontes" #: ../src/extension/internal/cairo-ps-out.cpp:335 #: ../src/extension/internal/cairo-ps-out.cpp:377 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:252 -#, fuzzy msgid "Convert text to paths" msgstr "Converter textos em caminhos" @@ -6178,109 +5818,96 @@ msgstr "Converter textos em caminhos" #: ../src/extension/internal/cairo-ps-out.cpp:378 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:253 msgid "Omit text in PDF and create LaTeX file" -msgstr "" +msgstr "Omitir texto no PDF e criar um ficheiro LaTeX" #: ../src/extension/internal/cairo-ps-out.cpp:338 #: ../src/extension/internal/cairo-ps-out.cpp:380 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:255 -#, fuzzy msgid "Rasterize filter effects" -msgstr "Administrar efeitos de filtro SVG" +msgstr "Efeitos de filtro de rasterização" #: ../src/extension/internal/cairo-ps-out.cpp:339 #: ../src/extension/internal/cairo-ps-out.cpp:381 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:256 -#, fuzzy msgid "Resolution for rasterization (dpi):" -msgstr "Resolução preferida para a figura (pontos por polegada)" +msgstr "Resolução para rasterização (dpi):" #: ../src/extension/internal/cairo-ps-out.cpp:340 #: ../src/extension/internal/cairo-ps-out.cpp:382 -#, fuzzy msgid "Output page size" -msgstr "Definir tamanho da página" +msgstr "Tamanho da página de saída" #: ../src/extension/internal/cairo-ps-out.cpp:341 #: ../src/extension/internal/cairo-ps-out.cpp:383 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:258 -#, fuzzy msgid "Use document's page size" -msgstr "Definir tamanho da página" +msgstr "Usar tamanho da página do documento" #: ../src/extension/internal/cairo-ps-out.cpp:342 #: ../src/extension/internal/cairo-ps-out.cpp:384 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:259 msgid "Use exported object's size" -msgstr "" +msgstr "Usar tamanho do objeto exportado" #: ../src/extension/internal/cairo-ps-out.cpp:344 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:261 -#, fuzzy msgid "Bleed/margin (mm):" -msgstr "Sangrar (in)" +msgstr "Sangria/margem (mm):" #: ../src/extension/internal/cairo-ps-out.cpp:345 #: ../src/extension/internal/cairo-ps-out.cpp:387 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:262 msgid "Limit export to the object with ID:" -msgstr "" +msgstr "Limitar exportação ao objeto com o ID:" #: ../src/extension/internal/cairo-ps-out.cpp:349 #: ../share/extensions/ps_input.inx.h:2 -#, fuzzy msgid "PostScript (*.ps)" -msgstr "Postscript (*.ps)" +msgstr "PostScript (*.ps)" #: ../src/extension/internal/cairo-ps-out.cpp:350 -#, fuzzy msgid "PostScript File" -msgstr "Ficheiro Postscript" +msgstr "Ficheiro PostScript" #: ../src/extension/internal/cairo-ps-out.cpp:369 #: ../share/extensions/eps_input.inx.h:3 -#, fuzzy msgid "Encapsulated PostScript" -msgstr "Encapsulated Postscript" +msgstr "PostScript Encapsulado" #: ../src/extension/internal/cairo-ps-out.cpp:386 -#, fuzzy msgid "Bleed/margin (mm)" -msgstr "Sangrar (in)" +msgstr "Sangria/margem (mm)" #: ../src/extension/internal/cairo-ps-out.cpp:391 #: ../share/extensions/eps_input.inx.h:2 -#, fuzzy msgid "Encapsulated PostScript (*.eps)" -msgstr "Postscript Encapsulado (*.eps)" +msgstr "PostScript Encapsulado (*.eps)" #: ../src/extension/internal/cairo-ps-out.cpp:392 -#, fuzzy msgid "Encapsulated PostScript File" -msgstr "Ficheiro Postscript Encapsulado" +msgstr "Ficheiro PostScript Encapsulado" #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:244 msgid "Restrict to PDF version:" -msgstr "" +msgstr "Restringir à versão PDF:" #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:246 msgid "PDF 1.5" -msgstr "" +msgstr "PDF 1.5" #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:248 msgid "PDF 1.4" -msgstr "" +msgstr "PDF 1.4" #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:257 -#, fuzzy msgid "Output page size:" -msgstr "Definir tamanho da página" +msgstr "Tamanho da página de saída:" #. Dialog settings #: ../src/extension/internal/cdr-input.cpp:103 #: ../src/extension/internal/vsd-input.cpp:105 -#, fuzzy msgid "Page Selector" -msgstr "Seletor" +msgstr "Selecionador de Página" #. Labels #: ../src/extension/internal/cdr-input.cpp:127 @@ -6295,61 +5922,59 @@ msgstr "Selecionar página:" #: ../src/extension/internal/vsd-input.cpp:138 #, c-format msgid "out of %i" -msgstr "de %i" +msgstr "de um total de %i" #: ../src/extension/internal/cdr-input.cpp:293 msgid "Corel DRAW Input" -msgstr "" +msgstr "Importar Corel DRAW" #: ../src/extension/internal/cdr-input.cpp:298 msgid "Corel DRAW 7-X4 files (*.cdr)" -msgstr "" +msgstr "Corel DRAW 7-X4 (*.cdr)" #: ../src/extension/internal/cdr-input.cpp:299 -#, fuzzy msgid "Open files saved in Corel DRAW 7-X4" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros gravados no Corel DRAW 7-X4" #: ../src/extension/internal/cdr-input.cpp:306 msgid "Corel DRAW templates input" -msgstr "" +msgstr "Importar Corel DRAW template" #: ../src/extension/internal/cdr-input.cpp:311 msgid "Corel DRAW 7-13 template files (*.cdt)" -msgstr "" +msgstr "Corel DRAW 7-13 template (*.cdt)" #: ../src/extension/internal/cdr-input.cpp:312 -#, fuzzy msgid "Open files saved in Corel DRAW 7-13" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros gravados no Corel DRAW 7-13" #: ../src/extension/internal/cdr-input.cpp:319 msgid "Corel DRAW Compressed Exchange files input" -msgstr "" +msgstr "Importar Corel DRAW Compressed Exchange" #: ../src/extension/internal/cdr-input.cpp:324 msgid "Corel DRAW Compressed Exchange files (*.ccx)" -msgstr "" +msgstr "Corel DRAW Compressed Exchange - ficheiros (*.ccx)" #: ../src/extension/internal/cdr-input.cpp:325 msgid "Open compressed exchange files saved in Corel DRAW" -msgstr "" +msgstr "Abrir ficheiros compressed exchange gravados no Corel DRAW" #: ../src/extension/internal/cdr-input.cpp:332 msgid "Corel DRAW Presentation Exchange files input" -msgstr "" +msgstr "Importar Corel DRAW Presentation Exchange" #: ../src/extension/internal/cdr-input.cpp:337 msgid "Corel DRAW Presentation Exchange files (*.cmx)" -msgstr "" +msgstr "Corel DRAW Presentation Exchange - ficheiros (*.cmx)" #: ../src/extension/internal/cdr-input.cpp:338 msgid "Open presentation exchange files saved in Corel DRAW" -msgstr "" +msgstr "Abrir ficheiros presentation exchange gravados no Corel DRAW" #: ../src/extension/internal/emf-inout.cpp:3601 msgid "EMF Input" -msgstr "Entrada EMF" +msgstr "Importar EMF" #: ../src/extension/internal/emf-inout.cpp:3606 msgid "Enhanced Metafiles (*.emf)" @@ -6361,7 +5986,7 @@ msgstr "Enhanced Metafiles" #: ../src/extension/internal/emf-inout.cpp:3615 msgid "EMF Output" -msgstr "Saída EMF" +msgstr "Exportar em EMF" #: ../src/extension/internal/emf-inout.cpp:3617 #: ../src/extension/internal/wmf-inout.cpp:3196 @@ -6371,95 +5996,87 @@ msgstr "Converter textos em caminhos" #: ../src/extension/internal/emf-inout.cpp:3618 #: ../src/extension/internal/wmf-inout.cpp:3197 msgid "Map Unicode to Symbol font" -msgstr "" +msgstr "Mapa Unicode para fonte Símbolo" #: ../src/extension/internal/emf-inout.cpp:3619 #: ../src/extension/internal/wmf-inout.cpp:3198 msgid "Map Unicode to Wingdings" -msgstr "" +msgstr "Mapa Unicode para Wingdings" #: ../src/extension/internal/emf-inout.cpp:3620 #: ../src/extension/internal/wmf-inout.cpp:3199 msgid "Map Unicode to Zapf Dingbats" -msgstr "" +msgstr "Mapa Unicode para Zapf Dingbats" #: ../src/extension/internal/emf-inout.cpp:3621 #: ../src/extension/internal/wmf-inout.cpp:3200 msgid "Use MS Unicode PUA (0xF020-0xF0FF) for converted characters" -msgstr "" +msgstr "Usar MS Unicode PUA (0xF020-0xF0FF) para caracteres convertidos" #: ../src/extension/internal/emf-inout.cpp:3622 #: ../src/extension/internal/wmf-inout.cpp:3201 msgid "Compensate for PPT font bug" -msgstr "" +msgstr "Compensar o erro de fonte PPT" #: ../src/extension/internal/emf-inout.cpp:3623 #: ../src/extension/internal/wmf-inout.cpp:3202 msgid "Convert dashed/dotted lines to single lines" -msgstr "" +msgstr "Converter linhas tracejadas/pontilhadas em linhas únicas" #: ../src/extension/internal/emf-inout.cpp:3624 #: ../src/extension/internal/wmf-inout.cpp:3203 -#, fuzzy msgid "Convert gradients to colored polygon series" -msgstr "Alterar cor da parada do degradê" +msgstr "Converter gradientes em série de polígonos coloridos" #: ../src/extension/internal/emf-inout.cpp:3625 -#, fuzzy msgid "Use native rectangular linear gradients" -msgstr "Criar degradê linear" +msgstr "Usar gradientes lineares retangulares nativos" #: ../src/extension/internal/emf-inout.cpp:3626 msgid "Map all fill patterns to standard EMF hatches" -msgstr "" +msgstr "Mapear todos os padrões do preenchimento para escotilhas EMF padrão" #: ../src/extension/internal/emf-inout.cpp:3627 -#, fuzzy msgid "Ignore image rotations" -msgstr "Orientação da página:" +msgstr "Ignorar imagens que tenham sido rodadas" #: ../src/extension/internal/emf-inout.cpp:3631 msgid "Enhanced Metafile (*.emf)" -msgstr "Meta-ficheiro otimizado (*.emf)" +msgstr "Enhanced Metafile (*.emf)" #: ../src/extension/internal/emf-inout.cpp:3632 msgid "Enhanced Metafile" -msgstr "Meta-ficheiro otimizad" +msgstr "Enhanced Metafile" #: ../src/extension/internal/filter/bevels.h:53 -#, fuzzy msgid "Diffuse Light" -msgstr "Iluminação Difusa" +msgstr "Luz Difusa" #: ../src/extension/internal/filter/bevels.h:55 #: ../src/extension/internal/filter/bevels.h:135 #: ../src/extension/internal/filter/bevels.h:219 #: ../src/extension/internal/filter/paint.h:89 #: ../src/extension/internal/filter/paint.h:340 -#, fuzzy msgid "Smoothness" msgstr "Suavidade" #: ../src/extension/internal/filter/bevels.h:56 #: ../src/extension/internal/filter/bevels.h:137 #: ../src/extension/internal/filter/bevels.h:221 -#, fuzzy msgid "Elevation (°)" -msgstr "Elevação" +msgstr "Elevação (°)" #: ../src/extension/internal/filter/bevels.h:57 #: ../src/extension/internal/filter/bevels.h:138 #: ../src/extension/internal/filter/bevels.h:222 -#, fuzzy msgid "Azimuth (°)" -msgstr "Azimute" +msgstr "Azimute (°)" #: ../src/extension/internal/filter/bevels.h:58 #: ../src/extension/internal/filter/bevels.h:139 #: ../src/extension/internal/filter/bevels.h:223 -#, fuzzy msgid "Lighting color" -msgstr "Cor de _destaque:" +msgstr "Cor da luz" #: ../src/extension/internal/filter/bevels.h:62 #: ../src/extension/internal/filter/bevels.h:143 @@ -6520,90 +6137,81 @@ msgstr "Filtros" #: ../src/extension/internal/filter/bevels.h:66 msgid "Basic diffuse bevel to use for building textures" -msgstr "" +msgstr "Biselado difuso básico para criar texturas" #: ../src/extension/internal/filter/bevels.h:133 -#, fuzzy msgid "Matte Jelly" -msgstr "Canal Fosco" +msgstr "Geleia Fosca" #: ../src/extension/internal/filter/bevels.h:136 #: ../src/extension/internal/filter/bevels.h:220 #: ../src/extension/internal/filter/blurs.h:187 #: ../src/extension/internal/filter/color.h:75 -#, fuzzy msgid "Brightness" -msgstr "Luminosidade" +msgstr "Brilho" #: ../src/extension/internal/filter/bevels.h:147 msgid "Bulging, matte jelly covering" -msgstr "" +msgstr "Cobertura de geleia fosca saliente" #: ../src/extension/internal/filter/bevels.h:217 -#, fuzzy msgid "Specular Light" -msgstr "Iluminação Especular" +msgstr "Luz Especular" #: ../src/extension/internal/filter/blurs.h:56 #: ../src/extension/internal/filter/blurs.h:189 #: ../src/extension/internal/filter/blurs.h:329 #: ../src/extension/internal/filter/distort.h:73 -#, fuzzy msgid "Horizontal blur" -msgstr "_Horizontal" +msgstr "Desfocagem horizontal" #: ../src/extension/internal/filter/blurs.h:57 #: ../src/extension/internal/filter/blurs.h:190 #: ../src/extension/internal/filter/blurs.h:330 #: ../src/extension/internal/filter/distort.h:74 -#, fuzzy msgid "Vertical blur" -msgstr "_Vertical" +msgstr "Desfocagem vertical" #: ../src/extension/internal/filter/blurs.h:58 -#, fuzzy msgid "Blur content only" -msgstr "_Modo misturar:" +msgstr "Desfocar apenas conteúdo (não sai para fora do caminho)" #: ../src/extension/internal/filter/blurs.h:66 msgid "Simple vertical and horizontal blur effect" -msgstr "" +msgstr "Efeito simples de desfocagem vertical e horizontal" #: ../src/extension/internal/filter/blurs.h:125 -#, fuzzy msgid "Clean Edges" -msgstr "Escurecer" +msgstr "Limpar Bordas" #: ../src/extension/internal/filter/blurs.h:127 #: ../src/extension/internal/filter/blurs.h:262 #: ../src/extension/internal/filter/paint.h:237 #: ../src/extension/internal/filter/paint.h:336 #: ../src/extension/internal/filter/paint.h:341 -#, fuzzy msgid "Strength" -msgstr "Tamanho do passo (px)" +msgstr "Força" #: ../src/extension/internal/filter/blurs.h:135 msgid "" "Removes or decreases glows and jaggeries around objects edges after applying " "some filters" msgstr "" +"Remove ou diminui auréolas e estragos à volta das bordas dos objetos após " +"aplicar alguns filtros" #: ../src/extension/internal/filter/blurs.h:185 -#, fuzzy msgid "Cross Blur" -msgstr "Desfocagem gaussiana" +msgstr "Desfocagem Cruzada" #: ../src/extension/internal/filter/blurs.h:188 -#, fuzzy msgid "Fading" -msgstr "Espaçamento" +msgstr "Esvanecimento" #: ../src/extension/internal/filter/blurs.h:191 #: ../src/extension/internal/filter/textures.h:74 -#, fuzzy msgid "Blend:" -msgstr "Misturar" +msgstr "Mistura:" #: ../src/extension/internal/filter/blurs.h:192 #: ../src/extension/internal/filter/blurs.h:339 @@ -6618,7 +6226,6 @@ msgstr "Misturar" #: ../src/extension/internal/filter/paint.h:705 #: ../src/extension/internal/filter/transparency.h:63 #: ../src/filter-enums.cpp:55 -#, fuzzy msgid "Darken" msgstr "Escurecer" @@ -6654,7 +6261,6 @@ msgstr "Ecrã" #: ../src/extension/internal/filter/paint.h:701 #: ../src/extension/internal/filter/transparency.h:60 #: ../src/filter-enums.cpp:53 -#, fuzzy msgid "Multiply" msgstr "Multiplicar" @@ -6670,27 +6276,24 @@ msgstr "Multiplicar" #: ../src/extension/internal/filter/paint.h:704 #: ../src/extension/internal/filter/transparency.h:64 #: ../src/filter-enums.cpp:56 -#, fuzzy msgid "Lighten" -msgstr "Iluminar" +msgstr "Clarear" #: ../src/extension/internal/filter/blurs.h:204 -#, fuzzy msgid "Combine vertical and horizontal blur" -msgstr "Mover nós horizontalmente" +msgstr "Combinar desfocado vertical e horizontal" #: ../src/extension/internal/filter/blurs.h:260 -#, fuzzy msgid "Feather" -msgstr "Metro" +msgstr "Polimento" #: ../src/extension/internal/filter/blurs.h:270 msgid "Blurred mask on the edge without altering the contents" -msgstr "" +msgstr "Máscara desfocada na borda sem alterar os conteúdos" #: ../src/extension/internal/filter/blurs.h:325 msgid "Out of Focus" -msgstr "" +msgstr "Fora de Foco" #: ../src/extension/internal/filter/blurs.h:331 #: ../src/extension/internal/filter/distort.h:75 @@ -6698,9 +6301,8 @@ msgstr "" #: ../src/extension/internal/filter/paint.h:235 #: ../src/extension/internal/filter/paint.h:342 #: ../src/extension/internal/filter/paint.h:346 -#, fuzzy msgid "Dilatation" -msgstr "Saturação" +msgstr "Dilatação" #: ../src/extension/internal/filter/blurs.h:332 #: ../src/extension/internal/filter/distort.h:76 @@ -6711,22 +6313,20 @@ msgstr "Saturação" #: ../src/extension/internal/filter/paint.h:347 #: ../src/extension/internal/filter/transparency.h:208 #: ../src/extension/internal/filter/transparency.h:282 -#, fuzzy msgid "Erosion" -msgstr "Posição:" +msgstr "Erosão" #: ../src/extension/internal/filter/blurs.h:336 #: ../src/extension/internal/filter/color.h:1280 #: ../src/extension/internal/filter/color.h:1392 #: ../src/ui/dialog/document-properties.cpp:123 msgid "Background color" -msgstr "Cor de plano de fundo" +msgstr "Cor do fundo" #: ../src/extension/internal/filter/blurs.h:337 #: ../src/extension/internal/filter/bumps.h:129 -#, fuzzy msgid "Blend type:" -msgstr " tipo: " +msgstr "Tipo de mistura:" #: ../src/extension/internal/filter/blurs.h:338 #: ../src/extension/internal/filter/bumps.h:130 @@ -6748,38 +6348,31 @@ msgid "Normal" msgstr "Normal" #: ../src/extension/internal/filter/blurs.h:344 -#, fuzzy msgid "Blend to background" -msgstr "Remover fundo" +msgstr "Misturar para o fundo" #: ../src/extension/internal/filter/blurs.h:354 msgid "Blur eroded by white or transparency" -msgstr "" +msgstr "Desfocagem com erosão de branco ou transparência" #: ../src/extension/internal/filter/bumps.h:80 -#, fuzzy msgid "Bump" -msgstr "Bias" +msgstr "Saliência" #: ../src/extension/internal/filter/bumps.h:84 #: ../src/extension/internal/filter/bumps.h:313 -#, fuzzy msgid "Image simplification" -msgstr "" -"%s não é uma pasta válida.\n" -"%s" +msgstr "Simplificação de imagem" #: ../src/extension/internal/filter/bumps.h:85 #: ../src/extension/internal/filter/bumps.h:314 -#, fuzzy msgid "Bump simplification" -msgstr "Limiar de simplificação:" +msgstr "Simplificação de saliência" #: ../src/extension/internal/filter/bumps.h:87 #: ../src/extension/internal/filter/bumps.h:316 -#, fuzzy msgid "Bump source" -msgstr "Bias" +msgstr "Fonte da saliência" #: ../src/extension/internal/filter/bumps.h:88 #: ../src/extension/internal/filter/bumps.h:317 @@ -6791,7 +6384,7 @@ msgstr "Bias" #: ../src/ui/widget/color-icc-selector.cpp:176 #: ../src/ui/widget/color-scales.cpp:385 ../src/ui/widget/color-scales.cpp:386 msgid "Red" -msgstr "Vermelho" +msgstr "Canal Vermelho" #: ../src/extension/internal/filter/bumps.h:89 #: ../src/extension/internal/filter/bumps.h:318 @@ -6803,7 +6396,7 @@ msgstr "Vermelho" #: ../src/ui/widget/color-icc-selector.cpp:177 #: ../src/ui/widget/color-scales.cpp:388 ../src/ui/widget/color-scales.cpp:389 msgid "Green" -msgstr "Verde" +msgstr "Canal Verde" #: ../src/extension/internal/filter/bumps.h:90 #: ../src/extension/internal/filter/bumps.h:319 @@ -6816,27 +6409,23 @@ msgstr "Verde" #: ../src/ui/widget/color-scales.cpp:391 ../src/ui/widget/color-scales.cpp:392 #: ../share/extensions/nicechart.inx.h:34 msgid "Blue" -msgstr "Azul" +msgstr "Canal Azul" #: ../src/extension/internal/filter/bumps.h:91 -#, fuzzy msgid "Bump from background" -msgstr "Remover fundo" +msgstr "Saliência a partir do fundo" #: ../src/extension/internal/filter/bumps.h:94 -#, fuzzy msgid "Lighting type:" -msgstr " tipo: " +msgstr "Tipo de luz:" #: ../src/extension/internal/filter/bumps.h:95 -#, fuzzy msgid "Specular" -msgstr "Exponente Especular" +msgstr "Especular" #: ../src/extension/internal/filter/bumps.h:96 -#, fuzzy msgid "Diffuse" -msgstr "Iluminação Difusa" +msgstr "Difuso" #: ../src/extension/internal/filter/bumps.h:98 #: ../src/extension/internal/filter/bumps.h:329 @@ -6859,29 +6448,25 @@ msgstr "Altura:" #: ../src/ui/widget/color-scales.cpp:417 ../src/ui/widget/color-scales.cpp:418 #: ../src/widgets/tweak-toolbar.cpp:318 msgid "Lightness" -msgstr "Brilho" +msgstr "Luminosidade" #: ../src/extension/internal/filter/bumps.h:100 #: ../src/extension/internal/filter/bumps.h:331 #: ../src/widgets/measure-toolbar.cpp:302 -#, fuzzy msgid "Precision" msgstr "Precisão" #: ../src/extension/internal/filter/bumps.h:103 -#, fuzzy msgid "Light source" -msgstr "Fonte de Luz:" +msgstr "Fonte de luz" #: ../src/extension/internal/filter/bumps.h:104 -#, fuzzy msgid "Light source:" -msgstr "Fonte de Luz:" +msgstr "Fonte de luz:" #: ../src/extension/internal/filter/bumps.h:105 -#, fuzzy msgid "Distant" -msgstr "Divisor" +msgstr "Distante" #: ../src/extension/internal/filter/bumps.h:106 #: ../src/ui/dialog/inkscape-preferences.cpp:470 @@ -6890,12 +6475,11 @@ msgstr "Ponto" #: ../src/extension/internal/filter/bumps.h:107 msgid "Spot" -msgstr "" +msgstr "Foco" #: ../src/extension/internal/filter/bumps.h:109 -#, fuzzy msgid "Distant light options" -msgstr "Luz Distante" +msgstr "Opções de luz distante" #: ../src/extension/internal/filter/bumps.h:110 #: ../src/extension/internal/filter/bumps.h:332 @@ -6910,81 +6494,67 @@ msgid "Elevation" msgstr "Elevação" #: ../src/extension/internal/filter/bumps.h:112 -#, fuzzy msgid "Point light options" -msgstr "Apontar Luz" +msgstr "Opções do ponto de luz" #: ../src/extension/internal/filter/bumps.h:113 #: ../src/extension/internal/filter/bumps.h:117 -#, fuzzy msgid "X location" -msgstr " localização: " +msgstr "Localização X" #: ../src/extension/internal/filter/bumps.h:114 #: ../src/extension/internal/filter/bumps.h:118 -#, fuzzy msgid "Y location" -msgstr " localização: " +msgstr "Localização Y" #: ../src/extension/internal/filter/bumps.h:115 #: ../src/extension/internal/filter/bumps.h:119 -#, fuzzy msgid "Z location" -msgstr " localização: " +msgstr "Localização Z" #: ../src/extension/internal/filter/bumps.h:116 -#, fuzzy msgid "Spot light options" -msgstr "Lugar de Luz" +msgstr "Opções do foco de luz" #: ../src/extension/internal/filter/bumps.h:120 -#, fuzzy msgid "X target" -msgstr "Alvo:" +msgstr "Alvo X" #: ../src/extension/internal/filter/bumps.h:121 -#, fuzzy msgid "Y target" -msgstr "Alvo:" +msgstr "Alvo Y" #: ../src/extension/internal/filter/bumps.h:122 -#, fuzzy msgid "Z target" -msgstr "Alvo:" +msgstr "Alvo Z" #: ../src/extension/internal/filter/bumps.h:123 -#, fuzzy msgid "Specular exponent" -msgstr "Exponente Especular" +msgstr "Exponente especular" #: ../src/extension/internal/filter/bumps.h:124 -#, fuzzy msgid "Cone angle" -msgstr "Ângulo de Cone" +msgstr "Ângulo do cone" #: ../src/extension/internal/filter/bumps.h:127 -#, fuzzy msgid "Image color" -msgstr "Colar cor" +msgstr "Cor da imagem" #: ../src/extension/internal/filter/bumps.h:128 -#, fuzzy msgid "Color bump" -msgstr "Cor" +msgstr "Saliência de cor" #: ../src/extension/internal/filter/bumps.h:145 msgid "All purposes bump filter" -msgstr "" +msgstr "Filtro de saliência para todos os fins" #: ../src/extension/internal/filter/bumps.h:309 -#, fuzzy msgid "Wax Bump" -msgstr "Bias" +msgstr "Saliência de Cera" #: ../src/extension/internal/filter/bumps.h:320 -#, fuzzy msgid "Background:" -msgstr "Plano de fundo:" +msgstr "Fundo:" #: ../src/extension/internal/filter/bumps.h:322 #: ../src/extension/internal/filter/transparency.h:57 @@ -6993,50 +6563,42 @@ msgid "Image" msgstr "Imagem" #: ../src/extension/internal/filter/bumps.h:323 -#, fuzzy msgid "Blurred image" -msgstr "Embutir imagens" +msgstr "Imagem desfocada" #: ../src/extension/internal/filter/bumps.h:325 -#, fuzzy msgid "Background opacity" -msgstr "Alfa de Fundo" +msgstr "Opacidade do fundo" #: ../src/extension/internal/filter/bumps.h:327 #: ../src/extension/internal/filter/color.h:1115 -#, fuzzy msgid "Lighting" -msgstr "Iluminar" +msgstr "Iluminação" #: ../src/extension/internal/filter/bumps.h:334 -#, fuzzy msgid "Lighting blend:" -msgstr "Desenho cancelado" +msgstr "Mistura de luminosidade:" #: ../src/extension/internal/filter/bumps.h:341 -#, fuzzy msgid "Highlight blend:" -msgstr "Cor de _destaque:" +msgstr "Mistura de altas luzes:" #: ../src/extension/internal/filter/bumps.h:350 -#, fuzzy msgid "Bump color" -msgstr "Soltar cor" +msgstr "Saliência de cor" #: ../src/extension/internal/filter/bumps.h:351 -#, fuzzy msgid "Revert bump" -msgstr "Re_verter" +msgstr "Saliência revertida" #: ../src/extension/internal/filter/bumps.h:352 -#, fuzzy msgid "Transparency type:" -msgstr "0 (transparente)" +msgstr "Tipo de transparência" #: ../src/extension/internal/filter/bumps.h:353 #: ../src/extension/internal/filter/morphology.h:176 ../src/filter-enums.cpp:91 msgid "Atop" -msgstr "Atop" +msgstr "Por Cima Cortado por Dentro (atop)" #: ../src/extension/internal/filter/bumps.h:354 #: ../src/extension/internal/filter/distort.h:70 @@ -7046,15 +6608,14 @@ msgstr "Dentro" #: ../src/extension/internal/filter/bumps.h:365 msgid "Turns an image to jelly" -msgstr "" +msgstr "Torna uma imagem em geleia" #: ../src/extension/internal/filter/color.h:73 msgid "Brilliance" -msgstr "" +msgstr "Brilho, Saturação, Luminosidade" #: ../src/extension/internal/filter/color.h:76 #: ../src/extension/internal/filter/color.h:1492 -#, fuzzy msgid "Over-saturation" msgstr "Saturação" @@ -7065,19 +6626,16 @@ msgstr "Saturação" #: ../src/extension/internal/filter/paint.h:502 #: ../src/extension/internal/filter/transparency.h:136 #: ../src/extension/internal/filter/transparency.h:210 -#, fuzzy msgid "Inverted" -msgstr "Inverter" +msgstr "Invertido" #: ../src/extension/internal/filter/color.h:86 -#, fuzzy msgid "Brightness filter" -msgstr "Níveis do brilho" +msgstr "Filtro de brilho" #: ../src/extension/internal/filter/color.h:153 -#, fuzzy msgid "Channel Painting" -msgstr "Pintura a Óleo" +msgstr "Pintura de Canal" #: ../src/extension/internal/filter/color.h:157 #: ../src/extension/internal/filter/color.h:332 @@ -7095,104 +6653,93 @@ msgstr "Saturação" #: ../src/extension/internal/filter/transparency.h:135 #: ../src/filter-enums.cpp:131 ../src/ui/tools/flood-tool.cpp:97 msgid "Alpha" -msgstr "Alfa" +msgstr "Transparência" #: ../src/extension/internal/filter/color.h:175 -#, fuzzy msgid "Replace RGB by any color" -msgstr "Substituir cor..." +msgstr "Substituir RBG por qualquer cor" #: ../src/extension/internal/filter/color.h:254 -#, fuzzy msgid "Color Blindness" -msgstr "Cor das linhas guias" +msgstr "Teste de Daltonismo" #: ../src/extension/internal/filter/color.h:258 -#, fuzzy msgid "Blindness type:" -msgstr " tipo: " +msgstr "Tipo de daltonismo:" #: ../src/extension/internal/filter/color.h:259 msgid "Rod monochromacy (atypical achromatopsia)" -msgstr "" +msgstr "Monocromacia bastonete (acromatopsia atípica)" #: ../src/extension/internal/filter/color.h:260 msgid "Cone monochromacy (typical achromatopsia)" -msgstr "" +msgstr "Monocromacia cone (acromatopsia típica)" #: ../src/extension/internal/filter/color.h:261 msgid "Green weak (deuteranomaly)" -msgstr "" +msgstr "Verde fraco (deuteranomalia)" #: ../src/extension/internal/filter/color.h:262 msgid "Green blind (deuteranopia)" -msgstr "" +msgstr "Verde cego (deuteranopia)" #: ../src/extension/internal/filter/color.h:263 msgid "Red weak (protanomaly)" -msgstr "" +msgstr "Vermelho fraco (protanomalia)" #: ../src/extension/internal/filter/color.h:264 msgid "Red blind (protanopia)" -msgstr "" +msgstr "Vermelho cego (protanopia)" #: ../src/extension/internal/filter/color.h:265 msgid "Blue weak (tritanomaly)" -msgstr "" +msgstr "Azul fraco (tritanomalia)" #: ../src/extension/internal/filter/color.h:266 msgid "Blue blind (tritanopia)" -msgstr "" +msgstr "Azul cego (tritanopia)" #: ../src/extension/internal/filter/color.h:286 -#, fuzzy msgid "Simulate color blindness" -msgstr "Simular saída na Ecrã" +msgstr "Simular daltonismo" #: ../src/extension/internal/filter/color.h:329 -#, fuzzy msgid "Color Shift" -msgstr "Sombreamento colorido" +msgstr "Desvio da Cor" #: ../src/extension/internal/filter/color.h:331 -#, fuzzy msgid "Shift (°)" -msgstr "D_eslocamento" +msgstr "Desvio (°)" #: ../src/extension/internal/filter/color.h:340 msgid "Rotate and desaturate hue" -msgstr "" +msgstr "Rodar e desaturar matiz" #: ../src/extension/internal/filter/color.h:396 -#, fuzzy msgid "Harsh light" -msgstr "Altura da Barra:" +msgstr "Luz dura" #: ../src/extension/internal/filter/color.h:397 -#, fuzzy msgid "Normal light" -msgstr "Tipografia normal" +msgstr "Luz suave" #: ../src/extension/internal/filter/color.h:398 -#, fuzzy msgid "Duotone" -msgstr "Fundo" +msgstr "Dois tons" #: ../src/extension/internal/filter/color.h:399 #: ../src/extension/internal/filter/color.h:1487 -#, fuzzy msgid "Blend 1:" -msgstr "Misturar" +msgstr "Mistura 1:" #: ../src/extension/internal/filter/color.h:406 #: ../src/extension/internal/filter/color.h:1493 -#, fuzzy msgid "Blend 2:" -msgstr "Misturar" +msgstr "Mistura 2:" #: ../src/extension/internal/filter/color.h:425 msgid "Blend image or object with a flood color" -msgstr "" +msgstr "Misturar imagem ou objeto com uma indunação de cor" #: ../src/extension/internal/filter/color.h:499 ../src/filter-enums.cpp:23 msgid "Component Transfer" @@ -7225,62 +6772,52 @@ msgid "Gamma" msgstr "Gama" #: ../src/extension/internal/filter/color.h:515 -#, fuzzy msgid "Basic component transfer structure" -msgstr "Transferência de Componente" +msgstr "Estrutura de transferência de componente básica" #: ../src/extension/internal/filter/color.h:584 -#, fuzzy msgid "Duochrome" -msgstr "Combinar" +msgstr "Dicromia (2 cores)" #: ../src/extension/internal/filter/color.h:588 -#, fuzzy msgid "Fluorescence level" -msgstr "Presença" +msgstr "Nível de fluorescência" #: ../src/extension/internal/filter/color.h:589 msgid "Swap:" -msgstr "" +msgstr "Trocar:" #: ../src/extension/internal/filter/color.h:590 msgid "No swap" -msgstr "" +msgstr "Sem troca" #: ../src/extension/internal/filter/color.h:591 -#, fuzzy msgid "Color and alpha" -msgstr "Gerenciamento de cor" +msgstr "Cor e transparência" #: ../src/extension/internal/filter/color.h:592 -#, fuzzy msgid "Color only" -msgstr "Cor das linhas guias" +msgstr "Apenas a cor" #: ../src/extension/internal/filter/color.h:593 -#, fuzzy msgid "Alpha only" -msgstr "Alfa" +msgstr "Apenas a transparência" #: ../src/extension/internal/filter/color.h:597 -#, fuzzy msgid "Color 1" -msgstr "Cor" +msgstr "Cor 1" #: ../src/extension/internal/filter/color.h:600 -#, fuzzy msgid "Color 2" -msgstr "Cor" +msgstr "Cor 2" #: ../src/extension/internal/filter/color.h:610 -#, fuzzy msgid "Convert luminance values to a duochrome palette" -msgstr "Selecionar cores de uma paleta modelo" +msgstr "Converter valores de luminosidade numa palete de 2 cores" #: ../src/extension/internal/filter/color.h:709 -#, fuzzy msgid "Extract Channel" -msgstr "Canal de Opacidade" +msgstr "Extrair Canal" #: ../src/extension/internal/filter/color.h:715 #: ../src/ui/widget/color-icc-selector.cpp:190 @@ -7304,29 +6841,24 @@ msgid "Yellow" msgstr "Amarelo" #: ../src/extension/internal/filter/color.h:719 -#, fuzzy msgid "Background blend mode:" -msgstr "Cor de plano de fundo" +msgstr "Modo de mistura do fundo:" #: ../src/extension/internal/filter/color.h:724 -#, fuzzy msgid "Channel to alpha" -msgstr "Luminância para Alfa" +msgstr "Canal para transparência" #: ../src/extension/internal/filter/color.h:732 -#, fuzzy msgid "Extract color channel as a transparent image" -msgstr "Extrair um canal específico de uma imagem." +msgstr "Extrair canal de cor como imagem transparente" #: ../src/extension/internal/filter/color.h:815 -#, fuzzy msgid "Fade to Black or White" -msgstr "Inverter regiões pretas e brancas para traçados simples" +msgstr "Esvanecer para Preto ou Branco" #: ../src/extension/internal/filter/color.h:818 -#, fuzzy msgid "Fade to:" -msgstr "Escurecer:" +msgstr "Esvanecer para:" #: ../src/extension/internal/filter/color.h:819 #: ../src/ui/widget/color-icc-selector.cpp:193 @@ -7341,25 +6873,22 @@ msgid "White" msgstr "Branco" #: ../src/extension/internal/filter/color.h:829 -#, fuzzy msgid "Fade to black or white" -msgstr "Inverter regiões pretas e brancas para traçados simples" +msgstr "Esvanecer para preto ou branco" #: ../src/extension/internal/filter/color.h:894 -#, fuzzy msgid "Greyscale" msgstr "Escala de cinzas" #: ../src/extension/internal/filter/color.h:900 #: ../src/extension/internal/filter/paint.h:83 #: ../src/extension/internal/filter/paint.h:239 -#, fuzzy msgid "Transparent" -msgstr "0 (transparente)" +msgstr "Transparente" #: ../src/extension/internal/filter/color.h:908 msgid "Customize greyscale components" -msgstr "" +msgstr "Personalizar os componentes da escala de cinzas" #: ../src/extension/internal/filter/color.h:980 #: ../src/ui/widget/selected-style.cpp:267 @@ -7367,63 +6896,54 @@ msgid "Invert" msgstr "Inverter" #: ../src/extension/internal/filter/color.h:982 -#, fuzzy msgid "Invert channels:" -msgstr "Inverter" +msgstr "Canais de inversão:" #: ../src/extension/internal/filter/color.h:983 -#, fuzzy msgid "No inversion" -msgstr "Novo Nesta Versão" +msgstr "Sem inversão" #: ../src/extension/internal/filter/color.h:984 -#, fuzzy msgid "Red and blue" -msgstr "Canal Vermelho" +msgstr "Vermelho e azul" #: ../src/extension/internal/filter/color.h:985 -#, fuzzy msgid "Red and green" -msgstr "Criar e editar degradês" +msgstr "Vermelho e verde" #: ../src/extension/internal/filter/color.h:986 -#, fuzzy msgid "Green and blue" -msgstr "Canal Verde" +msgstr "Verde e azul" #: ../src/extension/internal/filter/color.h:988 -#, fuzzy msgid "Light transparency" -msgstr "0 (transparente)" +msgstr "Transparência da luz" #: ../src/extension/internal/filter/color.h:989 -#, fuzzy msgid "Invert hue" -msgstr "Inverter" +msgstr "Inverter matiz" #: ../src/extension/internal/filter/color.h:990 -#, fuzzy msgid "Invert lightness" -msgstr "Inverter imagem" +msgstr "Inverter luminosidade" #: ../src/extension/internal/filter/color.h:991 -#, fuzzy msgid "Invert transparency" -msgstr "0 (transparente)" +msgstr "Inverter transparência" #: ../src/extension/internal/filter/color.h:999 msgid "Manage hue, lightness and transparency inversions" msgstr "" +"Permite inverter canais de cores, matiz, luminosidade e transparência de " +"forma independente" #: ../src/extension/internal/filter/color.h:1117 -#, fuzzy msgid "Lights" -msgstr "Direitos:" +msgstr "Luzes" #: ../src/extension/internal/filter/color.h:1118 -#, fuzzy msgid "Shadows" -msgstr "Sombra" +msgstr "Sombras" #: ../src/extension/internal/filter/color.h:1119 #: ../src/extension/internal/filter/paint.h:356 ../src/filter-enums.cpp:33 @@ -7433,29 +6953,27 @@ msgstr "Sombra" #: ../src/widgets/gradient-toolbar.cpp:1159 #: ../src/widgets/measure-toolbar.cpp:328 msgid "Offset" -msgstr "Deslocamentos" +msgstr "Deslocamento" #: ../src/extension/internal/filter/color.h:1127 msgid "Modify lights and shadows separately" -msgstr "" +msgstr "Alterar luzes e sombras separadamente" #: ../src/extension/internal/filter/color.h:1186 -#, fuzzy msgid "Lightness-Contrast" -msgstr "Brilho" +msgstr "Luminosidade-Contraste" #: ../src/extension/internal/filter/color.h:1197 msgid "Modify lightness and contrast separately" -msgstr "" +msgstr "Alterar luminosidade e contraste separadamente" #: ../src/extension/internal/filter/color.h:1265 msgid "Nudge RGB" -msgstr "" +msgstr "Deslocar e alterar cores RGB" #: ../src/extension/internal/filter/color.h:1269 -#, fuzzy msgid "Red offset" -msgstr "Padrão de Tipografia" +msgstr "Delocamento do vermelho" #: ../src/extension/internal/filter/color.h:1270 #: ../src/extension/internal/filter/color.h:1273 @@ -7475,59 +6993,54 @@ msgstr "X" #: ../src/extension/internal/filter/color.h:1386 #: ../src/extension/internal/filter/color.h:1389 #: ../src/ui/dialog/input.cpp:1616 ../src/ui/widget/page-sizer.cpp:248 -#, fuzzy msgid "Y" -msgstr "Y:" +msgstr "Y" #: ../src/extension/internal/filter/color.h:1272 -#, fuzzy msgid "Green offset" -msgstr "Padrão de Tipografia" +msgstr "Delocamento do verde" #: ../src/extension/internal/filter/color.h:1275 -#, fuzzy msgid "Blue offset" -msgstr "Valore(s)" +msgstr "Delocamento do azul" #: ../src/extension/internal/filter/color.h:1290 msgid "" "Nudge RGB channels separately and blend them to different types of " "backgrounds" msgstr "" +"Desviar canais RGB separadamente e misturá-los com tipos diferentes de fundo" #: ../src/extension/internal/filter/color.h:1377 msgid "Nudge CMY" -msgstr "" +msgstr "Deslocar e alterar cores CMY" #: ../src/extension/internal/filter/color.h:1381 -#, fuzzy msgid "Cyan offset" -msgstr "Padrão de Tipografia" +msgstr "Delocamento do ciano" #: ../src/extension/internal/filter/color.h:1384 -#, fuzzy msgid "Magenta offset" -msgstr "Tipografia tangencial" +msgstr "Delocamento do magenta" #: ../src/extension/internal/filter/color.h:1387 -#, fuzzy msgid "Yellow offset" -msgstr "Padrão de Tipografia" +msgstr "Delocamento do amarelo" #: ../src/extension/internal/filter/color.h:1402 msgid "" "Nudge CMY channels separately and blend them to different types of " "backgrounds" msgstr "" +"Ajustar canais CMY separadamente e misturá-los com tipos diferentes de fundo" #: ../src/extension/internal/filter/color.h:1483 msgid "Quadritone fantasy" -msgstr "" +msgstr "Fantasia de 4 tons" #: ../src/extension/internal/filter/color.h:1485 -#, fuzzy msgid "Hue distribution (°)" -msgstr "Usar distribuição normal" +msgstr "Distribuição de matiz (°)" #: ../src/extension/internal/filter/color.h:1486 #: ../share/extensions/svgcalendar.inx.h:19 @@ -7535,88 +7048,76 @@ msgid "Colors" msgstr "Cores" #: ../src/extension/internal/filter/color.h:1507 -#, fuzzy msgid "Replace hue by two colors" -msgstr "Substituir cor..." +msgstr "Substituir matiz por 2 cores" #: ../src/extension/internal/filter/color.h:1571 -#, fuzzy msgid "Hue rotation (°)" -msgstr "Rotação (graus)" +msgstr "Rotação de matiz (°)" #: ../src/extension/internal/filter/color.h:1574 -#, fuzzy msgid "Moonarize" -msgstr "Colorizar" +msgstr "Lunarizar" #: ../src/extension/internal/filter/color.h:1583 msgid "Classic photographic solarization effect" -msgstr "" +msgstr "Efeito fotográfico clássico de solarização" #: ../src/extension/internal/filter/color.h:1656 -#, fuzzy msgid "Tritone" -msgstr "Título" +msgstr "Três tons" #: ../src/extension/internal/filter/color.h:1662 -#, fuzzy msgid "Enhance hue" -msgstr "Realçar" +msgstr "Realçar matiz" #: ../src/extension/internal/filter/color.h:1663 -#, fuzzy msgid "Phosphorescence" -msgstr "Presença" +msgstr "Fosforescência" #: ../src/extension/internal/filter/color.h:1664 -#, fuzzy msgid "Colored nights" -msgstr "Sombreamento colorido" +msgstr "Luzes coloridas" #: ../src/extension/internal/filter/color.h:1665 -#, fuzzy msgid "Hue to background" -msgstr "Remover fundo" +msgstr "Matiz para o fundo" #: ../src/extension/internal/filter/color.h:1667 -#, fuzzy msgid "Global blend:" -msgstr "Configurações da página" +msgstr "Mistura global:" #: ../src/extension/internal/filter/color.h:1673 -#, fuzzy msgid "Glow" -msgstr "Soltar cor" +msgstr "Auréola" #: ../src/extension/internal/filter/color.h:1674 msgid "Glow blend:" -msgstr "" +msgstr "Mistura da auréola:" #: ../src/extension/internal/filter/color.h:1679 -#, fuzzy msgid "Local light" -msgstr "Iluminação Especular" +msgstr "Luz local" #: ../src/extension/internal/filter/color.h:1680 -#, fuzzy msgid "Global light" -msgstr "Configurações da página" +msgstr "Luz global" #: ../src/extension/internal/filter/color.h:1683 -#, fuzzy msgid "Hue distribution (°):" -msgstr "Usar distribuição normal" +msgstr "Distribuição da matiz (°):" #: ../src/extension/internal/filter/color.h:1694 msgid "" "Create a custom tritone palette with additional glow, blend modes and hue " "moving" msgstr "" +"Criar uma paleta tricolor personalizada com aurélula adicional, modos de " +"mistura e matiz a mover-se" #: ../src/extension/internal/filter/distort.h:67 -#, fuzzy msgid "Felt Feather" -msgstr "Metro" +msgstr "Polimento de Fletro" #: ../src/extension/internal/filter/distort.h:71 #: ../src/extension/internal/filter/morphology.h:175 ../src/filter-enums.cpp:90 @@ -7632,32 +7133,28 @@ msgstr "Traço:" #: ../src/extension/internal/filter/distort.h:79 #: ../src/extension/internal/filter/textures.h:76 -#, fuzzy msgid "Wide" -msgstr "_Ocultar" +msgstr "Grosso" #: ../src/extension/internal/filter/distort.h:80 #: ../src/extension/internal/filter/textures.h:78 -#, fuzzy msgid "Narrow" -msgstr "Abai_xar" +msgstr "Fino" #: ../src/extension/internal/filter/distort.h:81 msgid "No fill" msgstr "Sem preenchimento" #: ../src/extension/internal/filter/distort.h:83 -#, fuzzy msgid "Turbulence:" -msgstr "Turbulência" +msgstr "Turbulência:" #: ../src/extension/internal/filter/distort.h:84 #: ../src/extension/internal/filter/distort.h:193 #: ../src/extension/internal/filter/overlays.h:61 #: ../src/extension/internal/filter/paint.h:692 -#, fuzzy msgid "Fractal noise" -msgstr "Ruído Fractal" +msgstr "Ruído fractal" #: ../src/extension/internal/filter/distort.h:85 #: ../src/extension/internal/filter/distort.h:194 @@ -7671,134 +7168,118 @@ msgstr "Turbulência" #: ../src/extension/internal/filter/distort.h:196 #: ../src/extension/internal/filter/paint.h:93 #: ../src/extension/internal/filter/paint.h:695 -#, fuzzy msgid "Horizontal frequency" -msgstr "Desvio Horizontal" +msgstr "Frequência horizontal" #: ../src/extension/internal/filter/distort.h:88 #: ../src/extension/internal/filter/distort.h:197 #: ../src/extension/internal/filter/paint.h:94 #: ../src/extension/internal/filter/paint.h:696 -#, fuzzy msgid "Vertical frequency" -msgstr "Freqüência Base" +msgstr "Frequência vertical" #: ../src/extension/internal/filter/distort.h:89 #: ../src/extension/internal/filter/distort.h:198 #: ../src/extension/internal/filter/paint.h:95 #: ../src/extension/internal/filter/paint.h:697 -#, fuzzy msgid "Complexity" -msgstr "Composição" +msgstr "Complexidade" #: ../src/extension/internal/filter/distort.h:90 #: ../src/extension/internal/filter/distort.h:199 #: ../src/extension/internal/filter/paint.h:96 #: ../src/extension/internal/filter/paint.h:698 -#, fuzzy msgid "Variation" -msgstr "Saturação" +msgstr "Variação" #: ../src/extension/internal/filter/distort.h:91 #: ../src/extension/internal/filter/distort.h:200 -#, fuzzy msgid "Intensity" -msgstr "Intersecção" +msgstr "Intensidade" #: ../src/extension/internal/filter/distort.h:99 msgid "Blur and displace edges of shapes and pictures" -msgstr "" +msgstr "Desfocar e deslocar bordas das formas geométricas e imagens" #: ../src/extension/internal/filter/distort.h:190 #: ../src/live_effects/effect.cpp:142 -#, fuzzy msgid "Roughen" -msgstr "Modo áspero" +msgstr "Rugoso" #: ../src/extension/internal/filter/distort.h:192 #: ../src/extension/internal/filter/overlays.h:60 #: ../src/extension/internal/filter/paint.h:691 #: ../src/extension/internal/filter/textures.h:64 -#, fuzzy msgid "Turbulence type:" -msgstr "Turbulência" +msgstr "Tipo de turbulência:" #: ../src/extension/internal/filter/distort.h:208 -#, fuzzy msgid "Small-scale roughening to edges and content" -msgstr "Ampliar canto arredondados em retângulos" +msgstr "" +"Semelhante a ver através de um vidro fosco/martelado, torna levemente rugoso " +"as bordas e o conteúdo" #: ../src/extension/internal/filter/filter-file.cpp:34 -#, fuzzy msgid "Bundled" -msgstr "Arredondado" +msgstr "Empacotado" #: ../src/extension/internal/filter/filter-file.cpp:35 msgid "Personal" -msgstr "" +msgstr "Pessoal" #: ../src/extension/internal/filter/filter-file.cpp:47 -#, fuzzy msgid "Null external module directory name. Filters will not be loaded." msgstr "" -"Nome de diretório externo do módulo inválido. Os módulos não serão " +"O nome da pasta do módulo externo não é válido. Os filtros não serão " "carregados." #: ../src/extension/internal/filter/image.h:49 -#, fuzzy msgid "Edge Detect" -msgstr "Detecção de bordas" +msgstr "Deteção de Bordas" #: ../src/extension/internal/filter/image.h:51 msgid "Detect:" -msgstr "" +msgstr "Detetar:" #: ../src/extension/internal/filter/image.h:52 #: ../src/ui/dialog/template-load-tab.cpp:107 #: ../src/ui/dialog/template-load-tab.cpp:144 -#, fuzzy msgid "All" -msgstr "Tabela" +msgstr "Tudo" #: ../src/extension/internal/filter/image.h:53 -#, fuzzy msgid "Vertical lines" -msgstr "Espaçamento Vertical" +msgstr "Linhas verticais" #: ../src/extension/internal/filter/image.h:54 -#, fuzzy msgid "Horizontal lines" -msgstr " Horizontal" +msgstr "Linhas horizontais" #: ../src/extension/internal/filter/image.h:57 -#, fuzzy msgid "Invert colors" -msgstr "Fazer com que os conectores evitem os objectos seleccionados" +msgstr "Inverter cores" #: ../src/extension/internal/filter/image.h:65 msgid "Detect color edges in object" -msgstr "" +msgstr "Detetar bordas das cores no objeto" #: ../src/extension/internal/filter/morphology.h:58 -#, fuzzy msgid "Cross-smooth" -msgstr "suave" +msgstr "Suavidade cruzada" #: ../src/extension/internal/filter/morphology.h:61 #: ../src/extension/internal/filter/shadows.h:66 -#, fuzzy msgid "Inner" -msgstr "Raio interno:" +msgstr "Dentro" #: ../src/extension/internal/filter/morphology.h:62 #: ../src/extension/internal/filter/shadows.h:65 msgid "Outer" -msgstr "" +msgstr "Fora" #: ../src/extension/internal/filter/morphology.h:63 -#, fuzzy msgid "Open" -msgstr "_Abrir..." +msgstr "Aberto" #: ../src/extension/internal/filter/morphology.h:65 #: ../src/libgdl/gdl-dock-placeholder.c:167 ../src/libgdl/gdl-dock.c:191 @@ -7810,38 +7291,33 @@ msgstr "Largura" #: ../src/extension/internal/filter/morphology.h:69 #: ../src/extension/internal/filter/morphology.h:190 -#, fuzzy msgid "Antialiasing" -msgstr "Simular saída na Ecrã" +msgstr "Anti-serrilhado" #: ../src/extension/internal/filter/morphology.h:70 -#, fuzzy msgid "Blur content" -msgstr "_Modo misturar:" +msgstr "Desfocar conteúdo" #: ../src/extension/internal/filter/morphology.h:79 msgid "Smooth edges and angles of shapes" -msgstr "" +msgstr "Suavizar bordas e ângulos das formas geométricas" #: ../src/extension/internal/filter/morphology.h:166 -#, fuzzy msgid "Outline" -msgstr "_Contorno" +msgstr "Contorno" +# significa aplicar também ao preenchimento e não só ao traço #: ../src/extension/internal/filter/morphology.h:170 -#, fuzzy msgid "Fill image" -msgstr "Embutir Todas as Imagens" +msgstr "Aplicar também ao preenchimento" #: ../src/extension/internal/filter/morphology.h:171 -#, fuzzy msgid "Hide image" -msgstr "Ocultar Camada" +msgstr "Ocultar imagem" #: ../src/extension/internal/filter/morphology.h:172 -#, fuzzy msgid "Composite type:" -msgstr "Composição" +msgstr "Tipo de composição:" #: ../src/extension/internal/filter/morphology.h:173 ../src/filter-enums.cpp:88 msgid "Over" @@ -7859,49 +7335,40 @@ msgid "Position:" msgstr "Posição:" #: ../src/extension/internal/filter/morphology.h:180 -#, fuzzy msgid "Inside" -msgstr "nó final" +msgstr "Dentro" #: ../src/extension/internal/filter/morphology.h:181 -#, fuzzy msgid "Outside" -msgstr "_Expandir" +msgstr "Fora" #: ../src/extension/internal/filter/morphology.h:182 -#, fuzzy msgid "Overlayed" -msgstr "Sobre" +msgstr "Sobreposto" #: ../src/extension/internal/filter/morphology.h:184 -#, fuzzy msgid "Width 1" -msgstr "Largura:" +msgstr "Largura 1" #: ../src/extension/internal/filter/morphology.h:185 -#, fuzzy msgid "Dilatation 1" -msgstr "Saturação" +msgstr "Dilatação 1" #: ../src/extension/internal/filter/morphology.h:186 -#, fuzzy msgid "Erosion 1" -msgstr "Posição:" +msgstr "Erosão 1" #: ../src/extension/internal/filter/morphology.h:187 -#, fuzzy msgid "Width 2" -msgstr "Largura:" +msgstr "Largura 2" #: ../src/extension/internal/filter/morphology.h:188 -#, fuzzy msgid "Dilatation 2" -msgstr "Saturação" +msgstr "Dilatação 2" #: ../src/extension/internal/filter/morphology.h:189 -#, fuzzy msgid "Erosion 2" -msgstr "Posição:" +msgstr "Erosão 2" #: ../src/extension/internal/filter/morphology.h:191 #: ../src/live_effects/lpe-roughen.cpp:41 @@ -7909,24 +7376,20 @@ msgid "Smooth" msgstr "Suavizar" #: ../src/extension/internal/filter/morphology.h:195 -#, fuzzy msgid "Fill opacity:" -msgstr "Opacidade, %" +msgstr "Opacidade do preenchimento:" #: ../src/extension/internal/filter/morphology.h:196 -#, fuzzy msgid "Stroke opacity:" -msgstr "_Pintura de traço" +msgstr "Opacidade do traço:" #: ../src/extension/internal/filter/morphology.h:206 -#, fuzzy msgid "Adds a colorizable outline" -msgstr "Desenhar um caminho a uma grelha" +msgstr "Adiciona um contorno colorível" #: ../src/extension/internal/filter/overlays.h:56 -#, fuzzy msgid "Noise Fill" -msgstr "Sem preenchimento" +msgstr "Preenchimento de Ruído" #: ../src/extension/internal/filter/overlays.h:59 #: ../src/extension/internal/filter/paint.h:690 @@ -7959,116 +7422,101 @@ msgid "Options" msgstr "Opções" #: ../src/extension/internal/filter/overlays.h:64 -#, fuzzy msgid "Horizontal frequency:" -msgstr "Desvio Horizontal" +msgstr "Frequência horizontal:" #: ../src/extension/internal/filter/overlays.h:65 -#, fuzzy msgid "Vertical frequency:" -msgstr "Freqüência Base" +msgstr "Frequência vertical:" #: ../src/extension/internal/filter/overlays.h:66 #: ../src/extension/internal/filter/textures.h:69 -#, fuzzy msgid "Complexity:" -msgstr "Composição" +msgstr "Complexidade:" #: ../src/extension/internal/filter/overlays.h:67 #: ../src/extension/internal/filter/textures.h:70 -#, fuzzy msgid "Variation:" -msgstr "Saturação" +msgstr "Variação:" #: ../src/extension/internal/filter/overlays.h:68 -#, fuzzy msgid "Dilatation:" -msgstr "Saturação" +msgstr "Dilatação:" #: ../src/extension/internal/filter/overlays.h:69 -#, fuzzy msgid "Erosion:" -msgstr "Posição:" +msgstr "Erosão:" #: ../src/extension/internal/filter/overlays.h:72 -#, fuzzy msgid "Noise color" -msgstr "Soltar cor" +msgstr "Cor do ruído" #: ../src/extension/internal/filter/overlays.h:83 msgid "Basic noise fill and transparency texture" -msgstr "" +msgstr "Textura de ruído básico no preenchimento e transparência" #: ../src/extension/internal/filter/paint.h:71 msgid "Chromolitho" -msgstr "" +msgstr "Cromolito" #: ../src/extension/internal/filter/paint.h:75 #: ../share/extensions/jessyInk_keyBindings.inx.h:16 -#, fuzzy msgid "Drawing mode" -msgstr "Desenho" +msgstr "Modo de desenho" #: ../src/extension/internal/filter/paint.h:76 -#, fuzzy msgid "Drawing blend:" -msgstr "Desenho cancelado" +msgstr "Mistura do desenho:" #: ../src/extension/internal/filter/paint.h:84 -#, fuzzy msgid "Dented" -msgstr "Centralizar" +msgstr "Dentado" #: ../src/extension/internal/filter/paint.h:88 #: ../src/extension/internal/filter/paint.h:699 -#, fuzzy msgid "Noise reduction" -msgstr "Descrição" +msgstr "Redução de ruído" #: ../src/extension/internal/filter/paint.h:91 -#, fuzzy msgid "Grain" -msgstr "Desenho" +msgstr "Grão" #: ../src/extension/internal/filter/paint.h:92 -#, fuzzy msgid "Grain mode" -msgstr "Desenho" +msgstr "Aplicar grão" #: ../src/extension/internal/filter/paint.h:97 #: ../src/extension/internal/filter/transparency.h:207 #: ../src/extension/internal/filter/transparency.h:281 -#, fuzzy msgid "Expansion" -msgstr "Extensão \"" +msgstr "Expansão" #: ../src/extension/internal/filter/paint.h:100 msgid "Grain blend:" -msgstr "" +msgstr "Mistura de grão:" #: ../src/extension/internal/filter/paint.h:116 msgid "Chromo effect with customizable edge drawing and graininess" -msgstr "" +msgstr "Efeito cromado com desenho de bordas e granulado personalizáveis" #: ../src/extension/internal/filter/paint.h:232 -#, fuzzy msgid "Cross Engraving" -msgstr "Desenho" +msgstr "Gravura Cruzada" #: ../src/extension/internal/filter/paint.h:234 #: ../src/extension/internal/filter/paint.h:337 msgid "Clean-up" -msgstr "" +msgstr "Limpeza" #: ../src/extension/internal/filter/paint.h:238 #: ../share/extensions/measure.inx.h:17 -#, fuzzy msgid "Length" -msgstr "Comprimento:" +msgstr "Comprimento" #: ../src/extension/internal/filter/paint.h:247 msgid "Convert image to an engraving made of vertical and horizontal lines" msgstr "" +"Converter a imagem numa gravura composta por linhas horizontais e verticais" #: ../src/extension/internal/filter/paint.h:331 #: ../src/ui/dialog/align-and-distribute.cpp:1090 @@ -8087,324 +7535,271 @@ msgstr "Simplificar" #: ../src/extension/internal/filter/paint.h:338 #: ../src/extension/internal/filter/paint.h:709 -#, fuzzy msgid "Erase" -msgstr "Rasterizar" +msgstr "Apagar" #: ../src/extension/internal/filter/paint.h:344 msgid "Melt" -msgstr "" +msgstr "Derreter" #: ../src/extension/internal/filter/paint.h:350 #: ../src/extension/internal/filter/paint.h:712 -#, fuzzy msgid "Fill color" -msgstr "Cor lisa" +msgstr "Cor do preenchimento" #: ../src/extension/internal/filter/paint.h:351 #: ../src/extension/internal/filter/paint.h:714 -#, fuzzy msgid "Image on fill" -msgstr "Imagem" +msgstr "Mostrar imagem original no preenchimento" #: ../src/extension/internal/filter/paint.h:354 -#, fuzzy msgid "Stroke color" -msgstr "Definir cor do traço" +msgstr "Cor do traço" #: ../src/extension/internal/filter/paint.h:355 -#, fuzzy msgid "Image on stroke" -msgstr "Padrão de traço" +msgstr "Mostrar imagem original no traço" #: ../src/extension/internal/filter/paint.h:366 -#, fuzzy msgid "Convert images to duochrome drawings" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Converter imagens em desenhos de dicromia (2 cores)" #: ../src/extension/internal/filter/paint.h:494 msgid "Electrize" -msgstr "" +msgstr "Eletrizar" #: ../src/extension/internal/filter/paint.h:497 #: ../src/extension/internal/filter/paint.h:852 -#, fuzzy msgid "Effect type:" -msgstr "Efeito_s" +msgstr "Tipo de efeito:" #: ../src/extension/internal/filter/paint.h:501 #: ../src/extension/internal/filter/paint.h:860 #: ../src/extension/internal/filter/paint.h:975 -#, fuzzy msgid "Levels" -msgstr "Nível" +msgstr "Níveis" #: ../src/extension/internal/filter/paint.h:510 msgid "Electro solarization effects" -msgstr "" +msgstr "Efeitos de solarização elétrica" #: ../src/extension/internal/filter/paint.h:584 -#, fuzzy msgid "Neon Draw" -msgstr "Nenhum" +msgstr "Desenho Néon" #: ../src/extension/internal/filter/paint.h:586 -#, fuzzy msgid "Line type:" -msgstr " tipo: " +msgstr "Tipo de linha:" #: ../src/extension/internal/filter/paint.h:587 -#, fuzzy msgid "Smoothed" -msgstr "Suavizar" +msgstr "Suavizada" #: ../src/extension/internal/filter/paint.h:588 -#, fuzzy msgid "Contrasted" -msgstr "Contraste" +msgstr "Contrastada" #: ../src/extension/internal/filter/paint.h:591 #: ../src/live_effects/lpe-jointype.cpp:54 -#, fuzzy msgid "Line width" -msgstr "Largura da Linha" +msgstr "Espessura da linha" #: ../src/extension/internal/filter/paint.h:593 #: ../src/extension/internal/filter/paint.h:861 #: ../src/ui/widget/filter-effect-chooser.cpp:25 -#, fuzzy msgid "Blend mode:" -msgstr "_Modo misturar:" +msgstr "Modo de mistura:" #: ../src/extension/internal/filter/paint.h:605 msgid "Posterize and draw smooth lines around color shapes" -msgstr "" +msgstr "Posterizar e desenhar linhas suaves à volta de formas coloridas" #: ../src/extension/internal/filter/paint.h:687 -#, fuzzy msgid "Point Engraving" -msgstr "Desenho" +msgstr "Gravura de Pontos" #: ../src/extension/internal/filter/paint.h:700 -#, fuzzy msgid "Noise blend:" -msgstr "Descrição" +msgstr "Mistura de ruído:" #: ../src/extension/internal/filter/paint.h:708 -#, fuzzy msgid "Grain lightness" -msgstr "Luminosidade" +msgstr "Luminosidade do grão" #: ../src/extension/internal/filter/paint.h:716 -#, fuzzy msgid "Points color" -msgstr "Soltar cor" +msgstr "Cor dos pontos" #: ../src/extension/internal/filter/paint.h:718 -#, fuzzy msgid "Image on points" -msgstr "Imagem" +msgstr "Imagem nos pontos" #: ../src/extension/internal/filter/paint.h:728 -#, fuzzy msgid "Convert image to a transparent point engraving" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Converter a imagem em gravura de ponto transparente" #: ../src/extension/internal/filter/paint.h:850 -#, fuzzy msgid "Poster Paint" -msgstr "Constante" +msgstr "Pintura de Poster" #: ../src/extension/internal/filter/paint.h:856 -#, fuzzy msgid "Transfer type:" -msgstr "Todos os tipos" +msgstr "Tipo de transferência:" #: ../src/extension/internal/filter/paint.h:857 -#, fuzzy msgid "Poster" -msgstr "Colar" +msgstr "Poster" #: ../src/extension/internal/filter/paint.h:858 -#, fuzzy msgid "Painting" -msgstr "Pintura a Óleo" +msgstr "Pintura" #: ../src/extension/internal/filter/paint.h:868 -#, fuzzy msgid "Simplify (primary)" -msgstr "Simplificando caminhos:" +msgstr "Simplificar (primário)" #: ../src/extension/internal/filter/paint.h:869 -#, fuzzy msgid "Simplify (secondary)" -msgstr "Simplificar" +msgstr "Simplificar (secundário)" #: ../src/extension/internal/filter/paint.h:870 -#, fuzzy msgid "Pre-saturation" -msgstr "Saturação" +msgstr "Pré-saturação" #: ../src/extension/internal/filter/paint.h:871 -#, fuzzy msgid "Post-saturation" -msgstr "Saturação" +msgstr "Pós-saturação" #: ../src/extension/internal/filter/paint.h:872 -#, fuzzy msgid "Simulate antialiasing" -msgstr "Simular saída na Ecrã" +msgstr "Simular anti-serrilhado (suaviza os gradientes)" #: ../src/extension/internal/filter/paint.h:880 -#, fuzzy msgid "Poster and painting effects" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeitos de poster e pintura" #: ../src/extension/internal/filter/paint.h:973 msgid "Posterize Basic" -msgstr "" +msgstr "Posterização Básica" #: ../src/extension/internal/filter/paint.h:984 msgid "Simple posterizing effect" -msgstr "" +msgstr "Efeito de posterização simples" #: ../src/extension/internal/filter/protrusions.h:48 -#, fuzzy msgid "Snow crest" -msgstr "Pré-visualizar" +msgstr "Neve a cair num telhado" #: ../src/extension/internal/filter/protrusions.h:50 -#, fuzzy msgid "Drift Size" -msgstr "Tamanho do ponto" +msgstr "Altura da borda" #: ../src/extension/internal/filter/protrusions.h:58 -#, fuzzy msgid "Snow has fallen on object" -msgstr "Definir estilo do objecto" +msgstr "A neve cai no objeto" #: ../src/extension/internal/filter/shadows.h:57 -#, fuzzy msgid "Drop Shadow" -msgstr "Soltar SVG" +msgstr "Sombra Caída" #: ../src/extension/internal/filter/shadows.h:61 -#, fuzzy msgid "Blur radius (px)" -msgstr "Raio interno:" +msgstr "Raio da desfocagem (px)" #: ../src/extension/internal/filter/shadows.h:62 -#, fuzzy msgid "Horizontal offset (px)" -msgstr "Desvio Horizontal" +msgstr "Deslocamento horizontal (px)" #: ../src/extension/internal/filter/shadows.h:63 -#, fuzzy msgid "Vertical offset (px)" -msgstr "Desvio Vertical" +msgstr "Deslocamento vertical (px)" #: ../src/extension/internal/filter/shadows.h:64 -#, fuzzy msgid "Shadow type:" -msgstr "Sombra" +msgstr "Tipo de sombra:" #: ../src/extension/internal/filter/shadows.h:67 msgid "Outer cutout" -msgstr "" +msgstr "Recorte por fora" #: ../src/extension/internal/filter/shadows.h:68 -#, fuzzy msgid "Inner cutout" -msgstr "Cor das linhas guias" +msgstr "Recorte por dentro" #: ../src/extension/internal/filter/shadows.h:69 -#, fuzzy msgid "Shadow only" -msgstr "Alfa" +msgstr "Apenas sombra" #: ../src/extension/internal/filter/shadows.h:72 -#, fuzzy msgid "Blur color" -msgstr "Cor lisa" +msgstr "Cor da desfocagem" #: ../src/extension/internal/filter/shadows.h:74 -#, fuzzy msgid "Use object's color" -msgstr "Ajustar a cor escolhida" +msgstr "Usar cor do objeto" #: ../src/extension/internal/filter/shadows.h:84 msgid "Colorizable Drop shadow" -msgstr "" +msgstr "Sombra caída colorível" #: ../src/extension/internal/filter/textures.h:62 msgid "Ink Blot" -msgstr "" +msgstr "Mancha de Tinta" #: ../src/extension/internal/filter/textures.h:68 -#, fuzzy msgid "Frequency:" -msgstr "Freqüência Base" +msgstr "Frequência:" #: ../src/extension/internal/filter/textures.h:71 -#, fuzzy msgid "Horizontal inlay:" -msgstr "Texto horizontal" +msgstr "Incrustração horizontal:" #: ../src/extension/internal/filter/textures.h:72 -#, fuzzy msgid "Vertical inlay:" -msgstr "Texto vertical" +msgstr "Incrustração vertical:" #: ../src/extension/internal/filter/textures.h:73 -#, fuzzy msgid "Displacement:" -msgstr "Mapa de Deslocamento" +msgstr "Deslocamento:" #: ../src/extension/internal/filter/textures.h:79 -#, fuzzy msgid "Overlapping" -msgstr "Alterar arredondamento" +msgstr "Sobreposição" #: ../src/extension/internal/filter/textures.h:80 -#, fuzzy msgid "External" -msgstr "Editar preenchimento..." +msgstr "Externo" #: ../src/extension/internal/filter/textures.h:81 #: ../share/extensions/markers_strokepaint.inx.h:8 #: ../share/extensions/restack.inx.h:4 -#, fuzzy msgid "Custom" -msgstr "_Personalizado" +msgstr "Personalizado" #: ../src/extension/internal/filter/textures.h:83 -#, fuzzy msgid "Custom stroke options" -msgstr "Opções da Linha de Comando" +msgstr "Opções do traço personalizado" #: ../src/extension/internal/filter/textures.h:84 -#, fuzzy msgid "k1:" -msgstr "K1" +msgstr "k1:" #: ../src/extension/internal/filter/textures.h:85 -#, fuzzy msgid "k2:" -msgstr "K2" +msgstr "k2:" #: ../src/extension/internal/filter/textures.h:86 -#, fuzzy msgid "k3:" -msgstr "K3" +msgstr "k3:" #: ../src/extension/internal/filter/textures.h:94 msgid "Inkblot on tissue or rough paper" -msgstr "" +msgstr "Mancha de tinta em tecido ou papel rugoso" #: ../src/extension/internal/filter/transparency.h:53 #: ../src/filter-enums.cpp:21 msgid "Blend" -msgstr "Misturar" +msgstr "Mistura" #: ../src/extension/internal/filter/transparency.h:55 ../src/rdf.cpp:261 msgid "Source:" @@ -8412,9 +7807,8 @@ msgstr "Origem:" #: ../src/extension/internal/filter/transparency.h:56 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1603 -#, fuzzy msgid "Background" -msgstr "Plano de fundo:" +msgstr "Fundo" #: ../src/extension/internal/filter/transparency.h:59 #: ../src/ui/dialog/filter-effects-dialog.cpp:2879 @@ -8427,59 +7821,54 @@ msgstr "Modo:" #: ../src/extension/internal/filter/transparency.h:73 msgid "Blend objects with background images or with themselves" -msgstr "" +msgstr "Misturar objetos com imagens de fundo ou com eles mesmos" #: ../src/extension/internal/filter/transparency.h:130 -#, fuzzy msgid "Channel Transparency" -msgstr "0 (transparente)" +msgstr "Transparência dos Canais" #: ../src/extension/internal/filter/transparency.h:144 -#, fuzzy msgid "Replace RGB with transparency" -msgstr "0 (transparente)" +msgstr "Substituir RGB por transparência" #: ../src/extension/internal/filter/transparency.h:205 -#, fuzzy msgid "Light Eraser" -msgstr "Brilho" +msgstr "Borracha de Luz" #: ../src/extension/internal/filter/transparency.h:209 #: ../src/extension/internal/filter/transparency.h:283 -#, fuzzy msgid "Global opacity" -msgstr "Configurações da página" +msgstr "Opacidade global" #: ../src/extension/internal/filter/transparency.h:218 msgid "Make the lightest parts of the object progressively transparent" -msgstr "" +msgstr "Tornar as partes mais claras do objeto progressivamente transparentes" #: ../src/extension/internal/filter/transparency.h:291 msgid "Set opacity and strength of opacity boundaries" -msgstr "" +msgstr "Definir opacidade e força dos limites de opacidade" #: ../src/extension/internal/filter/transparency.h:341 msgid "Silhouette" -msgstr "" +msgstr "Silhueta" #: ../src/extension/internal/filter/transparency.h:344 -#, fuzzy msgid "Cutout" -msgstr "recuar" +msgstr "Recorte" #: ../src/extension/internal/filter/transparency.h:353 msgid "Repaint anything visible monochrome" -msgstr "" +msgstr "Repintar monocromaticamente qualquer coisa visível" #: ../src/extension/internal/gdkpixbuf-input.cpp:188 -#, fuzzy, c-format +#, c-format msgid "%s bitmap image import" -msgstr "Soltar imagem Bitmap" +msgstr "Importar imagem %s" #: ../src/extension/internal/gdkpixbuf-input.cpp:195 #, c-format msgid "Image Import Type:" -msgstr "" +msgstr "Importar Imagem da Forma:" #: ../src/extension/internal/gdkpixbuf-input.cpp:195 #, c-format @@ -8487,23 +7876,27 @@ msgid "" "Embed results in stand-alone, larger SVG files. Link references a file " "outside this SVG document and all files must be moved together." msgstr "" +"Embutida: incorpora a imagem no ficheiro, ocupando mais espaço em disco. " +"Ligada: imagem permanece independente do ficheiro do Inkscape, caso se " +"altere a localização do ficheiro do Inkscape, deve-se alterar atmbém a " +"localização do ficheiro da imagem." #: ../src/extension/internal/gdkpixbuf-input.cpp:196 #: ../src/ui/dialog/inkscape-preferences.cpp:1511 -#, fuzzy, c-format +#, c-format msgid "Embed" -msgstr "embutido" +msgstr "Embutida" #: ../src/extension/internal/gdkpixbuf-input.cpp:197 ../src/sp-anchor.cpp:105 #: ../src/ui/dialog/inkscape-preferences.cpp:1511 -#, fuzzy, c-format +#, c-format msgid "Link" -msgstr "Linha" +msgstr "Ligada" #: ../src/extension/internal/gdkpixbuf-input.cpp:200 -#, fuzzy, c-format +#, c-format msgid "Image DPI:" -msgstr "Imagem" +msgstr "DPI da Imagem:" #: ../src/extension/internal/gdkpixbuf-input.cpp:200 #, c-format @@ -8511,21 +7904,23 @@ msgid "" "Take information from file or use default bitmap import resolution as " "defined in the preferences." msgstr "" +"Obter resolução do ficheiro ou usar a resolução padrão definida nas " +"preferências." #: ../src/extension/internal/gdkpixbuf-input.cpp:201 -#, fuzzy, c-format +#, c-format msgid "From file" -msgstr "_Propriedades da Ligação" +msgstr "Resolução do ficheiro" #: ../src/extension/internal/gdkpixbuf-input.cpp:202 -#, fuzzy, c-format +#, c-format msgid "Default import resolution" -msgstr "Resolução padrão de exportação" +msgstr "Resolução definida nas preferências" #: ../src/extension/internal/gdkpixbuf-input.cpp:205 -#, fuzzy, c-format +#, c-format msgid "Image Rendering Mode:" -msgstr "Render" +msgstr "Renderização da Imagem:" #: ../src/extension/internal/gdkpixbuf-input.cpp:205 #, c-format @@ -8533,75 +7928,73 @@ msgid "" "When an image is upscaled, apply smoothing or keep blocky (pixelated). (Will " "not work in all browsers.)" msgstr "" +"Quando uma imagem for aumentada, aplicar suavidade ou manter blocos de " +"píxeis (não funcionará em todos os navegadores de internet)." #: ../src/extension/internal/gdkpixbuf-input.cpp:206 #: ../src/ui/dialog/inkscape-preferences.cpp:1518 -#, fuzzy, c-format +#, c-format msgid "None (auto)" -msgstr "(padrão)" +msgstr "Nenhuma (auto)" #: ../src/extension/internal/gdkpixbuf-input.cpp:207 #: ../src/ui/dialog/inkscape-preferences.cpp:1518 #, c-format msgid "Smooth (optimizeQuality)" -msgstr "" +msgstr "Suave (optimizeQuality)" #: ../src/extension/internal/gdkpixbuf-input.cpp:208 #: ../src/ui/dialog/inkscape-preferences.cpp:1518 #, c-format msgid "Blocky (optimizeSpeed)" -msgstr "" +msgstr "Pixelizada (optimizeSpeed)" #: ../src/extension/internal/gdkpixbuf-input.cpp:211 #, c-format msgid "Hide the dialog next time and always apply the same actions." msgstr "" +"Não mostrar da próxima vez esta janela e aplicar as mesmas ações futuramente." #: ../src/extension/internal/gdkpixbuf-input.cpp:211 #, c-format msgid "Don't ask again" -msgstr "" +msgstr "Não perguntar de novo" #: ../src/extension/internal/gimpgrad.cpp:272 msgid "GIMP Gradients" -msgstr "Degradês do GIMP" +msgstr "Gradientes do GIMP" #: ../src/extension/internal/gimpgrad.cpp:277 msgid "GIMP Gradient (*.ggr)" -msgstr "Degradê do GIMP (*.ggr)" +msgstr "Gradiente do GIMP (*.ggr)" #: ../src/extension/internal/gimpgrad.cpp:278 msgid "Gradients used in GIMP" -msgstr "Degradês usados no GIMP" +msgstr "Gradientes usados no GIMP" #: ../src/extension/internal/grid.cpp:199 ../src/ui/widget/panel.cpp:117 msgid "Grid" msgstr "Grelha" #: ../src/extension/internal/grid.cpp:201 -#, fuzzy msgid "Line Width:" -msgstr "Largura da Linha" +msgstr "Espessura da Linha:" #: ../src/extension/internal/grid.cpp:202 -#, fuzzy msgid "Horizontal Spacing:" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento Horizontal:" #: ../src/extension/internal/grid.cpp:203 -#, fuzzy msgid "Vertical Spacing:" -msgstr "Espaçamento Vertical" +msgstr "Espaçamento Vertical:" #: ../src/extension/internal/grid.cpp:204 -#, fuzzy msgid "Horizontal Offset:" -msgstr "Desvio Horizontal" +msgstr "Desvio Horizontal:" #: ../src/extension/internal/grid.cpp:205 -#, fuzzy msgid "Vertical Offset:" -msgstr "Desvio Vertical" +msgstr "Desvio Vertical:" #: ../src/extension/internal/grid.cpp:209 #: ../src/ui/dialog/inkscape-preferences.cpp:1532 @@ -8638,29 +8031,27 @@ msgstr "Render" #: ../src/ui/dialog/inkscape-preferences.cpp:832 #: ../src/widgets/toolbox.cpp:1894 msgid "Grids" -msgstr "Grelha" +msgstr "Grelhas" #: ../src/extension/internal/grid.cpp:213 msgid "Draw a path which is a grid" -msgstr "Desenhar um caminho a uma grelha" +msgstr "Desenhar um caminho que é uma grelha" #: ../src/extension/internal/javafx-out.cpp:963 -#, fuzzy msgid "JavaFX Output" -msgstr "Saída LaTeX" +msgstr "Exportar em JavaFX" #: ../src/extension/internal/javafx-out.cpp:968 msgid "JavaFX (*.fx)" -msgstr "" +msgstr "JavaFX (*.fx)" #: ../src/extension/internal/javafx-out.cpp:969 -#, fuzzy msgid "JavaFX Raytracer File" -msgstr "Ficheiro PovRay Raytracer" +msgstr "JavaFX Raytracer" #: ../src/extension/internal/latex-pstricks-out.cpp:95 msgid "LaTeX Output" -msgstr "Saída LaTeX" +msgstr "Exportar em LaTeX" #: ../src/extension/internal/latex-pstricks-out.cpp:100 msgid "LaTeX With PSTricks macros (*.tex)" @@ -8668,7 +8059,7 @@ msgstr "LaTeX com macros PSTricks (*.tex)" #: ../src/extension/internal/latex-pstricks-out.cpp:101 msgid "LaTeX PSTricks File" -msgstr "Ficheiro LaTeX PSTricks" +msgstr "LaTeX PSTricks" #: ../src/extension/internal/latex-pstricks.cpp:330 msgid "LaTeX Print" @@ -8676,7 +8067,7 @@ msgstr "Impressão LaTeX" #: ../src/extension/internal/odf.cpp:2141 msgid "OpenDocument Drawing Output" -msgstr "Saída para OpenDocument Drawing" +msgstr "Exportar em OpenDocument Drawing" #: ../src/extension/internal/odf.cpp:2146 msgid "OpenDocument drawing (*.odg)" @@ -8684,7 +8075,7 @@ msgstr "OpenDocument drawing (*.odg)" #: ../src/extension/internal/odf.cpp:2147 msgid "OpenDocument drawing file" -msgstr "Ficheiro OpenDocument drawing" +msgstr "OpenDocument drawing" # O que são essas caixas? - samymn #. TRANSLATORS: The following are document crop settings for PDF import @@ -8695,7 +8086,7 @@ msgstr "caixa de mídia" #: ../src/extension/internal/pdfinput/pdf-input.cpp:78 msgid "crop box" -msgstr "caixa de ajuste à imagem" +msgstr "caixa de recorte" #: ../src/extension/internal/pdfinput/pdf-input.cpp:79 msgid "trim box" @@ -8712,16 +8103,15 @@ msgstr "caixa de arte" #. Crop settings #: ../src/extension/internal/pdfinput/pdf-input.cpp:117 msgid "Clip to:" -msgstr "Clipar a:" +msgstr "Recortar a:" #: ../src/extension/internal/pdfinput/pdf-input.cpp:128 msgid "Page settings" msgstr "Configurações da página" #: ../src/extension/internal/pdfinput/pdf-input.cpp:129 -#, fuzzy msgid "Precision of approximating gradient meshes:" -msgstr "Precisão da aproximação dos encontros de degradês:" +msgstr "Precisão da aproximação das malhas de gradientes:" #: ../src/extension/internal/pdfinput/pdf-input.cpp:130 msgid "" @@ -8729,11 +8119,11 @@ msgid "" "and slow performance." msgstr "" "Observação: ajustar a precisão para valores muito altos pode resultar " -"em um SVG grande demais e baixo desempenho." +"num SVG grande demais e numa performance baixa." #: ../src/extension/internal/pdfinput/pdf-input.cpp:134 msgid "Poppler/Cairo import" -msgstr "" +msgstr "Importação Poppler/Cairo" #: ../src/extension/internal/pdfinput/pdf-input.cpp:135 msgid "" @@ -8741,11 +8131,14 @@ msgid "" "glyphs where each glyph is a path. Images are stored internally. Meshes " "cause entire document to be rendered as a raster image." msgstr "" +"Importar através de uma biblioteca externa. O texto conciste num grupo que " +"contém caracteres clonados onde cada caractere é um caminho. As imagens são " +"armazenadas internamente. As malhas fazem com que o documento inteiro seja " +"renderizado como uma imagem raster (composta por píxeis)." #: ../src/extension/internal/pdfinput/pdf-input.cpp:136 -#, fuzzy msgid "Internal import" -msgstr "Texto vertical" +msgstr "Importação interna" #: ../src/extension/internal/pdfinput/pdf-input.cpp:137 msgid "" @@ -8753,10 +8146,13 @@ msgid "" "white space is missing. Meshes are converted to tiles, the number depends on " "the precision set below." msgstr "" +"Importar através de uma biblioteca interna (derivada do Poppler). O texto é " +"gravado como texto mas faltam os espaços em branco. As malhas são " +"convertidas em ladrilhos, o número depende da precisão definida abaixo." #: ../src/extension/internal/pdfinput/pdf-input.cpp:148 msgid "rough" -msgstr "áspero" +msgstr "básico" #. Text options #. _labelText = Gtk::manage(new class Gtk::Label(_("Text handling:"))); @@ -8768,6 +8164,7 @@ msgstr "áspero" #: ../src/extension/internal/pdfinput/pdf-input.cpp:159 msgid "Replace PDF fonts by closest-named installed fonts" msgstr "" +"Substituir fontes PDF pelas fontes instaladas como o nome mais semelhante" #: ../src/extension/internal/pdfinput/pdf-input.cpp:161 msgid "Embed images" @@ -8775,73 +8172,64 @@ msgstr "Embutir imagens" #: ../src/extension/internal/pdfinput/pdf-input.cpp:163 msgid "Import settings" -msgstr "Importar configurações" +msgstr "Configurações de importação" #: ../src/extension/internal/pdfinput/pdf-input.cpp:291 msgid "PDF Import Settings" -msgstr "Importar configurações de PDF" +msgstr "Configurações de importação PDF" #: ../src/extension/internal/pdfinput/pdf-input.cpp:438 -#, fuzzy msgctxt "PDF input precision" msgid "rough" -msgstr "áspero" +msgstr "mau" #: ../src/extension/internal/pdfinput/pdf-input.cpp:439 -#, fuzzy msgctxt "PDF input precision" msgid "medium" msgstr "médio" #: ../src/extension/internal/pdfinput/pdf-input.cpp:440 -#, fuzzy msgctxt "PDF input precision" msgid "fine" msgstr "ótimo" #: ../src/extension/internal/pdfinput/pdf-input.cpp:441 -#, fuzzy msgctxt "PDF input precision" msgid "very fine" msgstr "excelente" #: ../src/extension/internal/pdfinput/pdf-input.cpp:937 -#, fuzzy msgid "PDF Input" -msgstr "Entrada DXF" +msgstr "Importar PDF" #: ../src/extension/internal/pdfinput/pdf-input.cpp:942 -#, fuzzy msgid "Adobe PDF (*.pdf)" -msgstr "AutoCAD DXF (*.dxf)" +msgstr "Adobe PDF (*.pdf)" #: ../src/extension/internal/pdfinput/pdf-input.cpp:943 msgid "Adobe Portable Document Format" -msgstr "" +msgstr "Adobe Portable Document Format" #: ../src/extension/internal/pdfinput/pdf-input.cpp:950 -#, fuzzy msgid "AI Input" -msgstr "Entrada AI 8.0" +msgstr "Importar AI" #: ../src/extension/internal/pdfinput/pdf-input.cpp:955 -#, fuzzy msgid "Adobe Illustrator 9.0 and above (*.ai)" -msgstr "Adobe Illustrator 8.0 (*.ai)" +msgstr "Adobe Illustrator 9.0 e superior (*.ai)" #: ../src/extension/internal/pdfinput/pdf-input.cpp:956 -#, fuzzy msgid "Open files saved in Adobe Illustrator 9.0 and newer versions" -msgstr "Abrir ficheiros salvos com o Adobe Illustrator" +msgstr "" +"Abrir ficheiros gravados no Adobe Illustrator 9.0 ou versões mais recentes" #: ../src/extension/internal/pov-out.cpp:714 msgid "PovRay Output" -msgstr "Saída PovRay" +msgstr "Exportar em PovRay" #: ../src/extension/internal/pov-out.cpp:719 -#, fuzzy msgid "PovRay (*.pov) (paths and shapes only)" -msgstr "PovRay (*.pov) (exportar splines)" +msgstr "PovRay (*.pov) (apenas caminhos e formas geométricas)" #: ../src/extension/internal/pov-out.cpp:720 msgid "PovRay Raytracer File" @@ -8849,11 +8237,11 @@ msgstr "Ficheiro PovRay Raytracer" #: ../src/extension/internal/svg.cpp:100 msgid "SVG Input" -msgstr "Entrada SVG" +msgstr "Importar SVG" #: ../src/extension/internal/svg.cpp:105 msgid "Scalable Vector Graphic (*.svg)" -msgstr "Gráfico Vectorial Escalável (*.svg)" +msgstr "Gráfico Vetorial Escalável (*.svg)" #: ../src/extension/internal/svg.cpp:106 msgid "Inkscape native file format and W3C standard" @@ -8861,7 +8249,7 @@ msgstr "Formato nativo de ficheiro para o Inkscape e padrão da W3C" #: ../src/extension/internal/svg.cpp:114 msgid "SVG Output Inkscape" -msgstr "Saída SVG Inkscape" +msgstr "Exportar em SVG Inkscape" #: ../src/extension/internal/svg.cpp:119 msgid "Inkscape SVG (*.svg)" @@ -8873,7 +8261,7 @@ msgstr "Formato de SVG com extensões de Inkscape" #: ../src/extension/internal/svg.cpp:128 ../share/extensions/scour.inx.h:19 msgid "SVG Output" -msgstr "Saída SVG" +msgstr "Exportar em SVG" #: ../src/extension/internal/svg.cpp:133 msgid "Plain SVG (*.svg)" @@ -8881,15 +8269,15 @@ msgstr "SVG Plano (*.svg)" #: ../src/extension/internal/svg.cpp:134 msgid "Scalable Vector Graphics format as defined by the W3C" -msgstr "Gráfico Vectorial Escalável (SVG) é um padrão definido pela W3C" +msgstr "Gráfico Vetorial Escalável (SVG) é um padrão definido pela W3C" #: ../src/extension/internal/svgz.cpp:46 msgid "SVGZ Input" -msgstr "Entrada SVGZ" +msgstr "Importar SVGZ" #: ../src/extension/internal/svgz.cpp:52 ../src/extension/internal/svgz.cpp:66 msgid "Compressed Inkscape SVG (*.svgz)" -msgstr "Ficheiro Compactado do Inkscape SVG (*.svgz)" +msgstr "Ficheiro do Inkscape SVG Compactado (*.svgz)" #: ../src/extension/internal/svgz.cpp:53 msgid "SVG file format compressed with GZip" @@ -8897,7 +8285,7 @@ msgstr "Ficheiro SVG compactado com GZip" #: ../src/extension/internal/svgz.cpp:61 ../src/extension/internal/svgz.cpp:75 msgid "SVGZ Output" -msgstr "Saída SVGZ" +msgstr "Exportar em SVGZ" #: ../src/extension/internal/svgz.cpp:67 msgid "Inkscape's native file format compressed with GZip" @@ -8905,66 +8293,60 @@ msgstr "Ficheiro nativo do Inkscape compactado com GZip" #: ../src/extension/internal/svgz.cpp:80 msgid "Compressed plain SVG (*.svgz)" -msgstr "SVG Limpo compactado (*.svgz)" +msgstr "SVG plain (limpo) compactado (*.svgz)" #: ../src/extension/internal/svgz.cpp:81 msgid "Scalable Vector Graphics format compressed with GZip" msgstr "Formato SVG compactado com GZip" #: ../src/extension/internal/vsd-input.cpp:296 -#, fuzzy msgid "VSD Input" -msgstr "Entrada DXF" +msgstr "Importar VSD" #: ../src/extension/internal/vsd-input.cpp:301 -#, fuzzy msgid "Microsoft Visio Diagram (*.vsd)" -msgstr "Diagrama Dia (*.dia)" +msgstr "Microsoft Visio Diagram (*.vsd)" #: ../src/extension/internal/vsd-input.cpp:302 msgid "File format used by Microsoft Visio 6 and later" -msgstr "" +msgstr "Formato de ficheiro usado pelo Microsoft Visio 6 e posterior" #: ../src/extension/internal/vsd-input.cpp:309 -#, fuzzy msgid "VDX Input" -msgstr "Entrada DXF" +msgstr "Importar VDX" #: ../src/extension/internal/vsd-input.cpp:314 -#, fuzzy msgid "Microsoft Visio XML Diagram (*.vdx)" -msgstr "Microsoft XAML (*.xaml)" +msgstr "Microsoft Visio XML Diagram (*.vdx)" #: ../src/extension/internal/vsd-input.cpp:315 msgid "File format used by Microsoft Visio 2010 and later" -msgstr "" +msgstr "Formato de ficheiro usado pelo Microsoft Visio 2010 e posterior" #: ../src/extension/internal/vsd-input.cpp:322 -#, fuzzy msgid "VSDM Input" -msgstr "Entrada EMF" +msgstr "Importar VSDM" #: ../src/extension/internal/vsd-input.cpp:327 msgid "Microsoft Visio 2013 drawing (*.vsdm)" -msgstr "" +msgstr "Microsoft Visio 2013 - desenho (*.vsdm)" #: ../src/extension/internal/vsd-input.cpp:328 #: ../src/extension/internal/vsd-input.cpp:341 msgid "File format used by Microsoft Visio 2013 and later" -msgstr "" +msgstr "Formato de ficheiro usado pelo Microsoft Visio 2013 e posterior" #: ../src/extension/internal/vsd-input.cpp:335 -#, fuzzy msgid "VSDX Input" -msgstr "Entrada DXF" +msgstr "Importar VSDX" #: ../src/extension/internal/vsd-input.cpp:340 msgid "Microsoft Visio 2013 drawing (*.vsdx)" -msgstr "" +msgstr "Microsoft Visio 2013 - desenho (*.vsdx)" #: ../src/extension/internal/wmf-inout.cpp:3180 msgid "WMF Input" -msgstr "Entrada WMF" +msgstr "Importar WMF" #: ../src/extension/internal/wmf-inout.cpp:3185 msgid "Windows Metafiles (*.wmf)" @@ -8972,30 +8354,28 @@ msgstr "Metafiles do Windows (*.wmf)" #: ../src/extension/internal/wmf-inout.cpp:3186 msgid "Windows Metafiles" -msgstr "MetFicheiros do Windows" +msgstr "MetaFicheiros do Windows" #: ../src/extension/internal/wmf-inout.cpp:3194 -#, fuzzy msgid "WMF Output" -msgstr "Saída EMF" +msgstr "Exportar em WMF" #: ../src/extension/internal/wmf-inout.cpp:3204 msgid "Map all fill patterns to standard WMF hatches" -msgstr "" +msgstr "Mapear todos os padrões do preenchimento para escotilhas WMF padrão" #: ../src/extension/internal/wmf-inout.cpp:3208 #: ../share/extensions/wmf_input.inx.h:2 ../share/extensions/wmf_output.inx.h:2 msgid "Windows Metafile (*.wmf)" -msgstr "Metafile do Windows (*.wmf)" +msgstr "Metaficheiro do Windows (*.wmf)" #: ../src/extension/internal/wmf-inout.cpp:3209 -#, fuzzy msgid "Windows Metafile" -msgstr "MetFicheiros do Windows" +msgstr "Metaficheiros do Windows" #: ../src/extension/internal/wpg-input.cpp:144 msgid "WPG Input" -msgstr "Entrada WPG" +msgstr "Importar WPG" #: ../src/extension/internal/wpg-input.cpp:149 msgid "WordPerfect Graphics (*.wpg)" @@ -9006,28 +8386,26 @@ msgid "Vector graphics format used by Corel WordPerfect" msgstr "Formato de gráficos vetoriais usado pelo Corel WordPerfect" #: ../src/extension/prefdialog.cpp:276 -#, fuzzy msgid "Live preview" -msgstr "Pré-Visualizar Ao Vivo" +msgstr "Prever" #: ../src/extension/prefdialog.cpp:276 -#, fuzzy msgid "Is the effect previewed live on canvas?" -msgstr "" -"Controla se as opções de efeito são processadas imediatamente na área de " -"desenho" +msgstr "O efeito é pré-visualizado em tempo real na área de trabalho?" #: ../src/extension/system.cpp:126 ../src/extension/system.cpp:128 msgid "Format autodetect failed. The file is being opened as SVG." -msgstr "Detecção de formato falhou. O ficheiro será aberto como SVG." +msgstr "A detecção do formato falhou. O ficheiro será aberto como SVG." #: ../src/file.cpp:185 msgid "default.svg" -msgstr "default.pt_BR.svg" +msgstr "default.pt.svg" #: ../src/file.cpp:332 msgid "Broken links have been changed to point to existing files." msgstr "" +"As ligações quebradas foram alteradas por forma a apontar a ficheiros " +"existentes." #: ../src/file.cpp:343 ../src/file.cpp:1278 #, c-format @@ -9036,41 +8414,40 @@ msgstr "Falha ao carregar o ficheiro %s" #: ../src/file.cpp:369 msgid "Document not saved yet. Cannot revert." -msgstr "Desenho não foi salvo ainda. Impossível reverter." +msgstr "O documento ainda não foi gravado. Impossível reverter." #: ../src/file.cpp:375 -#, fuzzy msgid "Changes will be lost! Are you sure you want to reload document %1?" msgstr "" -"As mudanças serão perdidas! Tem certeza que deseja recarregar o desenho %s?" +"As alterações serão perdidas! Tem a certeza que quer abrir de novo o " +"documento %1?" #: ../src/file.cpp:401 msgid "Document reverted." -msgstr "Desenho revertido." +msgstr "Documento revertido." #: ../src/file.cpp:403 msgid "Document not reverted." -msgstr "Desenho não foi revertido." +msgstr "O documento não foi revertido." #: ../src/file.cpp:553 msgid "Select file to open" msgstr "Selecionar um ficheiro para abrir" #: ../src/file.cpp:635 -#, fuzzy msgid "Clean up document" -msgstr "Guardar documento" +msgstr "Limpar documento" #: ../src/file.cpp:642 #, c-format msgid "Removed %i unused definition in <defs>." msgid_plural "Removed %i unused definitions in <defs>." -msgstr[0] "%i definição não usada em <defs> removida." -msgstr[1] "%i definições não usadas em <defs> removidas." +msgstr[0] "Removida %i definição não usada em <defs>." +msgstr[1] "Removida %i definições não usadas em <defs>." #: ../src/file.cpp:647 msgid "No unused definitions in <defs>." -msgstr "Sem definições indefinidas em <defs>." +msgstr "Sem definições não usadas em <defs>." #: ../src/file.cpp:679 #, c-format @@ -9078,55 +8455,55 @@ msgid "" "No Inkscape extension found to save document (%s). This may have been " "caused by an unknown filename extension." msgstr "" -"Nenhum extensão do Inkscape foi encontrada para guardar o desenho (%s). Isto " -"deve ter sido causado por uma extensão de ficheiro desconhecida." +"Não foi encontrada nenhuma extensão do Inkscape para gravar o documento " +"(%s). Isto deve ter sido causado por uma extensão de ficheiro desconhecida." #: ../src/file.cpp:680 ../src/file.cpp:688 ../src/file.cpp:696 #: ../src/file.cpp:702 ../src/file.cpp:707 msgid "Document not saved." -msgstr "Desenho não salvo." +msgstr "Documento não gravado." #: ../src/file.cpp:687 #, c-format msgid "" "File %s is write protected. Please remove write protection and try again." msgstr "" +"O ficheiro %s está protegido contra escrita. Remova a proteção de escrita e " +"tente de novo." #: ../src/file.cpp:695 #, c-format msgid "File %s could not be saved." -msgstr "O ficheiro %s não pode ser salvo." +msgstr "Não foi possível gravar o ficheiro %s." #: ../src/file.cpp:725 ../src/file.cpp:727 msgid "Document saved." -msgstr "Desenho salvo." +msgstr "Documento gravado." #. We are saving for the first time; create a unique default filename #: ../src/file.cpp:870 ../src/file.cpp:1437 -#, fuzzy msgid "drawing" -msgstr "desenho%s" +msgstr "desenho" #: ../src/file.cpp:875 -#, fuzzy msgid "drawing-%1" -msgstr "desenho%s" +msgstr "desenho-%1" #: ../src/file.cpp:892 msgid "Select file to save a copy to" -msgstr "Selecionar o ficheiro para guardar uma cópia" +msgstr "Gravar uma cópia do documento" #: ../src/file.cpp:894 msgid "Select file to save to" -msgstr "Selecionar um ficheiro para guardar" +msgstr "Gravar documento" #: ../src/file.cpp:999 ../src/file.cpp:1001 msgid "No changes need to be saved." -msgstr "Nenhuma mudança que precise ser salva." +msgstr "Não há alterações a gravar." #: ../src/file.cpp:1020 msgid "Saving document..." -msgstr "Salvando o desenho..." +msgstr "A gravar o documento..." #: ../src/file.cpp:1275 ../src/ui/dialog/inkscape-preferences.cpp:1505 #: ../src/ui/dialog/ocaldialogs.cpp:1244 @@ -9135,16 +8512,15 @@ msgstr "Importar" #: ../src/file.cpp:1325 msgid "Select file to import" -msgstr "Seleccione o ficheiro para importar" +msgstr "Selecionar o ficheiro a importar" #: ../src/file.cpp:1458 msgid "Select file to export to" -msgstr "Seleccione o ficheiro para exportar" +msgstr "Selecionar o ficheiro a exportar" #: ../src/file.cpp:1711 -#, fuzzy msgid "Import Clip Art" -msgstr "Importar/Exportar" +msgstr "Importar Clip Ar_t" #: ../src/filter-enums.cpp:22 msgid "Color Matrix" @@ -9172,7 +8548,7 @@ msgstr "Inundar" #: ../src/filter-enums.cpp:31 ../share/extensions/text_merge.inx.h:1 msgid "Merge" -msgstr "Mesclar" +msgstr "Unir" #: ../src/filter-enums.cpp:34 msgid "Specular Lighting" @@ -9184,11 +8560,11 @@ msgstr "Ladrilhado" #: ../src/filter-enums.cpp:41 msgid "Source Graphic" -msgstr "Gráfico Fonte" +msgstr "Fonte do Gráfico" #: ../src/filter-enums.cpp:42 msgid "Source Alpha" -msgstr "Alfa Fonte " +msgstr "Fonte da Transparência" #: ../src/filter-enums.cpp:43 msgid "Background Image" @@ -9196,41 +8572,36 @@ msgstr "Imagem de Fundo" #: ../src/filter-enums.cpp:44 msgid "Background Alpha" -msgstr "Alfa de Fundo" +msgstr "Transparência de Fundo" #: ../src/filter-enums.cpp:45 msgid "Fill Paint" -msgstr "Preencher com Tinta" +msgstr "Tinta do Preenchimento" #: ../src/filter-enums.cpp:46 msgid "Stroke Paint" -msgstr "Pintura de Traço" +msgstr "Tinta do Traço" #. New in Compositing and Blending Level 1 #: ../src/filter-enums.cpp:58 -#, fuzzy msgid "Overlay" -msgstr "Sobre" +msgstr "Sobreposição" #: ../src/filter-enums.cpp:59 -#, fuzzy msgid "Color Dodge" -msgstr "Cor das linhas guias" +msgstr "Clarear Cor" #: ../src/filter-enums.cpp:60 -#, fuzzy msgid "Color Burn" -msgstr "Cores" +msgstr "Escurecer Cor" #: ../src/filter-enums.cpp:61 -#, fuzzy msgid "Hard Light" -msgstr "Altura da Barra:" +msgstr "Luz Dura" #: ../src/filter-enums.cpp:62 -#, fuzzy msgid "Soft Light" -msgstr "Lugar de Luz" +msgstr "Luz Suave" #: ../src/filter-enums.cpp:63 ../src/splivarot.cpp:89 ../src/splivarot.cpp:95 msgid "Difference" @@ -9250,7 +8621,7 @@ msgstr "Matiz" #: ../src/filter-enums.cpp:68 msgid "Luminosity" -msgstr "" +msgstr "Luminosidade" #: ../src/filter-enums.cpp:78 msgid "Matrix" @@ -9262,11 +8633,11 @@ msgstr "Saturar" #: ../src/filter-enums.cpp:80 msgid "Hue Rotate" -msgstr "Rotacionar Matiz" +msgstr "Rodar Matiz" #: ../src/filter-enums.cpp:81 msgid "Luminance to Alpha" -msgstr "Luminância para Alfa" +msgstr "Luminância para Transparência" #: ../src/filter-enums.cpp:87 ../share/extensions/jessyInk_mouseHandler.inx.h:3 #: ../share/extensions/jessyInk_transitions.inx.h:7 @@ -9276,48 +8647,40 @@ msgstr "Padrão" #. New CSS #: ../src/filter-enums.cpp:95 -#, fuzzy msgid "Clear" -msgstr "_Limpar" +msgstr "Limpar" #: ../src/filter-enums.cpp:96 -#, fuzzy msgid "Copy" -msgstr "_Copiar" +msgstr "Copiar" #: ../src/filter-enums.cpp:97 ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1623 -#, fuzzy msgid "Destination" -msgstr "Destino da impressão" +msgstr "Destino" #: ../src/filter-enums.cpp:98 -#, fuzzy msgid "Destination Over" -msgstr "Destino da impressão" +msgstr "Destino - Por Cima" #: ../src/filter-enums.cpp:99 -#, fuzzy msgid "Destination In" -msgstr "Destino da impressão" +msgstr "Destino - Cortado por Dentro" #: ../src/filter-enums.cpp:100 -#, fuzzy msgid "Destination Out" -msgstr "Destino da impressão" +msgstr "Destino - Cortado por Fora" #: ../src/filter-enums.cpp:101 -#, fuzzy msgid "Destination Atop" -msgstr "Destino da impressão" +msgstr "Destino - Cortado por Dentro pelo de Cima" #: ../src/filter-enums.cpp:102 -#, fuzzy msgid "Lighter" -msgstr "Iluminar" +msgstr "Mais claro" #: ../src/filter-enums.cpp:104 msgid "Arithmetic" -msgstr "Aritmética" +msgstr "Aritmético" #: ../src/filter-enums.cpp:120 ../src/selection-chemistry.cpp:545 #: ../src/ui/dialog/objects.cpp:1893 @@ -9329,7 +8692,6 @@ msgid "Wrap" msgstr "Envolver" #: ../src/filter-enums.cpp:122 -#, fuzzy msgctxt "Convolve matrix, edge mode" msgid "None" msgstr "Nenhum" @@ -9352,90 +8714,84 @@ msgstr "Luz Distante" #: ../src/filter-enums.cpp:152 msgid "Point Light" -msgstr "Apontar Luz" +msgstr "Ponto de Luz" #: ../src/filter-enums.cpp:153 msgid "Spot Light" -msgstr "Lugar de Luz" +msgstr "Foco de Luz" #: ../src/gradient-chemistry.cpp:1580 -#, fuzzy msgid "Invert gradient colors" -msgstr "Inverter degradê" +msgstr "Inverter cores do gradiente" #: ../src/gradient-chemistry.cpp:1607 -#, fuzzy msgid "Reverse gradient" -msgstr "Inverter degradê" +msgstr "Inverter gradiente" #: ../src/gradient-chemistry.cpp:1621 ../src/widgets/gradient-selector.cpp:222 -#, fuzzy msgid "Delete swatch" -msgstr "Eliminar parada" +msgstr "Eliminar amostra de cor" #: ../src/gradient-drag.cpp:97 ../src/ui/tools/gradient-tool.cpp:90 msgid "Linear gradient start" -msgstr "Início do degradê linear" +msgstr "Início do gradiente linear" #. POINT_LG_BEGIN #: ../src/gradient-drag.cpp:98 ../src/ui/tools/gradient-tool.cpp:91 msgid "Linear gradient end" -msgstr "Fim do degradê linear" +msgstr "Fim do gradiente linear" #: ../src/gradient-drag.cpp:99 ../src/ui/tools/gradient-tool.cpp:92 msgid "Linear gradient mid stop" -msgstr "Gradiente linear parada do meio" +msgstr "Paragem do meio do gradiente linear" #: ../src/gradient-drag.cpp:100 ../src/ui/tools/gradient-tool.cpp:93 msgid "Radial gradient center" -msgstr "Centro do degradê radial" +msgstr "Centro do gradiente radial" #: ../src/gradient-drag.cpp:101 ../src/gradient-drag.cpp:102 #: ../src/ui/tools/gradient-tool.cpp:94 ../src/ui/tools/gradient-tool.cpp:95 msgid "Radial gradient radius" -msgstr "Raio do degradê radial" +msgstr "Raio do gradiente radial" #: ../src/gradient-drag.cpp:103 ../src/ui/tools/gradient-tool.cpp:96 msgid "Radial gradient focus" -msgstr "Foco do degradê radial" +msgstr "Foco do gradiente radial" #. POINT_RG_FOCUS #: ../src/gradient-drag.cpp:104 ../src/gradient-drag.cpp:105 #: ../src/ui/tools/gradient-tool.cpp:97 ../src/ui/tools/gradient-tool.cpp:98 msgid "Radial gradient mid stop" -msgstr "Meio do degradê radial" +msgstr "Paragem do meio do gradiente radial" #: ../src/gradient-drag.cpp:106 ../src/ui/tools/mesh-tool.cpp:93 -#, fuzzy msgid "Mesh gradient corner" -msgstr "Centro do degradê radial" +msgstr "Canto do gradiente da malha" #: ../src/gradient-drag.cpp:107 ../src/ui/tools/mesh-tool.cpp:94 -#, fuzzy msgid "Mesh gradient handle" -msgstr "Mover alça do degradê" +msgstr "Alça do gradiente da malha" #: ../src/gradient-drag.cpp:108 ../src/ui/tools/mesh-tool.cpp:95 -#, fuzzy msgid "Mesh gradient tensor" -msgstr "Fim do degradê linear" +msgstr "Tensor do gradiente da malha" #: ../src/gradient-drag.cpp:565 msgid "Added patch row or column" -msgstr "" +msgstr "Adicionado remendo de linha ou coluna" #: ../src/gradient-drag.cpp:798 msgid "Merge gradient handles" -msgstr "Mesclar alças do degradê" +msgstr "Fundir alças do gradiente" #. we did an undoable action #: ../src/gradient-drag.cpp:1101 msgid "Move gradient handle" -msgstr "Mover alça do degradê" +msgstr "Mover alça do gradiente" #: ../src/gradient-drag.cpp:1160 ../src/widgets/gradient-vector.cpp:834 msgid "Delete gradient stop" -msgstr "Eliminar parada do degradê" +msgstr "Eliminar paragem do gradiente" #: ../src/gradient-drag.cpp:1423 #, c-format @@ -9443,8 +8799,8 @@ msgid "" "%s %d for: %s%s; drag with Ctrl to snap offset; click with Ctrl" "+Alt to delete stop" msgstr "" -"%s %d para: %s%s; arraste com Ctrl para dividir o deslocamento em " -"intervalos, clique com Ctrl+Alt Eliminar a parada" +"%s %d para: %s%s; arrastar com Ctrl para atrair ao deslocamento; " +"clicar com Ctrl+Alt para eliminar a paragem" #: ../src/gradient-drag.cpp:1427 ../src/gradient-drag.cpp:1434 msgid " (stroke)" @@ -9456,17 +8812,17 @@ msgid "" "%s for: %s%s; drag with Ctrl to snap angle, with Ctrl+Alt to " "preserve angle, with Ctrl+Shift to scale around center" msgstr "" -"%s para: %s%s; arraste com Ctrl para observar o ângulo, com Ctrl" -"+Alt para preservá-lo, e com Ctrl+Shift para modificar o tamanho " -"a partir de seu centro." +"%s para: %s%s; arrastar com Ctrl para atrair ao ângulo; com Ctrl" +"+Alt para manter o ângulo; com Ctrl+Shift para dimensionar pelo " +"centro" #: ../src/gradient-drag.cpp:1439 msgid "" "Radial gradient center and focus; drag with Shift to " "separate focus" msgstr "" -"Centro e foco do degradê radial; arraste com Shift para " -"separar o foco" +"Centro e foco do gradiente radial; arrastar com Shift " +"para separar o foco" #: ../src/gradient-drag.cpp:1442 #, c-format @@ -9477,59 +8833,54 @@ msgid_plural "" "Gradient point shared by %d gradients; drag with Shift to " "separate" msgstr[0] "" -"Ponto do degradê compartilhado pelo degradê %d; arraste com Shift para separar" +"Ponto do gradiente partilhado por %d gradiente; arrastar com " +"Shift para separar" msgstr[1] "" -"Ponto do degradê compartilhado pelos degradês %d; arraste com " +"Ponto do gradiente partilhado por %d gradientes; arrastar com " "Shift para separar" #: ../src/gradient-drag.cpp:2364 msgid "Move gradient handle(s)" -msgstr "Mover alça(s) do degradê" +msgstr "Mover alças do gradiente" #: ../src/gradient-drag.cpp:2398 msgid "Move gradient mid stop(s)" -msgstr "Mover parada(s) central(is) do degradê" +msgstr "Mover paragens do meio do gradiente" #: ../src/gradient-drag.cpp:2687 msgid "Delete gradient stop(s)" -msgstr "Eliminar parada(s) do degradê" +msgstr "Eliminar paragens do gradiente" #: ../src/inkscape.cpp:242 -#, fuzzy msgid "Autosave failed! Cannot create directory %1." -msgstr "" -"Não foi possível criar a pasta %s.\n" -"%s" +msgstr "A gravação automática falhou! Não foi possível criar a pasta %1." #: ../src/inkscape.cpp:251 -#, fuzzy msgid "Autosave failed! Cannot open directory %1." -msgstr "" -"Não foi possível criar a pasta %s.\n" -"%s" +msgstr "A gravação automática falhou! Não foi possível abrir a pasta %1." #: ../src/inkscape.cpp:267 -#, fuzzy msgid "Autosaving documents..." -msgstr "Salvando o desenho..." +msgstr "A gravar automaticamente os documentos..." #: ../src/inkscape.cpp:335 msgid "Autosave failed! Could not find inkscape extension to save document." msgstr "" +"A gravação automática falhou! Não foi possível encontrar a extensão do " +"Inkscape para gravar o documento." #: ../src/inkscape.cpp:338 ../src/inkscape.cpp:345 -#, fuzzy, c-format +#, c-format msgid "Autosave failed! File %s could not be saved." -msgstr "O ficheiro %s não pode ser salvo." +msgstr "A gravação automática falhou! Não foi possível gravar o ficheiro %s." #: ../src/inkscape.cpp:360 msgid "Autosave complete." -msgstr "" +msgstr "Gravação automática finalizada." #: ../src/inkscape.cpp:618 msgid "Untitled document" -msgstr "Desenho sem título" +msgstr "Documento sem título" #. Show nice dialog box #: ../src/inkscape.cpp:650 @@ -9541,12 +8892,12 @@ msgid "" "Automatic backups of unsaved documents were done to the following " "locations:\n" msgstr "" -"Cópias de segurança de desenhos não salvos foram feitas para os seguintes " -"lugares:\n" +"As cópias de segurança de documentos por gravar foram feitas para os " +"seguintes locais:\n" #: ../src/inkscape.cpp:652 msgid "Automatic backup of the following documents failed:\n" -msgstr "A cópia de segurança automática dos seguintes desenhos falhou:\n" +msgstr "Falhou a cópia de segurança automática dos seguintes documentos:\n" #: ../src/knot.cpp:348 msgid "Node or handle drag canceled." @@ -9554,118 +8905,118 @@ msgstr "Arrasto de nó ou alça cancelado." #: ../src/knotholder.cpp:171 msgid "Change handle" -msgstr "Mudar manualmente" +msgstr "Alterar alça" #: ../src/knotholder.cpp:258 msgid "Move handle" -msgstr "Mover manualmente" +msgstr "Mover alça" #. TRANSLATORS: This refers to the pattern that's inside the object #: ../src/knotholder.cpp:277 ../src/knotholder.cpp:299 msgid "Move the pattern fill inside the object" -msgstr "Mover preenchimento padrão para dentro do objecto" +msgstr "Mover o padrão do preenchimento dentro do objeto" #: ../src/knotholder.cpp:281 ../src/knotholder.cpp:303 -#, fuzzy msgid "Scale the pattern fill; uniformly if with Ctrl" -msgstr "Dimensionar o padrão de preenchimento uniformemente" +msgstr "" +"Dimensionar o padrão do preenchimento; Ctrl para dimensionar " +"em proporção" #: ../src/knotholder.cpp:285 ../src/knotholder.cpp:307 msgid "Rotate the pattern fill; with Ctrl to snap angle" msgstr "" -"Girar o padrão de preenchimento; com Ctrl para agarrar o ângulo" +"Rodar o padrão do preenchimento; com Ctrl para atrair ao ângulo" #: ../src/libgdl/gdl-dock-bar.c:105 -#, fuzzy msgid "Master" -msgstr "Rasterizar" +msgstr "Painel-Mestre" #: ../src/libgdl/gdl-dock-bar.c:106 msgid "GdlDockMaster object which the dockbar widget is attached to" -msgstr "" +msgstr "O objeto GdlDockMaster ao qual o widget dockbar está ligado" #: ../src/libgdl/gdl-dock-bar.c:113 -#, fuzzy msgid "Dockbar style" -msgstr "Docável" +msgstr "Estilo da barra de painéis" #: ../src/libgdl/gdl-dock-bar.c:114 msgid "Dockbar style to show items on it" -msgstr "" +msgstr "Como mostrar os painéis na barra de painéis recolhidos" #: ../src/libgdl/gdl-dock-item-grip.c:402 msgid "Iconify this dock" -msgstr "" +msgstr "Minimizar para ícone este painel" #: ../src/libgdl/gdl-dock-item-grip.c:404 -#, fuzzy msgid "Close this dock" -msgstr "Fechar a janela do documento" +msgstr "Fechar este painel" #: ../src/libgdl/gdl-dock-item-grip.c:723 ../src/libgdl/gdl-dock-tablabel.c:125 msgid "Controlling dock item" -msgstr "" +msgstr "Controlo do item no painel" #: ../src/libgdl/gdl-dock-item-grip.c:724 msgid "Dockitem which 'owns' this grip" -msgstr "" +msgstr "Item do painel que 'tem' esta garra" #: ../src/libgdl/gdl-dock-item.c:298 ../src/widgets/ruler.cpp:201 #: ../share/extensions/gcodetools_graffiti.inx.h:9 #: ../share/extensions/gcodetools_orientation_points.inx.h:2 -#, fuzzy msgid "Orientation" -msgstr "Orientação da página:" +msgstr "Orientação" #: ../src/libgdl/gdl-dock-item.c:299 msgid "Orientation of the docking item" -msgstr "" +msgstr "Orientação do item no painel" #: ../src/libgdl/gdl-dock-item.c:314 msgid "Resizable" -msgstr "" +msgstr "Dimensionável" #: ../src/libgdl/gdl-dock-item.c:315 msgid "If set, the dock item can be resized when docked in a GtkPanel widget" msgstr "" +"Se definido, este item do painel pode ser dimensionado quando integrado num " +"widget GtkPanel" #: ../src/libgdl/gdl-dock-item.c:322 -#, fuzzy msgid "Item behavior" -msgstr "Comportamento" +msgstr "Comportamento do item" #: ../src/libgdl/gdl-dock-item.c:323 msgid "" "General behavior for the dock item (i.e. whether it can float, if it's " "locked, etc.)" msgstr "" +"Comportamento geral para o item do painel (isto é, se pode flutuar, se está " +"bloqueado, etc.)" #: ../src/libgdl/gdl-dock-item.c:331 ../src/libgdl/gdl-dock-master.c:148 -#, fuzzy msgid "Locked" -msgstr "Bloquear" +msgstr "Bloqueado" #: ../src/libgdl/gdl-dock-item.c:332 msgid "" "If set, the dock item cannot be dragged around and it doesn't show a grip" msgstr "" +"Se definido, o item do painel não pode ser arrastado à volta e não mostra " +"uma garra" #: ../src/libgdl/gdl-dock-item.c:340 msgid "Preferred width" -msgstr "" +msgstr "Largura preferida" #: ../src/libgdl/gdl-dock-item.c:341 msgid "Preferred width for the dock item" -msgstr "" +msgstr "Largura preferida para o item do painel" #: ../src/libgdl/gdl-dock-item.c:347 -#, fuzzy msgid "Preferred height" -msgstr "Altura da Barra:" +msgstr "Altura preferida" #: ../src/libgdl/gdl-dock-item.c:348 msgid "Preferred height for the dock item" -msgstr "" +msgstr "Altura preferida para o item do painel" #: ../src/libgdl/gdl-dock-item.c:716 #, c-format @@ -9673,6 +9024,8 @@ msgid "" "You can't add a dock object (%p of type %s) inside a %s. Use a GdlDock or " "some other compound dock object." msgstr "" +"Não pode adicionar um objeto do painel (%p do tipo %s) dentro de %s. Use um " +"GdlDock ou outro objeto de painel composto" #: ../src/libgdl/gdl-dock-item.c:723 #, c-format @@ -9680,23 +9033,23 @@ msgid "" "Attempting to add a widget with type %s to a %s, but it can only contain one " "widget at a time; it already contains a widget of type %s" msgstr "" +"A tentar adicionar um widget com o tipo %s a %s, mas apenas pode conter 1 " +"widget de cada vez; já contém 1 widget do tipo %s" #: ../src/libgdl/gdl-dock-item.c:1474 ../src/libgdl/gdl-dock-item.c:1524 #, c-format msgid "Unsupported docking strategy %s in dock object of type %s" -msgstr "" +msgstr "Estratégia de painel não suportada %s no objeto do painel do tipo %s" #. UnLock menuitem #: ../src/libgdl/gdl-dock-item.c:1632 -#, fuzzy msgid "UnLock" -msgstr "Bloquear" +msgstr "Desbloquear" #. Hide menuitem. #: ../src/libgdl/gdl-dock-item.c:1639 -#, fuzzy msgid "Hide" -msgstr "_Ocultar" +msgstr "Ocultar" #. Lock menuitem #: ../src/libgdl/gdl-dock-item.c:1644 @@ -9706,32 +9059,32 @@ msgstr "Bloquear" #: ../src/libgdl/gdl-dock-item.c:1907 #, c-format msgid "Attempt to bind an unbound item %p" -msgstr "" +msgstr "Tentar amarrar um item %p desamarrado" #: ../src/libgdl/gdl-dock-master.c:141 ../src/libgdl/gdl-dock.c:184 -#, fuzzy msgid "Default title" -msgstr "Unidades padrão:" +msgstr "Título padrão" #: ../src/libgdl/gdl-dock-master.c:142 msgid "Default title for newly created floating docks" -msgstr "" +msgstr "Título padrão para painéis flutuantes criados" #: ../src/libgdl/gdl-dock-master.c:149 msgid "" "If is set to 1, all the dock items bound to the master are locked; if it's " "0, all are unlocked; -1 indicates inconsistency among the items" msgstr "" +"Se for usado o valor 1, todos os itens do painel limitados pelo painel-" +"mestre; se for usado 0 todos eles estão bloqueados; -1 indica inconcistência " +"ao longo dos itens" #: ../src/libgdl/gdl-dock-master.c:157 ../src/libgdl/gdl-switcher.c:737 -#, fuzzy msgid "Switcher Style" -msgstr "Curativo Ladrilhado" +msgstr "Estilo dos Botões" #: ../src/libgdl/gdl-dock-master.c:158 ../src/libgdl/gdl-switcher.c:738 -#, fuzzy msgid "Switcher buttons style" -msgstr "Trocado para a próxima camada." +msgstr "Estilo dos botões dos painéis minimizados" #: ../src/libgdl/gdl-dock-master.c:783 #, c-format @@ -9739,6 +9092,8 @@ msgid "" "master %p: unable to add object %p[%s] to the hash. There already is an " "item with that name (%p)." msgstr "" +"painel-mestre %p: impossível adicionar o objeto %p[%s] ao hash. Já existe um " +"item com esse nome (%p)." #: ../src/libgdl/gdl-dock-master.c:955 #, c-format @@ -9746,6 +9101,8 @@ msgid "" "The new dock controller %p is automatic. Only manual dock objects should be " "named controller." msgstr "" +"O novo controlador do painel %p é automático. Apenas objetos de painel " +"manuais podem ser controladores com nome." #: ../src/libgdl/gdl-dock-notebook.c:132 #: ../src/ui/dialog/align-and-distribute.cpp:1089 @@ -9758,9 +9115,8 @@ msgid "Page" msgstr "Página" #: ../src/libgdl/gdl-dock-notebook.c:133 -#, fuzzy msgid "The index of the current page" -msgstr "Renomear a camada actual" +msgstr "O índice da página atual" #: ../src/libgdl/gdl-dock-object.c:125 #: ../src/live_effects/parameter/originalpatharray.cpp:82 @@ -9772,43 +9128,39 @@ msgstr "Nome" #: ../src/libgdl/gdl-dock-object.c:126 msgid "Unique name for identifying the dock object" -msgstr "" +msgstr "Nome único para identificar o painel" #: ../src/libgdl/gdl-dock-object.c:133 -#, fuzzy msgid "Long name" -msgstr "Não nomeado" +msgstr "Nome longo" #: ../src/libgdl/gdl-dock-object.c:134 -#, fuzzy msgid "Human readable name for the dock object" -msgstr "Um rótulo com forma livre para o objecto" +msgstr "Nome descritivo do painel" #: ../src/libgdl/gdl-dock-object.c:140 -#, fuzzy msgid "Stock Icon" -msgstr "Fechar brechas" +msgstr "Ãcone" #: ../src/libgdl/gdl-dock-object.c:141 msgid "Stock icon for the dock object" -msgstr "" +msgstr "Ãcone para o painel" #: ../src/libgdl/gdl-dock-object.c:147 msgid "Pixbuf Icon" -msgstr "" +msgstr "Ãcone Pixbuf" #: ../src/libgdl/gdl-dock-object.c:148 msgid "Pixbuf icon for the dock object" -msgstr "" +msgstr "Ãcone do Pixbuf para o painel" #: ../src/libgdl/gdl-dock-object.c:153 -#, fuzzy msgid "Dock master" -msgstr "Bloquear Camada" +msgstr "Painel-Mestre" #: ../src/libgdl/gdl-dock-object.c:154 msgid "Dock master this dock object is bound to" -msgstr "" +msgstr "Painel-mestre ao qual este painel é associado" #: ../src/libgdl/gdl-dock-object.c:463 #, c-format @@ -9816,6 +9168,8 @@ msgid "" "Call to gdl_dock_object_dock in a dock object %p (object type is %s) which " "hasn't implemented this method" msgstr "" +"Chamada para gdl_dock_object_dock num objeto painel %p (o tipo de objeto é " +"%s) que não tinha implementado este método" #: ../src/libgdl/gdl-dock-object.c:602 #, c-format @@ -9823,103 +9177,108 @@ msgid "" "Dock operation requested in a non-bound object %p. The application might " "crash" msgstr "" +"Operação pedida para introduzir um painel num objeto não associado %p. A " +"aplicação pode bloquear" #: ../src/libgdl/gdl-dock-object.c:609 #, c-format msgid "Cannot dock %p to %p because they belong to different masters" msgstr "" +"Não é possível introduzir %p em %p porque pertencem a painéis-mestres " +"diferentes" #: ../src/libgdl/gdl-dock-object.c:651 #, c-format msgid "" "Attempt to bind to %p an already bound dock object %p (current master: %p)" msgstr "" +"Tentativa de associar a %p um painel já associado %p (painel-mestre atual: " +"%p)" #: ../src/libgdl/gdl-dock-paned.c:130 ../src/widgets/ruler.cpp:239 -#, fuzzy msgid "Position" -msgstr "Posição:" +msgstr "Posição" #: ../src/libgdl/gdl-dock-paned.c:131 msgid "Position of the divider in pixels" -msgstr "" +msgstr "Posição do divisor em píxeis" #: ../src/libgdl/gdl-dock-placeholder.c:141 -#, fuzzy msgid "Sticky" -msgstr "minúsculo" +msgstr "Atração como íman" #: ../src/libgdl/gdl-dock-placeholder.c:142 msgid "" "Whether the placeholder will stick to its host or move up the hierarchy when " "the host is redocked" msgstr "" +"Se o espaço reservado irá ser atraído ao seu hospedeiro ou se se moverá para " +"cima na hierarquia quando o hospedeiro for colocado de novo na barra de " +"painéis" #: ../src/libgdl/gdl-dock-placeholder.c:149 -#, fuzzy msgid "Host" -msgstr "recuar" +msgstr "Hospedeiro" #: ../src/libgdl/gdl-dock-placeholder.c:150 msgid "The dock object this placeholder is attached to" -msgstr "" +msgstr "O painel ao qual este espaço reservado está ligado" #: ../src/libgdl/gdl-dock-placeholder.c:157 -#, fuzzy msgid "Next placement" -msgstr "Novo nó elementar" +msgstr "Posicionamento seguinte" #: ../src/libgdl/gdl-dock-placeholder.c:158 msgid "" "The position an item will be docked to our host if a request is made to dock " "to us" msgstr "" +"A posição a que um item será associado ao nosso hospedeiro se for feito um " +"pedido para tal" #: ../src/libgdl/gdl-dock-placeholder.c:168 msgid "Width for the widget when it's attached to the placeholder" -msgstr "" +msgstr "Largura do widget quando é associado ao espaço reservado" #: ../src/libgdl/gdl-dock-placeholder.c:176 msgid "Height for the widget when it's attached to the placeholder" -msgstr "" +msgstr "Altura do widget quando é associado ao espaço reservado" #: ../src/libgdl/gdl-dock-placeholder.c:182 -#, fuzzy msgid "Floating Toplevel" -msgstr "Flutuando" +msgstr "Nível Flutuante do Topo" #: ../src/libgdl/gdl-dock-placeholder.c:183 msgid "Whether the placeholder is standing in for a floating toplevel dock" msgstr "" +"Se o espaço reservado está à espera de um painel de nível flutuante do topo" #: ../src/libgdl/gdl-dock-placeholder.c:189 -#, fuzzy msgid "X Coordinate" -msgstr "Coordenadas do cursor" +msgstr "Coordenada X" #: ../src/libgdl/gdl-dock-placeholder.c:190 -#, fuzzy msgid "X coordinate for dock when floating" -msgstr "Coordenada X da origem da grelha" +msgstr "Coordenada X para o painel quando estiver a flutuar" #: ../src/libgdl/gdl-dock-placeholder.c:196 -#, fuzzy msgid "Y Coordinate" -msgstr "Coordenadas do cursor" +msgstr "Coordenada Y" #: ../src/libgdl/gdl-dock-placeholder.c:197 -#, fuzzy msgid "Y coordinate for dock when floating" -msgstr "Coordenada Y da origem da grelha" +msgstr "Coordenada Y para o painel quando estiver a flutuar" #: ../src/libgdl/gdl-dock-placeholder.c:499 msgid "Attempt to dock a dock object to an unbound placeholder" -msgstr "" +msgstr "Tentar associar painel a um espaço reservado não associado" #: ../src/libgdl/gdl-dock-placeholder.c:611 #, c-format msgid "Got a detach signal from an object (%p) who is not our host %p" msgstr "" +"Foi obtido um sinal de desaclopar de um objeto (%p) que não é o nosso " +"hospedeiro %p" #: ../src/libgdl/gdl-dock-placeholder.c:636 #, c-format @@ -9927,10 +9286,11 @@ msgid "" "Something weird happened while getting the child placement for %p from " "parent %p" msgstr "" +"Aconteceu algo estranho ao obter o posicionamento do filho para %p do pai %p" #: ../src/libgdl/gdl-dock-tablabel.c:126 msgid "Dockitem which 'owns' this tablabel" -msgstr "" +msgstr "Item do painel que 'tem' esta etiqueta de tabela" #: ../src/libgdl/gdl-dock.c:176 ../src/ui/dialog/inkscape-preferences.cpp:687 #: ../src/ui/dialog/inkscape-preferences.cpp:730 @@ -9939,284 +9299,246 @@ msgstr "Flutuando" #: ../src/libgdl/gdl-dock.c:177 msgid "Whether the dock is floating in its own window" -msgstr "" +msgstr "Quando o painel estiver a flutuar na sua própria janela" #: ../src/libgdl/gdl-dock.c:185 msgid "Default title for the newly created floating docks" -msgstr "" +msgstr "Título padrão para painéis flutuantes criados" #: ../src/libgdl/gdl-dock.c:192 msgid "Width for the dock when it's of floating type" -msgstr "" +msgstr "Largura do painel quanto é do tipo flutuante" #: ../src/libgdl/gdl-dock.c:200 msgid "Height for the dock when it's of floating type" -msgstr "" +msgstr "Altura do painel quanto é do tipo flutuante" #: ../src/libgdl/gdl-dock.c:207 -#, fuzzy msgid "Float X" -msgstr "Flutuando" +msgstr "Flutuar X" #: ../src/libgdl/gdl-dock.c:208 -#, fuzzy msgid "X coordinate for a floating dock" -msgstr "Coordenada X da origem da grelha" +msgstr "Coordenada X para um painel flutuante" #: ../src/libgdl/gdl-dock.c:215 -#, fuzzy msgid "Float Y" -msgstr "Flutuando" +msgstr "Flutuar Y" #: ../src/libgdl/gdl-dock.c:216 -#, fuzzy msgid "Y coordinate for a floating dock" -msgstr "Coordenada Y da origem da grelha" +msgstr "Coordenada Y para um painel flutuante" #: ../src/libgdl/gdl-dock.c:476 #, c-format msgid "Dock #%d" -msgstr "" +msgstr "Painel #%d" #: ../src/libnrtype/FontFactory.cpp:636 msgid "Ignoring font without family that will crash Pango" -msgstr "Ignorando fonte sem família que irá Bloquear o Pango" +msgstr "Ignorando fonte sem família que irá bloquear o Pango" #: ../src/live_effects/effect.cpp:99 -#, fuzzy msgid "doEffect stack test" -msgstr "teste de pilha de Efeito" +msgstr "Teste de pilha doEffect" #: ../src/live_effects/effect.cpp:100 -#, fuzzy msgid "Angle bisector" -msgstr "Definir VP na direção X" +msgstr "Bisetor de ângulo" #: ../src/live_effects/effect.cpp:101 msgid "Circle (by center and radius)" -msgstr "" +msgstr "Círculo (pelo centro e raio)" #: ../src/live_effects/effect.cpp:102 msgid "Circle by 3 points" -msgstr "" +msgstr "Círculo por 3 pontos" #: ../src/live_effects/effect.cpp:103 -#, fuzzy msgid "Dynamic stroke" -msgstr "Traço preto" +msgstr "Traço dinâmico" #: ../src/live_effects/effect.cpp:104 ../share/extensions/extrude.inx.h:1 msgid "Extrude" msgstr "Extrudir" #: ../src/live_effects/effect.cpp:105 -#, fuzzy msgid "Lattice Deformation" -msgstr "Giro das letras" +msgstr "Deformação por Grelha" #: ../src/live_effects/effect.cpp:106 -#, fuzzy msgid "Line Segment" -msgstr "Segmentos de _linha" +msgstr "Segmento de Linha" #: ../src/live_effects/effect.cpp:108 -#, fuzzy msgid "Parallel" -msgstr "Tipografia normal" +msgstr "Paralelo" #: ../src/live_effects/effect.cpp:109 -#, fuzzy msgid "Path length" -msgstr "Caminho ao longo do caminho" +msgstr "Comprimento do caminho" #: ../src/live_effects/effect.cpp:110 -#, fuzzy msgid "Perpendicular bisector" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "Bisetor perpendicular" #: ../src/live_effects/effect.cpp:111 -#, fuzzy msgid "Perspective path" -msgstr "Perspectiva" +msgstr "Caminho de perspetiva" #: ../src/live_effects/effect.cpp:112 -#, fuzzy msgid "Recursive skeleton" -msgstr "Remover máscara da selecção" +msgstr "Esqueleto recursivo" #: ../src/live_effects/effect.cpp:113 -#, fuzzy msgid "Tangent to curve" -msgstr "Arrastar curva" +msgstr "Tangente à curva" #: ../src/live_effects/effect.cpp:114 -#, fuzzy msgid "Text label" -msgstr "Ajustar rótulo do objecto" +msgstr "Etiqueta do texto" #: ../src/live_effects/effect.cpp:115 msgid "Fillet/Chamfer" -msgstr "" +msgstr "Filete/Chanfra" #. 0.46 #: ../src/live_effects/effect.cpp:118 -#, fuzzy msgid "Bend" -msgstr "Misturar" +msgstr "Deformar" #: ../src/live_effects/effect.cpp:119 -#, fuzzy msgid "Gears" -msgstr "Engrenagens" +msgstr "Rodas Dentadas" #: ../src/live_effects/effect.cpp:120 -#, fuzzy msgid "Pattern Along Path" -msgstr "Padrão ao longo do caminho" +msgstr "Padrão ao Longo do Caminho" #. for historic reasons, this effect is called skeletal(strokes) in Inkscape:SVG #: ../src/live_effects/effect.cpp:121 -#, fuzzy msgid "Stitch Sub-Paths" -msgstr "Pontilhar peças" +msgstr "Sub-Caminhos Cosidos" #. 0.47 #: ../src/live_effects/effect.cpp:123 msgid "VonKoch" -msgstr "" +msgstr "VonKoch" #: ../src/live_effects/effect.cpp:124 msgid "Knot" -msgstr "" +msgstr "Nó de cruzamento" #: ../src/live_effects/effect.cpp:125 -#, fuzzy msgid "Construct grid" -msgstr "Grelha axonométrica" +msgstr "Grelha de construção" #: ../src/live_effects/effect.cpp:126 msgid "Spiro spline" -msgstr "" +msgstr "Espiral spline" #: ../src/live_effects/effect.cpp:127 -#, fuzzy msgid "Envelope Deformation" -msgstr "Informação" +msgstr "Deformação de Envelope" #: ../src/live_effects/effect.cpp:128 -#, fuzzy msgid "Interpolate Sub-Paths" -msgstr "Interpolar" +msgstr "Interpolar Sub-Caminhos" #: ../src/live_effects/effect.cpp:129 msgid "Hatches (rough)" -msgstr "" +msgstr "Rabiscos (rugoso)" #: ../src/live_effects/effect.cpp:130 -#, fuzzy msgid "Sketch" -msgstr "Ajustar" +msgstr "Riscos tipo Esboço" #: ../src/live_effects/effect.cpp:131 -#, fuzzy msgid "Ruler" -msgstr "_Réguas" +msgstr "Régua" #. 0.91 #: ../src/live_effects/effect.cpp:133 -#, fuzzy msgid "Power stroke" -msgstr "Padrão de traço" +msgstr "Traço variável" #: ../src/live_effects/effect.cpp:134 -#, fuzzy msgid "Clone original path" -msgstr "Substituir texto..." +msgstr "Clonar caminho original" #: ../src/live_effects/effect.cpp:137 -#, fuzzy msgid "Lattice Deformation 2" -msgstr "Giro das letras" +msgstr "Deformação por Grelha 2" #: ../src/live_effects/effect.cpp:138 -#, fuzzy msgid "Perspective/Envelope" -msgstr "Perspectiva" +msgstr "Perspetiva/Envelope" #: ../src/live_effects/effect.cpp:139 -#, fuzzy msgid "Interpolate points" -msgstr "Interpolar" +msgstr "Interpolar pontos" #: ../src/live_effects/effect.cpp:140 -#, fuzzy msgid "Transform by 2 points" -msgstr "Transformar degradês" +msgstr "Transformar com 2 pontos" #: ../src/live_effects/effect.cpp:141 #: ../src/live_effects/lpe-show_handles.cpp:26 -#, fuzzy msgid "Show handles" -msgstr "Desenhar Alças" +msgstr "Mostrar alças e nós" #: ../src/live_effects/effect.cpp:143 ../src/widgets/pencil-toolbar.cpp:118 -#, fuzzy msgid "BSpline" -msgstr "_Contorno" +msgstr "B-Spline" #: ../src/live_effects/effect.cpp:144 -#, fuzzy msgid "Join type" -msgstr " tipo: " +msgstr "Tipo de união" #: ../src/live_effects/effect.cpp:145 -#, fuzzy msgid "Taper stroke" -msgstr "Padrão de traço" +msgstr "Traço a estreitar" #: ../src/live_effects/effect.cpp:146 msgid "Mirror symmetry" -msgstr "" +msgstr "Simetria de espelho" #: ../src/live_effects/effect.cpp:147 -#, fuzzy msgid "Rotate copies" -msgstr "Girar nós" +msgstr "Rodar cópias" #. Ponyscape -> Inkscape 0.92 #: ../src/live_effects/effect.cpp:149 -#, fuzzy msgid "Attach path" -msgstr "Pontilhar peças" +msgstr "Anexar caminho" #: ../src/live_effects/effect.cpp:150 -#, fuzzy msgid "Fill between strokes" -msgstr "_Preenchimento e Traço" +msgstr "Preenchimento entre traços" #: ../src/live_effects/effect.cpp:151 ../src/selection-chemistry.cpp:2906 msgid "Fill between many" -msgstr "" +msgstr "Preenchimento entre vários" #: ../src/live_effects/effect.cpp:152 msgid "Ellipse by 5 points" -msgstr "" +msgstr "Elipse com 5 pontos" #: ../src/live_effects/effect.cpp:153 -#, fuzzy msgid "Bounding Box" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Caixa Limitadora" #: ../src/live_effects/effect.cpp:361 -#, fuzzy msgid "Is visible?" -msgstr "_Visível" +msgstr "É visível?" #: ../src/live_effects/effect.cpp:361 msgid "" "If unchecked, the effect remains applied to the object but is temporarily " "disabled on canvas" msgstr "" +"Se desativado, o efeito permanece aplicado ao objeto mas é temporariamente " +"desativado na área de desenho" #: ../src/live_effects/effect.cpp:386 msgid "No effect" @@ -10226,98 +9548,88 @@ msgstr "Sem efeito" #, c-format msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks" msgstr "" +"Por favor especificar um caminho de parâmetro para a ferramenta de Efeitos " +"Interativos em Caminhos '%s' com %d cliques do rato" #: ../src/live_effects/effect.cpp:765 #, c-format msgid "Editing parameter %s." -msgstr "Parâmetro de edição %s." +msgstr "Editar o parâmetro %s." #: ../src/live_effects/effect.cpp:770 msgid "None of the applied path effect's parameters can be edited on-canvas." msgstr "" -"Nenhum dos parâmetros de efeito de caminho aplicados pode ser editado na " -"área de desenho. " +"Nenhum dos parâmetros de efeito no caminho aplicados pode ser editado na " +"área de desenho." #: ../src/live_effects/lpe-attach-path.cpp:29 -#, fuzzy msgid "Start path:" -msgstr "Pontilhar peças" +msgstr "Caminho inicial:" #: ../src/live_effects/lpe-attach-path.cpp:29 -#, fuzzy msgid "Path to attach to the start of this path" -msgstr "Caminho a ser colocado ao longo do caminho esqueleto" +msgstr "Caminho a ser anexado ao início deste caminho" #: ../src/live_effects/lpe-attach-path.cpp:30 -#, fuzzy msgid "Start path position:" -msgstr "Posição Aleatória" +msgstr "Posição do caminho inicial:" #: ../src/live_effects/lpe-attach-path.cpp:30 msgid "Position to attach path start to" -msgstr "" +msgstr "Posição na qual anexar o início do caminho" #: ../src/live_effects/lpe-attach-path.cpp:31 -#, fuzzy msgid "Start path curve start:" -msgstr "Definir cor do traço" +msgstr "Início da curva do caminho inicial:" #: ../src/live_effects/lpe-attach-path.cpp:31 #: ../src/live_effects/lpe-attach-path.cpp:35 -#, fuzzy msgid "Starting curve" -msgstr "Arrastar curva" +msgstr "Curva inicial" #. , true #: ../src/live_effects/lpe-attach-path.cpp:32 -#, fuzzy msgid "Start path curve end:" -msgstr "Definir cor do traço" +msgstr "Fim da curva do caminho inicial:" #: ../src/live_effects/lpe-attach-path.cpp:32 #: ../src/live_effects/lpe-attach-path.cpp:36 -#, fuzzy msgid "Ending curve" -msgstr "Arrastar curva" +msgstr "Curva final" #. , true #: ../src/live_effects/lpe-attach-path.cpp:33 -#, fuzzy msgid "End path:" -msgstr "Quebrar caminho" +msgstr "Caminho final:" #: ../src/live_effects/lpe-attach-path.cpp:33 -#, fuzzy msgid "Path to attach to the end of this path" -msgstr "Caminho a ser colocado ao longo do caminho esqueleto" +msgstr "Caminho a ser anexado ao final deste caminho" #: ../src/live_effects/lpe-attach-path.cpp:34 -#, fuzzy msgid "End path position:" -msgstr "Posição Aleatória" +msgstr "Posição do caminho final:" #: ../src/live_effects/lpe-attach-path.cpp:34 msgid "Position to attach path end to" -msgstr "" +msgstr "Posição na qual anexar o fim do caminho" #: ../src/live_effects/lpe-attach-path.cpp:35 msgid "End path curve start:" -msgstr "" +msgstr "Início da curva do caminho final:" #. , true #: ../src/live_effects/lpe-attach-path.cpp:36 msgid "End path curve end:" -msgstr "" +msgstr "Fim da curva do caminho final:" #: ../src/live_effects/lpe-bendpath.cpp:69 -#, fuzzy msgid "Bend path:" -msgstr "Quebrar caminho" +msgstr "Caminho de deformação:" #: ../src/live_effects/lpe-bendpath.cpp:69 -#, fuzzy msgid "Path along which to bend the original path" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho ao longo do qual deformar o caminho original" #: ../src/live_effects/lpe-bendpath.cpp:71 #: ../src/live_effects/lpe-patternalongpath.cpp:74 @@ -10327,508 +9639,449 @@ msgid "_Width:" msgstr "_Largura:" #: ../src/live_effects/lpe-bendpath.cpp:71 -#, fuzzy msgid "Width of the path" -msgstr "Largura do padrão" +msgstr "Largura do caminho" #: ../src/live_effects/lpe-bendpath.cpp:72 -#, fuzzy msgid "W_idth in units of length" -msgstr "Largura em unidades de comprimento" +msgstr "Largura em un_idades de comprimento" #: ../src/live_effects/lpe-bendpath.cpp:72 -#, fuzzy msgid "Scale the width of the path in units of its length" -msgstr "Escala da largura do padrão em unidades de seu comprimento" +msgstr "Dimensionar a largura do caminho em unidades do seu comprimento" #: ../src/live_effects/lpe-bendpath.cpp:73 -#, fuzzy msgid "_Original path is vertical" -msgstr "Padrão é vertical" +msgstr "Caminho _original é vertical" #: ../src/live_effects/lpe-bendpath.cpp:73 msgid "Rotates the original 90 degrees, before bending it along the bend path" msgstr "" +"Roda o original em 90 graus, antes de o dobrar ao longo do caminho de dobra" #: ../src/live_effects/lpe-bendpath.cpp:178 #: ../src/live_effects/lpe-patternalongpath.cpp:285 -#, fuzzy msgid "Change the width" -msgstr "Alterar largura do traço" +msgstr "Alterar largura" #: ../src/live_effects/lpe-bounding-box.cpp:24 #: ../src/live_effects/lpe-clone-original.cpp:18 #: ../src/live_effects/lpe-fill-between-many.cpp:25 #: ../src/live_effects/lpe-fill-between-strokes.cpp:23 -#, fuzzy msgid "Linked path:" -msgstr "Encaixar no camin_ho" +msgstr "Caminho ligado:" #: ../src/live_effects/lpe-bounding-box.cpp:24 #: ../src/live_effects/lpe-clone-original.cpp:18 #: ../src/live_effects/lpe-fill-between-strokes.cpp:23 -#, fuzzy msgid "Path from which to take the original path data" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho a partir do qual obter os dados do caminho original" #: ../src/live_effects/lpe-bounding-box.cpp:25 -#, fuzzy msgid "Visual Bounds" -msgstr "Margem oposta da caixa de limites" +msgstr "Limites Visuais" #: ../src/live_effects/lpe-bounding-box.cpp:25 -#, fuzzy msgid "Uses the visual bounding box" -msgstr "Margem oposta da caixa de limites" +msgstr "Usa a caixa limitadora visual" #: ../src/live_effects/lpe-bspline.cpp:30 msgid "Steps with CTRL:" -msgstr "" +msgstr "Passos com CTRL:" #: ../src/live_effects/lpe-bspline.cpp:30 msgid "Change number of steps with CTRL pressed" -msgstr "" +msgstr "Alterar número de passos com a tecla CTRL premida" #: ../src/live_effects/lpe-bspline.cpp:31 #: ../src/live_effects/lpe-simplify.cpp:33 #: ../src/live_effects/lpe-transform_2pts.cpp:43 -#, fuzzy msgid "Helper size:" -msgstr "Ângulo" +msgstr "Tamanho do indicador:" #: ../src/live_effects/lpe-bspline.cpp:31 #: ../src/live_effects/lpe-simplify.cpp:33 -#, fuzzy msgid "Helper size" -msgstr "Ângulo" +msgstr "Tamanho do indicador" #: ../src/live_effects/lpe-bspline.cpp:32 msgid "Apply changes if weight = 0%" -msgstr "" +msgstr "Aplicar alterações se a altura for = 0%" #: ../src/live_effects/lpe-bspline.cpp:33 msgid "Apply changes if weight > 0%" -msgstr "" +msgstr "Aplicar alterações se a altura for > 0%" #: ../src/live_effects/lpe-bspline.cpp:34 #: ../src/live_effects/lpe-fillet-chamfer.cpp:56 -#, fuzzy msgid "Change only selected nodes" -msgstr "Juntar camimhos nos nós seleccionados" +msgstr "Alterar apenas nós selecionados" #: ../src/live_effects/lpe-bspline.cpp:35 -#, fuzzy msgid "Change weight %:" -msgstr "Altura da Barra:" +msgstr "Alterar altura %:" #: ../src/live_effects/lpe-bspline.cpp:35 -#, fuzzy msgid "Change weight percent of the effect" -msgstr "Alterar posição da parada do degradê" +msgstr "Alterar percentagem da altura do efeito" #: ../src/live_effects/lpe-bspline.cpp:99 -#, fuzzy msgid "Default weight" -msgstr "Unidades padrão:" +msgstr "Altura padrão" #: ../src/live_effects/lpe-bspline.cpp:104 -#, fuzzy msgid "Make cusp" -msgstr "Criar estrela" +msgstr "Tornar afiado" #: ../src/live_effects/lpe-bspline.cpp:148 -#, fuzzy msgid "Change to default weight" -msgstr "Unidades padrão:" +msgstr "Alterar para a altura padrão" #: ../src/live_effects/lpe-bspline.cpp:154 -#, fuzzy msgid "Change to 0 weight" -msgstr "Altura da Barra:" +msgstr "Alterar para a altura 0" #: ../src/live_effects/lpe-bspline.cpp:160 #: ../src/live_effects/lpe-fillet-chamfer.cpp:240 #: ../src/live_effects/lpe-fillet-chamfer.cpp:262 #: ../src/live_effects/parameter/parameter.cpp:170 msgid "Change scalar parameter" -msgstr "Mudar parâmetro escalar" +msgstr "Alterar parâmetro de escala" #: ../src/live_effects/lpe-constructgrid.cpp:27 -#, fuzzy msgid "Size _X:" -msgstr "Tamanho" +msgstr "Tamanho _X:" #: ../src/live_effects/lpe-constructgrid.cpp:27 -#, fuzzy msgid "The size of the grid in X direction." -msgstr "Definir VP na direção X" +msgstr "Tamanho da grelha na direção X." #: ../src/live_effects/lpe-constructgrid.cpp:28 -#, fuzzy msgid "Size _Y:" -msgstr "Tamanho" +msgstr "Tamanho _Y:" #: ../src/live_effects/lpe-constructgrid.cpp:28 -#, fuzzy msgid "The size of the grid in Y direction." -msgstr "Definir VP na direção Y" +msgstr "Tamanho da grelha na direção Y." #: ../src/live_effects/lpe-curvestitch.cpp:41 -#, fuzzy msgid "Stitch path:" -msgstr "Pontilhar peças" +msgstr "Caminho a coser:" #: ../src/live_effects/lpe-curvestitch.cpp:41 msgid "The path that will be used as stitch." -msgstr "O caminho que será usado como um curativo." +msgstr "O caminho que será usado para coser." #: ../src/live_effects/lpe-curvestitch.cpp:42 -#, fuzzy msgid "N_umber of paths:" -msgstr "Nr de caminhos" +msgstr "Nú_mero de caminhos:" #: ../src/live_effects/lpe-curvestitch.cpp:42 msgid "The number of paths that will be generated." msgstr "O número de caminhos que serão gerados." #: ../src/live_effects/lpe-curvestitch.cpp:43 -#, fuzzy msgid "Sta_rt edge variance:" -msgstr "Propriedades de Estrelas" +msgstr "A va_riação da borda inicial:" #: ../src/live_effects/lpe-curvestitch.cpp:43 msgid "" "The amount of random jitter to move the start points of the stitches inside " "& outside the guide path" msgstr "" +"A quantidade de variação aleatória para mover os pontos iniciais dos " +"caminhos cosidos dentro e fora da guia" #: ../src/live_effects/lpe-curvestitch.cpp:44 -#, fuzzy msgid "Sta_rt spacing variance:" -msgstr "Variação do ponto de início" +msgstr "Variação do espaço _inicial:" #: ../src/live_effects/lpe-curvestitch.cpp:44 msgid "" "The amount of random shifting to move the start points of the stitches back " "& forth along the guide path" msgstr "" +"A quantidade do deslocamento aleatório para mover os pontos iniciais dos " +"caminhos cosidos para a frente e para trás ao longo da guia" #: ../src/live_effects/lpe-curvestitch.cpp:45 -#, fuzzy msgid "End ed_ge variance:" -msgstr "Propriedades de Estrelas" +msgstr "A variação da _borda final:" #: ../src/live_effects/lpe-curvestitch.cpp:45 msgid "" "The amount of randomness that moves the end points of the stitches inside & " "outside the guide path" msgstr "" +"A quantidade de aleatoriedade para mover os pontos finais dos caminhos " +"cosidos dentro e fora da guia" #: ../src/live_effects/lpe-curvestitch.cpp:46 -#, fuzzy msgid "End spa_cing variance:" -msgstr "Variação do ponto de início" +msgstr "Variação do espaço _final:" #: ../src/live_effects/lpe-curvestitch.cpp:46 msgid "" "The amount of random shifting to move the end points of the stitches back & " "forth along the guide path" msgstr "" +"A quantidade do deslocamento aleatório para mover os pontos finais dos " +"caminhos cosidos para a frente e para trás ao longo da guia" #: ../src/live_effects/lpe-curvestitch.cpp:47 -#, fuzzy msgid "Scale _width:" -msgstr "Escala de largura" +msgstr "Dimensão da _largura:" #: ../src/live_effects/lpe-curvestitch.cpp:47 -#, fuzzy msgid "Scale the width of the stitch path" -msgstr "Escala da largura do caminho de traço" +msgstr "Dimensão da largura do caminho cosido" #: ../src/live_effects/lpe-curvestitch.cpp:48 -#, fuzzy msgid "Scale _width relative to length" -msgstr "Escala de largura relativa" +msgstr "Dimensão da _largura relativa ao comprimento" #: ../src/live_effects/lpe-curvestitch.cpp:48 -#, fuzzy msgid "Scale the width of the stitch path relative to its length" -msgstr "Escala da largura do caminho de traço em relação ao seu comprimento" +msgstr "Dimensão da largura do caminho cosido em relação ao seu comprimento" #: ../src/live_effects/lpe-ellipse_5pts.cpp:77 msgid "Five points required for constructing an ellipse" -msgstr "" +msgstr "São necessários 5 pontos para construir uma elipse" #: ../src/live_effects/lpe-ellipse_5pts.cpp:162 msgid "No ellipse found for specified points" -msgstr "" +msgstr "Não foi encontrada nenhuma elipse para os pontos especificados" +# Não é necessário traduzir e introduzir "bend" aqui #: ../src/live_effects/lpe-envelope.cpp:31 -#, fuzzy msgid "Top bend path:" -msgstr "Quebrar caminho" +msgstr "Caminho de cima:" #: ../src/live_effects/lpe-envelope.cpp:31 -#, fuzzy msgid "Top path along which to bend the original path" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho de cima ao longo do qual deformar o caminho original" +# Não é necessário traduzir e introduzir "bend" aqui #: ../src/live_effects/lpe-envelope.cpp:32 -#, fuzzy msgid "Right bend path:" -msgstr "Quebrar caminho" +msgstr "Caminho da direita:" #: ../src/live_effects/lpe-envelope.cpp:32 -#, fuzzy msgid "Right path along which to bend the original path" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho da direita ao longo do qual deformar o caminho original" +# Não é necessário traduzir e introduzir "bend" aqui #: ../src/live_effects/lpe-envelope.cpp:33 -#, fuzzy msgid "Bottom bend path:" -msgstr "Quebrar caminho" +msgstr "Caminho de baixo:" #: ../src/live_effects/lpe-envelope.cpp:33 -#, fuzzy msgid "Bottom path along which to bend the original path" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho de baixo ao longo do qual deformar o caminho original" +# Não é necessário traduzir e introduzir "bend" aqui #: ../src/live_effects/lpe-envelope.cpp:34 -#, fuzzy msgid "Left bend path:" -msgstr "Quebrar caminho" +msgstr "Caminho da esquerda:" #: ../src/live_effects/lpe-envelope.cpp:34 -#, fuzzy msgid "Left path along which to bend the original path" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho da esquerda ao longo do qual deformar o caminho original" #: ../src/live_effects/lpe-envelope.cpp:35 -#, fuzzy msgid "_Enable left & right paths" -msgstr "Encaixar no camin_ho" +msgstr "Ativar caminhos da _esquerda e da direita" #: ../src/live_effects/lpe-envelope.cpp:35 msgid "Enable the left and right deformation paths" -msgstr "" +msgstr "Ativa os caminhos de deformação da esquerda e da direita" #: ../src/live_effects/lpe-envelope.cpp:36 -#, fuzzy msgid "_Enable top & bottom paths" -msgstr "Encaixar no camin_ho" +msgstr "Ativar caminhos de _cima e de baixo" #: ../src/live_effects/lpe-envelope.cpp:36 -#, fuzzy msgid "Enable the top and bottom deformation paths" -msgstr "Duplicar o padrão antes da deformação" +msgstr "Ativar os caminhos de deformação de cima e de baixo" #: ../src/live_effects/lpe-extrude.cpp:30 -#, fuzzy msgid "Direction" -msgstr "Descrição" +msgstr "Direção" #: ../src/live_effects/lpe-extrude.cpp:30 msgid "Defines the direction and magnitude of the extrusion" -msgstr "" +msgstr "Define a direção e a magnitude da extrusão" #: ../src/live_effects/lpe-fill-between-many.cpp:25 -#, fuzzy msgid "Paths from which to take the original path data" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminhos a partir dos quais obter os dados do caminho original" #: ../src/live_effects/lpe-fill-between-strokes.cpp:24 -#, fuzzy msgid "Second path:" -msgstr "Quebrar caminho" +msgstr "Segundo caminho:" #: ../src/live_effects/lpe-fill-between-strokes.cpp:24 -#, fuzzy msgid "Second path from which to take the original path data" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Segundo caminho a partir do qual obter os dados do caminho original" #: ../src/live_effects/lpe-fill-between-strokes.cpp:25 -#, fuzzy msgid "Reverse Second" -msgstr "Inverter degradê" +msgstr "Inverter o Segundo" #: ../src/live_effects/lpe-fill-between-strokes.cpp:25 -#, fuzzy msgid "Reverses the second path order" -msgstr "Editar as paradas do degradê" +msgstr "Inverte a ordem do segundo caminho" #: ../src/live_effects/lpe-fillet-chamfer.cpp:41 #: ../src/widgets/text-toolbar.cpp:1788 #: ../share/extensions/render_barcode_qrcode.inx.h:5 -#, fuzzy msgid "Auto" -msgstr "_Autores" +msgstr "Automático" #: ../src/live_effects/lpe-fillet-chamfer.cpp:42 -#, fuzzy msgid "Force arc" -msgstr "Força" +msgstr "Forçar arco" #: ../src/live_effects/lpe-fillet-chamfer.cpp:43 msgid "Force bezier" -msgstr "" +msgstr "Forçar Bézier" #: ../src/live_effects/lpe-fillet-chamfer.cpp:53 -#, fuzzy msgid "Fillet point" -msgstr "Preencher com Tinta" +msgstr "Ponto filete" #: ../src/live_effects/lpe-fillet-chamfer.cpp:54 -#, fuzzy msgid "Hide knots" -msgstr "Ocultar objecto" +msgstr "Ocultar nós" #: ../src/live_effects/lpe-fillet-chamfer.cpp:55 -#, fuzzy msgid "Ignore 0 radius knots" -msgstr "Raio interno:" +msgstr "Ignorar nós de raio 0" #: ../src/live_effects/lpe-fillet-chamfer.cpp:57 msgid "Flexible radius size (%)" -msgstr "" +msgstr "Tamanho do raio flexível (%)" #: ../src/live_effects/lpe-fillet-chamfer.cpp:58 msgid "Use knots distance instead radius" -msgstr "" +msgstr "Usar distância dos nós em vez dos raios" #: ../src/live_effects/lpe-fillet-chamfer.cpp:59 -#, fuzzy msgid "Method:" -msgstr "Metro" +msgstr "Método:" #: ../src/live_effects/lpe-fillet-chamfer.cpp:59 -#, fuzzy msgid "Fillets methods" -msgstr "Divisão" +msgstr "Métodos de filete" #: ../src/live_effects/lpe-fillet-chamfer.cpp:60 -#, fuzzy msgid "Radius (unit or %):" -msgstr "Raio" +msgstr "Raio (unidade ou %):" #: ../src/live_effects/lpe-fillet-chamfer.cpp:60 msgid "Radius, in unit or %" -msgstr "" +msgstr "Raio, em unidade ou %" #: ../src/live_effects/lpe-fillet-chamfer.cpp:61 -#, fuzzy msgid "Chamfer steps:" -msgstr "Número de passos" +msgstr "Passos da chanfra:" #: ../src/live_effects/lpe-fillet-chamfer.cpp:61 -#, fuzzy msgid "Chamfer steps" -msgstr "Número de passos" +msgstr "Passos da chanfra (quantos mais, mais suave é a curva)" #: ../src/live_effects/lpe-fillet-chamfer.cpp:63 -#, fuzzy msgid "Helper size with direction:" -msgstr "Definir VP na direção X" +msgstr "Tamanho das setas de direção:" #: ../src/live_effects/lpe-fillet-chamfer.cpp:63 -#, fuzzy msgid "Helper size with direction" -msgstr "Definir VP na direção X" +msgstr "Tamanho das setas de direção (visíveis ao editar os nós)" #: ../src/live_effects/lpe-fillet-chamfer.cpp:103 msgid "IMPORTANT! New version soon..." -msgstr "" +msgstr "IMPORTANTE! Nova versão brevemente..." #: ../src/live_effects/lpe-fillet-chamfer.cpp:107 msgid "Not compatible. Convert to path after." -msgstr "" +msgstr "Não compatível. Converter primeiro em caminho." #: ../src/live_effects/lpe-fillet-chamfer.cpp:165 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:72 -#, fuzzy msgid "Fillet" -msgstr "Preenchimento" +msgstr "Filete" #: ../src/live_effects/lpe-fillet-chamfer.cpp:169 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:74 -#, fuzzy msgid "Inverse fillet" -msgstr "Inverter preenchimento" +msgstr "Inverter filete" #: ../src/live_effects/lpe-fillet-chamfer.cpp:174 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:76 -#, fuzzy msgid "Chamfer" -msgstr "Combinar" +msgstr "Chanfra" #: ../src/live_effects/lpe-fillet-chamfer.cpp:178 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:78 -#, fuzzy msgid "Inverse chamfer" -msgstr "Inverter" +msgstr "Chanfra invertida" #: ../src/live_effects/lpe-fillet-chamfer.cpp:247 -#, fuzzy msgid "Convert to fillet" -msgstr "Converter para Texto" +msgstr "Converter para filete" #: ../src/live_effects/lpe-fillet-chamfer.cpp:254 #: ../src/live_effects/lpe-fillet-chamfer.cpp:278 -#, fuzzy msgid "Convert to inverse fillet" -msgstr "Converter para Texto" +msgstr "Converte para filete invertido" #: ../src/live_effects/lpe-fillet-chamfer.cpp:270 -#, fuzzy msgid "Convert to chamfer" -msgstr "Converter para Texto" +msgstr "Converter para chanfra" #: ../src/live_effects/lpe-fillet-chamfer.cpp:290 msgid "Knots and helper paths refreshed" -msgstr "" +msgstr "Nós e indicadores de caminhos atualizados" #: ../src/live_effects/lpe-gears.cpp:214 -#, fuzzy msgid "_Teeth:" -msgstr "Dentes" +msgstr "_Dentes:" #: ../src/live_effects/lpe-gears.cpp:214 msgid "The number of teeth" msgstr "O número de dentes" #: ../src/live_effects/lpe-gears.cpp:215 -#, fuzzy msgid "_Phi:" -msgstr "Phi" +msgstr "_Phi:" #: ../src/live_effects/lpe-gears.cpp:215 msgid "" "Tooth pressure angle (typically 20-25 deg). The ratio of teeth not in " "contact." msgstr "" +"Ângulo de pressão nos dentes (normalmente 20-25 graus). A proporção dos " +"dentes que não estejam em contacto." #: ../src/live_effects/lpe-interpolate.cpp:30 -#, fuzzy msgid "Trajectory:" -msgstr "Fator" +msgstr "Trajetória:" #: ../src/live_effects/lpe-interpolate.cpp:30 -#, fuzzy msgid "Path along which intermediate steps are created." -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Caminho ao longo do qual são criados os passos intermédios." #: ../src/live_effects/lpe-interpolate.cpp:31 -#, fuzzy msgid "Steps_:" -msgstr "Passos" +msgstr "Passos_:" #: ../src/live_effects/lpe-interpolate.cpp:31 msgid "Determines the number of steps from start to end path." -msgstr "" +msgstr "Determina o número de passos de início até ao final do caminho." #: ../src/live_effects/lpe-interpolate.cpp:32 -#, fuzzy msgid "E_quidistant spacing" -msgstr "Aumentar espaçamento entre linhas" +msgstr "Espaçamento e_quidistante" #: ../src/live_effects/lpe-interpolate.cpp:32 msgid "" @@ -10836,33 +10089,34 @@ msgid "" "the path. If false, the distance depends on the location of the nodes of the " "trajectory path." msgstr "" +"Se ativado, o espaço entre os intermédios é constante ao longo do " +"comprimento do caminho. Se desativado, a distância depende da localização " +"dos nós da trajetória do caminho." #: ../src/live_effects/lpe-interpolate_points.cpp:26 #: ../src/live_effects/lpe-powerstroke.cpp:134 msgid "CubicBezierFit" -msgstr "" +msgstr "Bézier Cúbico - Encaixe" #: ../src/live_effects/lpe-interpolate_points.cpp:27 #: ../src/live_effects/lpe-powerstroke.cpp:135 msgid "CubicBezierJohan" -msgstr "" +msgstr "Bézier Cúbico - Johan" #: ../src/live_effects/lpe-interpolate_points.cpp:28 #: ../src/live_effects/lpe-powerstroke.cpp:136 -#, fuzzy msgid "SpiroInterpolator" -msgstr "Interpolar" +msgstr "Interpolador de Espiral" #: ../src/live_effects/lpe-interpolate_points.cpp:29 #: ../src/live_effects/lpe-powerstroke.cpp:137 msgid "Centripetal Catmull-Rom" -msgstr "" +msgstr "Catmull-Rom Centrípedo" #: ../src/live_effects/lpe-interpolate_points.cpp:37 #: ../src/live_effects/lpe-powerstroke.cpp:179 -#, fuzzy msgid "Interpolator type:" -msgstr "Interpolar" +msgstr "Tipo de interpolador:" #: ../src/live_effects/lpe-interpolate_points.cpp:38 #: ../src/live_effects/lpe-powerstroke.cpp:179 @@ -10870,13 +10124,14 @@ msgid "" "Determines which kind of interpolator will be used to interpolate between " "stroke width along the path" msgstr "" +"Determina o tipo de interpolador que será usado para interpolar entre a " +"espessura do traço ao longo do caminho" #: ../src/live_effects/lpe-jointype.cpp:31 #: ../src/live_effects/lpe-powerstroke.cpp:166 #: ../src/live_effects/lpe-taperstroke.cpp:63 -#, fuzzy msgid "Beveled" -msgstr "Nível" +msgstr "Vincado" #: ../src/live_effects/lpe-jointype.cpp:32 #: ../src/live_effects/lpe-jointype.cpp:43 @@ -10889,67 +10144,57 @@ msgstr "Arredondado" #: ../src/live_effects/lpe-jointype.cpp:33 #: ../src/live_effects/lpe-powerstroke.cpp:170 #: ../src/live_effects/lpe-taperstroke.cpp:65 -#, fuzzy msgid "Miter" -msgstr "Junção aguda" +msgstr "Agudo" #: ../src/live_effects/lpe-jointype.cpp:34 -#, fuzzy msgid "Miter Clip" -msgstr "Limite de aguçamento:" +msgstr "Limite da Esquina" #. {LINEJOIN_EXTRP_MITER, N_("Extrapolated"), "extrapolated"}, // disabled because doesn't work well #: ../src/live_effects/lpe-jointype.cpp:35 #: ../src/live_effects/lpe-powerstroke.cpp:169 msgid "Extrapolated arc" -msgstr "" +msgstr "Arco extrapolado" #: ../src/live_effects/lpe-jointype.cpp:36 -#, fuzzy msgid "Extrapolated arc Alt1" -msgstr "Interpolar" +msgstr "Arco extrapolado Alt1" #: ../src/live_effects/lpe-jointype.cpp:37 -#, fuzzy msgid "Extrapolated arc Alt2" -msgstr "Interpolar" +msgstr "Arco extrapolado Alt2" #: ../src/live_effects/lpe-jointype.cpp:38 -#, fuzzy msgid "Extrapolated arc Alt3" -msgstr "Interpolar" +msgstr "Arco extrapolado Alt3" #: ../src/live_effects/lpe-jointype.cpp:42 #: ../src/live_effects/lpe-powerstroke.cpp:149 -#, fuzzy msgid "Butt" -msgstr "Fundo" +msgstr "Sem ponta" #: ../src/live_effects/lpe-jointype.cpp:44 #: ../src/live_effects/lpe-powerstroke.cpp:150 -#, fuzzy msgid "Square" msgstr "Ponta quadrada" #: ../src/live_effects/lpe-jointype.cpp:45 #: ../src/live_effects/lpe-powerstroke.cpp:152 msgid "Peak" -msgstr "" +msgstr "Pico" #: ../src/live_effects/lpe-jointype.cpp:54 -#, fuzzy msgid "Thickness of the stroke" -msgstr "Traço branco" +msgstr "Espessura do traço" #: ../src/live_effects/lpe-jointype.cpp:55 -#, fuzzy msgid "Line cap" -msgstr "Linear" +msgstr "Ponta da linha" #: ../src/live_effects/lpe-jointype.cpp:55 -#, fuzzy msgid "The end shape of the stroke" -msgstr "Orientação da página:" +msgstr "A forma geométrica do fim do traço" #. Join type #. TRANSLATORS: The line join style specifies the shape to be used at the @@ -10958,438 +10203,381 @@ msgstr "Orientação da página:" #: ../src/live_effects/lpe-powerstroke.cpp:182 #: ../src/widgets/stroke-style.cpp:288 msgid "Join:" -msgstr "Juntar:" +msgstr "Esquina:" #: ../src/live_effects/lpe-jointype.cpp:56 #: ../src/live_effects/lpe-powerstroke.cpp:182 -#, fuzzy msgid "Determines the shape of the path's corners" -msgstr "Capturar o brilho da cor" +msgstr "Determina a forma dos cantos do caminho" #. start_lean(_("Start path lean"), _("Start path lean"), "start_lean", &wr, this, 0.), #. end_lean(_("End path lean"), _("End path lean"), "end_lean", &wr, this, 0.), #: ../src/live_effects/lpe-jointype.cpp:59 #: ../src/live_effects/lpe-powerstroke.cpp:183 #: ../src/live_effects/lpe-taperstroke.cpp:78 -#, fuzzy msgid "Miter limit:" -msgstr "Limite de aguçamento:" +msgstr "Limite da esquina:" #: ../src/live_effects/lpe-jointype.cpp:59 -#, fuzzy msgid "Maximum length of the miter join (in units of stroke width)" -msgstr "Tamanho máximo do aguçamento (em unidades de largura de traço)" +msgstr "Tamanho máximo da esquina aguda (em unidades da espessura do traço)" #: ../src/live_effects/lpe-jointype.cpp:60 -#, fuzzy msgid "Force miter" -msgstr "Força" +msgstr "Forçar esquina aguda" #: ../src/live_effects/lpe-jointype.cpp:60 msgid "Overrides the miter limit and forces a join." -msgstr "" +msgstr "Sobrepõe o limite de esquina aguda e força a esquina." #. initialise your parameters here: #: ../src/live_effects/lpe-knot.cpp:350 -#, fuzzy msgid "Fi_xed width:" -msgstr "Largura da caneta" +msgstr "Largura fi_xa:" #: ../src/live_effects/lpe-knot.cpp:350 msgid "Size of hidden region of lower string" msgstr "" +"Tamanho da área escondida do caminho que passa por baixo no cruzamento de " +"caminhos" #: ../src/live_effects/lpe-knot.cpp:351 -#, fuzzy msgid "_In units of stroke width" -msgstr "Largura do traço" +msgstr "Em un_idades da espessura do traço" #: ../src/live_effects/lpe-knot.cpp:351 msgid "Consider 'Interruption width' as a ratio of stroke width" msgstr "" +"Considerar 'Largura da interrupção' como uma proporção da espessura do traço" #: ../src/live_effects/lpe-knot.cpp:352 -#, fuzzy msgid "St_roke width" -msgstr "Largura do traço" +msgstr "_Adicionar espessura do traço" #: ../src/live_effects/lpe-knot.cpp:352 msgid "Add the stroke width to the interruption size" -msgstr "" +msgstr "Adicionar espessura do traço ao tamanho da interrupção" #: ../src/live_effects/lpe-knot.cpp:353 -#, fuzzy msgid "_Crossing path stroke width" -msgstr "Alterar largura do traço" +msgstr "_Adicionar espessura do cruzamento" #: ../src/live_effects/lpe-knot.cpp:353 msgid "Add crossed stroke width to the interruption size" -msgstr "" +msgstr "Adicionar a espessura do traço cruzado ao tamanho da interrupção" #: ../src/live_effects/lpe-knot.cpp:354 -#, fuzzy msgid "S_witcher size:" -msgstr "Curativo Ladrilhado" +msgstr "_Tamanho do controlador:" #: ../src/live_effects/lpe-knot.cpp:354 msgid "Orientation indicator/switcher size" msgstr "" +"Tamanho do controlador circular que aparece ao editar o nó de cruzamento" #: ../src/live_effects/lpe-knot.cpp:355 msgid "Crossing Signs" -msgstr "" +msgstr "Sinais de Cruzamento" #: ../src/live_effects/lpe-knot.cpp:355 msgid "Crossings signs" -msgstr "" +msgstr "Sinais de cruzamento" #: ../src/live_effects/lpe-knot.cpp:626 msgid "Drag to select a crossing, click to flip it" -msgstr "" +msgstr "Arrastar para selecionar um cruzamento, clicar para o inverter" #. / @todo Is this the right verb? #: ../src/live_effects/lpe-knot.cpp:664 -#, fuzzy msgid "Change knot crossing" -msgstr "Mudar espaçamento do conector" +msgstr "Alterar cruzamento de nó" #: ../src/live_effects/lpe-lattice2.cpp:47 #: ../src/live_effects/lpe-perspective-envelope.cpp:43 -#, fuzzy msgid "Mirror movements in horizontal" -msgstr "Mover nós horizontalmente" +msgstr "Espelhar movimentos na horizontal" #: ../src/live_effects/lpe-lattice2.cpp:48 #: ../src/live_effects/lpe-perspective-envelope.cpp:44 -#, fuzzy msgid "Mirror movements in vertical" -msgstr "Mover nós verticalmente" +msgstr "Espelhar movimentos na vertical" #: ../src/live_effects/lpe-lattice2.cpp:49 msgid "Update while moving knots (maybe slow)" -msgstr "" +msgstr "Atualizar ao mover nós (pode ser lento)" #: ../src/live_effects/lpe-lattice2.cpp:50 -#, fuzzy msgid "Control 0:" -msgstr "Mover alça do nó" +msgstr "Controle 0:" #: ../src/live_effects/lpe-lattice2.cpp:50 -#, fuzzy msgid "Control 0 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 0 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:51 -#, fuzzy msgid "Control 1:" -msgstr "Mover alça do nó" +msgstr "Controle 1:" #: ../src/live_effects/lpe-lattice2.cpp:51 -#, fuzzy msgid "Control 1 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 1 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:52 -#, fuzzy msgid "Control 2:" -msgstr "Mover alça do nó" +msgstr "Controle 2:" #: ../src/live_effects/lpe-lattice2.cpp:52 -#, fuzzy msgid "Control 2 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 2 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:53 -#, fuzzy msgid "Control 3:" -msgstr "Mover alça do nó" +msgstr "Controle 3:" #: ../src/live_effects/lpe-lattice2.cpp:53 -#, fuzzy msgid "Control 3 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 3 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:54 -#, fuzzy msgid "Control 4:" -msgstr "Mover alça do nó" +msgstr "Controle 4:" #: ../src/live_effects/lpe-lattice2.cpp:54 -#, fuzzy msgid "Control 4 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 4 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:55 -#, fuzzy msgid "Control 5:" -msgstr "Mover alça do nó" +msgstr "Controle 5:" #: ../src/live_effects/lpe-lattice2.cpp:55 -#, fuzzy msgid "Control 5 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 5 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:56 -#, fuzzy msgid "Control 6:" -msgstr "Mover alça do nó" +msgstr "Controle 6:" #: ../src/live_effects/lpe-lattice2.cpp:56 -#, fuzzy msgid "Control 6 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 6 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:57 -#, fuzzy msgid "Control 7:" -msgstr "Mover alça do nó" +msgstr "Controle 7:" #: ../src/live_effects/lpe-lattice2.cpp:57 -#, fuzzy msgid "Control 7 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 7 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:58 -#, fuzzy msgid "Control 8x9:" -msgstr "Mover alça do nó" +msgstr "Controle 8x9:" #: ../src/live_effects/lpe-lattice2.cpp:58 -#, fuzzy msgid "" "Control 8x9 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 8x9 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:59 -#, fuzzy msgid "Control 10x11:" -msgstr "Mover alça do nó" +msgstr "Controle 10x11:" #: ../src/live_effects/lpe-lattice2.cpp:59 -#, fuzzy msgid "" "Control 10x11 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 10x11 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:60 -#, fuzzy msgid "Control 12:" -msgstr "Mover alça do nó" +msgstr "Controle 12:" #: ../src/live_effects/lpe-lattice2.cpp:60 -#, fuzzy msgid "Control 12 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 12 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:61 -#, fuzzy msgid "Control 13:" -msgstr "Mover alça do nó" +msgstr "Controle 13:" #: ../src/live_effects/lpe-lattice2.cpp:61 -#, fuzzy msgid "Control 13 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 13 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:62 -#, fuzzy msgid "Control 14:" -msgstr "Mover alça do nó" +msgstr "Controle 14:" #: ../src/live_effects/lpe-lattice2.cpp:62 -#, fuzzy msgid "Control 14 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 14 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:63 -#, fuzzy msgid "Control 15:" -msgstr "Mover alça do nó" +msgstr "Controle 15:" #: ../src/live_effects/lpe-lattice2.cpp:63 -#, fuzzy msgid "Control 15 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 15 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:64 -#, fuzzy msgid "Control 16:" -msgstr "Mover alça do nó" +msgstr "Controle 16:" #: ../src/live_effects/lpe-lattice2.cpp:64 -#, fuzzy msgid "Control 16 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 16 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:65 -#, fuzzy msgid "Control 17:" -msgstr "Mover alça do nó" +msgstr "Controle 17:" #: ../src/live_effects/lpe-lattice2.cpp:65 -#, fuzzy msgid "Control 17 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 17 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:66 -#, fuzzy msgid "Control 18:" -msgstr "Mover alça do nó" +msgstr "Controle 18:" #: ../src/live_effects/lpe-lattice2.cpp:66 -#, fuzzy msgid "Control 18 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 18 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:67 -#, fuzzy msgid "Control 19:" -msgstr "Mover alça do nó" +msgstr "Controle 19:" #: ../src/live_effects/lpe-lattice2.cpp:67 -#, fuzzy msgid "Control 19 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 19 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo dos " +"eixos" #: ../src/live_effects/lpe-lattice2.cpp:68 -#, fuzzy msgid "Control 20x21:" -msgstr "Mover alça do nó" +msgstr "Controle 20x21:" #: ../src/live_effects/lpe-lattice2.cpp:68 -#, fuzzy msgid "" "Control 20x21 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 20x21 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:69 -#, fuzzy msgid "Control 22x23:" -msgstr "Mover alça do nó" +msgstr "Controle 22x23:" #: ../src/live_effects/lpe-lattice2.cpp:69 -#, fuzzy msgid "" "Control 22x23 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 22x23 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:70 -#, fuzzy msgid "Control 24x26:" -msgstr "Mover alça do nó" +msgstr "Controle 24x26:" #: ../src/live_effects/lpe-lattice2.cpp:70 -#, fuzzy msgid "" "Control 24x26 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 24x26 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:71 -#, fuzzy msgid "Control 25x27:" -msgstr "Mover alça do nó" +msgstr "Controle 25x27:" #: ../src/live_effects/lpe-lattice2.cpp:71 -#, fuzzy msgid "" "Control 25x27 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 25x27 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:72 -#, fuzzy msgid "Control 28x30:" -msgstr "Mover alça do nó" +msgstr "Controle 28x30:" #: ../src/live_effects/lpe-lattice2.cpp:72 -#, fuzzy msgid "" "Control 28x30 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 28x30 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:73 -#, fuzzy msgid "Control 29x31:" -msgstr "Mover alça do nó" +msgstr "Controle 29x31:" #: ../src/live_effects/lpe-lattice2.cpp:73 -#, fuzzy msgid "" "Control 29x31 - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Controle 29x31 - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:74 msgid "Control 32x33x34x35:" -msgstr "" +msgstr "Controle 32x33x34x35:" #: ../src/live_effects/lpe-lattice2.cpp:74 msgid "" "Control 32x33x34x35 - Ctrl+Alt+Click: reset, Ctrl: move along " "axes" msgstr "" +"Controle 32x33x34x35 - Ctrl+Alt+clicar: repor, Ctrl: mover ao " +"longo dos eixos" #: ../src/live_effects/lpe-lattice2.cpp:239 -#, fuzzy msgid "Reset grid" -msgstr "Remover grelha" +msgstr "Repor grelha" #: ../src/live_effects/lpe-lattice2.cpp:271 #: ../src/live_effects/lpe-lattice2.cpp:286 -#, fuzzy msgid "Show Points" -msgstr "Orientação da página:" +msgstr "Mostrar Pontos" #: ../src/live_effects/lpe-lattice2.cpp:284 -#, fuzzy msgid "Hide Points" -msgstr "Pontos" +msgstr "Ocultar Pontos" #: ../src/live_effects/lpe-patternalongpath.cpp:63 #: ../share/extensions/pathalongpath.inx.h:10 @@ -11412,9 +10600,8 @@ msgid "Repeated, stretched" msgstr "Repetido, esticado" #: ../src/live_effects/lpe-patternalongpath.cpp:72 -#, fuzzy msgid "Pattern source:" -msgstr "Fonte padrão" +msgstr "Fonte do padrão:" #: ../src/live_effects/lpe-patternalongpath.cpp:72 msgid "Path to put along the skeleton path" @@ -11425,27 +10612,24 @@ msgid "Width of the pattern" msgstr "Largura do padrão" #: ../src/live_effects/lpe-patternalongpath.cpp:75 -#, fuzzy msgid "Pattern copies:" -msgstr "Cópias de padrão" +msgstr "Cópias do padrão:" #: ../src/live_effects/lpe-patternalongpath.cpp:75 msgid "How many pattern copies to place along the skeleton path" msgstr "Quantas cópias de padrão serão colocadas ao longo do caminho esqueleto" #: ../src/live_effects/lpe-patternalongpath.cpp:77 -#, fuzzy msgid "Wid_th in units of length" -msgstr "Largura em unidades de comprimento" +msgstr "Largura em unidades de comprimen_to" #: ../src/live_effects/lpe-patternalongpath.cpp:78 msgid "Scale the width of the pattern in units of its length" -msgstr "Escala da largura do padrão em unidades de seu comprimento" +msgstr "Dimensão da largura do padrão em unidades do seu comprimento" #: ../src/live_effects/lpe-patternalongpath.cpp:80 -#, fuzzy msgid "Spa_cing:" -msgstr "Espaçamento:" +msgstr "Espa_çamento:" #: ../src/live_effects/lpe-patternalongpath.cpp:82 #, no-c-format @@ -11453,448 +10637,424 @@ msgid "" "Space between copies of the pattern. Negative values allowed, but are " "limited to -90% of pattern width." msgstr "" +"Espaço entre cópias do padrão. Podem-se usar valores negativos, mas estão " +"limitados a -90% do padrão" #: ../src/live_effects/lpe-patternalongpath.cpp:84 -#, fuzzy msgid "No_rmal offset:" -msgstr "Tipografia normal" +msgstr "Desvio no_rmal:" #: ../src/live_effects/lpe-patternalongpath.cpp:85 -#, fuzzy msgid "Tan_gential offset:" -msgstr "Tipografia tangencial" +msgstr "Desvio tan_gencial:" #: ../src/live_effects/lpe-patternalongpath.cpp:86 -#, fuzzy msgid "Offsets in _unit of pattern size" -msgstr "Objecto para padrão" +msgstr "Deslocamentos em _unidade do tamanho do padrão" #: ../src/live_effects/lpe-patternalongpath.cpp:87 msgid "" "Spacing, tangential and normal offset are expressed as a ratio of width/" "height" msgstr "" +"O espaçamento, tangencial e deslocamento normal são exprimidos como um rácio " +"do comprimento/altura" #: ../src/live_effects/lpe-patternalongpath.cpp:89 -#, fuzzy msgid "Pattern is _vertical" -msgstr "Padrão é vertical" +msgstr "Padrão é _vertical" #: ../src/live_effects/lpe-patternalongpath.cpp:89 msgid "Rotate pattern 90 deg before applying" -msgstr "" +msgstr "Rodar padrão 90 graus antes de aplicar" #: ../src/live_effects/lpe-patternalongpath.cpp:91 msgid "_Fuse nearby ends:" -msgstr "" +msgstr "_Fundir terminais próximos:" #: ../src/live_effects/lpe-patternalongpath.cpp:91 msgid "Fuse ends closer than this number. 0 means don't fuse." msgstr "" +"Funde os nós finais de caminhos que estejam mais próximos que este número. " +"Usando 0 não funde os nós." #: ../src/live_effects/lpe-perspective-envelope.cpp:35 #: ../share/extensions/perspective.inx.h:1 msgid "Perspective" -msgstr "Perspectiva" +msgstr "Perspetiva" #: ../src/live_effects/lpe-perspective-envelope.cpp:36 -#, fuzzy msgid "Envelope deformation" -msgstr "Informação" +msgstr "Deformação por envelope" #: ../src/live_effects/lpe-perspective-envelope.cpp:45 -#, fuzzy msgid "Overflow perspective" -msgstr "Perspectiva" +msgstr "Perspetiva sobreposta" #: ../src/live_effects/lpe-perspective-envelope.cpp:46 msgid "Type" msgstr "Tipo" #: ../src/live_effects/lpe-perspective-envelope.cpp:46 -#, fuzzy msgid "Select the type of deformation" -msgstr "Duplicar o padrão antes da deformação" +msgstr "Selecionar tipo de deformação" #: ../src/live_effects/lpe-perspective-envelope.cpp:47 -#, fuzzy msgid "Top Left" -msgstr "Quebrar caminho" +msgstr "Topo Esquerdo" #: ../src/live_effects/lpe-perspective-envelope.cpp:47 -#, fuzzy msgid "Top Left - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Topo Esquerdo - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-perspective-envelope.cpp:48 -#, fuzzy msgid "Top Right" -msgstr "Dicas e _Truques" +msgstr "Topo Direito" #: ../src/live_effects/lpe-perspective-envelope.cpp:48 -#, fuzzy msgid "Top Right - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Topo Direito - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-perspective-envelope.cpp:49 -#, fuzzy msgid "Down Left" -msgstr "Quebrar caminho" +msgstr "Fundo Esquerdo" #: ../src/live_effects/lpe-perspective-envelope.cpp:49 -#, fuzzy msgid "Down Left - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Fundo Esquerdo - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-perspective-envelope.cpp:50 -#, fuzzy msgid "Down Right" -msgstr "Direitos" +msgstr "Fundo Direito" #: ../src/live_effects/lpe-perspective-envelope.cpp:50 -#, fuzzy msgid "Down Right - Ctrl+Alt+Click: reset, Ctrl: move along axes" msgstr "" -"Alt: Bloquear o tamanho da alça. Ctrl+Alt: mover ao longo da " -"alça" +"Fundo Direito - Ctrl+Alt+clicar: repor, Ctrl: mover ao longo " +"dos eixos" #: ../src/live_effects/lpe-perspective-envelope.cpp:367 -#, fuzzy msgid "Handles:" -msgstr "Ângulo" +msgstr "Alças:" #: ../src/live_effects/lpe-powerstroke.cpp:132 msgid "CubicBezierSmooth" -msgstr "" +msgstr "Suavidade Bézier Cúbica" #: ../src/live_effects/lpe-powerstroke.cpp:151 #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:13 -#, fuzzy msgid "Round" -msgstr "Arredondado" +msgstr "Arredondada" #: ../src/live_effects/lpe-powerstroke.cpp:153 -#, fuzzy msgid "Zero width" -msgstr "Largura da caneta" +msgstr "Espessura zero" #: ../src/live_effects/lpe-powerstroke.cpp:171 #: ../src/widgets/pencil-toolbar.cpp:112 -#, fuzzy msgid "Spiro" msgstr "Espiral" #: ../src/live_effects/lpe-powerstroke.cpp:177 -#, fuzzy msgid "Offset points" -msgstr "Tipografia" +msgstr "Pontos deslocados" #: ../src/live_effects/lpe-powerstroke.cpp:178 -#, fuzzy msgid "Sort points" -msgstr "Orientação da página:" +msgstr "Ordenar pontos" #: ../src/live_effects/lpe-powerstroke.cpp:178 msgid "Sort offset points according to their time value along the curve" msgstr "" +"Ordenar pontos deslocados de acordo com o seu valor temporal ao longo da " +"curva" #: ../src/live_effects/lpe-powerstroke.cpp:180 #: ../share/extensions/fractalize.inx.h:3 -#, fuzzy msgid "Smoothness:" -msgstr "Suavidade" +msgstr "Suavidade:" #: ../src/live_effects/lpe-powerstroke.cpp:180 msgid "" "Sets the smoothness for the CubicBezierJohan interpolator; 0 = linear " "interpolation, 1 = smooth" msgstr "" +"Define a suavidade para o interpolador CubicBezierJohan; 0 = interpolação " +"linear, 1 = suave" #: ../src/live_effects/lpe-powerstroke.cpp:181 -#, fuzzy msgid "Start cap:" -msgstr "Início:" +msgstr "Ponta inicial:" #: ../src/live_effects/lpe-powerstroke.cpp:181 msgid "Determines the shape of the path's start" -msgstr "" +msgstr "Determina a forma geométrica do início do caminho" #: ../src/live_effects/lpe-powerstroke.cpp:183 #: ../src/widgets/stroke-style.cpp:335 msgid "Maximum length of the miter (in units of stroke width)" -msgstr "Tamanho máximo do aguçamento (em unidades de largura de traço)" +msgstr "Tamanho máximo da esquina aguda (em unidades da espessura do traço)" #: ../src/live_effects/lpe-powerstroke.cpp:184 -#, fuzzy msgid "End cap:" -msgstr "Ponta redonda" +msgstr "Ponta final:" #: ../src/live_effects/lpe-powerstroke.cpp:184 msgid "Determines the shape of the path's end" -msgstr "" +msgstr "Determina a forma geométrica do fim do caminho" #: ../src/live_effects/lpe-rough-hatches.cpp:225 -#, fuzzy msgid "Frequency randomness:" -msgstr "Não redondo" +msgstr "Frequência aleatória:" #: ../src/live_effects/lpe-rough-hatches.cpp:225 msgid "Variation of distance between hatches, in %." -msgstr "" +msgstr "Variação da distância entre rabiscos, em %." #: ../src/live_effects/lpe-rough-hatches.cpp:226 -#, fuzzy msgid "Growth:" -msgstr "Aumentar ajuste" +msgstr "Crescimento:" #: ../src/live_effects/lpe-rough-hatches.cpp:226 msgid "Growth of distance between hatches." -msgstr "" +msgstr "Crescimento da distância entre rabiscos." #. FIXME: top/bottom names are inverted in the UI/svg and in the code!! #: ../src/live_effects/lpe-rough-hatches.cpp:228 msgid "Half-turns smoothness: 1st side, in:" -msgstr "" +msgstr "Suavidade das meias-voltas: 1º lado, em:" #: ../src/live_effects/lpe-rough-hatches.cpp:228 msgid "" "Set smoothness/sharpness of path when reaching a 'bottom' half-turn. " "0=sharp, 1=default" msgstr "" +"Definir suavidade/nitidez do caminho ao alcançar um meio-termo 'baixo'. " +"0=nítido, 1=padrão" #: ../src/live_effects/lpe-rough-hatches.cpp:229 -#, fuzzy msgid "1st side, out:" -msgstr "Colar tamanho" +msgstr "1º lado, fora:" #: ../src/live_effects/lpe-rough-hatches.cpp:229 msgid "" "Set smoothness/sharpness of path when leaving a 'bottom' half-turn. 0=sharp, " "1=default" msgstr "" +"Definir suavidade/nitidez do caminho ao sair de um meio-termo 'baixo'. " +"0=nítido, 1=padrão" #: ../src/live_effects/lpe-rough-hatches.cpp:230 -#, fuzzy msgid "2nd side, in:" -msgstr "nó final" +msgstr "2º lado, dentro:" #: ../src/live_effects/lpe-rough-hatches.cpp:230 msgid "" "Set smoothness/sharpness of path when reaching a 'top' half-turn. 0=sharp, " "1=default" msgstr "" +"Definir suavidade/nitidez do caminho ao alcançar um meio-termo 'alto'. " +"0=nítido, 1=padrão" #: ../src/live_effects/lpe-rough-hatches.cpp:231 -#, fuzzy msgid "2nd side, out:" -msgstr "nó final" +msgstr "2º lado, fora:" #: ../src/live_effects/lpe-rough-hatches.cpp:231 msgid "" "Set smoothness/sharpness of path when leaving a 'top' half-turn. 0=sharp, " "1=default" msgstr "" +"Definir suavidade/nitidez do caminho ao sair de um meio-termo 'alto'. " +"0=nítido, 1=padrão" #: ../src/live_effects/lpe-rough-hatches.cpp:232 msgid "Magnitude jitter: 1st side:" -msgstr "" +msgstr "Magnitude da variação_ 1º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:232 msgid "Randomly moves 'bottom' half-turns to produce magnitude variations." msgstr "" +"Mover aleatoriamente meios-termos 'baixos' para produzir variações de " +"magnitude." #: ../src/live_effects/lpe-rough-hatches.cpp:233 #: ../src/live_effects/lpe-rough-hatches.cpp:235 #: ../src/live_effects/lpe-rough-hatches.cpp:237 -#, fuzzy msgid "2nd side:" -msgstr "nó final" +msgstr "2º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:233 msgid "Randomly moves 'top' half-turns to produce magnitude variations." msgstr "" +"Mover aleatoriamente meios-termos 'altos' para produzir variações de " +"magnitude." #: ../src/live_effects/lpe-rough-hatches.cpp:234 msgid "Parallelism jitter: 1st side:" -msgstr "" +msgstr "Variação em paralelo: 1º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:234 msgid "" "Add direction randomness by moving 'bottom' half-turns tangentially to the " "boundary." msgstr "" +"Adicionar alieatoriedade de direção movendo as meias-voltas do 'fundo' " +"tangencialmente aos limites." #: ../src/live_effects/lpe-rough-hatches.cpp:235 msgid "" "Add direction randomness by randomly moving 'top' half-turns tangentially to " "the boundary." msgstr "" +"Adicionar alieatoriedade de direção movendo as meias-voltas do 'topo' " +"tangencialmente aos limites." #: ../src/live_effects/lpe-rough-hatches.cpp:236 -#, fuzzy msgid "Variance: 1st side:" -msgstr "Colar tamanho" +msgstr "Variância: 1º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:236 msgid "Randomness of 'bottom' half-turns smoothness" -msgstr "" +msgstr "Aleatoriedade da suavidade de meios-termos 'baixos'" #: ../src/live_effects/lpe-rough-hatches.cpp:237 msgid "Randomness of 'top' half-turns smoothness" -msgstr "" +msgstr "Aleatoriedade da suavidade de meios-termos 'altos'" #. #: ../src/live_effects/lpe-rough-hatches.cpp:239 -#, fuzzy msgid "Generate thick/thin path" -msgstr "Criar novo caminho" +msgstr "Gerar caminho grosso/fino" #: ../src/live_effects/lpe-rough-hatches.cpp:239 -#, fuzzy msgid "Simulate a stroke of varying width" -msgstr "Ampliar largura do traço" +msgstr "Simular um caminho de espessura variável" #: ../src/live_effects/lpe-rough-hatches.cpp:240 -#, fuzzy msgid "Bend hatches" -msgstr "Quebrar caminho" +msgstr "Dobrar rabiscos" #: ../src/live_effects/lpe-rough-hatches.cpp:240 msgid "Add a global bend to the hatches (slower)" -msgstr "" +msgstr "Adicionar uma dobra global aos rabiscos(mais lento)" #: ../src/live_effects/lpe-rough-hatches.cpp:241 msgid "Thickness: at 1st side:" -msgstr "" +msgstr "Espessura: no 1º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:241 msgid "Width at 'bottom' half-turns" -msgstr "" +msgstr "Largura no 'fundo' nas meias-voltas" #: ../src/live_effects/lpe-rough-hatches.cpp:242 -#, fuzzy msgid "At 2nd side:" -msgstr "nó final" +msgstr "No 2º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:242 msgid "Width at 'top' half-turns" -msgstr "" +msgstr "Largura no 'topo' nas meias-voltas" #. #: ../src/live_effects/lpe-rough-hatches.cpp:244 -#, fuzzy msgid "From 2nd to 1st side:" -msgstr "nó final" +msgstr "Do 2º para o 1º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:244 msgid "Width from 'top' to 'bottom'" -msgstr "" +msgstr "Largura do 'topo' para o 'fundo'" #: ../src/live_effects/lpe-rough-hatches.cpp:245 -#, fuzzy msgid "From 1st to 2nd side:" -msgstr "nó final" +msgstr "Do 1º para o 2º lado:" #: ../src/live_effects/lpe-rough-hatches.cpp:245 msgid "Width from 'bottom' to 'top'" -msgstr "" +msgstr "Largura do 'fundo' para o 'topo'" #: ../src/live_effects/lpe-rough-hatches.cpp:247 -#, fuzzy msgid "Hatches width and dir" -msgstr "Largura, altura: " +msgstr "Largura e direção dos rabiscos" #: ../src/live_effects/lpe-rough-hatches.cpp:247 msgid "Defines hatches frequency and direction" -msgstr "" +msgstr "Define a frequência e direção dos rabiscos" #. #: ../src/live_effects/lpe-rough-hatches.cpp:249 msgid "Global bending" -msgstr "" +msgstr "Dobra global" #: ../src/live_effects/lpe-rough-hatches.cpp:249 msgid "" "Relative position to a reference point defines global bending direction and " "amount" msgstr "" +"Posição relativa para um ponto de referência define a direção de dobra " +"global e a quantidade" #: ../src/live_effects/lpe-roughen.cpp:31 ../share/extensions/addnodes.inx.h:4 -#, fuzzy msgid "By number of segments" -msgstr "O número de dentes" +msgstr "Pelo número de segmentos" #: ../src/live_effects/lpe-roughen.cpp:32 -#, fuzzy msgid "By max. segment size" -msgstr "Comprimento máximo dos segmentos" +msgstr "Pelo tamanho máximo do segmento" #: ../src/live_effects/lpe-roughen.cpp:38 -#, fuzzy msgid "Along nodes" -msgstr "Juntar nós" +msgstr "Ao longo dos nós" #: ../src/live_effects/lpe-roughen.cpp:39 -#, fuzzy msgid "Rand" -msgstr "Aleatório:" +msgstr "Aleatório" #: ../src/live_effects/lpe-roughen.cpp:40 -#, fuzzy msgid "Retract" -msgstr "Extrair Uma Imagem" +msgstr "Retrair" #. initialise your parameters here: #: ../src/live_effects/lpe-roughen.cpp:49 -#, fuzzy msgid "Method" -msgstr "Metro" +msgstr "Método" #: ../src/live_effects/lpe-roughen.cpp:49 -#, fuzzy msgid "Division method" -msgstr "Divisão" +msgstr "Método de divisão" #: ../src/live_effects/lpe-roughen.cpp:51 -#, fuzzy msgid "Max. segment size" -msgstr "Comprimento máximo dos segmentos" +msgstr "Comprimento máximo do segmento" #: ../src/live_effects/lpe-roughen.cpp:53 -#, fuzzy msgid "Number of segments" -msgstr "Número de passos" +msgstr "Número de segmentos" #: ../src/live_effects/lpe-roughen.cpp:55 -#, fuzzy msgid "Max. displacement in X" -msgstr "Deslocamento máximo, px" +msgstr "Deslocamento máximo em X" #: ../src/live_effects/lpe-roughen.cpp:57 -#, fuzzy msgid "Max. displacement in Y" -msgstr "Deslocamento máximo, px" +msgstr "Deslocamento máximo em Y" #: ../src/live_effects/lpe-roughen.cpp:59 -#, fuzzy msgid "Global randomize" -msgstr "visivelmente randômico" +msgstr "Aleatório global" #: ../src/live_effects/lpe-roughen.cpp:61 -#, fuzzy msgid "Handles" -msgstr "Ângulo" +msgstr "Alças" #: ../src/live_effects/lpe-roughen.cpp:61 -#, fuzzy msgid "Handles options" -msgstr "Posições aleatórias" +msgstr "Opções de alças" #: ../src/live_effects/lpe-roughen.cpp:63 #: ../share/extensions/jitternodes.inx.h:5 @@ -11902,64 +11062,59 @@ msgid "Shift nodes" msgstr "Deslocar nós" #: ../src/live_effects/lpe-roughen.cpp:65 -#, fuzzy msgid "Fixed displacement" -msgstr "Mapa de Deslocamento" +msgstr "Deslocamento fixo" #: ../src/live_effects/lpe-roughen.cpp:65 msgid "Fixed displacement, 1/3 of segment length" -msgstr "" +msgstr "Deslocamento fixo, 1/3 do comprimento do segmento" #: ../src/live_effects/lpe-roughen.cpp:67 -#, fuzzy msgid "Spray Tool friendly" -msgstr "Propriedades de Espirais" +msgstr "Compatibilidade com a Ferramenta Pulverizar" #: ../src/live_effects/lpe-roughen.cpp:67 msgid "For use with spray tool in copy mode" -msgstr "" +msgstr "Para usar com a ferramente de pulverizar no modo cópia" #: ../src/live_effects/lpe-roughen.cpp:121 msgid "Add nodes Subdivide each segment" -msgstr "" +msgstr "Adicionar nós: subdividir cada segmento" #: ../src/live_effects/lpe-roughen.cpp:130 msgid "Jitter nodes Move nodes/handles" -msgstr "" +msgstr "Nós nervosos: mover nós/alças" #: ../src/live_effects/lpe-roughen.cpp:139 msgid "Extra roughen Add a extra layer of rough" -msgstr "" +msgstr "Extra rugoso: adicionar uma camada extra de rugosidade" #: ../src/live_effects/lpe-roughen.cpp:148 msgid "Options Modify options to rough" -msgstr "" +msgstr "Opções: alterar as opções de rugosidade" #: ../src/live_effects/lpe-ruler.cpp:25 ../share/extensions/measure.inx.h:27 #: ../share/extensions/restack.inx.h:16 #: ../share/extensions/text_extract.inx.h:8 #: ../share/extensions/text_merge.inx.h:8 msgid "Left" -msgstr "" +msgstr "Esquerda" #: ../src/live_effects/lpe-ruler.cpp:26 ../share/extensions/measure.inx.h:29 #: ../share/extensions/restack.inx.h:18 #: ../share/extensions/text_extract.inx.h:10 #: ../share/extensions/text_merge.inx.h:10 -#, fuzzy msgid "Right" -msgstr "Direitos" +msgstr "Direita" #: ../src/live_effects/lpe-ruler.cpp:27 ../src/live_effects/lpe-ruler.cpp:35 -#, fuzzy msgid "Both" -msgstr "Fundo" +msgstr "Ambos" #: ../src/live_effects/lpe-ruler.cpp:32 -#, fuzzy msgctxt "Border mark" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../src/live_effects/lpe-ruler.cpp:33 #: ../src/live_effects/lpe-transform_2pts.cpp:37 @@ -11974,467 +11129,408 @@ msgid "End" msgstr "Fim" #: ../src/live_effects/lpe-ruler.cpp:41 -#, fuzzy msgid "_Mark distance:" -msgstr "Encaixar _distância" +msgstr "Distância entre _marcas:" #: ../src/live_effects/lpe-ruler.cpp:41 -#, fuzzy msgid "Distance between successive ruler marks" -msgstr "Distância vertical entre linhas da grelha" +msgstr "Distância entre as marcas da régua" #: ../src/live_effects/lpe-ruler.cpp:42 ../share/extensions/foldablebox.inx.h:7 #: ../share/extensions/interp_att_g.inx.h:9 #: ../share/extensions/layout_nup.inx.h:3 #: ../share/extensions/printing_marks.inx.h:11 -#, fuzzy msgid "Unit:" -msgstr "Unidades:" +msgstr "Unidade:" #: ../src/live_effects/lpe-ruler.cpp:42 ../src/widgets/ruler.cpp:211 msgid "Unit" msgstr "Unidade" #: ../src/live_effects/lpe-ruler.cpp:43 -#, fuzzy msgid "Ma_jor length:" -msgstr "Comprimento de onda" +msgstr "Comprimento marcas maiores:" #: ../src/live_effects/lpe-ruler.cpp:43 msgid "Length of major ruler marks" -msgstr "" +msgstr "Comprimento das marcas maiores da régua" #: ../src/live_effects/lpe-ruler.cpp:44 -#, fuzzy msgid "Mino_r length:" -msgstr "Comprimento de onda" +msgstr "Comprimento marcas menores:" #: ../src/live_effects/lpe-ruler.cpp:44 msgid "Length of minor ruler marks" -msgstr "" +msgstr "Comprimento das marcas menores da régua" #: ../src/live_effects/lpe-ruler.cpp:45 -#, fuzzy msgid "Major steps_:" -msgstr "Comprimento de onda" +msgstr "Marca maior após N menores:" #: ../src/live_effects/lpe-ruler.cpp:45 msgid "Draw a major mark every ... steps" -msgstr "" +msgstr "Mostrar uma marca maior a cada ... passos" #: ../src/live_effects/lpe-ruler.cpp:46 -#, fuzzy msgid "Shift marks _by:" -msgstr "Definir marcadores" +msgstr "_Deslocar marca maior:" #: ../src/live_effects/lpe-ruler.cpp:46 msgid "Shift marks by this many steps" -msgstr "" +msgstr "Deslocar marca maior por esta quantidade de marcas menores" #: ../src/live_effects/lpe-ruler.cpp:47 -#, fuzzy msgid "Mark direction:" -msgstr "Aumentar espaçamento entre linhas" +msgstr "Lado da linha com as marcas:" #: ../src/live_effects/lpe-ruler.cpp:47 msgid "Direction of marks (when viewing along the path from start to end)" -msgstr "" +msgstr "Lado da linha onde devem aparecer as marcas de medição" #: ../src/live_effects/lpe-ruler.cpp:48 -#, fuzzy msgid "_Offset:" -msgstr "Offset:" +msgstr "_Deslocar todas as marcas:" #: ../src/live_effects/lpe-ruler.cpp:48 msgid "Offset of first mark" -msgstr "" +msgstr "Deslocamento da primeira marca" #: ../src/live_effects/lpe-ruler.cpp:49 -#, fuzzy msgid "Border marks:" -msgstr "Cor da borda:" +msgstr "Marcas nas pontas:" #: ../src/live_effects/lpe-ruler.cpp:49 msgid "Choose whether to draw marks at the beginning and end of the path" -msgstr "" +msgstr "Escolher se mostrar marcas no início e no fim do caminho" #: ../src/live_effects/lpe-show_handles.cpp:25 -#, fuzzy msgid "Show nodes" -msgstr "Desenhar Alças" +msgstr "Mostrar nós" #: ../src/live_effects/lpe-show_handles.cpp:27 -#, fuzzy msgid "Show path" -msgstr "Caminho do traço" +msgstr "Mostrar caminho" #: ../src/live_effects/lpe-show_handles.cpp:28 -#, fuzzy msgid "Scale nodes and handles" -msgstr "Deslocar alças do nó" +msgstr "Tamanho dos nós e alças" #: ../src/live_effects/lpe-show_handles.cpp:29 #: ../src/ui/tool/multi-path-manipulator.cpp:788 #: ../src/ui/tool/multi-path-manipulator.cpp:791 msgid "Rotate nodes" -msgstr "Girar nós" +msgstr "Rodar nós" #: ../src/live_effects/lpe-show_handles.cpp:55 msgid "" "The \"show handles\" path effect will remove any custom style on the object " "you are applying it to. If this is not what you want, click Cancel." msgstr "" +"O efeito no caminho \"Mostrar alças e nós\" irá remover qualquer estilo " +"personalizado no objeto. Se não for isto que quer, clique em Cancelar." #: ../src/live_effects/lpe-simplify.cpp:30 -#, fuzzy msgid "Steps:" -msgstr "Passos" +msgstr "Passos:" #: ../src/live_effects/lpe-simplify.cpp:30 -#, fuzzy msgid "Change number of simplify steps " -msgstr "Alterar número de cantos" +msgstr "Alterar número de passos de simplificação " #: ../src/live_effects/lpe-simplify.cpp:31 -#, fuzzy msgid "Roughly threshold:" -msgstr "Limiar:" +msgstr "Limiar de rugosidade:" #: ../src/live_effects/lpe-simplify.cpp:32 -#, fuzzy msgid "Smooth angles:" -msgstr "Suavidade" +msgstr "Suavizar ângulos menores que:" #: ../src/live_effects/lpe-simplify.cpp:32 msgid "Max degree difference on handles to perform a smooth" -msgstr "" +msgstr "Grau máximo de diferença das alças, em graus, para fazer a suavidade" #: ../src/live_effects/lpe-simplify.cpp:34 -#, fuzzy msgid "Paths separately" -msgstr "Colar tamanho separadamente" +msgstr "Caminhos separadamente" #: ../src/live_effects/lpe-simplify.cpp:34 -#, fuzzy msgid "Simplifying paths (separately)" -msgstr "Simplificando caminhos (separadamente):" +msgstr "Simplificar caminhos (separadamente)" #: ../src/live_effects/lpe-simplify.cpp:36 -#, fuzzy msgid "Just coalesce" -msgstr "Justificar linhas" +msgstr "Apenas aglutinar" #: ../src/live_effects/lpe-simplify.cpp:36 -#, fuzzy msgid "Simplify just coalesce" -msgstr "Simplificar" +msgstr "Simplificar apenas aglutinar" #. initialise your parameters here: #. testpointA(_("Test Point A"), _("Test A"), "ptA", &wr, this, Geom::Point(100,100)), #: ../src/live_effects/lpe-sketch.cpp:38 -#, fuzzy msgid "Strokes:" -msgstr "Traço:" +msgstr "Traços:" #: ../src/live_effects/lpe-sketch.cpp:38 msgid "Draw that many approximating strokes" -msgstr "" +msgstr "Desenhar aproximadamente este número de traços" #: ../src/live_effects/lpe-sketch.cpp:39 -#, fuzzy msgid "Max stroke length:" -msgstr "Ampliar largura do traço" +msgstr "Comprimento máximo do traço:" #: ../src/live_effects/lpe-sketch.cpp:40 -#, fuzzy msgid "Maximum length of approximating strokes" -msgstr "Tamanho máximo do aguçamento (em unidades de largura de traço)" +msgstr "Tamanho máximo do aguçamento (em unidades da espessura do traço)" #: ../src/live_effects/lpe-sketch.cpp:41 -#, fuzzy msgid "Stroke length variation:" -msgstr "Propriedades de Estrelas" +msgstr "Variação do comprimento do traço:" #: ../src/live_effects/lpe-sketch.cpp:42 -#, fuzzy msgid "Random variation of stroke length (relative to maximum length)" -msgstr "Escala da largura do caminho de traço em relação ao seu comprimento" +msgstr "Dimensão da largura do caminho do traço em relação ao seu comprimento" #: ../src/live_effects/lpe-sketch.cpp:43 msgid "Max. overlap:" -msgstr "" +msgstr "Sobreposição máxima:" #: ../src/live_effects/lpe-sketch.cpp:44 -#, fuzzy msgid "How much successive strokes should overlap (relative to maximum length)" -msgstr "Escala da largura do caminho de traço em relação ao seu comprimento" +msgstr "Dimensão da largura do caminho do traço em relação ao seu comprimento" #: ../src/live_effects/lpe-sketch.cpp:45 -#, fuzzy msgid "Overlap variation:" -msgstr "Menos Saturação" +msgstr "Variação da sobreposição:" #: ../src/live_effects/lpe-sketch.cpp:46 msgid "Random variation of overlap (relative to maximum overlap)" -msgstr "" +msgstr "Variação aleatória da sobreposição (relativo à sobreposição máxima)" #: ../src/live_effects/lpe-sketch.cpp:47 -#, fuzzy msgid "Max. end tolerance:" -msgstr "Tolerância:" +msgstr "Máxima tolerância no fim:" #: ../src/live_effects/lpe-sketch.cpp:48 msgid "" "Maximum distance between ends of original and approximating paths (relative " "to maximum length)" msgstr "" +"Distância máxima entre fins do caminho original e caminho aproximado " +"(relativo ao comprimento máximo)" #: ../src/live_effects/lpe-sketch.cpp:49 -#, fuzzy msgid "Average offset:" -msgstr "Tipografia normal" +msgstr "Deslocamento médio:" #: ../src/live_effects/lpe-sketch.cpp:50 msgid "Average distance each stroke is away from the original path" -msgstr "" +msgstr "Distância média a que cada traço está do caminho original" #: ../src/live_effects/lpe-sketch.cpp:51 -#, fuzzy msgid "Max. tremble:" -msgstr "Ampliar largura do traço" +msgstr "Tremido máximo:" #: ../src/live_effects/lpe-sketch.cpp:52 msgid "Maximum tremble magnitude" -msgstr "" +msgstr "Máxima magnitude do tremido" #: ../src/live_effects/lpe-sketch.cpp:53 -#, fuzzy msgid "Tremble frequency:" -msgstr "Freqüência Base" +msgstr "Frequência do tremido:" #: ../src/live_effects/lpe-sketch.cpp:54 msgid "Average number of tremble periods in a stroke" -msgstr "" +msgstr "Número médio de períodos de tremido num traço" #: ../src/live_effects/lpe-sketch.cpp:56 -#, fuzzy msgid "Construction lines:" -msgstr "Centralizar linhas" +msgstr "Linhas de construção:" #: ../src/live_effects/lpe-sketch.cpp:57 msgid "How many construction lines (tangents) to draw" -msgstr "" +msgstr "Quantas linhas de construção (tangentes) mostrar" #: ../src/live_effects/lpe-sketch.cpp:58 #: ../src/ui/dialog/filter-effects-dialog.cpp:2918 #: ../share/extensions/render_alphabetsoup.inx.h:3 -#, fuzzy msgid "Scale:" -msgstr "Ampliar" +msgstr "Escala:" #: ../src/live_effects/lpe-sketch.cpp:59 msgid "" "Scale factor relating curvature and length of construction lines (try " "5*offset)" msgstr "" +"Fator de escala relacionando a curvatura e o comprimenro de linhas de " +"construção (tentar deslocamento 5*)" #: ../src/live_effects/lpe-sketch.cpp:60 -#, fuzzy msgid "Max. length:" -msgstr "Comprimento de onda" +msgstr "Comprimento máximo:" #: ../src/live_effects/lpe-sketch.cpp:60 msgid "Maximum length of construction lines" -msgstr "" +msgstr "Comprimento máximo das linhas de construção" #: ../src/live_effects/lpe-sketch.cpp:61 -#, fuzzy msgid "Length variation:" -msgstr "Menos Saturação" +msgstr "Variação do comprimento:" #: ../src/live_effects/lpe-sketch.cpp:61 msgid "Random variation of the length of construction lines" -msgstr "" +msgstr "Variação aleatória do comprimento das linhas de construção" #: ../src/live_effects/lpe-sketch.cpp:62 -#, fuzzy msgid "Placement randomness:" -msgstr "Não redondo" +msgstr "Aleatoriadade do posicionamento:" #: ../src/live_effects/lpe-sketch.cpp:62 msgid "0: evenly distributed construction lines, 1: purely random placement" msgstr "" +"0: linhas de construção distribuidas em proporção, 1: posicionamento " +"puramente aleatório" #: ../src/live_effects/lpe-sketch.cpp:64 -#, fuzzy msgid "k_min:" -msgstr "_Combinar" +msgstr "k_min:" #: ../src/live_effects/lpe-sketch.cpp:64 msgid "min curvature" -msgstr "" +msgstr "curvatura mínima" #: ../src/live_effects/lpe-sketch.cpp:65 -#, fuzzy msgid "k_max:" -msgstr "_x0:" +msgstr "k_max:" #: ../src/live_effects/lpe-sketch.cpp:65 -#, fuzzy msgid "max curvature" -msgstr "Arrastar curva" +msgstr "curvatura máxima" #: ../src/live_effects/lpe-taperstroke.cpp:66 -#, fuzzy msgid "Extrapolated" -msgstr "Interpolar" +msgstr "Extrapolado" #: ../src/live_effects/lpe-taperstroke.cpp:73 #: ../share/extensions/edge3d.inx.h:5 ../share/extensions/nicechart.inx.h:25 -#, fuzzy msgid "Stroke width:" -msgstr "Largura do traço" +msgstr "Espessura do traço:" #: ../src/live_effects/lpe-taperstroke.cpp:73 -#, fuzzy msgid "The (non-tapered) width of the path" -msgstr "Escala da largura do caminho de traço" +msgstr "A espessura (não estreitada) do caminho" #: ../src/live_effects/lpe-taperstroke.cpp:74 -#, fuzzy msgid "Start offset:" -msgstr "Ajustar a distância de compensação" +msgstr "Deslocamento inicial:" #: ../src/live_effects/lpe-taperstroke.cpp:74 msgid "Taper distance from path start" -msgstr "" +msgstr "Distância de estreitamento do início do caminho" #: ../src/live_effects/lpe-taperstroke.cpp:75 -#, fuzzy msgid "End offset:" -msgstr "Padrão de Tipografia" +msgstr "Deslocamento final:" #: ../src/live_effects/lpe-taperstroke.cpp:75 -#, fuzzy msgid "The ending position of the taper" -msgstr "Usar tamanho e posição salvos do ladrilho" +msgstr "A posição final do estreitamento" #: ../src/live_effects/lpe-taperstroke.cpp:76 -#, fuzzy msgid "Taper smoothing:" -msgstr "Suavizar" +msgstr "Suavização do estreitamento:" #: ../src/live_effects/lpe-taperstroke.cpp:76 msgid "Amount of smoothing to apply to the tapers" -msgstr "" +msgstr "Quantidade de suavização a aplicar aos estreitamentos" #: ../src/live_effects/lpe-taperstroke.cpp:77 -#, fuzzy msgid "Join type:" -msgstr " tipo: " +msgstr "Tipo de união:" #: ../src/live_effects/lpe-taperstroke.cpp:77 -#, fuzzy msgid "Join type for non-smooth nodes" -msgstr "Encaixar aos n_ós" +msgstr "Tipo de união para nós não suaves" #: ../src/live_effects/lpe-taperstroke.cpp:78 msgid "Limit for miter joins" -msgstr "" +msgstr "Limite para esquinas agudas" #: ../src/live_effects/lpe-taperstroke.cpp:447 -#, fuzzy msgid "Start point of the taper" -msgstr "Variação do ponto de início" +msgstr "Ponto inicial do estreitamento" #: ../src/live_effects/lpe-taperstroke.cpp:451 -#, fuzzy msgid "End point of the taper" -msgstr "Variação de ponto final" +msgstr "Ponto final do estreitamento" #: ../src/live_effects/lpe-transform_2pts.cpp:31 -#, fuzzy msgid "Elastic" -msgstr "Colar" +msgstr "Elástico" #: ../src/live_effects/lpe-transform_2pts.cpp:31 -#, fuzzy msgid "Elastic transform mode" -msgstr "Selecionar e transformar objectos" +msgstr "Modo de transformar elástico" #: ../src/live_effects/lpe-transform_2pts.cpp:32 -#, fuzzy msgid "From original width" -msgstr "Substituir texto..." +msgstr "Da largura original" #: ../src/live_effects/lpe-transform_2pts.cpp:33 -#, fuzzy msgid "Lock length" -msgstr "Bloquear Camada" +msgstr "Bloquear comprimento" #: ../src/live_effects/lpe-transform_2pts.cpp:33 -#, fuzzy msgid "Lock length to current distance" -msgstr "Bloquear ou desbloquear a camada actual" +msgstr "Bloquear comprimento à distância atual" #: ../src/live_effects/lpe-transform_2pts.cpp:34 -#, fuzzy msgid "Lock angle" -msgstr "Ângulo de Cone" +msgstr "Bloquear ângulo" #: ../src/live_effects/lpe-transform_2pts.cpp:35 -#, fuzzy msgid "Flip horizontal" -msgstr "Inverter horizontalmente" +msgstr "Espelhar na horizontal" #: ../src/live_effects/lpe-transform_2pts.cpp:36 -#, fuzzy msgid "Flip vertical" -msgstr "Inverter verticalmente" +msgstr "Espelhar na vertical" #: ../src/live_effects/lpe-transform_2pts.cpp:37 -#, fuzzy msgid "Start point" -msgstr "Orientação da página:" +msgstr "Ponto de início" #: ../src/live_effects/lpe-transform_2pts.cpp:38 -#, fuzzy msgid "End point" -msgstr "Variação de ponto final" +msgstr "Ponto de fim" #: ../src/live_effects/lpe-transform_2pts.cpp:39 -#, fuzzy msgid "Stretch" -msgstr "Tamanho do passo (px)" +msgstr "Esticar" #: ../src/live_effects/lpe-transform_2pts.cpp:39 -#, fuzzy msgid "Stretch the result" -msgstr "Resolução padrão de exportação" +msgstr "Esticar o resultado" #: ../src/live_effects/lpe-transform_2pts.cpp:40 -#, fuzzy msgid "Offset from knots" -msgstr "Tipografia" +msgstr "Deslocamento dos nós" #: ../src/live_effects/lpe-transform_2pts.cpp:41 -#, fuzzy msgid "First Knot" -msgstr "Primeiro seleccionado" +msgstr "Primeiro Nó" #: ../src/live_effects/lpe-transform_2pts.cpp:42 msgid "Last Knot" -msgstr "" +msgstr "Último Nó" #: ../src/live_effects/lpe-transform_2pts.cpp:43 -#, fuzzy msgid "Rotation helper size" -msgstr "Rotação (graus)" +msgstr "Tamanho do indicador de rotação" #: ../src/live_effects/lpe-transform_2pts.cpp:196 -#, fuzzy msgid "Change index of knot" -msgstr "Alterar tipo do nó" +msgstr "Alterar índice do nó" #: ../src/live_effects/lpe-transform_2pts.cpp:349 #: ../src/ui/dialog/inkscape-preferences.cpp:1623 @@ -12442,76 +11538,74 @@ msgstr "Alterar tipo do nó" #: ../src/ui/dialog/svg-fonts-dialog.cpp:699 #: ../src/ui/dialog/tracedialog.cpp:813 #: ../src/ui/widget/preferences-widget.cpp:742 -#, fuzzy msgid "Reset" -msgstr " R_edefinir " +msgstr "Repor" #: ../src/live_effects/lpe-vonkoch.cpp:46 -#, fuzzy msgid "N_r of generations:" -msgstr "Número de revoluções" +msgstr "Núme_ro de generações:" #: ../src/live_effects/lpe-vonkoch.cpp:46 msgid "Depth of the recursion --- keep low!!" -msgstr "" +msgstr "Profundidade do reocorrer --- manter baixo!!" #: ../src/live_effects/lpe-vonkoch.cpp:47 -#, fuzzy msgid "Generating path:" -msgstr "Criar novo caminho" +msgstr "Caminho gerador:" #: ../src/live_effects/lpe-vonkoch.cpp:47 msgid "Path whose segments define the iterated transforms" -msgstr "" +msgstr "Caminho do qual os segmentos definem as transformações repetidas" #: ../src/live_effects/lpe-vonkoch.cpp:48 msgid "_Use uniform transforms only" -msgstr "" +msgstr "_Usar apenas transformações uniformes" #: ../src/live_effects/lpe-vonkoch.cpp:48 msgid "" "2 consecutive segments are used to reverse/preserve orientation only " "(otherwise, they define a general transform)." msgstr "" +"São usados 2 segmentos consecutivos apenas para a orientação reversa/mantida " +"(caso contrário, eles definem a transformação geral)." #: ../src/live_effects/lpe-vonkoch.cpp:49 -#, fuzzy msgid "Dra_w all generations" -msgstr "Número de revoluções" +msgstr "_Desenhar todos os geradores" #: ../src/live_effects/lpe-vonkoch.cpp:49 msgid "If unchecked, draw only the last generation" -msgstr "" +msgstr "Se desativado, desenhar apenas a última geração." #. ,draw_boxes(_("Display boxes"), _("Display boxes instead of paths only"), "draw_boxes", &wr, this, true) #: ../src/live_effects/lpe-vonkoch.cpp:51 -#, fuzzy msgid "Reference segment:" -msgstr "Eliminar segmento" +msgstr "Segmento de referência:" #: ../src/live_effects/lpe-vonkoch.cpp:51 msgid "The reference segment. Defaults to the horizontal midline of the bbox." msgstr "" +"O segmento de referência. Por padrão a linha do meio horizontal da caixa " +"limitadora." #. refA(_("Ref Start"), _("Left side middle of the reference box"), "refA", &wr, this), #. refB(_("Ref End"), _("Right side middle of the reference box"), "refB", &wr, this), #. FIXME: a path is used here instead of 2 points to work around path/point param incompatibility bug. #: ../src/live_effects/lpe-vonkoch.cpp:55 msgid "_Max complexity:" -msgstr "" +msgstr "Complexidade _máxima:" #: ../src/live_effects/lpe-vonkoch.cpp:55 msgid "Disable effect if the output is too complex" -msgstr "" +msgstr "Desativar o efeito se o resultado for muito complexo" #: ../src/live_effects/parameter/bool.cpp:68 msgid "Change bool parameter" msgstr "Alterar parâmetro booleano" #: ../src/live_effects/parameter/enum.h:47 -#, fuzzy msgid "Change enumeration parameter" -msgstr "Alterar parâmetro enum" +msgstr "Alterar parâmetro de enumeração" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:778 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:839 @@ -12519,6 +11613,8 @@ msgid "" "Chamfer: Ctrl+Click toggle type, Shift+Click open " "dialog, Ctrl+Alt+Click reset" msgstr "" +"Chanfra: Ctrl+clicar alternar tipo, Shift+clicar abrir " +"janela, Ctrl+Alt+clicar repor" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:782 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:843 @@ -12526,6 +11622,8 @@ msgid "" "Inverse Chamfer: Ctrl+Click toggle type, Shift+Click " "open dialog, Ctrl+Alt+Click reset" msgstr "" +"Chanfra Invertida: Ctrl+clicar alternar tipo, Shift+clicar abrir janela, Ctrl+Alt+clicar repor" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:786 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:847 @@ -12533,6 +11631,8 @@ msgid "" "Inverse Fillet: Ctrl+Click toggle type, Shift+Click " "open dialog, Ctrl+Alt+Click reset" msgstr "" +"Filete Invertido: Ctrl+clicar alternar tipo, Shift+clicar abrir janela, Ctrl+Alt+clicar repor" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:790 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:851 @@ -12540,84 +11640,74 @@ msgid "" "Fillet: Ctrl+Click toggle type, Shift+Click open " "dialog, Ctrl+Alt+Click reset" msgstr "" +"Filete: Ctrl+clicar alternar tipo, Shift+clicar abrir " +"janela, Ctrl+Alt+clicar repor" #: ../src/live_effects/parameter/originalpath.cpp:67 #: ../src/live_effects/parameter/originalpatharray.cpp:155 -#, fuzzy msgid "Link to path" -msgstr "Encaixar no camin_ho" +msgstr "Ligação para o caminho" #: ../src/live_effects/parameter/originalpath.cpp:79 -#, fuzzy msgid "Select original" -msgstr "Selecionar _Original" +msgstr "Selecionar original" #: ../src/live_effects/parameter/originalpatharray.cpp:90 #: ../src/widgets/gradient-toolbar.cpp:1205 -#, fuzzy msgid "Reverse" -msgstr "_Reverter" +msgstr "Reverso" #: ../src/live_effects/parameter/originalpatharray.cpp:130 #: ../src/live_effects/parameter/originalpatharray.cpp:315 #: ../src/live_effects/parameter/path.cpp:486 -#, fuzzy msgid "Link path parameter to path" -msgstr "Colar caminho do parâmetro" +msgstr "Ligar o parâmetro do caminho ao caminho" #: ../src/live_effects/parameter/originalpatharray.cpp:167 -#, fuzzy msgid "Remove Path" -msgstr "_Remover do caminho" +msgstr "Remover Caminho" #: ../src/live_effects/parameter/originalpatharray.cpp:179 #: ../src/ui/dialog/objects.cpp:1854 -#, fuzzy msgid "Move Down" -msgstr "Mover para:" +msgstr "Mover para Baixo" #: ../src/live_effects/parameter/originalpatharray.cpp:191 #: ../src/ui/dialog/objects.cpp:1862 -#, fuzzy msgid "Move Up" -msgstr "Padrões" +msgstr "Mover para Cima" #: ../src/live_effects/parameter/originalpatharray.cpp:231 -#, fuzzy msgid "Move path up" -msgstr "Padrões" +msgstr "Mover caminho para cima" #: ../src/live_effects/parameter/originalpatharray.cpp:261 -#, fuzzy msgid "Move path down" -msgstr "Remover efeito de caminho" +msgstr "Mover caminho para baixo" #: ../src/live_effects/parameter/originalpatharray.cpp:279 -#, fuzzy msgid "Remove path" -msgstr "Padrões" +msgstr "Remover caminho" #: ../src/live_effects/parameter/path.cpp:170 msgid "Edit on-canvas" msgstr "Editar na área de desenho" #: ../src/live_effects/parameter/path.cpp:180 -#, fuzzy msgid "Copy path" -msgstr "Cortar Caminho" +msgstr "Copiar caminho" #: ../src/live_effects/parameter/path.cpp:190 msgid "Paste path" msgstr "Colar caminho" #: ../src/live_effects/parameter/path.cpp:200 -#, fuzzy msgid "Link to path on clipboard" -msgstr "Nada na área de transferência." +msgstr "Ligação para o caminho na área de transferência" #: ../src/live_effects/parameter/path.cpp:454 msgid "Paste path parameter" -msgstr "Colar caminho do parâmetro" +msgstr "Colar parâmetro do caminho" #: ../src/live_effects/parameter/point.cpp:132 msgid "Change point parameter" @@ -12630,42 +11720,41 @@ msgid "" "+click adds a control point, Ctrl+Alt+click deletes it, Shift" "+click launches width dialog." msgstr "" +"Ponto de controlo da espessura do traço: arrastar para alterar a " +"espessura do traço. Ctrl+clicar adiciona um ponto de controlo, Ctrl" +"+Alt+clicar elimina-o, Shift+clicar abre o painel da espessura." #: ../src/live_effects/parameter/random.cpp:134 msgid "Change random parameter" -msgstr "Alterar parâmetro randômico" +msgstr "Alterar parâmetro aleatório" #: ../src/live_effects/parameter/text.cpp:101 -#, fuzzy msgid "Change text parameter" -msgstr "Alterar parâmetro do ponto" +msgstr "Alterar parâmetro do texto" #: ../src/live_effects/parameter/togglebutton.cpp:112 -#, fuzzy msgid "Change togglebutton parameter" -msgstr "Alterar parâmetro do ponto" +msgstr "Alterar parâmetro do botão de alternar" #: ../src/live_effects/parameter/transformedpoint.cpp:98 #: ../src/live_effects/parameter/vector.cpp:99 -#, fuzzy msgid "Change vector parameter" -msgstr "Alterar parâmetro do ponto" +msgstr "Alterar parâmetro do vetor" #: ../src/live_effects/parameter/unit.cpp:80 -#, fuzzy msgid "Change unit parameter" -msgstr "Alterar parâmetro do ponto" +msgstr "Alterar parâmetro da unidade" #: ../src/main-cmdlineact.cpp:49 #, c-format msgid "Unable to find verb ID '%s' specified on the command line.\n" msgstr "" -"Impossível encontrar o ID de verbo '%s' especificado na linha de comando.\n" +"Impossível encontrar o ID do verbo '%s' especificado na linha de comando.\n" #: ../src/main-cmdlineact.cpp:60 #, c-format msgid "Unable to find node ID: '%s'\n" -msgstr "Impossível encontrar o ID de nó: '%s'\n" +msgstr "Impossível encontrar o ID do nó: '%s'\n" #: ../src/main.cpp:300 msgid "Print the Inkscape version number" @@ -12673,7 +11762,7 @@ msgstr "Imprimir o número de versão do Inkscape" #: ../src/main.cpp:305 msgid "Do not use X server (only process files from console)" -msgstr "Não usar o servidor X (somente ficheiros de processos do console)" +msgstr "Não usar o servidor X (processar apenas ficheiros da consola)" #: ../src/main.cpp:310 msgid "Try to use X server (even if $DISPLAY is not set)" @@ -12682,60 +11771,61 @@ msgstr "Tente usar o servidor X (mesmo se $DISPLAY não foi definido)" #: ../src/main.cpp:315 msgid "Open specified document(s) (option string may be excluded)" msgstr "" -"Abrir o(s) desenho(s) especificado(s) (frase de opção pode ser excluída)" +"Abrir os documentos especificados (expressão de opção pode ser excluída)" #: ../src/main.cpp:316 ../src/main.cpp:321 ../src/main.cpp:326 #: ../src/main.cpp:398 ../src/main.cpp:403 ../src/main.cpp:408 #: ../src/main.cpp:419 ../src/main.cpp:435 ../src/main.cpp:440 msgid "FILENAME" -msgstr "FICHEIRO" +msgstr "NOME DO FICHEIRO" #: ../src/main.cpp:320 msgid "Print document(s) to specified output file (use '| program' for pipe)" msgstr "" -"Imprimir desenho(s) para ficheiro especificado ( use '| programa' para " -"redirecionamento)" +"Imprimir documentos para um ficheiro especificado (usar '| programa' para " +"pipe)" #: ../src/main.cpp:325 msgid "Export document to a PNG file" -msgstr "Exportar desenho para um ficheiro PNG" +msgstr "Exportar documento para um ficheiro PNG" #: ../src/main.cpp:330 msgid "" "Resolution for exporting to bitmap and for rasterization of filters in PS/" "EPS/PDF (default 96)" msgstr "" +"Resolução para exportar para imagem bitmap e para rasterização de filtros em " +"PS/EPS/PDF (padrão 96)" #: ../src/main.cpp:331 ../src/ui/widget/rendering-options.cpp:37 msgid "DPI" msgstr "DPI" #: ../src/main.cpp:335 -#, fuzzy msgid "" "Exported area in SVG user units (default is the page; 0,0 is lower-left " "corner)" msgstr "" -"Ãrea exportada em unidades de utilizador SVG (padrão é todo o desenho, 0,0 é " -"o canto esquerdo inferior)" +"Ãrea exportada em unidades de utilizador SVG (padrão é a página; 0,0 é o " +"canto esquerdo inferior)" #: ../src/main.cpp:336 msgid "x0:y0:x1:y1" msgstr "x0:y0:x1:y1" #: ../src/main.cpp:340 -#, fuzzy msgid "Exported area is the entire drawing (not page)" -msgstr "A área exportada é o desenho inteiro (não a Ecrã de pintura)" +msgstr "A área exportada é o desenho inteiro (não a página)" #: ../src/main.cpp:345 -#, fuzzy msgid "Exported area is the entire page" -msgstr "A área exportada é toda a Ecrã de pintura" +msgstr "A área exportada é a página inteira" #: ../src/main.cpp:350 msgid "Only for PS/EPS/PDF, sets margin in mm around exported area (default 0)" msgstr "" +"Apenas para PS/EPS/PDF, define a margem em mm à volta da área exportada " +"(padrão 0)" #: ../src/main.cpp:351 ../src/main.cpp:393 msgid "VALUE" @@ -12746,12 +11836,12 @@ msgid "" "Snap the bitmap export area outwards to the nearest integer values (in SVG " "user units)" msgstr "" -"Copie a imagem exportada para a área de transferência mantendo os valores " -"inteiros (no SVG com unidades do utilizador)" +"Atrair a área de exportar a imagem bitmap para fora para os valores inteiros " +"mais próximos (em unidades de utilizador SVG)" #: ../src/main.cpp:360 msgid "The width of exported bitmap in pixels (overrides export-dpi)" -msgstr "A largura da figura exportada em pixels (sobrescreve export-dpi)" +msgstr "A largura da imagem exportada em píxeis (prioridade a export-dpi)" #: ../src/main.cpp:361 msgid "WIDTH" @@ -12759,7 +11849,7 @@ msgstr "LARGURA" #: ../src/main.cpp:365 msgid "The height of exported bitmap in pixels (overrides export-dpi)" -msgstr "A altura da figura exportada em pixels (sobrescreve export-dpi)" +msgstr "A altura da imagem exportada em píxeis (prioridade a export-dpi)" #: ../src/main.cpp:366 msgid "HEIGHT" @@ -12767,7 +11857,7 @@ msgstr "ALTURA" #: ../src/main.cpp:370 msgid "The ID of the object to export" -msgstr "O ID do objecto para exportar" +msgstr "O ID do objeto para exportar" #: ../src/main.cpp:371 ../src/main.cpp:484 #: ../src/ui/dialog/inkscape-preferences.cpp:1569 @@ -12780,18 +11870,20 @@ msgstr "ID" msgid "" "Export just the object with export-id, hide all others (only with export-id)" msgstr "" -"Exportar somente o objecto com id-exportação, esconder todos os outros " -"(somente com id-exportação)" +"Exportar apenas o objeto com export-id, ocultar todos os outros (apenas com " +"export-id)" #: ../src/main.cpp:382 msgid "Use stored filename and DPI hints when exporting (only with export-id)" msgstr "" -"Usar nome de ficheiro armazenado e dicas de DPI ao exportar (somente com id-" -"exportação)" +"Usar nome de ficheiro armazenado e dicas de DPI ao exportar (apenas com " +"export-id)" #: ../src/main.cpp:387 msgid "Background color of exported bitmap (any SVG-supported color string)" -msgstr "Cor de fundo da figura exportada (qualquer palavra de cor do SVG)" +msgstr "" +"Cor de fundo da imagem bitmap exportada (qualquer expressão de cor suportada " +"pelo SVG)" #: ../src/main.cpp:388 msgid "COLOR" @@ -12799,17 +11891,18 @@ msgstr "COR" #: ../src/main.cpp:392 msgid "Background opacity of exported bitmap (either 0.0 to 1.0, or 1 to 255)" -msgstr "Opacidade do fundo da figura exportada (De 0 a 1, ou 1 a 255)" +msgstr "" +"Opacidade do fundo da imagem bitmap exportada (quer 0.0 a 1.0, ou 1 a 255)" #: ../src/main.cpp:397 msgid "Export document to plain SVG file (no sodipodi or inkscape namespaces)" msgstr "" -"Exportar o desenho para um ficheiro SVG simples (sem namespaces sodipodi ou " -"inkscape)" +"Exportar o documento para um ficheiro SVG simples (plain SVG, sem nomes de " +"espaço sodipodi ou inkscape)" #: ../src/main.cpp:402 msgid "Export document to a PS file" -msgstr "Exportar documento para um ficheiro PS" +msgstr "Exportar documento para um ficheiro PostScript" #: ../src/main.cpp:407 msgid "Export document to an EPS file" @@ -12820,11 +11913,12 @@ msgid "" "Choose the PostScript Level used to export. Possible choices are 2 and 3 " "(the default)" msgstr "" +"Escolher o Nível PostScript usado para exportar. Pode ser o nível 2 ou 3 " +"(padrão)" #: ../src/main.cpp:414 -#, fuzzy msgid "PS Level" -msgstr "Nível" +msgstr "Nível PS" #: ../src/main.cpp:418 msgid "Export document to a PDF file" @@ -12836,10 +11930,13 @@ msgid "" "Export PDF to given version. (hint: make sure to input the exact string " "found in the PDF export dialog, e.g. \"PDF 1.4\" which is PDF-a conformant)" msgstr "" +"Exportar o PDF na versão especificada. Dica: confirme se introduziu a " +"expressão exata encontrada na janela de exportar PDF, por exemplo \"PDF " +"1.4\" que está de acordo com a especificação PDF-a." #: ../src/main.cpp:425 msgid "PDF_VERSION" -msgstr "" +msgstr "VERSAO_PDF" #: ../src/main.cpp:429 msgid "" @@ -12847,26 +11944,29 @@ msgid "" "exported, putting the text on top of the PDF/PS/EPS file. Include the result " "in LaTeX like: \\input{latexfile.tex}" msgstr "" +"Exportar PDF/PS/EPS sem texto. Para além do PDF/PS/EPS, também é exportado " +"um ficheiro LaTeX, colocando o texto no topo do ficheiro PDF/PS/EPS. Incluir " +"o resultado no LaTeX como: \\input{latexfile.tex}" #: ../src/main.cpp:434 msgid "Export document to an Enhanced Metafile (EMF) File" msgstr "Exportar documento para um ficheiro Enhanced Metafile (EMF)" #: ../src/main.cpp:439 -#, fuzzy msgid "Export document to a Windows Metafile (WMF) File" -msgstr "Exportar documento para um ficheiro Enhanced Metafile (EMF)" +msgstr "Exportar documento para um ficheiro Windows Metafile (WMF)" #: ../src/main.cpp:444 -#, fuzzy msgid "Convert text object to paths on export (PS, EPS, PDF, SVG)" -msgstr "Converter texto em objectos ao exportar (EPS)" +msgstr "Converter texto em caminhos ao exportar (PS, EPS, PDF, SVG)" #: ../src/main.cpp:449 msgid "" "Render filtered objects without filters, instead of rasterizing (PS, EPS, " "PDF)" msgstr "" +"Renderizar objetos filtrados sem filtros, em vez de rasterização (PS, EPS, " +"PDF)" #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help" #: ../src/main.cpp:455 @@ -12874,7 +11974,7 @@ msgid "" "Query the X coordinate of the drawing or, if specified, of the object with --" "query-id" msgstr "" -"Perguntar as coordenadas X do desenho ou, se especificado, do objecto com --" +"Perguntar as coordenadas X do desenho ou, se especificado, do objeto com --" "query-id" #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help" @@ -12883,7 +11983,7 @@ msgid "" "Query the Y coordinate of the drawing or, if specified, of the object with --" "query-id" msgstr "" -"Perguntar as coordenadas Y do desenho ou, se especificado, do objecto com --" +"Perguntar as coordenadas Y do desenho ou, se especificado, do objeto com --" "query-id" #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help" @@ -12892,8 +11992,7 @@ msgid "" "Query the width of the drawing or, if specified, of the object with --query-" "id" msgstr "" -"Peguntar a largura de um desenho ou, se especificado, do objecto com --query-" -"id" +"Perguntar a largura do desenho ou, se especificado, do objeto com --query-id" #. TRANSLATORS: "--query-id" is an Inkscape command line option; see "inkscape --help" #: ../src/main.cpp:473 @@ -12901,39 +12000,40 @@ msgid "" "Query the height of the drawing or, if specified, of the object with --query-" "id" msgstr "" -"Perguntar a largura de um desenho ou, se especificado, do objecto com --" -"query-id" +"Perguntar a altura do desenho ou, se especificado, do objeto com --query-id" #: ../src/main.cpp:478 msgid "List id,x,y,w,h for all objects" -msgstr "" +msgstr "Listar id,x,y,w,h para todos os objetos" #: ../src/main.cpp:483 msgid "The ID of the object whose dimensions are queried" -msgstr "O ID do objecto cujas dimensões são pesquisadas" +msgstr "O ID do objeto cujas dimensões são consultadas" #. TRANSLATORS: this option makes Inkscape print the name (path) of the extension directory #: ../src/main.cpp:489 msgid "Print out the extension directory and exit" -msgstr "Imprime o diretório das extensões e sai" +msgstr "Imprimir a pasta das extensões e sair" #: ../src/main.cpp:494 msgid "Remove unused definitions from the defs section(s) of the document" -msgstr "Eliminar definições não usadas da(s) seção(ões) do documento" +msgstr "Eliminar definições não usadas das secções do documento" #: ../src/main.cpp:500 msgid "Enter a listening loop for D-Bus messages in console mode" -msgstr "" +msgstr "Introduzir um ciclo de escuta para as mensagens D-Bus no modo terminal" #: ../src/main.cpp:505 msgid "" "Specify the D-Bus bus name to listen for messages on (default is org." "inkscape)" msgstr "" +"Especificar o nome do bus D-Bus no qual obter mensagens (o padrão é org." +"inkscape)" #: ../src/main.cpp:506 msgid "BUS-NAME" -msgstr "" +msgstr "NOME-DO-BUS" #: ../src/main.cpp:511 msgid "List the IDs of all the verbs in Inkscape" @@ -12949,15 +12049,15 @@ msgstr "VERBO-ID" #: ../src/main.cpp:521 msgid "Object ID to select when Inkscape opens." -msgstr "ID do objecto para selecionar quando o Inkscape abrir." +msgstr "ID do objeto para selecionar quando o Inkscape abrir." #: ../src/main.cpp:522 msgid "OBJECT-ID" -msgstr "OBJECTO-ID" +msgstr "OBJETO-ID" #: ../src/main.cpp:526 msgid "Start Inkscape in interactive shell mode." -msgstr "" +msgstr "Iniciar o Inkscape com a consola interativa" #: ../src/main.cpp:876 ../src/main.cpp:1349 msgid "" @@ -12989,9 +12089,8 @@ msgid "Clo_ne" msgstr "Clo_nar" #: ../src/menus-skeleton.h:79 -#, fuzzy msgid "Select Sa_me" -msgstr "Selecionar página:" +msgstr "Selecionar _Iguais" #: ../src/menus-skeleton.h:100 msgid "_View" @@ -12999,27 +12098,26 @@ msgstr "_Ver" #: ../src/menus-skeleton.h:101 msgid "_Zoom" -msgstr "_Zoom" +msgstr "_Aproximar/Afastar" #: ../src/menus-skeleton.h:117 msgid "_Display mode" -msgstr "_Modo de visão" +msgstr "_Modo de visualização" #. Better location in menu needs to be found #. " \n" #. " \n" #: ../src/menus-skeleton.h:126 -#, fuzzy msgid "_Color display mode" -msgstr "_Modo de visão" +msgstr "Modo de visualização a _cores" +# Usar "Elementos da Interface" ou similar #. Better location in menu needs to be found #. " \n" #. " \n" #: ../src/menus-skeleton.h:139 -#, fuzzy msgid "Sh_ow/Hide" -msgstr "Mostrar/Esconder" +msgstr "_Elementos da Interface" #. Not quite ready to be in the menus. #. " \n" @@ -13029,19 +12127,19 @@ msgstr "Ca_mada" #: ../src/menus-skeleton.h:183 msgid "_Object" -msgstr "_Objecto" +msgstr "_Objeto" #: ../src/menus-skeleton.h:195 msgid "Cli_p" -msgstr "Cli_p" +msgstr "_Recorte" #: ../src/menus-skeleton.h:199 msgid "Mas_k" -msgstr "Más_cara" +msgstr "_Máscara" #: ../src/menus-skeleton.h:203 msgid "Patter_n" -msgstr "Padrão de preenchime_nto" +msgstr "_Padrão" #: ../src/menus-skeleton.h:227 msgid "_Path" @@ -13053,14 +12151,12 @@ msgid "_Text" msgstr "_Texto" #: ../src/menus-skeleton.h:277 -#, fuzzy msgid "Filter_s" -msgstr "Filtros" +msgstr "_Filtros" #: ../src/menus-skeleton.h:283 -#, fuzzy msgid "Exte_nsions" -msgstr "Extensão \"" +msgstr "E_xtensões" #: ../src/menus-skeleton.h:289 msgid "_Help" @@ -13071,30 +12167,28 @@ msgid "Tutorials" msgstr "Tutoriais" #: ../src/path-chemistry.cpp:63 -#, fuzzy msgid "Select object(s) to combine." -msgstr "Seleccione alguns objectos para levantar." +msgstr "Selecionar objetos a combinar." #: ../src/path-chemistry.cpp:67 msgid "Combining paths..." -msgstr "Combinando caminhos..." +msgstr "A combinar caminhos..." #: ../src/path-chemistry.cpp:177 msgid "Combine" msgstr "Combinar" #: ../src/path-chemistry.cpp:184 -#, fuzzy msgid "No path(s) to combine in the selection." -msgstr "Nenhum caminho para simplificar na selecção." +msgstr "Nenhum caminho para combinar na seleção." #: ../src/path-chemistry.cpp:196 msgid "Select path(s) to break apart." -msgstr "Seleccione o(s) caminho(s) para separar." +msgstr "Selecionar os caminhos a separar." #: ../src/path-chemistry.cpp:200 msgid "Breaking apart paths..." -msgstr "Quebrar caminhos..." +msgstr "Separar caminhos..." #: ../src/path-chemistry.cpp:282 msgid "Break apart" @@ -13102,31 +12196,31 @@ msgstr "Separar" #: ../src/path-chemistry.cpp:285 msgid "No path(s) to break apart in the selection." -msgstr "Nenhum caminho para separar na selecção." +msgstr "Nenhum caminho para separar na seleção." #: ../src/path-chemistry.cpp:295 msgid "Select object(s) to convert to path." -msgstr "Seleccione o(s) objecto(s) para converter para caminho." +msgstr "Selecionar os objetos para converter em caminhos." #: ../src/path-chemistry.cpp:301 msgid "Converting objects to paths..." -msgstr "Convertendo objectos em caminhos..." +msgstr "A converter objetos em caminhos..." #: ../src/path-chemistry.cpp:320 msgid "Object to path" -msgstr "Objecto para Caminho" +msgstr "Converter objeto num caminho" #: ../src/path-chemistry.cpp:322 msgid "No objects to convert to path in the selection." -msgstr "Nenhum objecto para converter para um caminho na selecção." +msgstr "Nenhum objeto selecionado para converter num caminho." #: ../src/path-chemistry.cpp:609 msgid "Select path(s) to reverse." -msgstr "Seleccione um ou mais caminhos para reverter." +msgstr "Selecionar caminhos para reverter." #: ../src/path-chemistry.cpp:618 msgid "Reversing paths..." -msgstr "Revertendo caminhos..." +msgstr "A reverter caminhos..." #: ../src/path-chemistry.cpp:653 msgid "Reverse path" @@ -13134,144 +12228,128 @@ msgstr "Reverter caminho" #: ../src/path-chemistry.cpp:655 msgid "No paths to reverse in the selection." -msgstr "Nenhum caminho para reverter na selecção." +msgstr "Nenhum caminho para reverter na seleção." #: ../src/persp3d.cpp:323 -#, fuzzy msgid "Toggle vanishing point" -msgstr "Criar novo caminho" +msgstr "Alterar ponto de fuga" #: ../src/persp3d.cpp:334 -#, fuzzy msgid "Toggle multiple vanishing points" -msgstr "Criar novo caminho" +msgstr "Alterar pontos de fuga múltiplos" #: ../src/preferences-skeleton.h:102 -#, fuzzy msgid "Dip pen" -msgstr "Script" +msgstr "Bico de pena" #: ../src/preferences-skeleton.h:103 -#, fuzzy msgid "Marker" -msgstr "Mais escuro" +msgstr "Marca no caminho" # Enevoar, desfocar ou borrar? -- krishna #: ../src/preferences-skeleton.h:104 -#, fuzzy msgid "Brush" -msgstr "Desfocar" +msgstr "Pincel" #: ../src/preferences-skeleton.h:105 -#, fuzzy msgid "Wiggly" -msgstr "Ondulação:" +msgstr "Curvoso" #: ../src/preferences-skeleton.h:106 msgid "Splotchy" -msgstr "" +msgstr "Salpicado" #: ../src/preferences-skeleton.h:107 -#, fuzzy msgid "Tracing" -msgstr "Espaçamento" +msgstr "Vetorizar" #: ../src/preferences.cpp:136 -#, fuzzy msgid "" "Inkscape will run with default settings, and new settings will not be saved. " msgstr "" -"O Inkscape funcionará com as configurações padrão.\n" -"Novas configurações não serão salvas." +"O Inkscape funcionará com as configurações padrão e as novas configurações " +"não serão gravadas. " #. the creation failed #. _reportError(Glib::ustring::compose(_("Cannot create profile directory %1."), #. Glib::filename_to_utf8(_prefs_dir)), not_saved); #: ../src/preferences.cpp:151 -#, fuzzy, c-format +#, c-format msgid "Cannot create profile directory %s." -msgstr "" -"Não foi possível criar a pasta %s.\n" -"%s" +msgstr "Não foi possível criar a pasta %s." #. The profile dir is not actually a directory #. _reportError(Glib::ustring::compose(_("%1 is not a valid directory."), #. Glib::filename_to_utf8(_prefs_dir)), not_saved); #: ../src/preferences.cpp:169 -#, fuzzy, c-format +#, c-format msgid "%s is not a valid directory." -msgstr "" -"%s não é uma pasta válida.\n" -"%s" +msgstr "%s não é uma pasta válida." #. The write failed. #. _reportError(Glib::ustring::compose(_("Failed to create the preferences file %1."), #. Glib::filename_to_utf8(_prefs_filename)), not_saved); #: ../src/preferences.cpp:180 -#, fuzzy, c-format +#, c-format msgid "Failed to create the preferences file %s." -msgstr "Falha ao carregar o ficheiro %s" +msgstr "Não foi possível criar o ficheiro das preferências %s." #: ../src/preferences.cpp:216 -#, fuzzy, c-format +#, c-format msgid "The preferences file %s is not a regular file." -msgstr "" -"%s não é um ficheiro comum.\n" -"%s" +msgstr "O ficheiro de preferências %s não é um ficheiro comum." #: ../src/preferences.cpp:226 -#, fuzzy, c-format +#, c-format msgid "The preferences file %s could not be read." -msgstr "O ficheiro %s não pode ser salvo." +msgstr "Não foi possível ler o ficheiro das preferências %s." #: ../src/preferences.cpp:237 #, c-format msgid "The preferences file %s is not a valid XML document." -msgstr "" +msgstr "O ficheiro de preferências %s não é um ficheiro XML válido." #: ../src/preferences.cpp:246 -#, fuzzy, c-format +#, c-format msgid "The file %s is not a valid Inkscape preferences file." -msgstr "" -"%s não é um ficheiro de configurações válido.\n" -"%s" +msgstr "O ficheiro %s não é um ficheiro de preferências do Inkscape válido." #: ../src/rdf.cpp:175 msgid "CC Attribution" -msgstr "Atribuição CC" +msgstr "CC BY: Atribuição" #: ../src/rdf.cpp:180 msgid "CC Attribution-ShareAlike" -msgstr "CC Atribuição-Compatilhamento pela mesma licença" +msgstr "CC BY-SA: Atribuição-Compatilhamento Pela Mesma Licença" #: ../src/rdf.cpp:185 msgid "CC Attribution-NoDerivs" -msgstr "CC Atribuição-NãoDerivados" +msgstr "CC BY-ND: Atribuição-NãoDerivados" #: ../src/rdf.cpp:190 msgid "CC Attribution-NonCommercial" -msgstr "CC Atribuição-NãoComercial" +msgstr "CC BY-NC: Atribuição-NãoComercial" #: ../src/rdf.cpp:195 msgid "CC Attribution-NonCommercial-ShareAlike" -msgstr "CC Atribuição-NãoComercial-Compatilhamento pela mesma licença" +msgstr "" +"CC BY-NC-SA: Atribuição-NãoComercial-Compatilhamento Pela Mesma Licença" #: ../src/rdf.cpp:200 msgid "CC Attribution-NonCommercial-NoDerivs" -msgstr "CC Atribuição-NãoComercial-NãoDerivados" +msgstr "CC BY-NC-ND: Atribuição-NãoComercial-NãoDerivados" #: ../src/rdf.cpp:205 -#, fuzzy msgid "CC0 Public Domain Dedication" -msgstr "Domínio Público" +msgstr "CC0: Dedicação ao Domínio Público" #: ../src/rdf.cpp:210 msgid "FreeArt" -msgstr "ArteLivre" +msgstr "Arte Livre (Art Libre)" #: ../src/rdf.cpp:215 msgid "Open Font License" -msgstr "Licença Open Font" +msgstr "Licença de Fonte Tipográfica Aberta (SIL Open Font License)" #. Create the Title label and edit control #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkTitleAttribute @@ -13282,7 +12360,7 @@ msgstr "Título:" #: ../src/rdf.cpp:236 msgid "A name given to the resource" -msgstr "" +msgstr "Nome fornecido ao recurso" #: ../src/rdf.cpp:238 msgid "Date:" @@ -13292,7 +12370,7 @@ msgstr "Data:" msgid "" "A point or period of time associated with an event in the lifecycle of the " "resource" -msgstr "" +msgstr "Data ou período de tempo associado a este documento" #: ../src/rdf.cpp:241 ../share/extensions/webslicer_create_rect.inx.h:3 msgid "Format:" @@ -13300,39 +12378,35 @@ msgstr "Formato:" #: ../src/rdf.cpp:242 msgid "The file format, physical medium, or dimensions of the resource" -msgstr "" +msgstr "O formato do ficheiro, meio físico ou dimensões deste documento" #: ../src/rdf.cpp:245 msgid "The nature or genre of the resource" -msgstr "" +msgstr "Natureza ou género do recurso" #: ../src/rdf.cpp:248 msgid "Creator:" msgstr "Autor:" #: ../src/rdf.cpp:249 -#, fuzzy msgid "An entity primarily responsible for making the resource" -msgstr "" -"Nome da entidade responsável pela elaboração do conteúdo deste desenho." +msgstr "Nome da entidade responsável pela elaboração deste documento" #: ../src/rdf.cpp:251 -#, fuzzy msgid "Rights:" msgstr "Direitos:" #: ../src/rdf.cpp:252 msgid "Information about rights held in and over the resource" -msgstr "" +msgstr "Informação sobre os direitos sobre o documento" #: ../src/rdf.cpp:254 msgid "Publisher:" msgstr "Publicador:" #: ../src/rdf.cpp:255 -#, fuzzy msgid "An entity responsible for making the resource available" -msgstr "Nome da entidade responsável por fazer este desenho disponível." +msgstr "Nome da entidade responsável por tornar este documento disponível" #: ../src/rdf.cpp:258 msgid "Identifier:" @@ -13340,43 +12414,39 @@ msgstr "Identificador:" #: ../src/rdf.cpp:259 msgid "An unambiguous reference to the resource within a given context" -msgstr "" +msgstr "Referência inequívoca do documento" #: ../src/rdf.cpp:262 msgid "A related resource from which the described resource is derived" -msgstr "" +msgstr "Um recurso relacionado do qual o documento é derivado" #: ../src/rdf.cpp:264 -#, fuzzy msgid "Relation:" -msgstr "Relação" +msgstr "Relação:" #: ../src/rdf.cpp:265 -#, fuzzy msgid "A related resource" -msgstr "_Modo misturar:" +msgstr "Recurso relacionado com este documento" #: ../src/rdf.cpp:267 ../src/ui/dialog/inkscape-preferences.cpp:1925 msgid "Language:" -msgstr "Linguagem:" +msgstr "Língua:" #: ../src/rdf.cpp:268 msgid "A language of the resource" -msgstr "" +msgstr "Idioma do documento" #: ../src/rdf.cpp:270 -#, fuzzy msgid "Keywords:" -msgstr "Palavras chave" +msgstr "Palavras-chave:" #: ../src/rdf.cpp:271 msgid "The topic of the resource" -msgstr "" +msgstr "Palavras-chave principais que descrevam o documento" #. TRANSLATORS: "Coverage": the spatial or temporal characteristics of the content. #. For info, see Appendix D of http://www.w3.org/TR/1998/WD-rdf-schema-19980409/ #: ../src/rdf.cpp:275 -#, fuzzy msgid "Coverage:" msgstr "Cobertura:" @@ -13385,55 +12455,49 @@ msgid "" "The spatial or temporal topic of the resource, the spatial applicability of " "the resource, or the jurisdiction under which the resource is relevant" msgstr "" +"Características espaciais ou temporais: se o conteúdo do documento está " +"relacionado com determinado sítio geográfico a nível de coordenadas ou nome " +"do local e/ou a uma data ou intervalo de datas no tempo." #: ../src/rdf.cpp:279 -#, fuzzy msgid "Description:" -msgstr "Descrição" +msgstr "Descrição:" #: ../src/rdf.cpp:280 -#, fuzzy msgid "An account of the resource" -msgstr "Uma esplicação curta para o conteúdo deste desenho." +msgstr "Uma esplicação curta para o conteúdo deste documento" #. FIXME: need to handle 1 agent per line of input #: ../src/rdf.cpp:284 -#, fuzzy msgid "Contributors:" -msgstr "Contribuidores" +msgstr "Contribuidores:" #: ../src/rdf.cpp:285 -#, fuzzy msgid "An entity responsible for making contributions to the resource" -msgstr "" -"Nome das entidades responsáveis por contribuições ao conteúdo deste desenho." +msgstr "Nome das entidades que contribuiram para o documento" #. TRANSLATORS: URL to a page that defines the license for the document #: ../src/rdf.cpp:289 -#, fuzzy msgid "URI:" -msgstr "URL" +msgstr "URL:" #. TRANSLATORS: this is where you put a URL to a page that defines the license #: ../src/rdf.cpp:291 -#, fuzzy msgid "URI to this document's license's namespace definition" -msgstr "URL da definição de espaço de nome da licença deste desenho." +msgstr "URL da descrição da licença" #. TRANSLATORS: fragment of XML representing the license of the document #: ../src/rdf.cpp:295 -#, fuzzy msgid "Fragment:" -msgstr "Fragmento" +msgstr "Fragmento:" #: ../src/rdf.cpp:296 -#, fuzzy msgid "XML fragment for the RDF 'License' section" -msgstr "Fragmento XML para a seção 'Licença' RDF." +msgstr "Fragmento XML para a secção 'Licença' RDF" #: ../src/resource-manager.cpp:336 msgid "Fixup broken links" -msgstr "" +msgstr "Corrigir ligações quebradas" #: ../src/selection-chemistry.cpp:401 msgid "Delete text" @@ -13441,7 +12505,7 @@ msgstr "Eliminar texto" #: ../src/selection-chemistry.cpp:409 msgid "Nothing was deleted." -msgstr "Nada foi apagado." +msgstr "Nada foi eliminado." #: ../src/selection-chemistry.cpp:426 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:75 @@ -13455,12 +12519,12 @@ msgstr "Eliminar" #: ../src/selection-chemistry.cpp:454 msgid "Select object(s) to duplicate." -msgstr "Seleccione alguns objectos para duplicar." +msgstr "Selecionar objetos para duplicar." #: ../src/selection-chemistry.cpp:551 #, c-format msgid "%s copy" -msgstr "" +msgstr "%s cópia" #: ../src/selection-chemistry.cpp:574 msgid "Delete all" @@ -13468,36 +12532,32 @@ msgstr "Eliminar tudo" #: ../src/selection-chemistry.cpp:762 msgid "Select some objects to group." -msgstr "Seleccione dois ou mais objectos para agrupar." +msgstr "Selecionar alguns objetos para agrupar." #: ../src/selection-chemistry.cpp:775 -#, fuzzy msgctxt "Verb" msgid "Group" msgstr "Agrupar" #: ../src/selection-chemistry.cpp:798 -#, fuzzy msgid "No objects selected to pop out of group." -msgstr "Nenhum objecto seleccionado para obter o estilo." +msgstr "Nenhum objeto selecionado para destacar do grupo." #: ../src/selection-chemistry.cpp:808 -#, fuzzy msgid "Selection not in a group." -msgstr "Seleccione um grupo para desagrupar." +msgstr "A seleção não está num grupo." #: ../src/selection-chemistry.cpp:822 -#, fuzzy msgid "Pop selection from group" -msgstr "A selecção não possui efeito de caminho aplicado." +msgstr "Destacar a seleção do grupo" #: ../src/selection-chemistry.cpp:830 msgid "Select a group to ungroup." -msgstr "Seleccione um grupo para desagrupar." +msgstr "Selecionar um grupo para desagrupar." #: ../src/selection-chemistry.cpp:845 msgid "No groups to ungroup in the selection." -msgstr "Nenhum grupo para desagrupar na selecção." +msgstr "Nenhum grupo para desagrupar na seleção." #: ../src/selection-chemistry.cpp:901 ../src/sp-item-group.cpp:550 #: ../src/ui/dialog/objects.cpp:1916 @@ -13506,49 +12566,47 @@ msgstr "Desagrupar" #: ../src/selection-chemistry.cpp:988 msgid "Select object(s) to raise." -msgstr "Seleccione alguns objectos para levantar." +msgstr "Selecionar objetos para levantar." #: ../src/selection-chemistry.cpp:994 ../src/selection-chemistry.cpp:1047 #: ../src/selection-chemistry.cpp:1073 ../src/selection-chemistry.cpp:1131 msgid "" "You cannot raise/lower objects from different groups or layers." msgstr "" -"Você não pode levantar/baixar objectos de diferentes grupos ou camadas." +"Não se pode levantar/baixar objetos de diferentes grupos ou " +"camadas." #. TRANSLATORS: "Raise" means "to raise an object" in the undo history #: ../src/selection-chemistry.cpp:1031 -#, fuzzy msgctxt "Undo action" msgid "Raise" msgstr "Levantar" #: ../src/selection-chemistry.cpp:1039 msgid "Select object(s) to raise to top." -msgstr "Seleccione alguns objectos para levantar até o topo." +msgstr "Selecionar objetos para levantar até o topo." #: ../src/selection-chemistry.cpp:1060 msgid "Raise to top" -msgstr "Levantar até o Topo" +msgstr "Levantar até ao topo" #: ../src/selection-chemistry.cpp:1067 msgid "Select object(s) to lower." -msgstr "Seleccione alguns objectos para baixar." +msgstr "Selecionar objetos para baixar." #. TRANSLATORS: "Lower" means "to lower an object" in the undo history #: ../src/selection-chemistry.cpp:1115 -#, fuzzy msgctxt "Undo action" msgid "Lower" -msgstr "Abai_xar" +msgstr "Abaixar" #: ../src/selection-chemistry.cpp:1123 msgid "Select object(s) to lower to bottom." -msgstr "Seleccione alguns objectos para baixar até o fundo." +msgstr "Selecione os objetos para baixar até o fundo." #: ../src/selection-chemistry.cpp:1154 msgid "Lower to bottom" -msgstr "A_baixar até o Fundo" +msgstr "Abaixar até o fundo" #: ../src/selection-chemistry.cpp:1164 msgid "Nothing to undo." @@ -13568,22 +12626,20 @@ msgstr "Colar estilo" #: ../src/selection-chemistry.cpp:1265 msgid "Paste live path effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Colar efeitos no caminho em tempo real" #: ../src/selection-chemistry.cpp:1287 -#, fuzzy msgid "Select object(s) to remove live path effects from." -msgstr "Seleccione objecto(s) para colar caminhos de efeito ao vivo." +msgstr "" +"Selecionar os objetos para remover efeitos no caminho em tempo real." #: ../src/selection-chemistry.cpp:1299 -#, fuzzy msgid "Remove live path effect" -msgstr "Remover efeito de caminho" +msgstr "Remover efeitos no caminho em tempo real" #: ../src/selection-chemistry.cpp:1310 -#, fuzzy msgid "Select object(s) to remove filters from." -msgstr "Seleccione texto(s) para remover kerns." +msgstr "Selecionar os objetos para remover os filtros deles." #: ../src/selection-chemistry.cpp:1320 #: ../src/ui/dialog/filter-effects-dialog.cpp:1695 @@ -13600,11 +12656,11 @@ msgstr "Colar tamanho separadamente" #: ../src/selection-chemistry.cpp:1367 msgid "Select object(s) to move to the layer above." -msgstr "Seleccione objecto(s) para mover para a camada acima." +msgstr "Selecionar os objetos a mover para a camada acima." #: ../src/selection-chemistry.cpp:1393 msgid "Raise to next layer" -msgstr "Mover para a próxima camada" +msgstr "Subir para a próxima camada" #: ../src/selection-chemistry.cpp:1400 msgid "No more layers above." @@ -13612,72 +12668,68 @@ msgstr "Não há mais camadas acima." #: ../src/selection-chemistry.cpp:1411 msgid "Select object(s) to move to the layer below." -msgstr "Seleccione objecto(s) para mover para a camada abaixo." +msgstr "Selecionar objetos a mover para a camada abaixo." #: ../src/selection-chemistry.cpp:1437 msgid "Lower to previous layer" -msgstr "Mover para a camada anterior" +msgstr "Baixar para a camada anterior" #: ../src/selection-chemistry.cpp:1444 msgid "No more layers below." msgstr "Não há mais camadas abaixo." #: ../src/selection-chemistry.cpp:1454 -#, fuzzy msgid "Select object(s) to move." -msgstr "Seleccione alguns objectos para baixar." +msgstr "Selecionar os objetos a mover." #: ../src/selection-chemistry.cpp:1472 ../src/verbs.cpp:2658 -#, fuzzy msgid "Move selection to layer" -msgstr "Mo_ver selecção para a Camada Acima" +msgstr "Mover seleção para a camada" #. An SVG element cannot have a transform. We could change 'x' and 'y' in response #. to a translation... but leave that for another day. #: ../src/selection-chemistry.cpp:1561 ../src/seltrans.cpp:391 msgid "Cannot transform an embedded SVG." -msgstr "" +msgstr "Não é possível transformar um SVG embutido." #: ../src/selection-chemistry.cpp:1731 msgid "Remove transform" msgstr "Remover transformações" #: ../src/selection-chemistry.cpp:1838 -#, fuzzy msgid "Rotate 90° CCW" -msgstr "Girar 90° (sentido anti-horário)" +msgstr "Rodar 90° (sentido anti-horário)" #: ../src/selection-chemistry.cpp:1838 -#, fuzzy msgid "Rotate 90° CW" -msgstr "Girar 90° (sentido horário)" +msgstr "Rodar 90° (sentido horário)" #: ../src/selection-chemistry.cpp:1859 ../src/seltrans.cpp:484 #: ../src/ui/dialog/transformation.cpp:890 msgid "Rotate" -msgstr "Girar" +msgstr "Rodar" #: ../src/selection-chemistry.cpp:2208 msgid "Rotate by pixels" -msgstr "Girar por pixels" +msgstr "Rodar por píxeis" #: ../src/selection-chemistry.cpp:2238 ../src/seltrans.cpp:481 #: ../src/ui/dialog/transformation.cpp:864 ../src/ui/widget/page-sizer.cpp:450 #: ../share/extensions/interp_att_g.inx.h:14 msgid "Scale" -msgstr "Ampliar" +msgstr "Dimensionar" #: ../src/selection-chemistry.cpp:2263 msgid "Scale by whole factor" -msgstr "Escalar por um fator inteiro" +msgstr "Dimensionar por um fator inteiro" #: ../src/selection-chemistry.cpp:2278 msgid "Move vertically" -msgstr "Mover verticalmente" +msgstr "Mover na vertical" #: ../src/selection-chemistry.cpp:2281 msgid "Move horizontally" -msgstr "Mover horizontalmente" +msgstr "Mover na horizontal" #: ../src/selection-chemistry.cpp:2284 ../src/selection-chemistry.cpp:2310 #: ../src/seltrans.cpp:478 ../src/ui/dialog/transformation.cpp:801 @@ -13686,54 +12738,50 @@ msgstr "Mover" #: ../src/selection-chemistry.cpp:2304 msgid "Move vertically by pixels" -msgstr "Mover verticalmente em pixels" +msgstr "Mover verticalmente em píxeis" #: ../src/selection-chemistry.cpp:2307 msgid "Move horizontally by pixels" -msgstr "Mover horizontalmente em pixels" +msgstr "Mover horizontalmente em píxeis" #: ../src/selection-chemistry.cpp:2510 msgid "The selection has no applied path effect." -msgstr "A selecção não possui efeito de caminho aplicado." +msgstr "A seleção não tem nenhum efeito no caminho aplicado." #: ../src/selection-chemistry.cpp:2602 ../src/ui/dialog/clonetiler.cpp:2238 msgid "Select an object to clone." -msgstr "Seleccione um objecto para clonar." +msgstr "Selecionar um objeto para clonar." #: ../src/selection-chemistry.cpp:2637 -#, fuzzy msgctxt "Action" msgid "Clone" -msgstr "Clones" +msgstr "Clone" #: ../src/selection-chemistry.cpp:2651 -#, fuzzy msgid "Select clones to relink." -msgstr "Selecionar um clone para romper a ligação." +msgstr "Selecionar clones para religar." #: ../src/selection-chemistry.cpp:2658 -#, fuzzy msgid "Copy an object to clipboard to relink clones to." -msgstr "Seleccione um objecto para clonar." +msgstr "" +"Copiar um objeto para a área de transferência para o qual religar os " +"clones." #: ../src/selection-chemistry.cpp:2679 -#, fuzzy msgid "No clones to relink in the selection." -msgstr "Nenhum clone para romper a ligação na selecção." +msgstr "Nenhum clone a religar na seleção." #: ../src/selection-chemistry.cpp:2682 -#, fuzzy msgid "Relink clone" -msgstr "Desligar clone" +msgstr "Religar clone" #: ../src/selection-chemistry.cpp:2696 -#, fuzzy msgid "Select clones to unlink." -msgstr "Selecionar um clone para romper a ligação." +msgstr "Selecionar os clones para desligar." #: ../src/selection-chemistry.cpp:2749 msgid "No clones to unlink in the selection." -msgstr "Nenhum clone para romper a ligação na selecção." +msgstr "Nenhum clone para retirar a ligação na seleção." #: ../src/selection-chemistry.cpp:2753 msgid "Unlink clone" @@ -13745,125 +12793,117 @@ msgid "" "to go to its source. Select a text on path to go to the path. Select " "a flowed text to go to its frame." msgstr "" -"Selecionar um clone para ir para seu original. Seleccione uma " -"tipografia ligada para ir para sua fonte. Seleccione um texto em " -"caminho pra ir para o caminho. Seleccione uma caixa de texto para " -"ir à sua moldura." +"Selecionar um clone para ir para o seu original. Selecionar uma " +"deslocamento ligado para ir para a sua fonte. Selecionar um texto " +"fluido para ir para a sua moldura." #: ../src/selection-chemistry.cpp:2816 msgid "" "Cannot find the object to select (orphaned clone, offset, textpath, " "flowed text?)" msgstr "" -"Não foi encontrado o objecto para selecionar (clone órfão, tipografia " -"ou texto flutuante?)" +"Não foi possível encontrar o objeto para selecionar (clone órfão, " +"deslocamento, texto no caminho, texto fluido?)" #: ../src/selection-chemistry.cpp:2822 msgid "" "The object you're trying to select is not visible (it is in <" "defs>)" msgstr "" -"O objecto que está tentando selecionar não está visível (está no " -"<defs>)" +"O objeto que está a tentar selecionar não está visível (está em <" +"defs>)" #: ../src/selection-chemistry.cpp:2912 -#, fuzzy msgid "Select path(s) to fill." -msgstr "Seleccione algum caminho para simplificar." +msgstr "Selecionar caminhos para preencher." #: ../src/selection-chemistry.cpp:2930 msgid "Select object(s) to convert to marker." -msgstr "Seleccione um ou mais objectos para converter para marcador." +msgstr "Selecionar objetos para converter em marcador." #: ../src/selection-chemistry.cpp:3004 msgid "Objects to marker" -msgstr "Objectos para marcador" +msgstr "Objetos para marcador" #: ../src/selection-chemistry.cpp:3030 -#, fuzzy msgid "Select object(s) to convert to guides." -msgstr "Seleccione um ou mais objectos para converter para marcador." +msgstr "Selecionar objetos a converter em guias." #: ../src/selection-chemistry.cpp:3051 -#, fuzzy msgid "Objects to guides" -msgstr "Objectos para marcador" +msgstr "Objetos para guias" #: ../src/selection-chemistry.cpp:3087 -#, fuzzy msgid "Select objects to convert to symbol." -msgstr "Seleccione um ou mais objectos para converter para marcador." +msgstr "Selecionar objetos a converter em símbolo." #: ../src/selection-chemistry.cpp:3188 msgid "Group to symbol" -msgstr "" +msgstr "Grupo para símbolo" #: ../src/selection-chemistry.cpp:3207 -#, fuzzy msgid "Select a symbol to extract objects from." -msgstr "" -"Seleccione um objecto com padrão de preenchimento para extrair " -"objectos dele." +msgstr "Selecionar um objeto para extrair os objetos dele." #: ../src/selection-chemistry.cpp:3216 msgid "Select only one symbol in Symbol dialog to convert to group." msgstr "" +"Selecionar apenas 1 símbolo na janela de Símbolos para converter num " +"grupo." #: ../src/selection-chemistry.cpp:3272 msgid "Group from symbol" -msgstr "" +msgstr "Grupo do símbolo" #: ../src/selection-chemistry.cpp:3290 msgid "Select object(s) to convert to pattern." -msgstr "Seleccione um ou mais objectos para converter em padrão." +msgstr "Selecionar objetos para converter em padrão." #: ../src/selection-chemistry.cpp:3386 msgid "Objects to pattern" -msgstr "Objecto para padrão" +msgstr "Converter em padrão" #: ../src/selection-chemistry.cpp:3402 msgid "Select an object with pattern fill to extract objects from." msgstr "" -"Seleccione um objecto com padrão de preenchimento para extrair " -"objectos dele." +"Selecionar um objeto com padrão no preenchimento para extrair os " +"objetos dele." #: ../src/selection-chemistry.cpp:3461 msgid "No pattern fills in the selection." -msgstr "Nenhum preenchimento com padrões de preenchimento na selecção." +msgstr "Nenhum objeto selecionado tem padrão no preenchimento." #: ../src/selection-chemistry.cpp:3464 msgid "Pattern to objects" -msgstr "Padrão para objecto" +msgstr "Padrão para objetos" #: ../src/selection-chemistry.cpp:3550 msgid "Select object(s) to make a bitmap copy." -msgstr "Seleccione alguns objectos para levantar até o topo." +msgstr "Selecionar objetos para fazer uma cópia da imagem bitmap." #: ../src/selection-chemistry.cpp:3554 -#, fuzzy msgid "Rendering bitmap..." -msgstr "Revertendo caminhos..." +msgstr "A renderizar imagem bitmap..." #: ../src/selection-chemistry.cpp:3739 msgid "Create bitmap" -msgstr "Criar bitmap" +msgstr "Criar imagem bitmap" #: ../src/selection-chemistry.cpp:3764 ../src/selection-chemistry.cpp:3876 msgid "Select object(s) to create clippath or mask from." msgstr "" -"Seleccione o(s) objecto(s) para criar um clippath ou uma máscara a " -"partir dele(s)." +"Selecionar os objetos para criar um caminho recortado ou uma máscara " +"a partir deles." #: ../src/selection-chemistry.cpp:3850 ../src/ui/dialog/objects.cpp:1922 -#, fuzzy msgid "Create Clip Group" -msgstr "Criar Clo_ne" +msgstr "Criar Grupo de Caminhos Recortados" #: ../src/selection-chemistry.cpp:3879 msgid "Select mask object and object(s) to apply clippath or mask to." msgstr "" -"Seleccione objecto máscara e o(s) objecto(s) para onde será colado o " -"estilo." +"Selecionar o objeto máscara e os objetos para aplicar o recorte ou a " +"máscara." #: ../src/selection-chemistry.cpp:4026 msgid "Set clipping path" @@ -13875,32 +12915,34 @@ msgstr "Definir máscara" #: ../src/selection-chemistry.cpp:4043 msgid "Select object(s) to remove clippath or mask from." -msgstr "Seleccione o(s) objectos(s) para remover o(s) seu(s) estilo(s)." +msgstr "" +"Selecionar os objetos para remover o caminho recortado ou a máscara " +"deles." #: ../src/selection-chemistry.cpp:4159 msgid "Release clipping path" -msgstr "Soltar caminho recortado" +msgstr "Retirar caminho recortado" #: ../src/selection-chemistry.cpp:4161 msgid "Release mask" -msgstr "Reverter máscara" +msgstr "Retirar máscara" #: ../src/selection-chemistry.cpp:4180 msgid "Select object(s) to fit canvas to." -msgstr "Seleccione objecto(s) para encaixar ao canvas." +msgstr "Selecionar os objetos para encaixar na área de desenho." #. Fit Page #: ../src/selection-chemistry.cpp:4200 ../src/verbs.cpp:3004 msgid "Fit Page to Selection" -msgstr "Ajustar Ecrã à Seleção" +msgstr "Ajustar Página à Seleção" #: ../src/selection-chemistry.cpp:4229 ../src/verbs.cpp:3006 msgid "Fit Page to Drawing" -msgstr "Ajustar Ecrã ao Desenho" +msgstr "Ajustar Página ao Desenho" #: ../src/selection-chemistry.cpp:4250 msgid "Fit Page to Selection or Drawing" -msgstr "Ajustar Ecrã à Seleção ou ao Desenho" +msgstr "Ajustar Página à Seleção ou ao Desenho" #: ../src/selection-describer.cpp:138 msgid "root" @@ -13914,12 +12956,12 @@ msgstr "nenhum" #: ../src/selection-describer.cpp:152 #, c-format msgid "layer %s" -msgstr "na camada %s" +msgstr "camada %s" #: ../src/selection-describer.cpp:154 #, c-format msgid "layer %s" -msgstr "na camada %s" +msgstr "camada %s" #: ../src/selection-describer.cpp:165 #, c-format @@ -13929,95 +12971,93 @@ msgstr "%s" #: ../src/selection-describer.cpp:175 #, c-format msgid " in %s" -msgstr "·em·%s" +msgstr " na %s" #: ../src/selection-describer.cpp:177 -#, fuzzy msgid " hidden in definitions" -msgstr "Prevenir compartilhamento de definições de degradê" +msgstr " oculto nas definições" #: ../src/selection-describer.cpp:179 #, c-format msgid " in group %s (%s)" -msgstr "no grupo %s (%s)" +msgstr " no grupo %s (%s)" #: ../src/selection-describer.cpp:181 -#, fuzzy, c-format +#, c-format msgid " in unnamed group (%s)" -msgstr "no grupo %s (%s)" +msgstr " no grupo sem nome (%s)" #: ../src/selection-describer.cpp:183 -#, fuzzy, c-format +#, c-format msgid " in %i parent (%s)" msgid_plural " in %i parents (%s)" -msgstr[0] "em %i na camada pai (%s)" -msgstr[1] "em %i nas camadas-pai (%s)" +msgstr[0] "em %i camada-pai (%s)" +msgstr[1] "em %i camadas-pai (%s)" #: ../src/selection-describer.cpp:186 -#, fuzzy, c-format +#, c-format msgid " in %i layer" msgid_plural " in %i layers" -msgstr[0] "em %i camada" -msgstr[1] "em %i camadas" +msgstr[0] " em %i camada" +msgstr[1] " em %i camadas" #: ../src/selection-describer.cpp:198 -#, fuzzy msgid "Convert symbol to group to edit" -msgstr "Converter borda do objecto em caminho" +msgstr "Converter símbolo para grupo para poder editá-lo" #: ../src/selection-describer.cpp:202 msgid "Remove from symbols tray to edit symbol" -msgstr "" +msgstr "Remover da lista de símbolos para editar o símbolo" #: ../src/selection-describer.cpp:208 msgid "Use Shift+D to look up original" -msgstr "Use Shift+D para procurar original" +msgstr "Usar Shift+D para procurar o original" #: ../src/selection-describer.cpp:214 msgid "Use Shift+D to look up path" -msgstr "Use Shift+D para procurar caminho" +msgstr "Usar Shift+D para procurar o caminho" #: ../src/selection-describer.cpp:220 msgid "Use Shift+D to look up frame" -msgstr "Use Shift+D para procurar quadro" +msgstr "Usar Shift+D para procurar a moldura" #: ../src/selection-describer.cpp:236 -#, fuzzy, c-format +#, c-format msgid "%1$i objects selected of type %2$s" msgid_plural "%1$i objects selected of types %2$s" -msgstr[0] "%i objecto seleccionado" -msgstr[1] "%i objectos seleccionados" +msgstr[0] "%1$i objeto selecionado do tipo %2$s" +msgstr[1] "%1$i objetos selecionados do tipo %2$s" +# Esta mensagem aparece na linha de estado e pretende indicar que estão aplicados efeitos de Filtros - menu Filtros - nos objetos #: ../src/selection-describer.cpp:246 -#, fuzzy, c-format +#, c-format msgid "; %d filtered object " msgid_plural "; %d filtered objects " -msgstr[0] "%s; clipado" -msgstr[1] "%s; clipado" +msgstr[0] "; %d objeto filtrado " +msgstr[1] "; %d objetos com efeito de Filtro " #: ../src/seltrans-handles.cpp:9 msgid "" "Squeeze or stretch selection; with Ctrl to scale uniformly; " "with Shift to scale around rotation center" msgstr "" -"Espremer ou esticar a selecção; com Ctrl para dimensionar " -"uniformemente; com Shift para dimensionar em redor do centro de " -"rotação" +"Espremer ou esticar a seleção; com Ctrl para dimensionar em " +"proporção; com Shift para dimensionar em redor do centro de rotação" #: ../src/seltrans-handles.cpp:10 msgid "" "Scale selection; with Ctrl to scale uniformly; with Shift to scale around rotation center" msgstr "" -"Dimensionar a selecção; com Ctrl para dimensionar " -"uniformemente;com Shift para dimensionar em redor do centro de rotação" +"Dimensionar a seleção; com Ctrl para dimensionar em proporção; " +"com Shift para dimensionar em redor do centro de rotação" #: ../src/seltrans-handles.cpp:11 msgid "" "Skew selection; with Ctrl to snap angle; with Shift to " "skew around the opposite side" msgstr "" -"Enviesar a selecção; com Ctrl para segurar o ângulo; com " +"Inclinar a seleção; com Ctrl para segurar o ângulo; com " "Shift para enviesar em redor do canto oposto" #: ../src/seltrans-handles.cpp:12 @@ -14025,20 +13065,20 @@ msgid "" "Rotate selection; with Ctrl to snap angle; with Shift " "to rotate around the opposite corner" msgstr "" -"Girar a selecção; com Ctrl para agarrar o ângulo; com " -"Shift para girar em redor do canto oposto" +"Rodar a seleção; com Ctrl para atrair ao ângulo; com Shift para rodar em redor do canto oposto" #: ../src/seltrans-handles.cpp:13 msgid "" "Center of rotation and skewing: drag to reposition; scaling with " "Shift also uses this center" msgstr "" -"Centro de rotação e inclinação: arraste para reposicionar; " +"Centro de rotação e inclinação: arrastar para reposicionar; " "dimensionar com Shift também usa este centro" #: ../src/seltrans.cpp:487 ../src/ui/dialog/transformation.cpp:979 msgid "Skew" -msgstr "Enviesar" +msgstr "Inclinar" #: ../src/seltrans.cpp:501 msgid "Set center" @@ -14050,13 +13090,13 @@ msgstr "Carimbo" #: ../src/seltrans.cpp:723 msgid "Reset center" -msgstr "Redefinir centro" +msgstr "Repor centro" #: ../src/seltrans.cpp:961 ../src/seltrans.cpp:1065 #, c-format msgid "Scale: %0.2f%% x %0.2f%%; with Ctrl to lock ratio" msgstr "" -"Dimensionar: %0.2f%% x %0.2f%%; com Ctrl para Bloquear a " +"Dimensionar: %0.2f%% x %0.2f%%; com Ctrl para bloquear a " "proporção" #. TRANSLATORS: don't modify the first ";" @@ -14064,19 +13104,19 @@ msgstr "" #: ../src/seltrans.cpp:1202 #, c-format msgid "Skew: %0.2f°; with Ctrl to snap angle" -msgstr "Enviesamento: %0.2f°; com Ctrl para segurar o ângulo" +msgstr "Inclinar: %0.2f°; com Ctrl para atrair ao ângulo" #. TRANSLATORS: don't modify the first ";" #. (it will NOT be displayed as ";" - only the second one will be) #: ../src/seltrans.cpp:1278 #, c-format msgid "Rotate: %0.2f°; with Ctrl to snap angle" -msgstr "Girar: %0.2f°; com Ctrl para agarrar o ângulo" +msgstr "Rodar: %0.2f°; com Ctrl para atrair ao ângulo" #: ../src/seltrans.cpp:1315 #, c-format msgid "Move center to %s, %s" -msgstr "Move o centro para %s, %s" +msgstr "Mover o centro para %s, %s" #: ../src/seltrans.cpp:1461 #, c-format @@ -14085,42 +13125,38 @@ msgid "" "with Shift to disable snapping" msgstr "" "Mover por %s, %s; com Ctrl para restringir na horizontal/" -"vertical com Shift para desabilitar o agarramento" +"vertical com Shift para desativar a atração" #: ../src/shortcuts.cpp:226 -#, fuzzy, c-format +#, c-format msgid "Keyboard directory (%s) is unavailable." -msgstr "Diretório de paletas (%s) não está disponível." +msgstr "A pasta do teclado (%s) não está disponível." #: ../src/shortcuts.cpp:337 ../src/ui/dialog/export.cpp:1305 #: ../src/ui/dialog/export.cpp:1339 msgid "Select a filename for exporting" -msgstr "Seleccione um nome de ficheiro para exportar" +msgstr "Selecionar um nome de ficheiro para exportar" #: ../src/shortcuts.cpp:370 -#, fuzzy msgid "Select a file to import" -msgstr "Seleccione o ficheiro para importar" +msgstr "Selecionar um ficheiro a importar" #: ../src/sp-anchor.cpp:111 #, c-format msgid "to %s" -msgstr "" +msgstr "para %s" #: ../src/sp-anchor.cpp:115 -#, fuzzy msgid "without URI" -msgstr "Link sem URI" +msgstr "sem URL" #: ../src/sp-ellipse.cpp:362 -#, fuzzy msgid "Segment" -msgstr "Segmentos de _linha" +msgstr "Segmento" #: ../src/sp-ellipse.cpp:364 -#, fuzzy msgid "Arc" -msgstr "Origem X" +msgstr "Arco" #. Ellipse #: ../src/sp-ellipse.cpp:367 ../src/sp-ellipse.cpp:374 @@ -14135,7 +13171,6 @@ msgstr "Círculo" #. TRANSLATORS: "Flow region" is an area where text is allowed to flow #: ../src/sp-flowregion.cpp:181 -#, fuzzy msgid "Flow Region" msgstr "Região Fluida" @@ -14144,152 +13179,143 @@ msgstr "Região Fluida" #. * http://www.w3.org/TR/2004/WD-SVG12-20041027/flow.html#flowRegion-elem and #. * http://www.w3.org/TR/2004/WD-SVG12-20041027/flow.html#flowRegionExclude-elem. #: ../src/sp-flowregion.cpp:334 -#, fuzzy msgid "Flow Excluded Region" -msgstr "Fluir região excluida" +msgstr "Região Fluida Excluida" #: ../src/sp-flowtext.cpp:284 -#, fuzzy msgid "Flowed Text" -msgstr "Texto fluído" +msgstr "Texto Fluido" #: ../src/sp-flowtext.cpp:286 -#, fuzzy msgid "Linked Flowed Text" -msgstr "Texto fluído" +msgstr "Texto Fluido Ligado" #: ../src/sp-flowtext.cpp:292 ../src/sp-text.cpp:380 #: ../src/ui/tools/text-tool.cpp:1556 -#, fuzzy msgid " [truncated]" -msgstr "[Inalterado]" +msgstr " [truncado]" #: ../src/sp-flowtext.cpp:294 -#, fuzzy, c-format +#, c-format msgid "(%d character%s)" msgid_plural "(%d characters%s)" -msgstr[0] "Inserir caractere Unicode" -msgstr[1] "Inserir caractere Unicode" +msgstr[0] "(%d caractere%s)" +msgstr[1] "(%d caracteres%s)" -#: ../src/sp-guide.cpp:261 +#: ../src/sp-guide.cpp:262 msgid "Create Guides Around the Page" -msgstr "" +msgstr "Criar Guias à Volta da Página" -#: ../src/sp-guide.cpp:274 ../src/verbs.cpp:2544 -#, fuzzy +#: ../src/sp-guide.cpp:275 ../src/verbs.cpp:2544 msgid "Delete All Guides" -msgstr "Eliminar guia" +msgstr "Eliminar Todas as Guias" #. Guide has probably been deleted and no longer has an attached namedview. -#: ../src/sp-guide.cpp:485 -#, fuzzy +#: ../src/sp-guide.cpp:486 msgid "Deleted" -msgstr "Eliminar" +msgstr "Eliminado" -#: ../src/sp-guide.cpp:494 -#, fuzzy +#: ../src/sp-guide.cpp:495 msgid "" "Shift+drag to rotate, Ctrl+drag to move origin, Del to " "delete" msgstr "" -"Arraste para criar uma elipse. Arraste as alças para fazer um " -"arco ou segmento. Clique para selecionar." +"Shift+arrastar para rodar, Ctrl+arrastar para mover a origem, " +"Del para eliminar" -#: ../src/sp-guide.cpp:498 -#, fuzzy, c-format +#: ../src/sp-guide.cpp:499 +#, c-format msgid "vertical, at %s" -msgstr "linha guia vertical" +msgstr "vertical, a %s" -#: ../src/sp-guide.cpp:501 -#, fuzzy, c-format +#: ../src/sp-guide.cpp:502 +#, c-format msgid "horizontal, at %s" -msgstr "linha guia horizontal" +msgstr "horizontal, a %s" -#: ../src/sp-guide.cpp:506 +#: ../src/sp-guide.cpp:507 #, c-format msgid "at %d degrees, through (%s,%s)" -msgstr "" +msgstr "a %d graus, atravessada (%s,%s)" #: ../src/sp-image.cpp:517 msgid "embedded" msgstr "embutido" #: ../src/sp-image.cpp:525 -#, fuzzy, c-format +#, c-format msgid "[bad reference]: %s" -msgstr "Propriedades de Estrelas" +msgstr "[referência errada]: %s" +# × Ã© o código HTML do símbolo de multiplicação #: ../src/sp-image.cpp:526 -#, fuzzy, c-format +#, c-format msgid "%d × %d: %s" -msgstr "Imagem %d × %d: %s" +msgstr "%d × %d: %s" #: ../src/sp-item-group.cpp:307 ../src/ui/dialog/objects.cpp:1915 msgid "Group" msgstr "Agrupar" #: ../src/sp-item-group.cpp:313 ../src/sp-switch.cpp:69 -#, fuzzy, c-format +#, c-format msgid "of %d object" -msgstr "Grupo de %d objectos" +msgstr "de %d objeto" #: ../src/sp-item-group.cpp:313 ../src/sp-switch.cpp:69 -#, fuzzy, c-format +#, c-format msgid "of %d objects" -msgstr "Grupo de %d objectos" +msgstr "de %d objetos" #: ../src/sp-item.cpp:1031 ../src/verbs.cpp:213 msgid "Object" -msgstr "Objecto" +msgstr "Objeto" #: ../src/sp-item.cpp:1043 #, c-format msgid "%s; clipped" -msgstr "%s; clipado" +msgstr "%s; com recorte" #: ../src/sp-item.cpp:1049 #, c-format msgid "%s; masked" -msgstr "%s; mascarado" +msgstr "%s; com máscara" #: ../src/sp-item.cpp:1059 -#, fuzzy, c-format +#, c-format msgid "%s; filtered (%s)" -msgstr "%s; clipado" +msgstr "%s; com efeito de filtro (%s)" #: ../src/sp-item.cpp:1061 -#, fuzzy, c-format +#, c-format msgid "%s; filtered" -msgstr "%s; clipado" +msgstr "%s; filtrado" #: ../src/sp-line.cpp:113 msgid "Line" msgstr "Linha" #: ../src/sp-lpe-item.cpp:258 ../src/sp-lpe-item.cpp:705 -#, fuzzy msgid "An exception occurred during execution of the Path Effect." -msgstr "Uma exceção ocorreu durante a execução de um Efeito de Caminho." +msgstr "Ocorreu um erro ao executar o Efeito do Caminho." #: ../src/sp-offset.cpp:331 -#, fuzzy msgid "Linked Offset" -msgstr "Tipografia _Ligada" +msgstr "Deslocamento Ligado ao Original" #: ../src/sp-offset.cpp:333 -#, fuzzy msgid "Dynamic Offset" -msgstr "Tipografia D_inâmica" +msgstr "Deslocamento Dinâmico" #. TRANSLATORS COMMENT: %s is either "outset" or "inset" depending on sign #: ../src/sp-offset.cpp:339 #, c-format msgid "%s by %f pt" -msgstr "" +msgstr "%s por %f pt" #: ../src/sp-offset.cpp:340 msgid "outset" -msgstr "recuar" +msgstr "expandir" #: ../src/sp-offset.cpp:340 msgid "inset" @@ -14299,20 +13325,21 @@ msgstr "comprimir" msgid "Path" msgstr "Caminho" +# foi adicionado itálico e alterado para manter coerência com a mensagem semelhante dos efeitos de Filtros (procurar expressão "; com efeito de filtro"), desta forma também se torna mais legível na barra de estado - Ass.: Rui, 2016-7-21 #: ../src/sp-path.cpp:84 -#, fuzzy, c-format +#, c-format msgid ", path effect: %s" -msgstr "Colar efeito de caminho ao vivo" +msgstr ", com efeito em tempo real (%s)," #: ../src/sp-path.cpp:87 -#, fuzzy, c-format +#, c-format msgid "%i node%s" -msgstr "Juntar nós" +msgstr "%i nó%s" #: ../src/sp-path.cpp:87 -#, fuzzy, c-format +#, c-format msgid "%i nodes%s" -msgstr "Juntar nós" +msgstr "%i nós%s" #: ../src/sp-polygon.cpp:172 msgid "Polygon" @@ -14320,7 +13347,7 @@ msgstr "Polígono" #: ../src/sp-polyline.cpp:121 msgid "Polyline" -msgstr "MultiLinha" +msgstr "Polilinha" #. Rectangle #: ../src/sp-rect.cpp:161 ../src/ui/dialog/inkscape-preferences.cpp:411 @@ -14336,15 +13363,15 @@ msgstr "Espiral" #. TRANSLATORS: since turn count isn't an integer, please adjust the #. string as needed to deal with an localized plural forms. #: ../src/sp-spiral.cpp:226 -#, fuzzy, c-format +#, c-format msgid "with %3f turns" -msgstr "Espiral com %3f curvas" +msgstr "com %3f voltas" #. Star #: ../src/sp-star.cpp:247 ../src/ui/dialog/inkscape-preferences.cpp:425 #: ../src/widgets/star-toolbar.cpp:469 msgid "Star" -msgstr "Estrela" +msgstr "Polígono e Estrela" #: ../src/sp-star.cpp:248 ../src/widgets/star-toolbar.cpp:462 msgid "Polygon" @@ -14354,18 +13381,18 @@ msgstr "Polígono" #. make calls to ngettext because the pluralization may be different #. for various numbers >=3. The singular form is used as the index. #: ../src/sp-star.cpp:255 -#, fuzzy, c-format +#, c-format msgid "with %d vertex" -msgstr "Estrela de %d vértice" +msgstr "com %d vértice" #: ../src/sp-star.cpp:255 -#, fuzzy, c-format +#, c-format msgid "with %d vertices" -msgstr "Estrela de %d vértice" +msgstr "com %d vértices" #: ../src/sp-switch.cpp:63 msgid "Conditional Group" -msgstr "" +msgstr "Grupo Condicional" #: ../src/sp-text.cpp:361 ../src/verbs.cpp:347 #: ../share/extensions/lorem_ipsum.inx.h:8 @@ -14383,51 +13410,47 @@ msgid "Text" msgstr "Texto" #: ../src/sp-text.cpp:384 -#, fuzzy, c-format +#, c-format msgid "on path%s (%s, %s)" -msgstr "Text no caminho (%s, %s)" +msgstr "no caminho%s (%s, %s)" #: ../src/sp-text.cpp:385 -#, fuzzy, c-format +#, c-format msgid "%s (%s, %s)" -msgstr "Texto (%s, %s)" +msgstr "%s (%s, %s)" #: ../src/sp-tref.cpp:218 -#, fuzzy msgid "Cloned Character Data" -msgstr "Clone de %s" +msgstr "Dados de Caracteres Clonados" #: ../src/sp-tref.cpp:234 msgid " from " -msgstr "" +msgstr " de " #: ../src/sp-tref.cpp:240 ../src/sp-use.cpp:271 msgid "[orphaned]" -msgstr "" +msgstr "[orfão]" #: ../src/sp-tspan.cpp:217 -#, fuzzy msgid "Text Span" -msgstr "Entrada de Texto" +msgstr "Espaço de Texto" #: ../src/sp-use.cpp:234 msgid "Symbol" -msgstr "" +msgstr "Símbolo" #: ../src/sp-use.cpp:236 -#, fuzzy msgid "Clone" -msgstr "Clones" +msgstr "Clone" #: ../src/sp-use.cpp:244 ../src/sp-use.cpp:246 ../src/sp-use.cpp:248 #, c-format msgid "called %s" -msgstr "" +msgstr "como o nome %s" #: ../src/sp-use.cpp:248 -#, fuzzy msgid "Unnamed Symbol" -msgstr "Não nomeado" +msgstr "Símbolo sem Nome" #. TRANSLATORS: Used for statusbar description for long chains: #. * "Clone of: Clone of: ... in Layer 1". @@ -14436,9 +13459,9 @@ msgid "..." msgstr "..." #: ../src/sp-use.cpp:266 -#, fuzzy, c-format +#, c-format msgid "of: %s" -msgstr "Erros" +msgstr "de: %s" #: ../src/splivarot.cpp:71 ../src/splivarot.cpp:77 msgid "Union" @@ -14459,58 +13482,58 @@ msgstr "Cortar Caminho" #: ../src/splivarot.cpp:342 msgid "Select at least 2 paths to perform a boolean operation." msgstr "" -"Seleccione pelo menos dois caminhos para fazer uma operação booleana." +"Selecionar pelo menos 2 caminhos para fazer uma operação booleana." #: ../src/splivarot.cpp:346 msgid "Select at least 1 path to perform a boolean union." -msgstr "" -"Seleccione pelo menos dois caminhos para fazer uma operação booleana." +msgstr "Selecionar pelo menos 1 caminho para fazer uma união booleana." #: ../src/splivarot.cpp:363 ../src/splivarot.cpp:378 msgid "" "Unable to determine the z-order of the objects selected for " "difference, XOR, division, or path cut." msgstr "" -"Incapaz de determinar a ordem-z dos objectos seleccionados para " -"diferença,ou-exclusivo, divisão ou corte de caminho." +"Incapaz de determinar a ordem Z dos objetos selecionados para " +"diferença, ou-exclusivo (XOR), divisão ou corte de caminho." #: ../src/splivarot.cpp:408 msgid "" "One of the objects is not a path, cannot perform boolean operation." msgstr "" -"Um dos objectos não é um caminho, a operação booleana não pode ser " +"Um dos objetos não é um caminho, a operação booleana não pode ser " "executada." #: ../src/splivarot.cpp:1153 msgid "Select stroked path(s) to convert stroke to path." -msgstr "Seleccione algum(ns) objecto(s) para converter para um caminho." +msgstr "" +"Selecionar caminhos com traço para converter o traço num caminho." #: ../src/splivarot.cpp:1511 msgid "Convert stroke to path" -msgstr "Converter borda do objecto em caminho" +msgstr "Converter traço num caminho" #. TRANSLATORS: "to outline" means "to convert stroke to path" #: ../src/splivarot.cpp:1514 msgid "No stroked paths in the selection." -msgstr "Nenhum caminho com traço para contornar na selecção." +msgstr "Nenhum caminho com traço na seleção." #: ../src/splivarot.cpp:1585 msgid "Selected object is not a path, cannot inset/outset." msgstr "" -"O objecto seleccionado não é um caminho. Não é possível comprimir/" -"expandir" +"O objeto selecionado não é um caminho. Não é possível comprimir/" +"expandir." #: ../src/splivarot.cpp:1676 ../src/splivarot.cpp:1743 msgid "Create linked offset" -msgstr "Criar ligação offset" +msgstr "Criar deslocamento ligado ao original" #: ../src/splivarot.cpp:1677 ../src/splivarot.cpp:1744 msgid "Create dynamic offset" -msgstr "Criar um objecto offset dinâmico" +msgstr "Criar deslocamento dinâmico" #: ../src/splivarot.cpp:1769 msgid "Select path(s) to inset/outset." -msgstr "Seleccione algum caminho para comprimir/expandir" +msgstr "Selecionar caminhos para comprimir/expandir" #: ../src/splivarot.cpp:1965 msgid "Outset path" @@ -14522,7 +13545,7 @@ msgstr "Caminho para dentro" #: ../src/splivarot.cpp:1967 msgid "No paths to inset/outset in the selection." -msgstr "Nenhum camimho para comprimir/expandir na selecção" +msgstr "Nenhum caminho para comprimir/expandir na seleção." #: ../src/splivarot.cpp:2129 msgid "Simplifying paths (separately):" @@ -14544,23 +13567,23 @@ msgstr "%d caminhos simplificados." #: ../src/splivarot.cpp:2195 msgid "Select path(s) to simplify." -msgstr "Seleccione algum caminho para simplificar." +msgstr "Selecionar caminhos para simplificar." #: ../src/splivarot.cpp:2211 msgid "No paths to simplify in the selection." -msgstr "Nenhum caminho para simplificar na selecção." +msgstr "Nenhum caminho para simplificar na seleção." #: ../src/text-chemistry.cpp:91 msgid "Select a text and a path to put text on path." -msgstr "Seleccione um texto e um caminho para por o texto no camiho." +msgstr "Selecionar um texto e um caminho para pôr o texto no camiho." #: ../src/text-chemistry.cpp:96 msgid "" "This text object is already put on a path. Remove it from the path " "first. Use Shift+D to look up its path." msgstr "" -"Este objecto de texto já foi posto no caminho. Remova-o do caminho " -"primeiro. Use Shift+D para espiar seu caminho." +"Este objeto de texto já foi posto num caminho. Remova-o do caminho " +"primeiro. Usar Shift+D para localizar o caminho." #. rect is the only SPShape which is not yet, and thus SVG forbids us from putting text on it #: ../src/text-chemistry.cpp:102 @@ -14568,14 +13591,14 @@ msgid "" "You cannot put text on a rectangle in this version. Convert rectangle to " "path first." msgstr "" -"Você não pode colocar texto em um retângulo nesta versão. Converta-o em " -"caminho primeiro." +"Não pode colocar texto num retângulo nesta versão. Converta-o primeiro num " +"caminho." #: ../src/text-chemistry.cpp:112 msgid "The flowed text(s) must be visible in order to be put on a path." msgstr "" -"O(s) texto(s) fluido(s) precisa(am) estar visível(eis) para ser(em) " -"colocado(s) no caminho." +"Os textos fluidos têm de ser visíveis para serem colocados num " +"caminho." #: ../src/text-chemistry.cpp:182 ../src/verbs.cpp:2569 msgid "Put text on path" @@ -14583,11 +13606,11 @@ msgstr "Colocar texto no caminho" #: ../src/text-chemistry.cpp:194 msgid "Select a text on path to remove it from path." -msgstr "Seleccione um texto no caminhopara removê-lo do caminho." +msgstr "Selecionar um texto no caminho para removê-lo do caminho." #: ../src/text-chemistry.cpp:213 msgid "No texts-on-paths in the selection." -msgstr "Nenhum texto-no-caminho na selecção." +msgstr "Nenhum texto em caminhos na seleção." #: ../src/text-chemistry.cpp:216 ../src/verbs.cpp:2571 msgid "Remove text from path" @@ -14595,35 +13618,35 @@ msgstr "Remover texto do caminho" #: ../src/text-chemistry.cpp:257 ../src/text-chemistry.cpp:277 msgid "Select text(s) to remove kerns from." -msgstr "Seleccione texto(s) para remover kerns." +msgstr "Selecionar textos para remover entre-linhas." #: ../src/text-chemistry.cpp:280 msgid "Remove manual kerns" -msgstr "Remover kerns manuais" +msgstr "Remover entre-letras manuais" #: ../src/text-chemistry.cpp:300 msgid "" "Select a text and one or more paths or shapes to flow text " "into frame." msgstr "" -"Seleccione um texto e um ou mais caminhos para fluir texto no " -"quadro." +"Selecionar um texto e um ou mais caminhos ou formas geométricas para fluir texto na moldura." #: ../src/text-chemistry.cpp:369 msgid "Flow text into shape" -msgstr "Fluir texto em forma" +msgstr "Fluir texto na forma geométrica" #: ../src/text-chemistry.cpp:391 msgid "Select a flowed text to unflow it." -msgstr "Seleccione um texto fluido para destacá-lo." +msgstr "Selecionar um texto fluido para desflui-lo." #: ../src/text-chemistry.cpp:464 msgid "Unflow flowed text" -msgstr "Destacar texto fluido" +msgstr "Desfluir texto fluido" #: ../src/text-chemistry.cpp:476 msgid "Select flowed text(s) to convert." -msgstr "Seleccione texto(s) fluido(s) para converter." +msgstr "Selecionar textos fluidos para converter." #: ../src/text-chemistry.cpp:494 msgid "The flowed text(s) must be visible in order to be converted." @@ -14635,36 +13658,35 @@ msgstr "Converter texto fluido em texto" #: ../src/text-chemistry.cpp:526 msgid "No flowed text(s) to convert in the selection." -msgstr "Nenhum texto fluido para converter na selecção." +msgstr "Nenhuns textos fluidos para converter na seleção." #: ../src/text-editing.cpp:44 msgid "You cannot edit cloned character data." -msgstr "" +msgstr "Não pode editar dados de caracteres clonados." #: ../src/trace/potrace/inkscape-potrace.cpp:511 #: ../src/trace/potrace/inkscape-potrace.cpp:574 -#, fuzzy msgid "Trace: %1. %2 nodes" -msgstr "Vectorizar: %d. %ld nós" +msgstr "Vetorizar: %1. %2 nós" #: ../src/trace/trace.cpp:59 ../src/trace/trace.cpp:124 #: ../src/trace/trace.cpp:132 ../src/trace/trace.cpp:225 #: ../src/ui/dialog/pixelartdialog.cpp:370 #: ../src/ui/dialog/pixelartdialog.cpp:402 msgid "Select an image to trace" -msgstr "Seleccione uma imagem para vectorizar" +msgstr "Selecionar uma imagem para vetorizar" #: ../src/trace/trace.cpp:94 msgid "Select only one image to trace" -msgstr "Seleccione uma única imagem para vectorizar" +msgstr "Selecionar apenas 1 imagem para vetorizar" #: ../src/trace/trace.cpp:112 msgid "Select one image and one or more shapes above it" -msgstr "Seleccione uma imagem e uma ou mais formas acima dela" +msgstr "Selecionar 1 imagem e 1 ou mais formas geométricas acima dela" #: ../src/trace/trace.cpp:216 msgid "Trace: No active desktop" -msgstr "Vectorizar: Nenhum desenho ativo" +msgstr "Vetorizar: nenhum desenho ativo" #: ../src/trace/trace.cpp:314 msgid "Invalid SIOX result" @@ -14672,30 +13694,30 @@ msgstr "Resultado SIOX inválido" #: ../src/trace/trace.cpp:407 msgid "Trace: No active document" -msgstr "Vectorizar: Nenhum desenho ativo." +msgstr "Vetorizar: nenhum documento ativo." #: ../src/trace/trace.cpp:439 msgid "Trace: Image has no bitmap data" -msgstr "Vectorizar: A imagem não tem dados de figura." +msgstr "Vetorizar: a imagem não tem dados de píxeis" #: ../src/trace/trace.cpp:446 msgid "Trace: Starting trace..." -msgstr "Vectorizar: iniciando..." +msgstr "Vetorizar: a iniciar..." #. ## inform the document, so we can undo #: ../src/trace/trace.cpp:549 msgid "Trace bitmap" -msgstr "Vectorizar bitmap" +msgstr "Vetorizar imagem bitmap" #: ../src/trace/trace.cpp:553 #, c-format msgid "Trace: Done. %ld nodes created" -msgstr "Traçado: Terminado. %ld nós criados" +msgstr "Vetorizar: Terminado. %ld nós criados" #. check whether something is selected #: ../src/ui/clipboard.cpp:261 msgid "Nothing was copied." -msgstr "Nada foi copiado." +msgstr "Não foi copiado nada." #: ../src/ui/clipboard.cpp:392 ../src/ui/clipboard.cpp:606 #: ../src/ui/clipboard.cpp:635 @@ -14704,31 +13726,30 @@ msgstr "Nada na área de transferência." #: ../src/ui/clipboard.cpp:450 msgid "Select object(s) to paste style to." -msgstr "Seleccione os objectos para onde será colado o estilo." +msgstr "Selecionar os objetos nos quais será colado o estilo." #: ../src/ui/clipboard.cpp:461 ../src/ui/clipboard.cpp:478 -#, fuzzy msgid "No style on the clipboard." -msgstr "Nada na área de transferência." +msgstr "Nenhum estilo na área de transferência." #: ../src/ui/clipboard.cpp:503 msgid "Select object(s) to paste size to." -msgstr "Seleccione o(s) objecto(s) para onde será colado o tamanho." +msgstr "Selecionar os objetos nos quais será colado o tamanho." #: ../src/ui/clipboard.cpp:510 -#, fuzzy msgid "No size on the clipboard." -msgstr "Nada na área de transferência." +msgstr "Nenhum tamanho na área de transferência." #: ../src/ui/clipboard.cpp:567 msgid "Select object(s) to paste live path effect to." -msgstr "Seleccione objecto(s) para colar caminhos de efeito ao vivo." +msgstr "" +"Selecionar os objetos nos quais será colado o efeito no caminho em " +"tempo real." #. no_effect: #: ../src/ui/clipboard.cpp:593 -#, fuzzy msgid "No effect on the clipboard." -msgstr "Nada na área de transferência." +msgstr "Nenhum efeito na área de transferência." #: ../src/ui/clipboard.cpp:612 ../src/ui/clipboard.cpp:649 msgid "Clipboard does not contain a path." @@ -14743,7 +13764,7 @@ msgstr "Sobre o Inkscape" #: ../src/ui/dialog/aboutbox.cpp:91 msgid "_Splash" -msgstr "_Splash" +msgstr "_Início" #: ../src/ui/dialog/aboutbox.cpp:95 msgid "_Authors" @@ -14777,6 +13798,8 @@ msgstr "about.svg" #: ../src/ui/dialog/aboutbox.cpp:438 msgid "translator-credits" msgstr "" +"Do original em Português do Brasil por:\n" +"Comunidade InkscapeBrasil.org, 2007\n" "Aurélio A. Heckert\n" "Fábio Sousa\n" "Frederico G. Guimarães\n" @@ -14785,7 +13808,14 @@ msgstr "" "Thiago Pimentel\n" "Vilson Vieira\n" "Victor Westmann\n" -"Comunidade InkscapeBrasil.org, 2007." +"Juarez Rudsatz (juarez@correio.com), 2004.\n" +"Antônio Cláudio (LedStyle) (ledstyle@gmail.com), 2006.\n" +"\n" +"Traduzido do original em Português do Brasil e em Inglês para Português " +"Europeu por:\n" +"Luis Duarte (luis_asd@sapo.pt), 2008, 2016.\n" +"Rui Cruz (xande6ruz@yandex.com), 2016.\n" +"Tiago Santos (tiagofsantos81@sapo.pt), 2016." #: ../src/ui/dialog/align-and-distribute.cpp:206 #: ../src/ui/dialog/align-and-distribute.cpp:937 @@ -14803,10 +13833,9 @@ msgstr "Distância horizontal mínima (em px) entre caixas limitadoras" #. TRANSLATORS: "H:" stands for horizontal gap #: ../src/ui/dialog/align-and-distribute.cpp:463 -#, fuzzy msgctxt "Gap" msgid "_H:" -msgstr "_H" +msgstr "_H:" #: ../src/ui/dialog/align-and-distribute.cpp:471 msgid "Minimum vertical gap (in px units) between bounding boxes" @@ -14814,10 +13843,9 @@ msgstr "Distância vertical mínima (em px) entre caixas limitadoras" #. TRANSLATORS: Vertical gap #: ../src/ui/dialog/align-and-distribute.cpp:473 -#, fuzzy msgctxt "Gap" msgid "_V:" -msgstr "V:" +msgstr "_V:" #: ../src/ui/dialog/align-and-distribute.cpp:508 #: ../src/ui/dialog/align-and-distribute.cpp:940 @@ -14828,16 +13856,15 @@ msgstr "Remover sobreposições" #: ../src/ui/dialog/align-and-distribute.cpp:539 #: ../src/widgets/connector-toolbar.cpp:234 msgid "Arrange connector network" -msgstr "Organizar a rede dos conectores" +msgstr "Organizar a rede dos conetores" #: ../src/ui/dialog/align-and-distribute.cpp:632 -#, fuzzy msgid "Exchange Positions" -msgstr "Posições aleatórias" +msgstr "Trocar Posições" #: ../src/ui/dialog/align-and-distribute.cpp:666 msgid "Unclump" -msgstr "Desagrupar " +msgstr "Desempilhar" #: ../src/ui/dialog/align-and-distribute.cpp:737 msgid "Randomize positions" @@ -14852,9 +13879,8 @@ msgid "Align text baselines" msgstr "Alinhar linhas base do texto" #: ../src/ui/dialog/align-and-distribute.cpp:939 -#, fuzzy msgid "Rearrange" -msgstr "Ângulo" +msgstr "Reorganizar" #: ../src/ui/dialog/align-and-distribute.cpp:941 #: ../src/widgets/toolbox.cpp:1796 @@ -14867,27 +13893,24 @@ msgid "Relative to: " msgstr "Relativo a: " #: ../src/ui/dialog/align-and-distribute.cpp:957 -#, fuzzy msgid "_Treat selection as group: " -msgstr "A selecção não possui efeito de caminho aplicado." +msgstr "_Usar objetos selecionados como um só: " #. Align #: ../src/ui/dialog/align-and-distribute.cpp:963 ../src/verbs.cpp:3036 #: ../src/verbs.cpp:3037 -#, fuzzy msgid "Align right edges of objects to the left edge of the anchor" -msgstr "Lado direito dos objectos alinhados para o lado esquerdo da âncora" +msgstr "Alinhar lados direitos dos objetos ao lado esquerdo da âncora" #: ../src/ui/dialog/align-and-distribute.cpp:966 ../src/verbs.cpp:3038 #: ../src/verbs.cpp:3039 -#, fuzzy msgid "Align left edges" msgstr "Alinhar lados esquerdos" #: ../src/ui/dialog/align-and-distribute.cpp:969 ../src/verbs.cpp:3040 #: ../src/verbs.cpp:3041 msgid "Center on vertical axis" -msgstr "Centralizar verticalmente" +msgstr "Centrar no eixo vertical" #: ../src/ui/dialog/align-and-distribute.cpp:972 ../src/verbs.cpp:3042 #: ../src/verbs.cpp:3043 @@ -14896,205 +13919,182 @@ msgstr "Alinhar lados direitos" #: ../src/ui/dialog/align-and-distribute.cpp:975 ../src/verbs.cpp:3044 #: ../src/verbs.cpp:3045 -#, fuzzy msgid "Align left edges of objects to the right edge of the anchor" -msgstr "Lado esquerdo dos objectos alinhados para o lado direito da âncora" +msgstr "Alinhar lados esquerdos dos objetos ao lado direito da âncora" #: ../src/ui/dialog/align-and-distribute.cpp:978 ../src/verbs.cpp:3046 #: ../src/verbs.cpp:3047 -#, fuzzy msgid "Align bottom edges of objects to the top edge of the anchor" -msgstr "Lado inferior dos objectos alinhados para o topo da âncora" +msgstr "Alinhar lados inferiores dos objetos ao lado superior da âncora" #: ../src/ui/dialog/align-and-distribute.cpp:981 ../src/verbs.cpp:3048 #: ../src/verbs.cpp:3049 -#, fuzzy msgid "Align top edges" msgstr "Alinhar lados superiores" #: ../src/ui/dialog/align-and-distribute.cpp:984 ../src/verbs.cpp:3050 #: ../src/verbs.cpp:3051 msgid "Center on horizontal axis" -msgstr "Centralizar horizontalmente" +msgstr "Centrar no eixo horizontal" #: ../src/ui/dialog/align-and-distribute.cpp:987 ../src/verbs.cpp:3052 #: ../src/verbs.cpp:3053 -#, fuzzy msgid "Align bottom edges" msgstr "Alinhar lados inferiores" #: ../src/ui/dialog/align-and-distribute.cpp:990 ../src/verbs.cpp:3054 #: ../src/verbs.cpp:3055 -#, fuzzy msgid "Align top edges of objects to the bottom edge of the anchor" -msgstr "Topo dos objectos alinhados para o lado inferior da âncora" +msgstr "Alinhar lados superiores dos objetos ao lado inferior da âncora" #: ../src/ui/dialog/align-and-distribute.cpp:995 msgid "Align baseline anchors of texts horizontally" msgstr "Alinhar âncoras base dos textos horizontalmente" #: ../src/ui/dialog/align-and-distribute.cpp:998 -#, fuzzy msgid "Align baselines of texts" -msgstr "Alinhar âncoras base dos textos verticalmente" +msgstr "Alinhar linhas base dos textos" #: ../src/ui/dialog/align-and-distribute.cpp:1003 msgid "Make horizontal gaps between objects equal" -msgstr "Distribuir a distância horizontal igualmente entre os objectos" +msgstr "Tornar iguais os espaços entre os objetos na horizontal" #: ../src/ui/dialog/align-and-distribute.cpp:1007 -#, fuzzy msgid "Distribute left edges equidistantly" -msgstr "Distribuir o lado esquerdo dos objectos à mesma distância" +msgstr "Distribuir lados esquerdos à mesma distância" #: ../src/ui/dialog/align-and-distribute.cpp:1010 msgid "Distribute centers equidistantly horizontally" -msgstr "Distribuir o centro dos objectos à mesma distância" +msgstr "Distribuir centros à mesma distância na horizontal" #: ../src/ui/dialog/align-and-distribute.cpp:1013 -#, fuzzy msgid "Distribute right edges equidistantly" -msgstr "Distribuir o lado direito dos objectos à mesma distância" +msgstr "Distribuir os lados direitos à mesma distância" #: ../src/ui/dialog/align-and-distribute.cpp:1017 msgid "Make vertical gaps between objects equal" -msgstr "Distribuir a distância vertical igualmente entre os objectos" +msgstr "Tornar iguais os espaços entre os objetos na vertical" #: ../src/ui/dialog/align-and-distribute.cpp:1021 -#, fuzzy msgid "Distribute top edges equidistantly" -msgstr "Distribuir o lado superior dos objectos à mesma distância" +msgstr "Distribuir os lados superiores à mesma distância" #: ../src/ui/dialog/align-and-distribute.cpp:1024 msgid "Distribute centers equidistantly vertically" -msgstr "Distribuir o centro dos objectos à mesma distância verticalmente" +msgstr "Distribuir centros á mesma distância na vertical" #: ../src/ui/dialog/align-and-distribute.cpp:1027 -#, fuzzy msgid "Distribute bottom edges equidistantly" -msgstr "Distribuir o lado inferior dos objectos à mesma distância" +msgstr "Distribuir os lados inferiores à mesma distância" #: ../src/ui/dialog/align-and-distribute.cpp:1032 msgid "Distribute baseline anchors of texts horizontally" msgstr "Distribuir âncoras base dos textos horizontalmente" #: ../src/ui/dialog/align-and-distribute.cpp:1035 -#, fuzzy msgid "Distribute baselines of texts vertically" -msgstr "Distribuir âncoras de base de textos verticalmente" +msgstr "Distribuir linhas de base de textos verticalmente" #: ../src/ui/dialog/align-and-distribute.cpp:1041 #: ../src/widgets/connector-toolbar.cpp:367 msgid "Nicely arrange selected connector network" -msgstr "Arruma suavemente a rede de conectores" +msgstr "Arruma suavemente a rede de conetores" #: ../src/ui/dialog/align-and-distribute.cpp:1044 msgid "Exchange positions of selected objects - selection order" -msgstr "" +msgstr "Trocar posições dos objetos selecionados - ordem de seleção" #: ../src/ui/dialog/align-and-distribute.cpp:1047 msgid "Exchange positions of selected objects - stacking order" -msgstr "" +msgstr "Trocar posições dos objetos selecionados - ordem de empilhamento" #: ../src/ui/dialog/align-and-distribute.cpp:1050 msgid "Exchange positions of selected objects - clockwise rotate" -msgstr "" +msgstr "Trocar posições dos objetos selecionados - rotação no sentido horário" #: ../src/ui/dialog/align-and-distribute.cpp:1055 msgid "Randomize centers in both dimensions" -msgstr "Centros aleatórios em ambas dimensões" +msgstr "Empilhar aleatoriamente os centros na vertical e horizontal" #: ../src/ui/dialog/align-and-distribute.cpp:1058 msgid "Unclump objects: try to equalize edge-to-edge distances" -msgstr "Retirar objectos: tente equalizar as distâncias borda-a-borda" +msgstr "Desempilhar objetos: tentar igualar as distâncias de uma borda a outra" #: ../src/ui/dialog/align-and-distribute.cpp:1063 msgid "" "Move objects as little as possible so that their bounding boxes do not " "overlap" msgstr "" -"Mover objectos o mínimo possível para que suas caixas limitadoras não se " -"sobreponham" +"Mover os objetos o mínimo possível para que as suas caixas limitadoras não " +"se sobreponham" #: ../src/ui/dialog/align-and-distribute.cpp:1071 -#, fuzzy msgid "Align selected nodes to a common horizontal line" -msgstr "Alinhar nós seleccionados horizontalmente" +msgstr "Alinhar nós selecionados a uma linha horizontal comum" #: ../src/ui/dialog/align-and-distribute.cpp:1074 -#, fuzzy msgid "Align selected nodes to a common vertical line" -msgstr "Alinhar nós seleccionados verticalmente" +msgstr "Alinhar nós selecionados a uma linha vertical comum" #: ../src/ui/dialog/align-and-distribute.cpp:1077 msgid "Distribute selected nodes horizontally" -msgstr "Distribuir nós seleccionados horizontalmente" +msgstr "Distribuir nós selecionados horizontalmente" #: ../src/ui/dialog/align-and-distribute.cpp:1080 msgid "Distribute selected nodes vertically" -msgstr "Distribuir nós seleccionados verticalmente" +msgstr "Distribuir nós selecionados verticalmente" #. Rest of the widgetry #: ../src/ui/dialog/align-and-distribute.cpp:1085 #: ../src/ui/dialog/align-and-distribute.cpp:1095 msgid "Last selected" -msgstr "Último seleccionado" +msgstr "Último selecionado" #: ../src/ui/dialog/align-and-distribute.cpp:1086 #: ../src/ui/dialog/align-and-distribute.cpp:1096 msgid "First selected" -msgstr "Primeiro seleccionado" +msgstr "Primeiro selecionado" #: ../src/ui/dialog/align-and-distribute.cpp:1087 -#, fuzzy msgid "Biggest object" -msgstr "Ocultar objecto" +msgstr "Objeto maior" #: ../src/ui/dialog/align-and-distribute.cpp:1088 -#, fuzzy msgid "Smallest object" -msgstr "Ajustar ID do objecto" +msgstr "Objeto mais pequeno" #: ../src/ui/dialog/align-and-distribute.cpp:1091 -#, fuzzy msgid "Selection Area" -msgstr "Seleção" +msgstr "Ãrea da seleção" #: ../src/ui/dialog/align-and-distribute.cpp:1097 -#, fuzzy msgid "Middle of selection" -msgstr "Largura da selecção" +msgstr "Meio da seleção" #: ../src/ui/dialog/align-and-distribute.cpp:1098 -#, fuzzy msgid "Min value" -msgstr "Limpar os valores" +msgstr "Valor mínimo" #: ../src/ui/dialog/align-and-distribute.cpp:1099 -#, fuzzy msgid "Max value" -msgstr "Limpar os valores" +msgstr "Valor máximo" #: ../src/ui/dialog/calligraphic-profile-rename.cpp:40 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:138 -#, fuzzy msgid "Edit profile" -msgstr "Perfil de dispositivo:" +msgstr "Editar perfil" #: ../src/ui/dialog/calligraphic-profile-rename.cpp:53 -#, fuzzy msgid "Profile name:" -msgstr "Renomear ficheiro" +msgstr "Nome do perfil:" #: ../src/ui/dialog/calligraphic-profile-rename.cpp:80 -#, fuzzy msgid "Save" -msgstr "_Guardar" +msgstr "Gravar" #: ../src/ui/dialog/calligraphic-profile-rename.cpp:134 -#, fuzzy msgid "Add profile" -msgstr "Adicionar filtro" +msgstr "Adicionar perfil" #: ../src/ui/dialog/clonetiler.cpp:110 msgid "_Symmetry" @@ -15103,11 +14103,11 @@ msgstr "_Simetria" #. TRANSLATORS: "translation" means "shift" / "displacement" here. #: ../src/ui/dialog/clonetiler.cpp:122 msgid "P1: simple translation" -msgstr "P1: deslocamento simples" +msgstr "P1: tradução simples" #: ../src/ui/dialog/clonetiler.cpp:123 msgid "P2: 180° rotation" -msgstr "P2: 180° rotação" +msgstr "P2: rotação 180°" #: ../src/ui/dialog/clonetiler.cpp:124 msgid "PM: reflection" @@ -15129,71 +14129,71 @@ msgstr "PMM: reflexão + reflexão" #: ../src/ui/dialog/clonetiler.cpp:130 msgid "PMG: reflection + 180° rotation" -msgstr "PMG: reflexão + 180° rotação" +msgstr "PMG: reflexão + rotação 180°" #: ../src/ui/dialog/clonetiler.cpp:131 msgid "PGG: glide reflection + 180° rotation" -msgstr "PGG: reflexão deslizante + 180° rotação" +msgstr "PGG: reflexão deslizante + rotação 180°" #: ../src/ui/dialog/clonetiler.cpp:132 msgid "CMM: reflection + reflection + 180° rotation" -msgstr "CMM: reflexão + reflexão + 180° rotação" +msgstr "CMM: reflexão + reflexão + rotação 180°" #: ../src/ui/dialog/clonetiler.cpp:133 msgid "P4: 90° rotation" -msgstr "P4: 90° rotação" +msgstr "P4: rotação 90°" #: ../src/ui/dialog/clonetiler.cpp:134 msgid "P4M: 90° rotation + 45° reflection" -msgstr "P4M: 90° rotação + 45° reflexão" +msgstr "P4M: rotação 90° + reflexão 45°" #: ../src/ui/dialog/clonetiler.cpp:135 msgid "P4G: 90° rotation + 90° reflection" -msgstr "P4G: 90° rotação + 90° reflexão" +msgstr "P4G: rotação 90° + reflexão 90°" #: ../src/ui/dialog/clonetiler.cpp:136 msgid "P3: 120° rotation" -msgstr "P3: 120° rotação" +msgstr "P3: rotação 120°" #: ../src/ui/dialog/clonetiler.cpp:137 msgid "P31M: reflection + 120° rotation, dense" -msgstr "P31M: reflexão + 120° rotação, denso" +msgstr "P31M: reflexão + rotação 120°, denso" #: ../src/ui/dialog/clonetiler.cpp:138 msgid "P3M1: reflection + 120° rotation, sparse" -msgstr "P3M1: reflexão + 120° rotação, escasso" +msgstr "P3M1: reflexão + rotação 120°, escasso" #: ../src/ui/dialog/clonetiler.cpp:139 msgid "P6: 60° rotation" -msgstr "P6: 60° rotação" +msgstr "P6: rotação 60°" #: ../src/ui/dialog/clonetiler.cpp:140 msgid "P6M: reflection + 60° rotation" -msgstr "P6M: reflexão + 60° rotação" +msgstr "P6M: reflexão + rotação 60°" #: ../src/ui/dialog/clonetiler.cpp:160 msgid "Select one of the 17 symmetry groups for the tiling" -msgstr "Seleccione um dos 17 grupos de simetria para o ladrilho" +msgstr "Selecionar um dos 17 grupos de simetria para o ladrilho" #: ../src/ui/dialog/clonetiler.cpp:178 msgid "S_hift" -msgstr "D_eslocamento" +msgstr "D_eslocar" #. TRANSLATORS: "shift" means: the tiles will be shifted (offset) horizontally by this amount #: ../src/ui/dialog/clonetiler.cpp:188 #, no-c-format msgid "Shift X:" -msgstr "Deslocamento X:" +msgstr "Deslocar X:" #: ../src/ui/dialog/clonetiler.cpp:196 #, no-c-format msgid "Horizontal shift per row (in % of tile width)" -msgstr "Deslocamento horizontal por linha (em % da largura do objecto)" +msgstr "Deslocamento horizontal por linha (em % da largura do ladrilho)" #: ../src/ui/dialog/clonetiler.cpp:204 #, no-c-format msgid "Horizontal shift per column (in % of tile width)" -msgstr "Deslocamento horizontal por coluna (em % da largura do objecto)" +msgstr "Deslocamento horizontal por coluna (em % da largura do latrilho)" #: ../src/ui/dialog/clonetiler.cpp:210 msgid "Randomize the horizontal shift by this percentage" @@ -15208,12 +14208,12 @@ msgstr "Deslocar Y:" #: ../src/ui/dialog/clonetiler.cpp:228 #, no-c-format msgid "Vertical shift per row (in % of tile height)" -msgstr "Deslocamento vertical por coluna (em % da altura do objecto)" +msgstr "Deslocamento vertical por linha (em % da altura do ladrilho)" #: ../src/ui/dialog/clonetiler.cpp:236 #, no-c-format msgid "Vertical shift per column (in % of tile height)" -msgstr "Deslocamento vertical por coluna (em % da altura do objecto)" +msgstr "Deslocamento vertical por coluna (em % da altura do ladrilho)" #: ../src/ui/dialog/clonetiler.cpp:243 msgid "Randomize the vertical shift by this percentage" @@ -15253,37 +14253,33 @@ msgstr "Alternar o sinal dos deslocamentos para cada coluna" #. TRANSLATORS: "Cumulate" is a verb here #: ../src/ui/dialog/clonetiler.cpp:291 ../src/ui/dialog/clonetiler.cpp:455 #: ../src/ui/dialog/clonetiler.cpp:531 -#, fuzzy msgid "Cumulate:" -msgstr "Alternar:" +msgstr "Acumular:" #: ../src/ui/dialog/clonetiler.cpp:297 -#, fuzzy msgid "Cumulate the shifts for each row" -msgstr "Alternar o sinal dos deslocamentos para cada linha" +msgstr "Acumular os deslocamentos para cada linha" #: ../src/ui/dialog/clonetiler.cpp:302 -#, fuzzy msgid "Cumulate the shifts for each column" -msgstr "Alternar o sinal dos deslocamentos para cada coluna" +msgstr "Acumular os deslocamentos para cada coluna" #. TRANSLATORS: "Cumulate" is a verb here #: ../src/ui/dialog/clonetiler.cpp:309 -#, fuzzy msgid "Exclude tile:" -msgstr "Alternar:" +msgstr "Excluir ladrilho:" #: ../src/ui/dialog/clonetiler.cpp:315 msgid "Exclude tile height in shift" -msgstr "" +msgstr "Excluir altura do ladrilho no deslocamento" #: ../src/ui/dialog/clonetiler.cpp:320 msgid "Exclude tile width in shift" -msgstr "" +msgstr "Excluir largura do ladrilho no deslocamento" #: ../src/ui/dialog/clonetiler.cpp:329 msgid "Sc_ale" -msgstr "Ampli_ar" +msgstr "Escal_a" #: ../src/ui/dialog/clonetiler.cpp:337 msgid "Scale X:" @@ -15322,53 +14318,47 @@ msgid "Randomize the vertical scale by this percentage" msgstr "Deslocamento vertical aleatório por esta percentagem" #: ../src/ui/dialog/clonetiler.cpp:403 -#, fuzzy msgid "Whether row scaling is uniform (1), converge (<1) or diverge (>1)" msgstr "" -"Se as linhas estiverem espaçadas uniformemente (1), convergir (<1) ou " -"divergir (>1)" +"Se as linhas estão espaçadas uniformemente (1), convergente (<1) ou " +"divergente (>1)" #: ../src/ui/dialog/clonetiler.cpp:409 -#, fuzzy msgid "Whether column scaling is uniform (1), converge (<1) or diverge (>1)" msgstr "" -"Se as colunas estiverem espaçadas uniformemente (1), convergir (<1) ou " -"divergir (>1)" +"Se o espaço das colunas é uniforme (1), convergente (<1) ou divergente (>1)" #: ../src/ui/dialog/clonetiler.cpp:417 -#, fuzzy msgid "Base:" -msgstr "a" +msgstr "Base:" #: ../src/ui/dialog/clonetiler.cpp:423 ../src/ui/dialog/clonetiler.cpp:429 -#, fuzzy msgid "" "Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)" msgstr "" -"Se as linhas estiverem espaçadas uniformemente (1), convergir (<1) ou " -"divergir (>1)" +"Base para uma espiral logarítmica: não usado (0), convergir (<1) ou divergir " +"(>1)" #: ../src/ui/dialog/clonetiler.cpp:443 msgid "Alternate the sign of scales for each row" -msgstr "Alterar escala de medida para cada coluna" +msgstr "Alternar o sinal de escalas para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:448 msgid "Alternate the sign of scales for each column" msgstr "Alternar o sinal de escalas para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:461 -#, fuzzy msgid "Cumulate the scales for each row" -msgstr "Alterar escala de medida para cada coluna" +msgstr "Acumular as escalas para cada linha" #: ../src/ui/dialog/clonetiler.cpp:466 -#, fuzzy msgid "Cumulate the scales for each column" -msgstr "Alternar o sinal de escalas para cada coluna" +msgstr "Acumular as escalas para cada coluna" +# em vez de Rotação conforme o original em inglês, optei por Rodar por ser mais curto para não alargar muito o painel lateral #: ../src/ui/dialog/clonetiler.cpp:475 msgid "_Rotation" -msgstr "_Rotação" +msgstr "_Rodar" #: ../src/ui/dialog/clonetiler.cpp:483 msgid "Angle:" @@ -15377,12 +14367,12 @@ msgstr "Ângulo:" #: ../src/ui/dialog/clonetiler.cpp:491 #, no-c-format msgid "Rotate tiles by this angle for each row" -msgstr "Girar ladrilhos por este ângulo para cada linha" +msgstr "Rodar ladrilhos por este ângulo para cada linha" #: ../src/ui/dialog/clonetiler.cpp:499 #, no-c-format msgid "Rotate tiles by this angle for each column" -msgstr "Girar ladrilhos por este ângulo para cada coluna" +msgstr "Rodar ladrilhos por este ângulo para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:505 msgid "Randomize the rotation angle by this percentage" @@ -15397,47 +14387,45 @@ msgid "Alternate the rotation direction for each column" msgstr "Alternar a direção da rotação para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:537 -#, fuzzy msgid "Cumulate the rotation for each row" -msgstr "Alternar a direção da rotação para cada linha" +msgstr "Acumular a rotação para cada linha" #: ../src/ui/dialog/clonetiler.cpp:542 -#, fuzzy msgid "Cumulate the rotation for each column" -msgstr "Alternar a direção da rotação para cada coluna" +msgstr "Acumular a rotação para cada coluna" +# em vez de "_Desfocagem e opacidade" é preferível este campo mais curto para não alargar muito o painel lateral #: ../src/ui/dialog/clonetiler.cpp:551 msgid "_Blur & opacity" -msgstr "_Desfoque & opacidade" +msgstr "_Desfocar/opacidade" #: ../src/ui/dialog/clonetiler.cpp:560 msgid "Blur:" -msgstr "Desfoque:" +msgstr "Desfocagem:" #: ../src/ui/dialog/clonetiler.cpp:566 msgid "Blur tiles by this percentage for each row" -msgstr "Aplicar desfoque ao ladrilho por esta percentagem para cada linha" +msgstr "Aplicar desfocagem ao ladrilho por esta percentagem para cada linha" #: ../src/ui/dialog/clonetiler.cpp:572 msgid "Blur tiles by this percentage for each column" -msgstr "Aplicar desfoque ao ladrilho por esta percentagem para cada coluna" +msgstr "Aplicar desfocagem ao ladrilho por esta percentagem para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:578 msgid "Randomize the tile blur by this percentage" -msgstr "Desfoque aleatório do ladrilho por esta percentagem" +msgstr "Desfocagem aleatória do ladrilho por esta percentagem" #: ../src/ui/dialog/clonetiler.cpp:592 msgid "Alternate the sign of blur change for each row" -msgstr "Alternar o sinal do desfoque para cada linha" +msgstr "Alternar o sinal da desfocagem para cada linha" #: ../src/ui/dialog/clonetiler.cpp:597 msgid "Alternate the sign of blur change for each column" -msgstr "Alternar o sinal do desfoque para cada coluna" +msgstr "Alternar o sinal da desfocagem para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:606 -#, fuzzy msgid "Opacity:" -msgstr "Opacidade" +msgstr "Transparência:" #: ../src/ui/dialog/clonetiler.cpp:612 msgid "Decrease tile opacity by this percentage for each row" @@ -15472,29 +14460,28 @@ msgid "Initial color of tiled clones" msgstr "Cor inicial dos clones ladrilhados" #: ../src/ui/dialog/clonetiler.cpp:665 -#, fuzzy msgid "" "Initial color for clones (works only if the original has unset fill or " "stroke or on spray tool in copy mode)" msgstr "" -"Cor inicial para clones (só funciona se o original não tiver preenchimento " -"ou traço)" +"Cor inicial para os clones (só funciona se o original não tiver " +"preenchimento ou traço ou na ferramenta pulverizar no modo cópia)" #: ../src/ui/dialog/clonetiler.cpp:680 msgid "H:" -msgstr "H:" +msgstr "M:" #: ../src/ui/dialog/clonetiler.cpp:686 msgid "Change the tile hue by this percentage for each row" -msgstr "Alterar contraste do ladrilho por esta percentagem para cada linha" +msgstr "Alterar matiz do ladrilho por esta percentagem para cada linha" #: ../src/ui/dialog/clonetiler.cpp:692 msgid "Change the tile hue by this percentage for each column" -msgstr "Alterar contraste do ladrilho por esta percentagem para cada coluna" +msgstr "Alterar matiz do ladrilho por esta percentagem para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:698 msgid "Randomize the tile hue by this percentage" -msgstr "Contraste aleatório do ladrilho por esta percentagem" +msgstr "Matiz aleatória do ladrilho por esta percentagem" #: ../src/ui/dialog/clonetiler.cpp:707 msgid "S:" @@ -15502,15 +14489,15 @@ msgstr "S:" #: ../src/ui/dialog/clonetiler.cpp:713 msgid "Change the color saturation by this percentage for each row" -msgstr "Mudar a saturação de cor sob esta percentagem para cada linha" +msgstr "Alterar a saturação da cor por esta percentagem para cada linha" #: ../src/ui/dialog/clonetiler.cpp:719 msgid "Change the color saturation by this percentage for each column" -msgstr "Mudar a saturação de cor sob esta percentagem para cada coluna" +msgstr "Alterar a saturação da cor por esta percentagem para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:725 msgid "Randomize the color saturation by this percentage" -msgstr "Saturação aleatório de cor por esta percentagem" +msgstr "Saturação aleatória da cor por esta percentagem" #: ../src/ui/dialog/clonetiler.cpp:733 msgid "L:" @@ -15518,41 +14505,39 @@ msgstr "L:" #: ../src/ui/dialog/clonetiler.cpp:739 msgid "Change the color lightness by this percentage for each row" -msgstr "Mudar o brilho da cor sob esta percentagem para cada linha" +msgstr "Alterar a luminosidade da cor por esta percentagem para cada linha" #: ../src/ui/dialog/clonetiler.cpp:745 msgid "Change the color lightness by this percentage for each column" -msgstr "Mudar o brilho da cor sob esta percentagem para cada coluna" +msgstr "Alterar a luminosidade da cor por esta percentagem para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:751 msgid "Randomize the color lightness by this percentage" -msgstr "Brilho da cor aleatório por esta percentagem" +msgstr "Luminosidade da cor aleatória por esta percentagem" #: ../src/ui/dialog/clonetiler.cpp:765 msgid "Alternate the sign of color changes for each row" -msgstr "Alternar o valor de mudanças de cor para cada linha" +msgstr "Alternar o símbolo das mudanças de cor para cada linha" #: ../src/ui/dialog/clonetiler.cpp:770 msgid "Alternate the sign of color changes for each column" -msgstr "Alternar o valor de mudanças de cor para cada coluna" +msgstr "Alternar o símbolo das mudanças de cor para cada coluna" #: ../src/ui/dialog/clonetiler.cpp:778 msgid "_Trace" -msgstr "_Vectorizar" +msgstr "_Vetorizar" #: ../src/ui/dialog/clonetiler.cpp:788 -#, fuzzy msgid "Trace the drawing under the clones/sprayed items" -msgstr "Vectorizar o desenho em baixo dos ladrilhos" +msgstr "Vetorizar o desenho por baixo dos clones/itens pulverizados" #: ../src/ui/dialog/clonetiler.cpp:792 -#, fuzzy msgid "" "For each clone/sprayed item, pick a value from the drawing in its location " "and apply it" msgstr "" -"Para cada clone, pegar um valor do desenho no local daquele clone e aplicar " -"ao clone" +"Para cada clone ou item pulverizado, pegar um valor do desenho na sua " +"localização e aplicá-lo" #: ../src/ui/dialog/clonetiler.cpp:811 msgid "1. Pick from the drawing:" @@ -15560,7 +14545,7 @@ msgstr "1. Capturar do desenho:" #: ../src/ui/dialog/clonetiler.cpp:829 msgid "Pick the visible color and opacity" -msgstr "Escolha a cor visível e a opacidade" +msgstr "Capturar a cor visível e a opacidade" #: ../src/ui/dialog/clonetiler.cpp:837 msgid "Pick the total accumulated opacity" @@ -15591,17 +14576,15 @@ msgid "Pick the Blue component of the color" msgstr "Capturar o componente Azul da cor" #: ../src/ui/dialog/clonetiler.cpp:868 -#, fuzzy msgctxt "Clonetiler color hue" msgid "H" -msgstr "H" +msgstr "M" #: ../src/ui/dialog/clonetiler.cpp:869 msgid "Pick the hue of the color" -msgstr "Capturar a tonalidade da cor" +msgstr "Capturar a matiz da cor" #: ../src/ui/dialog/clonetiler.cpp:876 -#, fuzzy msgctxt "Clonetiler color saturation" msgid "S" msgstr "S" @@ -15611,27 +14594,26 @@ msgid "Pick the saturation of the color" msgstr "Capturar a saturação da cor" #: ../src/ui/dialog/clonetiler.cpp:884 -#, fuzzy msgctxt "Clonetiler color lightness" msgid "L" msgstr "L" #: ../src/ui/dialog/clonetiler.cpp:885 msgid "Pick the lightness of the color" -msgstr "Capturar o brilho da cor" +msgstr "Capturar a luminosidade da cor" #: ../src/ui/dialog/clonetiler.cpp:895 msgid "2. Tweak the picked value:" -msgstr "2. Altere o valor requerido:" +msgstr "2. Ajustar o valor capturado:" #: ../src/ui/dialog/clonetiler.cpp:912 msgid "Gamma-correct:" -msgstr "Correção-gama:" +msgstr "Correção do gama:" #: ../src/ui/dialog/clonetiler.cpp:916 msgid "Shift the mid-range of the picked value upwards (>0) or downwards (<0)" msgstr "" -"Desloque a escala média do valor escolhido para cima (> 0) ou para baixo (< " +"Deslocar a escala média do valor capturado para cima (> 0) ou para baixo (< " "0)" #: ../src/ui/dialog/clonetiler.cpp:923 @@ -15640,7 +14622,7 @@ msgstr "Aleatório:" #: ../src/ui/dialog/clonetiler.cpp:927 msgid "Randomize the picked value by this percentage" -msgstr "Valor aleatório captado sob esta percentagem" +msgstr "Aleatoriedade do valor capturado por esta percentagem" #: ../src/ui/dialog/clonetiler.cpp:934 msgid "Invert:" @@ -15648,7 +14630,7 @@ msgstr "Inverter:" #: ../src/ui/dialog/clonetiler.cpp:938 msgid "Invert the picked value" -msgstr "Inverter o valor captado" +msgstr "Inverter o valor capturado" #: ../src/ui/dialog/clonetiler.cpp:944 msgid "3. Apply the value to the clones':" @@ -15663,8 +14645,8 @@ msgid "" "Each clone is created with the probability determined by the picked value in " "that point" msgstr "" -"Cada clone é criado com a probabilidade determinada pelo valor captado neste " -"ponto" +"Cada clone é criado com a probabilidade determinada pelo valor capturado " +"neste ponto" #: ../src/ui/dialog/clonetiler.cpp:969 msgid "Size" @@ -15672,24 +14654,24 @@ msgstr "Tamanho" #: ../src/ui/dialog/clonetiler.cpp:972 msgid "Each clone's size is determined by the picked value in that point" -msgstr "O tamanho de cada clone é determinado pelo valor captado neste ponto" +msgstr "O tamanho de cada clone é determinado pelo valor capturado neste ponto" #: ../src/ui/dialog/clonetiler.cpp:982 msgid "" "Each clone is painted by the picked color (the original must have unset fill " "or stroke)" msgstr "" -"Cada clone é preenchido com a cor selecionada (a original não deve ter " -"preenchimento ou traço ativados)" +"Cada clone é preenchido com a cor capturada (a original não deve ter " +"definidos o preenchimento nem o traço)" #: ../src/ui/dialog/clonetiler.cpp:992 msgid "Each clone's opacity is determined by the picked value in that point" -msgstr "A opacidade de cada clone é determinada pelo valor captado neste ponto" +msgstr "" +"A opacidade de cada clone é determinada pelo valor capturado neste ponto" #: ../src/ui/dialog/clonetiler.cpp:1011 -#, fuzzy msgid "Apply to tiled clones:" -msgstr "Eliminar clones ladrilhados" +msgstr "Aplicar aos clones ladrilhados:" #: ../src/ui/dialog/clonetiler.cpp:1052 msgid "How many rows in the tiling" @@ -15709,7 +14691,7 @@ msgstr "Altura do retângulo a ser preenchido" #: ../src/ui/dialog/clonetiler.cpp:1185 msgid "Rows, columns: " -msgstr "Linhas, colunas: " +msgstr "Linhas, colunas:" #: ../src/ui/dialog/clonetiler.cpp:1186 msgid "Create the specified number of rows and columns" @@ -15721,19 +14703,19 @@ msgstr "Largura, altura: " #: ../src/ui/dialog/clonetiler.cpp:1196 msgid "Fill the specified width and height with the tiling" -msgstr "Preencher a largura e altura com os ladrilhos" +msgstr "Preencher com a largura e altura especificados com os ladrilhos" #: ../src/ui/dialog/clonetiler.cpp:1217 msgid "Use saved size and position of the tile" -msgstr "Usar tamanho e posição salvos do ladrilho" +msgstr "Usar tamanho e posição gravados do ladrilho" #: ../src/ui/dialog/clonetiler.cpp:1220 msgid "" "Pretend that the size and position of the tile are the same as the last time " "you tiled it (if any), instead of using the current size" msgstr "" -"Fazer com que o tamanho e posição do ladrilho sejam as mesmas da última vez " -"que o fez (se fez), ao invés do tamanho actual" +"Fazer com que o tamanho e posição do ladrilho sejam os mesmos que foram " +"utilizados da última vez (se for o caso), em vez de usar o tamanho atual" #: ../src/ui/dialog/clonetiler.cpp:1254 msgid " _Create " @@ -15741,7 +14723,7 @@ msgstr " _Criar " #: ../src/ui/dialog/clonetiler.cpp:1256 msgid "Create and tile the clones of the selection" -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "Criar e ladrilhar os clones da seleção" #. TRANSLATORS: if a group of objects are "clumped" together, then they #. are unevenly spread in the given amount of space - as shown in the @@ -15750,11 +14732,12 @@ msgstr "Criar e ladrilhar os clones da selecção" #. So unclumping is the process of spreading a number of objects out more evenly. #: ../src/ui/dialog/clonetiler.cpp:1276 msgid " _Unclump " -msgstr " _Desagrupar " +msgstr " _Desempilhar " #: ../src/ui/dialog/clonetiler.cpp:1277 msgid "Spread out clones to reduce clumping; can be applied repeatedly" -msgstr "Espalhar clones para reduzir o ruído; pode ser aplicado repetidamente" +msgstr "" +"Espalhar clones para reduzir o empilhamento; pode ser aplicado repetidamente" #: ../src/ui/dialog/clonetiler.cpp:1283 msgid " Re_move " @@ -15762,11 +14745,13 @@ msgstr " Re_mover " #: ../src/ui/dialog/clonetiler.cpp:1284 msgid "Remove existing tiled clones of the selected object (siblings only)" -msgstr "Remover clones ladrilhados do objecto seleccionado (somente cópias)" +msgstr "" +"Remover clones ladrilhados existentes do objeto selecionado (apenas " +"similares)" #: ../src/ui/dialog/clonetiler.cpp:1301 msgid " R_eset " -msgstr " R_edefinir " +msgstr " R_epor " #. TRANSLATORS: "change" is a noun here #: ../src/ui/dialog/clonetiler.cpp:1303 @@ -15774,37 +14759,37 @@ msgid "" "Reset all shifts, scales, rotates, opacity and color changes in the dialog " "to zero" msgstr "" -"Reiniciar todas as modificações, escalas, rotações, opacidade e mudanças de " -"cores na caixa de diálogo para zero" +"Repor os valores a zero no painel de todos os deslocamentos, " +"redimensionamentos, rotações, opacidade e mudanças de cores" #: ../src/ui/dialog/clonetiler.cpp:1375 msgid "Nothing selected." -msgstr "Nada seleccionado." +msgstr "Nada selecionado." #: ../src/ui/dialog/clonetiler.cpp:1381 msgid "More than one object selected." -msgstr "Mais de um objecto seleccionado." +msgstr "Mais do que 1 objeto selecionado." #: ../src/ui/dialog/clonetiler.cpp:1388 #, c-format msgid "Object has %d tiled clones." -msgstr "O objecto possui %d clones ladrilhados." +msgstr "O objeto tem %d clones ladrilhados." #: ../src/ui/dialog/clonetiler.cpp:1393 msgid "Object has no tiled clones." -msgstr "O objecto não possui clones ladrilhados." +msgstr "O objeto não tem clones ladrilhados." #: ../src/ui/dialog/clonetiler.cpp:2117 msgid "Select one object whose tiled clones to unclump." -msgstr "Seleccione um objecto para separar clones." +msgstr "Selecionar 1 objeto nos clones ladrilhados para desempilhar." #: ../src/ui/dialog/clonetiler.cpp:2137 msgid "Unclump tiled clones" -msgstr "Separa clones em ladrilho" +msgstr "Desempilhar clones no ladrilho" #: ../src/ui/dialog/clonetiler.cpp:2166 msgid "Select one object whose tiled clones to remove." -msgstr "Seleccione um objecto clonado para remover clones." +msgstr "Selecionar 1 objeto nos clones ladrilhados remover." #: ../src/ui/dialog/clonetiler.cpp:2191 msgid "Delete tiled clones" @@ -15815,12 +14800,12 @@ msgid "" "If you want to clone several objects, group them and clone the " "group." msgstr "" -"Se quiser clonar diversos objectos, agrupe-os e clone o grupo." +"Para clonar vários objetos, é necessário agrupá-los e então clonar " +"o grupo." #: ../src/ui/dialog/clonetiler.cpp:2253 -#, fuzzy msgid "Creating tiled clones..." -msgstr "O objecto não possui clones ladrilhados." +msgstr "A criar clones ladrilhados..." #: ../src/ui/dialog/clonetiler.cpp:2670 msgid "Create tiled clones" @@ -15828,53 +14813,51 @@ msgstr "Criar clones ladrilhados" #: ../src/ui/dialog/clonetiler.cpp:2907 msgid "Per row:" -msgstr "Por linha:" +msgstr "Por linha" #: ../src/ui/dialog/clonetiler.cpp:2925 msgid "Per column:" -msgstr "Por coluna:" +msgstr "Por coluna" #: ../src/ui/dialog/clonetiler.cpp:2933 msgid "Randomize:" -msgstr "Aleatório:" +msgstr "Aleatório" #: ../src/ui/dialog/color-item.cpp:127 #, c-format msgid "" "Color: %s; Click to set fill, Shift+click to set stroke" msgstr "" +"Cor: %s; Clicar para aplicar no preenchimento, Shift" +"+clicar para aplicar no traço" #: ../src/ui/dialog/color-item.cpp:505 msgid "Change color definition" -msgstr "Modificar definição de cor" +msgstr "Alterar definição de cor" #: ../src/ui/dialog/color-item.cpp:677 -#, fuzzy msgid "Remove stroke color" -msgstr "Remover traço" +msgstr "Remover cor da linha" #: ../src/ui/dialog/color-item.cpp:677 -#, fuzzy msgid "Remove fill color" -msgstr "Remover preenchimento" +msgstr "Remover cor do preenchimento" #: ../src/ui/dialog/color-item.cpp:682 -#, fuzzy msgid "Set stroke color to none" -msgstr "Definir cor do traço" +msgstr "Remover cor do traço" #: ../src/ui/dialog/color-item.cpp:682 -#, fuzzy msgid "Set fill color to none" -msgstr "Definir cor de preenchimento" +msgstr "Remover cor do preenchimento" #: ../src/ui/dialog/color-item.cpp:700 msgid "Set stroke color from swatch" -msgstr "Definir traço da paleta de cores" +msgstr "Aplicar cor do traço a partir da amostra de cor" #: ../src/ui/dialog/color-item.cpp:700 msgid "Set fill color from swatch" -msgstr "Definir preenchimento da paleta de cores de cores" +msgstr "Aplicar cor do preenchimento a partir da amostra de cor" #: ../src/ui/dialog/debug.cpp:69 msgid "Messages" @@ -15903,65 +14886,68 @@ msgid "License" msgstr "Licença" #: ../src/ui/dialog/document-metadata.cpp:126 -#: ../src/ui/dialog/document-properties.cpp:994 +#: ../src/ui/dialog/document-properties.cpp:1037 msgid "Dublin Core Entities" -msgstr "Entidades do núcleo Dublin" +msgstr "Entidades do esquema de metadados Dublin Core" #: ../src/ui/dialog/document-metadata.cpp:168 -#: ../src/ui/dialog/document-properties.cpp:1056 +#: ../src/ui/dialog/document-properties.cpp:1099 msgid "License" msgstr "Licença" #. --------------------------------------------------------------- #: ../src/ui/dialog/document-properties.cpp:118 -#, fuzzy msgid "Use antialiasing" -msgstr "Simular saída na Ecrã" +msgstr "Usar anti-serrilhado" #: ../src/ui/dialog/document-properties.cpp:118 -#, fuzzy msgid "If unset, no antialiasing will be done on the drawing" -msgstr "Bordas no topo do desenho" +msgstr "" +"Se não estiver ativado, não será usado o anti-serrilhado (antialiasing)" #: ../src/ui/dialog/document-properties.cpp:119 -#, fuzzy msgid "Checkerboard background" -msgstr "Remover fundo" +msgstr "Fundo quadriculado tipo tabuleiro de damas" #: ../src/ui/dialog/document-properties.cpp:119 msgid "" "If set, use checkerboard for background, otherwise use background color at " "full opacity." msgstr "" +"Se ativado, usa o tabuleiro de damas no fundo, caso contrário usa a cor do " +"fundo na opacidade máxima." #: ../src/ui/dialog/document-properties.cpp:120 msgid "Show page _border" -msgstr "Mostrar bordas da página" +msgstr "Mostrar _bordas da página" #: ../src/ui/dialog/document-properties.cpp:120 msgid "If set, rectangular page border is shown" -msgstr "Borda retangular da página" +msgstr "" +"Se ativado é mostrada uma borda retangular que representa os limites da " +"página" #: ../src/ui/dialog/document-properties.cpp:121 msgid "Border on _top of drawing" -msgstr "Bordas no topo do desenho" +msgstr "Mostrar bordas por cima do _desenho" #: ../src/ui/dialog/document-properties.cpp:121 msgid "If set, border is always on top of the drawing" -msgstr "Bordas no topo do desenho" +msgstr "" +"Se ativado, as bordas da página são sempre mostradas por cima dos desenhos " +"que as intersetem" #: ../src/ui/dialog/document-properties.cpp:122 msgid "_Show border shadow" -msgstr "Ver sombra da página" +msgstr "Mostrar _sombra da página" #: ../src/ui/dialog/document-properties.cpp:122 msgid "If set, page border shows a shadow on its right and lower side" -msgstr "Ver sombra da página" +msgstr "Se ativado, é mostrada uma pequena sombra na borda direita e de baixo" #: ../src/ui/dialog/document-properties.cpp:123 -#, fuzzy msgid "Back_ground color:" -msgstr "Cor de plano de fundo" +msgstr "Cor do _fundo:" #: ../src/ui/dialog/document-properties.cpp:123 msgid "" @@ -15969,10 +14955,13 @@ msgid "" "editing if 'Checkerboard background' unset (but used when exporting to " "bitmap)." msgstr "" +"Cor do fundo da página. Nota: a transparência é ignorada ao editar se a " +"opção 'Fundo de tabuleiro de damas' estiver desativada, mas é usada ao " +"exportar para imagem bitmap." #: ../src/ui/dialog/document-properties.cpp:124 msgid "Border _color:" -msgstr "Cor da borda:" +msgstr "_Cor da borda:" #: ../src/ui/dialog/document-properties.cpp:124 msgid "Page border color" @@ -15983,9 +14972,8 @@ msgid "Color of the page border" msgstr "Cor da borda da página" #: ../src/ui/dialog/document-properties.cpp:125 -#, fuzzy msgid "Display _units:" -msgstr "_Unidades da grelha:" +msgstr "_Unidades de visualização:" #. --------------------------------------------------------------- #. General snap options @@ -15999,7 +14987,7 @@ msgstr "Mostrar ou esconder guias" #: ../src/ui/dialog/document-properties.cpp:130 msgid "Guide co_lor:" -msgstr "Cor das gui_as:" +msgstr "Cor das _guias:" #: ../src/ui/dialog/document-properties.cpp:130 msgid "Guideline color" @@ -16019,142 +15007,136 @@ msgstr "Cor da linha guia destacada" #: ../src/ui/dialog/document-properties.cpp:131 msgid "Color of a guideline when it is under mouse" -msgstr "Cor da linha guia quando sob o cursor" +msgstr "Cor da linha guia ao passar com o rato por cima" #. --------------------------------------------------------------- #: ../src/ui/dialog/document-properties.cpp:133 msgid "Snap _distance" -msgstr "Encaixar _distância" +msgstr "_Distância de atração" #: ../src/ui/dialog/document-properties.cpp:133 msgid "Snap only when _closer than:" -msgstr "" +msgstr "Atrair apenas quando estiver a uma distância menor _que:" #: ../src/ui/dialog/document-properties.cpp:133 #: ../src/ui/dialog/document-properties.cpp:138 #: ../src/ui/dialog/document-properties.cpp:143 msgid "Always snap" -msgstr "" +msgstr "Atrair sempre" # Termo melhor para "agarramento"? #: ../src/ui/dialog/document-properties.cpp:134 -#, fuzzy msgid "Snapping distance, in screen pixels, for snapping to objects" -msgstr "Distância de ajuste, em pixels da Ecrã, para agarrar aos objectos" +msgstr "Distância de atração, em píxeis, para atrair aos objetos" #: ../src/ui/dialog/document-properties.cpp:134 -#, fuzzy msgid "Always snap to objects, regardless of their distance" -msgstr "Objectos se ajustam ao objecto mais próximo quando movidos" +msgstr "Atrair sempre aos objetos, independentemente da distância" #: ../src/ui/dialog/document-properties.cpp:135 msgid "" "If set, objects only snap to another object when it's within the range " "specified below" msgstr "" +"Se definido, os objetos serão atraídos a outro objeto se estiverem dentro do " +"alcance especificado abaixo" #. Options for snapping to grids #: ../src/ui/dialog/document-properties.cpp:138 -#, fuzzy msgid "Snap d_istance" -msgstr "Encaixar _distância" +msgstr "D_istância de atração" #: ../src/ui/dialog/document-properties.cpp:138 msgid "Snap only when c_loser than:" -msgstr "" +msgstr "Atrair apenas quando mais perto do que:" # Termo melhor para "agarramento"? #: ../src/ui/dialog/document-properties.cpp:139 -#, fuzzy msgid "Snapping distance, in screen pixels, for snapping to grid" -msgstr "Distância de agarramento, em pixels da Ecrã, para agarrar à grelha" +msgstr "Distância de atração, em píxeis, para atrair à grelha" #: ../src/ui/dialog/document-properties.cpp:139 -#, fuzzy msgid "Always snap to grids, regardless of the distance" -msgstr "Objectos se ajustam à linha guia mais próxima quando movidos" +msgstr "Atrair sempre às grelhas, independentemente da distância" #: ../src/ui/dialog/document-properties.cpp:140 msgid "" "If set, objects only snap to a grid line when it's within the range " "specified below" msgstr "" +"Se definido, os objetos serão atraídos a uma linha da grelha se estiverem " +"dentro do alcance especificado abaixo" #. Options for snapping to guides #: ../src/ui/dialog/document-properties.cpp:143 msgid "Snap dist_ance" -msgstr "Encaixar distânci_a" +msgstr "Distânci_a de atração" #: ../src/ui/dialog/document-properties.cpp:143 msgid "Snap only when close_r than:" -msgstr "" +msgstr "Atrai_r apenas quando mais próximo do que:" # Termo melhor para "agarramento"? #: ../src/ui/dialog/document-properties.cpp:144 msgid "Snapping distance, in screen pixels, for snapping to guides" -msgstr "Encaixando distância, em pixels da Ecrã, para encaixar às guias" +msgstr "Distância de atração, em píxeis, para atrair às guias" #: ../src/ui/dialog/document-properties.cpp:144 -#, fuzzy msgid "Always snap to guides, regardless of the distance" -msgstr "Objectos se ajustam à linha guia mais próxima quando movidos" +msgstr "Atrair sempre às guias, independentemente da distância" #: ../src/ui/dialog/document-properties.cpp:145 msgid "" "If set, objects only snap to a guide when it's within the range specified " "below" msgstr "" +"Se definido, os objetos serão atraídos a uma guia se estiverem dentro do " +"alcance especificado abaixo" #. --------------------------------------------------------------- #: ../src/ui/dialog/document-properties.cpp:148 -#, fuzzy msgid "Snap to clip paths" -msgstr "Encaixar no camin_ho" +msgstr "Atrair aos caminhos recortados" #: ../src/ui/dialog/document-properties.cpp:148 msgid "When snapping to paths, then also try snapping to clip paths" -msgstr "" +msgstr "Ao atrair a caminhos, tentar também atrair aos caminhos recortados" #: ../src/ui/dialog/document-properties.cpp:149 -#, fuzzy msgid "Snap to mask paths" -msgstr "Encaixar no camin_ho" +msgstr "Atrair aos caminhos de máscara" #: ../src/ui/dialog/document-properties.cpp:149 msgid "When snapping to paths, then also try snapping to mask paths" -msgstr "" +msgstr "Ao atrair a caminhos, tentar também atrair aos caminhos de máscaras" #: ../src/ui/dialog/document-properties.cpp:150 -#, fuzzy msgid "Snap perpendicularly" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "Atrair perpendicularmente" #: ../src/ui/dialog/document-properties.cpp:150 msgid "" "When snapping to paths or guides, then also try snapping perpendicularly" -msgstr "" +msgstr "Ao atrair a caminhos ou guias, tentar também atrair na perpendicular" #: ../src/ui/dialog/document-properties.cpp:151 -#, fuzzy msgid "Snap tangentially" -msgstr "Desfazer preenchimento" +msgstr "Atrair tangencialmente" #: ../src/ui/dialog/document-properties.cpp:151 msgid "When snapping to paths or guides, then also try snapping tangentially" -msgstr "" +msgstr "Ao atrair a caminhos ou guias, tentar também atrair às tangentes" #: ../src/ui/dialog/document-properties.cpp:154 -#, fuzzy msgctxt "Grid" msgid "_New" -msgstr "_Novo" +msgstr "_Adicionar grelha" #: ../src/ui/dialog/document-properties.cpp:154 msgid "Create new grid." -msgstr "Criar nova grelha." +msgstr "Cria uma nova grelha." #: ../src/ui/dialog/document-properties.cpp:155 -#, fuzzy msgctxt "Grid" msgid "_Remove" msgstr "_Remover" @@ -16169,218 +15151,188 @@ msgstr "Guias" #: ../src/ui/dialog/document-properties.cpp:164 ../src/verbs.cpp:2837 msgid "Snap" -msgstr "Encaixe" +msgstr "Atrair" #: ../src/ui/dialog/document-properties.cpp:166 -#, fuzzy msgid "Scripting" -msgstr "Script" +msgstr "Programação" #: ../src/ui/dialog/document-properties.cpp:330 msgid "General" msgstr "Geral" #: ../src/ui/dialog/document-properties.cpp:333 -#, fuzzy msgid "Page Size" -msgstr "Linha" +msgstr "Tamanho da Página" #: ../src/ui/dialog/document-properties.cpp:336 -#, fuzzy msgid "Background" -msgstr "Plano de fundo:" +msgstr "Fundo" #: ../src/ui/dialog/document-properties.cpp:339 msgid "Border" msgstr "Borda" #: ../src/ui/dialog/document-properties.cpp:342 -#, fuzzy msgid "Display" -msgstr "a" +msgstr "Visualização" #: ../src/ui/dialog/document-properties.cpp:381 msgid "Guides" msgstr "Guias" #: ../src/ui/dialog/document-properties.cpp:399 -#, fuzzy msgid "Snap to objects" -msgstr "Snapping to objects" +msgstr "Atrair aos objetos" #: ../src/ui/dialog/document-properties.cpp:401 -#, fuzzy msgid "Snap to grids" -msgstr "Encaixar à grelha" +msgstr "Atrair às grelhas" #: ../src/ui/dialog/document-properties.cpp:403 -#, fuzzy msgid "Snap to guides" -msgstr "Encaixando às guias" +msgstr "Atrair às guias" #: ../src/ui/dialog/document-properties.cpp:405 msgid "Miscellaneous" -msgstr "Miscelânia" +msgstr "Miscelânea" #. TODO check if this next line was sometimes needed. It being there caused an assertion. #. Inkscape::GC::release(defsRepr); #. inform the document, so we can undo #. Color Management -#: ../src/ui/dialog/document-properties.cpp:526 ../src/verbs.cpp:3020 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:542 ../src/verbs.cpp:3020 msgid "Link Color Profile" -msgstr "Pegar cores da imagem" +msgstr "Perfil de Cor Associado" -#: ../src/ui/dialog/document-properties.cpp:623 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:654 msgid "Remove linked color profile" -msgstr "Remover primitiva de filtro" +msgstr "Remover perfil de cor associado" -#: ../src/ui/dialog/document-properties.cpp:636 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:673 msgid "Linked Color Profiles:" -msgstr "Grelha definidas" +msgstr "Perfis de Cor Associados ao Documento:" -#: ../src/ui/dialog/document-properties.cpp:638 +#: ../src/ui/dialog/document-properties.cpp:675 msgid "Available Color Profiles:" -msgstr "" +msgstr "Perfis de Cor Disponíveis:" -#: ../src/ui/dialog/document-properties.cpp:640 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:677 msgid "Link Profile" -msgstr "_Propriedades da Ligação" +msgstr "Associar Perfil" -#: ../src/ui/dialog/document-properties.cpp:643 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:680 msgid "Unlink Profile" -msgstr "_Propriedades da Ligação" +msgstr "Desassociar Perfil" -#: ../src/ui/dialog/document-properties.cpp:721 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:764 msgid "Profile Name" -msgstr "Renomear ficheiro" +msgstr "Nome do Perfil" -#: ../src/ui/dialog/document-properties.cpp:757 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:800 msgid "External scripts" -msgstr "Editar preenchimento..." +msgstr "Scripts externos" -#: ../src/ui/dialog/document-properties.cpp:758 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:801 msgid "Embedded scripts" -msgstr "Remover grelha" +msgstr "Scripts embutidos" -#: ../src/ui/dialog/document-properties.cpp:763 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:806 msgid "External script files:" -msgstr "Encaixando às guias" +msgstr "Ficheiros de scripts externos:" -#: ../src/ui/dialog/document-properties.cpp:765 +#: ../src/ui/dialog/document-properties.cpp:808 msgid "Add the current file name or browse for a file" -msgstr "" +msgstr "Adicionar o nome do ficheiro atual ou procurar um ficheiro" -#: ../src/ui/dialog/document-properties.cpp:768 -#: ../src/ui/dialog/document-properties.cpp:845 +#: ../src/ui/dialog/document-properties.cpp:811 +#: ../src/ui/dialog/document-properties.cpp:888 #: ../src/ui/widget/selected-style.cpp:357 msgid "Remove" msgstr "Remover" -#: ../src/ui/dialog/document-properties.cpp:832 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:875 msgid "Filename" -msgstr "Renomear ficheiro" +msgstr "Nome do ficheiro" -#: ../src/ui/dialog/document-properties.cpp:840 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:883 msgid "Embedded script files:" -msgstr "Encaixando às guias" +msgstr "Ficheiros script embutidos:" -#: ../src/ui/dialog/document-properties.cpp:842 +#: ../src/ui/dialog/document-properties.cpp:885 #: ../src/ui/dialog/objects.cpp:1894 -#, fuzzy msgid "New" msgstr "Novo" -#: ../src/ui/dialog/document-properties.cpp:909 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:952 msgid "Script id" -msgstr "Script" +msgstr "ID do script" -#: ../src/ui/dialog/document-properties.cpp:915 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:958 msgid "Content:" -msgstr "Expoente:" +msgstr "Conteúdo:" -#: ../src/ui/dialog/document-properties.cpp:1032 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1075 msgid "_Save as default" -msgstr "Ajustar como padrão" +msgstr "_Guardar como padrão" -#: ../src/ui/dialog/document-properties.cpp:1033 +#: ../src/ui/dialog/document-properties.cpp:1076 msgid "Save this metadata as the default metadata" -msgstr "" +msgstr "Guardar estes metadados como metadados padrão" -#: ../src/ui/dialog/document-properties.cpp:1034 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1077 msgid "Use _default" -msgstr "Ajustar como padrão" +msgstr "Usar _padrão" -#: ../src/ui/dialog/document-properties.cpp:1035 +#: ../src/ui/dialog/document-properties.cpp:1078 msgid "Use the previously saved default metadata here" -msgstr "" +msgstr "Usar os metadados padrão gravados anteriormente aqui" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1108 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1151 msgid "Add external script..." -msgstr "Editar preenchimento..." +msgstr "Adicionar script externo..." -#: ../src/ui/dialog/document-properties.cpp:1147 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1190 msgid "Select a script to load" -msgstr "O item não é uma forma ou caminho" +msgstr "Selecionar um script para carregar" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1175 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1218 msgid "Add embedded script..." -msgstr "Editar preenchimento..." +msgstr "Adicionar script embutido..." #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1206 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1249 msgid "Remove external script" -msgstr "Remover texto do caminho" +msgstr "Remover script externo" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1235 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1278 msgid "Remove embedded script" -msgstr "Remover grelha" +msgstr "Remover script embutido" #. TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text()); #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1331 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1374 msgid "Edit embedded script" -msgstr "Remover grelha" +msgstr "Editar script embutido" -#: ../src/ui/dialog/document-properties.cpp:1415 +#: ../src/ui/dialog/document-properties.cpp:1458 msgid "Creation" -msgstr " Criação " +msgstr "Criação" -#: ../src/ui/dialog/document-properties.cpp:1416 +#: ../src/ui/dialog/document-properties.cpp:1459 msgid "Defined grids" msgstr "Grelha definidas" -#: ../src/ui/dialog/document-properties.cpp:1660 +#: ../src/ui/dialog/document-properties.cpp:1703 msgid "Remove grid" msgstr "Remover grelha" -#: ../src/ui/dialog/document-properties.cpp:1752 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1795 msgid "Changed default display unit" -msgstr "Documento sem nome %d" +msgstr "Alterada a unidade padrão de visualização" #: ../src/ui/dialog/export.cpp:147 ../src/verbs.cpp:2887 msgid "_Page" @@ -16405,48 +15357,47 @@ msgid "Units:" msgstr "Unidades:" #: ../src/ui/dialog/export.cpp:167 -#, fuzzy msgid "_Export As..." -msgstr "_Exportar Bitmap..." +msgstr "_Exportar..." #: ../src/ui/dialog/export.cpp:170 -#, fuzzy msgid "B_atch export all selected objects" -msgstr "Exportar em grupo todos os objectos seleccionados" +msgstr "Exportar em _grupo todos os objetos selecionados" #: ../src/ui/dialog/export.cpp:170 msgid "" "Export each selected object into its own PNG file, using export hints if any " "(caution, overwrites without asking!)" msgstr "" -"Exportar cada objecto seleccionado para seu próprio ficheiro PNG " -"(sobrescreve sem perguntar)" +"Exportar cada um dos objetos selecionados ficheiros PNG separados, " +"utilizando a configuração de exportação (cuidado: grava por cima de " +"ficheiros existentes sem pedir confirmação!)" #: ../src/ui/dialog/export.cpp:172 -#, fuzzy msgid "Hide a_ll except selected" -msgstr "Ocultar tudo exceto seleccionado" +msgstr "_Ocultar tudo exceto o selecionado" #: ../src/ui/dialog/export.cpp:172 msgid "In the exported image, hide all objects except those that are selected" -msgstr "Na imagem exportada, ocultar todos os objectos exceto os seleccionados" +msgstr "" +"Na imagem exportada, ocultar todos os objetos exceto os que estão " +"selecionados" #: ../src/ui/dialog/export.cpp:173 msgid "Close when complete" -msgstr "" +msgstr "Fechar painel após concluído" #: ../src/ui/dialog/export.cpp:173 msgid "Once the export completes, close this dialog" -msgstr "" +msgstr "Após a exportação ser concluída, fechar este painel" #: ../src/ui/dialog/export.cpp:175 msgid "_Export" msgstr "_Exportar" #: ../src/ui/dialog/export.cpp:193 -#, fuzzy msgid "Export area" -msgstr "Exportar área" +msgstr "Ãrea a Exportar" #: ../src/ui/dialog/export.cpp:232 msgid "_x0:" @@ -16457,9 +15408,8 @@ msgid "x_1:" msgstr "x_1:" #: ../src/ui/dialog/export.cpp:240 -#, fuzzy msgid "Wid_th:" -msgstr "Largura:" +msgstr "_Largura:" #: ../src/ui/dialog/export.cpp:244 msgid "_y0:" @@ -16470,18 +15420,16 @@ msgid "y_1:" msgstr "y_1:" #: ../src/ui/dialog/export.cpp:252 -#, fuzzy msgid "Hei_ght:" -msgstr "Altura:" +msgstr "_Altura:" #: ../src/ui/dialog/export.cpp:267 -#, fuzzy msgid "Image size" -msgstr "Linha" +msgstr "Tamanho da imagem" #: ../src/ui/dialog/export.cpp:285 ../src/ui/dialog/export.cpp:296 msgid "pixels at" -msgstr "pixels em" +msgstr "píxeis a" #: ../src/ui/dialog/export.cpp:291 msgid "dp_i" @@ -16500,44 +15448,40 @@ msgid "dpi" msgstr "dpi" #: ../src/ui/dialog/export.cpp:312 -#, fuzzy msgid "_Filename" -msgstr "_Nome do ficheiro" +msgstr "Nome do _ficheiro" #: ../src/ui/dialog/export.cpp:354 msgid "Export the bitmap file with these settings" -msgstr "Exportar o ficheiro bitmap com estas configurações" +msgstr "Exportar o ficheiro com estas configurações" #: ../src/ui/dialog/export.cpp:479 -#, fuzzy msgid "bitmap" -msgstr "Bias" +msgstr "imagem bitmap" #: ../src/ui/dialog/export.cpp:614 -#, fuzzy, c-format +#, c-format msgid "B_atch export %d selected object" msgid_plural "B_atch export %d selected objects" -msgstr[0] "Exportar em grupo %d objectos seleccionados" -msgstr[1] "Exportar em grupo %d objectos seleccionados" +msgstr[0] "Exportar %d objeto selecionado" +msgstr[1] "Exportar %d objetos selecionados para ficheiros separados" #: ../src/ui/dialog/export.cpp:930 msgid "Export in progress" -msgstr "Exportação em progresso" +msgstr "A exportar" #: ../src/ui/dialog/export.cpp:1022 -#, fuzzy msgid "No items selected." -msgstr "Nenhum efeito seleccionado" +msgstr "Nenhum item selecionado." #: ../src/ui/dialog/export.cpp:1026 ../src/ui/dialog/export.cpp:1028 -#, fuzzy msgid "Exporting %1 files" -msgstr "Exportando %d ficheiros" +msgstr "A exportar %1 ficheiros" #: ../src/ui/dialog/export.cpp:1069 ../src/ui/dialog/export.cpp:1071 -#, fuzzy, c-format +#, c-format msgid "Exporting file %s..." -msgstr "Exportando %d ficheiros" +msgstr "A exportar ficheiro %s..." #: ../src/ui/dialog/export.cpp:1080 ../src/ui/dialog/export.cpp:1172 #, c-format @@ -16545,28 +15489,28 @@ msgid "Could not export to filename %s.\n" msgstr "Não foi possível exportar para o ficheiro %s.\n" #: ../src/ui/dialog/export.cpp:1083 -#, fuzzy, c-format +#, c-format msgid "Could not export to filename %s." -msgstr "Não foi possível exportar para o ficheiro %s.\n" +msgstr "Não foi possível exportar para o ficheiro %s." #: ../src/ui/dialog/export.cpp:1098 #, c-format msgid "Successfully exported %d files from %d selected items." msgstr "" +"Exportação para %d ficheiros de %d itens selecionados " +"concluída." #: ../src/ui/dialog/export.cpp:1109 -#, fuzzy msgid "You have to enter a filename." -msgstr "Você deve informar um nome de ficheiro" +msgstr "Tem de introduzir um nome do ficheiro." #: ../src/ui/dialog/export.cpp:1110 msgid "You have to enter a filename" -msgstr "Você deve informar um nome de ficheiro" +msgstr "Tem de introduzir um nome do ficheiro" #: ../src/ui/dialog/export.cpp:1124 -#, fuzzy msgid "The chosen area to be exported is invalid." -msgstr "A área escolhida para ser exportada não é válida" +msgstr "A área escolhida para ser exportada não é válida." #: ../src/ui/dialog/export.cpp:1125 msgid "The chosen area to be exported is invalid" @@ -16579,31 +15523,28 @@ msgstr "A pasta %s não existe ou não é uma pasta.\n" #. TRANSLATORS: %1 will be the filename, %2 the width, and %3 the height of the image #: ../src/ui/dialog/export.cpp:1154 ../src/ui/dialog/export.cpp:1156 -#, fuzzy msgid "Exporting %1 (%2 x %3)" -msgstr "A exportar %s (%lu x %lu)" +msgstr "A exportar %1 (%2 x %3)" #: ../src/ui/dialog/export.cpp:1183 -#, fuzzy, c-format +#, c-format msgid "Drawing exported to %s." -msgstr "Parâmetro de edição %s." +msgstr "Desenho exportado para %s." #: ../src/ui/dialog/export.cpp:1187 -#, fuzzy msgid "Export aborted." -msgstr "Exportação em progresso" +msgstr "Exportação interrompida." #: ../src/ui/dialog/export.cpp:1308 ../src/ui/interface.cpp:1401 #: ../src/widgets/desktop-widget.cpp:1201 #: ../src/widgets/desktop-widget.cpp:1263 -#, fuzzy msgid "_Cancel" -msgstr "Cancelar" +msgstr "_Cancelar" #: ../src/ui/dialog/export.cpp:1309 ../src/ui/dialog/input.cpp:1082 #: ../src/verbs.cpp:2432 ../src/widgets/desktop-widget.cpp:1202 msgid "_Save" -msgstr "_Guardar" +msgstr "_Gravar" #: ../src/ui/dialog/extension-editor.cpp:81 msgid "Information" @@ -16664,18 +15605,16 @@ msgstr "Parâmetros" #. Fill in the template #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:427 -#, fuzzy msgid "No preview" -msgstr "Pré-visualizar" +msgstr "Sem pré-visualização" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:531 msgid "too large for preview" -msgstr "" +msgstr "demasiado grande para prever" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:617 -#, fuzzy msgid "Enable preview" -msgstr "Pré-Visualizar Ao Vivo" +msgstr "Ativar pré-visualização" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:767 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:780 @@ -16686,105 +15625,92 @@ msgstr "Pré-Visualizar Ao Vivo" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:826 #: ../src/ui/dialog/filedialogimpl-win32.cpp:286 #: ../src/ui/dialog/filedialogimpl-win32.cpp:417 -#, fuzzy msgid "All Files" -msgstr "Todos os tipos" +msgstr "Todos os Ficheiros" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:792 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:808 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:823 #: ../src/ui/dialog/filedialogimpl-win32.cpp:287 -#, fuzzy msgid "All Inkscape Files" -msgstr "Todas as formas" +msgstr "Todos os Ficheiros Inkscape" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:799 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:815 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:829 #: ../src/ui/dialog/filedialogimpl-win32.cpp:288 -#, fuzzy msgid "All Images" -msgstr "Embutir Todas as Imagens" +msgstr "Todas as Imagens" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:802 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:818 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:832 #: ../src/ui/dialog/filedialogimpl-win32.cpp:289 -#, fuzzy msgid "All Vectors" -msgstr "Seletor" +msgstr "Todos os Ficheiros Vetoriais" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:805 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:821 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:835 #: ../src/ui/dialog/filedialogimpl-win32.cpp:290 -#, fuzzy msgid "All Bitmaps" -msgstr "Bias" +msgstr "Todos os Ficheiros Bitmap" #. ###### File options #. ###### Do we want the .xxx extension automatically added? #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1054 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1612 msgid "Append filename extension automatically" -msgstr "" +msgstr "Adicionar extensão automaticamente" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1227 #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1480 -#, fuzzy msgid "Guess from extension" -msgstr "Obter da selecção" +msgstr "Adivinhar da extensão" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1499 msgid "Left edge of source" -msgstr "" +msgstr "Borda esquerda da fonte" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1500 msgid "Top edge of source" -msgstr "" +msgstr "Borda superior da fonte" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1501 -#, fuzzy msgid "Right edge of source" -msgstr "Nova fonte de luz" +msgstr "Borda direita da fonte" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1502 msgid "Bottom edge of source" -msgstr "" +msgstr "Borda inferior da fonte" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1503 -#, fuzzy msgid "Source width" -msgstr "Escala de largura" +msgstr "Largura da fonte" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1504 -#, fuzzy msgid "Source height" -msgstr "Altura da Barra:" +msgstr "Altura da fonte" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1505 -#, fuzzy msgid "Destination width" -msgstr "Destino da impressão" +msgstr "Largura do destino" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1506 -#, fuzzy msgid "Destination height" -msgstr "Luz Distante" +msgstr "Altura do destino" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1507 -#, fuzzy msgid "Resolution (dots per inch)" -msgstr "Resolução preferida para a figura (pontos por polegada)" +msgstr "Resolução (pontos por polegada)" #. ######################################### #. ## EXTRA WIDGET -- SOURCE SIDE #. ######################################### #. ##### Export options buttons/spinners, etc #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1545 -#, fuzzy msgid "Document" -msgstr "Desenho SVG" +msgstr "Documento" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1553 ../src/verbs.cpp:175 #: ../src/widgets/desktop-widget.cpp:2091 @@ -16793,10 +15719,9 @@ msgid "Selection" msgstr "Seleção" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1557 -#, fuzzy msgctxt "Export dialog" msgid "Custom" -msgstr "_Personalizado" +msgstr "Personalizado" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1577 msgid "Source" @@ -16804,41 +15729,36 @@ msgstr "Fonte" # Não sei se a traducao é essa mesmo... essa é traducao literal - krishna #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1597 -#, fuzzy msgid "Cairo" -msgstr "Carvão" +msgstr "Cairo" #: ../src/ui/dialog/filedialogimpl-gtkmm.cpp:1600 msgid "Antialias" -msgstr "" +msgstr "Anti-serrilhado" #: ../src/ui/dialog/filedialogimpl-win32.cpp:418 -#, fuzzy msgid "All Executable Files" -msgstr "Embutir Todas as Imagens" +msgstr "Todos os Ficheiros Executáveis" #: ../src/ui/dialog/filedialogimpl-win32.cpp:610 -#, fuzzy msgid "Show Preview" -msgstr "Pré-visualizar" +msgstr "Mostrar Pré-Visualização" #: ../src/ui/dialog/filedialogimpl-win32.cpp:748 -#, fuzzy msgid "No file selected" -msgstr "Nenhum efeito seleccionado" +msgstr "Nenhum ficheiro selecionado" #: ../src/ui/dialog/fill-and-stroke.cpp:62 -#, fuzzy msgid "_Fill" -msgstr "Preenchimento" +msgstr "_Preenchimento" #: ../src/ui/dialog/fill-and-stroke.cpp:63 msgid "Stroke _paint" -msgstr "_Pintura de traço" +msgstr "_Pintura do traço" #: ../src/ui/dialog/fill-and-stroke.cpp:64 msgid "Stroke st_yle" -msgstr "Estilo de traço" +msgstr "_Estilo do traço" #. TRANSLATORS: this dialog is accessible via menu Filters - Filter editor #: ../src/ui/dialog/filter-effects-dialog.cpp:547 @@ -16848,62 +15768,58 @@ msgid "" "component from the input is passed to the output. The last column does not " "depend on input colors, so can be used to adjust a constant component value." msgstr "" +"Esta matriz determina uma transformação linear no espaço de cor. Cada linha " +"afeta um dos componentes de cor. Cada coluna determina quanto de cada " +"componente de cor de entrada é passado para a saída. A última coluna não " +"depende das cores de entrada, por isso pode ser usada para ajustar um valor " +"de componente constante." #: ../src/ui/dialog/filter-effects-dialog.cpp:550 #: ../share/extensions/grid_polar.inx.h:4 -#, fuzzy msgctxt "Label" msgid "None" msgstr "Nenhum" #: ../src/ui/dialog/filter-effects-dialog.cpp:657 -#, fuzzy msgid "Image File" -msgstr "Imagem" +msgstr "Ficheiro de Imagem" #: ../src/ui/dialog/filter-effects-dialog.cpp:660 -#, fuzzy msgid "Selected SVG Element" -msgstr "Eliminar Segmento" +msgstr "Elemento SVG Selecionado" #. TODO: any image, not just svg #: ../src/ui/dialog/filter-effects-dialog.cpp:730 -#, fuzzy msgid "Select an image to be used as feImage input" -msgstr "Seleccione uma imagem e uma ou mais formas acima dela" +msgstr "Selecionar uma imagem a ser usada como entrada feImage" #: ../src/ui/dialog/filter-effects-dialog.cpp:822 msgid "This SVG filter effect does not require any parameters." -msgstr "" +msgstr "Este efeito de filtro SVG não requer parâmetros." #: ../src/ui/dialog/filter-effects-dialog.cpp:828 msgid "This SVG filter effect is not yet implemented in Inkscape." -msgstr "" +msgstr "Este efeito de filtro SVG ainda não está implementado no Inkscape." #: ../src/ui/dialog/filter-effects-dialog.cpp:1042 -#, fuzzy msgid "Slope" -msgstr "Envelope" +msgstr "Inclinar" #: ../src/ui/dialog/filter-effects-dialog.cpp:1043 -#, fuzzy msgid "Intercept" msgstr "Interceptar" #: ../src/ui/dialog/filter-effects-dialog.cpp:1046 -#, fuzzy msgid "Amplitude" msgstr "Amplitude" #: ../src/ui/dialog/filter-effects-dialog.cpp:1047 -#, fuzzy msgid "Exponent" msgstr "Expoente" #: ../src/ui/dialog/filter-effects-dialog.cpp:1144 -#, fuzzy msgid "New transfer function type" -msgstr "Todos os tipos" +msgstr "Novo tipo de função de transferência" #: ../src/ui/dialog/filter-effects-dialog.cpp:1179 msgid "Light Source:" @@ -16911,41 +15827,37 @@ msgstr "Fonte de Luz:" #: ../src/ui/dialog/filter-effects-dialog.cpp:1196 msgid "Direction angle for the light source on the XY plane, in degrees" -msgstr "" +msgstr "Ângulo de direção para a fonte de luz no plano XY, em graus" #: ../src/ui/dialog/filter-effects-dialog.cpp:1197 msgid "Direction angle for the light source on the YZ plane, in degrees" -msgstr "" +msgstr "Ângulo de direção para a fonte de luz no plano YZ, em graus" #. default x: #. default y: #. default z: #: ../src/ui/dialog/filter-effects-dialog.cpp:1200 #: ../src/ui/dialog/filter-effects-dialog.cpp:1203 -#, fuzzy msgid "Location:" -msgstr "Localização" +msgstr "Localização:" #: ../src/ui/dialog/filter-effects-dialog.cpp:1200 #: ../src/ui/dialog/filter-effects-dialog.cpp:1203 #: ../src/ui/dialog/filter-effects-dialog.cpp:1206 -#, fuzzy msgid "X coordinate" -msgstr "Coordenada X:" +msgstr "Coordenada X" #: ../src/ui/dialog/filter-effects-dialog.cpp:1200 #: ../src/ui/dialog/filter-effects-dialog.cpp:1203 #: ../src/ui/dialog/filter-effects-dialog.cpp:1206 -#, fuzzy msgid "Y coordinate" -msgstr "Coordenada Y:" +msgstr "Coordenada Y" #: ../src/ui/dialog/filter-effects-dialog.cpp:1200 #: ../src/ui/dialog/filter-effects-dialog.cpp:1203 #: ../src/ui/dialog/filter-effects-dialog.cpp:1206 -#, fuzzy msgid "Z coordinate" -msgstr "Coordenada X:" +msgstr "Coordenada Z" #: ../src/ui/dialog/filter-effects-dialog.cpp:1206 msgid "Points At" @@ -16957,12 +15869,12 @@ msgstr "Exponente Especular" #: ../src/ui/dialog/filter-effects-dialog.cpp:1207 msgid "Exponent value controlling the focus for the light source" -msgstr "" +msgstr "Valor exponente que controla o foco para a fonte de luz" #. TODO: here I have used 100 degrees as default value. But spec says that if not specified, no limiting cone is applied. So, there should be a way for the user to set a "no limiting cone" option. #: ../src/ui/dialog/filter-effects-dialog.cpp:1209 msgid "Cone Angle" -msgstr "Ângulo de Cone" +msgstr "Ângulo do Cone" #: ../src/ui/dialog/filter-effects-dialog.cpp:1209 msgid "" @@ -16970,6 +15882,9 @@ msgid "" "light source and the point to which it is pointing at) and the spot light " "cone. No light is projected outside this cone." msgstr "" +"Isto é o ângulo entre o eixo do foco de luz (isto é, o eixo entre a fonte de " +"luz e o ponto para o qual aponta) e o cone do foco de luz. Nenhuma luz é " +"projetada fora deste cone." #: ../src/ui/dialog/filter-effects-dialog.cpp:1275 msgid "New light source" @@ -16981,24 +15896,23 @@ msgstr "_Duplicar" #: ../src/ui/dialog/filter-effects-dialog.cpp:1360 msgid "_Filter" -msgstr "_Filtrar" +msgstr "_Filtro" #: ../src/ui/dialog/filter-effects-dialog.cpp:1388 msgid "R_ename" -msgstr "R_enomear" +msgstr "_Alterar Nome" #: ../src/ui/dialog/filter-effects-dialog.cpp:1522 msgid "Rename filter" -msgstr "Renomear filtro" +msgstr "Alterar nome do filtro" #: ../src/ui/dialog/filter-effects-dialog.cpp:1574 msgid "Apply filter" msgstr "Aplicar filtro" #: ../src/ui/dialog/filter-effects-dialog.cpp:1654 -#, fuzzy msgid "filter" -msgstr "_Filtrar" +msgstr "filtro" #: ../src/ui/dialog/filter-effects-dialog.cpp:1661 msgid "Add filter" @@ -17014,19 +15928,17 @@ msgstr "_Efeito" #: ../src/ui/dialog/filter-effects-dialog.cpp:1820 msgid "Connections" -msgstr "Conexões" +msgstr "Ligações" #: ../src/ui/dialog/filter-effects-dialog.cpp:1958 msgid "Remove filter primitive" msgstr "Remover primitiva de filtro" #: ../src/ui/dialog/filter-effects-dialog.cpp:2545 -#, fuzzy msgid "Remove merge node" -msgstr "Remover verde" +msgstr "Remover nó de união" #: ../src/ui/dialog/filter-effects-dialog.cpp:2665 -#, fuzzy msgid "Reorder filter primitive" msgstr "Reordenar primitiva de filtro" @@ -17036,54 +15948,48 @@ msgstr "Adicionar Efeito:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2746 msgid "No effect selected" -msgstr "Nenhum efeito seleccionado" +msgstr "Nenhum efeito selecionado" #: ../src/ui/dialog/filter-effects-dialog.cpp:2747 -#, fuzzy msgid "No filter selected" -msgstr "Nenhum efeito seleccionado" +msgstr "Nenhum filtro selecionado" #: ../src/ui/dialog/filter-effects-dialog.cpp:2814 -#, fuzzy msgid "Effect parameters" -msgstr "Parâmetros de efeitos" +msgstr "Parâmetros do efeito" #: ../src/ui/dialog/filter-effects-dialog.cpp:2815 msgid "Filter General Settings" -msgstr "" +msgstr "Definições Gerais do Filtro" #. default x: #. default y: #: ../src/ui/dialog/filter-effects-dialog.cpp:2875 -#, fuzzy msgid "Coordinates:" -msgstr "Coordenadas do cursor" +msgstr "Coordenadas:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2875 -#, fuzzy msgid "X coordinate of the left corners of filter effects region" -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "Coordenada X dos cantos esquerdos da região dos filtros de efeitos" #: ../src/ui/dialog/filter-effects-dialog.cpp:2875 msgid "Y coordinate of the upper corners of filter effects region" msgstr "" +"Coordenada Y dos cantos esquerdos da região dos filtros de efeitosselec" #. default width: #. default height: #: ../src/ui/dialog/filter-effects-dialog.cpp:2876 -#, fuzzy msgid "Dimensions:" -msgstr "Divisão" +msgstr "Dimensões:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2876 -#, fuzzy msgid "Width of filter effects region" -msgstr "Largura da selecção" +msgstr "Largura da região de efeitos de filtros" #: ../src/ui/dialog/filter-effects-dialog.cpp:2876 -#, fuzzy msgid "Height of filter effects region" -msgstr "Altura da selecção" +msgstr "Altura da região de efeitos de filtros" #: ../src/ui/dialog/filter-effects-dialog.cpp:2882 msgid "" @@ -17092,43 +15998,40 @@ msgid "" "convenience shortcuts to allow commonly used color operations to be " "performed without specifying a complete matrix." msgstr "" +"Indica o tipo da operação de matriz. A palavra-chave 'matriz' indica que " +"será fornecida uma matriz completa de 5x4 de valores. As outras palavras-" +"chave representam atalhos de conveniência para permitir operações de cor " +"normalmente usadas a serem utilizadas sem especificar a matriz completa." #: ../src/ui/dialog/filter-effects-dialog.cpp:2883 -#, fuzzy msgid "Value(s):" -msgstr "Valore(s)" +msgstr "Valores:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2887 -#, fuzzy msgid "R:" -msgstr "Rx:" +msgstr "R:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2888 #: ../src/ui/widget/color-icc-selector.cpp:180 -#, fuzzy msgid "G:" -msgstr "_G" +msgstr "G:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2889 -#, fuzzy msgid "B:" -msgstr "_B" +msgstr "B:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2890 -#, fuzzy msgid "A:" -msgstr "_A" +msgstr "T:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2893 #: ../src/ui/dialog/filter-effects-dialog.cpp:2933 -#, fuzzy msgid "Operator:" -msgstr "Operador" +msgstr "Operador:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2894 -#, fuzzy msgid "K1:" -msgstr "K1" +msgstr "K1:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2894 #: ../src/ui/dialog/filter-effects-dialog.cpp:2895 @@ -17139,35 +16042,33 @@ msgid "" "the formula k1*i1*i2 + k2*i1 + k3*i2 + k4 where i1 and i2 are the pixel " "values of the first and second inputs respectively." msgstr "" +"Se for escolhida a operação aritmética, cada píxel resultante é processado " +"utilizando a fórmula k1*i1*i2 + k2*i1 + k3*i2 + k4 onde i1 e i2 são os " +"valores do píxel da primeira e segunda entrada respetivamente." #: ../src/ui/dialog/filter-effects-dialog.cpp:2895 -#, fuzzy msgid "K2:" -msgstr "K2" +msgstr "K2:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2896 -#, fuzzy msgid "K3:" -msgstr "K3" +msgstr "K3:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2897 -#, fuzzy msgid "K4:" -msgstr "K4" +msgstr "K4:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2900 msgid "Size:" msgstr "Tamanho:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2900 -#, fuzzy msgid "width of the convolve matrix" -msgstr "Largura do padrão" +msgstr "largura da matriz de convulsão" #: ../src/ui/dialog/filter-effects-dialog.cpp:2900 -#, fuzzy msgid "height of the convolve matrix" -msgstr "Altura do retângulo a ser preenchido" +msgstr "altura da matriz de convulsão" #. default x: #. default y: @@ -17181,18 +16082,21 @@ msgid "" "X coordinate of the target point in the convolve matrix. The convolution is " "applied to pixels around this point." msgstr "" +"Coordenada X do ponto alvo na matriz de convulsão (enrolar). A convulsão é " +"aplicada aos píxeis à volta deste ponto." #: ../src/ui/dialog/filter-effects-dialog.cpp:2901 msgid "" "Y coordinate of the target point in the convolve matrix. The convolution is " "applied to pixels around this point." msgstr "" +"Coordenada Y do ponto alvo na matriz de convulsão (enrolar). A convulsão é " +"aplicada aos píxeis à volta deste ponto." #. TRANSLATORS: for info on "Kernel", see http://en.wikipedia.org/wiki/Kernel_(matrix) #: ../src/ui/dialog/filter-effects-dialog.cpp:2903 -#, fuzzy msgid "Kernel:" -msgstr "Kernel" +msgstr "Núcleo:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2903 msgid "" @@ -17203,11 +16107,16 @@ msgid "" "the matrix diagonal) while a matrix filled with a constant non-zero value " "would lead to a common blur effect." msgstr "" +"Esta matriz descreve a operação de convolver (enrolar) que é aplicada à " +"imagem de forma a calcular as cores dos píxeis na imagem resultante. " +"Arranjos diferentes nos valores desta matriz resultam em vários efeitos " +"possíveis. Uma matriz de entidade conduzirá a um efeito de desfocado de " +"movimento (paralelo à diagonal da matriz) enquanto que uma matriz preenchida " +"com um valor constante não zero levará a um efeito de desfocado comum." #: ../src/ui/dialog/filter-effects-dialog.cpp:2905 -#, fuzzy msgid "Divisor:" -msgstr "Divisor" +msgstr "Divisor:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2905 msgid "" @@ -17216,22 +16125,26 @@ msgid "" "divisor that is the sum of all the matrix values tends to have an evening " "effect on the overall color intensity of the result." msgstr "" +"Após aplicar a matriz de núcleo (kernelMatrix) à imagem para ceder um " +"número, esse número é dividido por um divisor para ceder o valor da cor de " +"destino final. Um divisor que seja a soma de todos os valores da matriz " +"tende a ter um efeito terminal na intensidade de cor geral do resultado." #: ../src/ui/dialog/filter-effects-dialog.cpp:2906 -#, fuzzy msgid "Bias:" -msgstr "Bias" +msgstr "Tendência:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2906 msgid "" "This value is added to each component. This is useful to define a constant " "value as the zero response of the filter." msgstr "" +"Este valor é adicionado a cada componente. Isto é útil para definir um valor " +"constante como a resposta zero do filtro." #: ../src/ui/dialog/filter-effects-dialog.cpp:2907 -#, fuzzy msgid "Edge Mode:" -msgstr "Modo Limite" +msgstr "Modo Borda:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2907 msgid "" @@ -17239,32 +16152,34 @@ msgid "" "that the matrix operations can be applied when the kernel is positioned at " "or near the edge of the input image." msgstr "" +"Determina como estender a imagem conforme necessário com valores de cor para " +"que a operação de matriz possa ser aplicada quando o núcleo é posicionado em " +"ou perto da borda da imagem." #: ../src/ui/dialog/filter-effects-dialog.cpp:2908 -#, fuzzy msgid "Preserve Alpha" -msgstr "Preservada" +msgstr "Manter Transparência" #: ../src/ui/dialog/filter-effects-dialog.cpp:2908 msgid "If set, the alpha channel won't be altered by this filter primitive." msgstr "" +"Se definido, o canal de transparência (alfa) não será alterado por este " +"filtro." #. default: white #: ../src/ui/dialog/filter-effects-dialog.cpp:2911 -#, fuzzy msgid "Diffuse Color:" -msgstr "Cores Visíveis" +msgstr "Cor Difusa:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2911 #: ../src/ui/dialog/filter-effects-dialog.cpp:2944 msgid "Defines the color of the light source" -msgstr "" +msgstr "Define a cor da fonte de luz" #: ../src/ui/dialog/filter-effects-dialog.cpp:2912 #: ../src/ui/dialog/filter-effects-dialog.cpp:2945 -#, fuzzy msgid "Surface Scale:" -msgstr "Escala da Superfície" +msgstr "Escala da Superfície:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2912 #: ../src/ui/dialog/filter-effects-dialog.cpp:2945 @@ -17272,143 +16187,138 @@ msgid "" "This value amplifies the heights of the bump map defined by the input alpha " "channel" msgstr "" +"Este valor amplifica a altura do mapa de saliência definido pelo canal de " +"transparência" #: ../src/ui/dialog/filter-effects-dialog.cpp:2913 #: ../src/ui/dialog/filter-effects-dialog.cpp:2946 -#, fuzzy msgid "Constant:" -msgstr "Constante" +msgstr "Constante:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2913 #: ../src/ui/dialog/filter-effects-dialog.cpp:2946 msgid "This constant affects the Phong lighting model." -msgstr "" +msgstr "Esta constante afeta o modelo de luz Phong." #: ../src/ui/dialog/filter-effects-dialog.cpp:2914 #: ../src/ui/dialog/filter-effects-dialog.cpp:2948 msgid "Kernel Unit Length:" -msgstr "" +msgstr "Comprimento da Unidade do Núcleo:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2918 msgid "This defines the intensity of the displacement effect." -msgstr "" +msgstr "Isto define a intensidade do efeito de deslocamento." #: ../src/ui/dialog/filter-effects-dialog.cpp:2919 -#, fuzzy msgid "X displacement:" -msgstr "Mapa de Deslocamento" +msgstr "Deslocamento X:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2919 msgid "Color component that controls the displacement in the X direction" -msgstr "" +msgstr "Componente da cor que controla o deslocamento na direção X" #: ../src/ui/dialog/filter-effects-dialog.cpp:2920 -#, fuzzy msgid "Y displacement:" -msgstr "Mapa de Deslocamento" +msgstr "Deslocamento Y:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2920 msgid "Color component that controls the displacement in the Y direction" -msgstr "" +msgstr "Componente da cor que controla o deslocamento na direção Y" #. default: black #: ../src/ui/dialog/filter-effects-dialog.cpp:2923 -#, fuzzy msgid "Flood Color:" -msgstr "Flood Color" +msgstr "Cor de Inundar:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2923 msgid "The whole filter region will be filled with this color." -msgstr "" +msgstr "Toda a região do filtro será preenchida com esta cor." #: ../src/ui/dialog/filter-effects-dialog.cpp:2927 -#, fuzzy msgid "Standard Deviation:" -msgstr "Desvio Padrão" +msgstr "Desvio Padrão:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2927 msgid "The standard deviation for the blur operation." -msgstr "" +msgstr "O desvio padrão para a operação de desfocagem." #: ../src/ui/dialog/filter-effects-dialog.cpp:2933 msgid "" "Erode: performs \"thinning\" of input image.\n" "Dilate: performs \"fattenning\" of input image." msgstr "" +"Erosão: faz o \"estreitamento\" da imagem.\n" +"Dilatação: faz o \"alargamento\" da imagem." #: ../src/ui/dialog/filter-effects-dialog.cpp:2937 -#, fuzzy msgid "Source of Image:" -msgstr "Número de páginas" +msgstr "Fonte da Imagem:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2940 -#, fuzzy msgid "Delta X:" -msgstr "Delta X" +msgstr "Delta X:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2940 msgid "This is how far the input image gets shifted to the right" -msgstr "" +msgstr "Isto é quão longe a imagem de entrada é deslocada para a direita" #: ../src/ui/dialog/filter-effects-dialog.cpp:2941 -#, fuzzy msgid "Delta Y:" -msgstr "Delta Y" +msgstr "Delta Y:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2941 msgid "This is how far the input image gets shifted downwards" -msgstr "" +msgstr "Isto é quão longe a imagem de entrada é deslocada para baixo" #. default: white #: ../src/ui/dialog/filter-effects-dialog.cpp:2944 -#, fuzzy msgid "Specular Color:" -msgstr "Cor especular" +msgstr "Cor Especular:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2947 #: ../share/extensions/interp.inx.h:2 -#, fuzzy msgid "Exponent:" -msgstr "Expoente" +msgstr "Expoente:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2947 msgid "Exponent for specular term, larger is more \"shiny\"." msgstr "" +"Exponente para o termo especular, quanto maior o valor mais é brilhante, " +"mais luz reflete." #: ../src/ui/dialog/filter-effects-dialog.cpp:2956 msgid "" "Indicates whether the filter primitive should perform a noise or turbulence " "function." -msgstr "" +msgstr "Indica se um filtro deve fazer uma função ruído ou turbulência." #: ../src/ui/dialog/filter-effects-dialog.cpp:2957 -#, fuzzy msgid "Base Frequency:" -msgstr "Freqüência Base" +msgstr "Frequência Base:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2958 -#, fuzzy msgid "Octaves:" -msgstr "Oitavos" +msgstr "Oitavos:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2959 -#, fuzzy msgid "Seed:" -msgstr "Velocidade:" +msgstr "Semear:" #: ../src/ui/dialog/filter-effects-dialog.cpp:2959 msgid "The starting number for the pseudo random number generator." -msgstr "" +msgstr "O número inicial do pseudo gerador de números aleatórios." #: ../src/ui/dialog/filter-effects-dialog.cpp:2971 msgid "Add filter primitive" -msgstr "Adicionar filtro " +msgstr "Adicionar filtro" #: ../src/ui/dialog/filter-effects-dialog.cpp:2986 msgid "" "The feBlend filter primitive provides 4 image blending modes: screen, " "multiply, darken and lighten." msgstr "" +"O filtro feBlend fornece 4 modos de mistura de imagem: ecrã, " +"multiplicar, mais escuro e mais claro." #: ../src/ui/dialog/filter-effects-dialog.cpp:2990 msgid "" @@ -17416,6 +16326,9 @@ msgid "" "color of each rendered pixel. This allows for effects like turning object to " "grayscale, modifying color saturation and changing color hue." msgstr "" +"O feColorMatrix aplica uma matriz de transformação para colorir cada " +"píxel renderizado. Isto permite efeitos como tornar um objeto em escala de " +"cinza, alterar a saturação da cor e alterar a matiz da cor." #: ../src/ui/dialog/filter-effects-dialog.cpp:2994 msgid "" @@ -17424,6 +16337,10 @@ msgid "" "transfer functions, allowing operations like brightness and contrast " "adjustment, color balance, and thresholding." msgstr "" +"O filtro feComponentTransfer manipula a entrada dos componentes de " +"cor (vermelho, verde, azul e trasnparência) de acordo com funções " +"particulares de transferência, permitindo operações como o ajuste da " +"luminosidade, contraste, balanço de cores e limiar." #: ../src/ui/dialog/filter-effects-dialog.cpp:2998 msgid "" @@ -17432,6 +16349,10 @@ msgid "" "standard. Porter-Duff blending modes are essentially logical operations " "between the corresponding pixel values of the images." msgstr "" +"O filtro feComposite mistura 2 imagens utilizando um dos modos de " +"mistura Porter-Duff ou o modo aritmético descrito no padrão SVG. Os modos de " +"mistura Porter-Duff são essencialmente operações lógicas entre os valores " +"correspondentes de píxeis das imagens." #: ../src/ui/dialog/filter-effects-dialog.cpp:3002 msgid "" @@ -17441,6 +16362,12 @@ msgid "" "be created using this filter primitive, the special gaussian blur primitive " "is faster and resolution-independent." msgstr "" +"O feConvolveMatrix permite especificar uma Convulção (aspeto " +"enrolado) a ser aplicada na imagem. Os efeitos comuns criados utilizando " +"matrizes de convulção são desfocar, nitidez, alto relevo e deteção de " +"bordas. Notar que apesar do desfocar gaussiano poder ser criado utilizando a " +"primitiva deste filtro, a primitiva especial de desfocagem gaussiana é mais " +"rápida e é independente da resolução." #: ../src/ui/dialog/filter-effects-dialog.cpp:3006 msgid "" @@ -17449,6 +16376,11 @@ msgid "" "information: higher opacity areas are raised toward the viewer and lower " "opacity areas recede away from the viewer." msgstr "" +"Os filtros feDiffuseLighting e feSpecularLighting criam " +"sombreados em \"alto relevo\". O canal de transparência de entrada é " +"utilizado para fornecer informação de profundidade: as áreas com menos " +"transparência são levantadas na direção do observador e as áreas com mais " +"transparência são afastadas do observador." #: ../src/ui/dialog/filter-effects-dialog.cpp:3010 msgid "" @@ -17457,6 +16389,10 @@ msgid "" "how far the pixel should come from. Classical examples are whirl and pinch " "effects." msgstr "" +"O filtro feDisplacementMap desloca os píxeis na primeira fonte " +"utilizando a segunda fonte como um mapa de deslocamento. Isso mostra quão " +"longe o píxel se deve deslocar. Exemplos clássicos são os efeitos de rodar e " +"apertar." #: ../src/ui/dialog/filter-effects-dialog.cpp:3014 msgid "" @@ -17464,18 +16400,26 @@ msgid "" "opacity. It is usually used as an input to other filters to apply color to " "a graphic." msgstr "" +"O filtro feFlood preenche a região com uma cor e opacidade definidos. " +"É normalmente utilizado como entrada para outros filtros para aplicar cor a " +"um gráfico." #: ../src/ui/dialog/filter-effects-dialog.cpp:3018 msgid "" "The feGaussianBlur filter primitive uniformly blurs its input. It is " "commonly used together with feOffset to create a drop shadow effect." msgstr "" +"O filtro feGaussianBlur desfoca uniformemente a entrada. É utilizado " +"normalmente em conjunto com o filtro feOffset para criar um efeito de sombra " +"caída." #: ../src/ui/dialog/filter-effects-dialog.cpp:3022 msgid "" "The feImage filter primitive fills the region with an external image " "or another part of the document." msgstr "" +"O filtro feImage preenche a região com uma imagem externa ou com " +"outra parte do documento." #: ../src/ui/dialog/filter-effects-dialog.cpp:3026 msgid "" @@ -17484,6 +16428,10 @@ msgid "" "compositing for this. This is equivalent to using several feBlend primitives " "in 'normal' mode or several feComposite primitives in 'over' mode." msgstr "" +"O filtro feMerge mistura temporariamente várias imagens dentor do " +"filtro numa só imagem. Para isso usa a mistura normal do canal de " +"transparência. Isto é o equivalente a usar vários filtros feBlend (mistura) " +"no modo 'normal' ou vários feComposite (mistura) no modo por 'cima'." #: ../src/ui/dialog/filter-effects-dialog.cpp:3030 msgid "" @@ -17491,6 +16439,9 @@ msgid "" "For single-color objects erode makes the object thinner and dilate makes it " "thicker." msgstr "" +"O filtro feMorphology faz efeitos de erosão e dilatação. Para objetos " +"de uma só cor, a erosão torna o objeto mais fino e o dilatar torna-os mais " +"grossos." #: ../src/ui/dialog/filter-effects-dialog.cpp:3034 msgid "" @@ -17498,6 +16449,9 @@ msgid "" "amount. For example, this is useful for drop shadows, where the shadow is in " "a slightly different position than the actual object." msgstr "" +"O filtro feOffset desloca a imagem numa distância fornecida. Por " +"exemplo, isto é útil para sombras caídas, onde a sombra está numa posição " +"ligeiramente diferente do objeto atual." #: ../src/ui/dialog/filter-effects-dialog.cpp:3038 msgid "" @@ -17506,12 +16460,19 @@ msgid "" "depth information: higher opacity areas are raised toward the viewer and " "lower opacity areas recede away from the viewer." msgstr "" +"Os filtros feDiffuseLighting e feSpecularLighting criam " +"sombreados em \"alto relevo\". O canal de transparência de entrada é " +"utilizado para fornecer informação de profundidade: as áreas com menos " +"transparência são levantadas na direção do observador e as áreas com mais " +"transparência são afastadas do observador." #: ../src/ui/dialog/filter-effects-dialog.cpp:3042 msgid "" "The feTile filter primitive tiles a region with an input graphic. The " "source tile is defined by the filter primitive subregion of the input." msgstr "" +"O filtro feTile ladrilha uma região com uma imagem. A imagem de " +"origem é definida pela subregião do filtro." #: ../src/ui/dialog/filter-effects-dialog.cpp:3046 msgid "" @@ -17519,6 +16480,9 @@ msgid "" "noise is useful in simulating several nature phenomena like clouds, fire and " "smoke and in generating complex textures like marble or granite." msgstr "" +"O filtro feTurbulence renderiza ruído Perlin. Este tipo de ruído é " +"útil para simular vários fenómenos naturais como nuvens, fogo e fumo e a " +"gerar texturas complexas como mármore e granito." #: ../src/ui/dialog/filter-effects-dialog.cpp:3066 msgid "Duplicate filter primitive" @@ -17530,178 +16494,159 @@ msgstr "Definir atributo de primitiva de filtro" #: ../src/ui/dialog/find.cpp:72 msgid "F_ind:" -msgstr "" +msgstr "P_rocurar:" #: ../src/ui/dialog/find.cpp:72 -#, fuzzy msgid "Find objects by their content or properties (exact or partial match)" msgstr "" -"Encontrar objectos pelo seu conteúdo de texto (por casamento exato ou " -"parcial)" +"Procura objetos pelo seu conteúdo ou propriedades (por correspondência exata " +"ou parcial)" #: ../src/ui/dialog/find.cpp:73 -#, fuzzy msgid "R_eplace:" -msgstr "Substituir" +msgstr "_Substituir por:" #: ../src/ui/dialog/find.cpp:73 -#, fuzzy msgid "Replace match with this value" -msgstr "0 (transparente)" +msgstr "Substituir resultados que correspondam com este valor" #: ../src/ui/dialog/find.cpp:75 msgid "_All" -msgstr "" +msgstr "T_udo" #: ../src/ui/dialog/find.cpp:75 -#, fuzzy msgid "Search in all layers" -msgstr "Selecionar em todas as camadas" +msgstr "Procurar em todas as camadas" #: ../src/ui/dialog/find.cpp:76 -#, fuzzy msgid "Current _layer" -msgstr "Camada actual" +msgstr "_Camada atual" #: ../src/ui/dialog/find.cpp:76 msgid "Limit search to the current layer" -msgstr "Limitar a busca à camada actual" +msgstr "Limitar a procura à camada atual" #: ../src/ui/dialog/find.cpp:77 -#, fuzzy msgid "Sele_ction" -msgstr "Seleção" +msgstr "_Seleção" #: ../src/ui/dialog/find.cpp:77 msgid "Limit search to the current selection" -msgstr "Limitar a busca na selecção actual" +msgstr "Limitar a procura à seleção atual" #: ../src/ui/dialog/find.cpp:78 -#, fuzzy msgid "Search in text objects" -msgstr "Procurar objectos de texto" +msgstr "Procurar nos objetos de texto" #: ../src/ui/dialog/find.cpp:79 -#, fuzzy msgid "_Properties" -msgstr "%s Propriedades" +msgstr "Propr_iedades" #: ../src/ui/dialog/find.cpp:79 msgid "Search in object properties, styles, attributes and IDs" msgstr "" +"Procurar nas propriedades dos objetos, estilos, atributos e identificadores " +"(ID)" #: ../src/ui/dialog/find.cpp:81 -#, fuzzy msgid "Search in" -msgstr "Procurar" +msgstr "Procurar em" #: ../src/ui/dialog/find.cpp:82 msgid "Scope" -msgstr "" +msgstr "Abrangência" #: ../src/ui/dialog/find.cpp:84 -#, fuzzy msgid "Case sensiti_ve" -msgstr "Sensibilidade de agarrar:" +msgstr "Sensível a _maiúsculas e minúsculas" #: ../src/ui/dialog/find.cpp:84 msgid "Match upper/lower case" msgstr "" +"Sensível a maiúscula/minúscula, caso se procure por \"Abelha\" apenas " +"encontra \"Abelha\" e não \"abelha\"" #: ../src/ui/dialog/find.cpp:85 -#, fuzzy msgid "E_xact match" -msgstr "Extrair Uma Imagem" +msgstr "Correspondência e_xata" #: ../src/ui/dialog/find.cpp:85 -#, fuzzy msgid "Match whole objects only" -msgstr "Inverter objectos seleccionados horizontalmente" +msgstr "" +"Apenas encontra objetos que correspondam exatamente à procura (e não " +"parcialmente)" #: ../src/ui/dialog/find.cpp:86 msgid "Include _hidden" -msgstr "Incluir _ocultos" +msgstr "Incluir objetos _ocultos" #: ../src/ui/dialog/find.cpp:86 msgid "Include hidden objects in search" -msgstr "Incluir objectos ocultos à busca" +msgstr "Incluir objetos ocultos na procura" #: ../src/ui/dialog/find.cpp:87 -#, fuzzy msgid "Include loc_ked" -msgstr "Incluir bl_oqueados" +msgstr "Incluir objetos _bloqueados" #: ../src/ui/dialog/find.cpp:87 msgid "Include locked objects in search" -msgstr "Incluir objectos bloqueados na pesquisa" +msgstr "Incluir objetos bloqueados na procura" #: ../src/ui/dialog/find.cpp:89 -#, fuzzy msgid "General" -msgstr "Geral" +msgstr "Geral" #: ../src/ui/dialog/find.cpp:91 -#, fuzzy msgid "_ID" -msgstr "_ID: " +msgstr "_ID" #: ../src/ui/dialog/find.cpp:91 -#, fuzzy msgid "Search id name" -msgstr "Procurar imagens" +msgstr "Procurar nome ID (identificador)" #: ../src/ui/dialog/find.cpp:92 -#, fuzzy msgid "Attribute _name" -msgstr "Nome do atributo" +msgstr "_Nome do atributo" #: ../src/ui/dialog/find.cpp:92 -#, fuzzy msgid "Search attribute name" -msgstr "Nome do atributo" +msgstr "Procurar no nome do atributo" #: ../src/ui/dialog/find.cpp:93 -#, fuzzy msgid "Attri_bute value" -msgstr "Valor do atributo" +msgstr "_Valor do atributo" #: ../src/ui/dialog/find.cpp:93 -#, fuzzy msgid "Search attribute value" -msgstr "Valor do atributo" +msgstr "Procurar no valor do atributo" #: ../src/ui/dialog/find.cpp:94 -#, fuzzy msgid "_Style" -msgstr "E_stilo: " +msgstr "_Estilo" #: ../src/ui/dialog/find.cpp:94 -#, fuzzy msgid "Search style" -msgstr "Procurar clones" +msgstr "Procurar estilo" #: ../src/ui/dialog/find.cpp:95 msgid "F_ont" -msgstr "" +msgstr "F_onte" #: ../src/ui/dialog/find.cpp:95 -#, fuzzy msgid "Search fonts" -msgstr "Procurar clones" +msgstr "Procurar fontes" #: ../src/ui/dialog/find.cpp:96 -#, fuzzy msgid "Properties" -msgstr "%s Propriedades" +msgstr "Propriedades" #: ../src/ui/dialog/find.cpp:98 msgid "All types" msgstr "Todos os tipos" #: ../src/ui/dialog/find.cpp:98 -#, fuzzy msgid "Search all object types" -msgstr "Procurar em todos os tipos de objecto" +msgstr "Procurar em todos os tipos de objetos" #: ../src/ui/dialog/find.cpp:99 msgid "Rectangles" @@ -17713,7 +16658,7 @@ msgstr "Procurar retângulos" #: ../src/ui/dialog/find.cpp:100 msgid "Ellipses" -msgstr "Elipses" +msgstr "Círculos, Arcos, Elipses" #: ../src/ui/dialog/find.cpp:100 msgid "Search ellipses, arcs, circles" @@ -17721,7 +16666,7 @@ msgstr "Procurar elipses, arcos e círculos" #: ../src/ui/dialog/find.cpp:101 msgid "Stars" -msgstr "Estrelas" +msgstr "Estrelas, Polígonos" #: ../src/ui/dialog/find.cpp:101 msgid "Search stars and polygons" @@ -17749,7 +16694,7 @@ msgstr "Textos" #: ../src/ui/dialog/find.cpp:104 msgid "Search text objects" -msgstr "Procurar objectos de texto" +msgstr "Procurar objetos de texto" #: ../src/ui/dialog/find.cpp:105 msgid "Groups" @@ -17761,7 +16706,6 @@ msgstr "Procurar grupos" #. TRANSLATORS: "Clones" is a noun indicating type of object to find #: ../src/ui/dialog/find.cpp:108 -#, fuzzy msgctxt "Find dialog" msgid "Clones" msgstr "Clones" @@ -17782,48 +16726,45 @@ msgstr "Procurar imagens" #: ../src/ui/dialog/find.cpp:111 msgid "Offsets" -msgstr "Offsets" +msgstr "Deslocamentos" #: ../src/ui/dialog/find.cpp:111 msgid "Search offset objects" -msgstr "Procurar objectos tipográficos" +msgstr "Procurar objetos deslocados" #: ../src/ui/dialog/find.cpp:112 -#, fuzzy msgid "Object types" -msgstr "Objecto" +msgstr "Tipos de objeto" #: ../src/ui/dialog/find.cpp:115 msgid "_Find" -msgstr "_Localizar" +msgstr "_Procurar" #: ../src/ui/dialog/find.cpp:115 -#, fuzzy msgid "Select all objects matching the selection criteria" -msgstr "Busca por objectos casando com os valores que preencheu" +msgstr "Selecionar todos os objetos que correspondam aos critérios de seleção" #: ../src/ui/dialog/find.cpp:116 -#, fuzzy msgid "_Replace All" -msgstr "Substituir" +msgstr "Substitui_r Tudo" #: ../src/ui/dialog/find.cpp:116 -#, fuzzy msgid "Replace all matches" -msgstr "Substituir texto..." +msgstr "Substituir todas as correspondências" #: ../src/ui/dialog/find.cpp:801 -#, fuzzy msgid "Nothing to replace" -msgstr "Nada para refazer." +msgstr "Nada a substituir" #. TRANSLATORS: "%s" is replaced with "exact" or "partial" when this string is displayed #: ../src/ui/dialog/find.cpp:842 #, c-format msgid "%d object found (out of %d), %s match." msgid_plural "%d objects found (out of %d), %s match." -msgstr[0] "%d objecto(s) encontrados (de %d), %s casados." -msgstr[1] "%d objecto(s) encontrados (de %d), %s casados." +msgstr[0] "" +"%d objeto encontrado (de um total de %d), %s correspondem." +msgstr[1] "" +"%d objetos encontrados (de um total de %d), %s correspondem." #: ../src/ui/dialog/find.cpp:845 msgid "exact" @@ -17835,864 +16776,790 @@ msgstr "parcial" #. TRANSLATORS: "%1" is replaced with the number of matches #: ../src/ui/dialog/find.cpp:848 -#, fuzzy msgid "%1 match replaced" msgid_plural "%1 matches replaced" -msgstr[0] "Substituir" -msgstr[1] "Substituir" +msgstr[0] "%1 correspondência substituída" +msgstr[1] "%1 correspondências substituídas" #. TRANSLATORS: "%1" is replaced with the number of matches #: ../src/ui/dialog/find.cpp:852 -#, fuzzy msgid "%1 object found" msgid_plural "%1 objects found" -msgstr[0] "Nenhum objecto encontrado" -msgstr[1] "Nenhum objecto encontrado" +msgstr[0] "%1 objeto encontrado" +msgstr[1] "%1 objetos encontrados" #: ../src/ui/dialog/find.cpp:866 -#, fuzzy msgid "Replace text or property" -msgstr "Definir propriedades da guia" +msgstr "Susbtituir texto ou propriedade" #: ../src/ui/dialog/find.cpp:870 -#, fuzzy msgid "Nothing found" -msgstr "Nada para desfazer." +msgstr "Nada encontrado" #: ../src/ui/dialog/find.cpp:875 msgid "No objects found" -msgstr "Nenhum objecto encontrado" +msgstr "Não foi encontrado nenhum objeto" #: ../src/ui/dialog/find.cpp:896 -#, fuzzy msgid "Select an object type" -msgstr "Duplicar os objectos seleccionados" +msgstr "Selecionar tipo de objeto" #: ../src/ui/dialog/find.cpp:914 -#, fuzzy msgid "Select a property" -msgstr "Definir propriedades da guia" +msgstr "Selecionar uma propriedade" #: ../src/ui/dialog/font-substitution.cpp:79 msgid "" "\n" "Some fonts are not available and have been substituted." msgstr "" +"\n" +"Algumas fontes não estão disponíveis e foram substituídas por outras." #: ../src/ui/dialog/font-substitution.cpp:82 msgid "Font substitution" -msgstr "" +msgstr "Substituição de fonte" #: ../src/ui/dialog/font-substitution.cpp:101 -#, fuzzy msgid "Select all the affected items" -msgstr "Duplicar os objectos seleccionados" +msgstr "Selecionar todos os itens afetados" #: ../src/ui/dialog/font-substitution.cpp:106 msgid "Don't show this warning again" -msgstr "" +msgstr "Não mostrar este aviso novamente" #: ../src/ui/dialog/font-substitution.cpp:245 msgid "Font '%1' substituted with '%2'" -msgstr "" +msgstr "Fonte '%1' substituida por '%2'" #: ../src/ui/dialog/glyphs.cpp:60 ../src/ui/dialog/glyphs.cpp:152 -#, fuzzy msgid "all" -msgstr "Tabela" +msgstr "todos" #: ../src/ui/dialog/glyphs.cpp:61 msgid "common" -msgstr "" +msgstr "comuns" #: ../src/ui/dialog/glyphs.cpp:62 msgid "inherited" -msgstr "" +msgstr "herdado" #: ../src/ui/dialog/glyphs.cpp:63 ../src/ui/dialog/glyphs.cpp:165 -#, fuzzy msgid "Arabic" -msgstr "Origem X" +msgstr "Ãrabe" #: ../src/ui/dialog/glyphs.cpp:64 ../src/ui/dialog/glyphs.cpp:163 -#, fuzzy msgid "Armenian" -msgstr "São desligados" +msgstr "Arménio" #: ../src/ui/dialog/glyphs.cpp:65 ../src/ui/dialog/glyphs.cpp:172 msgid "Bengali" -msgstr "" +msgstr "Bengali" #: ../src/ui/dialog/glyphs.cpp:66 ../src/ui/dialog/glyphs.cpp:254 -#, fuzzy msgid "Bopomofo" -msgstr "Ampliação" +msgstr "Bopomofo" #: ../src/ui/dialog/glyphs.cpp:67 ../src/ui/dialog/glyphs.cpp:189 -#, fuzzy msgid "Cherokee" -msgstr "Combinar" +msgstr "Cherokee" #: ../src/ui/dialog/glyphs.cpp:68 ../src/ui/dialog/glyphs.cpp:242 -#, fuzzy msgid "Coptic" -msgstr "Combinado" +msgstr "Cóptico" #: ../src/ui/dialog/glyphs.cpp:69 ../src/ui/dialog/glyphs.cpp:161 #: ../share/extensions/hershey.inx.h:22 msgid "Cyrillic" -msgstr "" +msgstr "Cirílico" #: ../src/ui/dialog/glyphs.cpp:70 -#, fuzzy msgid "Deseret" -msgstr "Remover S_eleção" +msgstr "Deseret" #: ../src/ui/dialog/glyphs.cpp:71 ../src/ui/dialog/glyphs.cpp:171 msgid "Devanagari" -msgstr "" +msgstr "Devanágari" #: ../src/ui/dialog/glyphs.cpp:72 ../src/ui/dialog/glyphs.cpp:187 msgid "Ethiopic" -msgstr "" +msgstr "Etíope" #: ../src/ui/dialog/glyphs.cpp:73 ../src/ui/dialog/glyphs.cpp:185 -#, fuzzy msgid "Georgian" -msgstr "Cor da linha guia" +msgstr "Georgiano" #: ../src/ui/dialog/glyphs.cpp:74 -#, fuzzy msgid "Gothic" -msgstr "Aumentar ajuste" +msgstr "Gótico" #: ../src/ui/dialog/glyphs.cpp:75 -#, fuzzy msgid "Greek" -msgstr "Verde" +msgstr "Grego" #: ../src/ui/dialog/glyphs.cpp:76 ../src/ui/dialog/glyphs.cpp:174 msgid "Gujarati" -msgstr "" +msgstr "Gujarati" #: ../src/ui/dialog/glyphs.cpp:77 ../src/ui/dialog/glyphs.cpp:173 msgid "Gurmukhi" -msgstr "" +msgstr "Gurmukhi" #: ../src/ui/dialog/glyphs.cpp:78 -#, fuzzy msgid "Han" -msgstr "Ângulo" +msgstr "Han" #: ../src/ui/dialog/glyphs.cpp:79 -#, fuzzy msgid "Hangul" -msgstr "Ângulo" +msgstr "Hangul" #: ../src/ui/dialog/glyphs.cpp:80 ../src/ui/dialog/glyphs.cpp:164 msgid "Hebrew" -msgstr "" +msgstr "Hebraico" #: ../src/ui/dialog/glyphs.cpp:81 ../src/ui/dialog/glyphs.cpp:252 msgid "Hiragana" -msgstr "" +msgstr "Hiragana" #: ../src/ui/dialog/glyphs.cpp:82 ../src/ui/dialog/glyphs.cpp:178 msgid "Kannada" -msgstr "" +msgstr "Canarês (kn)" #: ../src/ui/dialog/glyphs.cpp:83 ../src/ui/dialog/glyphs.cpp:253 msgid "Katakana" -msgstr "" +msgstr "Katakana" #: ../src/ui/dialog/glyphs.cpp:84 ../src/ui/dialog/glyphs.cpp:197 -#, fuzzy msgid "Khmer" -msgstr "Outro" +msgstr "Khmer" #: ../src/ui/dialog/glyphs.cpp:85 ../src/ui/dialog/glyphs.cpp:182 -#, fuzzy msgid "Lao" -msgstr "Arranjo" +msgstr "Laociano" #: ../src/ui/dialog/glyphs.cpp:86 -#, fuzzy msgid "Latin" -msgstr "Início" +msgstr "Latim" #: ../src/ui/dialog/glyphs.cpp:87 ../src/ui/dialog/glyphs.cpp:179 msgid "Malayalam" -msgstr "" +msgstr "Malaiala" #: ../src/ui/dialog/glyphs.cpp:88 ../src/ui/dialog/glyphs.cpp:198 msgid "Mongolian" -msgstr "" +msgstr "Mongólio" #: ../src/ui/dialog/glyphs.cpp:89 ../src/ui/dialog/glyphs.cpp:184 msgid "Myanmar" -msgstr "" +msgstr "Myanmar" #: ../src/ui/dialog/glyphs.cpp:90 ../src/ui/dialog/glyphs.cpp:191 msgid "Ogham" -msgstr "" +msgstr "Ogham" #: ../src/ui/dialog/glyphs.cpp:91 -#, fuzzy msgid "Old Italic" -msgstr "Itálico" +msgstr "Itálico Antigo" #: ../src/ui/dialog/glyphs.cpp:92 ../src/ui/dialog/glyphs.cpp:175 msgid "Oriya" -msgstr "" +msgstr "Oriá" #: ../src/ui/dialog/glyphs.cpp:93 ../src/ui/dialog/glyphs.cpp:192 -#, fuzzy msgid "Runic" -msgstr "Arredondado" +msgstr "Rúnico" #: ../src/ui/dialog/glyphs.cpp:94 ../src/ui/dialog/glyphs.cpp:180 -#, fuzzy msgid "Sinhala" -msgstr "Único" +msgstr "Cingalês" #: ../src/ui/dialog/glyphs.cpp:95 ../src/ui/dialog/glyphs.cpp:166 msgid "Syriac" -msgstr "" +msgstr "Síriaco" #: ../src/ui/dialog/glyphs.cpp:96 ../src/ui/dialog/glyphs.cpp:176 -#, fuzzy msgid "Tamil" -msgstr "Ladrilhado" +msgstr "Tamil" #: ../src/ui/dialog/glyphs.cpp:97 ../src/ui/dialog/glyphs.cpp:177 msgid "Telugu" -msgstr "" +msgstr "Telugu" #: ../src/ui/dialog/glyphs.cpp:98 ../src/ui/dialog/glyphs.cpp:168 -#, fuzzy msgid "Thaana" -msgstr "Alvo" +msgstr "Thaana" #: ../src/ui/dialog/glyphs.cpp:99 ../src/ui/dialog/glyphs.cpp:181 msgid "Thai" -msgstr "" +msgstr "Tailandês" #: ../src/ui/dialog/glyphs.cpp:100 ../src/ui/dialog/glyphs.cpp:183 -#, fuzzy msgid "Tibetan" -msgstr "Alvo" +msgstr "Tibetano" #: ../src/ui/dialog/glyphs.cpp:101 msgid "Canadian Aboriginal" -msgstr "" +msgstr "Canadiano Indígena" #: ../src/ui/dialog/glyphs.cpp:102 msgid "Yi" -msgstr "" +msgstr "Yi" #: ../src/ui/dialog/glyphs.cpp:103 ../src/ui/dialog/glyphs.cpp:193 -#, fuzzy msgid "Tagalog" -msgstr "Alvo" +msgstr "Tagalo" #: ../src/ui/dialog/glyphs.cpp:104 ../src/ui/dialog/glyphs.cpp:194 msgid "Hanunoo" -msgstr "" +msgstr "Hanunoo" #: ../src/ui/dialog/glyphs.cpp:105 ../src/ui/dialog/glyphs.cpp:195 -#, fuzzy msgid "Buhid" -msgstr "Guias" +msgstr "Buhid" #: ../src/ui/dialog/glyphs.cpp:106 ../src/ui/dialog/glyphs.cpp:196 msgid "Tagbanwa" -msgstr "" +msgstr "Tagbanwa" #: ../src/ui/dialog/glyphs.cpp:107 -#, fuzzy msgid "Braille" -msgstr "Tipografia normal" +msgstr "Braile" #: ../src/ui/dialog/glyphs.cpp:108 msgid "Cypriot" -msgstr "" +msgstr "Cipriota" #: ../src/ui/dialog/glyphs.cpp:109 ../src/ui/dialog/glyphs.cpp:200 msgid "Limbu" -msgstr "" +msgstr "Limbu" #: ../src/ui/dialog/glyphs.cpp:110 msgid "Osmanya" -msgstr "" +msgstr "Osmanya" #: ../src/ui/dialog/glyphs.cpp:111 -#, fuzzy msgid "Shavian" -msgstr "Espaçamento" +msgstr "Shavian" #: ../src/ui/dialog/glyphs.cpp:112 -#, fuzzy msgid "Linear B" -msgstr "Linear" +msgstr "Linear B" #: ../src/ui/dialog/glyphs.cpp:113 ../src/ui/dialog/glyphs.cpp:201 -#, fuzzy msgid "Tai Le" -msgstr "Ladrilhado" +msgstr "Tai Le" #: ../src/ui/dialog/glyphs.cpp:114 msgid "Ugaritic" -msgstr "" +msgstr "Ugarítico" #: ../src/ui/dialog/glyphs.cpp:115 ../src/ui/dialog/glyphs.cpp:202 -#, fuzzy msgid "New Tai Lue" -msgstr "Nova linha" +msgstr "Novo Tai Lue" #: ../src/ui/dialog/glyphs.cpp:116 ../src/ui/dialog/glyphs.cpp:204 -#, fuzzy msgid "Buginese" -msgstr "Linha" +msgstr "Buginês" #: ../src/ui/dialog/glyphs.cpp:117 ../src/ui/dialog/glyphs.cpp:240 msgid "Glagolitic" -msgstr "" +msgstr "Glagolítico" #: ../src/ui/dialog/glyphs.cpp:118 ../src/ui/dialog/glyphs.cpp:244 msgid "Tifinagh" -msgstr "" +msgstr "Tifinague" #: ../src/ui/dialog/glyphs.cpp:119 ../src/ui/dialog/glyphs.cpp:273 msgid "Syloti Nagri" -msgstr "" +msgstr "Syloti Nagri" #: ../src/ui/dialog/glyphs.cpp:120 -#, fuzzy msgid "Old Persian" -msgstr "Pintura a Óleo" +msgstr "Persa Antigo" #: ../src/ui/dialog/glyphs.cpp:121 msgid "Kharoshthi" -msgstr "" +msgstr "Kharoshthi" #: ../src/ui/dialog/glyphs.cpp:122 -#, fuzzy msgid "unassigned" -msgstr "Alinhar" +msgstr "não atribuido" #: ../src/ui/dialog/glyphs.cpp:123 ../src/ui/dialog/glyphs.cpp:206 -#, fuzzy msgid "Balinese" -msgstr "linhas" +msgstr "Balinês" #: ../src/ui/dialog/glyphs.cpp:124 msgid "Cuneiform" -msgstr "" +msgstr "Cuniforme" #: ../src/ui/dialog/glyphs.cpp:125 -#, fuzzy msgid "Phoenician" -msgstr "Lápis" +msgstr "Fenício" #: ../src/ui/dialog/glyphs.cpp:126 ../src/ui/dialog/glyphs.cpp:275 msgid "Phags-pa" -msgstr "" +msgstr "Phags-pa" #: ../src/ui/dialog/glyphs.cpp:127 msgid "N'Ko" -msgstr "" +msgstr "N'Ko" #: ../src/ui/dialog/glyphs.cpp:128 ../src/ui/dialog/glyphs.cpp:278 msgid "Kayah Li" -msgstr "" +msgstr "Kayah Li" #: ../src/ui/dialog/glyphs.cpp:129 ../src/ui/dialog/glyphs.cpp:208 msgid "Lepcha" -msgstr "" +msgstr "Lepcha" #: ../src/ui/dialog/glyphs.cpp:130 ../src/ui/dialog/glyphs.cpp:279 -#, fuzzy msgid "Rejang" -msgstr "Retângulo" +msgstr "Rejang" #: ../src/ui/dialog/glyphs.cpp:131 ../src/ui/dialog/glyphs.cpp:207 -#, fuzzy msgid "Sundanese" -msgstr "Encaixe" +msgstr "Sudanês" #: ../src/ui/dialog/glyphs.cpp:132 ../src/ui/dialog/glyphs.cpp:276 -#, fuzzy msgid "Saurashtra" -msgstr "Saturar" +msgstr "Saurashtra" #: ../src/ui/dialog/glyphs.cpp:133 ../src/ui/dialog/glyphs.cpp:282 -#, fuzzy msgid "Cham" -msgstr "Combinar" +msgstr "Cham" #: ../src/ui/dialog/glyphs.cpp:134 ../src/ui/dialog/glyphs.cpp:209 msgid "Ol Chiki" -msgstr "" +msgstr "Ol Chiki" #: ../src/ui/dialog/glyphs.cpp:135 ../src/ui/dialog/glyphs.cpp:268 msgid "Vai" -msgstr "" +msgstr "Vai" #: ../src/ui/dialog/glyphs.cpp:136 -#, fuzzy msgid "Carian" -msgstr "Alvo" +msgstr "Carian" #: ../src/ui/dialog/glyphs.cpp:137 -#, fuzzy msgid "Lycian" -msgstr "Linha" +msgstr "Lycian" #: ../src/ui/dialog/glyphs.cpp:138 -#, fuzzy msgid "Lydian" -msgstr "Médio" +msgstr "Lício" #: ../src/ui/dialog/glyphs.cpp:153 msgid "Basic Latin" -msgstr "" +msgstr "Latim Básico" #: ../src/ui/dialog/glyphs.cpp:154 -#, fuzzy msgid "Latin-1 Supplement" -msgstr "Segmentos de _linha" +msgstr "Latim-1 Sumplemento" #: ../src/ui/dialog/glyphs.cpp:155 msgid "Latin Extended-A" -msgstr "" +msgstr "Latin Extendido-A" #: ../src/ui/dialog/glyphs.cpp:156 msgid "Latin Extended-B" -msgstr "" +msgstr "Latin Extendido-B" #: ../src/ui/dialog/glyphs.cpp:157 -#, fuzzy msgid "IPA Extensions" -msgstr "Extensão \"" +msgstr "IPA Extensões" #: ../src/ui/dialog/glyphs.cpp:158 -#, fuzzy msgid "Spacing Modifier Letters" -msgstr "Espaçamento entre letras" +msgstr "Letras de Alterações de Espaço" #: ../src/ui/dialog/glyphs.cpp:159 msgid "Combining Diacritical Marks" -msgstr "" +msgstr "Combinações de Marcas Diacríticas" #: ../src/ui/dialog/glyphs.cpp:160 msgid "Greek and Coptic" -msgstr "" +msgstr "Grego e Copta" #: ../src/ui/dialog/glyphs.cpp:162 msgid "Cyrillic Supplement" -msgstr "" +msgstr "Cirílico Sumplemento" #: ../src/ui/dialog/glyphs.cpp:167 msgid "Arabic Supplement" -msgstr "" +msgstr "Ãrabe Sumplemento" #: ../src/ui/dialog/glyphs.cpp:169 msgid "NKo" -msgstr "" +msgstr "NKo" #: ../src/ui/dialog/glyphs.cpp:170 -#, fuzzy msgid "Samaritan" -msgstr "Alvo" +msgstr "Samaritano" #: ../src/ui/dialog/glyphs.cpp:186 msgid "Hangul Jamo" -msgstr "" +msgstr "Hangul Jamo" #: ../src/ui/dialog/glyphs.cpp:188 msgid "Ethiopic Supplement" -msgstr "" +msgstr "Etíope - Suplemento" #: ../src/ui/dialog/glyphs.cpp:190 msgid "Unified Canadian Aboriginal Syllabics" -msgstr "" +msgstr "Silabários Canadiano Indígena Unificado" #: ../src/ui/dialog/glyphs.cpp:199 msgid "Unified Canadian Aboriginal Syllabics Extended" -msgstr "" +msgstr "Silabários Canadiano Indígena Unificado - Extendido" #: ../src/ui/dialog/glyphs.cpp:203 msgid "Khmer Symbols" -msgstr "" +msgstr "Símbolos Khmer" #: ../src/ui/dialog/glyphs.cpp:205 msgid "Tai Tham" -msgstr "" +msgstr "Tai Tham" #: ../src/ui/dialog/glyphs.cpp:210 -#, fuzzy msgid "Vedic Extensions" -msgstr "Extensão \"" +msgstr "Védico - Extensões" #: ../src/ui/dialog/glyphs.cpp:211 -#, fuzzy msgid "Phonetic Extensions" -msgstr "Sobre E_xtensões" +msgstr "Extensões Fonéticas" #: ../src/ui/dialog/glyphs.cpp:212 msgid "Phonetic Extensions Supplement" -msgstr "" +msgstr "Suplemento de Extensões Fonéticas" #: ../src/ui/dialog/glyphs.cpp:213 msgid "Combining Diacritical Marks Supplement" -msgstr "" +msgstr "Suplemento de Combinações de Marcas Diacríticas" #: ../src/ui/dialog/glyphs.cpp:214 msgid "Latin Extended Additional" -msgstr "" +msgstr "Latim Extendido Adicional" #: ../src/ui/dialog/glyphs.cpp:215 msgid "Greek Extended" -msgstr "" +msgstr "Grego Extendido" #: ../src/ui/dialog/glyphs.cpp:216 -#, fuzzy msgid "General Punctuation" -msgstr "Função Verde" +msgstr "Pontuação Geral" #: ../src/ui/dialog/glyphs.cpp:217 msgid "Superscripts and Subscripts" -msgstr "" +msgstr "Sobrescrito e Subscrito" #: ../src/ui/dialog/glyphs.cpp:218 msgid "Currency Symbols" -msgstr "" +msgstr "Símbolos de Moeda" #: ../src/ui/dialog/glyphs.cpp:219 msgid "Combining Diacritical Marks for Symbols" -msgstr "" +msgstr "Combinações de Marcas Diacríticas para Símbolos" #: ../src/ui/dialog/glyphs.cpp:220 msgid "Letterlike Symbols" -msgstr "" +msgstr "Símbolos Como as Letras" #: ../src/ui/dialog/glyphs.cpp:221 -#, fuzzy msgid "Number Forms" -msgstr "Número de linhas" +msgstr "Formas Numerais" #: ../src/ui/dialog/glyphs.cpp:222 -#, fuzzy msgid "Arrows" -msgstr "Erros" +msgstr "Setas" #: ../src/ui/dialog/glyphs.cpp:223 msgid "Mathematical Operators" -msgstr "" +msgstr "Operadores Matemáticos" #: ../src/ui/dialog/glyphs.cpp:224 -#, fuzzy msgid "Miscellaneous Technical" -msgstr "Miscelânio:" +msgstr "Miscelânea Técnica" #: ../src/ui/dialog/glyphs.cpp:225 -#, fuzzy msgid "Control Pictures" -msgstr "Contribuidores" +msgstr "Imagens de Controle" #: ../src/ui/dialog/glyphs.cpp:226 msgid "Optical Character Recognition" -msgstr "" +msgstr "Reconhecimento Óptico de Caracteres" #: ../src/ui/dialog/glyphs.cpp:227 msgid "Enclosed Alphanumerics" -msgstr "" +msgstr "Alfanuméricos Contidos" #: ../src/ui/dialog/glyphs.cpp:228 -#, fuzzy msgid "Box Drawing" -msgstr "Desenho" +msgstr "Desenho de Caixa" #: ../src/ui/dialog/glyphs.cpp:229 msgid "Block Elements" -msgstr "" +msgstr "Elementos de Bloco" #: ../src/ui/dialog/glyphs.cpp:230 msgid "Geometric Shapes" -msgstr "" +msgstr "Formas Geométricas" #: ../src/ui/dialog/glyphs.cpp:231 -#, fuzzy msgid "Miscellaneous Symbols" -msgstr "Miscelânio:" +msgstr "Miscelânea de Símbolos" #: ../src/ui/dialog/glyphs.cpp:232 msgid "Dingbats" -msgstr "" +msgstr "Ornamentais" #: ../src/ui/dialog/glyphs.cpp:233 -#, fuzzy msgid "Miscellaneous Mathematical Symbols-A" -msgstr "Dicas e truques variados" +msgstr "Miscelâneas - Símbolos Matemáticos-A" #: ../src/ui/dialog/glyphs.cpp:234 msgid "Supplemental Arrows-A" -msgstr "" +msgstr "Setas Suplementares-A" #: ../src/ui/dialog/glyphs.cpp:235 -#, fuzzy msgid "Braille Patterns" -msgstr "Padrões" +msgstr "Padrões de Braile" #: ../src/ui/dialog/glyphs.cpp:236 msgid "Supplemental Arrows-B" -msgstr "" +msgstr "Setas Suplementares-B" #: ../src/ui/dialog/glyphs.cpp:237 -#, fuzzy msgid "Miscellaneous Mathematical Symbols-B" -msgstr "Dicas e truques variados" +msgstr "Miscelâneas - Símbolos Matemáticos-B" #: ../src/ui/dialog/glyphs.cpp:238 msgid "Supplemental Mathematical Operators" -msgstr "" +msgstr "Operadores Matemáticas Suplementares" #: ../src/ui/dialog/glyphs.cpp:239 -#, fuzzy msgid "Miscellaneous Symbols and Arrows" -msgstr "Dicas e truques variados" +msgstr "Miscelâneas - Símbolos e Setas" #: ../src/ui/dialog/glyphs.cpp:241 msgid "Latin Extended-C" -msgstr "" +msgstr "Latim Extendido-C" #: ../src/ui/dialog/glyphs.cpp:243 msgid "Georgian Supplement" -msgstr "" +msgstr "Georgiano Suplemento" #: ../src/ui/dialog/glyphs.cpp:245 msgid "Ethiopic Extended" -msgstr "" +msgstr "Etíope Extendido" #: ../src/ui/dialog/glyphs.cpp:246 msgid "Cyrillic Extended-A" -msgstr "" +msgstr "Cirílico Extendido-A" #: ../src/ui/dialog/glyphs.cpp:247 msgid "Supplemental Punctuation" -msgstr "" +msgstr "Pontuação Suplementar" #: ../src/ui/dialog/glyphs.cpp:248 msgid "CJK Radicals Supplement" -msgstr "" +msgstr "CJK - Sumplemento de Radicais" #: ../src/ui/dialog/glyphs.cpp:249 msgid "Kangxi Radicals" -msgstr "" +msgstr "Kangxi - Radicais" #: ../src/ui/dialog/glyphs.cpp:250 msgid "Ideographic Description Characters" -msgstr "" +msgstr "Caracteres de Descrição Ideográfica" #: ../src/ui/dialog/glyphs.cpp:251 msgid "CJK Symbols and Punctuation" -msgstr "" +msgstr "CJK - Símbolos e Pontuação" #: ../src/ui/dialog/glyphs.cpp:255 msgid "Hangul Compatibility Jamo" -msgstr "" +msgstr "Hangul - Compatibilidade Jamo" #: ../src/ui/dialog/glyphs.cpp:256 msgid "Kanbun" -msgstr "" +msgstr "Kanbun" #: ../src/ui/dialog/glyphs.cpp:257 msgid "Bopomofo Extended" -msgstr "" +msgstr "Bopomofo - Extendido" #: ../src/ui/dialog/glyphs.cpp:258 -#, fuzzy msgid "CJK Strokes" -msgstr "Traço:" +msgstr "CJK - Traços" #: ../src/ui/dialog/glyphs.cpp:259 msgid "Katakana Phonetic Extensions" -msgstr "" +msgstr "Katakana - Extensões Fonéticas" #: ../src/ui/dialog/glyphs.cpp:260 msgid "Enclosed CJK Letters and Months" -msgstr "" +msgstr "CJK - Letras e Meses Contidos" #: ../src/ui/dialog/glyphs.cpp:261 msgid "CJK Compatibility" -msgstr "" +msgstr "CJK - Compatibilidade" #: ../src/ui/dialog/glyphs.cpp:262 msgid "CJK Unified Ideographs Extension A" -msgstr "" +msgstr "CJK - Ideogramas Unificados Extensão A" #: ../src/ui/dialog/glyphs.cpp:263 msgid "Yijing Hexagram Symbols" -msgstr "" +msgstr "Yijing - Símbolos Hexagramas" #: ../src/ui/dialog/glyphs.cpp:264 msgid "CJK Unified Ideographs" -msgstr "" +msgstr "Ideogramas Unificados CJK" #: ../src/ui/dialog/glyphs.cpp:265 msgid "Yi Syllables" -msgstr "" +msgstr "Yi - Sílabas" #: ../src/ui/dialog/glyphs.cpp:266 msgid "Yi Radicals" -msgstr "" +msgstr "Yi - Radicais" #: ../src/ui/dialog/glyphs.cpp:267 -#, fuzzy msgid "Lisu" -msgstr "Listar" +msgstr "Lisu" #: ../src/ui/dialog/glyphs.cpp:269 msgid "Cyrillic Extended-B" -msgstr "" +msgstr "Cirílico Extendido-B" #: ../src/ui/dialog/glyphs.cpp:270 -#, fuzzy msgid "Bamum" -msgstr "Médio" +msgstr "Bamum" #: ../src/ui/dialog/glyphs.cpp:271 msgid "Modifier Tone Letters" -msgstr "" +msgstr "Letras de Tem Modificativo" #: ../src/ui/dialog/glyphs.cpp:272 msgid "Latin Extended-D" -msgstr "" +msgstr "Latim Extendido-D" #: ../src/ui/dialog/glyphs.cpp:274 msgid "Common Indic Number Forms" -msgstr "" +msgstr "Formas Numerais Ãndicas Comuns" #: ../src/ui/dialog/glyphs.cpp:277 msgid "Devanagari Extended" -msgstr "" +msgstr "Devanágari - Extendido" #: ../src/ui/dialog/glyphs.cpp:280 msgid "Hangul Jamo Extended-A" -msgstr "" +msgstr "Hangul Jamo - Extendido-A" #: ../src/ui/dialog/glyphs.cpp:281 msgid "Javanese" -msgstr "" +msgstr "Javanês" #: ../src/ui/dialog/glyphs.cpp:283 msgid "Myanmar Extended-A" -msgstr "" +msgstr "Myanmar - Extendido-B" #: ../src/ui/dialog/glyphs.cpp:284 msgid "Tai Viet" -msgstr "" +msgstr "Tai Viet" #: ../src/ui/dialog/glyphs.cpp:285 -#, fuzzy msgid "Meetei Mayek" -msgstr "Eliminar camada" +msgstr "Meetei Mayek" #: ../src/ui/dialog/glyphs.cpp:286 msgid "Hangul Syllables" -msgstr "" +msgstr "Hangul - Sílabas" #: ../src/ui/dialog/glyphs.cpp:287 msgid "Hangul Jamo Extended-B" -msgstr "" +msgstr "Hangul Jamo - Extendido-B" #: ../src/ui/dialog/glyphs.cpp:288 msgid "High Surrogates" -msgstr "" +msgstr "Substitutos Altos" #: ../src/ui/dialog/glyphs.cpp:289 msgid "High Private Use Surrogates" -msgstr "" +msgstr "Substitutos de Uso Privado Alto" #: ../src/ui/dialog/glyphs.cpp:290 msgid "Low Surrogates" -msgstr "" +msgstr "Substitutos Baixos" #: ../src/ui/dialog/glyphs.cpp:291 msgid "Private Use Area" -msgstr "" +msgstr "Ãrea de Uso Privado" #: ../src/ui/dialog/glyphs.cpp:292 msgid "CJK Compatibility Ideographs" -msgstr "" +msgstr "CJK - Ideogramas de Compatibilidade " #: ../src/ui/dialog/glyphs.cpp:293 msgid "Alphabetic Presentation Forms" -msgstr "" +msgstr "Formas de Apresentação Alfabética" #: ../src/ui/dialog/glyphs.cpp:294 msgid "Arabic Presentation Forms-A" -msgstr "" +msgstr "Arábico - Formas de Apresentação-A" #: ../src/ui/dialog/glyphs.cpp:295 -#, fuzzy msgid "Variation Selectors" -msgstr "Ajustar Ecrã à Seleção" +msgstr "Seletores de Variação" #: ../src/ui/dialog/glyphs.cpp:296 -#, fuzzy msgid "Vertical Forms" -msgstr "Espaçamento Vertical" +msgstr "Formas Verticais" #: ../src/ui/dialog/glyphs.cpp:297 -#, fuzzy msgid "Combining Half Marks" -msgstr "Imprimir usando operadores PostScript" +msgstr "Combinando Meias Marcas" #: ../src/ui/dialog/glyphs.cpp:298 msgid "CJK Compatibility Forms" -msgstr "" +msgstr "CJK - Formas de Compatibilidade" #: ../src/ui/dialog/glyphs.cpp:299 msgid "Small Form Variants" -msgstr "" +msgstr "Variantes de Pequenas Formas" #: ../src/ui/dialog/glyphs.cpp:300 msgid "Arabic Presentation Forms-B" -msgstr "" +msgstr "Arábico - Formas de Apresentação-B" #: ../src/ui/dialog/glyphs.cpp:301 msgid "Halfwidth and Fullwidth Forms" -msgstr "" +msgstr "Formas Meia-Largura e Largura Total" #: ../src/ui/dialog/glyphs.cpp:302 -#, fuzzy msgid "Specials" -msgstr "Espirais" +msgstr "Especiais" #: ../src/ui/dialog/glyphs.cpp:377 -#, fuzzy msgid "Script: " -msgstr "Script" +msgstr "Sistema de Escrita: " #: ../src/ui/dialog/glyphs.cpp:414 -#, fuzzy msgid "Range: " -msgstr "Ângulo" +msgstr "Intervalo: " #: ../src/ui/dialog/glyphs.cpp:497 -#, fuzzy msgid "Append" -msgstr "Script" +msgstr "Adicionar" #: ../src/ui/dialog/glyphs.cpp:619 -#, fuzzy msgid "Append text" -msgstr "Digite o texto" +msgstr "Adicionar texto" #: ../src/ui/dialog/grid-arrange-tab.cpp:345 msgid "Arrange in a grid" -msgstr "Organizar na grelha" +msgstr "Organizar numa grelha" #: ../src/ui/dialog/grid-arrange-tab.cpp:571 #: ../src/ui/dialog/object-attributes.cpp:66 @@ -18703,9 +17570,8 @@ msgid "X:" msgstr "X:" #: ../src/ui/dialog/grid-arrange-tab.cpp:571 -#, fuzzy msgid "Horizontal spacing between columns." -msgstr "Espaçamento horizontal entre colunas (em px)" +msgstr "Espaçamento horizontal entre colunas." #: ../src/ui/dialog/grid-arrange-tab.cpp:572 #: ../src/ui/dialog/object-attributes.cpp:67 @@ -18716,130 +17582,111 @@ msgid "Y:" msgstr "Y:" #: ../src/ui/dialog/grid-arrange-tab.cpp:572 -#, fuzzy msgid "Vertical spacing between rows." -msgstr "Espaçamento vertical entre linhas (em px)" +msgstr "Espaçamento vertical entre linhas." #: ../src/ui/dialog/grid-arrange-tab.cpp:618 -#, fuzzy msgid "_Rows:" -msgstr "Linhas:" +msgstr "_Linhas:" #: ../src/ui/dialog/grid-arrange-tab.cpp:627 msgid "Number of rows" msgstr "Número de linhas" #: ../src/ui/dialog/grid-arrange-tab.cpp:631 -#, fuzzy msgid "Equal _height" -msgstr "Altura igual" +msgstr "_Altura igual" #: ../src/ui/dialog/grid-arrange-tab.cpp:642 msgid "If not set, each row has the height of the tallest object in it" -msgstr "" -"Se não configurado, cada linha terá a altura do objecto mais alto dentre eles" +msgstr "Se não for definido, cada linha terá a altura do objeto mais alto" #. #### Number of columns #### #: ../src/ui/dialog/grid-arrange-tab.cpp:658 -#, fuzzy msgid "_Columns:" -msgstr "Colunas:" +msgstr "_Colunas:" #: ../src/ui/dialog/grid-arrange-tab.cpp:667 msgid "Number of columns" msgstr "Número de colunas" #: ../src/ui/dialog/grid-arrange-tab.cpp:671 -#, fuzzy msgid "Equal _width" -msgstr "Largura igual" +msgstr "L_argura igual" #: ../src/ui/dialog/grid-arrange-tab.cpp:681 msgid "If not set, each column has the width of the widest object in it" -msgstr "" -"Se não configurado, cada coluna terá a altura do objecto mais largo dentre " -"eles" +msgstr "Se não for definido, cada coluna terá a altura do objeto mais largo" #. Anchor selection widget #: ../src/ui/dialog/grid-arrange-tab.cpp:692 -#, fuzzy msgid "Alignment:" -msgstr "Alinhar à esquerda" +msgstr "Alinhamento:" #. #### Radio buttons to control spacing manually or to fit selection bbox #### #: ../src/ui/dialog/grid-arrange-tab.cpp:701 -#, fuzzy msgid "_Fit into selection box" -msgstr "Ajustar à caixa de selecção" +msgstr "_Ajustar à caixa de seleção" #: ../src/ui/dialog/grid-arrange-tab.cpp:708 -#, fuzzy msgid "_Set spacing:" -msgstr "Definir espaçamento:" +msgstr "Definir _espaçamento:" #: ../src/ui/dialog/guides.cpp:47 -#, fuzzy msgid "Lo_cked" -msgstr "Bloquear" +msgstr "_Bloqueada" #: ../src/ui/dialog/guides.cpp:47 msgid "Lock the movement of guides" -msgstr "" +msgstr "Bloquear a deslocação das guias" #: ../src/ui/dialog/guides.cpp:48 -#, fuzzy msgid "Rela_tive change" -msgstr "Movimento relativo" +msgstr "Alteração _relativa" #: ../src/ui/dialog/guides.cpp:48 -#, fuzzy msgid "Move and/or rotate the guide relative to current settings" -msgstr "Mover guia em relação à posição actual" +msgstr "Mover e/ou rodar a guia relativamente às definições atuais" #: ../src/ui/dialog/guides.cpp:49 -#, fuzzy msgctxt "Guides" msgid "_X:" -msgstr "X:" +msgstr "_X:" #: ../src/ui/dialog/guides.cpp:50 -#, fuzzy msgctxt "Guides" msgid "_Y:" -msgstr "Y:" +msgstr "_Y:" #: ../src/ui/dialog/guides.cpp:51 ../src/ui/dialog/object-properties.cpp:59 -#, fuzzy msgid "_Label:" -msgstr "_Rótulo" +msgstr "_Etiqueta:" #: ../src/ui/dialog/guides.cpp:51 msgid "Optionally give this guideline a name" -msgstr "" +msgstr "Opcionalmente pode-se atribuir um nome a esta guia" #: ../src/ui/dialog/guides.cpp:52 -#, fuzzy msgid "_Angle:" -msgstr "Ângulo:" +msgstr "Â_ngulo:" #: ../src/ui/dialog/guides.cpp:139 msgid "Set guide properties" msgstr "Definir propriedades da guia" #: ../src/ui/dialog/guides.cpp:169 -#, fuzzy msgid "Guideline" -msgstr "Cor da linha guia" +msgstr "Linha guia" #: ../src/ui/dialog/guides.cpp:336 -#, fuzzy, c-format +#, c-format msgid "Guideline ID: %s" -msgstr "Linha guia: %s" +msgstr "ID da linha guia: %s" #: ../src/ui/dialog/guides.cpp:342 -#, fuzzy, c-format +#, c-format msgid "Current: %s" -msgstr "Configurações actuais: %s" +msgstr "Atual: %s" #: ../src/ui/dialog/icon-preview.cpp:155 #, c-format @@ -18847,96 +17694,99 @@ msgid "%d x %d" msgstr "%d x %d" #: ../src/ui/dialog/icon-preview.cpp:167 -#, fuzzy msgid "Magnified:" -msgstr "Magnitude" +msgstr "Ampliado:" #: ../src/ui/dialog/icon-preview.cpp:236 -#, fuzzy msgid "Actual Size:" -msgstr "Atuar:" +msgstr "Tamanho Atual:" #: ../src/ui/dialog/icon-preview.cpp:241 -#, fuzzy msgctxt "Icon preview window" msgid "Sele_ction" -msgstr "Seleção" +msgstr "Prever apenas o _selecionado" #: ../src/ui/dialog/icon-preview.cpp:243 msgid "Selection only or whole document" -msgstr "Somente selecção ou documento inteiro" +msgstr "" +"Prever apenas o que estiver selecionado; se desativado, prever o que estiver " +"dentro da página" #: ../src/ui/dialog/inkscape-preferences.cpp:183 msgid "Show selection cue" -msgstr "Mostrar taco de selecção" +msgstr "Mostrar indicador de seleção" #: ../src/ui/dialog/inkscape-preferences.cpp:184 msgid "" "Whether selected objects display a selection cue (the same as in selector)" msgstr "" -"Se os objectos seleccionados exibem um taco de selecção (o mesmo do seletor)" +"Se os objetos selecionados mostram um indicador de seleção (o mesmo da " +"ferramenta de selecionar)" #: ../src/ui/dialog/inkscape-preferences.cpp:190 msgid "Enable gradient editing" -msgstr "Ativar edição de degradê" +msgstr "Mostrar controlos dos gradientes (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:191 msgid "Whether selected objects display gradient editing controls" -msgstr "Se os objectos seleccionados exibem controles de edição de degradês" +msgstr "" +"Mostra os controlos do grandiente ao selecionar objetos, permitindo com a " +"ferramenta de selecionar editar esses controlos" #: ../src/ui/dialog/inkscape-preferences.cpp:196 msgid "Conversion to guides uses edges instead of bounding box" -msgstr "" +msgstr "Na conversão em guias usar as bordas em vez da caixa limitadora" #: ../src/ui/dialog/inkscape-preferences.cpp:197 msgid "" "Converting an object to guides places these along the object's true edges " "(imitating the object's shape), not along the bounding box" msgstr "" +"Ao converter um objeto em guias, posiciona-as ao longo das bordas " +"verdadeiras do objeto (imitando a forma geométrica do objeto), e não ao " +"longo da caixa limitadora" #: ../src/ui/dialog/inkscape-preferences.cpp:204 -#, fuzzy msgid "Ctrl+click _dot size:" -msgstr "Barra de Controles de Ferramenta" +msgstr "Tamanho _do ponto com Ctrl+clicar:" #: ../src/ui/dialog/inkscape-preferences.cpp:204 -#, fuzzy msgid "times current stroke width" -msgstr "Ampliar largura do traço" +msgstr "vezes a espessura do traço atual" #: ../src/ui/dialog/inkscape-preferences.cpp:205 msgid "Size of dots created with Ctrl+click (relative to current stroke width)" msgstr "" +"Tamanho dos pontos criados com Ctrl+clicar (relativo à espessura do traço " +"atual)" #: ../src/ui/dialog/inkscape-preferences.cpp:213 -#, fuzzy msgid "Base simplify:" -msgstr "Simplificar" +msgstr "Simplificação base:" #: ../src/ui/dialog/inkscape-preferences.cpp:213 msgid "on dynamic LPE simplify" -msgstr "" +msgstr "em simplificação de Efeitos Interativos em Caminhos dinâmicos" #: ../src/ui/dialog/inkscape-preferences.cpp:214 msgid "Base simplify of dynamic LPE based simplify" -msgstr "" +msgstr "Base da simplificação dos Efeitos Interativos em Caminhos dinâmicos" #: ../src/ui/dialog/inkscape-preferences.cpp:229 msgid "No objects selected to take the style from." -msgstr "Nenhum objecto seleccionado para obter o estilo." +msgstr "Nenhum objeto selecionado para obter o estilo." #: ../src/ui/dialog/inkscape-preferences.cpp:238 msgid "" "More than one object selected. Cannot take style from multiple " "objects." msgstr "" -"Mais de um objecto seleccionado. Não é possível obter o estilo a " -"partir de múltiplos objectos." +"Mais de 1 objeto selecionado. Não é possível obter o estilo a partir " +"de vários objetos." #: ../src/ui/dialog/inkscape-preferences.cpp:274 -#, fuzzy msgid "Style of new objects" -msgstr "Estilo de novos retângulos" +msgstr "Estilo de novos objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:276 msgid "Last used style" @@ -18944,34 +17794,33 @@ msgstr "Último estilo usado" #: ../src/ui/dialog/inkscape-preferences.cpp:278 msgid "Apply the style you last set on an object" -msgstr "Aplicar o estilo do seu último objecto" +msgstr "Aplicar o último estilo usado num objeto" #: ../src/ui/dialog/inkscape-preferences.cpp:283 msgid "This tool's own style:" -msgstr "O estilo próprio desta ferramenta:" +msgstr "Estilo padrão desta ferramenta:" #: ../src/ui/dialog/inkscape-preferences.cpp:287 msgid "" "Each tool may store its own style to apply to the newly created objects. Use " "the button below to set it." msgstr "" -"Cada ferramenta deve guardar seu próprio estilo para aplicar para objectos " -"recémcriados. Use o botão abaixo para ajustá-lo." +"Cada ferramenta pode guardar seu próprio estilo para o aplicar a novos " +"objetos. Usar o botão abaixo para o configurar." #. style swatch #: ../src/ui/dialog/inkscape-preferences.cpp:291 msgid "Take from selection" -msgstr "Obter da selecção" +msgstr "Obter da seleção" #: ../src/ui/dialog/inkscape-preferences.cpp:300 -#, fuzzy msgid "This tool's style of new objects" -msgstr "O estilo próprio desta ferramenta:" +msgstr "O estilo desta ferramenta para novos objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:307 msgid "Remember the style of the (first) selected object as this tool's style" msgstr "" -"Lembrar do estilo do (primeiro) objecto seleccionado como estilo desta " +"Obter estilo do (primeiro) objeto selecionado como estilo padrão desta " "ferramenta" #: ../src/ui/dialog/inkscape-preferences.cpp:312 @@ -18979,66 +17828,64 @@ msgid "Tools" msgstr "Ferramentas" #: ../src/ui/dialog/inkscape-preferences.cpp:315 -#, fuzzy msgid "Bounding box to use" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Caixa limitadora a usar" #: ../src/ui/dialog/inkscape-preferences.cpp:316 -#, fuzzy msgid "Visual bounding box" -msgstr "Margem oposta da caixa de limites" +msgstr "Caixa limitadora visual" #: ../src/ui/dialog/inkscape-preferences.cpp:318 -#, fuzzy msgid "This bounding box includes stroke width, markers, filter margins, etc." msgstr "" -"Esta caixa delimitadora inclui largura do curso, marcadores, margens de " -"filtros, etc." +"Esta caixa limitadora inclui espessura do traço, marcadores, margens de " +"filtros, efeitos, etc." #: ../src/ui/dialog/inkscape-preferences.cpp:319 -#, fuzzy msgid "Geometric bounding box" -msgstr "Margem oposta da caixa de limites" +msgstr "Caixa limitadora geométrica" #: ../src/ui/dialog/inkscape-preferences.cpp:321 -#, fuzzy msgid "This bounding box includes only the bare path" -msgstr "Esta caixa delimitadora inclui somente o caminho simples" +msgstr "" +"Esta caixa limitadora inclui apenas o esqueleto do caminho, ignorando os " +"efeitos, espessuras dos traços, etc." #: ../src/ui/dialog/inkscape-preferences.cpp:323 -#, fuzzy msgid "Conversion to guides" -msgstr "Remover guias existentes" +msgstr "Converter objetos em guias" #: ../src/ui/dialog/inkscape-preferences.cpp:324 msgid "Keep objects after conversion to guides" -msgstr "" +msgstr "Não eliminar os objetos após convertê-los em guias" #: ../src/ui/dialog/inkscape-preferences.cpp:326 msgid "" "When converting an object to guides, don't delete the object after the " "conversion" msgstr "" +"Ao converter um objeto em guias através do menu \"Objeto->Converter em Guias" +"\" não elimina os objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:327 -#, fuzzy msgid "Treat groups as a single object" -msgstr "Criar novo caminho" +msgstr "Considerar grupos de objetos como um só objeto" #: ../src/ui/dialog/inkscape-preferences.cpp:329 msgid "" "Treat groups as a single object during conversion to guides rather than " "converting each child separately" msgstr "" +"Considera os grupos de objetos como um só objeto criando guias apenas pelos " +"limites do grupo e não dos objetos individuais" #: ../src/ui/dialog/inkscape-preferences.cpp:331 -#, fuzzy msgid "Average all sketches" -msgstr "Qualidade média" +msgstr "Fazer a média de todos os esboços" #: ../src/ui/dialog/inkscape-preferences.cpp:332 msgid "Width is in absolute units" -msgstr "Largura em unidades absolutas" +msgstr "A largura é em unidades absolutas" #: ../src/ui/dialog/inkscape-preferences.cpp:333 msgid "Select new path" @@ -19046,25 +17893,24 @@ msgstr "Selecionar novo caminho" #: ../src/ui/dialog/inkscape-preferences.cpp:334 msgid "Don't attach connectors to text objects" -msgstr "Não anexar conectores a textos" +msgstr "Não ligar conetores a textos" #. Selector #: ../src/ui/dialog/inkscape-preferences.cpp:337 msgid "Selector" -msgstr "Seletor" +msgstr "Selecionar" #: ../src/ui/dialog/inkscape-preferences.cpp:342 -#, fuzzy msgid "When transforming, show" -msgstr "Enquanto tranformar, mostrar:" +msgstr "Ao tranformar, mostrar" #: ../src/ui/dialog/inkscape-preferences.cpp:343 msgid "Objects" -msgstr "Objectos" +msgstr "Objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:345 msgid "Show the actual objects when moving or transforming" -msgstr "Mostrar os objectos atuais quando mover ou transformar" +msgstr "Mostrar os objetos atuais quando mover ou transformar" #: ../src/ui/dialog/inkscape-preferences.cpp:346 msgid "Box outline" @@ -19073,22 +17919,20 @@ msgstr "Contorno da caixa" #: ../src/ui/dialog/inkscape-preferences.cpp:348 msgid "Show only a box outline of the objects when moving or transforming" msgstr "" -"Mostrar somente um contorno de caixa dos objectos quando mover ou transformar" +"Mostrar apenas um contorno da caixa dos objetos quando mover ou transformar" #: ../src/ui/dialog/inkscape-preferences.cpp:349 -#, fuzzy msgid "Per-object selection cue" -msgstr "Taco de selecção por objecto:" +msgstr "Indicador de seleção por objeto" #: ../src/ui/dialog/inkscape-preferences.cpp:350 -#, fuzzy msgctxt "Selection cue" msgid "None" msgstr "Nenhum" #: ../src/ui/dialog/inkscape-preferences.cpp:352 msgid "No per-object selection indication" -msgstr "Nenhuma indicação de selecção por objecto" +msgstr "Nenhum indicador de seleção por objeto" #: ../src/ui/dialog/inkscape-preferences.cpp:353 msgid "Mark" @@ -19097,7 +17941,7 @@ msgstr "Marca" #: ../src/ui/dialog/inkscape-preferences.cpp:355 msgid "Each selected object has a diamond mark in the top left corner" msgstr "" -"Cada objecto seleccionado tem um marca de diamante no canto esquerdo superior" +"Cada objeto selecionado tem um marca de diamante no canto superior esquerdo" #: ../src/ui/dialog/inkscape-preferences.cpp:356 msgid "Box" @@ -19105,7 +17949,7 @@ msgstr "Caixa" #: ../src/ui/dialog/inkscape-preferences.cpp:358 msgid "Each selected object displays its bounding box" -msgstr "Cada objecto seleccionado exibe sua caixa de limites" +msgstr "Cada objeto selecionado mostra a sua caixa limitadora" #. Node #: ../src/ui/dialog/inkscape-preferences.cpp:361 @@ -19113,81 +17957,81 @@ msgid "Node" msgstr "Nó" #: ../src/ui/dialog/inkscape-preferences.cpp:364 -#, fuzzy msgid "Path outline" -msgstr "Contorno da caixa" +msgstr "Destaque do caminho" #: ../src/ui/dialog/inkscape-preferences.cpp:365 -#, fuzzy msgid "Path outline color" -msgstr "Colar cor" +msgstr "Cor do destaque do caminho" #: ../src/ui/dialog/inkscape-preferences.cpp:366 -#, fuzzy msgid "Selects the color used for showing the path outline" -msgstr "Cor da linha de grelha maior (destacada)" +msgstr "Selecionar a cor usada para mostrar o destaque do caminho" #: ../src/ui/dialog/inkscape-preferences.cpp:367 -#, fuzzy msgid "Always show outline" -msgstr "_Contorno" +msgstr "Mostrar sempre o destaque" #: ../src/ui/dialog/inkscape-preferences.cpp:368 msgid "Show outlines for all paths, not only invisible paths" msgstr "" +"Mostrar destaque em todos os caminhos, e não apenas dos caminhos invisíveis" #: ../src/ui/dialog/inkscape-preferences.cpp:369 msgid "Update outline when dragging nodes" -msgstr "" +msgstr "Atualizar destaque ao arrastar nós" #: ../src/ui/dialog/inkscape-preferences.cpp:370 msgid "" "Update the outline when dragging or transforming nodes; if this is off, the " "outline will only update when completing a drag" msgstr "" +"Atualiza em tempo real o destaque ao arrastar ou transformar nós; se isto " +"estiver desativado, o destaque será atualizado apenas ao terminar o arrasto" #: ../src/ui/dialog/inkscape-preferences.cpp:371 msgid "Update paths when dragging nodes" -msgstr "" +msgstr "Atualizar caminhos ao arrastar nós" #: ../src/ui/dialog/inkscape-preferences.cpp:372 msgid "" "Update paths when dragging or transforming nodes; if this is off, paths will " "only be updated when completing a drag" msgstr "" +"Atualizar caminhos ao arrastar ou transformar nós; se isto estiver " +"desativado, os caminhos serão atualizados apenas ao terminar o arrasto" #: ../src/ui/dialog/inkscape-preferences.cpp:373 msgid "Show path direction on outlines" -msgstr "" +msgstr "Mostrar direção do caminho no destaque" #: ../src/ui/dialog/inkscape-preferences.cpp:374 msgid "" "Visualize the direction of selected paths by drawing small arrows in the " "middle of each outline segment" msgstr "" +"Ver a direção dos caminhos selecionados, mostrando 1 meia-seta no meio de " +"cada segmento" #: ../src/ui/dialog/inkscape-preferences.cpp:375 -#, fuzzy msgid "Show temporary path outline" -msgstr "Contorno da caixa" +msgstr "Mostrar caminho destacado" #: ../src/ui/dialog/inkscape-preferences.cpp:376 msgid "When hovering over a path, briefly flash its outline" -msgstr "" +msgstr "Ao passar com o cursor sobre um caminho, destacar brevemente o caminho" #: ../src/ui/dialog/inkscape-preferences.cpp:377 -#, fuzzy msgid "Show temporary outline for selected paths" -msgstr "Largura do padrão" +msgstr "Mostrar destaque nos caminhos selecionados" #: ../src/ui/dialog/inkscape-preferences.cpp:378 msgid "Show temporary outline even when a path is selected for editing" -msgstr "" +msgstr "Mostrar destaque mesmo quando um caminho é selecionado para editar" #: ../src/ui/dialog/inkscape-preferences.cpp:380 -#, fuzzy msgid "_Flash time:" -msgstr "Redefinir centro" +msgstr "_Tempo de destaque:" #: ../src/ui/dialog/inkscape-preferences.cpp:380 msgid "" @@ -19195,59 +18039,59 @@ msgid "" "milliseconds); specify 0 to have the outline shown until mouse leaves the " "path" msgstr "" +"Especifica por quanto tempo o caminho será destacado após passar com o " +"cursor por cima (em milisegundos); usar 0 para ter destacado até o cursor " +"deixar de estar sobre o caminho" #: ../src/ui/dialog/inkscape-preferences.cpp:381 -#, fuzzy msgid "Editing preferences" -msgstr "Preferências do degradê" +msgstr "Preferências ao editar" #: ../src/ui/dialog/inkscape-preferences.cpp:382 -#, fuzzy msgid "Show transform handles for single nodes" -msgstr "Mostrar as alças de Bezier dos nós seleccionados" +msgstr "Mostrar as alças de transformar em nós únicos" #: ../src/ui/dialog/inkscape-preferences.cpp:383 -#, fuzzy msgid "Show transform handles even when only a single node is selected" -msgstr "Mostrar as alças de Bezier dos nós seleccionados" +msgstr "Mostrar as alças de transformar mesmo quando só está selecionado 1 nó" #: ../src/ui/dialog/inkscape-preferences.cpp:384 -#, fuzzy msgid "Deleting nodes preserves shape" -msgstr "Eliminar nós preservando a forma" +msgstr "Após eliminar nós, manter a forma geométrica anterior" #: ../src/ui/dialog/inkscape-preferences.cpp:385 msgid "" "Move handles next to deleted nodes to resemble original shape; hold Ctrl to " "get the other behavior" msgstr "" +"Mover alças dos nós em redor dos nós eliminados para manter a forma " +"geométrica original; manter premida a tecla Ctrl para não usar isto " +"temporariamente" #. Tweak #: ../src/ui/dialog/inkscape-preferences.cpp:388 msgid "Tweak" -msgstr "Ajuste" +msgstr "Forças" #: ../src/ui/dialog/inkscape-preferences.cpp:389 -#, fuzzy msgid "Object paint style" -msgstr "Objectos" +msgstr "Estilo de pintura do objeto" #. Zoom #: ../src/ui/dialog/inkscape-preferences.cpp:394 #: ../src/widgets/desktop-widget.cpp:709 msgid "Zoom" -msgstr "Ampliação" +msgstr "Lupa" #. Measure #: ../src/ui/dialog/inkscape-preferences.cpp:399 ../src/verbs.cpp:2763 -#, fuzzy msgctxt "ContextVerb" msgid "Measure" -msgstr "Medida" +msgstr "Medir" #: ../src/ui/dialog/inkscape-preferences.cpp:401 msgid "Ignore first and last points" -msgstr "" +msgstr "Ignorar o primeiro e último ponto" #: ../src/ui/dialog/inkscape-preferences.cpp:402 msgid "" @@ -19255,6 +18099,9 @@ msgid "" "considered for calculating lengths. Only lengths between actual curve " "intersections will be displayed." msgstr "" +"O início e o fim da linha da ferramenta Fita Métrica não será considerado " +"para calcular comprimentos. Apenas serão mostrados comprimentos entre as " +"interseções da curva atual." #. Shapes #: ../src/ui/dialog/inkscape-preferences.cpp:405 @@ -19262,15 +18109,16 @@ msgid "Shapes" msgstr "Formas" #: ../src/ui/dialog/inkscape-preferences.cpp:438 -#, fuzzy msgid "Sketch mode" -msgstr "Ajustar" +msgstr "Modo esboço" #: ../src/ui/dialog/inkscape-preferences.cpp:440 msgid "" "If on, the sketch result will be the normal average of all sketches made, " "instead of averaging the old result with the new sketch" msgstr "" +"Se ativado, o resultado do esboço será a média normal de todos os esboços " +"feitos, em vez de calcular a média do resultado anterior com o novo esboço" #. Pen #: ../src/ui/dialog/inkscape-preferences.cpp:443 @@ -19288,52 +18136,54 @@ msgid "" "If on, pen width is in absolute units (px) independent of zoom; otherwise " "pen width depends on zoom so that it looks the same at any zoom" msgstr "" -"Se activado, o tamanho da caneta é definido em unidades absolutas (px) " +"Se ativado, o tamanho da caneta é em unidades absolutas (px) " "independentemente da ampliação; senão o tamanho da caneta depende da " -"ampliação para que pareça a mesma a qualquer ampliação." +"ampliação para que pareça a mesma em qualquer ampliação" #: ../src/ui/dialog/inkscape-preferences.cpp:455 msgid "" "If on, each newly created object will be selected (deselecting previous " "selection)" msgstr "" -"Se activado, cada novo objecto criado será seleccionado (desfazendo a " -"selecção anterior)" +"Se ativado, cada objeto criado será selecionado (desselecionando a anterior " +"seleção)" #. Text #: ../src/ui/dialog/inkscape-preferences.cpp:458 ../src/verbs.cpp:2755 -#, fuzzy msgctxt "ContextVerb" msgid "Text" msgstr "Texto" #: ../src/ui/dialog/inkscape-preferences.cpp:463 msgid "Show font samples in the drop-down list" -msgstr "" +msgstr "Mostrar aspeto real das fontes na lista de fontes" #: ../src/ui/dialog/inkscape-preferences.cpp:464 msgid "" "Show font samples alongside font names in the drop-down list in Text bar" msgstr "" +"Mostrar aspeto real das fontes e o nome das fontes na lista de fontes da " +"barra de Texto" #: ../src/ui/dialog/inkscape-preferences.cpp:466 -#, fuzzy msgid "Show font substitution warning dialog" -msgstr "Mostrar botões de fechar em diálogos" +msgstr "Mostrar janela de aviso de substituição de fontes" #: ../src/ui/dialog/inkscape-preferences.cpp:467 msgid "" "Show font substitution warning dialog when requested fonts are not available " "on the system" msgstr "" +"Mostrar aviso de substituição de fontes quando as fontes necessárias não " +"estiverem disponíveis no sistema" #: ../src/ui/dialog/inkscape-preferences.cpp:470 msgid "Pixel" -msgstr "Pixel" +msgstr "Píxel" #: ../src/ui/dialog/inkscape-preferences.cpp:470 msgid "Pica" -msgstr "" +msgstr "Pica" #: ../src/ui/dialog/inkscape-preferences.cpp:470 msgid "Millimeter" @@ -19349,39 +18199,36 @@ msgstr "Polegada" #: ../src/ui/dialog/inkscape-preferences.cpp:470 msgid "Em square" -msgstr "Quadras Em" +msgstr "Eme quadrado" #. , _("Ex square"), _("Percent") #. , SP_CSS_UNIT_EX, SP_CSS_UNIT_PERCENT #: ../src/ui/dialog/inkscape-preferences.cpp:473 -#, fuzzy msgid "Text units" -msgstr "Entrada de Texto" +msgstr "Sistema de medida do texto" #: ../src/ui/dialog/inkscape-preferences.cpp:475 -#, fuzzy msgid "Text size unit type:" -msgstr "Texto: Alterar estilo da fonte" +msgstr "Sistema de medida do tamanho do texto:" #: ../src/ui/dialog/inkscape-preferences.cpp:476 msgid "Set the type of unit used in the text toolbar and text dialogs" msgstr "" +"Definir o tipo de unidade usada na barra de texto e nos painéis de texto" #: ../src/ui/dialog/inkscape-preferences.cpp:477 msgid "Always output text size in pixels (px)" -msgstr "" +msgstr "Mostrar sempre tamanho do texto em píxeis (px)" #. Spray #: ../src/ui/dialog/inkscape-preferences.cpp:483 -#, fuzzy msgid "Spray" -msgstr "Espiral" +msgstr "Pulverizador" #. Eraser #: ../src/ui/dialog/inkscape-preferences.cpp:488 -#, fuzzy msgid "Eraser" -msgstr "Rasterizar" +msgstr "Borracha" #. Paint Bucket #: ../src/ui/dialog/inkscape-preferences.cpp:493 @@ -19393,11 +18240,11 @@ msgstr "Balde de Tinta" #: ../src/widgets/gradient-selector.cpp:144 #: ../src/widgets/gradient-selector.cpp:295 msgid "Gradient" -msgstr "Degradê" +msgstr "Gradiente" #: ../src/ui/dialog/inkscape-preferences.cpp:501 msgid "Prevent sharing of gradient definitions" -msgstr "Prevenir compartilhamento de definições de degradê" +msgstr "Prevenir partilha de definições de gradiente" #: ../src/ui/dialog/inkscape-preferences.cpp:503 msgid "" @@ -19405,539 +18252,518 @@ msgid "" "uncheck to allow sharing of gradient definitions so that editing one object " "may affect other objects using the same gradient" msgstr "" -"Quando activada, definições de degradê partilhadas são automaticamente " -"diferenciadas quando alteradas; desmarque para permitir a partilha de " -"definições de degradê de modo que a alteração de um objecto afecte todos " -"utilizando o mesmo degradê." +"Quando ativado, definições de gradiente partilhadas são automaticamente " +"separadas quando alteradas; desativar para permitir a partilha de definições " +"de gradiente ao editar um objeto, alterando assim os outros objetos que usem " +"o mesmo gradiente" #: ../src/ui/dialog/inkscape-preferences.cpp:504 -#, fuzzy msgid "Use legacy Gradient Editor" -msgstr "Editor de degradê" +msgstr "Usar Editor de Gradiente Antigo" #: ../src/ui/dialog/inkscape-preferences.cpp:506 msgid "" "When on, the Gradient Edit button in the Fill & Stroke dialog will show the " "legacy Gradient Editor dialog, when off the Gradient Tool will be used" msgstr "" +"Quando ativado, o botão Editar Gradiente no painel Preenchimento e Traço " +"mostrará o painel antigo do Editor de Gradiente. Quando desativado é " +"mostrada a Ferramenta Gradiente" #: ../src/ui/dialog/inkscape-preferences.cpp:509 -#, fuzzy msgid "Linear gradient _angle:" -msgstr "Preenchimento em degradê linear" +msgstr "Ângulo do gradiente _linear:" #: ../src/ui/dialog/inkscape-preferences.cpp:510 msgid "" "Default angle of new linear gradients in degrees (clockwise from horizontal)" msgstr "" +"Ângulo padrão em graus para novos gradientes lineares (sentido horário da " +"horizontal)" #. Dropper #: ../src/ui/dialog/inkscape-preferences.cpp:514 msgid "Dropper" -msgstr "Borrão" +msgstr "Pipeta" #. Connector #: ../src/ui/dialog/inkscape-preferences.cpp:519 msgid "Connector" -msgstr "Conector" +msgstr "Conetor de Diagrama" #: ../src/ui/dialog/inkscape-preferences.cpp:522 msgid "If on, connector attachment points will not be shown for text objects" msgstr "" -"Se activado, os pontos de ligação dos conectores não serão mostrados para " -"objectos de texto" +"Se ativado, os pontos de ligação dos conetores não serão mostrados para " +"objetos de texto" #. LPETool #. disabled, because the LPETool is not finished yet. #: ../src/ui/dialog/inkscape-preferences.cpp:527 -#, fuzzy msgid "LPE Tool" -msgstr "Ferramentas" +msgstr "Ferramenta Efeitos Interativos em Caminhos" #: ../src/ui/dialog/inkscape-preferences.cpp:534 -#, fuzzy msgid "Interface" -msgstr "Interceptar" +msgstr "Interface" #: ../src/ui/dialog/inkscape-preferences.cpp:537 -#, fuzzy msgid "System default" -msgstr "Ajustar como padrão" +msgstr "Padrão do sistema" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Albanian (sq)" -msgstr "" +msgstr "Albanês (sq)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Amharic (am)" -msgstr "" +msgstr "Amárico (am)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Arabic (ar)" -msgstr "" +msgstr "Arábico (ar)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Armenian (hy)" -msgstr "" +msgstr "Arménio (hy)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Assamese (as)" -msgstr "" +msgstr "Assamês (as)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Azerbaijani (az)" -msgstr "" +msgstr "Azerbaijano (az)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 -#, fuzzy msgid "Basque (eu)" -msgstr "Medida" +msgstr "Basco (eu)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Belarusian (be)" -msgstr "" +msgstr "Bielorrusso (be)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Bulgarian (bg)" -msgstr "" +msgstr "Búlgaro (bg)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Bengali (bn)" -msgstr "" +msgstr "Bengali (bn)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Bengali/Bangladesh (bn_BD)" -msgstr "" +msgstr "Bengali/Bangladeche (bn_BD)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Bodo (brx)" -msgstr "" +msgstr "Bodo (brx)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Breton (br)" -msgstr "" +msgstr "Bretão (br)" #: ../src/ui/dialog/inkscape-preferences.cpp:540 msgid "Catalan (ca)" -msgstr "" +msgstr "Catalão (ca)" #: ../src/ui/dialog/inkscape-preferences.cpp:540 msgid "Valencian Catalan (ca@valencia)" -msgstr "" +msgstr "Catalão Valenciano (ca@valencia)" #: ../src/ui/dialog/inkscape-preferences.cpp:540 msgid "Chinese/China (zh_CN)" -msgstr "" +msgstr "Chinês/China (zh_CN)" #: ../src/ui/dialog/inkscape-preferences.cpp:540 msgid "Chinese/Taiwan (zh_TW)" -msgstr "" +msgstr "Chinese/Taiwan (zh_TW)" #: ../src/ui/dialog/inkscape-preferences.cpp:540 msgid "Croatian (hr)" -msgstr "" +msgstr "Croata (hr)" #: ../src/ui/dialog/inkscape-preferences.cpp:540 msgid "Czech (cs)" -msgstr "" +msgstr "Checo (cs)" #: ../src/ui/dialog/inkscape-preferences.cpp:541 msgid "Danish (da)" -msgstr "" +msgstr "Dinamarquês (da)" #: ../src/ui/dialog/inkscape-preferences.cpp:541 msgid "Dogri (doi)" -msgstr "" +msgstr "Dogri (doi)" #: ../src/ui/dialog/inkscape-preferences.cpp:541 msgid "Dutch (nl)" -msgstr "" +msgstr "Neerlandês (nl)" #: ../src/ui/dialog/inkscape-preferences.cpp:541 msgid "Dzongkha (dz)" -msgstr "" +msgstr "Butanês (dz)" #: ../src/ui/dialog/inkscape-preferences.cpp:542 msgid "German (de)" -msgstr "" +msgstr "Alemão (de)" #: ../src/ui/dialog/inkscape-preferences.cpp:542 -#, fuzzy msgid "Greek (el)" -msgstr "Canal Verde" +msgstr "Grego (el)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 -#, fuzzy msgid "English (en)" -msgstr "Ângulo da caneta" +msgstr "Inglês (en)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 msgid "English/Australia (en_AU)" -msgstr "" +msgstr "Inglês/Austrália (en_AU)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 msgid "English/Canada (en_CA)" -msgstr "" +msgstr "Inglês/Canadá (en_CA)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 msgid "English/Great Britain (en_GB)" -msgstr "" +msgstr "Inglês/Grâ-Bretanha (en_GB)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 msgid "Pig Latin (en_US@piglatin)" -msgstr "" +msgstr "Pig Latin (en_US@piglatin)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 -#, fuzzy msgid "Esperanto (eo)" -msgstr "Operador" +msgstr "Esperanto (eo)" #: ../src/ui/dialog/inkscape-preferences.cpp:543 msgid "Estonian (et)" -msgstr "" +msgstr "Estónio (et)" #: ../src/ui/dialog/inkscape-preferences.cpp:544 msgid "Farsi (fa)" -msgstr "" +msgstr "Persa (fa)" #: ../src/ui/dialog/inkscape-preferences.cpp:544 msgid "Finnish (fi)" -msgstr "" +msgstr "Finlandês (fi)" #: ../src/ui/dialog/inkscape-preferences.cpp:544 msgid "French (fr)" -msgstr "" +msgstr "Francês (fr)" #: ../src/ui/dialog/inkscape-preferences.cpp:545 msgid "Galician (gl)" -msgstr "" +msgstr "Galego (gl)" #: ../src/ui/dialog/inkscape-preferences.cpp:545 msgid "Gujarati (gu)" -msgstr "" +msgstr "Gujaráti (gu)" #: ../src/ui/dialog/inkscape-preferences.cpp:546 msgid "Hebrew (he)" -msgstr "" +msgstr "Hebraico (he)" #: ../src/ui/dialog/inkscape-preferences.cpp:546 msgid "Hindi (hi)" -msgstr "" +msgstr "Hindi (hi)" #: ../src/ui/dialog/inkscape-preferences.cpp:546 msgid "Hungarian (hu)" -msgstr "" +msgstr "Húngaro (hu)" #: ../src/ui/dialog/inkscape-preferences.cpp:547 msgid "Icelandic (is)" -msgstr "" +msgstr "Islandês (is)" #: ../src/ui/dialog/inkscape-preferences.cpp:547 msgid "Indonesian (id)" -msgstr "" +msgstr "Indonésio (id)" #: ../src/ui/dialog/inkscape-preferences.cpp:547 msgid "Irish (ga)" -msgstr "" +msgstr "Irlandês (ga)" #: ../src/ui/dialog/inkscape-preferences.cpp:547 -#, fuzzy msgid "Italian (it)" -msgstr "Itálico" +msgstr "Italiano (it)" #: ../src/ui/dialog/inkscape-preferences.cpp:548 msgid "Japanese (ja)" -msgstr "" +msgstr "Japonês (ja)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Kannada (kn)" -msgstr "" +msgstr "Canarês (kn)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Kashmiri in Peso-Arabic script (ks@aran)" -msgstr "" +msgstr "Caxemiriano no alfabeto Persa-Ãrabe (ks@aran)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Kashmiri in Devanagari script (ks@deva)" -msgstr "" +msgstr "Caxemiriano no alfabeto Devanágari (ks@deva)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Khmer (km)" -msgstr "" +msgstr "Cambojano (km)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Kinyarwanda (rw)" -msgstr "" +msgstr "Quiniaruanda (rw)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Konkani (kok)" -msgstr "" +msgstr "Concani (kok)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Konkani in Latin script (kok@latin)" -msgstr "" +msgstr "Concani no alfabeto Latino (kok@latin)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Korean (ko)" -msgstr "" +msgstr "Coreano (ko)" #: ../src/ui/dialog/inkscape-preferences.cpp:550 msgid "Latvian (lv)" -msgstr "" +msgstr "Letão (lv)" #: ../src/ui/dialog/inkscape-preferences.cpp:550 msgid "Lithuanian (lt)" -msgstr "" +msgstr "Lituano (lt)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Macedonian (mk)" -msgstr "" +msgstr "Macedónio (mk)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Maithili (mai)" -msgstr "" +msgstr "Maithili (mai)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Malayalam (ml)" -msgstr "" +msgstr "Malaiala (ml)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Manipuri (mni)" -msgstr "" +msgstr "Manipuri (mni)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Manipuri in Bengali script (mni@beng)" -msgstr "" +msgstr "Manipuri no alfabeto Bengali (mni@beng)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Marathi (mr)" -msgstr "" +msgstr "Marata (mr)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Mongolian (mn)" -msgstr "" +msgstr "Mongol (mn)" #: ../src/ui/dialog/inkscape-preferences.cpp:552 -#, fuzzy msgid "Nepali (ne)" -msgstr "Nova linha" +msgstr "Nepalês (ne)" #: ../src/ui/dialog/inkscape-preferences.cpp:552 msgid "Norwegian BokmÃ¥l (nb)" -msgstr "" +msgstr "BokmÃ¥l Norueguês (nb)" #: ../src/ui/dialog/inkscape-preferences.cpp:552 msgid "Norwegian Nynorsk (nn)" -msgstr "" +msgstr "Novo Norueguês (nn)" #: ../src/ui/dialog/inkscape-preferences.cpp:553 msgid "Odia (or)" -msgstr "" +msgstr "Odia (or)" #: ../src/ui/dialog/inkscape-preferences.cpp:554 msgid "Panjabi (pa)" -msgstr "" +msgstr "Panjabi (pa)" #: ../src/ui/dialog/inkscape-preferences.cpp:554 msgid "Polish (pl)" -msgstr "" +msgstr "Polaco (pl)" #: ../src/ui/dialog/inkscape-preferences.cpp:554 msgid "Portuguese (pt)" -msgstr "" +msgstr "Português (pt)" #: ../src/ui/dialog/inkscape-preferences.cpp:554 msgid "Portuguese/Brazil (pt_BR)" -msgstr "" +msgstr "Português/Brasil (pt_BR)" #: ../src/ui/dialog/inkscape-preferences.cpp:555 msgid "Romanian (ro)" -msgstr "" +msgstr "Romeno (ro)" #: ../src/ui/dialog/inkscape-preferences.cpp:555 -#, fuzzy msgid "Russian (ru)" -msgstr "Desfocagem gaussiana" +msgstr "Russo (ru)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 msgid "Sanskrit (sa)" -msgstr "" +msgstr "Sânscrito (sa)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 -#, fuzzy msgid "Santali (sat)" -msgstr "Itálico" +msgstr "Santali (sat)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 msgid "Santali in Devanagari script (sat@deva)" -msgstr "" +msgstr "Santali no alfabeto Devanágari (sat@deva)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 msgid "Serbian (sr)" -msgstr "" +msgstr "Sérvio (sr)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 msgid "Serbian in Latin script (sr@latin)" -msgstr "" +msgstr "Sérvio no alfabeto Latino (sr@latin)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Sindhi (sd)" -msgstr "" +msgstr "Sindi (sd)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Sindhi in Devanagari script (sd@deva)" -msgstr "" +msgstr "Sindi no alfabeto Devanágari (sd@deva)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Slovak (sk)" -msgstr "" +msgstr "Eslovaco (sk)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Slovenian (sl)" -msgstr "" +msgstr "Esloveno (sl)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Spanish (es)" -msgstr "" +msgstr "Espanhol (es)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Spanish/Mexico (es_MX)" -msgstr "" +msgstr "Espanhol/México (es_MX)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Swedish (sv)" -msgstr "" +msgstr "Sueco (sv)" #: ../src/ui/dialog/inkscape-preferences.cpp:558 -#, fuzzy msgid "Tamil (ta)" -msgstr "Ladrilhado" +msgstr "Tâmil (ta)" #: ../src/ui/dialog/inkscape-preferences.cpp:558 msgid "Telugu (te)" -msgstr "" +msgstr "Telugo (te)" #: ../src/ui/dialog/inkscape-preferences.cpp:558 msgid "Thai (th)" -msgstr "" +msgstr "Tailandês (th)" #: ../src/ui/dialog/inkscape-preferences.cpp:558 msgid "Turkish (tr)" -msgstr "" +msgstr "Turco (tr)" #: ../src/ui/dialog/inkscape-preferences.cpp:559 msgid "Ukrainian (uk)" -msgstr "" +msgstr "Ucraniano (uk)" #: ../src/ui/dialog/inkscape-preferences.cpp:559 msgid "Urdu (ur)" -msgstr "" +msgstr "Urdu (ur)" #: ../src/ui/dialog/inkscape-preferences.cpp:560 msgid "Vietnamese (vi)" -msgstr "" +msgstr "Vietnamita (vi)" #: ../src/ui/dialog/inkscape-preferences.cpp:612 -#, fuzzy msgid "Language (requires restart):" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "Língua (necessário reiniciar):" #: ../src/ui/dialog/inkscape-preferences.cpp:613 msgid "Set the language for menus and number formats" -msgstr "" +msgstr "Definir o idioma nos menus e formatos de números" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Larger" -msgstr "Grande" +msgstr "Maior" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Large" msgstr "Grande" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Small" msgstr "Pequeno" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Smaller" -msgstr "Pequeno" +msgstr "Pequenino" #: ../src/ui/dialog/inkscape-preferences.cpp:621 -#, fuzzy msgid "Toolbox icon size:" -msgstr "Fazer ferramentas principais menores" +msgstr "Tamanho dos ícones na barra de ferramentas:" #: ../src/ui/dialog/inkscape-preferences.cpp:622 -#, fuzzy msgid "Set the size for the tool icons (requires restart)" -msgstr "" -"Fazer com que a barra de ferramentas de comandos utilize o tamanho " -"'secundário' (é necessário reiniciar)" +msgstr "Definir o tamanho dos ícones das ferramentas (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:625 -#, fuzzy msgid "Control bar icon size:" -msgstr "Barra de Controles de Ferramenta" +msgstr "Tamanho dos ícones na barra de ferramenta atual:" #: ../src/ui/dialog/inkscape-preferences.cpp:626 -#, fuzzy msgid "" "Set the size for the icons in tools' control bars to use (requires restart)" msgstr "" -"Fazer com que a barra de ferramentas de comandos utilize o tamanho " -"'secundário' (é necessário reiniciar)" +"Definir o tamanho dos ícones na barra de ferramenta atual (necessário " +"reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:629 -#, fuzzy msgid "Secondary toolbar icon size:" -msgstr "Fazer ferramentas principais menores" +msgstr "Tamanho dos ícones na barra de ferramentas secundária:" #: ../src/ui/dialog/inkscape-preferences.cpp:630 -#, fuzzy msgid "" "Set the size for the icons in secondary toolbars to use (requires restart)" msgstr "" -"Fazer com que a barra de ferramentas de comandos utilize o tamanho " -"'secundário' (é necessário reiniciar)" +"Definir o tamanho dos ícones das barras de ferramentas secundárias " +"(necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:633 msgid "Work-around color sliders not drawing" -msgstr "" +msgstr "Alternativa para deslizadores de cores mal mostrados" #: ../src/ui/dialog/inkscape-preferences.cpp:635 msgid "" "When on, will attempt to work around bugs in certain GTK themes drawing " "color sliders" msgstr "" +"Quando ativado, tentar resover problemas que possam surgir, como não mostrar " +"corretamente os deslisadores de cores em certos temas GTK" #: ../src/ui/dialog/inkscape-preferences.cpp:640 -#, fuzzy msgid "Clear list" -msgstr "Limpar os valores" +msgstr "Limpar lista" #: ../src/ui/dialog/inkscape-preferences.cpp:643 -#, fuzzy msgid "Maximum documents in Open _Recent:" -msgstr "Máximo de desenhos recentes:" +msgstr "Número máximo de documentos no menu Abrir _Recentes:" #: ../src/ui/dialog/inkscape-preferences.cpp:644 -#, fuzzy msgid "" "Set the maximum length of the Open Recent list in the File menu, or clear " "the list" -msgstr "O tamanho máximo para a lista de Abrir Recentes no menu Ficheiro" +msgstr "" +"Definir o número máximo da lista em Abrir Recentes no menu Ficheiro, ou " +"limpar a lista" #: ../src/ui/dialog/inkscape-preferences.cpp:647 msgid "_Zoom correction factor (in %):" -msgstr "" +msgstr "Fator de correção de _apliação/redução (em %):" #: ../src/ui/dialog/inkscape-preferences.cpp:648 msgid "" @@ -19945,122 +18771,124 @@ msgid "" "real length. This information is used when zooming to 1:1, 1:2, etc., to " "display objects in their true sizes" msgstr "" +"Ajustar o deslizador até que o comprimento da régua no ecrã seja igual ao " +"comprimento real. Esta informação é utilizada ao aproximar ou afastar para " +"1:1, 1:2, etc. para mostrar objetos nos seus tamanhos reais." #: ../src/ui/dialog/inkscape-preferences.cpp:651 msgid "Enable dynamic relayout for incomplete sections" -msgstr "" +msgstr "Ativar recriar layout dinâmico para secções incompletas" #: ../src/ui/dialog/inkscape-preferences.cpp:653 msgid "" "When on, will allow dynamic layout of components that are not completely " "finished being refactored" msgstr "" +"Quanto ativado, permite o layout dinâmico dos componentes que não estejam " +"completamente terminados serem refeitos" #. show infobox #: ../src/ui/dialog/inkscape-preferences.cpp:656 -#, fuzzy msgid "Show filter primitives infobox (requires restart)" -msgstr "Definir atributo de primitiva de filtro" +msgstr "Mostrar caixa de informação dos filtros (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:658 msgid "" "Show icons and descriptions for the filter primitives available at the " "filter effects dialog" msgstr "" +"Mostrar ícones e descrições para os filtros disponíveis no painel de efeitos " +"de filtros" #: ../src/ui/dialog/inkscape-preferences.cpp:661 #: ../src/ui/dialog/inkscape-preferences.cpp:669 -#, fuzzy msgid "Icons only" -msgstr "Cor das linhas guias" +msgstr "Apenas ícones" #: ../src/ui/dialog/inkscape-preferences.cpp:661 #: ../src/ui/dialog/inkscape-preferences.cpp:669 -#, fuzzy msgid "Text only" -msgstr "Entrada de Texto" +msgstr "Apenas texto" #: ../src/ui/dialog/inkscape-preferences.cpp:661 #: ../src/ui/dialog/inkscape-preferences.cpp:669 -#, fuzzy msgid "Icons and text" -msgstr "Nenhuma pintura" +msgstr "Ãcones e texto" #: ../src/ui/dialog/inkscape-preferences.cpp:666 -#, fuzzy msgid "Dockbar style (requires restart):" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "Estilo da barra vertical dos painéis (necessário reiniciar):" #: ../src/ui/dialog/inkscape-preferences.cpp:667 msgid "" "Selects whether the vertical bars on the dockbar will show text labels, " "icons, or both" msgstr "" +"Define se a barra vertical dos painéis são mostradas com texto, ícones ou " +"ambos" #: ../src/ui/dialog/inkscape-preferences.cpp:674 -#, fuzzy msgid "Switcher style (requires restart):" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "Estilo dos painéis minimizados (necessário reiniciar):" #: ../src/ui/dialog/inkscape-preferences.cpp:675 msgid "" "Selects whether the dockbar switcher will show text labels, icons, or both" msgstr "" +"Define se os painéis minimizados mostram o nome do painel, o ícone, ou ambos." #. Windows #: ../src/ui/dialog/inkscape-preferences.cpp:679 msgid "Save and restore window geometry for each document" -msgstr "Guardar e restaurar a geometria das janelas para cada documento" +msgstr "Guardar e restaurar a posição e tamanho da janela em cada documento" #: ../src/ui/dialog/inkscape-preferences.cpp:680 msgid "Remember and use last window's geometry" -msgstr "Lembrar e usar a última geometria de janela" +msgstr "Lembrar e usar a última posição e tamanho da janela" #: ../src/ui/dialog/inkscape-preferences.cpp:681 msgid "Don't save window geometry" -msgstr "Não guardar geometria da janela" +msgstr "Não guardar posição e tamanho da janela" #: ../src/ui/dialog/inkscape-preferences.cpp:683 msgid "Save and restore dialogs status" -msgstr "" +msgstr "Guardar e restaurar o estado dos painéis laterais" #: ../src/ui/dialog/inkscape-preferences.cpp:684 #: ../src/ui/dialog/inkscape-preferences.cpp:720 msgid "Don't save dialogs status" -msgstr "" +msgstr "Não guardar o estado dos painéis laterais" #: ../src/ui/dialog/inkscape-preferences.cpp:686 #: ../src/ui/dialog/inkscape-preferences.cpp:728 msgid "Dockable" -msgstr "Docável" +msgstr "Agrupados num painel principal (docáveis)" #: ../src/ui/dialog/inkscape-preferences.cpp:690 msgid "Native open/save dialogs" -msgstr "" +msgstr "Janelas de abrir/gravar nativas" #: ../src/ui/dialog/inkscape-preferences.cpp:691 msgid "GTK open/save dialogs" -msgstr "" +msgstr "Janelas de abrir/gravar do GTK" #: ../src/ui/dialog/inkscape-preferences.cpp:693 msgid "Dialogs are hidden in taskbar" -msgstr "Janelas são escondidas na barra de tarefas" +msgstr "As janelas são escondidas na barra de tarefas" #: ../src/ui/dialog/inkscape-preferences.cpp:694 -#, fuzzy msgid "Save and restore documents viewport" -msgstr "Guardar e restaurar a geometria das janelas para cada documento" +msgstr "Gravar e restaurar a área visível para cada documento" #: ../src/ui/dialog/inkscape-preferences.cpp:695 msgid "Zoom when window is resized" -msgstr "Ampliar quando janela for redimensionada" +msgstr "Ampliar desenho quando a janela for redimensionada" #: ../src/ui/dialog/inkscape-preferences.cpp:696 msgid "Show close button on dialogs" -msgstr "Mostrar botões de fechar em diálogos" +msgstr "Mostrar botões de fechar em janelas de diálogo" #: ../src/ui/dialog/inkscape-preferences.cpp:697 -#, fuzzy msgctxt "Dialog on top" msgid "None" msgstr "Nenhum" @@ -20070,37 +18898,31 @@ msgid "Aggressive" msgstr "Agressivo" #: ../src/ui/dialog/inkscape-preferences.cpp:702 -#, fuzzy msgctxt "Window size" msgid "Small" -msgstr "Pequeno" +msgstr "Pequena" #: ../src/ui/dialog/inkscape-preferences.cpp:702 -#, fuzzy msgctxt "Window size" msgid "Large" msgstr "Grande" #: ../src/ui/dialog/inkscape-preferences.cpp:702 -#, fuzzy msgctxt "Window size" msgid "Maximized" -msgstr "Otimizado" +msgstr "Maximizada" #: ../src/ui/dialog/inkscape-preferences.cpp:706 -#, fuzzy msgid "Default window size:" -msgstr "Configurações da página" +msgstr "Tamanho padrão da janela:" #: ../src/ui/dialog/inkscape-preferences.cpp:707 -#, fuzzy msgid "Set the default window size" -msgstr "Criar degradê padrão" +msgstr "Definir o tamanho da janela padrão do Inkscape" #: ../src/ui/dialog/inkscape-preferences.cpp:710 -#, fuzzy msgid "Saving window geometry (size and position)" -msgstr "Salvando geometria da janela (tamanho e posição):" +msgstr "Guardar tamanho e posição da janela (geometria)" #: ../src/ui/dialog/inkscape-preferences.cpp:712 msgid "Let the window manager determine placement of all windows" @@ -20114,56 +18936,55 @@ msgid "" "preferences)" msgstr "" "Lembrar e utilizar a última geometria da janela (guardar nas preferências do " -"utilizador) " +"utilizador)" #: ../src/ui/dialog/inkscape-preferences.cpp:716 msgid "" "Save and restore window geometry for each document (saves geometry in the " "document)" msgstr "" -"Guardar e restaurar a geometria da janela para cada documento (guardar no " -"documento)" +"Guardar e restaurar a geometria da janela para cada documento (guarda a " +"geometria no documento)" #: ../src/ui/dialog/inkscape-preferences.cpp:718 -#, fuzzy msgid "Saving dialogs status" -msgstr "Mostrar diálogo ao iniciar" +msgstr "Guardar estados dos painéis laterais" #: ../src/ui/dialog/inkscape-preferences.cpp:722 msgid "" "Save and restore dialogs status (the last open windows dialogs are saved " "when it closes)" msgstr "" +"Guardar e restaurar estados dos painéis laterais (os últimos painéis " +"laterais são guardados quando se fecha)" #: ../src/ui/dialog/inkscape-preferences.cpp:726 -#, fuzzy msgid "Dialog behavior (requires restart)" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "Disposição dos painéis laterais (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:732 -#, fuzzy msgid "Desktop integration" -msgstr "Destino da impressão" +msgstr "Integração no ambiente de trabalho" #: ../src/ui/dialog/inkscape-preferences.cpp:734 msgid "Use Windows like open and save dialogs" -msgstr "" +msgstr "Usar janelas de diálogo de abrir e guardar como as do Windows" #: ../src/ui/dialog/inkscape-preferences.cpp:736 msgid "Use GTK open and save dialogs " -msgstr "" +msgstr "Usar janelas de diálogo de abrir e guardar como do GTK " #: ../src/ui/dialog/inkscape-preferences.cpp:740 msgid "Dialogs on top:" -msgstr "Janelas no topo:" +msgstr "Janelas de diálogo no topo:" #: ../src/ui/dialog/inkscape-preferences.cpp:743 msgid "Dialogs are treated as regular windows" -msgstr "Diálogos são tratados como janelas normais" +msgstr "As janelas de diálogo são tratadas como janelas normais" #: ../src/ui/dialog/inkscape-preferences.cpp:745 msgid "Dialogs stay on top of document windows" -msgstr "Diálogos permanecem acima das janelas de desenho" +msgstr "As janelas de diálogo permanecem acima das janelas de documentos" #: ../src/ui/dialog/inkscape-preferences.cpp:747 msgid "Same as Normal but may work better with some window managers" @@ -20171,32 +18992,28 @@ msgstr "" "Igual a Normal mas pode funcionar melhor com alguns gerenciadores de janelas" #: ../src/ui/dialog/inkscape-preferences.cpp:750 -#, fuzzy msgid "Dialog Transparency" -msgstr "0 (transparente)" +msgstr "Transparência das Janelas de Diálogo" #: ../src/ui/dialog/inkscape-preferences.cpp:752 -#, fuzzy msgid "_Opacity when focused:" -msgstr "Canal de Opacidade" +msgstr "_Opacidade quando destacadas:" #: ../src/ui/dialog/inkscape-preferences.cpp:754 -#, fuzzy msgid "Opacity when _unfocused:" -msgstr "Canal de Opacidade" +msgstr "Opacidade quando _não-destacadas:" #: ../src/ui/dialog/inkscape-preferences.cpp:756 msgid "_Time of opacity change animation:" -msgstr "" +msgstr "_Tempo da animação de alteração da opacidade:" #: ../src/ui/dialog/inkscape-preferences.cpp:759 -#, fuzzy msgid "Miscellaneous" -msgstr "Miscelânio:" +msgstr "Miscelânea" #: ../src/ui/dialog/inkscape-preferences.cpp:762 msgid "Whether dialog windows are to be hidden in the window manager taskbar" -msgstr "Quando janelas de diálogo são escondidas na barra de tarefas" +msgstr "Se janelas de diálogo são escondidas, ou não, na barra de tarefas" #: ../src/ui/dialog/inkscape-preferences.cpp:765 msgid "" @@ -20204,19 +19021,22 @@ msgid "" "(this is the default which can be changed in any window using the button " "above the right scrollbar)" msgstr "" -"Ampliar desenho quando janela for redimensionada. Para manter a mesma área " -"visível (Este é o padrão que pode ser mudado em qualquer janela usando o " -"botão que está abaixo da barra de rolagem direita)" +"Ampliar desenho quando a janela do documento for redimensionada, para manter " +"a mesma área visível (isto é o comportamento padrão que pode ser alterado em " +"qualquer janela usando o botão da lupa 1:1 por cima da barra de elevador)" #: ../src/ui/dialog/inkscape-preferences.cpp:767 msgid "" "Save documents viewport (zoom and panning position). Useful to turn off when " "sharing version controlled files." msgstr "" +"Guardar vista dos documentos (posição e apliação). Útil para desativar ao " +"partilhar ficheiros controlados pela versão." #: ../src/ui/dialog/inkscape-preferences.cpp:769 msgid "Whether dialog windows have a close button (requires restart)" -msgstr "Janelas de diálogo possuem um botão de fechar (requer reinicialização)" +msgstr "" +"Se as janelas de diálogo têm ou não um botão de fechar (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:770 msgid "Windows" @@ -20225,102 +19045,88 @@ msgstr "Janelas" #. Grids #: ../src/ui/dialog/inkscape-preferences.cpp:773 msgid "Line color when zooming out" -msgstr "" +msgstr "Cor a usar nas linhas ao afastar a vista" #: ../src/ui/dialog/inkscape-preferences.cpp:776 msgid "The gridlines will be shown in minor grid line color" -msgstr "" +msgstr "As linhas da grelha serão mostradas na cor da linha fina da grelha" #: ../src/ui/dialog/inkscape-preferences.cpp:778 msgid "The gridlines will be shown in major grid line color" -msgstr "" +msgstr "As linhas da grelha serão mostradas na cor da linha grossa da grelha" #: ../src/ui/dialog/inkscape-preferences.cpp:780 -#, fuzzy msgid "Default grid settings" -msgstr "Configurações da página" +msgstr "Definições da grelha padrão" #: ../src/ui/dialog/inkscape-preferences.cpp:786 #: ../src/ui/dialog/inkscape-preferences.cpp:811 -#, fuzzy msgid "Grid units:" -msgstr "_Unidades da grelha:" +msgstr "Unidades da grelha:" #: ../src/ui/dialog/inkscape-preferences.cpp:791 #: ../src/ui/dialog/inkscape-preferences.cpp:816 -#, fuzzy msgid "Origin X:" -msgstr "_Origem X:" +msgstr "Origem X:" #: ../src/ui/dialog/inkscape-preferences.cpp:792 #: ../src/ui/dialog/inkscape-preferences.cpp:817 -#, fuzzy msgid "Origin Y:" -msgstr "O_rigem Y:" +msgstr "Origem Y:" #: ../src/ui/dialog/inkscape-preferences.cpp:797 -#, fuzzy msgid "Spacing X:" -msgstr "Espaçamento _X:" +msgstr "Espaçamento X:" #: ../src/ui/dialog/inkscape-preferences.cpp:798 #: ../src/ui/dialog/inkscape-preferences.cpp:820 -#, fuzzy msgid "Spacing Y:" -msgstr "Espaçamento _Y:" +msgstr "Espaçamento Y:" #: ../src/ui/dialog/inkscape-preferences.cpp:800 #: ../src/ui/dialog/inkscape-preferences.cpp:801 #: ../src/ui/dialog/inkscape-preferences.cpp:825 #: ../src/ui/dialog/inkscape-preferences.cpp:826 -#, fuzzy msgid "Minor grid line color:" -msgstr "Cor da linha de grelha ma_ior:" +msgstr "Cor da linha fina da grelha:" #: ../src/ui/dialog/inkscape-preferences.cpp:801 #: ../src/ui/dialog/inkscape-preferences.cpp:826 -#, fuzzy msgid "Color used for normal grid lines" -msgstr "Cor das linhas de grelha" +msgstr "Cor das linhas finas da grelha" #: ../src/ui/dialog/inkscape-preferences.cpp:802 #: ../src/ui/dialog/inkscape-preferences.cpp:803 #: ../src/ui/dialog/inkscape-preferences.cpp:827 #: ../src/ui/dialog/inkscape-preferences.cpp:828 -#, fuzzy msgid "Major grid line color:" -msgstr "Cor da linha de grelha ma_ior:" +msgstr "Cor da linha grossa da grelha:" #: ../src/ui/dialog/inkscape-preferences.cpp:803 #: ../src/ui/dialog/inkscape-preferences.cpp:828 -#, fuzzy msgid "Color used for major (highlighted) grid lines" -msgstr "Cor da linha de grelha maior (destacada)" +msgstr "Cor das linhas grossas da grelha" #: ../src/ui/dialog/inkscape-preferences.cpp:805 #: ../src/ui/dialog/inkscape-preferences.cpp:830 -#, fuzzy msgid "Major grid line every:" -msgstr "_Linha de grelha maior a cada:" +msgstr "Linha grossa da grelha a cada:" #: ../src/ui/dialog/inkscape-preferences.cpp:806 -#, fuzzy msgid "Show dots instead of lines" -msgstr "_Mostrar pontos ao invés de linhas" +msgstr "Mostrar grelha de pontos em vez de linhas" #: ../src/ui/dialog/inkscape-preferences.cpp:807 -#, fuzzy msgid "If set, display dots at gridpoints instead of gridlines" -msgstr "Mostrar pontos na grelha ao invés de linhas" +msgstr "Se ativado, mostra a grelha numa série de pontos em vez de linhas" #: ../src/ui/dialog/inkscape-preferences.cpp:888 -#, fuzzy msgid "Input/Output" -msgstr "Saída" +msgstr "Entrada/Saída" #: ../src/ui/dialog/inkscape-preferences.cpp:891 msgid "Use current directory for \"Save As ...\"" -msgstr "" +msgstr "Usar a pasta atual para \"Guardar como ...\"" #: ../src/ui/dialog/inkscape-preferences.cpp:893 msgid "" @@ -20329,161 +19135,154 @@ msgid "" "it's off, each will open in the directory where you last saved a file using " "it" msgstr "" +"Quando esta opção está ativada, ao \"Gravar como...\" e \"Gravar uma Cópia..." +"\" será aberta a janela de diálogo com a localização do documento atual; " +"quando desativada esta opção, será mostrada a localização do último " +"documento gravado" #: ../src/ui/dialog/inkscape-preferences.cpp:895 msgid "Add label comments to printing output" -msgstr "Adicionar comentários etiqueta para a saída de impressão" +msgstr "Adicionar comentários de etiquetas para a saída de impressão" #: ../src/ui/dialog/inkscape-preferences.cpp:897 msgid "" "When on, a comment will be added to the raw print output, marking the " "rendered output for an object with its label" msgstr "" -"Se activado, um comentário será adicionado à saída de impressão padrão, " -"marcando a saída restituída para um objecto com esta etiqueta" +"Se ativado, será adicionado um comentário à saída de impressão em bruto, " +"marcando a saída para um objeto com a sua etiqueta" #: ../src/ui/dialog/inkscape-preferences.cpp:899 -#, fuzzy msgid "Add default metadata to new documents" -msgstr "Metadados salvos com o desenho" +msgstr "Adicionar metadados padrão aos novos documentos" #: ../src/ui/dialog/inkscape-preferences.cpp:901 msgid "" "Add default metadata to new documents. Default metadata can be set from " "Document Properties->Metadata." msgstr "" +"Adicionar metadados padrão. Os metadados padrão podem ser configurados em " +"Propriedades do Documento->Metadados" #: ../src/ui/dialog/inkscape-preferences.cpp:905 -#, fuzzy msgid "_Grab sensitivity:" -msgstr "Sensibilidade de agarrar:" +msgstr "Sensibilidade de _agarrar:" #: ../src/ui/dialog/inkscape-preferences.cpp:905 -#, fuzzy msgid "pixels (requires restart)" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "píxeis (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:906 msgid "" "How close on the screen you need to be to an object to be able to grab it " "with mouse (in screen pixels)" msgstr "" -"Quão perto da Ecrã é preciso que o de um objecto esteja para ser possível " -"agarrá-lo com o mouse (em pixels)" +"Quão perto do ecrã é preciso que o de um objeto esteja para ser possível " +"agarrá-lo com o rato (em píxeis do ecrã)" #: ../src/ui/dialog/inkscape-preferences.cpp:908 -#, fuzzy msgid "_Click/drag threshold:" -msgstr "Limiar para clicar/arrastar:" +msgstr "Limiar para _clicar/arrastar:" #: ../src/ui/dialog/inkscape-preferences.cpp:908 #: ../src/ui/dialog/inkscape-preferences.cpp:1250 #: ../src/ui/dialog/inkscape-preferences.cpp:1254 #: ../src/ui/dialog/inkscape-preferences.cpp:1264 msgid "pixels" -msgstr "pixels" +msgstr "píxeis" #: ../src/ui/dialog/inkscape-preferences.cpp:909 msgid "" "Maximum mouse drag (in screen pixels) which is considered a click, not a drag" msgstr "" -"Arrasto máximo do mouse (em pixels) que é considerado um clicar e não " +"Arrasto máximo do rato (em píxeis do ecrã) que é considerado um clicar e não " "arrastar" #: ../src/ui/dialog/inkscape-preferences.cpp:912 -#, fuzzy msgid "_Handle size:" -msgstr "Ângulo" +msgstr "_Tamanho da alça:" #: ../src/ui/dialog/inkscape-preferences.cpp:913 -#, fuzzy msgid "Set the relative size of node handles" -msgstr "Deslocar alças do nó" +msgstr "Definir o tamanho relativo das alças dos nós" #: ../src/ui/dialog/inkscape-preferences.cpp:915 -#, fuzzy msgid "Use pressure-sensitive tablet (requires restart)" -msgstr "" -"Use a pressão sensível da Mesa Digitalizadora (tablet) ou outro dispositivo " -"(necessita reiniciar)" +msgstr "Usar dispositivo sensível à pressão (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:917 -#, fuzzy msgid "" "Use the capabilities of a tablet or other pressure-sensitive device. Disable " "this only if you have problems with the tablet (you can still use it as a " "mouse)" msgstr "" -"Use as capacidades da Mesa Digitalizadora (tablet) ou outro dispositivo de " -"sensível a pressão. Desative-o apenas se tiver problemas com a Mesa " -"Digitalizadora." +"Usar as capacidades de uma nesa digitalizadora, tablet ou outro dispositivo " +"sensível à pressão. Desativar isto apenas se tiver problemas com o " +"dispositivo (pode usá-lo na mesma como um simples rato)" #: ../src/ui/dialog/inkscape-preferences.cpp:919 -#, fuzzy msgid "Switch tool based on tablet device (requires restart)" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "Mudança de ferramenta baseado em tablet (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:921 msgid "" "Change tool as different devices are used on the tablet (pen, eraser, mouse)" msgstr "" +"Alterar a ferramenta conforme sejam utilizados diferentes dispositivos na " +"tablet (caneta, borracha, rato)" #: ../src/ui/dialog/inkscape-preferences.cpp:922 -#, fuzzy msgid "Input devices" -msgstr "D_ispositivos de Entrada..." +msgstr "Dispositivos de entrada" #. SVG output options #: ../src/ui/dialog/inkscape-preferences.cpp:925 -#, fuzzy msgid "Use named colors" -msgstr "Ajustar a cor escolhida" +msgstr "Usar nomes das cores" #: ../src/ui/dialog/inkscape-preferences.cpp:926 msgid "" "If set, write the CSS name of the color when available (e.g. 'red' or " "'magenta') instead of the numeric value" msgstr "" +"Se ativado, gravar o nome CSS da cor quando disponível (por exemplo " +"'vermelho' ou 'magenta') em vez do valor numérico" #: ../src/ui/dialog/inkscape-preferences.cpp:928 -#, fuzzy msgid "XML formatting" -msgstr "Informação" +msgstr "Formatação XML" #: ../src/ui/dialog/inkscape-preferences.cpp:930 -#, fuzzy msgid "Inline attributes" -msgstr "Ajustar atributo" +msgstr "Atributos inline" #: ../src/ui/dialog/inkscape-preferences.cpp:931 msgid "Put attributes on the same line as the element tag" -msgstr "" +msgstr "Colocar atributos na mesma linha do elemento etiqueta" #: ../src/ui/dialog/inkscape-preferences.cpp:934 -#, fuzzy msgid "_Indent, spaces:" -msgstr "Indentar nó" +msgstr "_Indentação, espaços:" #: ../src/ui/dialog/inkscape-preferences.cpp:934 -#, fuzzy msgid "" "The number of spaces to use for indenting nested elements; set to 0 for no " "indentation" -msgstr "O número de caminhos que serão gerados." +msgstr "" +"O número de espaços a usar para identar elementos em redor; usar 0 para não " +"identar" #: ../src/ui/dialog/inkscape-preferences.cpp:936 -#, fuzzy msgid "Path data" -msgstr "Colar caminho" +msgstr "Caminho dos dados" #: ../src/ui/dialog/inkscape-preferences.cpp:939 msgid "Absolute" -msgstr "" +msgstr "Absoluto" #: ../src/ui/dialog/inkscape-preferences.cpp:939 -#, fuzzy msgid "Relative" -msgstr "Relativo a: " +msgstr "Relativo" #: ../src/ui/dialog/inkscape-preferences.cpp:939 #: ../src/ui/dialog/inkscape-preferences.cpp:1229 @@ -20492,7 +19291,7 @@ msgstr "Otimizado" #: ../src/ui/dialog/inkscape-preferences.cpp:943 msgid "Path string format:" -msgstr "" +msgstr "Formato da expressão do caminho:" #: ../src/ui/dialog/inkscape-preferences.cpp:943 msgid "" @@ -20500,96 +19299,101 @@ msgid "" "relative coordinates, or optimized for string length (mixed absolute and " "relative coordinates)" msgstr "" +"Os dados dos caminhos devem ser gravados: apenas com coordenadas absolutas, " +"apenas com coordenadas relativas, ou optimizadas para o comprimento da " +"expressão (coordenadas absolutas e relativas misturadas)" #: ../src/ui/dialog/inkscape-preferences.cpp:945 msgid "Force repeat commands" -msgstr "" +msgstr "Forçar comandos repetitivos" #: ../src/ui/dialog/inkscape-preferences.cpp:946 msgid "" "Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead " "of 'L 1,2 3,4')" msgstr "" +"Forçar a repetição do mesmo comando de caminho (por exemplo, 'L 1,2 L 3,4' " +"em vez de 'L 1,2 3,4')" #: ../src/ui/dialog/inkscape-preferences.cpp:948 -#, fuzzy msgid "Numbers" -msgstr "Numerar Nós" +msgstr "Números" #: ../src/ui/dialog/inkscape-preferences.cpp:951 -#, fuzzy msgid "_Numeric precision:" -msgstr "Precisão" +msgstr "Precisão _numérica:" #: ../src/ui/dialog/inkscape-preferences.cpp:951 msgid "Significant figures of the values written to the SVG file" -msgstr "" +msgstr "Números significativos dos valores gravados no ficheiro SVG" #: ../src/ui/dialog/inkscape-preferences.cpp:954 -#, fuzzy msgid "Minimum _exponent:" -msgstr "Tamanho mínimo" +msgstr "_Exponente mínimo:" #: ../src/ui/dialog/inkscape-preferences.cpp:954 msgid "" "The smallest number written to SVG is 10 to the power of this exponent; " "anything smaller is written as zero" msgstr "" +"O número mais pequeno gravado no SVG é 10 elevado a este exponente; tudo o " +"que seja mais pequeno é gravado como zero" #. Code to add controls for attribute checking options #. Add incorrect style properties options #: ../src/ui/dialog/inkscape-preferences.cpp:959 msgid "Improper Attributes Actions" -msgstr "" +msgstr "Ações de Atributos Impróprias" #: ../src/ui/dialog/inkscape-preferences.cpp:961 #: ../src/ui/dialog/inkscape-preferences.cpp:969 #: ../src/ui/dialog/inkscape-preferences.cpp:977 -#, fuzzy msgid "Print warnings" -msgstr "Imprimir usando operadores PostScript" +msgstr "Mostrar avisos" #: ../src/ui/dialog/inkscape-preferences.cpp:962 msgid "" "Print warning if invalid or non-useful attributes found. Database files " "located in inkscape_data_dir/attributes." msgstr "" +"Mostrar informações caso sejam encontrados atributos inválidos ou inúteis. " +"Os ficheiros da base de dados encontram-se em pasta_do_inkscape/attributes" #: ../src/ui/dialog/inkscape-preferences.cpp:963 -#, fuzzy msgid "Remove attributes" -msgstr "Ajustar atributo" +msgstr "Remover atributos" #: ../src/ui/dialog/inkscape-preferences.cpp:964 msgid "Delete invalid or non-useful attributes from element tag" -msgstr "" +msgstr "Eliminar atributos inválidos ou inúteis da etiqueta do elemento" #. Add incorrect style properties options #: ../src/ui/dialog/inkscape-preferences.cpp:967 msgid "Inappropriate Style Properties Actions" -msgstr "" +msgstr "Ações de Propriedades de Estilo Inapropriadas" #: ../src/ui/dialog/inkscape-preferences.cpp:970 msgid "" "Print warning if inappropriate style properties found (i.e. 'font-family' " "set on a ). Database files located in inkscape_data_dir/attributes." msgstr "" +"Mostrar avisos se forem econtradas propriedades de estilo inapropriadas (por " +"exemplo, \"font-family\" encontrado em ). Os ficheiros da base de " +"dados encontram-se em inkscape_data_dir/attributes" #: ../src/ui/dialog/inkscape-preferences.cpp:971 #: ../src/ui/dialog/inkscape-preferences.cpp:979 -#, fuzzy msgid "Remove style properties" -msgstr "Definir propriedades da guia" +msgstr "Remover propriedades dos estilos" #: ../src/ui/dialog/inkscape-preferences.cpp:972 -#, fuzzy msgid "Delete inappropriate style properties" -msgstr "Definir propriedades da guia" +msgstr "Eliminar porpriedades de estilo inapropriadas" #. Add default or inherited style properties options #: ../src/ui/dialog/inkscape-preferences.cpp:975 msgid "Non-useful Style Properties Actions" -msgstr "" +msgstr "Ações de Propriedades de Estilos Inúteis" #: ../src/ui/dialog/inkscape-preferences.cpp:978 msgid "" @@ -20598,74 +19402,76 @@ msgid "" "same as would be inherited). Database files located in inkscape_data_dir/" "attributes." msgstr "" +"Mostrar avisos se forem encontradas propriedades de estilo redundantes (isto " +"é, se uma propriedade tiver o valor padrão e um valor diferente não for " +"herdado ou se o valor for o mesmo se fosse herdado). Os ficheiros da base de " +"dados encontram-se em inkscape_data_dir/attributes" #: ../src/ui/dialog/inkscape-preferences.cpp:980 -#, fuzzy msgid "Delete redundant style properties" -msgstr "Definir propriedades da guia" +msgstr "Eliminar porpriedades de estilo redundantes" #: ../src/ui/dialog/inkscape-preferences.cpp:982 msgid "Check Attributes and Style Properties on" -msgstr "" +msgstr "Verificar atributos e propriedades de estilo ao" #: ../src/ui/dialog/inkscape-preferences.cpp:984 -#, fuzzy msgid "Reading" -msgstr "Espaçamento" +msgstr "Ler" #: ../src/ui/dialog/inkscape-preferences.cpp:985 msgid "" "Check attributes and style properties on reading in SVG files (including " "those internal to Inkscape which will slow down startup)" msgstr "" +"Verificar atributos e propriedades de estilo ao ler ficheiros SVG (incluindo " +"os internos do Inkscape que irá tornar o arranque do Inkscape mais lento)" #: ../src/ui/dialog/inkscape-preferences.cpp:986 -#, fuzzy msgid "Editing" -msgstr "_Editar" +msgstr "Editar" #: ../src/ui/dialog/inkscape-preferences.cpp:987 msgid "" "Check attributes and style properties while editing SVG files (may slow down " "Inkscape, mostly useful for debugging)" msgstr "" +"Verificar atributos e propriedades de estilo ao editar ficheiros SVG (pode " +"tornar o Inkscape lento, é útil para tentar encontrar a fonte de alguns " +"problemas)" #: ../src/ui/dialog/inkscape-preferences.cpp:988 -#, fuzzy msgid "Writing" -msgstr "Script" +msgstr "Gravar" #: ../src/ui/dialog/inkscape-preferences.cpp:989 msgid "Check attributes and style properties on writing out SVG files" -msgstr "" +msgstr "Verificar atributos e propriedades de estilo ao gravar ficheiros SVG" #: ../src/ui/dialog/inkscape-preferences.cpp:991 -#, fuzzy msgid "SVG output" -msgstr "Saída SVG" +msgstr "Exportar em SVG" #. TRANSLATORS: see http://www.newsandtech.com/issues/2004/03-04/pt/03-04_rendering.htm #: ../src/ui/dialog/inkscape-preferences.cpp:997 msgid "Perceptual" -msgstr "" +msgstr "Perceptual" #: ../src/ui/dialog/inkscape-preferences.cpp:997 msgid "Relative Colorimetric" -msgstr "Colorimetria Relativa" +msgstr "Colorimétrico Relativo" #: ../src/ui/dialog/inkscape-preferences.cpp:997 msgid "Absolute Colorimetric" -msgstr "Clorimetria Absoluta" +msgstr "Colorimétrico Absoluto" #: ../src/ui/dialog/inkscape-preferences.cpp:1001 -#, fuzzy msgid "(Note: Color management has been disabled in this build)" -msgstr "(Nota: o Gerenciamento de Cores foi desabilitado nessa construção)" +msgstr "(Nota: a gestão de cores foi desativada nesta versão)" #: ../src/ui/dialog/inkscape-preferences.cpp:1005 -#, fuzzy msgid "Display adjustment" -msgstr "_Modo de visão" +msgstr "Ecrã" #: ../src/ui/dialog/inkscape-preferences.cpp:1015 #, c-format @@ -20673,158 +19479,154 @@ msgid "" "The ICC profile to use to calibrate display output.\n" "Searched directories:%s" msgstr "" +"O perfil de cor ICC a usar para calibrar o ecrã.\n" +"Pastas procuradas:%s" #: ../src/ui/dialog/inkscape-preferences.cpp:1016 msgid "Display profile:" -msgstr "Mostrar perfil:" +msgstr "Perfil de cores do ecrã:" #: ../src/ui/dialog/inkscape-preferences.cpp:1021 msgid "Retrieve profile from display" -msgstr "" +msgstr "Obter perfil a partir do ecrã" #: ../src/ui/dialog/inkscape-preferences.cpp:1024 msgid "Retrieve profiles from those attached to displays via XICC" -msgstr "" +msgstr "Obter perfis a partir dos anexados aos ecrãs via XICC" #: ../src/ui/dialog/inkscape-preferences.cpp:1026 msgid "Retrieve profiles from those attached to displays" -msgstr "" +msgstr "Obter perfis a partir dos anexados aos ecrãs" #: ../src/ui/dialog/inkscape-preferences.cpp:1031 -#, fuzzy msgid "Display rendering intent:" -msgstr "_Modo de visão" +msgstr "Propósito de renderização do ecrã:" #: ../src/ui/dialog/inkscape-preferences.cpp:1032 msgid "The rendering intent to use to calibrate display output" -msgstr "" +msgstr "O propósito de renderização a usar para calibrar o ecrã" #: ../src/ui/dialog/inkscape-preferences.cpp:1034 -#, fuzzy msgid "Proofing" -msgstr "Ponto" +msgstr "Prova de cor" #: ../src/ui/dialog/inkscape-preferences.cpp:1036 msgid "Simulate output on screen" -msgstr "Simular saída na Ecrã" +msgstr "Simular saída no ecrã" #: ../src/ui/dialog/inkscape-preferences.cpp:1038 -#, fuzzy msgid "Simulates output of target device" -msgstr "Simula a saída do dispositivo alvo." +msgstr "Simular saída do dispositivo de destino" #: ../src/ui/dialog/inkscape-preferences.cpp:1040 msgid "Mark out of gamut colors" -msgstr "" +msgstr "Destacar cores fora da gama de cores" #: ../src/ui/dialog/inkscape-preferences.cpp:1042 msgid "Highlights colors that are out of gamut for the target device" msgstr "" +"Destaca cores que estejam fora da gama de cores para o dispositivo alvo" #: ../src/ui/dialog/inkscape-preferences.cpp:1054 msgid "Out of gamut warning color:" -msgstr "" +msgstr "Cor de aviso de fora de gama:" #: ../src/ui/dialog/inkscape-preferences.cpp:1055 -#, fuzzy msgid "Selects the color used for out of gamut warning" -msgstr "Cor da linha de grelha maior (destacada)" +msgstr "Cor utilizada para avisar que cores estão fora da gama" #: ../src/ui/dialog/inkscape-preferences.cpp:1057 msgid "Device profile:" -msgstr "Perfil de dispositivo:" +msgstr "Perfil do dispositivo:" #: ../src/ui/dialog/inkscape-preferences.cpp:1058 msgid "The ICC profile to use to simulate device output" -msgstr "" +msgstr "O perfil de cores ICC a usar para simular o dispositivo de destino" #: ../src/ui/dialog/inkscape-preferences.cpp:1061 msgid "Device rendering intent:" -msgstr "" +msgstr "Propósito de renderização do dispositivo:" #: ../src/ui/dialog/inkscape-preferences.cpp:1062 msgid "The rendering intent to use to calibrate device output" msgstr "" +"O propósito de renderização a usar para calibrar a saída do dispositivo" #: ../src/ui/dialog/inkscape-preferences.cpp:1064 -#, fuzzy msgid "Black point compensation" -msgstr "Compensação de Ponto Preto" +msgstr "Compensação de ponto preto" #: ../src/ui/dialog/inkscape-preferences.cpp:1066 -#, fuzzy msgid "Enables black point compensation" -msgstr "Compensação de Ponto Preto" +msgstr "Ativa a compensação de ponto preto" #: ../src/ui/dialog/inkscape-preferences.cpp:1068 msgid "Preserve black" -msgstr "Preservar preto" +msgstr "Manter preto" #: ../src/ui/dialog/inkscape-preferences.cpp:1075 msgid "(LittleCMS 1.15 or later required)" -msgstr "(LittleCMS 1.15 ou mais recente é requerido)" +msgstr "(é necessário o LittleCMS 1.15 ou mais recente)" #: ../src/ui/dialog/inkscape-preferences.cpp:1077 -#, fuzzy msgid "Preserve K channel in CMYK -> CMYK transforms" msgstr "Preservar o canal K em transformações CMYK -> CMYK" #: ../src/ui/dialog/inkscape-preferences.cpp:1091 #: ../src/ui/widget/color-icc-selector.cpp:394 -#: ../src/ui/widget/color-icc-selector.cpp:685 -#, fuzzy +#: ../src/ui/widget/color-icc-selector.cpp:699 msgid "" -msgstr "nenhum" +msgstr "" #: ../src/ui/dialog/inkscape-preferences.cpp:1136 -#, fuzzy msgid "Color management" -msgstr "Gerenciamento de cor" +msgstr "Gestão de cor" #. Autosave options #: ../src/ui/dialog/inkscape-preferences.cpp:1139 -#, fuzzy msgid "Enable autosave (requires restart)" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "Ativar gravação automática (necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:1140 msgid "" "Automatically save the current document(s) at a given interval, thus " "minimizing loss in case of a crash" msgstr "" +"Grava automaticamente os documentos atuais num dado intervalo de tempo, " +"minimizando assim a perda de dados caso ocorram problemas" #: ../src/ui/dialog/inkscape-preferences.cpp:1146 -#, fuzzy msgctxt "Filesystem" msgid "Autosave _directory:" -msgstr "" -"%s não é uma pasta válida.\n" -"%s" +msgstr "_Pasta de gravação automática:" #: ../src/ui/dialog/inkscape-preferences.cpp:1146 msgid "" "The directory where autosaves will be written. This should be an absolute " "path (starts with / on UNIX or a drive letter such as C: on Windows). " msgstr "" +"Pasta onde as gravações automáticas serão armazenadas. Isto deve ser um " +"caminho absoluto (começa com / em sistemas UNIX ou com uma letra como C: no " +"Windows). " #: ../src/ui/dialog/inkscape-preferences.cpp:1148 -#, fuzzy msgid "_Interval (in minutes):" -msgstr "Passos da interpolação" +msgstr "_Intervalo (em minutos):" #: ../src/ui/dialog/inkscape-preferences.cpp:1148 msgid "Interval (in minutes) at which document will be autosaved" -msgstr "" +msgstr "Intervalo (em minutos) no qual o documento será gravado" #: ../src/ui/dialog/inkscape-preferences.cpp:1150 -#, fuzzy msgid "_Maximum number of autosaves:" -msgstr "Máximo de desenhos recentes:" +msgstr "Número _máximo de gravações automáticas:" #: ../src/ui/dialog/inkscape-preferences.cpp:1150 msgid "" "Maximum number of autosaved files; use this to limit the storage space used" msgstr "" +"Número máximo de ficheiros gravados automaticamente; configurar isto para " +"limitar o espaço em disco usado" #. When changing the interval or enabling/disabling the autosave function, #. * update our running configuration @@ -20839,61 +19641,51 @@ msgstr "" #. #. ----------- #: ../src/ui/dialog/inkscape-preferences.cpp:1165 -#, fuzzy msgid "Autosave" -msgstr "_Autores" +msgstr "Gravação automática" #: ../src/ui/dialog/inkscape-preferences.cpp:1169 -#, fuzzy msgid "Open Clip Art Library _Server Name:" -msgstr "Nome de servidor Open Clip Art Library:" +msgstr "Nome do _Servidor do Open Clip Art Library:" #: ../src/ui/dialog/inkscape-preferences.cpp:1170 -#, fuzzy msgid "" "The server name of the Open Clip Art Library webdav server; it's used by the " "Import and Export to OCAL function" msgstr "" -"O nome de servidor webdav do Open Clip Art Library. Usado pelas funções " -"Importar e Exportar OCAL." +"O nome de servidor webdav do Open Clip Art Library. É usado pelas função " +"Importar e Exportar para o Open Clip Art Library" #: ../src/ui/dialog/inkscape-preferences.cpp:1172 -#, fuzzy msgid "Open Clip Art Library _Username:" -msgstr "Nome de utilizador Open Clip Art Library:" +msgstr "Nome de _Utilizador Open Clip Art Library:" #: ../src/ui/dialog/inkscape-preferences.cpp:1173 -#, fuzzy msgid "The username used to log into Open Clip Art Library" -msgstr "O nome de utilizador utilizado para acessar o Open Clip Art Library." +msgstr "" +"O nome de utilizador usado para aceder à conta no Open Clip Art Library" #: ../src/ui/dialog/inkscape-preferences.cpp:1175 -#, fuzzy msgid "Open Clip Art Library _Password:" -msgstr "Senha do Open Clip Art Library:" +msgstr "_Palavra-chave do Open Clip Art Library:" #: ../src/ui/dialog/inkscape-preferences.cpp:1176 -#, fuzzy msgid "The password used to log into Open Clip Art Library" -msgstr "A senha utilizada para acessar o Open Clip Art Library." +msgstr "A palavra-chave utilizada para aceder à conta no Open Clip Art Library" #: ../src/ui/dialog/inkscape-preferences.cpp:1177 -#, fuzzy msgid "Open Clip Art" -msgstr "Login do Open Clip Art" +msgstr "Open Clip Art" #: ../src/ui/dialog/inkscape-preferences.cpp:1182 -#, fuzzy msgid "Behavior" msgstr "Comportamento" #: ../src/ui/dialog/inkscape-preferences.cpp:1186 -#, fuzzy msgid "_Simplification threshold:" -msgstr "Limiar de simplificação:" +msgstr "Limiar de _simplificação:" #: ../src/ui/dialog/inkscape-preferences.cpp:1187 -#, fuzzy msgid "" "How strong is the Node tool's Simplify command by default. If you invoke " "this command several times in quick succession, it will act more and more " @@ -20901,20 +19693,20 @@ msgid "" msgstr "" "Quão forte é o comando Simplificar por padrão. Se este comando for invocado " "diversas vezes em intervalos curtos, ele agirá mais agressivamente; " -"invocando-o novamente após uma pausa restaura o limiar padrão." +"invocando-o novamente após uma pausa restaura o comportamento padrão." #: ../src/ui/dialog/inkscape-preferences.cpp:1189 msgid "Color stock markers the same color as object" -msgstr "" +msgstr "Aplicar cor do objeto aos marcadores originais" #: ../src/ui/dialog/inkscape-preferences.cpp:1190 msgid "Color custom markers the same color as object" -msgstr "" +msgstr "Aplicar cor do objeto aos marcadores personalizados" #: ../src/ui/dialog/inkscape-preferences.cpp:1191 #: ../src/ui/dialog/inkscape-preferences.cpp:1411 msgid "Update marker color when object color changes" -msgstr "" +msgstr "Atualizar a cor do marcador quando a cor do objeto é alterada" #. Selecting options #: ../src/ui/dialog/inkscape-preferences.cpp:1194 @@ -20923,88 +19715,84 @@ msgstr "Selecionar em todas as camadas" #: ../src/ui/dialog/inkscape-preferences.cpp:1195 msgid "Select only within current layer" -msgstr "Selecionar apenas dentro da camada actual" +msgstr "Selecionar apenas dentro da camada atual" #: ../src/ui/dialog/inkscape-preferences.cpp:1196 msgid "Select in current layer and sublayers" msgstr "Selecionar apenas dentro da camada e subcamadas atuais" #: ../src/ui/dialog/inkscape-preferences.cpp:1197 -#, fuzzy msgid "Ignore hidden objects and layers" -msgstr "Ignorar objectos ocultos" +msgstr "Ignorar objetos e camadas ocultos" #: ../src/ui/dialog/inkscape-preferences.cpp:1198 -#, fuzzy msgid "Ignore locked objects and layers" -msgstr "Ignorar objectos bloqueados" +msgstr "Ignorar objetos e camadas bloqueados" #: ../src/ui/dialog/inkscape-preferences.cpp:1199 msgid "Deselect upon layer change" -msgstr "Desfazer selecção ao mudar de camada" +msgstr "Desselecionar ao mudar de camada" #: ../src/ui/dialog/inkscape-preferences.cpp:1202 msgid "" "Uncheck this to be able to keep the current objects selected when the " "current layer changes" msgstr "" -"Desmarque para poder manter os objectos seleccionados quando a camada actual " -"é alterada" +"Desmarcar para poder manter os objetos selecionados quando a camada atual é " +"alterada" #: ../src/ui/dialog/inkscape-preferences.cpp:1204 -#, fuzzy msgid "Ctrl+A, Tab, Shift+Tab" -msgstr "Ctrl+A, Tab, Shift+Tab:" +msgstr "Ctrl+A, Tab, Shift+Tab" #: ../src/ui/dialog/inkscape-preferences.cpp:1206 msgid "Make keyboard selection commands work on objects in all layers" msgstr "" -"Marque esta opção para fazer os comandos de selecção do teclado trabalharem " -"com objectos em todas as camadas" +"Marcar esta opção para fazer com que os comandos de seleção do teclado " +"trabalhem com objetos em todas as camadas" #: ../src/ui/dialog/inkscape-preferences.cpp:1208 msgid "Make keyboard selection commands work on objects in current layer only" msgstr "" -"Marque esta opção para fazer os comandos de selecção do teclado trabalharem " -"apenas com objectos na camada actual" +"Marcar esta opção para fazer com que os comandos de seleção do teclado " +"trabalhem apenas com objetos na camada atual" #: ../src/ui/dialog/inkscape-preferences.cpp:1210 msgid "" "Make keyboard selection commands work on objects in current layer and all " "its sublayers" msgstr "" -"Marque esta opção para fazer os comandos de selecção do teclado trabalharem " -"com objectos na camada actual e em todas as suas subcamadas" +"Marcar esta opção para fazer com que os comandos de seleção do teclado " +"trabalhem com objetos na camada atual e em todas as suas subcamadas" #: ../src/ui/dialog/inkscape-preferences.cpp:1212 -#, fuzzy msgid "" "Uncheck this to be able to select objects that are hidden (either by " "themselves or by being in a hidden layer)" msgstr "" -"Desmarque esta opção para poder selecionar os objectos que estão escondidos " +"Desmarcar esta opção para poder selecionar os objetos que estão escondidos " "(que estejam em um grupo ou em uma camada escondida)" #: ../src/ui/dialog/inkscape-preferences.cpp:1214 -#, fuzzy msgid "" "Uncheck this to be able to select objects that are locked (either by " "themselves or by being in a locked layer)" msgstr "" -"Desmarque para poder selecionar objectos que estão travados (por eles mesmos " -"ou por estarem em uma camada ou grupo travado)" +"Desmarcar para poder selecionar objetos que estão bloqueados (por eles " +"mesmos ou por estarem numa camada bloqueada)" #: ../src/ui/dialog/inkscape-preferences.cpp:1216 msgid "Wrap when cycling objects in z-order" -msgstr "" +msgstr "Ciclo de seleção dos objetos empilhados" #: ../src/ui/dialog/inkscape-preferences.cpp:1218 msgid "Alt+Scroll Wheel" -msgstr "" +msgstr "Alt+Roda de Rolar do Rato" #: ../src/ui/dialog/inkscape-preferences.cpp:1220 msgid "Wrap around at start and end when cycling objects in z-order" msgstr "" +"Voltar ao início após o ciclo de seleção dos objetos empilhados selecionados" #: ../src/ui/dialog/inkscape-preferences.cpp:1222 msgid "Selecting" @@ -21014,15 +19802,15 @@ msgstr "Selecionando" #: ../src/ui/dialog/inkscape-preferences.cpp:1225 #: ../src/widgets/select-toolbar.cpp:564 msgid "Scale stroke width" -msgstr "Ampliar largura do traço" +msgstr "Dimensionar espessura do traço" #: ../src/ui/dialog/inkscape-preferences.cpp:1226 msgid "Scale rounded corners in rectangles" -msgstr "Ampliar canto arredondados em retângulos" +msgstr "Dimensionar cantos arredondados em retângulos" #: ../src/ui/dialog/inkscape-preferences.cpp:1227 msgid "Transform gradients" -msgstr "Transformar degradês" +msgstr "Transformar gradientes" #: ../src/ui/dialog/inkscape-preferences.cpp:1228 msgid "Transform patterns" @@ -21030,191 +19818,187 @@ msgstr "Transformar padrões" #: ../src/ui/dialog/inkscape-preferences.cpp:1230 msgid "Preserved" -msgstr "Preservada" +msgstr "Preservado" #: ../src/ui/dialog/inkscape-preferences.cpp:1233 #: ../src/widgets/select-toolbar.cpp:565 msgid "When scaling objects, scale the stroke width by the same proportion" -msgstr "Ao ampliar objectos, amplie a largura do traço pela mesma proporção" +msgstr "" +"Ao redimensionar objetos, redimensionar também a espessura do traço pela " +"mesma proporção" #: ../src/ui/dialog/inkscape-preferences.cpp:1235 #: ../src/widgets/select-toolbar.cpp:576 msgid "When scaling rectangles, scale the radii of rounded corners" -msgstr "Ao ampliar retângulos, ampliar o raio dos cantos arredondados" +msgstr "" +"Ao redimensionar retângulos, redimensionar também o raio dos cantos " +"arredondados" #: ../src/ui/dialog/inkscape-preferences.cpp:1237 #: ../src/widgets/select-toolbar.cpp:587 msgid "Move gradients (in fill or stroke) along with the objects" -msgstr "Transformar degradês (em preenchimento ou traço) junto com os objectos" +msgstr "Mover gradientes (no preenchimento ou traço) junto com os objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:1239 #: ../src/widgets/select-toolbar.cpp:598 msgid "Move patterns (in fill or stroke) along with the objects" -msgstr "Editar padrões (em preenchimento ou no traçado) ao longo dos objectos" +msgstr "Mover padrões (no preenchimento ou no traço) junto com os objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:1240 -#, fuzzy msgid "Store transformation" -msgstr "Armazenar transformação:" +msgstr "Armazenar transformação" #: ../src/ui/dialog/inkscape-preferences.cpp:1242 msgid "" "If possible, apply transformation to objects without adding a transform= " "attribute" msgstr "" -"Se possível, aplicar a transformação para um objecto sem acrescentar um " -"atributo de transformação" +"Se possível, aplicar a transformação aos objetos sem adicionar um atributo " +"de transformação (transform=)" #: ../src/ui/dialog/inkscape-preferences.cpp:1244 msgid "Always store transformation as a transform= attribute on objects" msgstr "" -"Sempre armazenar a transformação como um atributo de transformação em " -"objectos" +"Armazenar sempre a transformação como um atributo de transformação em " +"objetos (transform=)" #: ../src/ui/dialog/inkscape-preferences.cpp:1246 msgid "Transforms" msgstr "Transformações" #: ../src/ui/dialog/inkscape-preferences.cpp:1250 -#, fuzzy msgid "Mouse _wheel scrolls by:" -msgstr "A roda do mouse rola em:" +msgstr "A _roda do rato desloca:" #: ../src/ui/dialog/inkscape-preferences.cpp:1251 msgid "" "One mouse wheel notch scrolls by this distance in screen pixels " "(horizontally with Shift)" msgstr "" -"Uma roda do mouse rola por esta distância em pixels da Ecrã (horizontalmente " -"com Shift)" +"Uma rotação da roda do rato desloca esta distância em píxeis do ecrã " +"(horizontalmente com Shift)" #: ../src/ui/dialog/inkscape-preferences.cpp:1252 msgid "Ctrl+arrows" msgstr "Ctrl+setas" #: ../src/ui/dialog/inkscape-preferences.cpp:1254 -#, fuzzy msgid "Sc_roll by:" -msgstr "Rolar em:" +msgstr "_Deslocar em:" #: ../src/ui/dialog/inkscape-preferences.cpp:1255 msgid "Pressing Ctrl+arrow key scrolls by this distance (in screen pixels)" -msgstr "Pressionando Ctrl+seta deslizar por esta distância (em pixels)" +msgstr "Pressionando Ctrl+seta deslocar a esta distância (em píxeis do ecrã)" #: ../src/ui/dialog/inkscape-preferences.cpp:1257 -#, fuzzy msgid "_Acceleration:" -msgstr "Aceleração:" +msgstr "_Aceleração:" #: ../src/ui/dialog/inkscape-preferences.cpp:1258 msgid "" "Pressing and holding Ctrl+arrow will gradually speed up scrolling (0 for no " "acceleration)" msgstr "" -"Pressionando e segurando Ctrl+seta aumentará gradualmente a velocidade de " -"rolagem (0 para nenhuma aceleração)" +"Pressionando e segurando Ctrl+seta aumentará gradualmente a velocidade da " +"deslocação (0 para nenhuma aceleração)" #: ../src/ui/dialog/inkscape-preferences.cpp:1259 msgid "Autoscrolling" msgstr "Autorolagem" #: ../src/ui/dialog/inkscape-preferences.cpp:1261 -#, fuzzy msgid "_Speed:" -msgstr "Velocidade:" +msgstr "_Velocidade:" #: ../src/ui/dialog/inkscape-preferences.cpp:1262 msgid "" "How fast the canvas autoscrolls when you drag beyond canvas edge (0 to turn " "autoscroll off)" msgstr "" -"Quão rápido a Ecrã rola quando é arrastada além da beira da Ecrã (0 para " -"desligar a rolagem)" +"Quão rápido a área de desenho rola quando é arrastada além das bordas (0 " +"para desligar a rolagem)" #: ../src/ui/dialog/inkscape-preferences.cpp:1264 #: ../src/ui/dialog/tracedialog.cpp:522 ../src/ui/dialog/tracedialog.cpp:721 -#, fuzzy msgid "_Threshold:" -msgstr "Limiar:" +msgstr "_Limiar:" #: ../src/ui/dialog/inkscape-preferences.cpp:1265 msgid "" "How far (in screen pixels) you need to be from the canvas edge to trigger " "autoscroll; positive is outside the canvas, negative is within the canvas" msgstr "" -"Quão longe (em pixels) é preciso estar da beira da Ecrã para disparar a " -"rolagem. Positivo é do lado de fora da Ecrã e negativo é dentro da Ecrã." +"Quão longe (em píxeis do ecrã) é preciso estar das bordas da área de desenho " +"para ativar a autorolagem. Positivo é do lado de fora e negativo é do lado " +"de dentro." #: ../src/ui/dialog/inkscape-preferences.cpp:1266 -#, fuzzy msgid "Mouse move pans when Space is pressed" -msgstr "" -"Botão esquerdo do mouse percorre a área de desenho quando a tecla de espaço " -"é pressionada" +msgstr "O rato desloca a área de desenho quando é premida a tecla Espaço" #: ../src/ui/dialog/inkscape-preferences.cpp:1268 msgid "When on, pressing and holding Space and dragging pans canvas" msgstr "" +"Quando ativado, premir e manter premida a tecla Espaço, deslocando o rato " +"também se desloca a área de desenho" #: ../src/ui/dialog/inkscape-preferences.cpp:1269 msgid "Mouse wheel zooms by default" -msgstr "Roda do mouse altera zoom por padrão" +msgstr "Usar a roda do rato para aumentar ou diminuir a vista (Lupa)" #: ../src/ui/dialog/inkscape-preferences.cpp:1271 -#, fuzzy msgid "" "When on, mouse wheel zooms without Ctrl and scrolls canvas with Ctrl; when " "off, it zooms with Ctrl and scrolls without Ctrl" msgstr "" -"Quando activada, a roda do mouse altera o zoom sem Ctrl e desloca a área de " -"desenho com Ctrl; quando desabilitada, altera o zoom com Ctrl e desloca sem " -"Ctrl." +"Quando ativado, a roda do rato altera a aproximação sem Ctrl e desloca a " +"área de desenho com Ctrl; quando desativado, altera a aproximação com Ctrl e " +"desloca sem Ctrl" #: ../src/ui/dialog/inkscape-preferences.cpp:1272 msgid "Scrolling" -msgstr "Rolagem" +msgstr "Roda do Rato" #. Snapping options #: ../src/ui/dialog/inkscape-preferences.cpp:1275 -#, fuzzy msgid "Snap indicator" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "Indicador de atração" #: ../src/ui/dialog/inkscape-preferences.cpp:1277 msgid "Enable snap indicator" -msgstr "" +msgstr "Ativar indicador de atração" #: ../src/ui/dialog/inkscape-preferences.cpp:1279 msgid "After snapping, a symbol is drawn at the point that has snapped" -msgstr "" +msgstr "Após atrair, é mostrado um símbolo no ponto que foi atraído" #: ../src/ui/dialog/inkscape-preferences.cpp:1284 msgid "Snap indicator persistence (in seconds):" -msgstr "" +msgstr "Tempo de visualização do indicador de atração (em segundos):" #: ../src/ui/dialog/inkscape-preferences.cpp:1285 msgid "" "Controls how long the snap indicator message will be shown, before it " "disappears" -msgstr "" +msgstr "Controla durante quanto tempo o indicador de atração é mostrado" #: ../src/ui/dialog/inkscape-preferences.cpp:1287 msgid "What should snap" -msgstr "" +msgstr "O que deve ser atraído" #: ../src/ui/dialog/inkscape-preferences.cpp:1289 msgid "Only snap the node closest to the pointer" -msgstr "" +msgstr "Apenas atrair o nó mais próximo do cursor" #: ../src/ui/dialog/inkscape-preferences.cpp:1291 msgid "" "Only try to snap the node that is initially closest to the mouse pointer" msgstr "" +"Apenas tentar atrair o nó que inicialmente estiver mais próximo do cursor" #: ../src/ui/dialog/inkscape-preferences.cpp:1294 -#, fuzzy msgid "_Weight factor:" -msgstr "Altura do papel" +msgstr "_Fator de importância:" #: ../src/ui/dialog/inkscape-preferences.cpp:1295 msgid "" @@ -21222,10 +20006,13 @@ msgid "" "closest transformation (when set to 0), or prefer the node that was " "initially the closest to the pointer (when set to 1)" msgstr "" +"Quando são encontrados vários alvos de atração, o Inkscape pode preferir a " +"transformação mais próxima (quando usado 0) ou preferir o nó que " +"inicialmente estava mais próximo do cursor (quando usado 1)" #: ../src/ui/dialog/inkscape-preferences.cpp:1297 msgid "Snap the mouse pointer when dragging a constrained knot" -msgstr "" +msgstr "Atrair o cursor ao arrastar um nó restringido" #: ../src/ui/dialog/inkscape-preferences.cpp:1299 msgid "" @@ -21233,15 +20020,16 @@ msgid "" "mouse pointer instead of snapping the projection of the knot onto the " "constraint line" msgstr "" +"Ao arrastar um nó ao longo de uma linha de restrição, atrair a posição do " +"cursor em vez de atrair a projeção do nó na linha de restrição" #: ../src/ui/dialog/inkscape-preferences.cpp:1301 msgid "Delayed snap" -msgstr "" +msgstr "Atração atrasada" #: ../src/ui/dialog/inkscape-preferences.cpp:1304 -#, fuzzy msgid "Delay (in seconds):" -msgstr "Nome da camada:" +msgstr "Atraso (em segundos):" #: ../src/ui/dialog/inkscape-preferences.cpp:1305 msgid "" @@ -21249,49 +20037,43 @@ msgid "" "additional fraction of a second. This additional delay is specified here. " "When set to zero or to a very small number, snapping will be immediate." msgstr "" +"Atrasar a atração enquanto estiver a mover o cursor, e então aguardar uma " +"fração de segundo adicional. Este atraso adicional é especificado aqui. " +"Quando usado zero ou um número muito pequeno neste campo, a atração será " +"imediata." #: ../src/ui/dialog/inkscape-preferences.cpp:1307 -#, fuzzy msgid "Snapping" -msgstr "Encaixar no camin_ho" +msgstr "Atração" #. nudgedistance is limited to 1000 in select-context.cpp: use the same limit here #: ../src/ui/dialog/inkscape-preferences.cpp:1312 -#, fuzzy msgid "_Arrow keys move by:" -msgstr "Setas movem por:" +msgstr "_Teclas de setas movem:" #: ../src/ui/dialog/inkscape-preferences.cpp:1313 -#, fuzzy msgid "" "Pressing an arrow key moves selected object(s) or node(s) by this distance" msgstr "" -"Pressionando um seta move o(s) objecto(s) ou nó(s) seleccionados por esta " -"distância (em pixels)" +"Ao usar uma tecla de setas, move os objetos selecionados ou nós por esta " +"distância" #. defaultscale is limited to 1000 in select-context.cpp: use the same limit here #: ../src/ui/dialog/inkscape-preferences.cpp:1316 -#, fuzzy msgid "> and < _scale by:" -msgstr "> e < ampliam em:" +msgstr "Teclas > e < alteram o _tamanho em:" #: ../src/ui/dialog/inkscape-preferences.cpp:1317 -#, fuzzy msgid "Pressing > or < scales selection up or down by this increment" -msgstr "" -"Pressionando > ou < amplia ou reduz a selecção por este valor (em pixels)" +msgstr "Ao usar a tecla > ou < amplia ou reduz a seleção por esta distância" #: ../src/ui/dialog/inkscape-preferences.cpp:1319 -#, fuzzy msgid "_Inset/Outset by:" -msgstr "Comprimir/Expandir em:" +msgstr "_Comprimir/Expandir em:" #: ../src/ui/dialog/inkscape-preferences.cpp:1320 -#, fuzzy msgid "Inset and Outset commands displace the path by this distance" -msgstr "" -"Os comandos Comprimir e Expandir deslocam o caminho por esta distância (em " -"pixels)" +msgstr "Os comandos Comprimir e Expandir deslocam o caminho por esta distância" #: ../src/ui/dialog/inkscape-preferences.cpp:1321 msgid "Compass-like display of angles" @@ -21303,20 +20085,18 @@ msgid "" "clockwise; otherwise with 0 at east, -180 to 180 range, positive " "counterclockwise" msgstr "" -"Quando activado, os ângulo serão exibidos como 0 ao norte, intervalo de 0 a " -"360, sentido horário; caso contrário como 0 a oeste, intervalo de -180 a " -"180, sentido anti-horário" +"Quando ativado, os ângulos são mostrados com 0 ao Norte, intervalo de 0 a " +"360, no sentido horário; caso contrário como 0 a Oeste, intervalo de -180 a " +"180, e no sentido anti-horário" #: ../src/ui/dialog/inkscape-preferences.cpp:1325 -#, fuzzy msgctxt "Rotation angle" msgid "None" msgstr "Nenhum" #: ../src/ui/dialog/inkscape-preferences.cpp:1329 -#, fuzzy msgid "_Rotation snaps every:" -msgstr "Ajuste de rotação a cada:" +msgstr "Atração à _rotação a cada:" #: ../src/ui/dialog/inkscape-preferences.cpp:1329 msgid "degrees" @@ -21327,23 +20107,24 @@ msgid "" "Rotating with Ctrl pressed snaps every that much degrees; also, pressing " "[ or ] rotates by this amount" msgstr "" -"Girando com Ctrl pressionado ajusta cada um neste ângulo. Pressionando, " -"também, [ ou ] gira nesta proporção" +"Rodando com Ctrl pressionado atrair a cada um destes ângulos. Pressionando " +"também [ ou ] roda neste valor" #: ../src/ui/dialog/inkscape-preferences.cpp:1331 msgid "Relative snapping of guideline angles" -msgstr "" +msgstr "Atração relativa dos ângulos de guias" #: ../src/ui/dialog/inkscape-preferences.cpp:1333 msgid "" "When on, the snap angles when rotating a guideline will be relative to the " "original angle" msgstr "" +"Quando ativado, ao rodar uma guia, os ângulos atraídos serão rodados " +"relativamente ao ângulo original" #: ../src/ui/dialog/inkscape-preferences.cpp:1335 -#, fuzzy msgid "_Zoom in/out by:" -msgstr "Ampliar/Reduzir em:" +msgstr "_Ampliar/reduzir vista com a lupa em:" #: ../src/ui/dialog/inkscape-preferences.cpp:1335 #: ../src/ui/dialog/objects.cpp:1630 @@ -21356,8 +20137,9 @@ msgid "" "Zoom tool click, +/- keys, and middle click zoom in and out by this " "multiplier" msgstr "" -"Um clique na ferramenta Zoom, as teclas +/- e clique com botão do meio " -"ampliam e reduzem por este multiplicador" +"Ao ampliar ou reduzir a vista através da ferramenta Lupa, assim como das " +"teclas +/- ou clique com botão do meio do rato, ampliar e reduzir vista " +"nesta proporção" #: ../src/ui/dialog/inkscape-preferences.cpp:1337 msgid "Steps" @@ -21366,15 +20148,15 @@ msgstr "Passos" #. Clones options #: ../src/ui/dialog/inkscape-preferences.cpp:1340 msgid "Move in parallel" -msgstr "Se movem em paralelo" +msgstr "Movem-se em paralelo" #: ../src/ui/dialog/inkscape-preferences.cpp:1342 msgid "Stay unmoved" -msgstr "Ficam inertes" +msgstr "Ficam imóveis" #: ../src/ui/dialog/inkscape-preferences.cpp:1344 msgid "Move according to transform" -msgstr "Mover de acordo com a tranformação" +msgstr "Movem-se de acordo com a transformação" #: ../src/ui/dialog/inkscape-preferences.cpp:1346 msgid "Are unlinked" @@ -21382,57 +20164,48 @@ msgstr "São desligados" #: ../src/ui/dialog/inkscape-preferences.cpp:1348 msgid "Are deleted" -msgstr "São apagados" +msgstr "São eliminados" #: ../src/ui/dialog/inkscape-preferences.cpp:1351 -#, fuzzy msgid "Moving original: clones and linked offsets" -msgstr "Quando o original se move, seus clones e deslocamentos associados:" +msgstr "Ao mover o objeto original, os clones e deslocamentos ligados a ele:" #: ../src/ui/dialog/inkscape-preferences.cpp:1353 -#, fuzzy msgid "Clones are translated by the same vector as their original" -msgstr "Os clones são transladados pelo mesmo vetor do original." +msgstr "Os clones são deslocados pelo mesmo vetor do original" #: ../src/ui/dialog/inkscape-preferences.cpp:1355 -#, fuzzy msgid "Clones preserve their positions when their original is moved" -msgstr "Os clones preservam suas posições quando o seu original é movido." +msgstr "Os clones preservam as posições quando o original é movido" #: ../src/ui/dialog/inkscape-preferences.cpp:1357 -#, fuzzy msgid "" "Each clone moves according to the value of its transform= attribute; for " "example, a rotated clone will move in a different direction than its original" msgstr "" -"Cada clone se move de acordo com o valor do seu atributo de transformação." -"Por exemplo, um clone girado se moverá numa direção diferente do seu " -"original." +"Cada clone move-se de acordo com o valor do seu atributo de transformação. " +"Por exemplo, um clone rodado irá mover-se numa direção diferente do seu " +"original" #: ../src/ui/dialog/inkscape-preferences.cpp:1358 -#, fuzzy msgid "Deleting original: clones" -msgstr "Eliminar clones ladrilhados" +msgstr "Ao eliminar o objeto original, os clones dele:" #: ../src/ui/dialog/inkscape-preferences.cpp:1360 -#, fuzzy msgid "Orphaned clones are converted to regular objects" -msgstr "Clones órfãos são convertidos para objectos regulares." +msgstr "Clones órfãos são convertidos em objetos regulares" #: ../src/ui/dialog/inkscape-preferences.cpp:1362 -#, fuzzy msgid "Orphaned clones are deleted along with their original" -msgstr "Clones órfãos são apagados juntamente com seu original." +msgstr "Clones órfãos são eliminados juntamente com os seus originais" #: ../src/ui/dialog/inkscape-preferences.cpp:1364 -#, fuzzy msgid "Duplicating original+clones/linked offset" -msgstr "Quando o original se move, seus clones e deslocamentos associados:" +msgstr "Ao duplicar o objeto original+clones ou deslocamento ligado dele:" #: ../src/ui/dialog/inkscape-preferences.cpp:1366 -#, fuzzy msgid "Relink duplicated clones" -msgstr "Eliminar clones ladrilhados" +msgstr "Religar clones duplicados" #: ../src/ui/dialog/inkscape-preferences.cpp:1368 msgid "" @@ -21440,6 +20213,9 @@ msgid "" "(possibly in groups), relink the duplicated clone to the duplicated original " "instead of the old original" msgstr "" +"Ao duplicar uma seleção que contém um clone e o seu original (possivelmente " +"em grupos), religar o clone duplicado ao original duplicado em vez do " +"orignal anterior" #. TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page #: ../src/ui/dialog/inkscape-preferences.cpp:1371 @@ -21448,81 +20224,79 @@ msgstr "Clones" #. Clip paths and masks options #: ../src/ui/dialog/inkscape-preferences.cpp:1374 -#, fuzzy msgid "When applying, use the topmost selected object as clippath/mask" msgstr "" -"Use o objecto superior seleccionado como caminho para aparagem ou máscara" +"Ao aplicar, usar o objeto mais acima selecionado como caminho recortado ou " +"máscara" #: ../src/ui/dialog/inkscape-preferences.cpp:1376 msgid "" "Uncheck this to use the bottom selected object as the clipping path or mask" msgstr "" -"Desmarque isso para usar o objecto inferior seleccionado como caminho de " -"aparagem ou máscara" +"Desmarcar isto para usar o objeto mais abaixo selecionado como caminho " +"recortado ou máscara" #: ../src/ui/dialog/inkscape-preferences.cpp:1377 -#, fuzzy msgid "Remove clippath/mask object after applying" -msgstr "Remova o caminho de aparagem ou a máscara após aplicar" +msgstr "Remover o caminho recortado ou a máscara após aplicar" #: ../src/ui/dialog/inkscape-preferences.cpp:1379 msgid "" "After applying, remove the object used as the clipping path or mask from the " "drawing" msgstr "" -"Após aplicar-se, remover do objecto usado o clip ou a mask para o desenho" +"Após aplicar, remover o objeto usado como caminho recortado ou máscara do " +"desenho" #: ../src/ui/dialog/inkscape-preferences.cpp:1381 -#, fuzzy msgid "Before applying" -msgstr "Ângulo esquerdo" +msgstr "Antes de aplicar" #: ../src/ui/dialog/inkscape-preferences.cpp:1383 msgid "Do not group clipped/masked objects" -msgstr "" +msgstr "Não agrupar caminhos recortados ou máscaras" #: ../src/ui/dialog/inkscape-preferences.cpp:1384 msgid "Put every clipped/masked object in its own group" -msgstr "" +msgstr "Colocar cada caminho recortado ou máscara nos seus próprios grupos" #: ../src/ui/dialog/inkscape-preferences.cpp:1385 msgid "Put all clipped/masked objects into one group" -msgstr "" +msgstr "Colocar todos os caminhos recortados ou máscaras num só grupo" #: ../src/ui/dialog/inkscape-preferences.cpp:1388 msgid "Apply clippath/mask to every object" -msgstr "" +msgstr "Aplicar caminho recortado ou máscara a todos os objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:1391 msgid "Apply clippath/mask to groups containing single object" msgstr "" +"Aplicar caminho recortado ou máscara a grupos que contêm um único objeto" #: ../src/ui/dialog/inkscape-preferences.cpp:1394 msgid "Apply clippath/mask to group containing all objects" msgstr "" +"Aplicar caminho recortado ou máscara a grupos que contêm todos os objetos" #: ../src/ui/dialog/inkscape-preferences.cpp:1396 msgid "After releasing" -msgstr "" +msgstr "Após libertar" #: ../src/ui/dialog/inkscape-preferences.cpp:1398 -#, fuzzy msgid "Ungroup automatically created groups" -msgstr "Desagrupar os grupos seleccionados" +msgstr "Desagrupar automaticamente os grupos criados" #: ../src/ui/dialog/inkscape-preferences.cpp:1400 msgid "Ungroup groups created when setting clip/mask" -msgstr "" +msgstr "Desagrupar grupos criados ao definir caminho recortado ou máscara" #: ../src/ui/dialog/inkscape-preferences.cpp:1402 -#, fuzzy msgid "Clippaths and masks" -msgstr "Aparagem e máscara" +msgstr "Caminhos recortados e máscaras" #: ../src/ui/dialog/inkscape-preferences.cpp:1405 -#, fuzzy msgid "Stroke Style Markers" -msgstr "Estilo de traço" +msgstr "Marcadores aplicados no Traço de caminhos" #: ../src/ui/dialog/inkscape-preferences.cpp:1407 #: ../src/ui/dialog/inkscape-preferences.cpp:1409 @@ -21530,91 +20304,94 @@ msgid "" "Stroke color same as object, fill color either object fill color or marker " "fill color" msgstr "" +"Cor do traço igual ao objeto; a cor do preenchimento é a cor do " +"preenchimento do objeto ou cor do preenchimento do marcador" #: ../src/ui/dialog/inkscape-preferences.cpp:1413 #: ../share/extensions/hershey.inx.h:27 -#, fuzzy msgid "Markers" -msgstr "Mais escuro" +msgstr "Marcadores" #: ../src/ui/dialog/inkscape-preferences.cpp:1416 -#, fuzzy msgid "Document cleanup" -msgstr "Desenho SVG" +msgstr "Optimização de documento" #: ../src/ui/dialog/inkscape-preferences.cpp:1417 #: ../src/ui/dialog/inkscape-preferences.cpp:1419 msgid "Remove unused swatches when doing a document cleanup" msgstr "" +"Remover amostras de cor não utilizadas ao utilizar Ficheiro->Optimizar " +"Documento" #. tooltip #: ../src/ui/dialog/inkscape-preferences.cpp:1420 -#, fuzzy msgid "Cleanup" -msgstr "_Limpar" +msgstr "Optimização" #: ../src/ui/dialog/inkscape-preferences.cpp:1428 -#, fuzzy msgid "Number of _Threads:" -msgstr "Número de linhas" +msgstr "Número de _Unidades de Execução:" #: ../src/ui/dialog/inkscape-preferences.cpp:1428 #: ../src/ui/dialog/inkscape-preferences.cpp:1964 -#, fuzzy msgid "(requires restart)" -msgstr "Caixa de diálogo de comportamento (requer reinício):" +msgstr "(necessário reiniciar)" #: ../src/ui/dialog/inkscape-preferences.cpp:1429 msgid "Configure number of processors/threads to use when rendering filters" msgstr "" +"Configurar número de processadores/unidades de execução (threads) a usar ao " +"renderizar filtros" #: ../src/ui/dialog/inkscape-preferences.cpp:1433 -#, fuzzy msgid "Rendering _cache size:" -msgstr "Render" +msgstr "Tamanho da _cache para rederizar:" #: ../src/ui/dialog/inkscape-preferences.cpp:1433 msgctxt "mebibyte (2^20 bytes) abbreviation" msgid "MiB" -msgstr "" +msgstr "MiB" #: ../src/ui/dialog/inkscape-preferences.cpp:1433 msgid "" "Set the amount of memory per document which can be used to store rendered " "parts of the drawing for later reuse; set to zero to disable caching" msgstr "" +"Definir a quantidade de cache por documento que pode ser usada para " +"armazenar partes renderizadas do desenho para usar posteriormente; usar zero " +"para desativar a cache" +# desnecessário referir em todas "qualidade" porque acaba-se por repetir sempre, e a qualidade é indicada no título #. blur quality #. filter quality #: ../src/ui/dialog/inkscape-preferences.cpp:1436 #: ../src/ui/dialog/inkscape-preferences.cpp:1460 msgid "Best quality (slowest)" -msgstr "Melhor qualidade (mais lento)" +msgstr "Máxima (mais lento)" #: ../src/ui/dialog/inkscape-preferences.cpp:1438 #: ../src/ui/dialog/inkscape-preferences.cpp:1462 msgid "Better quality (slower)" -msgstr "Qualidade boa (lento)" +msgstr "Melhor (lento)" #: ../src/ui/dialog/inkscape-preferences.cpp:1440 #: ../src/ui/dialog/inkscape-preferences.cpp:1464 msgid "Average quality" -msgstr "Qualidade média" +msgstr "Média" #: ../src/ui/dialog/inkscape-preferences.cpp:1442 #: ../src/ui/dialog/inkscape-preferences.cpp:1466 msgid "Lower quality (faster)" -msgstr "Qualidade ruim (rápido)" +msgstr "Baixa (rápido)" #: ../src/ui/dialog/inkscape-preferences.cpp:1444 #: ../src/ui/dialog/inkscape-preferences.cpp:1468 msgid "Lowest quality (fastest)" -msgstr "Pior qualidade (mais rápido)" +msgstr "Mínima (mais rápido)" #: ../src/ui/dialog/inkscape-preferences.cpp:1447 -#, fuzzy msgid "Gaussian blur quality for display" -msgstr "Qualidade do desfoque gaussiano para exibição:" +msgstr "Qualidade no ecrã da Desfocagem Gaussiana" #: ../src/ui/dialog/inkscape-preferences.cpp:1449 #: ../src/ui/dialog/inkscape-preferences.cpp:1473 @@ -21622,60 +20399,62 @@ msgid "" "Best quality, but display may be very slow at high zooms (bitmap export " "always uses best quality)" msgstr "" -"Melhor qualidade, mas a exibição poderá ficar lenta com a ampliação " -"(exportar em bitmap sempre usará a melhor qualidade)" +"Melhor qualidade, mas a visualização poderá ficar lenta ao ampliar muito " +"(isto não afeta a exportação, as imagens bitmap são exportadas sempre na " +"melhor qualidade)" #: ../src/ui/dialog/inkscape-preferences.cpp:1451 #: ../src/ui/dialog/inkscape-preferences.cpp:1475 msgid "Better quality, but slower display" -msgstr "Melhor qualidade, mas exibição lenta" +msgstr "Melhor qualidade, mas visualização no ecrã é lenta" #: ../src/ui/dialog/inkscape-preferences.cpp:1453 #: ../src/ui/dialog/inkscape-preferences.cpp:1477 msgid "Average quality, acceptable display speed" -msgstr "Qualidade média, velocidade aceitável da exposição" +msgstr "Qualidade média, velocidade aceitável da visualização no ecrã" #: ../src/ui/dialog/inkscape-preferences.cpp:1455 #: ../src/ui/dialog/inkscape-preferences.cpp:1479 msgid "Lower quality (some artifacts), but display is faster" -msgstr "Qualidade baixa (alguns ruídos), mas a exibição é mais rápida" +msgstr "" +"Qualidade baixa (alguns ruídos), mas a visualização no ecrã é mais rápida" #: ../src/ui/dialog/inkscape-preferences.cpp:1457 #: ../src/ui/dialog/inkscape-preferences.cpp:1481 msgid "Lowest quality (considerable artifacts), but display is fastest" -msgstr "Pior qualidade (muitos ruídos), mas é a exibição mais rápida" +msgstr "" +"Pior qualidade (muito ruído), mas é a visualização no ecrã mais rápida de " +"todas" #: ../src/ui/dialog/inkscape-preferences.cpp:1471 -#, fuzzy msgid "Filter effects quality for display" -msgstr "Qualidade do desfoque gaussiano para exibição:" +msgstr "Qualidade no ecrã do efeitos dos filtros" #. build custom preferences tab #: ../src/ui/dialog/inkscape-preferences.cpp:1483 #: ../src/ui/dialog/print.cpp:215 -#, fuzzy msgid "Rendering" -msgstr "Render" +msgstr "Renderização" #. Note: /options/bitmapoversample removed with Cairo renderer #: ../src/ui/dialog/inkscape-preferences.cpp:1489 ../src/verbs.cpp:156 #: ../src/widgets/calligraphy-toolbar.cpp:626 -#, fuzzy msgid "Edit" -msgstr "_Editar" +msgstr "Editar" #: ../src/ui/dialog/inkscape-preferences.cpp:1490 msgid "Automatically reload bitmaps" -msgstr "" +msgstr "Recarregar automaticamente as imagens bitmap" #: ../src/ui/dialog/inkscape-preferences.cpp:1492 msgid "Automatically reload linked images when file is changed on disk" msgstr "" +"Recarregar automaticamente as imagens bitmap ligadas quando o ficheiro é " +"alterado no disco" #: ../src/ui/dialog/inkscape-preferences.cpp:1494 -#, fuzzy msgid "_Bitmap editor:" -msgstr "Editor de degradê" +msgstr "Editor de imagem _bitmap:" #: ../src/ui/dialog/inkscape-preferences.cpp:1496 #: ../share/extensions/guillotine.inx.h:5 ../share/extensions/plotter.inx.h:65 @@ -21684,14 +20463,14 @@ msgid "Export" msgstr "Exportar" #: ../src/ui/dialog/inkscape-preferences.cpp:1498 -#, fuzzy msgid "Default export _resolution:" -msgstr "Resolução padrão de exportação" +msgstr "_Resolução padrão ao exportar:" #: ../src/ui/dialog/inkscape-preferences.cpp:1499 msgid "Default bitmap resolution (in dots per inch) in the Export dialog" msgstr "" -"Resolução padrão de figura (em pontos por polegada) na janela de exportação" +"Resolução padrão em imagens bitmap (em pontos por polegada) na janela de " +"definições ao exportar" #: ../src/ui/dialog/inkscape-preferences.cpp:1500 #: ../src/ui/dialog/xml-tree.cpp:920 @@ -21699,89 +20478,89 @@ msgid "Create" msgstr "Criar" #: ../src/ui/dialog/inkscape-preferences.cpp:1502 -#, fuzzy msgid "Resolution for Create Bitmap _Copy:" -msgstr "Resolução preferida para a figura (pontos por polegada)" +msgstr "Resolução ao _Criar uma Cópia de Imagem Bitmap:" #: ../src/ui/dialog/inkscape-preferences.cpp:1503 msgid "Resolution used by the Create Bitmap Copy command" -msgstr "" +msgstr "Resolução usada ao criar uma cópia da imagem bitmap" #: ../src/ui/dialog/inkscape-preferences.cpp:1506 msgid "Ask about linking and scaling when importing" -msgstr "" +msgstr "Ao importar, perguntar sobre o tipo de importação e dpi da imagem" #: ../src/ui/dialog/inkscape-preferences.cpp:1508 msgid "Pop-up linking and scaling dialog when importing bitmap image." msgstr "" +"Abrir janela de diálogo para configurar ligação e dimensão ao importar uma " +"imagem bitmap." #: ../src/ui/dialog/inkscape-preferences.cpp:1514 -#, fuzzy msgid "Bitmap link:" -msgstr "Editor de degradê" +msgstr "Incorporar imagem da forma:" #: ../src/ui/dialog/inkscape-preferences.cpp:1521 msgid "Bitmap scale (image-rendering):" -msgstr "" +msgstr "Renderização da imagem:" #: ../src/ui/dialog/inkscape-preferences.cpp:1526 -#, fuzzy msgid "Default _import resolution:" -msgstr "Resolução padrão de exportação" +msgstr "Resolução padrão ao _importar:" #: ../src/ui/dialog/inkscape-preferences.cpp:1527 -#, fuzzy msgid "Default bitmap resolution (in dots per inch) for bitmap import" msgstr "" -"Resolução padrão de figura (em pontos por polegada) na janela de exportação" +"Resolução padrão da imagem bitmap (em pontos por polegada) ao importar " +"imagens" #: ../src/ui/dialog/inkscape-preferences.cpp:1528 -#, fuzzy msgid "Override file resolution" -msgstr "Resolução padrão de exportação" +msgstr "Ignorar resolução do ficheiro e usar esta resolução" #: ../src/ui/dialog/inkscape-preferences.cpp:1530 -#, fuzzy msgid "Use default bitmap resolution in favor of information from file" msgstr "" -"Resolução padrão de figura (em pontos por polegada) na janela de exportação" +"Usar a resolução padrão definida aqui e ignorar a resolução nativa do " +"ficheiro importado" #. rendering outlines for pixmap image tags #: ../src/ui/dialog/inkscape-preferences.cpp:1534 -#, fuzzy msgid "Images in Outline Mode" -msgstr "Desenhar um caminho a uma grelha" +msgstr "Imagens em Modo de Contorno" #: ../src/ui/dialog/inkscape-preferences.cpp:1535 msgid "" "When active will render images while in outline mode instead of a red box " "with an x. This is useful for manual tracing." msgstr "" +"Quando ativo, as imagens serão renderizadas em modo de contorno em vez de " +"uma caixa vermelha com um X. Isto é útil para usar a ferramenta de " +"vetorização manual." #: ../src/ui/dialog/inkscape-preferences.cpp:1537 -#, fuzzy msgid "Bitmaps" -msgstr "Bias" +msgstr "Imagens Bitmap" #: ../src/ui/dialog/inkscape-preferences.cpp:1549 msgid "" "Select a file of predefined shortcuts to use. Any customized shortcuts you " "create will be added separately to " msgstr "" +"Selecionar um ficheiro com atalhos pré-definidos a utilizar. Todos os " +"atalhos personalizados que criar serão adicionados separadamente a " #: ../src/ui/dialog/inkscape-preferences.cpp:1552 msgid "Shortcut file:" -msgstr "" +msgstr "Ficheiro de atalhos:" #: ../src/ui/dialog/inkscape-preferences.cpp:1555 #: ../src/ui/dialog/template-load-tab.cpp:49 -#, fuzzy msgid "Search:" -msgstr "Procurar" +msgstr "Procurar:" #: ../src/ui/dialog/inkscape-preferences.cpp:1567 msgid "Shortcut" -msgstr "" +msgstr "Atalho" #: ../src/ui/dialog/inkscape-preferences.cpp:1568 #: ../src/ui/widget/page-sizer.cpp:287 @@ -21793,29 +20572,28 @@ msgid "" "Remove all your customized keyboard shortcuts, and revert to the shortcuts " "in the shortcut file listed above" msgstr "" +"Remover todos os atalhos de teclado personalizados e repor os atalhos de " +"origem presentes no ficheiro de atalhos da lista de cima" #: ../src/ui/dialog/inkscape-preferences.cpp:1627 -#, fuzzy msgid "Import ..." -msgstr "_Importar..." +msgstr "Importar..." #: ../src/ui/dialog/inkscape-preferences.cpp:1627 msgid "Import custom keyboard shortcuts from a file" -msgstr "" +msgstr "Importar atalhos de teclado personalizados de um ficheiro" #: ../src/ui/dialog/inkscape-preferences.cpp:1630 -#, fuzzy msgid "Export ..." -msgstr "_Exportar Bitmap..." +msgstr "Exportar..." #: ../src/ui/dialog/inkscape-preferences.cpp:1630 -#, fuzzy msgid "Export custom keyboard shortcuts to a file" -msgstr "Exportar documento para um ficheiro PS" +msgstr "Exportar atalhos de teclado personalizados para um ficheiro" #: ../src/ui/dialog/inkscape-preferences.cpp:1640 msgid "Keyboard Shortcuts" -msgstr "" +msgstr "Atalhos de Teclado" #. Find this group in the tree #: ../src/ui/dialog/inkscape-preferences.cpp:1803 @@ -21823,166 +20601,162 @@ msgid "Misc" msgstr "Outros" #: ../src/ui/dialog/inkscape-preferences.cpp:1905 -#, fuzzy msgctxt "Spellchecker language" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../src/ui/dialog/inkscape-preferences.cpp:1926 msgid "Set the main spell check language" -msgstr "" +msgstr "Definir idioma principal do verificador ortográfico" #: ../src/ui/dialog/inkscape-preferences.cpp:1929 -#, fuzzy msgid "Second language:" -msgstr "Linguagem:" +msgstr "Segunda língua:" #: ../src/ui/dialog/inkscape-preferences.cpp:1930 msgid "" "Set the second spell check language; checking will only stop on words " "unknown in ALL chosen languages" msgstr "" +"Definir a segunda língua do corretor ortográfico; a verificação ortográfica " +"apenas detetará palavras desconhecidas em TODAS as línguas escolhidas" #: ../src/ui/dialog/inkscape-preferences.cpp:1933 -#, fuzzy msgid "Third language:" -msgstr "Linguagem:" +msgstr "Terceira língua:" #: ../src/ui/dialog/inkscape-preferences.cpp:1934 msgid "" "Set the third spell check language; checking will only stop on words unknown " "in ALL chosen languages" msgstr "" +"Definir a terceira língua do corretor ortográfico; a verificação ortográfica " +"apenas detetará palavras desconhecidas em TODAS as línguas escolhidas" #: ../src/ui/dialog/inkscape-preferences.cpp:1936 msgid "Ignore words with digits" -msgstr "" +msgstr "Ignorar palavras com dígitos" #: ../src/ui/dialog/inkscape-preferences.cpp:1938 msgid "Ignore words containing digits, such as \"R2D2\"" -msgstr "" +msgstr "Ignorar palavras com dígitos, como \"R2D2\"" #: ../src/ui/dialog/inkscape-preferences.cpp:1940 msgid "Ignore words in ALL CAPITALS" -msgstr "" +msgstr "Ignorar palavras TOTALMENTE EM MAIÚSCULAS" #: ../src/ui/dialog/inkscape-preferences.cpp:1942 msgid "Ignore words in all capitals, such as \"IUPAC\"" msgstr "" +"Ignorar palavras com letras todas em maiúsculas, normalmente siglas como " +"UNICEF, EUA, CPLP..." #: ../src/ui/dialog/inkscape-preferences.cpp:1944 -#, fuzzy msgid "Spellcheck" -msgstr "Selecionar" +msgstr "Verificador ortográfico" #: ../src/ui/dialog/inkscape-preferences.cpp:1964 msgid "Latency _skew:" -msgstr "" +msgstr "Deslocamento da latência:" #: ../src/ui/dialog/inkscape-preferences.cpp:1965 msgid "" "Factor by which the event clock is skewed from the actual time (0.9766 on " "some systems)" msgstr "" +"Fator pelo qual o relógio de eventos é deslocado do tempo atual (0.9766 em " +"alguns sistemas)" #: ../src/ui/dialog/inkscape-preferences.cpp:1967 msgid "Pre-render named icons" -msgstr "" +msgstr "Pré-renderizar ícones com nome" #: ../src/ui/dialog/inkscape-preferences.cpp:1969 msgid "" "When on, named icons will be rendered before displaying the ui. This is for " "working around bugs in GTK+ named icon notification" msgstr "" +"Quando ativado, os ícones com nome serão renderizados antes de mostrar a " +"interface gráfica. Isto é utilizado para contornar problemas na notificação " +"de ícones com nome do GTK+" #: ../src/ui/dialog/inkscape-preferences.cpp:1977 -#, fuzzy msgid "System info" -msgstr "Sistema" +msgstr "Informações do sistema" #: ../src/ui/dialog/inkscape-preferences.cpp:1981 msgid "User config: " -msgstr "" +msgstr "Configuração do utilizador: " #: ../src/ui/dialog/inkscape-preferences.cpp:1981 msgid "Location of users configuration" -msgstr "" +msgstr "Localização da configuração do utilizador" #: ../src/ui/dialog/inkscape-preferences.cpp:1985 -#, fuzzy msgid "User preferences: " -msgstr "Propriedades de Estrelas" +msgstr "Preferências do utilizador: " #: ../src/ui/dialog/inkscape-preferences.cpp:1985 -#, fuzzy msgid "Location of the users preferences file" -msgstr "Falha ao carregar o ficheiro %s" +msgstr "Localização das preferências do utilizador" #: ../src/ui/dialog/inkscape-preferences.cpp:1989 -#, fuzzy msgid "User extensions: " -msgstr "Extensão \"" +msgstr "Extensões do utilizador: " #: ../src/ui/dialog/inkscape-preferences.cpp:1989 -#, fuzzy msgid "Location of the users extensions" -msgstr "Informações sobre extensões do Inkscape" +msgstr "Localização das extensões do utilizador" #: ../src/ui/dialog/inkscape-preferences.cpp:1993 -#, fuzzy msgid "User cache: " -msgstr "Nome do utilizador:" +msgstr "Ficheiros temporários do utilizador: " #: ../src/ui/dialog/inkscape-preferences.cpp:1993 -#, fuzzy msgid "Location of users cache" -msgstr "Rotação (graus)" +msgstr "Localização dos ficheiros temporários do utilizador" #: ../src/ui/dialog/inkscape-preferences.cpp:2001 msgid "Temporary files: " -msgstr "" +msgstr "Ficheiros temporários: " #: ../src/ui/dialog/inkscape-preferences.cpp:2001 msgid "Location of the temporary files used for autosave" msgstr "" +"Localização dos ficheiros temporários usados na gravação automática de " +"ficheiros de cópia de segurança" #: ../src/ui/dialog/inkscape-preferences.cpp:2005 -#, fuzzy msgid "Inkscape data: " -msgstr "Manual do Inkscape" +msgstr "Dados do Inkscape: " #: ../src/ui/dialog/inkscape-preferences.cpp:2005 -#, fuzzy msgid "Location of Inkscape data" -msgstr "Informações sobre extensões do Inkscape" +msgstr "Localização dos dados do Inkscape" #: ../src/ui/dialog/inkscape-preferences.cpp:2009 -#, fuzzy msgid "Inkscape extensions: " -msgstr "Informações sobre extensões do Inkscape" +msgstr "Extensões do Inkscape: " #: ../src/ui/dialog/inkscape-preferences.cpp:2009 -#, fuzzy msgid "Location of the Inkscape extensions" -msgstr "Informações sobre extensões do Inkscape" +msgstr "Localização das extensões do Inkscape" #: ../src/ui/dialog/inkscape-preferences.cpp:2018 -#, fuzzy msgid "System data: " -msgstr "Ajustar como padrão" +msgstr "Dados do sistema: " #: ../src/ui/dialog/inkscape-preferences.cpp:2018 msgid "Locations of system data" -msgstr "" +msgstr "Localização dos dados do sistema" #: ../src/ui/dialog/inkscape-preferences.cpp:2042 msgid "Icon theme: " -msgstr "" +msgstr "Tema de ícones: " #: ../src/ui/dialog/inkscape-preferences.cpp:2042 -#, fuzzy msgid "Locations of icon themes" -msgstr "Rotação (graus)" +msgstr "Localização dos temas de ícones" #: ../src/ui/dialog/inkscape-preferences.cpp:2044 msgid "System" @@ -21990,42 +20764,37 @@ msgstr "Sistema" #: ../src/ui/dialog/input.cpp:360 ../src/ui/dialog/input.cpp:381 #: ../src/ui/dialog/input.cpp:1641 -#, fuzzy msgid "Disabled" -msgstr "_Activado" +msgstr "Desativado" #: ../src/ui/dialog/input.cpp:361 -#, fuzzy msgctxt "Input device" msgid "Screen" msgstr "Ecrã" #: ../src/ui/dialog/input.cpp:362 ../src/ui/dialog/input.cpp:383 -#, fuzzy msgid "Window" -msgstr "Janelas" +msgstr "Janela" #: ../src/ui/dialog/input.cpp:618 msgid "Test Area" -msgstr "" +msgstr "Ãrea de Testes" #: ../src/ui/dialog/input.cpp:619 msgid "Axis" -msgstr "" +msgstr "Eixo" #: ../src/ui/dialog/input.cpp:708 ../share/extensions/svgcalendar.inx.h:2 -#, fuzzy msgid "Configuration" -msgstr "Configurações de Impressão" +msgstr "Configuração" #: ../src/ui/dialog/input.cpp:709 msgid "Hardware" -msgstr "" +msgstr "Hardware" #: ../src/ui/dialog/input.cpp:732 -#, fuzzy msgid "Link:" -msgstr "Linha" +msgstr "Ligação:" #: ../src/ui/dialog/input.cpp:742 ../src/ui/dialog/input.cpp:743 #: ../src/ui/dialog/input.cpp:1571 ../src/ui/widget/color-scales.cpp:46 @@ -22034,50 +20803,44 @@ msgid "None" msgstr "Nenhum" #: ../src/ui/dialog/input.cpp:758 -#, fuzzy msgid "Axes count:" -msgstr "Quantidade" +msgstr "Quantidade de eixos:" #: ../src/ui/dialog/input.cpp:788 -#, fuzzy msgid "axis:" -msgstr "Raio" +msgstr "eixo:" #: ../src/ui/dialog/input.cpp:812 -#, fuzzy msgid "Button count:" -msgstr "Fundo" +msgstr "Número de botões:" #: ../src/ui/dialog/input.cpp:1010 -#, fuzzy msgid "Tablet" -msgstr "Tabela" +msgstr "Tablet" #: ../src/ui/dialog/input.cpp:1039 ../src/ui/dialog/input.cpp:1928 msgid "pad" -msgstr "" +msgstr "painel tátil" #: ../src/ui/dialog/input.cpp:1081 -#, fuzzy msgid "_Use pressure-sensitive tablet (requires restart)" -msgstr "" -"Use a pressão sensível da Mesa Digitalizadora (tablet) ou outro dispositivo " -"(necessita reiniciar)" +msgstr "_Usar dispositivo sensível à pressão (necessário reiniciar)" #: ../src/ui/dialog/input.cpp:1086 -#, fuzzy msgid "Axes" -msgstr "Desenhar Eixos" +msgstr "Eixos" #: ../src/ui/dialog/input.cpp:1087 msgid "Keys" -msgstr "" +msgstr "Teclas" #: ../src/ui/dialog/input.cpp:1170 msgid "" "A device can be 'Disabled', its co-ordinates mapped to the whole 'Screen', " "or to a single (usually focused) 'Window'" msgstr "" +"Um dispositivo pode ser 'desativado', as suas coordenadas mapeadas ao 'ecrã' " +"total, ou apenas a uma janela (normalmente ativa)" #: ../src/ui/dialog/input.cpp:1616 ../src/widgets/calligraphy-toolbar.cpp:578 #: ../src/widgets/spray-toolbar.cpp:311 ../src/widgets/spray-toolbar.cpp:427 @@ -22087,36 +20850,32 @@ msgstr "Pressão" #: ../src/ui/dialog/input.cpp:1616 msgid "X tilt" -msgstr "" +msgstr "Inclinação X" #: ../src/ui/dialog/input.cpp:1616 msgid "Y tilt" -msgstr "" +msgstr "Inclinação Y" #: ../src/ui/dialog/input.cpp:1616 ../src/ui/widget/color-wheel-selector.cpp:29 msgid "Wheel" msgstr "Roda" #: ../src/ui/dialog/input.cpp:1625 -#, fuzzy msgctxt "Input device axe" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../src/ui/dialog/knot-properties.cpp:59 -#, fuzzy msgid "Position X:" -msgstr "Posição:" +msgstr "Posição X:" #: ../src/ui/dialog/knot-properties.cpp:66 -#, fuzzy msgid "Position Y:" -msgstr "Posição:" +msgstr "Posição Y:" #: ../src/ui/dialog/knot-properties.cpp:120 -#, fuzzy msgid "Modify Knot Position" -msgstr "Posição:" +msgstr "Alterar Posição do Nó" #: ../src/ui/dialog/knot-properties.cpp:121 #: ../src/ui/dialog/layer-properties.cpp:411 @@ -22126,14 +20885,14 @@ msgid "_Move" msgstr "_Mover" #: ../src/ui/dialog/knot-properties.cpp:180 -#, fuzzy, c-format +#, c-format msgid "Position X (%s):" -msgstr "Posição:" +msgstr "Posição X (%s):" #: ../src/ui/dialog/knot-properties.cpp:181 -#, fuzzy, c-format +#, c-format msgid "Position Y (%s):" -msgstr "Posição:" +msgstr "Posição Y (%s):" #: ../src/ui/dialog/layer-properties.cpp:55 msgid "Layer name:" @@ -22145,19 +20904,19 @@ msgstr "Adicionar camada" #: ../src/ui/dialog/layer-properties.cpp:176 msgid "Above current" -msgstr "Acima do actual" +msgstr "Acima da atual" #: ../src/ui/dialog/layer-properties.cpp:180 msgid "Below current" -msgstr "Abaixo da actual" +msgstr "Abaixo da atual" #: ../src/ui/dialog/layer-properties.cpp:183 msgid "As sublayer of current" -msgstr "Como subcamada da actual" +msgstr "Como subcamada da atual" #: ../src/ui/dialog/layer-properties.cpp:352 msgid "Rename Layer" -msgstr "Renomear Camada" +msgstr "Alterar Nome da Camada" #. TODO: find an unused layer number, forming name from _("Layer ") + "%d" #: ../src/ui/dialog/layer-properties.cpp:354 @@ -22168,16 +20927,16 @@ msgstr "Camada" #: ../src/ui/dialog/layer-properties.cpp:355 msgid "_Rename" -msgstr "_Renomear" +msgstr "_Alterar nome" #: ../src/ui/dialog/layer-properties.cpp:368 ../src/ui/dialog/layers.cpp:758 msgid "Rename layer" -msgstr "Renomear camada" +msgstr "Alterar nome da camada" #. TRANSLATORS: This means "The layer has been renamed" #: ../src/ui/dialog/layer-properties.cpp:370 msgid "Renamed layer" -msgstr "A camada foi renomeada" +msgstr "O nome da camada foi alterado" #: ../src/ui/dialog/layer-properties.cpp:374 msgid "Add Layer" @@ -22192,206 +20951,177 @@ msgid "New layer created." msgstr "Nova camada criada." #: ../src/ui/dialog/layer-properties.cpp:408 -#, fuzzy msgid "Move to Layer" -msgstr "Baixar camada" +msgstr "Mover Para a Camada" #: ../src/ui/dialog/layers.cpp:525 ../src/ui/widget/layer-selector.cpp:612 msgid "Unhide layer" -msgstr "Mostrar Camada" +msgstr "Desocultar camada" #: ../src/ui/dialog/layers.cpp:525 ../src/ui/widget/layer-selector.cpp:612 msgid "Hide layer" -msgstr "Ocultar Camada" +msgstr "Ocultar camada" #: ../src/ui/dialog/layers.cpp:536 ../src/ui/widget/layer-selector.cpp:604 msgid "Lock layer" -msgstr "Bloquear Camada" +msgstr "Bloquear camada" #: ../src/ui/dialog/layers.cpp:536 ../src/ui/widget/layer-selector.cpp:604 msgid "Unlock layer" -msgstr "DesBloquear Camada" +msgstr "Desbloquear camada" #: ../src/ui/dialog/layers.cpp:624 ../src/ui/dialog/objects.cpp:844 #: ../src/verbs.cpp:1423 -#, fuzzy msgid "Toggle layer solo" -msgstr "Tornar a camada actual visível" +msgstr "Alterar apenas esta camada/todas" #: ../src/ui/dialog/layers.cpp:627 ../src/ui/dialog/objects.cpp:847 #: ../src/verbs.cpp:1447 -#, fuzzy msgid "Lock other layers" -msgstr "Bloquear Camada" +msgstr "Bloquear outra camadas" #: ../src/ui/dialog/layers.cpp:730 -#, fuzzy msgid "Move layer" -msgstr "Baixar camada" +msgstr "Mover camada" #: ../src/ui/dialog/layers.cpp:892 -#, fuzzy msgctxt "Layers" msgid "New" -msgstr "Novo" +msgstr "Nova" #: ../src/ui/dialog/layers.cpp:897 -#, fuzzy msgctxt "Layers" msgid "Bot" msgstr "Fundo" #: ../src/ui/dialog/layers.cpp:903 -#, fuzzy msgctxt "Layers" msgid "Dn" msgstr "Abaixo" #: ../src/ui/dialog/layers.cpp:909 -#, fuzzy msgctxt "Layers" msgid "Up" msgstr "Acima" #: ../src/ui/dialog/layers.cpp:915 -#, fuzzy msgctxt "Layers" msgid "Top" msgstr "Topo" #: ../src/ui/dialog/livepatheffect-add.cpp:32 -#, fuzzy msgid "Add Path Effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Adicionar Efeito no Caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:119 -#, fuzzy msgid "Add path effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Adicionar efeito no caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:123 -#, fuzzy msgid "Delete current path effect" -msgstr "Eliminar Camada Atual" +msgstr "Eliminar efeito atual no caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:127 -#, fuzzy msgid "Raise the current path effect" -msgstr "Levantar a camada actual" +msgstr "Subir o efeito atual do caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:131 -#, fuzzy msgid "Lower the current path effect" -msgstr "Baixar a camada actual" +msgstr "baixar o efeito atual do caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:298 msgid "Unknown effect is applied" -msgstr "Efeito desconhecido está aplicado" +msgstr "Está aplicado um efeito desconhecido" #: ../src/ui/dialog/livepatheffect-editor.cpp:301 -#, fuzzy msgid "Click button to add an effect" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Clicar no botão para adicionar um efeito" #: ../src/ui/dialog/livepatheffect-editor.cpp:316 msgid "Click add button to convert clone" -msgstr "" +msgstr "Clicar no botão de adicionar para converter clone" #: ../src/ui/dialog/livepatheffect-editor.cpp:321 #: ../src/ui/dialog/livepatheffect-editor.cpp:325 #: ../src/ui/dialog/livepatheffect-editor.cpp:334 -#, fuzzy msgid "Select a path or shape" -msgstr "O item não é uma forma ou caminho" +msgstr "Selecionar um caminho ou forma geométrica" #: ../src/ui/dialog/livepatheffect-editor.cpp:330 msgid "Only one item can be selected" -msgstr "Apenas um item pode ser seleccionado" +msgstr "Apenas pode ser selecionado 1 item" #: ../src/ui/dialog/livepatheffect-editor.cpp:362 -#, fuzzy msgid "Unknown effect" -msgstr "Efeito desconhecido está aplicado" +msgstr "Efeito desconhecido" #: ../src/ui/dialog/livepatheffect-editor.cpp:438 msgid "Create and apply path effect" -msgstr "Criar e aplicar efeito de caminho" +msgstr "Criar e aplicar efeito no caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:478 -#, fuzzy msgid "Create and apply Clone original path effect" -msgstr "Criar e aplicar efeito de caminho" +msgstr "Criar e aplicar Clone do efeito no caminho original" #: ../src/ui/dialog/livepatheffect-editor.cpp:500 msgid "Remove path effect" -msgstr "Remover efeito de caminho" +msgstr "Remover efeito no caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:518 -#, fuzzy msgid "Move path effect up" -msgstr "Remover efeito de caminho" +msgstr "Mover efeito no caminho para cima" #: ../src/ui/dialog/livepatheffect-editor.cpp:535 -#, fuzzy msgid "Move path effect down" -msgstr "Remover efeito de caminho" +msgstr "Mover efeito no caminho para baixo" #: ../src/ui/dialog/livepatheffect-editor.cpp:574 -#, fuzzy msgid "Activate path effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Ativar efeito no caminho" #: ../src/ui/dialog/livepatheffect-editor.cpp:574 -#, fuzzy msgid "Deactivate path effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Desativar efeito no caminho" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:53 -#, fuzzy msgid "Radius (pixels):" -msgstr "Raio" +msgstr "Raio (píxeis):" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:65 -#, fuzzy msgid "Chamfer subdivisions:" -msgstr "Subdivisões" +msgstr "Subdivisões da chanfra:" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:136 msgid "Modify Fillet-Chamfer" -msgstr "" +msgstr "Alterar Filete-Chanfra" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:137 -#, fuzzy msgid "_Modify" -msgstr "Modificar Caminho" +msgstr "_Alterar" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:201 msgid "Radius" msgstr "Raio" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:203 -#, fuzzy msgid "Radius approximated" -msgstr "(aproximadamente redondo)" +msgstr "Raio aproximado" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:206 -#, fuzzy msgid "Knot distance" -msgstr "Encaixar _distância" +msgstr "Distância do nó" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:213 -#, fuzzy msgid "Position (%):" -msgstr "Posição:" +msgstr "Posição (%):" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:216 -#, fuzzy msgid "%1:" -msgstr "K1" +msgstr "%1:" #: ../src/ui/dialog/lpe-powerstroke-properties.cpp:122 msgid "Modify Node Position" -msgstr "" +msgstr "Alterar Posição do Nó" #: ../src/ui/dialog/memory.cpp:96 msgid "Heap" @@ -22399,13 +21129,13 @@ msgstr "Pilha" #: ../src/ui/dialog/memory.cpp:97 msgid "In Use" -msgstr "Em Uso" +msgstr "Utilizado" #. TRANSLATORS: "Slack" refers to memory which is in the heap but currently unused. #. More typical usage is to call this memory "free" rather than "slack". #: ../src/ui/dialog/memory.cpp:100 msgid "Slack" -msgstr "Folga" +msgstr "Não Utilizado" #: ../src/ui/dialog/memory.cpp:101 msgid "Total" @@ -22425,9 +21155,8 @@ msgid "Recalculate" msgstr "Recalcular" #: ../src/ui/dialog/messages.cpp:47 -#, fuzzy msgid "Clear log messages" -msgstr "Capturar mensagens de depuração" +msgstr "Limpar registo de mensagens" #: ../src/ui/dialog/messages.cpp:81 msgid "Ready." @@ -22435,20 +21164,19 @@ msgstr "Pronto." #: ../src/ui/dialog/messages.cpp:174 msgid "Log capture started." -msgstr "" +msgstr "Captura para o registo de mensagens iniciado." #: ../src/ui/dialog/messages.cpp:203 msgid "Log capture stopped." -msgstr "" +msgstr "Captura para o registo de mensagens parado." #: ../src/ui/dialog/new-from-template.cpp:27 -#, fuzzy msgid "Create from template" -msgstr "Criar espirais" +msgstr "Criar do modelo" #: ../src/ui/dialog/new-from-template.cpp:29 msgid "New From Template" -msgstr "" +msgstr "Novo Documento a Partir do Modelo" #: ../src/ui/dialog/object-attributes.cpp:47 msgid "Href:" @@ -22458,14 +21186,14 @@ msgstr "Href:" #. Identifies the type of the related resource with an absolute URI #: ../src/ui/dialog/object-attributes.cpp:52 msgid "Role:" -msgstr "Cargo:" +msgstr "Papel:" # "arcrole: URI de um recurso que descreve o papel do arco" segundo http://www.di.ufpe.br/~mbr/xml/aulas_2004/08-Xlink-Xpointer-XPath.ppt #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/linking.html#AElementXLinkArcRoleAttribute #. For situations where the nature/role alone isn't enough, this offers an additional URI defining the purpose of the link. #: ../src/ui/dialog/object-attributes.cpp:55 msgid "Arcrole:" -msgstr "Função do arco:" +msgstr "Papel do arco:" #: ../src/ui/dialog/object-attributes.cpp:58 #: ../share/extensions/polyhedron_3d.inx.h:47 @@ -22482,27 +21210,23 @@ msgid "URL:" msgstr "URL:" #: ../src/ui/dialog/object-attributes.cpp:70 -#, fuzzy msgid "Image Rendering:" -msgstr "Render" +msgstr "Renderização da Imagem:" #: ../src/ui/dialog/object-properties.cpp:58 #: ../src/ui/dialog/object-properties.cpp:399 #: ../src/ui/dialog/object-properties.cpp:470 #: ../src/ui/dialog/object-properties.cpp:477 -#, fuzzy msgid "_ID:" -msgstr "_ID: " +msgstr "_ID:" #: ../src/ui/dialog/object-properties.cpp:60 -#, fuzzy msgid "_Title:" -msgstr "Título" +msgstr "_Título:" #: ../src/ui/dialog/object-properties.cpp:61 -#, fuzzy msgid "_Image Rendering:" -msgstr "Render" +msgstr "_Renderização da Imagem:" #: ../src/ui/dialog/object-properties.cpp:62 msgid "_Hide" @@ -22510,26 +21234,25 @@ msgstr "_Ocultar" #: ../src/ui/dialog/object-properties.cpp:63 msgid "L_ock" -msgstr "Bl_oquear" +msgstr "_Bloquear" #. Create the entry box for the object id #: ../src/ui/dialog/object-properties.cpp:139 -#, fuzzy msgid "" "The id= attribute (only letters, digits, and the characters .-_: allowed)" msgstr "" -"_:No atributo id= (apenas letras, dígitos, e os caracteres .- são permitidos)" +"O atributo ID (identificador), apenas são permitidas letras, dígitos e os " +"caracteres .-_:" #. Create the entry box for the object label #: ../src/ui/dialog/object-properties.cpp:174 msgid "A freeform label for the object" -msgstr "Um rótulo com forma livre para o objecto" +msgstr "Um rótulo de forma livre para o objeto" #. Create the frame for the object description #: ../src/ui/dialog/object-properties.cpp:225 -#, fuzzy msgid "_Description:" -msgstr "Descrição" +msgstr "_Descrição:" #: ../src/ui/dialog/object-properties.cpp:260 msgid "" @@ -22540,17 +21263,24 @@ msgid "" "Note that this behaviour is not defined in the SVG 1.1 specification and not " "all browsers follow this interpretation." msgstr "" +"A propriedade 'image-rendering' pode influenciar como uma imagem bitmap é " +"aumentada em escala:\n" +"\t'auto' sem preferência (automático);\n" +"\t'optimizeQuality' suaviza (mais qualidade);\n" +"\t'optimizeSpeed' pixelizada (menos qualidade).\n" +"Notar que este comportamento não é definido na especificação SVG 1.1 e nem " +"todos os navegadores de internet o suportam." #. Hide #: ../src/ui/dialog/object-properties.cpp:293 msgid "Check to make the object invisible" -msgstr "Marque para tornar o objecto invisível" +msgstr "Ativar para tornar o objeto invisível" #. Lock #. TRANSLATORS: "Lock" is a verb here #: ../src/ui/dialog/object-properties.cpp:309 msgid "Check to make the object insensitive (not selectable by mouse)" -msgstr "Marque para fazer o objecto intangível (não selecionável pelo mouse)" +msgstr "Ativar para fazer o objeto intangível (não selecionável com o rato)" #. Button for setting the object's id, label, title and description. #: ../src/ui/dialog/object-properties.cpp:325 ../src/verbs.cpp:2713 @@ -22560,9 +21290,8 @@ msgstr "_Aplicar" #. Create the frame for interactivity options #: ../src/ui/dialog/object-properties.cpp:339 -#, fuzzy msgid "_Interactivity" -msgstr "_Interseção" +msgstr "_Interatividade" #: ../src/ui/dialog/object-properties.cpp:386 #: ../src/ui/dialog/object-properties.cpp:391 @@ -22571,7 +21300,7 @@ msgstr "Ref" #: ../src/ui/dialog/object-properties.cpp:472 msgid "Id invalid! " -msgstr "ID inválido! " +msgstr "ID é inválido! " #: ../src/ui/dialog/object-properties.cpp:474 msgid "Id exists! " @@ -22579,414 +21308,374 @@ msgstr "ID existe! " #: ../src/ui/dialog/object-properties.cpp:480 msgid "Set object ID" -msgstr "Ajustar ID do objecto" +msgstr "Definir ID do objeto" #: ../src/ui/dialog/object-properties.cpp:494 msgid "Set object label" -msgstr "Ajustar rótulo do objecto" +msgstr "Definir etiqueta do objeto" #: ../src/ui/dialog/object-properties.cpp:500 msgid "Set object title" -msgstr "Ajustar título do objecto" +msgstr "Definir título do objeto" #: ../src/ui/dialog/object-properties.cpp:509 msgid "Set object description" -msgstr "Ajustar descrição do objecto" +msgstr "Definir descrição do objeto" #: ../src/ui/dialog/object-properties.cpp:535 -#, fuzzy msgid "Set image rendering option" -msgstr "Render" +msgstr "Definir opção da renderização da imagem" #: ../src/ui/dialog/object-properties.cpp:554 msgid "Lock object" -msgstr "Bloquear objecto" +msgstr "Bloquear objeto" #: ../src/ui/dialog/object-properties.cpp:554 msgid "Unlock object" -msgstr "DesBloquear objectos" +msgstr "Desbloquear objeto" #: ../src/ui/dialog/object-properties.cpp:570 msgid "Hide object" -msgstr "Ocultar objecto" +msgstr "Ocultar objeto" #: ../src/ui/dialog/object-properties.cpp:570 msgid "Unhide object" -msgstr "Mostrar objecto" +msgstr "Desocultar objeto" #: ../src/ui/dialog/objects.cpp:874 -#, fuzzy msgid "Unhide objects" -msgstr "Mostrar objecto" +msgstr "Desocultar objetos" #: ../src/ui/dialog/objects.cpp:874 -#, fuzzy msgid "Hide objects" -msgstr "Ocultar objecto" +msgstr "Ocultar objetos" #: ../src/ui/dialog/objects.cpp:894 -#, fuzzy msgid "Lock objects" -msgstr "Bloquear objecto" +msgstr "Bloquear objetos" #: ../src/ui/dialog/objects.cpp:894 -#, fuzzy msgid "Unlock objects" -msgstr "DesBloquear objectos" +msgstr "Desbloquear objetos" #: ../src/ui/dialog/objects.cpp:906 -#, fuzzy msgid "Layer to group" -msgstr "Camada para o topo" +msgstr "Camada para grupo" #: ../src/ui/dialog/objects.cpp:906 -#, fuzzy msgid "Group to layer" -msgstr "Baixar camada" +msgstr "Grupo para camada" #: ../src/ui/dialog/objects.cpp:1104 -#, fuzzy msgid "Moved objects" -msgstr "Nenhum objecto" +msgstr "Objetos movidos" #: ../src/ui/dialog/objects.cpp:1353 ../src/ui/dialog/tags.cpp:853 #: ../src/ui/dialog/tags.cpp:860 -#, fuzzy msgid "Rename object" -msgstr "Girar nós" +msgstr "Alterar nome do objeto" #: ../src/ui/dialog/objects.cpp:1459 -#, fuzzy msgid "Set object highlight color" -msgstr "Ajustar título do objecto" +msgstr "Definir cor de destaque do objeto" #: ../src/ui/dialog/objects.cpp:1469 -#, fuzzy msgid "Set object opacity" -msgstr "Ajustar título do objecto" +msgstr "Definir opacidade do objeto" #: ../src/ui/dialog/objects.cpp:1502 -#, fuzzy msgid "Set object blend mode" -msgstr "Ajustar rótulo do objecto" +msgstr "Definir modo de mistura do objeto" #: ../src/ui/dialog/objects.cpp:1558 -#, fuzzy msgid "Set object blur" -msgstr "Ajustar rótulo do objecto" +msgstr "Definir desfocagem do objeto" #: ../src/ui/dialog/objects.cpp:1621 msgctxt "Visibility" msgid "V" -msgstr "" +msgstr "Visi" #: ../src/ui/dialog/objects.cpp:1622 -#, fuzzy msgctxt "Lock" msgid "L" -msgstr "L" +msgstr "Bloq" #: ../src/ui/dialog/objects.cpp:1623 msgctxt "Type" msgid "T" -msgstr "" +msgstr "Tipo" #: ../src/ui/dialog/objects.cpp:1624 -#, fuzzy msgctxt "Clip and mask" msgid "CM" -msgstr "CMYK" +msgstr "RM" #: ../src/ui/dialog/objects.cpp:1625 -#, fuzzy msgctxt "Highlight" msgid "HL" -msgstr "HSL" +msgstr "DE" #: ../src/ui/dialog/objects.cpp:1626 -#, fuzzy msgid "Label" -msgstr "_Rótulo" +msgstr "Etiqueta" #. In order to get tooltips on header, we must create our own label. #: ../src/ui/dialog/objects.cpp:1668 -#, fuzzy msgid "Toggle visibility of Layer, Group, or Object." -msgstr "Baixar a camada actual" +msgstr "Alternar visibilidade da Camada, Grupo ou Objeto." #: ../src/ui/dialog/objects.cpp:1681 msgid "Toggle lock of Layer, Group, or Object." -msgstr "" +msgstr "Alternar bloqueio da Camada, Grupo ou Objeto." #: ../src/ui/dialog/objects.cpp:1693 msgid "" "Type: Layer, Group, or Object. Clicking on Layer or Group icon, toggles " "between the two types." msgstr "" +"Tipo: Camada, Grupo ou Objeto. Clicar no ícone da Camada ou Grupo, alterna " +"entre os dois tipos." #: ../src/ui/dialog/objects.cpp:1712 msgid "Is object clipped and/or masked?" -msgstr "" +msgstr "O objeto contém recorte ou máscara?" #: ../src/ui/dialog/objects.cpp:1723 msgid "" "Highlight color of outline in Node tool. Click to set. If alpha is zero, use " "inherited color." msgstr "" +"Destacar cor do contorno na ferramenta Nó. Clicar para definir. Se a " +"transparência for zero, usar a cor herdada." #: ../src/ui/dialog/objects.cpp:1734 msgid "" "Layer/Group/Object label (inkscape:label). Double-click to set. Default " "value is object 'id'." msgstr "" +"Etiqueta da Camada/Grupo/Objeto (inkscape:label). Clicar 2 vezes para " +"definir. O valor padrão é o ID (identificador) do objeto." #: ../src/ui/dialog/objects.cpp:1831 -#, fuzzy msgid "Add layer..." -msgstr "_Adicionar Camada..." +msgstr "Adicionar camada..." #: ../src/ui/dialog/objects.cpp:1838 -#, fuzzy msgid "Remove object" -msgstr "Remover filtro" +msgstr "Remover objeto" #: ../src/ui/dialog/objects.cpp:1846 -#, fuzzy msgid "Move To Bottom" -msgstr "_Baixar para o Fundo" +msgstr "Mover Para o Fundo" #: ../src/ui/dialog/objects.cpp:1870 -#, fuzzy msgid "Move To Top" -msgstr "Mover para:" +msgstr "Mover Para o Topo" #: ../src/ui/dialog/objects.cpp:1878 -#, fuzzy msgid "Collapse All" -msgstr "Limpa_r Todos" +msgstr "Contrair Tudo" #: ../src/ui/dialog/objects.cpp:1892 -#, fuzzy msgid "Rename" -msgstr "_Renomear" +msgstr "Alterar o Nome" #: ../src/ui/dialog/objects.cpp:1898 msgid "Solo" -msgstr "" +msgstr "Mostrar Só Esta Camada" #: ../src/ui/dialog/objects.cpp:1899 -#, fuzzy msgid "Show All" -msgstr "Mostrar:" +msgstr "Mostrar Todas as Camadas" #: ../src/ui/dialog/objects.cpp:1900 -#, fuzzy msgid "Hide All" -msgstr "Mostrar Tudo" +msgstr "Ocultar Todas as Camadas" #: ../src/ui/dialog/objects.cpp:1904 -#, fuzzy msgid "Lock Others" -msgstr "Bloquear Camada" +msgstr "Bloquear Outras Camadas" #: ../src/ui/dialog/objects.cpp:1905 -#, fuzzy msgid "Lock All" -msgstr "DesBloquear Tudo" +msgstr "Bloquear Todas as Camadas" #. LockAndHide #: ../src/ui/dialog/objects.cpp:1906 ../src/verbs.cpp:3011 msgid "Unlock All" -msgstr "DesBloquear Tudo" +msgstr "Desbloquear Todas" #: ../src/ui/dialog/objects.cpp:1910 -#, fuzzy msgid "Up" msgstr "Acima" #: ../src/ui/dialog/objects.cpp:1911 msgid "Down" -msgstr "" +msgstr "Abaixo" #: ../src/ui/dialog/objects.cpp:1920 -#, fuzzy msgid "Set Clip" -msgstr "Desfazer preenchimento" +msgstr "Aplicar Recorte" #. will never be implemented #. _watching.push_back( &_addPopupItem( targetDesktop, SP_VERB_OBJECT_SET_INVERSE_CLIPPATH, 0, "Set Inverse Clip", (int)BUTTON_SETINVCLIP ) ); #: ../src/ui/dialog/objects.cpp:1926 -#, fuzzy msgid "Unset Clip" -msgstr "Desfazer preenchimento" +msgstr "Retirar Recorte" #. Set mask #: ../src/ui/dialog/objects.cpp:1930 ../src/ui/interface.cpp:1754 -#, fuzzy msgid "Set Mask" -msgstr "Definir máscara" +msgstr "Definir Máscara" #: ../src/ui/dialog/objects.cpp:1931 -#, fuzzy msgid "Unset Mask" -msgstr "Definir máscara" +msgstr "Retirar Máscara" #: ../src/ui/dialog/objects.cpp:1953 -#, fuzzy msgid "Select Highlight Color" -msgstr "Cor de _destaque:" +msgstr "Selecionar Cor de Destaque:" #: ../src/ui/dialog/ocaldialogs.cpp:715 msgid "Clipart found" -msgstr "" +msgstr "Clipart encontrado" #: ../src/ui/dialog/ocaldialogs.cpp:764 -#, fuzzy msgid "Downloading image..." -msgstr "Revertendo caminhos..." +msgstr "A descarregar imagem..." #: ../src/ui/dialog/ocaldialogs.cpp:912 -#, fuzzy msgid "Could not download image" -msgstr "Não foi possível exportar para o ficheiro %s.\n" +msgstr "Não foi possível descarregar a imagem" #: ../src/ui/dialog/ocaldialogs.cpp:922 msgid "Clipart downloaded successfully" -msgstr "" +msgstr "Clipart descarregado com sucesso" #: ../src/ui/dialog/ocaldialogs.cpp:936 -#, fuzzy msgid "Could not download thumbnail file" -msgstr "Não foi possível exportar para o ficheiro %s.\n" +msgstr "Não foi possível descarregar o ficheiro miniatura" #: ../src/ui/dialog/ocaldialogs.cpp:1011 -#, fuzzy msgid "No description" -msgstr " descrição: " +msgstr "Sem descrição" #: ../src/ui/dialog/ocaldialogs.cpp:1079 -#, fuzzy msgid "Searching clipart..." -msgstr "Revertendo caminhos..." +msgstr "A procurar clipart..." #: ../src/ui/dialog/ocaldialogs.cpp:1099 ../src/ui/dialog/ocaldialogs.cpp:1120 -#, fuzzy msgid "Could not connect to the Open Clip Art Library" -msgstr "Exportar este documento para a Biblioteca Open Clip Art" +msgstr "Não foi possível estabelecer a ligação a Open Clip Art Library" #: ../src/ui/dialog/ocaldialogs.cpp:1145 -#, fuzzy msgid "Could not parse search results" -msgstr "Não foi possível interpretar os dados do SVG" +msgstr "Não foi possível processar os resultados da pesquisa" #: ../src/ui/dialog/ocaldialogs.cpp:1177 msgid "No clipart named %1 was found." -msgstr "" +msgstr "Não foi encontrado nenhum clipart com o nome %1." #: ../src/ui/dialog/ocaldialogs.cpp:1179 msgid "" "Please make sure all keywords are spelled correctly, or try again with " "different keywords." msgstr "" +"Por favor confirmar se todas as palavras-chave estão corretas ou tentar de " +"novo com outras palavras-chave." #: ../src/ui/dialog/ocaldialogs.cpp:1231 msgid "Search" msgstr "Procurar" #: ../src/ui/dialog/ocaldialogs.cpp:1243 -#, fuzzy msgid "Close" -msgstr "Fe_char" +msgstr "Fechar" #: ../src/ui/dialog/pixelartdialog.cpp:190 msgid "_Curves (multiplier):" -msgstr "" +msgstr "_Curvas (multiplicador):" #: ../src/ui/dialog/pixelartdialog.cpp:193 msgid "Favors connections that are part of a long curve" -msgstr "" +msgstr "Favorece ligações que fazem parte de uma curva longa" #: ../src/ui/dialog/pixelartdialog.cpp:204 -#, fuzzy msgid "_Islands (weight):" -msgstr "Altura da Barra:" +msgstr "_Ilhas (altura):" #: ../src/ui/dialog/pixelartdialog.cpp:207 msgid "Avoid single disconnected pixels" -msgstr "" +msgstr "Evitar píxeis únicos não ligados" #: ../src/ui/dialog/pixelartdialog.cpp:209 -#, fuzzy msgid "A constant vote value" -msgstr "Rotação (graus)" +msgstr "Um valor de voto constante" #: ../src/ui/dialog/pixelartdialog.cpp:219 msgid "Sparse pixels (window _radius):" -msgstr "" +msgstr "Píxeis dispersos (_raio da janela):" #: ../src/ui/dialog/pixelartdialog.cpp:228 msgid "The radius of the window analyzed" -msgstr "" +msgstr "O raio da janela analizada" #: ../src/ui/dialog/pixelartdialog.cpp:229 msgid "Sparse pixels (_multiplier):" -msgstr "" +msgstr "Píxeis dispersos (_multiplicador):" #: ../src/ui/dialog/pixelartdialog.cpp:240 msgid "Favors connections that are part of foreground color" -msgstr "" +msgstr "Favorece ligações que fazem parte da cor de cima" #: ../src/ui/dialog/pixelartdialog.cpp:246 msgid "The heuristic computed vote will be multiplied by this value" -msgstr "" +msgstr "O voto heurístico calculado será multiplicado por este valor" #: ../src/ui/dialog/pixelartdialog.cpp:259 msgid "Heuristics" -msgstr "" +msgstr "Heurísticas" #: ../src/ui/dialog/pixelartdialog.cpp:266 -#, fuzzy msgid "_Voronoi diagram" -msgstr "Padrões" +msgstr "Diagrama _Voronoi" #: ../src/ui/dialog/pixelartdialog.cpp:267 msgid "Output composed of straight lines" -msgstr "" +msgstr "Saída composta por linhas direitas" #: ../src/ui/dialog/pixelartdialog.cpp:273 -#, fuzzy msgid "Convert to _B-spline curves" -msgstr "Converter para Texto" +msgstr "Converter para curvas _B-Spline" #: ../src/ui/dialog/pixelartdialog.cpp:274 msgid "Preserve staircasing artifacts" -msgstr "" +msgstr "Preservar artefactos em escada" #: ../src/ui/dialog/pixelartdialog.cpp:281 -#, fuzzy msgid "_Smooth curves" -msgstr "Suavizar cantos" +msgstr "Curvas _suaves" #: ../src/ui/dialog/pixelartdialog.cpp:282 msgid "The Kopf-Lischinski algorithm" -msgstr "" +msgstr "O algoritmo Kopf-Lischinski" #: ../src/ui/dialog/pixelartdialog.cpp:289 msgid "Output" msgstr "Saída" #: ../src/ui/dialog/pixelartdialog.cpp:297 ../src/ui/dialog/tracedialog.cpp:814 -#, fuzzy msgid "Reset all settings to defaults" -msgstr "Redefinir todos os parâmetros para padrão" +msgstr "Repor todos os parâmetros padrão" #: ../src/ui/dialog/pixelartdialog.cpp:302 ../src/ui/dialog/tracedialog.cpp:819 msgid "Abort a trace in progress" -msgstr "Abortar vectorização em progresso" +msgstr "Abortar vetorização em progresso" #: ../src/ui/dialog/pixelartdialog.cpp:306 ../src/ui/dialog/tracedialog.cpp:823 msgid "Execute the trace" -msgstr "Vectorizar" +msgstr "Vetorizar" #: ../src/ui/dialog/pixelartdialog.cpp:388 #: ../src/ui/dialog/pixelartdialog.cpp:422 @@ -22996,139 +21685,123 @@ msgid "" "\n" "Continue the procedure (without saving)?" msgstr "" +"A imagem parece demasiado grande. O processamento poderá demorar um pouco e " +"é aconselhável gravar o documento antes de continuar.\n" +"\n" +"Continuar (sem gravar)?" #: ../src/ui/dialog/pixelartdialog.cpp:499 -#, fuzzy msgid "Trace pixel art" -msgstr "pixels em" +msgstr "Vetorizar arte de píxeis" #: ../src/ui/dialog/polar-arrange-tab.cpp:41 -#, fuzzy msgctxt "Polar arrange tab" msgid "Y coordinate of the center" -msgstr "Coordenada X do nó(s) seleccionado(s)" +msgstr "Coordenada Y do centro" #: ../src/ui/dialog/polar-arrange-tab.cpp:42 -#, fuzzy msgctxt "Polar arrange tab" msgid "X coordinate of the center" -msgstr "Coordenada X do nó(s) seleccionado(s)" +msgstr "Coordenada X do centro" #: ../src/ui/dialog/polar-arrange-tab.cpp:43 -#, fuzzy msgctxt "Polar arrange tab" msgid "Y coordinate of the radius" -msgstr "Coordenada X do nó(s) seleccionado(s)" +msgstr "Coordenada Y do raio" #: ../src/ui/dialog/polar-arrange-tab.cpp:44 -#, fuzzy msgctxt "Polar arrange tab" msgid "X coordinate of the radius" -msgstr "Coordenada X do nó(s) seleccionado(s)" +msgstr "Coordenada X do raio" #: ../src/ui/dialog/polar-arrange-tab.cpp:45 -#, fuzzy msgctxt "Polar arrange tab" msgid "Starting angle" -msgstr "Valor de x inicial" +msgstr "Ângulo inicial" #: ../src/ui/dialog/polar-arrange-tab.cpp:46 -#, fuzzy msgctxt "Polar arrange tab" msgid "End angle" -msgstr "Ângulo de Cone" +msgstr "Ângulo final" #: ../src/ui/dialog/polar-arrange-tab.cpp:48 -#, fuzzy msgctxt "Polar arrange tab" msgid "Anchor point:" -msgstr "Orientação da página:" +msgstr "Ponto âncora:" #: ../src/ui/dialog/polar-arrange-tab.cpp:52 -#, fuzzy msgctxt "Polar arrange tab" msgid "Object's bounding box:" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Caixa limitadora do objeto:" #: ../src/ui/dialog/polar-arrange-tab.cpp:59 -#, fuzzy msgctxt "Polar arrange tab" msgid "Object's rotational center" -msgstr "Objecto para padrão" +msgstr "Centro de rotação do objeto" #: ../src/ui/dialog/polar-arrange-tab.cpp:64 -#, fuzzy msgctxt "Polar arrange tab" msgid "Arrange on:" -msgstr "Ângulo" +msgstr "Organizar em:" #: ../src/ui/dialog/polar-arrange-tab.cpp:68 -#, fuzzy msgctxt "Polar arrange tab" msgid "First selected circle/ellipse/arc" -msgstr "Criar círculos, elipses e arcos" +msgstr "O primeiro círculo/elipse/arco selecionado" #: ../src/ui/dialog/polar-arrange-tab.cpp:73 -#, fuzzy msgctxt "Polar arrange tab" msgid "Last selected circle/ellipse/arc" -msgstr "Última cor selecionada" +msgstr "O último círculo/elipse/arco selecionado" #: ../src/ui/dialog/polar-arrange-tab.cpp:78 -#, fuzzy msgctxt "Polar arrange tab" msgid "Parameterized:" -msgstr "Parâmetros" +msgstr "Parameterizado:" #: ../src/ui/dialog/polar-arrange-tab.cpp:83 -#, fuzzy msgctxt "Polar arrange tab" msgid "Center X/Y:" -msgstr "Centralizar" +msgstr "Centro X/Y:" #: ../src/ui/dialog/polar-arrange-tab.cpp:105 -#, fuzzy msgctxt "Polar arrange tab" msgid "Radius X/Y:" -msgstr "Raio" +msgstr "Raio X/Y:" #: ../src/ui/dialog/polar-arrange-tab.cpp:127 -#, fuzzy msgid "Angle X/Y:" -msgstr "Ângulo X:" +msgstr "Ângulo X/Y:" #: ../src/ui/dialog/polar-arrange-tab.cpp:150 -#, fuzzy msgid "Rotate objects" -msgstr "Girar nós" +msgstr "Rodar objetos" #: ../src/ui/dialog/polar-arrange-tab.cpp:336 msgid "Couldn't find an ellipse in selection" -msgstr "" +msgstr "Não foi encontrada nenhuma elipse na seleção" #: ../src/ui/dialog/polar-arrange-tab.cpp:399 -#, fuzzy msgid "Arrange on ellipse" -msgstr "Criar elipse" +msgstr "Dispôr em elipse" #: ../src/ui/dialog/print.cpp:111 msgid "Could not open temporary PNG for bitmap printing" msgstr "" +"Não foi possível abrir o PNG temporário para a impressão da imagem bitmap" #: ../src/ui/dialog/print.cpp:138 -#, fuzzy msgid "Could not set up Document" -msgstr "Não foi possível definir a origem da impressão: %s" +msgstr "Não foi possível configurar o Documento" #: ../src/ui/dialog/print.cpp:142 msgid "Failed to set CairoRenderContext" -msgstr "" +msgstr "Não foi possível definir o CairoRenderContext" #. set up dialog title, based on document name #: ../src/ui/dialog/print.cpp:180 -#, fuzzy msgid "SVG Document" -msgstr "Desenho SVG" +msgstr "Documento SVG" #: ../src/ui/dialog/print.cpp:181 msgid "Print" @@ -23136,426 +21809,369 @@ msgstr "Imprimir" #: ../src/ui/dialog/spellcheck.cpp:73 msgid "_Accept" -msgstr "" +msgstr "_Alterar" #: ../src/ui/dialog/spellcheck.cpp:74 -#, fuzzy msgid "_Ignore once" -msgstr "Ignorar" +msgstr "Ignorar uma _vez" #: ../src/ui/dialog/spellcheck.cpp:75 -#, fuzzy msgid "_Ignore" -msgstr "Ignorar" +msgstr "_Ignorar todas" #: ../src/ui/dialog/spellcheck.cpp:76 msgid "A_dd" -msgstr "" +msgstr "A_dicionar" #: ../src/ui/dialog/spellcheck.cpp:78 -#, fuzzy msgid "_Stop" -msgstr "_Aplicar" +msgstr "_Parar" #: ../src/ui/dialog/spellcheck.cpp:79 -#, fuzzy msgid "_Start" -msgstr "Início" +msgstr "_Começar" #: ../src/ui/dialog/spellcheck.cpp:109 -#, fuzzy msgid "Suggestions:" -msgstr "Resolução:" +msgstr "Sugestões:" #: ../src/ui/dialog/spellcheck.cpp:124 msgid "Accept the chosen suggestion" -msgstr "" +msgstr "Aceitar a sugestão escolhida e corrigir a palavra" #: ../src/ui/dialog/spellcheck.cpp:125 msgid "Ignore this word only once" -msgstr "" +msgstr "Ignorar esta palavra apenas desta vez" #: ../src/ui/dialog/spellcheck.cpp:126 msgid "Ignore this word in this session" -msgstr "" +msgstr "Ignorar esta palavra durante esta sessão" #: ../src/ui/dialog/spellcheck.cpp:127 msgid "Add this word to the chosen dictionary" -msgstr "" +msgstr "Adicionar esta palavra ao dicionário escolhido" #: ../src/ui/dialog/spellcheck.cpp:141 msgid "Stop the check" -msgstr "" +msgstr "Parar verificação ortográfica" #: ../src/ui/dialog/spellcheck.cpp:142 msgid "Start the check" -msgstr "" +msgstr "Iniciar verificação ortográfica" #: ../src/ui/dialog/spellcheck.cpp:460 #, c-format msgid "Finished, %d words added to dictionary" -msgstr "" +msgstr "Terminado, %d palavras adicionadas ao dicionário" #: ../src/ui/dialog/spellcheck.cpp:462 msgid "Finished, nothing suspicious found" -msgstr "" +msgstr "Terminado, não foi encontrado nada suspeito" #: ../src/ui/dialog/spellcheck.cpp:578 #, c-format msgid "Not in dictionary (%s): %s" -msgstr "" +msgstr "Não encontrado no dicionário (%s): %s" #: ../src/ui/dialog/spellcheck.cpp:727 msgid "Checking..." -msgstr "" +msgstr "A verificar..." #: ../src/ui/dialog/spellcheck.cpp:796 msgid "Fix spelling" -msgstr "" +msgstr "Corrigir ortografia" #: ../src/ui/dialog/svg-fonts-dialog.cpp:139 -#, fuzzy msgid "Set SVG Font attribute" -msgstr "Ajustar atributo" +msgstr "Definir atributo da Fonte SVG" #: ../src/ui/dialog/svg-fonts-dialog.cpp:197 -#, fuzzy msgid "Adjust kerning value" -msgstr "Ajustar matiz" +msgstr "Ajustar valor de espaço entre-letras" #: ../src/ui/dialog/svg-fonts-dialog.cpp:387 -#, fuzzy msgid "Family Name:" -msgstr "Renomear ficheiro" +msgstr "Nome da Família:" #: ../src/ui/dialog/svg-fonts-dialog.cpp:397 -#, fuzzy msgid "Set width:" -msgstr "Escala de largura" +msgstr "Definir largura:" #: ../src/ui/dialog/svg-fonts-dialog.cpp:456 -#, fuzzy msgid "glyph" -msgstr "Alfa" +msgstr "caractere" #. SPGlyph* glyph = #: ../src/ui/dialog/svg-fonts-dialog.cpp:488 -#, fuzzy msgid "Add glyph" -msgstr "Adicionar camada" +msgstr "Adicionar caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:522 #: ../src/ui/dialog/svg-fonts-dialog.cpp:564 -#, fuzzy msgid "Select a path to define the curves of a glyph" -msgstr "Seleccione algum caminho para comprimir/expandir" +msgstr "Selecionar um caminho para definir as curvas do caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:530 #: ../src/ui/dialog/svg-fonts-dialog.cpp:572 -#, fuzzy msgid "The selected object does not have a path description." -msgstr "" -"O objecto seleccionado não é um caminho. Não é possível comprimir/" -"expandir" +msgstr "O objeto selecionado não tem uma descrição do caminho." #: ../src/ui/dialog/svg-fonts-dialog.cpp:537 msgid "No glyph selected in the SVGFonts dialog." -msgstr "" +msgstr "Nenhum caractere selecionado na janela Fontes SVG." #: ../src/ui/dialog/svg-fonts-dialog.cpp:548 #: ../src/ui/dialog/svg-fonts-dialog.cpp:587 msgid "Set glyph curves" -msgstr "" +msgstr "Definir curvas do caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:607 msgid "Reset missing-glyph" -msgstr "" +msgstr "Repor caractere em falta" #: ../src/ui/dialog/svg-fonts-dialog.cpp:623 msgid "Edit glyph name" -msgstr "" +msgstr "Editar nome do caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:637 msgid "Set glyph unicode" -msgstr "" +msgstr "Definir unicode do caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:649 -#, fuzzy msgid "Remove font" -msgstr "Remover filtro" +msgstr "Remover fonte" #: ../src/ui/dialog/svg-fonts-dialog.cpp:666 -#, fuzzy msgid "Remove glyph" -msgstr "Remover preenchimento" +msgstr "Remover caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:683 -#, fuzzy msgid "Remove kerning pair" -msgstr "Remover guias existentes" +msgstr "Remover par de entre-letras" #: ../src/ui/dialog/svg-fonts-dialog.cpp:693 msgid "Missing Glyph:" -msgstr "" +msgstr "Caractere em Falta:" #: ../src/ui/dialog/svg-fonts-dialog.cpp:697 -#, fuzzy msgid "From selection..." -msgstr "Obter da selecção" +msgstr "Da seleção..." #: ../src/ui/dialog/svg-fonts-dialog.cpp:710 -#, fuzzy msgid "Glyph name" -msgstr "Nome da camada:" +msgstr "Nome do caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:711 -#, fuzzy msgid "Matching string" -msgstr " frase: " +msgstr "Expressão correspondente" #: ../src/ui/dialog/svg-fonts-dialog.cpp:714 -#, fuzzy msgid "Add Glyph" -msgstr "Adicionar camada" +msgstr "Adicionar Caractere" #: ../src/ui/dialog/svg-fonts-dialog.cpp:721 -#, fuzzy msgid "Get curves from selection..." -msgstr "Remover máscara da selecção" +msgstr "Obter curvas da seleção..." #: ../src/ui/dialog/svg-fonts-dialog.cpp:770 msgid "Add kerning pair" -msgstr "" +msgstr "Adicionar par de entre-letras" #. Kerning Setup: #: ../src/ui/dialog/svg-fonts-dialog.cpp:778 -#, fuzzy msgid "Kerning Setup" -msgstr "Aumentar Kern" +msgstr "Configuração de Entre-Letras" #: ../src/ui/dialog/svg-fonts-dialog.cpp:780 msgid "1st Glyph:" -msgstr "" +msgstr "1º Caractere:" #: ../src/ui/dialog/svg-fonts-dialog.cpp:782 msgid "2nd Glyph:" -msgstr "" +msgstr "2º Caractere:" #: ../src/ui/dialog/svg-fonts-dialog.cpp:785 -#, fuzzy msgid "Add pair" -msgstr "Adicionar camada" +msgstr "Adicionar par" #: ../src/ui/dialog/svg-fonts-dialog.cpp:797 -#, fuzzy msgid "First Unicode range" -msgstr "Inserir caractere Unicode" +msgstr "Primeiro intervalo Unicode" #: ../src/ui/dialog/svg-fonts-dialog.cpp:798 msgid "Second Unicode range" -msgstr "" +msgstr "Segundo intervalo Unicode" #: ../src/ui/dialog/svg-fonts-dialog.cpp:805 -#, fuzzy msgid "Kerning value:" -msgstr "Limpar os valores" +msgstr "Valor de entre-letras:" #: ../src/ui/dialog/svg-fonts-dialog.cpp:863 -#, fuzzy msgid "Set font family" -msgstr "Família da fonte" +msgstr "Definir família da fonte" #: ../src/ui/dialog/svg-fonts-dialog.cpp:872 -#, fuzzy msgid "font" -msgstr "Fonte" +msgstr "fonte" #. select_font(font); #: ../src/ui/dialog/svg-fonts-dialog.cpp:887 -#, fuzzy msgid "Add font" -msgstr "Adicionar filtro" +msgstr "Adicionar fonte" #: ../src/ui/dialog/svg-fonts-dialog.cpp:913 ../src/ui/dialog/text-edit.cpp:69 -#, fuzzy msgid "_Font" -msgstr "Fonte" +msgstr "_Fonte" #: ../src/ui/dialog/svg-fonts-dialog.cpp:921 -#, fuzzy msgid "_Global Settings" -msgstr "Configurações da página" +msgstr "Definições _Globais" #: ../src/ui/dialog/svg-fonts-dialog.cpp:922 msgid "_Glyphs" -msgstr "" +msgstr "_Caracteres" #: ../src/ui/dialog/svg-fonts-dialog.cpp:923 -#, fuzzy msgid "_Kerning" -msgstr "_Desenho" +msgstr "_Entre-letras" #: ../src/ui/dialog/svg-fonts-dialog.cpp:930 #: ../src/ui/dialog/svg-fonts-dialog.cpp:931 -#, fuzzy msgid "Sample Text" -msgstr "Ampliar" +msgstr "Texto de Exemplo" #: ../src/ui/dialog/svg-fonts-dialog.cpp:935 -#, fuzzy msgid "Preview Text:" -msgstr "Pré-visualizar" +msgstr "Pré-visualização do Texto:" #: ../src/ui/dialog/swatches.cpp:202 ../src/ui/tools/gradient-tool.cpp:360 #: ../src/ui/tools/gradient-tool.cpp:458 ../src/widgets/gradient-vector.cpp:801 msgid "Add gradient stop" -msgstr "Adicionar parada do degradê" +msgstr "Adicionar paragem no gradiente" #. TRANSLATORS: An item in context menu on a colour in the swatches #: ../src/ui/dialog/swatches.cpp:257 -#, fuzzy msgid "Set fill" -msgstr "Desfazer preenchimento" +msgstr "Aplicar no preenchimento" #. TRANSLATORS: An item in context menu on a colour in the swatches #: ../src/ui/dialog/swatches.cpp:265 -#, fuzzy msgid "Set stroke" -msgstr "Redefinir o traço" +msgstr "Aplicar no traço" #: ../src/ui/dialog/swatches.cpp:286 msgid "Edit..." msgstr "Editar..." #: ../src/ui/dialog/swatches.cpp:298 -#, fuzzy msgid "Convert" -msgstr "Capa" +msgstr "Converter" #: ../src/ui/dialog/swatches.cpp:543 #, c-format msgid "Palettes directory (%s) is unavailable." -msgstr "Diretório de paletas (%s) não está disponível." +msgstr "A pasta de paletas (%s) não está disponível." #. ******************* Symbol Sets ************************ #: ../src/ui/dialog/symbols.cpp:135 msgid "Symbol set: " -msgstr "" +msgstr "Conjunto de símbolos: " #. Fill in later #: ../src/ui/dialog/symbols.cpp:144 ../src/ui/dialog/symbols.cpp:145 -#, fuzzy msgid "Current Document" -msgstr "Imprimir documento" +msgstr "Documento Atual" #: ../src/ui/dialog/symbols.cpp:212 -#, fuzzy msgid "Add Symbol from the current document." -msgstr "Baixar a camada actual" +msgstr "Adicionar Símbolo do documento atual." #: ../src/ui/dialog/symbols.cpp:221 -#, fuzzy msgid "Remove Symbol from the current document." -msgstr "Editar as paradas do degradê" +msgstr "Remover Símbolo do documento atual." #: ../src/ui/dialog/symbols.cpp:235 -#, fuzzy msgid "Display more icons in row." -msgstr "_Modo de visão" +msgstr "Mostrar mais ícones por cada linha." #: ../src/ui/dialog/symbols.cpp:244 -#, fuzzy msgid "Display fewer icons in row." -msgstr "_Modo de visão" +msgstr "Mostrar menos ícones por cada linha." #: ../src/ui/dialog/symbols.cpp:254 msgid "Toggle 'fit' symbols in icon space." -msgstr "" +msgstr "Mostrar símbolos encaixados no espaço do ícone." #: ../src/ui/dialog/symbols.cpp:266 msgid "Make symbols smaller by zooming out." -msgstr "" +msgstr "Reduzir tamanho dos símbolos." #: ../src/ui/dialog/symbols.cpp:276 msgid "Make symbols bigger by zooming in." -msgstr "" +msgstr "Aumentar tamanho dos símbolos." #: ../src/ui/dialog/symbols.cpp:637 -#, fuzzy msgid "Unnamed Symbols" -msgstr "Ajustar a cor escolhida" +msgstr "Símbolos sem Nome" #: ../src/ui/dialog/tags.cpp:270 ../src/ui/dialog/tags.cpp:569 #: ../src/ui/dialog/tags.cpp:683 ../src/ui/dialog/tags.cpp:946 -#, fuzzy msgid "Remove from selection set" -msgstr "Remover máscara da selecção" +msgstr "Remover do conjunto de seleção" #: ../src/ui/dialog/tags.cpp:427 msgid "Items" -msgstr "" +msgstr "Itens" #: ../src/ui/dialog/tags.cpp:666 ../src/ui/dialog/tags.cpp:944 -#, fuzzy msgid "Add selection to set" -msgstr "Levantar a selecção para o topo" +msgstr "Adicionar seleção ao conjunto" #: ../src/ui/dialog/tags.cpp:824 -#, fuzzy msgid "Moved sets" -msgstr "Mover alça do degradê" +msgstr "Conjuntos movidos" #: ../src/ui/dialog/tags.cpp:1004 -#, fuzzy msgid "Add a new selection set" -msgstr "Mudar espaçamento do conector" +msgstr "Adicionar novo conjunto de seleção" #: ../src/ui/dialog/tags.cpp:1013 -#, fuzzy msgid "Remove Item/Set" -msgstr "Remover efeito de caminho" +msgstr "Remover Item/Conjunto" #: ../src/ui/dialog/template-widget.cpp:37 -#, fuzzy msgid "More info" -msgstr "Mais Luz" +msgstr "Mais informações" #: ../src/ui/dialog/template-widget.cpp:39 -#, fuzzy msgid "no template selected" -msgstr "Nenhum efeito seleccionado" +msgstr "nenhum modelo selecionado" #: ../src/ui/dialog/template-widget.cpp:131 -#, fuzzy msgid "Path: " -msgstr "Caminho" +msgstr "Caminho: " #: ../src/ui/dialog/template-widget.cpp:134 -#, fuzzy msgid "Description: " -msgstr "Descrição" +msgstr "Descrição: " #: ../src/ui/dialog/template-widget.cpp:136 -#, fuzzy msgid "Keywords: " -msgstr "Palavras chave" +msgstr "Palavras-chave: " #: ../src/ui/dialog/template-widget.cpp:143 msgid "By: " -msgstr "" +msgstr "Por: " #: ../src/ui/dialog/text-edit.cpp:72 -#, fuzzy msgid "_Variants" -msgstr "Saturação" +msgstr "_Variantes" #: ../src/ui/dialog/text-edit.cpp:73 -#, fuzzy msgid "Set as _default" -msgstr "Ajustar como padrão" +msgstr "_Definir como padrão" #: ../src/ui/dialog/text-edit.cpp:87 -#, fuzzy msgid "AaBbCcIiPpQq12369$€¢?.;/()" msgstr "AaBbCcIiPpQq12369$€¢?.;/()" @@ -23567,9 +22183,8 @@ msgstr "Alinhar à esquerda" #: ../src/ui/dialog/text-edit.cpp:98 ../src/widgets/text-toolbar.cpp:1688 #: ../src/widgets/text-toolbar.cpp:1689 -#, fuzzy msgid "Align center" -msgstr "Alinhar à esquerda" +msgstr "Alinhar ao centro" #: ../src/ui/dialog/text-edit.cpp:99 ../src/widgets/text-toolbar.cpp:1696 #: ../src/widgets/text-toolbar.cpp:1697 @@ -23577,9 +22192,8 @@ msgid "Align right" msgstr "Alinhar à direita" #: ../src/ui/dialog/text-edit.cpp:100 ../src/widgets/text-toolbar.cpp:1705 -#, fuzzy msgid "Justify (only flowed text)" -msgstr "Destacar texto fluido" +msgstr "Justificar (apenas texto fluido)" #. Direction buttons #: ../src/ui/dialog/text-edit.cpp:109 ../src/widgets/text-toolbar.cpp:1740 @@ -23591,14 +22205,12 @@ msgid "Vertical text" msgstr "Texto vertical" #: ../src/ui/dialog/text-edit.cpp:130 ../src/ui/dialog/text-edit.cpp:131 -#, fuzzy msgid "Spacing between baselines (percent of font size)" -msgstr "Espaçamento entre linhas" +msgstr "Espaçamento entre linhas base (percentagem do tamanho da fonte)" #: ../src/ui/dialog/text-edit.cpp:147 -#, fuzzy msgid "Text path offset" -msgstr "Ajustar a distância de compensação" +msgstr "Deslocamento do texto no caminho" #: ../src/ui/dialog/text-edit.cpp:612 ../src/ui/dialog/text-edit.cpp:699 #: ../src/ui/tools/text-tool.cpp:1446 @@ -23606,26 +22218,23 @@ msgid "Set text style" msgstr "Definir estilo do texto" #: ../src/ui/dialog/tile.cpp:36 -#, fuzzy msgctxt "Arrange dialog" msgid "Rectangular grid" msgstr "Grelha retangular" #: ../src/ui/dialog/tile.cpp:37 -#, fuzzy msgctxt "Arrange dialog" msgid "Polar Coordinates" -msgstr "Coordenadas do cursor" +msgstr "Coordenadas Polares" #: ../src/ui/dialog/tile.cpp:40 -#, fuzzy msgctxt "Arrange dialog" msgid "_Arrange" -msgstr "Ângulo" +msgstr "_Organizar" #: ../src/ui/dialog/tile.cpp:42 msgid "Arrange selected objects" -msgstr "Organizar os objectos seleccionados" +msgstr "Organizar os objetos selecionados" #. #### begin left panel #. ### begin notebook @@ -23633,70 +22242,64 @@ msgstr "Organizar os objectos seleccionados" #. # begin single scan #. brightness #: ../src/ui/dialog/tracedialog.cpp:508 -#, fuzzy msgid "_Brightness cutoff" -msgstr "Intensidade do Brilho" +msgstr "Nível de _brilho" #: ../src/ui/dialog/tracedialog.cpp:512 msgid "Trace by a given brightness level" -msgstr "Vectorizar pela intensidade do nível de brilho" +msgstr "Vetorizar pelo nível de brilho" #: ../src/ui/dialog/tracedialog.cpp:519 msgid "Brightness cutoff for black/white" -msgstr "Intensidade do Brilho para preto/branco" +msgstr "Corte no brilho para preto/branco" #: ../src/ui/dialog/tracedialog.cpp:529 msgid "Single scan: creates a path" -msgstr "Busca única: criar caminhos" +msgstr "Uma passagem: cria um caminho" #. canny edge detection #. TRANSLATORS: "Canny" is the name of the inventor of this edge detection method #: ../src/ui/dialog/tracedialog.cpp:534 -#, fuzzy msgid "_Edge detection" -msgstr "Detecção de bordas" +msgstr "_Deteção de bordas" #: ../src/ui/dialog/tracedialog.cpp:538 msgid "Trace with optimal edge detection by J. Canny's algorithm" -msgstr "Vectorizar com o algoritmo de detecção de borda de J. Canny's" +msgstr "Vetorizar com o algoritmo de deteção de borda de J. Canny" #: ../src/ui/dialog/tracedialog.cpp:556 msgid "Brightness cutoff for adjacent pixels (determines edge thickness)" msgstr "" -"Intensidade do Brilho para reduzir em pixels (determina a espessura da borda)" +"Corte no brilho para píxeis adjacentes (determina a espessura da borda)" #: ../src/ui/dialog/tracedialog.cpp:559 -#, fuzzy msgid "T_hreshold:" -msgstr "Limiar:" +msgstr "_Limiar:" #. quantization #. TRANSLATORS: Color Quantization: the process of reducing the number #. of colors in an image by selecting an optimized set of representative #. colors and then re-applying this reduced set to the original image. #: ../src/ui/dialog/tracedialog.cpp:571 -#, fuzzy msgid "Color _quantization" -msgstr "Quantidade de Cores" +msgstr "Nú_mero de cores" #: ../src/ui/dialog/tracedialog.cpp:575 msgid "Trace along the boundaries of reduced colors" -msgstr "Vectorizar pelo limite da quantidade de cores especificada" +msgstr "Vetorizar ao longo dos limites de número reduzido de cores" #: ../src/ui/dialog/tracedialog.cpp:583 msgid "The number of reduced colors" msgstr "Número de cores reduzidas" #: ../src/ui/dialog/tracedialog.cpp:586 -#, fuzzy msgid "_Colors:" -msgstr "Cores:" +msgstr "_Cores:" #. swap black and white #: ../src/ui/dialog/tracedialog.cpp:594 -#, fuzzy msgid "_Invert image" -msgstr "Inverter imagem" +msgstr "_Inverter imagem" #: ../src/ui/dialog/tracedialog.cpp:599 msgid "Invert black and white regions" @@ -23705,110 +22308,100 @@ msgstr "Inverter regiões pretas e brancas para traçados simples" #. # end single scan #. # begin multiple scan #: ../src/ui/dialog/tracedialog.cpp:609 -#, fuzzy msgid "B_rightness steps" -msgstr "Níveis do brilho" +msgstr "_Níveis do brilho" #: ../src/ui/dialog/tracedialog.cpp:613 msgid "Trace the given number of brightness levels" -msgstr "Vectorizar o número dado de níveis do brilho" +msgstr "Vetorizar o número fornecido de níveis de brilho" #: ../src/ui/dialog/tracedialog.cpp:621 -#, fuzzy msgid "Sc_ans:" -msgstr "Níveis:" +msgstr "_Passagens:" #: ../src/ui/dialog/tracedialog.cpp:625 msgid "The desired number of scans" -msgstr "Quantidade de níveis desejado" +msgstr "Número de passos pretendido" #: ../src/ui/dialog/tracedialog.cpp:630 -#, fuzzy msgid "Co_lors" -msgstr "Co_r" +msgstr "_Cores" #: ../src/ui/dialog/tracedialog.cpp:634 msgid "Trace the given number of reduced colors" -msgstr "Vectorizar o número dado de cores reduzidas" +msgstr "Vetorizar o número fornecido de cores reduzidas" #: ../src/ui/dialog/tracedialog.cpp:639 -#, fuzzy msgid "_Grays" -msgstr "Tons de cinza" +msgstr "Tons de _cinza" #: ../src/ui/dialog/tracedialog.cpp:643 msgid "Same as Colors, but the result is converted to grayscale" -msgstr "Cores iguais, mas converter o resultado para escala de cinza" +msgstr "Como o de Cores, mas converte o resultado numa escala de cinzas" #. TRANSLATORS: "Smooth" is a verb here #: ../src/ui/dialog/tracedialog.cpp:649 -#, fuzzy msgid "S_mooth" -msgstr "Suavizar" +msgstr "_Suavizar" #: ../src/ui/dialog/tracedialog.cpp:653 msgid "Apply Gaussian blur to the bitmap before tracing" -msgstr "Aplicar desfoque gaussiano ao bitmap antes de traçá-lo" +msgstr "Aplicar desfocagem Gaussiana na imagem bitmap antes de vetorizar" +# Mais curto "Empilhar" para não ocupar tanto espaço e é suficiente #. TRANSLATORS: "Stack" is a verb here #: ../src/ui/dialog/tracedialog.cpp:657 -#, fuzzy msgid "Stac_k scans" -msgstr "Fechar brechas" +msgstr "_Empilhar" #: ../src/ui/dialog/tracedialog.cpp:661 msgid "" "Stack scans on top of one another (no gaps) instead of tiling (usually with " "gaps)" msgstr "" -"Empilhe os traços uma sobre a outra (sem brechas) ao invés de mantê-las " -"(usualmente com aberturas)" +"Empilhar passagens umas sobre as outras (sem aberturas) ao invés de lado a " +"lado (normalmente com aberturas)" #: ../src/ui/dialog/tracedialog.cpp:665 -#, fuzzy msgid "Remo_ve background" -msgstr "Remover fundo" +msgstr "Remo_ver fundo" #. TRANSLATORS: "Layer" refers to one of the stacked paths in the multiscan #: ../src/ui/dialog/tracedialog.cpp:670 msgid "Remove bottom (background) layer when done" -msgstr "Remova o plano de fundo (camada) quando acabar" +msgstr "Remover a camada de fundo ao terminar" #: ../src/ui/dialog/tracedialog.cpp:675 msgid "Multiple scans: creates a group of paths" -msgstr "Múltiplas buscas: criar um grupo de caminhos" +msgstr "Várias passagens: cria grupos de caminhos" #. # end multiple scan #. ## end mode page #: ../src/ui/dialog/tracedialog.cpp:684 -#, fuzzy msgid "_Mode" -msgstr "Modo" +msgstr "_Modo" #. ## begin option page #. # potrace parameters #: ../src/ui/dialog/tracedialog.cpp:690 -#, fuzzy msgid "Suppress _speckles" -msgstr "Suprimir pequenos pontos" +msgstr "Eliminar _pontos pequenos" #: ../src/ui/dialog/tracedialog.cpp:692 msgid "Ignore small spots (speckles) in the bitmap" -msgstr "Ignorar os pequenos pontos do bitmap" +msgstr "Ignorar pontos pequenos na imagem bitmap" #: ../src/ui/dialog/tracedialog.cpp:700 msgid "Speckles of up to this many pixels will be suppressed" -msgstr "Pequenos pontos de muitos pixels serão suprimidos" +msgstr "Os pontos pequenos até esta quantidade serão eliminados" #: ../src/ui/dialog/tracedialog.cpp:703 -#, fuzzy msgid "S_ize:" -msgstr "Tamanho:" +msgstr "_Tamanho:" #: ../src/ui/dialog/tracedialog.cpp:708 -#, fuzzy msgid "Smooth _corners" -msgstr "Suavizar cantos" +msgstr "Suavizar _cantos" #: ../src/ui/dialog/tracedialog.cpp:710 msgid "Smooth out sharp corners of the trace" @@ -23819,45 +22412,45 @@ msgid "Increase this to smooth corners more" msgstr "Aumentar isso para suavizar mais os cantos" #: ../src/ui/dialog/tracedialog.cpp:726 -#, fuzzy msgid "Optimize p_aths" -msgstr "Otimize as formas" +msgstr "Otimizar c_aminhos" #: ../src/ui/dialog/tracedialog.cpp:729 msgid "Try to optimize paths by joining adjacent Bezier curve segments" msgstr "" -"Tente otimizar as formas unindo os segmentos adjacentes através de curvas " -"Bezier" +"Tentar otimizar os caminhos unindo os segmentos de curvas Bézier adjacentes" #: ../src/ui/dialog/tracedialog.cpp:737 msgid "" "Increase this to reduce the number of nodes in the trace by more aggressive " "optimization" msgstr "" -"Aumente isto pra reduzir o número de nós no traço através de uma otimização " -"mais agressiva" +"Aumentar isto para reduzir o número de nós na vetorização através de uma " +"otimização mais agressiva" #: ../src/ui/dialog/tracedialog.cpp:739 -#, fuzzy msgid "To_lerance:" -msgstr "Tolerância:" +msgstr "To_lerância:" #. ## end option page #: ../src/ui/dialog/tracedialog.cpp:753 -#, fuzzy msgid "O_ptions" -msgstr "Opções" +msgstr "O_pções" #. ### credits #: ../src/ui/dialog/tracedialog.cpp:757 -#, fuzzy msgid "" "Inkscape bitmap tracing\n" "is based on Potrace,\n" "created by Peter Selinger\n" "\n" "http://potrace.sourceforge.net" -msgstr "Agradecimentos a Peter Selinger, http://potrace.sourceforge.net" +msgstr "" +"A vetorização de imagens bitmap\n" +"do Inkscape é baseado no Potrace,\n" +"criado por Peter Selinger\n" +"\n" +"http://potrace.sourceforge.net" #: ../src/ui/dialog/tracedialog.cpp:760 msgid "Credits" @@ -23866,40 +22459,36 @@ msgstr "Créditos" #. #### begin right panel #. ## SIOX #: ../src/ui/dialog/tracedialog.cpp:774 -#, fuzzy msgid "SIOX _foreground selection" -msgstr "SIOX sobre a selecção" +msgstr "Seleção do fundo SIOX" #: ../src/ui/dialog/tracedialog.cpp:777 msgid "Cover the area you want to select as the foreground" -msgstr "Cubra a área que deseja seleccionar como sendo o primeiro plano" +msgstr "Cobre a área que deseja selecionar como sendo o primeiro plano" #: ../src/ui/dialog/tracedialog.cpp:782 -#, fuzzy msgid "Live Preview" -msgstr "Pré-Visualizar Ao Vivo" +msgstr "Prever" #: ../src/ui/dialog/tracedialog.cpp:788 -#, fuzzy msgid "_Update" -msgstr "Actualizar" +msgstr "_Atualizar" #. I guess it's correct to call the "intermediate bitmap" a preview of the trace #: ../src/ui/dialog/tracedialog.cpp:796 msgid "" "Preview the intermediate bitmap with the current settings, without actual " "tracing" -msgstr "Pré-visualizar o resultado, sem vectorizar" +msgstr "Prever o resultado com a configuração atual, sem vetorizar" #: ../src/ui/dialog/tracedialog.cpp:800 msgid "Preview" -msgstr "Pré-visualizar" +msgstr "Prever" #: ../src/ui/dialog/transformation.cpp:69 #: ../src/ui/dialog/transformation.cpp:79 -#, fuzzy msgid "_Horizontal:" -msgstr "_Horizontal" +msgstr "_Horizontal:" #: ../src/ui/dialog/transformation.cpp:69 msgid "Horizontal displacement (relative) or position (absolute)" @@ -23907,49 +22496,45 @@ msgstr "Deslocamento horizontal (relativo) ou posição (absoluto)" #: ../src/ui/dialog/transformation.cpp:71 #: ../src/ui/dialog/transformation.cpp:81 -#, fuzzy msgid "_Vertical:" -msgstr "_Vertical" +msgstr "_Vertical:" #: ../src/ui/dialog/transformation.cpp:71 msgid "Vertical displacement (relative) or position (absolute)" msgstr "Deslocamento vertical (relativo) ou posição (absoluto)" #: ../src/ui/dialog/transformation.cpp:73 -#, fuzzy msgid "Horizontal size (absolute or percentage of current)" -msgstr "Aumento do tamanho horizontal (absoluto ou percentagem)" +msgstr "Tamanho horizontal (absoluto ou percentagem do atual)" #: ../src/ui/dialog/transformation.cpp:75 -#, fuzzy msgid "Vertical size (absolute or percentage of current)" -msgstr "Aumento do tamanho vertical (absoluto ou percentagem)" +msgstr "Tamanho vertical (absoluto ou percentagem do atual)" #: ../src/ui/dialog/transformation.cpp:77 -#, fuzzy msgid "A_ngle:" -msgstr "Ân_gulo" +msgstr "Â_ngulo:" #: ../src/ui/dialog/transformation.cpp:77 #: ../src/ui/dialog/transformation.cpp:1102 msgid "Rotation angle (positive = counterclockwise)" -msgstr "Ângulo de rotação (sentido positivo anti-horário)" +msgstr "Ângulo de rotação (positivo = anti-horário)" #: ../src/ui/dialog/transformation.cpp:79 msgid "" "Horizontal skew angle (positive = counterclockwise), or absolute " "displacement, or percentage displacement" msgstr "" -"Ângulo de enviesamento horizontal (positivo = anti-horário), ou deslocamento " -"absoluto, ou deslocamento percentual" +"Ângulo de inclinação horizontal (positivo = anti-horário), ou deslocamento " +"absoluto, ou deslocamento em percentagem" #: ../src/ui/dialog/transformation.cpp:81 msgid "" "Vertical skew angle (positive = counterclockwise), or absolute displacement, " "or percentage displacement" msgstr "" -"Ângulo de enviesamento vertical (positivo = anti-horário), ou deslocamento " -"absoluto, ou deslocamento percentual" +"Ângulo da inclinação vertical (positivo = anti-horário), ou deslocamento " +"absoluto, ou deslocamento em percentagem" #: ../src/ui/dialog/transformation.cpp:84 msgid "Transformation matrix element A" @@ -23977,56 +22562,55 @@ msgstr "Matriz de transformação do elemento F" #: ../src/ui/dialog/transformation.cpp:94 msgid "Rela_tive move" -msgstr "Movimento relativo" +msgstr "_Movimento relativo" #: ../src/ui/dialog/transformation.cpp:94 msgid "" "Add the specified relative displacement to the current position; otherwise, " "edit the current absolute position directly" msgstr "" -"Adicionar a especificação relativa do deslocamento à posição actual; se não, " -"editar a posição absoluta actual diretamente" +"Adicionar a especificação relativa do deslocamento à posição atual; se não, " +"editar a posição absoluta atual diretamente" #: ../src/ui/dialog/transformation.cpp:95 -#, fuzzy msgid "_Scale proportionally" -msgstr "Escala proporcional" +msgstr "_Dimensionar proporcionalmente" #: ../src/ui/dialog/transformation.cpp:95 msgid "Preserve the width/height ratio of the scaled objects" -msgstr "Preserve o relação largura/altura da escala dos objectos" +msgstr "Preservar a relação largura/altura dos objetos redimensionados" #: ../src/ui/dialog/transformation.cpp:96 msgid "Apply to each _object separately" -msgstr "Aplicar a cada _objecto separado" +msgstr "Aplicar a cada _objeto separadamente" #: ../src/ui/dialog/transformation.cpp:96 msgid "" "Apply the scale/rotate/skew to each selected object separately; otherwise, " "transform the selection as a whole" msgstr "" -"Aplicar o tamanho/rotação/enviesamento a cada objecto seleccionado separado; " -"se não, transformar a selecção ao todo " +"Aplicar a dimensão/rotação/inclinação a cada objeto selecionado " +"separadamente; caso contrário, transformar a seleção como um todo" #: ../src/ui/dialog/transformation.cpp:97 msgid "Edit c_urrent matrix" -msgstr "Editar matriz _actual" +msgstr "Editar matriz _atual" #: ../src/ui/dialog/transformation.cpp:97 msgid "" "Edit the current transform= matrix; otherwise, post-multiply transform= by " "this matrix" msgstr "" -"Editar a transformação actual= matriz; senão, transformação pós-" -"multiplicação= por esta matriz" +"Editar a transformação atual da matriz; senão, pós-multiplicar a " +"transformação atual por esta matriz" #: ../src/ui/dialog/transformation.cpp:110 msgid "_Scale" -msgstr "_Escala" +msgstr "_Dimensionar" #: ../src/ui/dialog/transformation.cpp:113 msgid "_Rotate" -msgstr "_Girar" +msgstr "_Rodar" #: ../src/ui/dialog/transformation.cpp:116 msgid "Ske_w" @@ -24038,21 +22622,19 @@ msgstr "Matri_z" #: ../src/ui/dialog/transformation.cpp:143 msgid "Reset the values on the current tab to defaults" -msgstr "Reinicie os valores da tabela actual para os valores padrão" +msgstr "Repor os valores padrão da tabela atual" #: ../src/ui/dialog/transformation.cpp:150 msgid "Apply transformation to selection" -msgstr "Aplicar transformação à selecção" +msgstr "Aplicar transformação à seleção" #: ../src/ui/dialog/transformation.cpp:326 -#, fuzzy msgid "Rotate in a counterclockwise direction" -msgstr "Girar no sentido anti-horário" +msgstr "Rodar no sentido anti-horário" #: ../src/ui/dialog/transformation.cpp:332 -#, fuzzy msgid "Rotate in a clockwise direction" -msgstr "Girar no sentido horário" +msgstr "Rodar no sentido horário" #: ../src/ui/dialog/transformation.cpp:905 #: ../src/ui/dialog/transformation.cpp:916 @@ -24062,20 +22644,19 @@ msgstr "Girar no sentido horário" #: ../src/ui/dialog/transformation.cpp:970 #: ../src/ui/dialog/transformation.cpp:994 msgid "Transform matrix is singular, not used." -msgstr "" +msgstr "A matriz de transformação é singular, não utilizada." #: ../src/ui/dialog/transformation.cpp:1010 msgid "Edit transformation matrix" msgstr "Editar matriz de transformação" #: ../src/ui/dialog/transformation.cpp:1109 -#, fuzzy msgid "Rotation angle (positive = clockwise)" -msgstr "Ângulo de rotação (sentido positivo anti-horário)" +msgstr "Ângulo de rotação (positivo = sentido horário)" #: ../src/ui/dialog/xml-tree.cpp:70 ../src/ui/dialog/xml-tree.cpp:126 msgid "New element node" -msgstr "Novo nó elementar" +msgstr "Novo nó de elemento" #: ../src/ui/dialog/xml-tree.cpp:71 ../src/ui/dialog/xml-tree.cpp:132 msgid "New text node" @@ -24083,7 +22664,7 @@ msgstr "Novo nó de texto" #: ../src/ui/dialog/xml-tree.cpp:72 ../src/ui/dialog/xml-tree.cpp:146 msgid "nodeAsInXMLdialogTooltip|Delete node" -msgstr "" +msgstr "Eliminar nó" #: ../src/ui/dialog/xml-tree.cpp:73 ../src/ui/dialog/xml-tree.cpp:138 #: ../src/ui/dialog/xml-tree.cpp:985 @@ -24097,11 +22678,11 @@ msgstr "Eliminar atributo" #: ../src/ui/dialog/xml-tree.cpp:87 msgid "Set" -msgstr "Ajustar" +msgstr "Aplicar" #: ../src/ui/dialog/xml-tree.cpp:121 msgid "Drag to reorder nodes" -msgstr "Arraste para reordenar os nós" +msgstr "Arrastar para reordenar os nós" #: ../src/ui/dialog/xml-tree.cpp:154 ../src/ui/dialog/xml-tree.cpp:155 #: ../src/ui/dialog/xml-tree.cpp:1143 @@ -24116,7 +22697,7 @@ msgstr "Indentar nó" #: ../src/ui/dialog/xml-tree.cpp:168 ../src/ui/dialog/xml-tree.cpp:169 #: ../src/ui/dialog/xml-tree.cpp:1072 msgid "Raise node" -msgstr "Levantar nó" +msgstr "Subir nó" #: ../src/ui/dialog/xml-tree.cpp:175 ../src/ui/dialog/xml-tree.cpp:176 #: ../src/ui/dialog/xml-tree.cpp:1090 @@ -24133,11 +22714,11 @@ msgstr "Valor do atributo" #: ../src/ui/dialog/xml-tree.cpp:319 msgid "Click to select nodes, drag to rearrange." -msgstr "Clique para selecionar nós, arraste para rearranjar." +msgstr "Clicar para selecionar nós, arrastar para organizar." #: ../src/ui/dialog/xml-tree.cpp:330 msgid "Click attribute to edit." -msgstr "Clique sobre o atributo para editá-lo." +msgstr "Clicar sobre o atributo para editá-lo." #: ../src/ui/dialog/xml-tree.cpp:334 #, c-format @@ -24145,12 +22726,11 @@ msgid "" "Attribute %s selected. Press Ctrl+Enter when done editing to " "commit changes." msgstr "" -"Atributo %s seleccionado. Pressione Ctrl+Enter ao terminar a " -"edição para aplicar as mudanças." +"Atributo %s selecionado. Ctrl+Enter para aplicar as alterações." #: ../src/ui/dialog/xml-tree.cpp:574 msgid "Drag XML subtree" -msgstr "Arrastar subárvore XML" +msgstr "Arrastar sub-árvore XML" #: ../src/ui/dialog/xml-tree.cpp:876 msgid "New element node..." @@ -24162,7 +22742,7 @@ msgstr "Cancelar" #: ../src/ui/dialog/xml-tree.cpp:951 msgid "Create new element node" -msgstr "Criar novo elemento de nó" +msgstr "Criar novo nó de elemento" #: ../src/ui/dialog/xml-tree.cpp:967 msgid "Create new text node" @@ -24170,42 +22750,38 @@ msgstr "Criar novo nó de texto" #: ../src/ui/dialog/xml-tree.cpp:1002 msgid "nodeAsInXMLinHistoryDialog|Delete node" -msgstr "" +msgstr "Eliminar nó" #: ../src/ui/dialog/xml-tree.cpp:1046 msgid "Change attribute" -msgstr "Ajustar atributo" +msgstr "Alterar atributo" #: ../src/ui/interface.cpp:763 -#, fuzzy msgctxt "Interface setup" msgid "Default" -msgstr "Padrão" +msgstr "Disposição da Interface Padrão" #: ../src/ui/interface.cpp:763 -#, fuzzy msgid "Default interface setup" -msgstr "Padrões" +msgstr "Configuração padrão da interface" #: ../src/ui/interface.cpp:764 -#, fuzzy msgctxt "Interface setup" msgid "Custom" -msgstr "_Personalizado" +msgstr "Disposição da Interface Personalizada" #: ../src/ui/interface.cpp:764 msgid "Setup for custom task" -msgstr "" +msgstr "Configuração para tarefa personalizada" #: ../src/ui/interface.cpp:765 -#, fuzzy msgctxt "Interface setup" msgid "Wide" -msgstr "_Ocultar" +msgstr "Disposição da Interface em Ecrãs Largos" #: ../src/ui/interface.cpp:765 msgid "Setup for widescreen work" -msgstr "" +msgstr "Configuração para ecrâs panorâmicos" #: ../src/ui/interface.cpp:875 #, c-format @@ -24214,7 +22790,7 @@ msgstr "Verbo \"%s\" Desconhecido" #: ../src/ui/interface.cpp:910 msgid "Open _Recent" -msgstr "Abrir _Recentes" +msgstr "A_brir Recentes" #: ../src/ui/interface.cpp:1018 ../src/ui/interface.cpp:1104 #: ../src/ui/interface.cpp:1207 ../src/ui/widget/selected-style.cpp:543 @@ -24223,24 +22799,23 @@ msgstr "Soltar cor" #: ../src/ui/interface.cpp:1057 ../src/ui/interface.cpp:1167 msgid "Drop color on gradient" -msgstr "Soltar cor no degradê" +msgstr "Soltar cor no gradiente" #: ../src/ui/interface.cpp:1220 msgid "Could not parse SVG data" -msgstr "Não foi possível interpretar os dados do SVG" +msgstr "Não foi possível processar os dados do SVG" #: ../src/ui/interface.cpp:1259 msgid "Drop SVG" msgstr "Soltar SVG" #: ../src/ui/interface.cpp:1272 -#, fuzzy msgid "Drop Symbol" -msgstr "Soltar cor" +msgstr "Soltar Símbolo" #: ../src/ui/interface.cpp:1303 msgid "Drop bitmap image" -msgstr "Soltar imagem Bitmap" +msgstr "Soltar imagem bitmap" #: ../src/ui/interface.cpp:1395 #, c-format @@ -24250,10 +22825,11 @@ msgid "" "\n" "The file already exists in \"%s\". Replacing it will overwrite its contents." msgstr "" -"Um ficheiro de nome \"%s\" já existe. " -"Deseja substituí-lo?\n" +"Já existe um ficheiro com o nome \"%s" +"\". Quer substituí-lo?\n" "\n" -"O ficheiro já existe em \"%s\". Substituí-lo irá sobrescrever o seu conteudo." +"O ficheiro já existe em \"%s\". Substituí-lo irá gravar por cima do " +"existente." #: ../src/ui/interface.cpp:1402 ../share/extensions/web-set-att.inx.h:21 #: ../share/extensions/web-transmit-att.inx.h:19 @@ -24266,100 +22842,86 @@ msgstr "Ir para o pai" #. TRANSLATORS: #%1 is the id of the group e.g. , not a number. #: ../src/ui/interface.cpp:1514 -#, fuzzy msgid "Enter group #%1" -msgstr "Entrar grupo #%s" +msgstr "Introduzir grupo #%1" #. Pop selection out of group #: ../src/ui/interface.cpp:1528 -#, fuzzy msgid "_Pop selection out of group" -msgstr "A selecção não possui efeito de caminho aplicado." +msgstr "_Destacar seleção do grupo" #. Item dialog #: ../src/ui/interface.cpp:1656 ../src/verbs.cpp:2940 msgid "_Object Properties..." -msgstr "Propriedades do _Objecto" +msgstr "Propriedades do _Objeto..." #: ../src/ui/interface.cpp:1665 msgid "_Select This" msgstr "_Selecionar Isto" #: ../src/ui/interface.cpp:1676 -#, fuzzy msgid "Select Same" -msgstr "Selecionar página:" +msgstr "Selecionar Iguais" #. Select same fill and stroke #: ../src/ui/interface.cpp:1686 -#, fuzzy msgid "Fill and Stroke" -msgstr "_Preenchimento e Traço" +msgstr "Preenchimento e Traço" #. Select same fill color #: ../src/ui/interface.cpp:1693 -#, fuzzy msgid "Fill Color" -msgstr "Cor lisa" +msgstr "Cor do Preenchimento" #. Select same stroke color #: ../src/ui/interface.cpp:1700 -#, fuzzy msgid "Stroke Color" -msgstr "Definir cor do traço" +msgstr "Cor do Traço" #. Select same stroke style #: ../src/ui/interface.cpp:1707 -#, fuzzy msgid "Stroke Style" -msgstr "Estilo de traço" +msgstr "Estilo do Traço" #. Select same stroke style #: ../src/ui/interface.cpp:1714 -#, fuzzy msgid "Object type" -msgstr "Objecto" +msgstr "Tipo de objeto" #. Move to layer #: ../src/ui/interface.cpp:1721 -#, fuzzy msgid "_Move to layer ..." -msgstr "Baixar camada" +msgstr "_Mover para a camada..." #. Create link #: ../src/ui/interface.cpp:1731 -#, fuzzy msgid "Create _Link" -msgstr "_Criar Ligação" +msgstr "Criar _Ligação" #. Release mask #: ../src/ui/interface.cpp:1765 -#, fuzzy msgid "Release Mask" -msgstr "Reverter máscara" +msgstr "Retirar Máscara" #. SSet Clip Group #: ../src/ui/interface.cpp:1776 -#, fuzzy msgid "Create Clip G_roup" -msgstr "Criar Clo_ne" +msgstr "Criar G_rupo de Recorte" #. Set Clip #: ../src/ui/interface.cpp:1783 -#, fuzzy msgid "Set Cl_ip" -msgstr "Desfazer preenchimento" +msgstr "Apl_icar Recorte" #. Release Clip #: ../src/ui/interface.cpp:1794 -#, fuzzy msgid "Release C_lip" -msgstr "_Remover" +msgstr "_Retirar Recorte" #. Group #: ../src/ui/interface.cpp:1805 ../src/verbs.cpp:2561 msgid "_Group" -msgstr "A_grupar" +msgstr "_Agrupar" #: ../src/ui/interface.cpp:1876 msgid "Create link" @@ -24368,18 +22930,17 @@ msgstr "Criar ligação" #. Ungroup #: ../src/ui/interface.cpp:1911 ../src/verbs.cpp:2563 msgid "_Ungroup" -msgstr "Desagr_upar" +msgstr "_Desagrupar" #. Link dialog #: ../src/ui/interface.cpp:1941 -#, fuzzy msgid "Link _Properties..." -msgstr "_Propriedades da Ligação" +msgstr "_Propriedades da Ligação..." #. Select item #: ../src/ui/interface.cpp:1947 msgid "_Follow Link" -msgstr "Se_guir Ligação" +msgstr "_Seguir Ligação" #. Reset transformations #: ../src/ui/interface.cpp:1953 @@ -24387,44 +22948,39 @@ msgid "_Remove Link" msgstr "_Remover Ligação" #: ../src/ui/interface.cpp:1984 -#, fuzzy msgid "Remove link" -msgstr "_Remover Ligação" +msgstr "Remover ligação" #. Image properties #: ../src/ui/interface.cpp:1994 -#, fuzzy msgid "Image _Properties..." -msgstr "_Propriedades da Imagem" +msgstr "_Propriedades da Imagem..." #. Edit externally #: ../src/ui/interface.cpp:2000 -#, fuzzy msgid "Edit Externally..." -msgstr "Editar preenchimento..." +msgstr "Editar com Programa Externo..." #. Trace Bitmap #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize) #: ../src/ui/interface.cpp:2009 ../src/verbs.cpp:2628 msgid "_Trace Bitmap..." -msgstr "_Vectorizar Bitmap..." +msgstr "_Vetorizar Imagem Bitmap..." #. Trace Pixel Art #: ../src/ui/interface.cpp:2018 msgid "Trace Pixel Art" -msgstr "" +msgstr "Vetorizar Arte de Píxeis" #: ../src/ui/interface.cpp:2028 -#, fuzzy msgctxt "Context menu" msgid "Embed Image" -msgstr "Embutir imagens" +msgstr "Embutir Imagem" #: ../src/ui/interface.cpp:2039 -#, fuzzy msgctxt "Context menu" msgid "Extract Image..." -msgstr "Extrair Uma Imagem" +msgstr "Extrair Imagem..." #. Item dialog #. Fill and Stroke dialog @@ -24441,14 +22997,14 @@ msgstr "_Texto e Fonte..." #. Spellcheck dialog #: ../src/ui/interface.cpp:2215 ../src/verbs.cpp:2930 msgid "Check Spellin_g..." -msgstr "" +msgstr "Verificar Orto_grafia..." #: ../src/ui/object-edit.cpp:450 msgid "" "Adjust the horizontal rounding radius; with Ctrl to make the " "vertical radius the same" msgstr "" -"Ajustar o raio de arredondamento horizontal; com Ctrl para " +"Ajustar o raio de arredondamento horizontal; com Ctrl para " "fazer o mesmo no raio vertical" #: ../src/ui/object-edit.cpp:455 @@ -24456,17 +23012,16 @@ msgid "" "Adjust the vertical rounding radius; with Ctrl to make the " "horizontal radius the same" msgstr "" -"Ajustar o raio de arredondamento vertical; com Ctrl para fazer " +"Ajustar o raio de arredondamento vertical; com Ctrl para fazer " "o mesmo no raio horizontal" #: ../src/ui/object-edit.cpp:460 ../src/ui/object-edit.cpp:465 -#, fuzzy msgid "" "Adjust the width and height of the rectangle; with Ctrl to " "lock ratio or stretch in one dimension only" msgstr "" -"Ajustar a largura e altura do retângulo; com Ctrlpara Bloquear " -"a proporção ou esticar somente numa dimensão" +"Ajustar a largura e altura do retângulo; com Ctrl para " +"bloquear a proporção ou esticar apenas numa dimensão" #: ../src/ui/object-edit.cpp:712 ../src/ui/object-edit.cpp:716 #: ../src/ui/object-edit.cpp:720 ../src/ui/object-edit.cpp:724 @@ -24484,12 +23039,11 @@ msgid "" "Ctrl to constrain to the directions of edges or diagonals" msgstr "" "Redimensionar caixa ao longo do eixo Z; com Shift na direção X/Y; com " -"Ctrl para as direções dos limites ou diagonais" +"Ctrl para restringir às direções das bordas ou diagonais" #: ../src/ui/object-edit.cpp:744 -#, fuzzy msgid "Move the box in perspective" -msgstr "Mover a caixa em perspectiva." +msgstr "Mover a caixa em perspetiva" #: ../src/ui/object-edit.cpp:983 msgid "Adjust ellipse width, with Ctrl to make circle" @@ -24502,15 +23056,14 @@ msgstr "" "Ajustar a altura da elipse, com Ctrl para formar um círculo" #: ../src/ui/object-edit.cpp:991 -#, fuzzy msgid "" "Position the start point of the arc or segment; with Ctrl to " "snap angle; drag inside the ellipse for arc, outside for " "segment" msgstr "" "Posiciona o ponto inicial do arco ou segmento; com Ctrl para " -"observar o ângulo; arraste para dentro da elipse para um arco, " -"para fora para um segmento" +"atrair ao ângulo; arrastar dentro da elipse para um arco; arrastar " +"fora para um segmento" #: ../src/ui/object-edit.cpp:996 msgid "" @@ -24518,16 +23071,16 @@ msgid "" "snap angle; drag inside the ellipse for arc, outside for " "segment" msgstr "" -"Posicionar o ponto final do arco ou segment; com Ctrl para " -"observar o ângulo; arraste para dentro da elipse para um arco, " -"para fora para um segmento" +"Posicionar o ponto final do arco ou segmento; com Ctrl para " +"atrair ao ângulo; arrastar dentro da elipse para um arco; arrastar " +"fora para um segmento" #: ../src/ui/object-edit.cpp:1142 msgid "" "Adjust the tip radius of the star or polygon; with Shift to " "round; with Alt to randomize" msgstr "" -"Ajusta o raio de dica da estrela ou polígono; com Shift para " +"Ajustar a ponta do raio da estrela ou polígono; com Shift para " "arredondar; com Alt para aleatório" #: ../src/ui/object-edit.cpp:1150 @@ -24536,7 +23089,7 @@ msgid "" "rays radial (no skew); with Shift to round; with Alt to " "randomize" msgstr "" -"Ajusta o raio de base da estrela ou polígono; com Ctrl para " +"Ajustar o raio da base da estrela ou polígono; com Ctrl para " "manter os raios das estrelas radiais (nenhuma inclinação); com Shiftpara arredondar; com Alt para aleatório" @@ -24545,49 +23098,44 @@ msgid "" "Roll/unroll the spiral from inside; with Ctrl to snap angle; " "with Alt to converge/diverge" msgstr "" -"Enrolar/Desenrolar a espiral do interior; com Ctrl para " -"agarrar; com Alt para convergir/divergir" +"Enrolar/Desenrolar a espiral do interior; com Ctrl para atrair " +"ao ângulo; com Alt para convergir/divergir" #: ../src/ui/object-edit.cpp:1349 -#, fuzzy msgid "" "Roll/unroll the spiral from outside; with Ctrl to snap angle; " "with Shift to scale/rotate; with Alt to lock radius" msgstr "" -"Enrolar/Desenrolar a espiral do exterior; com Ctrl para " -"agarrar o ângulo; com Shift para dimensionar/girar" +"Enrolar/desenrolar a espiral do exterior; com Ctrl para atrair " +"o ângulo; com Shift para dimensionar/rodar; com Alt para " +"bloquear o raio" #: ../src/ui/object-edit.cpp:1398 msgid "Adjust the offset distance" -msgstr "Ajustar a distância de compensação" +msgstr "Ajustar a distância de deslocação" #: ../src/ui/object-edit.cpp:1435 msgid "Drag to resize the flowed text frame" -msgstr "Arraste para redimensionar a caixa de texto flutuante" +msgstr "Arrastar para redimensionar a moldura do texto fluido" #: ../src/ui/tool/curve-drag-point.cpp:131 msgid "Drag curve" msgstr "Arrastar curva" #: ../src/ui/tool/curve-drag-point.cpp:192 -#, fuzzy msgctxt "Path segment tip" msgid "Shift: drag to open or move BSpline handles" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "Shift: arrastar para abrir ou mover alças B-Spline" #: ../src/ui/tool/curve-drag-point.cpp:196 -#, fuzzy msgctxt "Path segment tip" msgid "Shift: click to toggle segment selection" -msgstr "" -"Shift: clique para selecionar ou remover da selecção, arraste para " -"selecção elástica" +msgstr "Shift: clicar para alternar seleção de segmento" #: ../src/ui/tool/curve-drag-point.cpp:200 -#, fuzzy msgctxt "Path segment tip" msgid "Ctrl+Alt: click to insert a node" -msgstr "Ponto de conexão: clique ou arraste para criar um novo conector" +msgstr "Ctrl+Alt: clicar para inserir um nó" #: ../src/ui/tool/curve-drag-point.cpp:204 msgctxt "Path segment tip" @@ -24595,6 +23143,8 @@ msgid "" "BSpline segment: drag to shape the segment, doubleclick to insert " "node, click to select (more: Shift, Ctrl+Alt)" msgstr "" +"Segmento B-Spline: arrastar para formar o segmento; clicar 2 vezes " +"para inserir nó; clicar para selecionar (mais: Shift, Ctrl+Alt)" #: ../src/ui/tool/curve-drag-point.cpp:209 msgctxt "Path segment tip" @@ -24602,6 +23152,8 @@ msgid "" "Linear segment: drag to convert to a Bezier segment, doubleclick to " "insert node, click to select (more: Shift, Ctrl+Alt)" msgstr "" +"Segmento linear: arrastar para converter num segmento Bézier; clicar " +"2 vezes para inserir nó; clicar para selecionar (mais: Shift, Ctrl+Alt)" #: ../src/ui/tool/curve-drag-point.cpp:213 msgctxt "Path segment tip" @@ -24609,25 +23161,24 @@ msgid "" "Bezier segment: drag to shape the segment, doubleclick to insert " "node, click to select (more: Shift, Ctrl+Alt)" msgstr "" +"Segmento Bézier: arrastar para formar o segmento; clicar 2 vezes para " +"inserir nó; clicar para selecionar (mais: Shift, Ctrl+Alt)" #: ../src/ui/tool/multi-path-manipulator.cpp:315 -#, fuzzy msgid "Retract handles" -msgstr "Retrair alça" +msgstr "Retrair alças" #: ../src/ui/tool/multi-path-manipulator.cpp:315 ../src/ui/tool/node.cpp:297 msgid "Change node type" -msgstr "Alterar tipo do nó" +msgstr "Alterar tipo de nó" #: ../src/ui/tool/multi-path-manipulator.cpp:323 -#, fuzzy msgid "Straighten segments" -msgstr "Endireitar Segmentos" +msgstr "Endireitar segmentos" #: ../src/ui/tool/multi-path-manipulator.cpp:325 -#, fuzzy msgid "Make segments curves" -msgstr "Converter segmentos seleccionados em curvas" +msgstr "Curvar segmentos" #: ../src/ui/tool/multi-path-manipulator.cpp:333 #: ../src/ui/tool/multi-path-manipulator.cpp:347 @@ -24635,14 +23186,12 @@ msgid "Add nodes" msgstr "Adicionar nós" #: ../src/ui/tool/multi-path-manipulator.cpp:339 -#, fuzzy msgid "Add extremum nodes" -msgstr "Adicionar nós" +msgstr "Adicionar nós extremos" #: ../src/ui/tool/multi-path-manipulator.cpp:354 -#, fuzzy msgid "Duplicate nodes" -msgstr "Duplicar nó" +msgstr "Duplicar nós" #: ../src/ui/tool/multi-path-manipulator.cpp:417 #: ../src/widgets/node-toolbar.cpp:408 @@ -24651,9 +23200,8 @@ msgstr "Juntar nós" #: ../src/ui/tool/multi-path-manipulator.cpp:424 #: ../src/widgets/node-toolbar.cpp:419 -#, fuzzy msgid "Break nodes" -msgstr "Mover nós" +msgstr "Separar nós" #: ../src/ui/tool/multi-path-manipulator.cpp:431 msgid "Delete nodes" @@ -24673,78 +23221,67 @@ msgstr "Mover nós verticalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:795 #: ../src/ui/tool/multi-path-manipulator.cpp:801 -#, fuzzy msgid "Scale nodes uniformly" -msgstr "Escalar nós" +msgstr "Dimensionar nós proporcionalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:798 msgid "Scale nodes" -msgstr "Escalar nós" +msgstr "Dimensionar nós" #: ../src/ui/tool/multi-path-manipulator.cpp:805 -#, fuzzy msgid "Scale nodes horizontally" -msgstr "Mover nós horizontalmente" +msgstr "Dimensionar nós horizontalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:809 -#, fuzzy msgid "Scale nodes vertically" -msgstr "Mover nós verticalmente" +msgstr "Dimensionar nós verticalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:813 -#, fuzzy msgid "Skew nodes horizontally" -msgstr "Mover nós horizontalmente" +msgstr "Inclinar nós horizontalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:817 -#, fuzzy msgid "Skew nodes vertically" -msgstr "Mover nós verticalmente" +msgstr "Inclinar nós verticalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:821 -#, fuzzy msgid "Flip nodes horizontally" -msgstr "Inverter horizontalmente" +msgstr "Inverter nós horizontalmente" #: ../src/ui/tool/multi-path-manipulator.cpp:824 -#, fuzzy msgid "Flip nodes vertically" -msgstr "Inverter verticalmente" +msgstr "Inverter nós verticalmente" #: ../src/ui/tool/node.cpp:272 -#, fuzzy msgid "Cusp node handle" -msgstr "Mover alça do nó" +msgstr "Alça do nó afiado" #: ../src/ui/tool/node.cpp:273 -#, fuzzy msgid "Smooth node handle" -msgstr "Deslocar alças do nó" +msgstr "Alça do nó suave" #: ../src/ui/tool/node.cpp:274 -#, fuzzy msgid "Symmetric node handle" -msgstr "Deslocar alças do nó" +msgstr "Alça do nó simétrico" #: ../src/ui/tool/node.cpp:275 -#, fuzzy msgid "Auto-smooth node handle" -msgstr "Mover alça do nó" +msgstr "Alça do nó auto-suave" #: ../src/ui/tool/node.cpp:494 msgctxt "Path handle tip" msgid "more: Shift, Ctrl, Alt" -msgstr "" +msgstr "mais: Shift, Ctrl, Alt" #: ../src/ui/tool/node.cpp:496 msgctxt "Path handle tip" msgid "more: Ctrl" -msgstr "" +msgstr "mais: Ctrl" #: ../src/ui/tool/node.cpp:498 msgctxt "Path handle tip" msgid "more: Ctrl, Alt" -msgstr "" +msgstr "mais: Ctrl, Alt" #: ../src/ui/tool/node.cpp:504 #, c-format @@ -24753,6 +23290,8 @@ msgid "" "Shift+Ctrl+Alt: preserve length and snap rotation angle to %g° " "increments while rotating both handles" msgstr "" +"Shift+Ctrl+Alt: manter comprimento e atração ao ângulo de rotação em " +"incrementos de %g° ao rodar ambas as alças" #: ../src/ui/tool/node.cpp:509 #, c-format @@ -24760,58 +23299,59 @@ msgctxt "Path handle tip" msgid "" "Ctrl+Alt: preserve length and snap rotation angle to %g° increments" msgstr "" +"Ctrl+Alt: preservar comprimento e atração ao ângulo de rotação em " +"incrementos de %g°" #: ../src/ui/tool/node.cpp:515 -#, fuzzy msgctxt "Path handle tip" msgid "Shift+Alt: preserve handle length and rotate both handles" -msgstr "" -"Shift: muda a selecção de nó, desabilita observação, gira ambas as " -"alças" +msgstr "Shift+Alt: preservar comprimento da alça e rodar ambas as alças" #: ../src/ui/tool/node.cpp:518 msgctxt "Path handle tip" msgid "Alt: preserve handle length while dragging" -msgstr "" +msgstr "Alt: preservar comprimento da alça ao arrastar" #: ../src/ui/tool/node.cpp:525 -#, fuzzy, c-format +#, c-format msgctxt "Path handle tip" msgid "" "Shift+Ctrl: snap rotation angle to %g° increments and rotate both " "handles" msgstr "" -"Shift: muda a selecção de nó, desabilita observação, gira ambas as " -"alças" +"Shift+Ctrl: atrair ao ângulo de rotação em incrementos de %g° e rodar " +"ambas as alças" #: ../src/ui/tool/node.cpp:529 msgctxt "Path handle tip" msgid "Ctrl: Snap handle to steps defined in BSpline Live Path Effect" msgstr "" +"Ctrl: atrair alça aos passos definidos em Efeito no Caminho B-Spline " +"em Tempo Real" #: ../src/ui/tool/node.cpp:532 #, c-format msgctxt "Path handle tip" msgid "Ctrl: snap rotation angle to %g° increments, click to retract" msgstr "" +"Ctrl: atrair ao ângulo de rotação em incrementos de %g°; clicar para " +"retrair" #: ../src/ui/tool/node.cpp:537 -#, fuzzy msgctxt "Path hande tip" msgid "Shift: rotate both handles by the same angle" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "Shift: rodar ambas as alças pelo mesmo ângulo" #: ../src/ui/tool/node.cpp:540 -#, fuzzy msgctxt "Path hande tip" msgid "Shift: move handle" -msgstr "Deslocar alças do nó" +msgstr "Shift: mover alça" #: ../src/ui/tool/node.cpp:547 ../src/ui/tool/node.cpp:551 #, c-format msgctxt "Path handle tip" msgid "Auto node handle: drag to convert to smooth node (%s)" -msgstr "" +msgstr "Alça de nó automática: arrastar para converter em nó suave (%s)" #: ../src/ui/tool/node.cpp:554 #, c-format @@ -24820,50 +23360,48 @@ msgid "" "BSpline node handle: Shift to drag, double click to reset (%s). %g " "power" msgstr "" +"Alça de nó B-Spline: Shift para arrastar; clicar 2 vezes para repor " +"(%s). %g força" #: ../src/ui/tool/node.cpp:574 #, c-format msgctxt "Path handle tip" msgid "Move handle by %s, %s; angle %.2f°, length %s" -msgstr "" +msgstr "Mover alça %s, %s; ângulo %.2f°, comprimento %s" #: ../src/ui/tool/node.cpp:1425 -#, fuzzy msgctxt "Path node tip" msgid "Shift: drag out a handle, click to toggle selection" msgstr "" -"Shift: clique para selecionar ou remover da selecção, arraste para " -"selecção elástica" +"Shift: arrastar para fora uma alça; clicar para alternar seleção" #: ../src/ui/tool/node.cpp:1427 -#, fuzzy msgctxt "Path node tip" msgid "Shift: click to toggle selection" -msgstr "" -"Shift: clique para selecionar ou remover da selecção, arraste para " -"selecção elástica" +msgstr "Shift: clicar para alternar seleção" #: ../src/ui/tool/node.cpp:1432 msgctxt "Path node tip" msgid "Ctrl+Alt: move along handle lines, click to delete node" msgstr "" +"Ctrl+Alt: mover ao longo das linhas das alças; clicar para eliminar o " +"nó" #: ../src/ui/tool/node.cpp:1435 msgctxt "Path node tip" msgid "Ctrl: move along axes, click to change node type" -msgstr "" +msgstr "Ctrl: mover ao longo dos eixos; clicar para alterar tipo de nó" #: ../src/ui/tool/node.cpp:1439 -#, fuzzy msgctxt "Path node tip" msgid "Alt: sculpt nodes" -msgstr "Ctrl: agarra o ângulo" +msgstr "Alt: esculpir nós" #: ../src/ui/tool/node.cpp:1448 #, c-format msgctxt "Path node tip" msgid "%s: drag to shape the path (more: Shift, Ctrl, Alt)" -msgstr "" +msgstr "%s: arrastar para formar o caminho (mais: Shift, Ctrl, Alt)" #: ../src/ui/tool/node.cpp:1451 #, c-format @@ -24872,6 +23410,8 @@ msgid "" "BSpline node: drag to shape the path (more: Shift, Ctrl, Alt). %g " "power" msgstr "" +"Nó B-Spline: arrastar para formar o caminho (mais: Shift, Ctrl, Alt). " +"%g força" #: ../src/ui/tool/node.cpp:1454 #, c-format @@ -24880,6 +23420,8 @@ msgid "" "%s: drag to shape the path, click to toggle scale/rotation handles " "(more: Shift, Ctrl, Alt)" msgstr "" +"%s: arrastar para formar o caminho, clicar para alternar as alças de " +"escala/rotação (mais: Shift, Ctrl, Alt)" #: ../src/ui/tool/node.cpp:1458 #, c-format @@ -24888,6 +23430,8 @@ msgid "" "%s: drag to shape the path, click to select only this node (more: " "Shift, Ctrl, Alt)" msgstr "" +"%s: arrastar para formar o caminho, clicar para selecionar apenas " +"este nó (mais: Shift, Ctrl, Alt)" #: ../src/ui/tool/node.cpp:1461 #, c-format @@ -24896,36 +23440,34 @@ msgid "" "BSpline node: drag to shape the path, click to select only this node " "(more: Shift, Ctrl, Alt). %g power" msgstr "" +"Nó B-Spline: arrastar para formar o caminho, clicar para selecionar " +"apenas este nó (mais: Shift, Ctrl, Alt). %g força" #: ../src/ui/tool/node.cpp:1474 -#, fuzzy, c-format +#, c-format msgctxt "Path node tip" msgid "Move node by %s, %s" -msgstr "Mover nós" +msgstr "Mover nó %s, %s" #: ../src/ui/tool/node.cpp:1485 -#, fuzzy msgid "Symmetric node" -msgstr "simétrico" +msgstr "Nó simétrico" #: ../src/ui/tool/node.cpp:1486 -#, fuzzy msgid "Auto-smooth node" -msgstr "Suavidade" +msgstr "Nó auto-suave" #: ../src/ui/tool/path-manipulator.cpp:296 msgid "Add node" -msgstr "Acrescentar nó" +msgstr "Adicionar nó" #: ../src/ui/tool/path-manipulator.cpp:861 -#, fuzzy msgid "Scale handle" -msgstr "Escalar nós" +msgstr "Dimensionar alça" #: ../src/ui/tool/path-manipulator.cpp:885 -#, fuzzy msgid "Rotate handle" -msgstr "Retrair alça" +msgstr "Rodar alça" #. We need to call MPM's method because it could have been our last node #: ../src/ui/tool/path-manipulator.cpp:1555 ../src/widgets/node-toolbar.cpp:397 @@ -24933,61 +23475,57 @@ msgid "Delete node" msgstr "Eliminar nó" #: ../src/ui/tool/path-manipulator.cpp:1563 -#, fuzzy msgid "Cycle node type" -msgstr "Alterar tipo do nó" +msgstr "Alterar tipo de nó" #: ../src/ui/tool/path-manipulator.cpp:1578 -#, fuzzy msgid "Drag handle" -msgstr "Desenhar Alças" +msgstr "Arrastar alça" #: ../src/ui/tool/path-manipulator.cpp:1587 msgid "Retract handle" msgstr "Retrair alça" #: ../src/ui/tool/transform-handle-set.cpp:203 -#, fuzzy msgctxt "Transform handle tip" msgid "Shift+Ctrl: scale uniformly about the rotation center" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "" +"Shift+Ctrl: redimensionar proporcionalmente à volta do centro de " +"rotação" #: ../src/ui/tool/transform-handle-set.cpp:205 -#, fuzzy msgctxt "Transform handle tip" msgid "Ctrl: scale uniformly" -msgstr "Ctrl: agarra o ângulo" +msgstr "Ctrl: redimensionar proporcionalmente" #: ../src/ui/tool/transform-handle-set.cpp:210 -#, fuzzy msgctxt "Transform handle tip" msgid "" "Shift+Alt: scale using an integer ratio about the rotation center" -msgstr "Shift: desenhar o degradê em redor do ponto inicial" +msgstr "" +"Shift+Alt: redimensionar utilizando um rácio de número inteiro à " +"volta do centro de rotação" #: ../src/ui/tool/transform-handle-set.cpp:212 -#, fuzzy msgctxt "Transform handle tip" msgid "Shift: scale from the rotation center" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "Shift: redimensionar a partir do centro de rotação" #: ../src/ui/tool/transform-handle-set.cpp:215 -#, fuzzy msgctxt "Transform handle tip" msgid "Alt: scale using an integer ratio" -msgstr "Alt: trava o raio da espiral" +msgstr "Alt: redimensionar utilizando um rácio de número inteiro" #: ../src/ui/tool/transform-handle-set.cpp:217 -#, fuzzy msgctxt "Transform handle tip" msgid "Scale handle: drag to scale the selection" -msgstr "Nenhum caminho para reverter na selecção." +msgstr "Alça de redimensionar: arrastar para redimensionar a seleção" #: ../src/ui/tool/transform-handle-set.cpp:222 #, c-format msgctxt "Transform handle tip" msgid "Scale by %.2f%% x %.2f%%" -msgstr "" +msgstr "Redimensionar por %.2f%% x %.2f%%" #: ../src/ui/tool/transform-handle-set.cpp:449 #, c-format @@ -24996,18 +23534,19 @@ msgid "" "Shift+Ctrl: rotate around the opposite corner and snap angle to %f° " "increments" msgstr "" +"Shift+Ctrl: rodar à volta do canto oposto e atração ao ângulo em " +"incrementos de %f°" #: ../src/ui/tool/transform-handle-set.cpp:452 -#, fuzzy msgctxt "Transform handle tip" msgid "Shift: rotate around the opposite corner" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "Shift: rodar à volta do canto oposto" #: ../src/ui/tool/transform-handle-set.cpp:456 -#, fuzzy, c-format +#, c-format msgctxt "Transform handle tip" msgid "Ctrl: snap angle to %f° increments" -msgstr "Ctrl: agarra o ângulo" +msgstr "Ctrl: atração ao ângulo em incrementos de %f°" #: ../src/ui/tool/transform-handle-set.cpp:458 msgctxt "Transform handle tip" @@ -25015,13 +23554,15 @@ msgid "" "Rotation handle: drag to rotate the selection around the rotation " "center" msgstr "" +"Alça de rotação: arrastar para rodar a seleção à volta do centro de " +"rotação" #. event #: ../src/ui/tool/transform-handle-set.cpp:463 -#, fuzzy, c-format +#, c-format msgctxt "Transform handle tip" msgid "Rotate by %.2f°" -msgstr "Girar por pixels" +msgstr "Rodar %.2f°" #: ../src/ui/tool/transform-handle-set.cpp:588 #, c-format @@ -25030,172 +23571,174 @@ msgid "" "Shift+Ctrl: skew about the rotation center with snapping to %f° " "increments" msgstr "" +"Shift+Ctrl: inclinar à volta do centro de rotação com atração em " +"incrementos de %f°" #: ../src/ui/tool/transform-handle-set.cpp:591 -#, fuzzy msgctxt "Transform handle tip" msgid "Shift: skew about the rotation center" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "Shift: inclinar à volta do centro de rotação" #: ../src/ui/tool/transform-handle-set.cpp:595 -#, fuzzy, c-format +#, c-format msgctxt "Transform handle tip" msgid "Ctrl: snap skew angle to %f° increments" -msgstr "Ctrl: agarra o ângulo" +msgstr "Ctrl: atrair ao ângulo de inclinação em incrementos de %f°" #: ../src/ui/tool/transform-handle-set.cpp:598 msgctxt "Transform handle tip" msgid "" "Skew handle: drag to skew (shear) selection about the opposite handle" msgstr "" +"Alça de distorção: arrastar para inclinar a seleção sobre a alça " +"oposta" #: ../src/ui/tool/transform-handle-set.cpp:604 -#, fuzzy, c-format +#, c-format msgctxt "Transform handle tip" msgid "Skew horizontally by %.2f°" -msgstr "Mover horizontalmente em pixels" +msgstr "Inclinar horizontalmente %.2f°" #: ../src/ui/tool/transform-handle-set.cpp:607 -#, fuzzy, c-format +#, c-format msgctxt "Transform handle tip" msgid "Skew vertically by %.2f°" -msgstr "Mover verticalmente em pixels" +msgstr "Inclinar verticalmente %.2f°" #: ../src/ui/tool/transform-handle-set.cpp:666 msgctxt "Transform handle tip" msgid "Rotation center: drag to change the origin of transforms" msgstr "" +"Centro de rotação: arrastar para alterar a origem das transformações" #: ../src/ui/tools-switch.cpp:101 -#, fuzzy msgid "" "Click to Select and Transform objects, Drag to select many " "objects." -msgstr "Clique para selecionar nós, arraste para rearranjar." +msgstr "" +"Clicar para selecionar e transformar objetos; Arrastar para " +"selecionar vários objetos." #: ../src/ui/tools-switch.cpp:102 -#, fuzzy msgid "Modify selected path points (nodes) directly." -msgstr "Simplificar os caminhos seleccionados removendo nós adicionais" +msgstr "Alterar diretamente os pontos (nós)." #: ../src/ui/tools-switch.cpp:103 msgid "To tweak a path by pushing, select it and drag over it." msgstr "" +"Para ajustar um caminho puxando-o, selecioná-lo e arrastar por cima dele." #: ../src/ui/tools-switch.cpp:104 -#, fuzzy msgid "" "Drag, click or click and scroll to spray the selected " "objects." msgstr "" -"Clique ou clique e arraste para fechar e terminar o caminho." +"Arrastar, clicar ou clicar e rodar (botão central do " +"rato) para pulverizar os objetos selecionados." #: ../src/ui/tools-switch.cpp:105 msgid "" "Drag to create a rectangle. Drag controls to round corners and " "resize. Click to select." msgstr "" -"Arraste para criar um retângulo. Arraste os controles para " -"arredondar os cantos e redimensionar. Clique para selecioná-lo." +"Arrastar para criar um retângulo. Arrastar os controladores " +"para arredondar os cantos e redimensionar. Clicar para selecionar." #: ../src/ui/tools-switch.cpp:106 msgid "" "Drag to create a 3D box. Drag controls to resize in " "perspective. Click to select (with Ctrl+Alt for single faces)." msgstr "" -"Arraste para criar uma caixa 3D. Arraste os controles para " -"redimensionar em perspectiva. Clique para selecionar (com Ctrl" -"+Alt para faces únicas)" +"Arrastar para criar uma caixa 3D. Arrastar nós de controlos " +"para redimensionar em perspectiva. Clicar para selecionar. Ctrl+Alt" +"+clicar para selecionar 1 face da caixa 3D." #: ../src/ui/tools-switch.cpp:107 msgid "" "Drag to create an ellipse. Drag controls to make an arc or " "segment. Click to select." msgstr "" -"Arraste para criar uma elipse. Arraste as alças para fazer um " -"arco ou segmento. Clique para selecionar." +"Arrastar para criar uma elipse. Arrastar os controlos para " +"fazer um arco ou segmento. Clicar para selecionar." #: ../src/ui/tools-switch.cpp:108 msgid "" "Drag to create a star. Drag controls to edit the star shape. " "Click to select." msgstr "" -"Arraste para criar uma estrela. Arraste as alças para alterar " -"a forma da estrela. Clique para selecionar." +"Arrastar para criar uma estrela. Arrastar os controlos para " +"editar a forma da estrela. Clicar para selecionar." #: ../src/ui/tools-switch.cpp:109 msgid "" "Drag to create a spiral. Drag controls to edit the spiral " "shape. Click to select." msgstr "" -"Arraste para criar uma espiral. Arraste as alças para alterar " -"a forma da espiral. Clique para selecionar." +"Arrastar para criar uma espiral. Arrastar os controlos para " +"editar a forma da espiral. Clicar para selecionar." #: ../src/ui/tools-switch.cpp:110 -#, fuzzy msgid "" "Drag to create a freehand line. Shift appends to selected " "path, Alt activates sketch mode." msgstr "" -"Arraste para criar uma linha à mão-livre. Comece a desenhar mantendo " -"a tecla Shift precionada para acrescentar ao caminho seleccionado." +"Arrastar para criar uma linha à mão-livre. Shift adiciona ao " +"caminho selecionado. Alt ativa o modo esboço." #: ../src/ui/tools-switch.cpp:111 -#, fuzzy msgid "" "Click or click and drag to start a path; with Shift to " "append to selected path. Ctrl+click to create single dots (straight " "line modes only)." msgstr "" -"Clique ou clique e arraste para iniciar um caminho; com " -"Shift para adicionar ao caminho seleccionado." +"Clicar ou clicar e arrastar para iniciar um caminho; com " +"Shift para adicionar ao caminho selecionado.Ctrl+clicar para " +"criar pontos únicos (apenas nos modos linha direita)." #: ../src/ui/tools-switch.cpp:112 -#, fuzzy msgid "" "Drag to draw a calligraphic stroke; with Ctrl to track a guide " "path. Arrow keys adjust width (left/right) and angle (up/down)." msgstr "" -"Arraste para desenhar uma linha caligráfica; com Ctrl para " -"rastrear uma guia, com Alt para afinar/espessar. As setas " -"ajustam largura (esquerda/direita) e o ângulo (cima/baixo)." +"Arrastar para desenhar uma linha caligráfica; com Ctrl para " +"seguir um caminho de guia. Teclas de setas para ajustar a largura " +"(esquerda/direita) e o ângulo (cima/baixo)." #: ../src/ui/tools-switch.cpp:113 ../src/ui/tools/text-tool.cpp:1583 msgid "" "Click to select or create text, drag to create flowed text; " "then type." msgstr "" -"Clique para selecionar ou criar um texto, arraste para criar " -"uma caixa de texto; e então digite." +"Clicar para selecionar ou criar um texto; arrastar para criar " +"texto fluido; digitar de seguida o texto." #: ../src/ui/tools-switch.cpp:114 msgid "" "Drag or double click to create a gradient on selected objects, " "drag handles to adjust gradients." msgstr "" -"Arraste ou dê um duplo clique para criar um degradê nos " -"objectos seleccionados, arraste as alças para ajustar degradês" +"Arrastar ou clicar 2 vezes para criar um gradiente nos objetos " +"selecionados, arrastar as alças para ajustar os gradientes." #: ../src/ui/tools-switch.cpp:115 -#, fuzzy msgid "" "Drag or double click to create a mesh on selected objects, " "drag handles to adjust meshes." msgstr "" -"Arraste ou dê um duplo clique para criar um degradê nos " -"objectos seleccionados, arraste as alças para ajustar degradês" +"Arrastar ou clicar 2 vezes para criar uma malha nos objetos " +"selecionados, arrastar as alças para ajustar as malhas." #: ../src/ui/tools-switch.cpp:116 msgid "" "Click or drag around an area to zoom in, Shift+click to " "zoom out." msgstr "" -"Clique ou arraste em redor de uma área para ampliá-la. Clique " -"com Shift para reduzi-la." +"Clicar ou arrastar em redor de uma área para aproximar a " +"vista. Shift+clicar para afastar a vista." #: ../src/ui/tools-switch.cpp:117 msgid "Drag to measure the dimensions of objects." -msgstr "" +msgstr "Arrastar para medir a dimensão dos objetos." #: ../src/ui/tools-switch.cpp:118 ../src/ui/tools/dropper-tool.cpp:274 msgid "" @@ -25203,14 +23746,14 @@ msgid "" "average color in area; with Alt to pick inverse color; Ctrl+C " "to copy the color under mouse to clipboard" msgstr "" -"Clique para ajustar a cor de preenchimento. Clique com Shift " -"para ajustar a cor do traço. Clique e arraste para escolher a cor " -"média de uma área. UseCtrl+C para copiar a cor sob o mouse para a " -"área de transferência." +"Clicar para aplicar no preenchimento. Shift+clicar para " +"aplicar a cor no traço. Arrastar para escolher a cor média de uma " +"área. Usar Ctrl+C para copiar a cor sob o rato para a área de " +"transferência." #: ../src/ui/tools-switch.cpp:119 msgid "Click and drag between shapes to create a connector." -msgstr "Clique e arraste entre as formas para criar um conector." +msgstr "Clicar e arrastar entre as formas para criar um conetor." #: ../src/ui/tools-switch.cpp:121 msgid "" @@ -25218,24 +23761,23 @@ msgid "" "fill with the current selection, Ctrl+click to change the clicked " "object's fill and stroke to the current setting." msgstr "" -"Clique para pintar uma área fechada, Shift+clique para unir o " -"novo preenchimento à selecção actual, Ctrl+clique para mudar o " -"preeenchimento e o traço do objecto clicado para as opções atuais." +"Clicar para pintar uma área fechada, Shift+clicar para unir o " +"novo preenchimento à seleção atual, Ctrl+clicar para mudar o " +"preeenchimento e o traço do objeto clicado para as definições atuais." #: ../src/ui/tools-switch.cpp:123 -#, fuzzy msgid "Drag to erase." -msgstr "Ligar em %s" +msgstr "Arrastar para eliminar." #: ../src/ui/tools-switch.cpp:124 msgid "Choose a subtool from the toolbar" -msgstr "" +msgstr "Escolher sub-ferramenta da barra de ferramentas" #: ../src/ui/tools/arc-tool.cpp:242 msgid "" "Ctrl: make circle or integer-ratio ellipse, snap arc/segment angle" msgstr "" -"Ctrl: cria círculo ou elipse de proporção inteira, ajusta o ângulo do " +"Ctrl: cria círculo ou elipse de rácio inteiro, atrai ao ângulo do " "arco/segmento" #: ../src/ui/tools/arc-tool.cpp:243 ../src/ui/tools/rect-tool.cpp:278 @@ -25248,7 +23790,7 @@ msgid "" "Ellipse: %s × %s (constrained to ratio %d:%d); with Shift " "to draw around the starting point" msgstr "" -"Elipse: %s × %s (proporção forçada a %d:%d); com Shift " +"Elipse: %s × %s (restringida ao rácio %d:%d); com Shift " "para desenhar em redor do ponto inicial" #: ../src/ui/tools/arc-tool.cpp:414 @@ -25257,102 +23799,102 @@ msgid "" "Ellipse: %s × %s; with Ctrl to make square or integer-" "ratio ellipse; with Shift to draw around the starting point" msgstr "" -"Elipse: %s × %s; com Ctrl para criar elipse de proporção " -"quadrada ou inteira; com Shift para desenhar em redor do ponto inicial" +"Elipse: %s × %s; com Ctrl para criar elipse de rácio " +"quadrado ou inteiro; com Shift para desenhar em redor do ponto inicial" #: ../src/ui/tools/arc-tool.cpp:437 msgid "Create ellipse" msgstr "Criar elipse" +# Translators: PL is short for Perspective Line #: ../src/ui/tools/box3d-tool.cpp:360 ../src/ui/tools/box3d-tool.cpp:367 #: ../src/ui/tools/box3d-tool.cpp:374 ../src/ui/tools/box3d-tool.cpp:381 #: ../src/ui/tools/box3d-tool.cpp:388 ../src/ui/tools/box3d-tool.cpp:395 -#, fuzzy msgid "Change perspective (angle of PLs)" -msgstr "Alterar retângulo" +msgstr "Alterar perspetiva (ângulo das linhas de Perspetiva)" #. status text #: ../src/ui/tools/box3d-tool.cpp:573 msgid "3D Box; with Shift to extrude along the Z axis" -msgstr "" +msgstr "Caixa 3D; com Shift para extrudir ao longo do eixo Z" #: ../src/ui/tools/box3d-tool.cpp:599 -#, fuzzy msgid "Create 3D box" -msgstr "Criar caixas 3D" +msgstr "Criar caixa 3D" #: ../src/ui/tools/calligraphic-tool.cpp:525 msgid "" "Guide path selected; start drawing along the guide with Ctrl" msgstr "" -"Caminho guia seleccionado; desenhar ao longo do guia com Ctrl" +"Caminho guia selecionado; começar a desenhar ao longo da guia com " +"Ctrl" #: ../src/ui/tools/calligraphic-tool.cpp:527 msgid "Select a guide path to track with Ctrl" -msgstr "Seleccione um caminho guia para rastrear com Ctrl" +msgstr "Selecionar um caminho guia para rastrear com Ctrl" #: ../src/ui/tools/calligraphic-tool.cpp:662 msgid "Tracking: connection to guide path lost!" -msgstr "Rastreando: conexão ao caminho guia perdida!" +msgstr "A rastrear: ligação ao caminho guia perdida!" #: ../src/ui/tools/calligraphic-tool.cpp:662 msgid "Tracking a guide path" -msgstr "Rastreando um caminho guia" +msgstr "A rastrear um caminho guia" #: ../src/ui/tools/calligraphic-tool.cpp:665 msgid "Drawing a calligraphic stroke" -msgstr "Traçando uma linha caligráfica" +msgstr "Desenhando uma linha caligráfica" #: ../src/ui/tools/calligraphic-tool.cpp:966 msgid "Draw calligraphic stroke" -msgstr "Desenhar linhas caligráficas" +msgstr "Desenhar linha caligráfica" #: ../src/ui/tools/connector-tool.cpp:489 msgid "Creating new connector" -msgstr "Criar novo conector" +msgstr "Criar novo conetor" #: ../src/ui/tools/connector-tool.cpp:730 msgid "Connector endpoint drag cancelled." -msgstr "Arrasto de ponto final de conector cancelado." +msgstr "Arrasto de ponto final de conetor cancelado." #: ../src/ui/tools/connector-tool.cpp:773 msgid "Reroute connector" -msgstr "Redefinir conector" +msgstr "Redefinir conetor" #: ../src/ui/tools/connector-tool.cpp:926 msgid "Create connector" -msgstr "Criar conector" +msgstr "Criar conetor" #: ../src/ui/tools/connector-tool.cpp:943 msgid "Finishing connector" -msgstr "Finalizando conector" +msgstr "Criação de conetor terminada" #: ../src/ui/tools/connector-tool.cpp:1181 msgid "Connector endpoint: drag to reroute or connect to new shapes" msgstr "" -"Ponto final do conector: arraste para redefinir ou conectar a novas " +"Ponto final do conetor: arrastar para redefinir ou conetar a novas " "formas" #: ../src/ui/tools/connector-tool.cpp:1324 msgid "Select at least one non-connector object." -msgstr "Seleccione pelo menos um objecto que não seja conector." +msgstr "Selecione pelo menos um objeto que não seja conetor." #: ../src/ui/tools/connector-tool.cpp:1329 #: ../src/widgets/connector-toolbar.cpp:308 msgid "Make connectors avoid selected objects" -msgstr "Fazer com que os conectores evitem os objectos seleccionados" +msgstr "Fazer com que os conetores evitem os objetos selecionados" #: ../src/ui/tools/connector-tool.cpp:1330 #: ../src/widgets/connector-toolbar.cpp:318 msgid "Make connectors ignore selected objects" -msgstr "Fazer com que os conectores ignorem os objectos seleccionados" +msgstr "Fazer com que os conetores ignorem os objetos selecionados" #. alpha of color under cursor, to show in the statusbar #. locale-sensitive printf is OK, since this goes to the UI, not into SVG #: ../src/ui/tools/dropper-tool.cpp:270 #, c-format msgid " alpha %.3g" -msgstr " alfa %.3g" +msgstr " transparência %.3g" #. where the color is picked, to show in the statusbar #: ../src/ui/tools/dropper-tool.cpp:272 @@ -25362,76 +23904,69 @@ msgstr ", médio com raio %d" #: ../src/ui/tools/dropper-tool.cpp:272 msgid " under cursor" -msgstr " sob cursor" +msgstr " debaixo do cursor" #. message, to show in the statusbar #: ../src/ui/tools/dropper-tool.cpp:274 msgid "Release mouse to set color." -msgstr "Libere o mouse para ajustar a cor." +msgstr "Liberar o rato para definir a cor." #: ../src/ui/tools/dropper-tool.cpp:322 msgid "Set picked color" -msgstr "Ajustar a cor escolhida" +msgstr "Capturar cor" #: ../src/ui/tools/eraser-tool.cpp:436 -#, fuzzy msgid "Drawing an eraser stroke" -msgstr "Traçando uma linha caligráfica" +msgstr "Desenhando uma linha de borracha" #: ../src/ui/tools/eraser-tool.cpp:797 -#, fuzzy msgid "Draw eraser stroke" -msgstr "Desenhar linhas caligráficas" +msgstr "Desenhar linha de borracha" #: ../src/ui/tools/flood-tool.cpp:90 msgid "Visible Colors" msgstr "Cores Visíveis" #: ../src/ui/tools/flood-tool.cpp:102 -#, fuzzy msgctxt "Flood autogap" msgid "None" msgstr "Nenhum" #: ../src/ui/tools/flood-tool.cpp:103 -#, fuzzy msgctxt "Flood autogap" msgid "Small" msgstr "Pequeno" #: ../src/ui/tools/flood-tool.cpp:104 -#, fuzzy msgctxt "Flood autogap" msgid "Medium" msgstr "Médio" #: ../src/ui/tools/flood-tool.cpp:105 -#, fuzzy msgctxt "Flood autogap" msgid "Large" msgstr "Grande" #: ../src/ui/tools/flood-tool.cpp:415 msgid "Too much inset, the result is empty." -msgstr "Muita inserção, o resultado é vazio." +msgstr "Demasiada inserção, o resultado é vazio." #: ../src/ui/tools/flood-tool.cpp:456 -#, fuzzy, c-format +#, c-format msgid "" "Area filled, path with %d node created and unioned with selection." msgid_plural "" "Area filled, path with %d nodes created and unioned with selection." -msgstr[0] "" -"Ãrea preenchida, caminho com %d nós criado e unido à selecção." +msgstr[0] "Ãrea preenchida, caminho com %d nó criado e unido à seleção." msgstr[1] "" -"Ãrea preenchida, caminho com %d nós criado e unido à selecção." +"Ãrea preenchida, caminho com %d nós criados e unidos à seleção." #: ../src/ui/tools/flood-tool.cpp:462 -#, fuzzy, c-format +#, c-format msgid "Area filled, path with %d node created." msgid_plural "Area filled, path with %d nodes created." -msgstr[0] "Ãrea preenchida, caminho com %d nós criado." -msgstr[1] "Ãrea preenchida, caminho com %d nós criado." +msgstr[0] "Ãrea preenchida, caminho com %d nó criado." +msgstr[1] "Ãrea preenchida, caminho com %d nós criados." #: ../src/ui/tools/flood-tool.cpp:730 ../src/ui/tools/flood-tool.cpp:1040 msgid "Area is not bounded, cannot fill." @@ -25442,22 +23977,23 @@ msgid "" "Only the visible part of the bounded area was filled. If you want to " "fill all of the area, undo, zoom out, and fill again." msgstr "" -"Apenas a parte visível da área fechada foi preenchida. Para preencher " -"toda a área, desfazer, reduzir o zoom e preencher novamente." +"Apenas a parte visível da área fechada foi preenchida. S pretende " +"preencher toda a área, desfazer a última ação, reduzir o afastar a vista e " +"preencher novamente." #: ../src/ui/tools/flood-tool.cpp:1063 ../src/ui/tools/flood-tool.cpp:1214 msgid "Fill bounded area" -msgstr "Preencher área fechada" +msgstr "Preencher área fechada com balde de tinta" #: ../src/ui/tools/flood-tool.cpp:1079 msgid "Set style on object" -msgstr "Definir estilo do objecto" +msgstr "Definir estilo no objeto" #: ../src/ui/tools/flood-tool.cpp:1139 msgid "Draw over areas to add to fill, hold Alt for touch fill" msgstr "" -"Desenhe sobre as áreas para adicionar preenchimento, segure Alt para preencher tudo o que for tocado" +"Desenhar sobre as áreas para adicionar preenchimento, manter premido " +"Alt para preencher tudo o que for tocado" #. We hit green anchor, closing Green-Blue-Red #: ../src/ui/tools/freehand-base.cpp:677 @@ -25474,123 +24010,119 @@ msgid "Draw path" msgstr "Desenhar caminho" #: ../src/ui/tools/freehand-base.cpp:984 -#, fuzzy msgid "Creating single dot" -msgstr "Criar novo caminho" +msgstr "A criar um ponto único" #: ../src/ui/tools/freehand-base.cpp:985 -#, fuzzy msgid "Create single dot" -msgstr "Criar clones ladrilhados" +msgstr "Criar ponto único" #. TRANSLATORS: %s will be substituted with the point name (see previous messages); This is part of a compound message #: ../src/ui/tools/gradient-tool.cpp:121 ../src/ui/tools/mesh-tool.cpp:120 -#, fuzzy, c-format +#, c-format msgid "%s selected" -msgstr "Último seleccionado" +msgstr "%s selecionado" #. TRANSLATORS: Mind the space in front. This is part of a compound message #: ../src/ui/tools/gradient-tool.cpp:123 ../src/ui/tools/gradient-tool.cpp:132 -#, fuzzy, c-format +#, c-format msgid " out of %d gradient handle" msgid_plural " out of %d gradient handles" -msgstr[0] "Mover alça do degradê" -msgstr[1] "Mover alça do degradê" +msgstr[0] " de um total de %d alça de gradiente" +msgstr[1] " de um total de %d alças de gradiente" #. TRANSLATORS: Mind the space in front. (Refers to gradient handles selected). This is part of a compound message #: ../src/ui/tools/gradient-tool.cpp:124 ../src/ui/tools/gradient-tool.cpp:133 #: ../src/ui/tools/gradient-tool.cpp:140 ../src/ui/tools/mesh-tool.cpp:123 #: ../src/ui/tools/mesh-tool.cpp:134 ../src/ui/tools/mesh-tool.cpp:142 -#, fuzzy, c-format +#, c-format msgid " on %d selected object" msgid_plural " on %d selected objects" -msgstr[0] "Exportar em grupo %d objectos seleccionados" -msgstr[1] "Exportar em grupo %d objectos seleccionados" +msgstr[0] " em %d objeto selecionado" +msgstr[1] " em %d objetos selecionados" #. TRANSLATORS: This is a part of a compound message (out of two more indicating: grandint handle count & object count) #: ../src/ui/tools/gradient-tool.cpp:130 ../src/ui/tools/mesh-tool.cpp:130 -#, fuzzy, c-format +#, c-format msgid "" "One handle merging %d stop (drag with Shift to separate) selected" msgid_plural "" "One handle merging %d stops (drag with Shift to separate) selected" msgstr[0] "" -"Uma alça mesclando %d paradas (arraste com Shift para separar) " -"selecionadas de %d alças de degradê em %d objecto(s) seleccionado(s)" +"Uma alça a fundir %d paragem (arrastar com Shift para separar) " +"selecionada" msgstr[1] "" -"Uma alça mesclando %d paradas (arraste com Shift para separar) " -"selecionadas de %d alças de degradê em %d objecto(s) seleccionado(s)" +"Uma alça a fundir %d paragens (arrastar com Shift para separar) " +"selecionadas" #. TRANSLATORS: The plural refers to number of selected gradient handles. This is part of a compound message (part two indicates selected object count) #: ../src/ui/tools/gradient-tool.cpp:138 -#, fuzzy, c-format +#, c-format msgid "%d gradient handle selected out of %d" msgid_plural "%d gradient handles selected out of %d" -msgstr[0] "" -"%d de %d alças de degradê selecionadas em %d objecto(s) " -"seleccionado(s)" -msgstr[1] "" -"%d de %d alças de degradê selecionadas em %d objecto(s) " -"seleccionado(s)" +msgstr[0] "%d alças de gradiente selecionada de um total de %d" +msgstr[1] "%d alças de gradiente selecionadas de um total de %d" #. TRANSLATORS: The plural refers to number of selected objects #: ../src/ui/tools/gradient-tool.cpp:145 -#, fuzzy, c-format +#, c-format msgid "No gradient handles selected out of %d on %d selected object" msgid_plural "" "No gradient handles selected out of %d on %d selected objects" msgstr[0] "" -"Nenhuma alça de degradê selecionada de %d em %d objecto(s) " -"seleccionado(s)" +"Nenhuma alça de gradiente selecionada de um total de %d em %d objeto " +"selecionado" msgstr[1] "" -"Nenhuma alça de degradê selecionada de %d em %d objecto(s) " -"seleccionado(s)" +"Nenhuma alça de gradiente selecionada de um total de %d em %d objetos " +"selecionados" #: ../src/ui/tools/gradient-tool.cpp:433 msgid "Simplify gradient" -msgstr "Simplificar degradê" +msgstr "Simplificar gradiente" #: ../src/ui/tools/gradient-tool.cpp:510 msgid "Create default gradient" -msgstr "Criar degradê padrão" +msgstr "Criar gradiente padrão" #: ../src/ui/tools/gradient-tool.cpp:569 ../src/ui/tools/mesh-tool.cpp:561 msgid "Draw around handles to select them" -msgstr "Arraste em redor das alças para selecioná-las" +msgstr "Desenhar em redor das alças para selecioná-las" #: ../src/ui/tools/gradient-tool.cpp:690 msgid "Ctrl: snap gradient angle" -msgstr "Ctrl: divide o ângulo do degradê" +msgstr "Ctrl: atrair ao ângulo do gradiente" #: ../src/ui/tools/gradient-tool.cpp:691 msgid "Shift: draw gradient around the starting point" -msgstr "Shift: desenhar o degradê em redor do ponto inicial" +msgstr "Shift: desenhar o gradiente em redor do ponto inicial" #: ../src/ui/tools/gradient-tool.cpp:945 ../src/ui/tools/mesh-tool.cpp:977 #, c-format msgid "Gradient for %d object; with Ctrl to snap angle" msgid_plural "Gradient for %d objects; with Ctrl to snap angle" msgstr[0] "" -"Degradê para objectos %d; use Ctrl para ângulos exatos" +"Gradiente para %d objeto; com Ctrl para atrair ao ângulo" msgstr[1] "" -"Degradês para objectos %d; use Ctrl para ângulos exatos" +"Gradiente para %d objetos; com Ctrl para atrair ao ângulo" #: ../src/ui/tools/gradient-tool.cpp:949 ../src/ui/tools/mesh-tool.cpp:981 msgid "Select objects on which to create gradient." -msgstr "Seleccione objectos onde criar um degradê." +msgstr "Selecionar objetos nos quais criar um gradiente." #: ../src/ui/tools/lpe-tool.cpp:195 msgid "Choose a construction tool from the toolbar." -msgstr "" +msgstr "Escolher uma ferramenta de contrução da barra de ferramentas." #. create the knots #: ../src/ui/tools/measure-tool.cpp:349 msgid "Measure start, Shift+Click for position dialog" msgstr "" +"Início da medição; Shift+Click para abrir a janela de posicionamento" #: ../src/ui/tools/measure-tool.cpp:355 msgid "Measure end, Shift+Click for position dialog" msgstr "" +"Fim da medição; Shift+Click para abrir a janela de posicionamento" #: ../src/ui/tools/measure-tool.cpp:747 ../share/extensions/measure.inx.h:2 msgid "Measure" @@ -25598,106 +24130,95 @@ msgstr "Medida" #: ../src/ui/tools/measure-tool.cpp:752 msgid "Base" -msgstr "" +msgstr "Base" #: ../src/ui/tools/measure-tool.cpp:761 msgid "Add guides from measure tool" -msgstr "" +msgstr "Adicionar guias com base na ferramenta Fita Métrica" #: ../src/ui/tools/measure-tool.cpp:781 -msgid "Add Stored to measure tool" -msgstr "" +msgid "Keep last measure on the canvas, for reference" +msgstr "Manter última medição na área de trabalho, para referência" #: ../src/ui/tools/measure-tool.cpp:801 -#, fuzzy msgid "Convert measure to items" -msgstr "Converter borda do objecto em caminho" +msgstr "Converter medição em objeto permanente" #: ../src/ui/tools/measure-tool.cpp:839 msgid "Add global measure line" -msgstr "" +msgstr "Adicionar cota de medida" #: ../src/ui/tools/measure-tool.cpp:1290 ../src/ui/tools/measure-tool.cpp:1292 -#, fuzzy, c-format +#, c-format msgid "Crossing %lu" -msgstr "Desfocagem gaussiana" +msgstr "A cruzar %lu" #. TRANSLATORS: Mind the space in front. This is part of a compound message #: ../src/ui/tools/mesh-tool.cpp:122 ../src/ui/tools/mesh-tool.cpp:133 -#, fuzzy, c-format +#, c-format msgid " out of %d mesh handle" msgid_plural " out of %d mesh handles" -msgstr[0] "Mover alça do degradê" -msgstr[1] "Mover alça do degradê" +msgstr[0] " de um total de %d alça da malha" +msgstr[1] " de um total de %d alças da malha" #: ../src/ui/tools/mesh-tool.cpp:140 -#, fuzzy, c-format +#, c-format msgid "%d mesh handle selected out of %d" msgid_plural "%d mesh handles selected out of %d" -msgstr[0] "" -"%d de %d alças de degradê selecionadas em %d objecto(s) " -"seleccionado(s)" -msgstr[1] "" -"%d de %d alças de degradê selecionadas em %d objecto(s) " -"seleccionado(s)" +msgstr[0] "%d alça selecionada da malha de um total de %d alças" +msgstr[1] "%d alças selecionadas da malha de um total de %d alças" #. TRANSLATORS: The plural refers to number of selected objects #: ../src/ui/tools/mesh-tool.cpp:147 -#, fuzzy, c-format +#, c-format msgid "No mesh handles selected out of %d on %d selected object" msgid_plural "No mesh handles selected out of %d on %d selected objects" msgstr[0] "" -"Nenhuma alça de degradê selecionada de %d em %d objecto(s) " -"seleccionado(s)" +"Nenhumas alças de gradiente selecionadas de um total de %d alças em " +"%d objeto selecionado" msgstr[1] "" -"Nenhuma alça de degradê selecionada de %d em %d objecto(s) " -"seleccionado(s)" +"Nenhumas alças de gradiente selecionadas de um total de %d alças em " +"%d objetos selecionados" #: ../src/ui/tools/mesh-tool.cpp:311 msgid "Split mesh row/column" -msgstr "" +msgstr "Separar coluna/linha da malha" #: ../src/ui/tools/mesh-tool.cpp:397 msgid "Toggled mesh path type." -msgstr "" +msgstr "ALternado o tipo de caminho da malha." #: ../src/ui/tools/mesh-tool.cpp:401 msgid "Approximated arc for mesh side." -msgstr "" +msgstr "Aproximado o arco para o lado da malha." #: ../src/ui/tools/mesh-tool.cpp:405 msgid "Toggled mesh tensors." -msgstr "" +msgstr "Tensores da malha invertidos." #: ../src/ui/tools/mesh-tool.cpp:409 -#, fuzzy msgid "Smoothed mesh corner color." -msgstr "Suavidade" +msgstr "Cor do canto suave da malha." #: ../src/ui/tools/mesh-tool.cpp:413 -#, fuzzy msgid "Picked mesh corner color." -msgstr "Capturar a tonalidade da cor" +msgstr "Capturada cor do canto da malha." #: ../src/ui/tools/mesh-tool.cpp:489 -#, fuzzy msgid "Create default mesh" -msgstr "Criar degradê padrão" +msgstr "Criar gradiente de malha padrão" #: ../src/ui/tools/mesh-tool.cpp:713 -#, fuzzy msgid "FIXMECtrl: snap mesh angle" -msgstr "Ctrl: agarra o ângulo" +msgstr "CORRIGIRCtrl: atrair ao ângulo da malha" #: ../src/ui/tools/mesh-tool.cpp:714 -#, fuzzy msgid "FIXMEShift: draw mesh around the starting point" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "CORRIGIRShift: desenhar malha em redor do ponto inicial" #: ../src/ui/tools/mesh-tool.cpp:971 -#, fuzzy msgid "Create mesh" -msgstr "Criar degradê padrão" +msgstr "Criar malha" #: ../src/ui/tools/node-tool.cpp:648 msgctxt "Node tool tip" @@ -25705,53 +24226,56 @@ msgid "" "Shift: drag to add nodes to the selection, click to toggle object " "selection" msgstr "" +"Shift: arrastar para adicionar nós à seleção; clicar para alterar a " +"seleção do objeto" #: ../src/ui/tools/node-tool.cpp:652 -#, fuzzy msgctxt "Node tool tip" msgid "Shift: drag to add nodes to the selection" -msgstr "Shift: desenhar em redor do ponto inicial" +msgstr "Shift: arrastar para adicionar nós à seleção" #: ../src/ui/tools/node-tool.cpp:681 -#, fuzzy, c-format +#, c-format msgid "%u of %u node selected." msgid_plural "%u of %u nodes selected." -msgstr[0] "%i de %i nó seleccionado; %s." -msgstr[1] "%i de %i nós seleccionados; %s." +msgstr[0] "%u de %u nó selecionado." +msgstr[1] "%u de %u nós selecionados." #: ../src/ui/tools/node-tool.cpp:688 -#, fuzzy, c-format +#, c-format msgctxt "Node tool tip" msgid "%s Drag to select nodes, click to edit only this object (more: Shift)" -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "" +"%s Arrastar para selecionar nós; clicar para editar apenas este objeto " +"(mais: Shift)" #: ../src/ui/tools/node-tool.cpp:694 -#, fuzzy, c-format +#, c-format msgctxt "Node tool tip" msgid "%s Drag to select nodes, click clear the selection" -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "%s Arrastar para selecionar nós; clicar para limpar a seleção" #: ../src/ui/tools/node-tool.cpp:703 msgctxt "Node tool tip" msgid "Drag to select nodes, click to edit only this object" -msgstr "" +msgstr "Arrastar para selecionar nós; clicar para editar apenas este objeto" #: ../src/ui/tools/node-tool.cpp:706 -#, fuzzy msgctxt "Node tool tip" msgid "Drag to select nodes, click to clear the selection" -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "Arrastar para selecionar nós; clicar para limpar a seleção" #: ../src/ui/tools/node-tool.cpp:711 msgctxt "Node tool tip" msgid "Drag to select objects to edit, click to edit this object (more: Shift)" msgstr "" +"Arrastar para selecionar os objetos a editar; clicar para editar este objeto " +"(mais: Shift)" #: ../src/ui/tools/node-tool.cpp:714 -#, fuzzy msgctxt "Node tool tip" msgid "Drag to select objects to edit" -msgstr "Converte os objectos seleccionados em caminhos" +msgstr "Arrastar para selecionar os objetos a editar" #: ../src/ui/tools/pen-tool.cpp:223 ../src/ui/tools/pencil-tool.cpp:455 msgid "Drawing cancelled" @@ -25759,7 +24283,7 @@ msgstr "Desenho cancelado" #: ../src/ui/tools/pen-tool.cpp:463 ../src/ui/tools/pencil-tool.cpp:196 msgid "Continuing selected path" -msgstr "Continuando o caminho seleccionado" +msgstr "Continuando o caminho selecionado" #: ../src/ui/tools/pen-tool.cpp:473 ../src/ui/tools/pencil-tool.cpp:204 msgid "Creating new path" @@ -25767,72 +24291,75 @@ msgstr "Criar novo caminho" #: ../src/ui/tools/pen-tool.cpp:475 ../src/ui/tools/pencil-tool.cpp:207 msgid "Appending to selected path" -msgstr "Acrescentando ao caminho seleccionado" +msgstr "Acrescentando ao caminho selecionado" #: ../src/ui/tools/pen-tool.cpp:640 msgid "Click or click and drag to close and finish the path." msgstr "" -"Clique ou clique e arraste para fechar e terminar o caminho." +"Clicar ou clicar e arrastar para fechar e terminar o caminho." #: ../src/ui/tools/pen-tool.cpp:642 -#, fuzzy msgid "" "Click or click and drag to close and finish the path. Shift" "+Click make a cusp node" msgstr "" -"Clique ou clique e arraste para fechar e terminar o caminho." +"Clicar ou clicar e arrastar para fechar e terminar o caminho. " +"Shift+clicar para fazer um nó afiado" #: ../src/ui/tools/pen-tool.cpp:654 msgid "" "Click or click and drag to continue the path from this point." msgstr "" -"Clique ou clique e arraste para continuar o caminho a partir " +"Clicar ou clicar e arrastar para continuar o caminho a partir " "deste ponto." #: ../src/ui/tools/pen-tool.cpp:656 -#, fuzzy msgid "" "Click or click and drag to continue the path from this point. " "Shift+Click make a cusp node" msgstr "" -"Clique ou clique e arraste para continuar o caminho a partir " -"deste ponto." +"Clicar ou clicar e arrastar para continuar o caminho a partir " +"deste ponto. Shift+clicar para fazer um nó afiado" #: ../src/ui/tools/pen-tool.cpp:1797 -#, fuzzy, c-format +#, c-format msgid "" "Curve segment: angle %3.2f°, distance %s; with Ctrl to " "snap angle, Enter or Shift+Enter to finish the path" msgstr "" -"%s: ângulo %3.2f°, distância %s; com Ctrl para observar o " -"ângulo, Enter para terminar o camingo." +"Segmento curvo: ângulo %3.2f°, distância %s; com Ctrl " +"para atrair ao ângulo, Enter ou Shift+Enter para terminar o " +"caminho" #: ../src/ui/tools/pen-tool.cpp:1798 -#, fuzzy, c-format +#, c-format msgid "" "Line segment: angle %3.2f°, distance %s; with Ctrl to " "snap angle, Enter or Shift+Enter to finish the path" msgstr "" -"%s: ângulo %3.2f°, distância %s; com Ctrl para observar o " -"ângulo, Enter para terminar o camingo." +"Segmento linha: ângulo %3.2f°, distância %s; com Ctrl " +"para atrair ao ângulo, Enter ou Shift+Enter para terminar o " +"caminho" #: ../src/ui/tools/pen-tool.cpp:1801 -#, fuzzy, c-format +#, c-format msgid "" "Curve segment: angle %3.2f°, distance %s; with Shift+Click make a cusp node, Enter or Shift+Enter to finish the path" msgstr "" -"%s: ângulo %3.2f°, distância %s; com Ctrl para observar o " -"ângulo, Enter para terminar o camingo." +"Segmento curvo: ângulo %3.2f°, distância %s; com Shift" +"+clicar fazer um nó afiado, Enter ou Shift+Enter para " +"terminar o caminho" #: ../src/ui/tools/pen-tool.cpp:1802 -#, fuzzy, c-format +#, c-format msgid "" "Line segment: angle %3.2f°, distance %s; with Shift+Click " "make a cusp node, Enter or Shift+Enter to finish the path" msgstr "" -"%s: ângulo %3.2f°, distância %s; com Ctrl para observar o " -"ângulo, Enter para terminar o camingo." +"Segmento de linha: ângulo %3.2f°, distância %s; com Shift" +"+clicar fazer um nó afiado, Enter ou Shift+Enter para " +"terminar o caminho" #: ../src/ui/tools/pen-tool.cpp:1819 #, c-format @@ -25841,63 +24368,67 @@ msgid "" "angle" msgstr "" "Alça da curva: ângulo %3.2f°, comprimento %s; com Ctrl " -"para observar o ângulo." +"para atrair ao ângulo" #: ../src/ui/tools/pen-tool.cpp:1843 -#, fuzzy, c-format +#, c-format msgid "" "Curve handle, symmetric: angle %3.2f°, length %s; with Ctrl to snap angle, with Shift to move this handle only" msgstr "" -"%s: ângulo %3.2f°, comprimento %s; com Ctrl para observar " -"o ângulo, com Shift somente para mover esta alça." +"Alça da curva, simétrica: ângulo %3.2f°, comprimento %s; com " +"Ctrl para atrair ao ângulo, com Shift para mover apenas esta " +"alça" #: ../src/ui/tools/pen-tool.cpp:1844 -#, fuzzy, c-format +#, c-format msgid "" "Curve handle: angle %3.2f°, length %s; with Ctrl to snap " "angle, with Shift to move this handle only" msgstr "" -"%s: ângulo %3.2f°, comprimento %s; com Ctrl para observar " -"o ângulo, com Shift somente para mover esta alça." +"Alça da curva: ângulo %3.2f°, comprimento %s; com Ctrl " +"para atrair ao ângulo, com Shift para mover apenas esta alça" #: ../src/ui/tools/pen-tool.cpp:1978 msgid "Drawing finished" -msgstr "Desenho concluído" +msgstr "Desenho terminado" #: ../src/ui/tools/pencil-tool.cpp:308 msgid "Release here to close and finish the path." -msgstr "Solte aqui para fechar e terminar o caminho." +msgstr "Soltar aqui para fechar e terminar o caminho." #: ../src/ui/tools/pencil-tool.cpp:314 msgid "Drawing a freehand path" -msgstr "Desenhar caminhos à mão-livre" +msgstr "Desenhar caminho à mão-livre" #: ../src/ui/tools/pencil-tool.cpp:319 msgid "Drag to continue the path from this point." -msgstr "Arraste para continuar o caminho a partir deste ponto." +msgstr "Arrastar para continuar o caminho a partir deste ponto." #. Write curves to object #: ../src/ui/tools/pencil-tool.cpp:402 msgid "Finishing freehand" -msgstr "Finalizando mão-livre" +msgstr "Desenho à mão-livre terminado" #: ../src/ui/tools/pencil-tool.cpp:504 msgid "" "Sketch mode: holding Alt interpolates between sketched paths. " "Release Alt to finalize." msgstr "" +"Modo esboço: manter Alt premido faz interpolação entre os " +"caminhos esboçados. Libertar Alt para finalizar." #: ../src/ui/tools/pencil-tool.cpp:531 -#, fuzzy msgid "Finishing freehand sketch" -msgstr "Finalizando mão-livre" +msgstr "Esboço à mão-livre terminado" #: ../src/ui/tools/rect-tool.cpp:277 msgid "" "Ctrl: make square or integer-ratio rect, lock a rounded corner " "circular" -msgstr "Ctrl: faz o quadrado ou retângulo Bloquear um canto arredondado" +msgstr "" +"Ctrl: fazer um quadrado ou retângulo de rácio inteiro; manter " +"circular um canto aredondado" #: ../src/ui/tools/rect-tool.cpp:438 #, c-format @@ -25905,26 +24436,26 @@ msgid "" "Rectangle: %s × %s (constrained to ratio %d:%d); with Shift to draw around the starting point" msgstr "" -"Retângulo: %s × %s (restrito à razão %d:%d); Shift para " -"desenhar em redor do ponto inicial" +"Retângulo: %s × %s (restringido ao rácio %d:%d); com Shift para desenhar em redor do ponto inicial" #: ../src/ui/tools/rect-tool.cpp:441 -#, fuzzy, c-format +#, c-format msgid "" "Rectangle: %s × %s (constrained to golden ratio 1.618 : 1); with " "Shift to draw around the starting point" msgstr "" -"Retângulo: %s × %s (restrito à razão %d:%d); Shift para " -"desenhar em redor do ponto inicial" +"Retângulo: %s × %s (restringido ao rácio 1.618 : 1); com " +"Shift para desenhar em redor do ponto inicial" #: ../src/ui/tools/rect-tool.cpp:443 -#, fuzzy, c-format +#, c-format msgid "" "Rectangle: %s × %s (constrained to golden ratio 1 : 1.618); with " "Shift to draw around the starting point" msgstr "" -"Retângulo: %s × %s (restrito à razão %d:%d); Shift para " -"desenhar em redor do ponto inicial" +"Retângulo: %s × %s (restringido ao rácio 1 : 1.618); com " +"Shift para desenhar em redor do ponto inicial" #: ../src/ui/tools/rect-tool.cpp:447 #, c-format @@ -25933,7 +24464,8 @@ msgid "" "ratio rectangle; with Shift to draw around the starting point" msgstr "" "Retângulo: %s × %s; com Ctrl para fazer um quadrado ou " -"retângulo; Shift para desenhar em redor do ponto inicial" +"retângulo de rácio inteiro; com Shift para desenhar em redor do ponto " +"inicial" #: ../src/ui/tools/rect-tool.cpp:470 msgid "Create rectangle" @@ -25941,16 +24473,15 @@ msgstr "Criar retângulo" #: ../src/ui/tools/select-tool.cpp:156 msgid "Click selection to toggle scale/rotation handles" -msgstr "Clique na selecção para trocar as alças ampliar/girar" +msgstr "Clicar na seleção para alternar entre as alças de redimensionar/rodar" #: ../src/ui/tools/select-tool.cpp:157 -#, fuzzy msgid "" "No objects selected. Click, Shift+click, Alt+scroll mouse on top of objects, " "or drag around objects to select." msgstr "" -"Nenhum objecto seleccionado. Clique, clique com shift ou arraste em redor " -"dos objectos para selecionar." +"Nenhum objeto selecionado. Clicar, Shift+clicar, Alt+rodar (botão central do " +"rato) por cima dos objetos, ou arrastar à volta dos objetos para selecionar." #: ../src/ui/tools/select-tool.cpp:210 msgid "Move canceled." @@ -25965,149 +24496,149 @@ msgid "" "Draw over objects to select them; release Alt to switch to " "rubberband selection" msgstr "" -"Arraste sobre os objectos para selecioná-los; solte Alt para " -"alternar para a selecção elástica" +"Arrastar sobre os objetos para os selecionar; libertar Alt " +"para mudar para a seleção elástica" #: ../src/ui/tools/select-tool.cpp:640 msgid "" "Drag around objects to select them; press Alt to switch to " "touch selection" msgstr "" -"Arraste em redor dos objectos para selecioná-los; aperte Alt " -"para alternar para a selecção por toque" +"Arrastar em redor dos objetos para os selecionar; pressionar Alt para mudar para a seleção por toque" #: ../src/ui/tools/select-tool.cpp:921 msgid "Ctrl: click to select in groups; drag to move hor/vert" msgstr "" -"Ctrl: clique para selecionar em grupos, arraste para mover " +"Ctrl: clicar para selecionar em grupos; arrastar para mover " "horizontalmente/verticalmente" #: ../src/ui/tools/select-tool.cpp:922 msgid "Shift: click to toggle select; drag for rubberband selection" msgstr "" -"Shift: clique para selecionar ou remover da selecção, arraste para " -"selecção elástica" +"Shift: clicar para alternar seleção; arrastar para seleção elástica" #: ../src/ui/tools/select-tool.cpp:923 -#, fuzzy msgid "" "Alt: click to select under; scroll mouse-wheel to cycle-select; drag " "to move selected or select by touch" msgstr "" -"Alt: clique para selecionar abaixo, arraste para mover a selecção ou " -"selecionar por toque" +"Alt: clicar para selecionar os de baixo; rodar botão do meio do rato " +"para seleção cíclica; arrastar para mover o selecionado ou selecionar por " +"toque" #: ../src/ui/tools/select-tool.cpp:1131 msgid "Selected object is not a group. Cannot enter." -msgstr "O objecto seleccionado não é um grupo. Não pode entrar." +msgstr "O objeto selecionado não é um grupo. Não pode entrar." #: ../src/ui/tools/spiral-tool.cpp:249 msgid "Ctrl: snap angle" -msgstr "Ctrl: agarra o ângulo" +msgstr "Ctrl: atrair ao ângulo" #: ../src/ui/tools/spiral-tool.cpp:251 msgid "Alt: lock spiral radius" -msgstr "Alt: trava o raio da espiral" +msgstr "Alt: bloqueia o raio da espiral" #: ../src/ui/tools/spiral-tool.cpp:390 #, c-format msgid "" "Spiral: radius %s, angle %5g°; with Ctrl to snap angle" msgstr "" -"Espiral: raio %s, ângulo %5g°; com Ctrl para segurar o " +"Espiral: raio %s, ângulo %5g°; com Ctrl para atrair ao " "ângulo" #: ../src/ui/tools/spiral-tool.cpp:411 msgid "Create spiral" -msgstr "Criar espirais" +msgstr "Criar espiral" #: ../src/ui/tools/spray-tool.cpp:214 ../src/ui/tools/tweak-tool.cpp:157 #, c-format msgid "%i object selected" msgid_plural "%i objects selected" -msgstr[0] "%i objecto seleccionado" -msgstr[1] "%i objectos seleccionados" +msgstr[0] "%i objeto selecionado" +msgstr[1] "%i objetos selecionados" #: ../src/ui/tools/spray-tool.cpp:216 ../src/ui/tools/tweak-tool.cpp:159 -#, fuzzy msgid "Nothing selected" -msgstr "Nada foi apagado." +msgstr "Nada selecionado" #: ../src/ui/tools/spray-tool.cpp:221 -#, fuzzy, c-format +#, c-format msgid "" "%s. Drag, click or click and scroll to spray copies of the initial " "selection." -msgstr "Aplicar efeito escolhido à selecção" +msgstr "" +"%s. Arrastar, clicar ou clicar e rodar botão central do rato para pulverizar " +"cópias da seleção inicial." #: ../src/ui/tools/spray-tool.cpp:224 -#, fuzzy, c-format +#, c-format msgid "" "%s. Drag, click or click and scroll to spray clones of the initial " "selection." -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "" +"%s. Arrastar, clicar ou clicar e rodar botão central do rato para pulverizar " +"clones da seleção inicial." #: ../src/ui/tools/spray-tool.cpp:227 -#, fuzzy, c-format +#, c-format msgid "" "%s. Drag, click or click and scroll to spray in a single path of the " "initial selection." -msgstr "Aplicar efeito escolhido à selecção" +msgstr "" +"%s. Arrastar, clicar ou clicar e rodar botão central do rato para pulverizar " +"num só caminho da seleção inicial." #: ../src/ui/tools/spray-tool.cpp:1305 -#, fuzzy msgid "Nothing selected! Select objects to spray." -msgstr "Tornando áspero %d objecto seleccionado" +msgstr "Nada selecionado! Selecionar objetos para pulverizar." #: ../src/ui/tools/spray-tool.cpp:1380 ../src/widgets/spray-toolbar.cpp:360 -#, fuzzy msgid "Spray with copies" -msgstr "Espaço entre cópias:" +msgstr "Pulverizar com cópias" #: ../src/ui/tools/spray-tool.cpp:1384 ../src/widgets/spray-toolbar.cpp:367 -#, fuzzy msgid "Spray with clones" -msgstr "Procurar clones" +msgstr "Pulverizar com clones" #: ../src/ui/tools/spray-tool.cpp:1388 -#, fuzzy msgid "Spray in single path" -msgstr "Criar novo caminho" +msgstr "Pulverizar num único caminho" #: ../src/ui/tools/star-tool.cpp:261 msgid "Ctrl: snap angle; keep rays radial" -msgstr "Ctrl: agarrar o ângulo; preserva os raios radiais" +msgstr "Ctrl: atrair ao ângulo; mantém os raios radiais" #: ../src/ui/tools/star-tool.cpp:407 #, c-format msgid "" "Polygon: radius %s, angle %5g°; with Ctrl to snap angle" msgstr "" -"Polígono: raio %s, ângulo %5g°; com Ctrl para segurar o " +"Polígono: raio %s, ângulo %5g°; com Ctrl para atrair ao " "ângulo" #: ../src/ui/tools/star-tool.cpp:408 #, c-format msgid "Star: radius %s, angle %5g°; with Ctrl to snap angle" msgstr "" -"Estrela: raio %s, ângulo %5g°; com Ctrl para segurar o " +"Estrela: raio %s, ângulo %5g°; com Ctrl para atrair ao " "ângulo" #: ../src/ui/tools/star-tool.cpp:436 msgid "Create star" -msgstr "Criar estrela" +msgstr "Criar estrela ou polígono" #: ../src/ui/tools/text-tool.cpp:370 msgid "Click to edit the text, drag to select part of the text." msgstr "" -"Clique para editar o texto, arrastar para selecionar parte do " +"Clicar para editar o texto, arrastar para selecionar parte do " "texto." #: ../src/ui/tools/text-tool.cpp:372 msgid "" "Click to edit the flowed text, drag to select part of the text." msgstr "" -"Clique para editar o texto fluido, arrastar para selecionar " +"Clicar para editar o texto fluido, arrastar para selecionar " "parte do texto." #: ../src/ui/tools/text-tool.cpp:426 @@ -26134,35 +24665,35 @@ msgstr "Unicode (Enter para finalizar): " #: ../src/ui/tools/text-tool.cpp:586 #, c-format msgid "Flowed text frame: %s × %s" -msgstr "Caixa de texto: %s × %s" +msgstr "Moldura do texto fluido: %s × %s" #: ../src/ui/tools/text-tool.cpp:644 msgid "Type text; Enter to start new line." -msgstr "Entre com o texto; Pressione Enter para iniciar uma nova linha." +msgstr "Introduzir texto; Enter para iniciar uma nova linha." #: ../src/ui/tools/text-tool.cpp:655 msgid "Flowed text is created." -msgstr "Caixa de texto criada." +msgstr "O texto fluido está criado." #: ../src/ui/tools/text-tool.cpp:656 msgid "Create flowed text" -msgstr "Criar caixa de texto" +msgstr "Criar texto fluido" #: ../src/ui/tools/text-tool.cpp:658 msgid "" "The frame is too small for the current font size. Flowed text not " "created." msgstr "" -"O quadro é muito pequeno para o actual tamanho da fonte. Caixa de " -"texto não criada." +"A moldura é muito pequena para o tamanho da fonte atual. O texto " +"fluido não foi criado." #: ../src/ui/tools/text-tool.cpp:794 msgid "No-break space" -msgstr "Espaço sem quebras" +msgstr "Espaço sem quebras de linha" #: ../src/ui/tools/text-tool.cpp:795 msgid "Insert no-break space" -msgstr "Inserir espaço sem quebras" +msgstr "Inserir espaço sem quebras de linha" #: ../src/ui/tools/text-tool.cpp:831 msgid "Make bold" @@ -26182,50 +24713,50 @@ msgstr "Backspace" #: ../src/ui/tools/text-tool.cpp:981 msgid "Kern to the left" -msgstr "Ajustar Kern para a esquerda" +msgstr "Entre-linha para a esquerda" #: ../src/ui/tools/text-tool.cpp:1005 msgid "Kern to the right" -msgstr "Ajustar Kern para a direita" +msgstr "Entre-linha para a direita" #: ../src/ui/tools/text-tool.cpp:1029 msgid "Kern up" -msgstr "Aumentar Kern" +msgstr "Entre-linha para cima" #: ../src/ui/tools/text-tool.cpp:1053 msgid "Kern down" -msgstr "Diminuir Kern" +msgstr "Entre-linha para baixo" #: ../src/ui/tools/text-tool.cpp:1128 msgid "Rotate counterclockwise" -msgstr "Girar no sentido anti-horário" +msgstr "Rodar no sentido anti-horário" #: ../src/ui/tools/text-tool.cpp:1148 msgid "Rotate clockwise" -msgstr "Girar no sentido horário" +msgstr "Rodar no sentido horário" #: ../src/ui/tools/text-tool.cpp:1164 msgid "Contract line spacing" -msgstr "Diminuir espaçamento entre linhas" +msgstr "Diminuir espaçamento entre as linhas" #: ../src/ui/tools/text-tool.cpp:1170 msgid "Contract letter spacing" -msgstr "Diminuir espaçamento entre letras" +msgstr "Diminuir espaçamento entre as letras" #: ../src/ui/tools/text-tool.cpp:1187 msgid "Expand line spacing" -msgstr "Aumentar espaçamento entre linhas" +msgstr "Aumentar espaçamento entre as linhas" #: ../src/ui/tools/text-tool.cpp:1193 msgid "Expand letter spacing" -msgstr "Aumentar espaçamento entre letras" +msgstr "Aumentar espaçamento entre as letras" #: ../src/ui/tools/text-tool.cpp:1323 msgid "Paste text" msgstr "Colar texto" #: ../src/ui/tools/text-tool.cpp:1573 -#, fuzzy, c-format +#, c-format msgid "" "Type or edit flowed text (%d character%s); Enter to start new " "paragraph." @@ -26233,48 +24764,55 @@ msgid_plural "" "Type or edit flowed text (%d characters%s); Enter to start new " "paragraph." msgstr[0] "" -"Entre com o texto; Pressione Enter para começar um novo parágrafo." +"Escrever ou editar texto fluido (%d caractere%s); Enter para começar " +"um novo parágrafo." msgstr[1] "" -"Entre com o texto; Pressione Enter para começar um novo parágrafo." +"Escrever ou editar texto fluido (%d caracteres%s); Enter para começar " +"um novo parágrafo." #: ../src/ui/tools/text-tool.cpp:1575 -#, fuzzy, c-format +#, c-format msgid "Type or edit text (%d character%s); Enter to start new line." msgid_plural "" "Type or edit text (%d characters%s); Enter to start new line." msgstr[0] "" -"Entre com o texto; Pressione Enter para iniciar uma nova linha." +"Escrever ou editar texto (%d caractere%s); Enter para começar uma " +"nova linha." msgstr[1] "" -"Entre com o texto; Pressione Enter para iniciar uma nova linha." +"Escrever ou editar texto (%d caracteres%s); Enter para começar uma " +"nova linha." #: ../src/ui/tools/text-tool.cpp:1685 msgid "Type text" -msgstr "Digite o texto" +msgstr "Escrever o texto" #: ../src/ui/tools/tool-base.cpp:700 -#, fuzzy msgid "Space+mouse move to pan canvas" -msgstr "Espaço + arrastar o mouse para percorrer a área de desenho" +msgstr "Espaço + mover o rato para arrastar a área de desenho" #: ../src/ui/tools/tweak-tool.cpp:164 #, c-format msgid "%s. Drag to move." -msgstr "" +msgstr "%s. Arrastar para mover." #: ../src/ui/tools/tweak-tool.cpp:168 #, c-format msgid "%s. Drag or click to move in; with Shift to move out." msgstr "" +"%s. Arrastar ou clicar para mover para dentro; com Shift para " +"mover para fora." #: ../src/ui/tools/tweak-tool.cpp:176 #, c-format msgid "%s. Drag or click to move randomly." -msgstr "" +msgstr "%s. Arrastar ou clicar para mover em direções aleatórias." #: ../src/ui/tools/tweak-tool.cpp:180 #, c-format msgid "%s. Drag or click to scale down; with Shift to scale up." msgstr "" +"%s. Arrastar ou clicar para diminuir tamanho; com Shift para " +"aumentar tamanho." #: ../src/ui/tools/tweak-tool.cpp:188 #, c-format @@ -26282,216 +24820,204 @@ msgid "" "%s. Drag or click to rotate clockwise; with Shift, " "counterclockwise." msgstr "" +"%s. Arrastar ou clicar para rodar no sentido horário; com Shift para " +"rodar no sentido anti-horário." #: ../src/ui/tools/tweak-tool.cpp:196 #, c-format msgid "%s. Drag or click to duplicate; with Shift, delete." msgstr "" +"%s. Arrastar ou clicar para duplicar; com Shift para eliminar." #: ../src/ui/tools/tweak-tool.cpp:204 #, c-format msgid "%s. Drag to push paths." -msgstr "" +msgstr "%s. Arrastar para puxar caminhos." #: ../src/ui/tools/tweak-tool.cpp:208 #, c-format msgid "%s. Drag or click to inset paths; with Shift to outset." msgstr "" +"%s. Arrastar ou clicar para encolher caminhos para dentro; com Shift " +"para expandir caminhos para fora." #: ../src/ui/tools/tweak-tool.cpp:216 #, c-format msgid "%s. Drag or click to attract paths; with Shift to repel." msgstr "" +"%s. Arrastar ou clicar para atrair caminhos; com Shift para " +"repelir." #: ../src/ui/tools/tweak-tool.cpp:224 #, c-format msgid "%s. Drag or click to roughen paths." -msgstr "" +msgstr "%s. Arrastar ou clicar para tornar os caminhos rugosos." #: ../src/ui/tools/tweak-tool.cpp:228 #, c-format msgid "%s. Drag or click to paint objects with color." msgstr "" +"%s. Arrastar ou clicar para pintar objetos com cor (apenas objetos " +"com cor definida)" #: ../src/ui/tools/tweak-tool.cpp:232 #, c-format msgid "%s. Drag or click to randomize colors." -msgstr "" +msgstr "%s. Arrastar ou clicar para cores aleatórias." #: ../src/ui/tools/tweak-tool.cpp:236 #, c-format msgid "" "%s. Drag or click to increase blur; with Shift to decrease." msgstr "" +"%s. Arrastar ou clicar para aumentar desfocagem; com Shift para " +"diminuir desfocagem." #: ../src/ui/tools/tweak-tool.cpp:1191 msgid "Nothing selected! Select objects to tweak." -msgstr "" +msgstr "Nada selecionado! Selecionar objetos para ajustar." #: ../src/ui/tools/tweak-tool.cpp:1225 -#, fuzzy msgid "Move tweak" -msgstr "Aumentar ajuste" +msgstr "Forças: movimento" #: ../src/ui/tools/tweak-tool.cpp:1229 -#, fuzzy msgid "Move in/out tweak" -msgstr "Ajuste de cor de pintura" +msgstr "Forças: movimento para dentro/fora" #: ../src/ui/tools/tweak-tool.cpp:1233 -#, fuzzy msgid "Move jitter tweak" -msgstr "Ajuste de atração" +msgstr "Forças: variância de mover" #: ../src/ui/tools/tweak-tool.cpp:1237 -#, fuzzy msgid "Scale tweak" -msgstr "Ampliar" +msgstr "Forças: escala" #: ../src/ui/tools/tweak-tool.cpp:1241 -#, fuzzy msgid "Rotate tweak" -msgstr "Ajuste de atração" +msgstr "Forças: rotação" #: ../src/ui/tools/tweak-tool.cpp:1245 -#, fuzzy msgid "Duplicate/delete tweak" -msgstr "Duplicar os objectos seleccionados" +msgstr "Forças: duplicar/eliminar" #: ../src/ui/tools/tweak-tool.cpp:1249 -#, fuzzy msgid "Push path tweak" -msgstr "Ajuste empurrar" +msgstr "Forças: puxar o caminho" #: ../src/ui/tools/tweak-tool.cpp:1253 -#, fuzzy msgid "Shrink/grow path tweak" -msgstr "Encolher ajuste" +msgstr "Forças: encolher/alargar" #: ../src/ui/tools/tweak-tool.cpp:1257 -#, fuzzy msgid "Attract/repel path tweak" -msgstr "Ajuste de atração" +msgstr "Forças: atrair/repelir" #: ../src/ui/tools/tweak-tool.cpp:1261 -#, fuzzy msgid "Roughen path tweak" -msgstr "Ajuste áspero" +msgstr "Forças: rugosidade do caminho" #: ../src/ui/tools/tweak-tool.cpp:1265 msgid "Color paint tweak" -msgstr "Ajuste de cor de pintura" +msgstr "Forças: cor de pintura" #: ../src/ui/tools/tweak-tool.cpp:1269 msgid "Color jitter tweak" -msgstr "" +msgstr "Forças: variância das cores" #: ../src/ui/tools/tweak-tool.cpp:1273 -#, fuzzy msgid "Blur tweak" -msgstr "Ajuste empurrar" +msgstr "Forças: desfocar" #: ../src/ui/widget/color-entry.cpp:31 msgid "Hexadecimal RGBA value of the color" -msgstr "Valor hexadecimal RGBA da cor" +msgstr "Forças: valor hexadecimal RGBA da cor" #: ../src/ui/widget/color-icc-selector.cpp:176 #: ../src/ui/widget/color-scales.cpp:384 -#, fuzzy msgid "_R:" -msgstr "_R" +msgstr "_R:" #. TYPE_RGB_16 #: ../src/ui/widget/color-icc-selector.cpp:177 #: ../src/ui/widget/color-scales.cpp:387 -#, fuzzy msgid "_G:" -msgstr "_G" +msgstr "_G:" #: ../src/ui/widget/color-icc-selector.cpp:178 #: ../src/ui/widget/color-scales.cpp:390 -#, fuzzy msgid "_B:" -msgstr "_B" +msgstr "_B:" #: ../src/ui/widget/color-icc-selector.cpp:180 #: ../share/extensions/nicechart.inx.h:35 -#, fuzzy msgid "Gray" -msgstr "Tons de cinza" +msgstr "Cinzento" #. TYPE_GRAY_16 #: ../src/ui/widget/color-icc-selector.cpp:182 #: ../src/ui/widget/color-icc-selector.cpp:186 #: ../src/ui/widget/color-scales.cpp:410 -#, fuzzy msgid "_H:" -msgstr "_H" +msgstr "_M:" #. TYPE_HSV_16 #: ../src/ui/widget/color-icc-selector.cpp:183 #: ../src/ui/widget/color-icc-selector.cpp:188 #: ../src/ui/widget/color-scales.cpp:413 -#, fuzzy msgid "_S:" -msgstr "_S" +msgstr "_S:" #. TYPE_HLS_16 #: ../src/ui/widget/color-icc-selector.cpp:187 #: ../src/ui/widget/color-scales.cpp:416 -#, fuzzy msgid "_L:" -msgstr "_L" +msgstr "_L:" #: ../src/ui/widget/color-icc-selector.cpp:190 #: ../src/ui/widget/color-icc-selector.cpp:195 #: ../src/ui/widget/color-scales.cpp:438 -#, fuzzy msgid "_C:" -msgstr "_C" +msgstr "_C:" #. TYPE_CMYK_16 #. TYPE_CMY_16 #: ../src/ui/widget/color-icc-selector.cpp:191 #: ../src/ui/widget/color-icc-selector.cpp:196 #: ../src/ui/widget/color-scales.cpp:441 -#, fuzzy msgid "_M:" -msgstr "_M" +msgstr "_M:" #: ../src/ui/widget/color-icc-selector.cpp:192 #: ../src/ui/widget/color-icc-selector.cpp:197 #: ../src/ui/widget/color-scales.cpp:444 -#, fuzzy msgid "_Y:" -msgstr "Y:" +msgstr "_Y:" #: ../src/ui/widget/color-icc-selector.cpp:193 #: ../src/ui/widget/color-scales.cpp:447 -#, fuzzy msgid "_K:" -msgstr "_K" +msgstr "_K:" #: ../src/ui/widget/color-icc-selector.cpp:310 msgid "CMS" -msgstr "" +msgstr "CMS" #: ../src/ui/widget/color-icc-selector.cpp:375 msgid "Fix" -msgstr "" +msgstr "Fixar" #: ../src/ui/widget/color-icc-selector.cpp:379 msgid "Fix RGB fallback to match icc-color() value." -msgstr "" +msgstr "Fixar um valor RGB para corresponder ao valor icc-color()." #. Label #: ../src/ui/widget/color-icc-selector.cpp:496 #: ../src/ui/widget/color-scales.cpp:393 ../src/ui/widget/color-scales.cpp:419 #: ../src/ui/widget/color-scales.cpp:450 #: ../src/ui/widget/color-wheel-selector.cpp:83 -#, fuzzy msgid "_A:" -msgstr "_A" +msgstr "_T:" #: ../src/ui/widget/color-icc-selector.cpp:513 #: ../src/ui/widget/color-icc-selector.cpp:524 @@ -26501,25 +25027,23 @@ msgstr "_A" #: ../src/ui/widget/color-wheel-selector.cpp:112 #: ../src/ui/widget/color-wheel-selector.cpp:142 msgid "Alpha (opacity)" -msgstr "Alfa (transparência)" +msgstr "Transparência (canal alfa)" #: ../src/ui/widget/color-notebook.cpp:182 -#, fuzzy msgid "Color Managed" -msgstr "Gerenciamento de cor" +msgstr "Cores Geridas" #: ../src/ui/widget/color-notebook.cpp:189 msgid "Out of gamut!" -msgstr "" +msgstr "Fora da gama!" #: ../src/ui/widget/color-notebook.cpp:196 -#, fuzzy msgid "Too much ink!" -msgstr "Ampliar" +msgstr "Temasiada tinta!" #: ../src/ui/widget/color-notebook.cpp:207 ../src/verbs.cpp:2766 msgid "Pick colors from image" -msgstr "Pegar cores da imagem" +msgstr "Ferramenta Pipeta: retirar amostras de cores da área de trabalho" #. Create RGBA entry and color preview #: ../src/ui/widget/color-notebook.cpp:212 @@ -26539,323 +25063,302 @@ msgid "CMYK" msgstr "CMYK" #: ../src/ui/widget/filter-effect-chooser.cpp:26 -#, fuzzy msgid "_Blur:" -msgstr "B_orrar:" +msgstr "_Desfocar:" # Enevoar, desfocar ou borrar? -- krishna #: ../src/ui/widget/filter-effect-chooser.cpp:29 -#, fuzzy msgid "Blur (%)" -msgstr "Desfocar" +msgstr "Desfocagem (%)" #: ../src/ui/widget/font-variants.cpp:38 msgctxt "Font variant" msgid "Ligatures" -msgstr "" +msgstr "Ligaduras" #: ../src/ui/widget/font-variants.cpp:39 -#, fuzzy msgctxt "Font variant" msgid "Common" -msgstr "Objectos" +msgstr "Comum" #: ../src/ui/widget/font-variants.cpp:40 -#, fuzzy msgctxt "Font variant" msgid "Discretionary" -msgstr "Descrição" +msgstr "Discricionário" #: ../src/ui/widget/font-variants.cpp:41 -#, fuzzy msgctxt "Font variant" msgid "Historical" -msgstr "Tutoriais" +msgstr "Histórico" #: ../src/ui/widget/font-variants.cpp:42 -#, fuzzy msgctxt "Font variant" msgid "Contextual" -msgstr "Contraste" +msgstr "Contextual" #: ../src/ui/widget/font-variants.cpp:44 -#, fuzzy msgctxt "Font variant" msgid "Position" -msgstr "Posição:" +msgstr "Posição" #: ../src/ui/widget/font-variants.cpp:45 ../src/ui/widget/font-variants.cpp:50 -#, fuzzy msgctxt "Font variant" msgid "Normal" msgstr "Normal" #: ../src/ui/widget/font-variants.cpp:46 -#, fuzzy msgctxt "Font variant" msgid "Subscript" -msgstr "Script" +msgstr "Subscrito" #: ../src/ui/widget/font-variants.cpp:47 -#, fuzzy msgctxt "Font variant" msgid "Superscript" -msgstr "Script" +msgstr "Sobrescrito" #: ../src/ui/widget/font-variants.cpp:49 msgctxt "Font variant" msgid "Capitals" -msgstr "" +msgstr "Maiúsculas" #: ../src/ui/widget/font-variants.cpp:51 -#, fuzzy msgctxt "Font variant" msgid "Small" -msgstr "Pequeno" +msgstr "Versaletes" #: ../src/ui/widget/font-variants.cpp:52 -#, fuzzy msgctxt "Font variant" msgid "All small" -msgstr "pequeno" +msgstr "Todas versaletes" #: ../src/ui/widget/font-variants.cpp:53 -#, fuzzy msgctxt "Font variant" msgid "Petite" -msgstr "Todos os tipos" +msgstr "Pequenas capitais" #: ../src/ui/widget/font-variants.cpp:54 -#, fuzzy msgctxt "Font variant" msgid "All petite" -msgstr "Todos os tipos" +msgstr "Todas pequenas capitais" #: ../src/ui/widget/font-variants.cpp:55 -#, fuzzy msgctxt "Font variant" msgid "Unicase" -msgstr "Descarregado" +msgstr "Unicasa" #: ../src/ui/widget/font-variants.cpp:56 -#, fuzzy msgctxt "Font variant" msgid "Titling" -msgstr "Rolagem" +msgstr "Maiúsculas de títulos" #: ../src/ui/widget/font-variants.cpp:58 msgctxt "Font variant" msgid "Numeric" -msgstr "" +msgstr "Numérico" #: ../src/ui/widget/font-variants.cpp:59 -#, fuzzy msgctxt "Font variant" msgid "Lining" -msgstr "Sinuoso" +msgstr "Numerais alinhados" #: ../src/ui/widget/font-variants.cpp:60 -#, fuzzy msgctxt "Font variant" msgid "Old Style" -msgstr "Estilo" +msgstr "Estilo Antigo" #: ../src/ui/widget/font-variants.cpp:61 -#, fuzzy msgctxt "Font variant" msgid "Default Style" -msgstr "Unidades padrão:" +msgstr "Estilo Padrão" #: ../src/ui/widget/font-variants.cpp:62 -#, fuzzy msgctxt "Font variant" msgid "Proportional" -msgstr "Escala proporcional" +msgstr "Proporcional" #: ../src/ui/widget/font-variants.cpp:63 msgctxt "Font variant" msgid "Tabular" -msgstr "" +msgstr "Tabular" #: ../src/ui/widget/font-variants.cpp:64 -#, fuzzy msgctxt "Font variant" msgid "Default Width" -msgstr "Unidades padrão:" +msgstr "Largura Padrão" #: ../src/ui/widget/font-variants.cpp:65 -#, fuzzy msgctxt "Font variant" msgid "Diagonal" -msgstr "Encaixando às guias" +msgstr "Diagonal" #: ../src/ui/widget/font-variants.cpp:66 -#, fuzzy msgctxt "Font variant" msgid "Stacked" -msgstr "Plano de fundo:" +msgstr "Empilhado" #: ../src/ui/widget/font-variants.cpp:67 -#, fuzzy msgctxt "Font variant" msgid "Default Fractions" -msgstr "Configurações da página" +msgstr "Frações Padrão" #: ../src/ui/widget/font-variants.cpp:68 msgctxt "Font variant" msgid "Ordinal" -msgstr "" +msgstr "Ordinal" #: ../src/ui/widget/font-variants.cpp:69 msgctxt "Font variant" msgid "Slashed Zero" -msgstr "" +msgstr "Zero com Barra" #: ../src/ui/widget/font-variants.cpp:71 -#, fuzzy msgctxt "Font variant" msgid "Feature Settings" -msgstr "Configurações da página" +msgstr "Configurações de Características" #: ../src/ui/widget/font-variants.cpp:72 msgctxt "Font variant" msgid "Selection has different Feature Settings!" -msgstr "" +msgstr "A seleção tem Configurações de Características diferentes!" #: ../src/ui/widget/font-variants.cpp:85 msgid "Common ligatures. On by default. OpenType tables: 'liga', 'clig'" msgstr "" +"Ligaduras comuns. Ativadas por padrão. Tabelas OpenType: 'liga', 'clig'" #: ../src/ui/widget/font-variants.cpp:87 msgid "Discretionary ligatures. Off by default. OpenType table: 'dlig'" msgstr "" +"Ligaduras discricionárias. Desativadas por padrão. Tabela OpenType: 'dlig'" #: ../src/ui/widget/font-variants.cpp:89 msgid "Historical ligatures. Off by default. OpenType table: 'hlig'" -msgstr "" +msgstr "Ligaduras históricas. Desativadas por padrão. Tabela OpenType: 'hlig'" #: ../src/ui/widget/font-variants.cpp:91 msgid "Contextual forms. On by default. OpenType table: 'calt'" -msgstr "" +msgstr "Formas contextuais. Ativado por padrão. Tabela OpenType: 'calt'" #. Position ---------------------------------- #. Add tooltips #: ../src/ui/widget/font-variants.cpp:112 -#, fuzzy msgid "Normal position." -msgstr "Posição:" +msgstr "Posição normal." #: ../src/ui/widget/font-variants.cpp:113 msgid "Subscript. OpenType table: 'subs'" -msgstr "" +msgstr "Subscrito. Tabela OpenType: 'subs'" #: ../src/ui/widget/font-variants.cpp:114 msgid "Superscript. OpenType table: 'sups'" -msgstr "" +msgstr "Sobrescrito. Tabela OpenType: 'sups'" #. Caps ---------------------------------- #. Add tooltips #: ../src/ui/widget/font-variants.cpp:138 -#, fuzzy msgid "Normal capitalization." -msgstr "Localização" +msgstr "Capitalização normal." #: ../src/ui/widget/font-variants.cpp:139 msgid "Small-caps (lowercase). OpenType table: 'smcp'" -msgstr "" +msgstr "Versaletes (minúsculas). Tabela OpenType: 'smcp'" #: ../src/ui/widget/font-variants.cpp:140 msgid "" "All small-caps (uppercase and lowercase). OpenType tables: 'c2sc' and 'smcp'" msgstr "" +"Todas versaletes (maiúsculas e minúsculas). Tabelas OpenType: 'c2sc' e 'smcp'" #: ../src/ui/widget/font-variants.cpp:141 msgid "Petite-caps (lowercase). OpenType table: 'pcap'" -msgstr "" +msgstr "Pequenas capitais (minúsculas). Tabela OpenType: 'pcap'" #: ../src/ui/widget/font-variants.cpp:142 msgid "" "All petite-caps (uppercase and lowercase). OpenType tables: 'c2sc' and 'pcap'" msgstr "" +"Todas pequenas capitais (maiúsculas e minúsculas). Tabelas OpenType: 'c2sc' " +"e 'pcap'" #: ../src/ui/widget/font-variants.cpp:143 msgid "" "Unicase (small caps for uppercase, normal for lowercase). OpenType table: " "'unic'" msgstr "" +"Unicasa (versaletes para maiúsculas, normal para minúsculas). Tabela " +"OpenType: 'unic'" #: ../src/ui/widget/font-variants.cpp:144 msgid "" "Titling caps (lighter-weight uppercase for use in titles). OpenType table: " "'titl'" msgstr "" +"Maiúsculas de títulos (maiúscula mais fina para títulos). Tabela OpenType: " +"'titl'" #. Numeric ------------------------------ #. Add tooltips #: ../src/ui/widget/font-variants.cpp:180 -#, fuzzy msgid "Normal style." -msgstr "Tipografia normal" +msgstr "Estilo normal." #: ../src/ui/widget/font-variants.cpp:181 msgid "Lining numerals. OpenType table: 'lnum'" -msgstr "" +msgstr "Numerais alinhados. Tabela OpenType: 'lnum'" #: ../src/ui/widget/font-variants.cpp:182 msgid "Old style numerals. OpenType table: 'onum'" -msgstr "" +msgstr "Numerais de estilo antigo. Tabela OpenType: 'onum'" #: ../src/ui/widget/font-variants.cpp:183 -#, fuzzy msgid "Normal widths." -msgstr "Tipografia normal" +msgstr "Larguras normais." #: ../src/ui/widget/font-variants.cpp:184 msgid "Proportional width numerals. OpenType table: 'pnum'" -msgstr "" +msgstr "Numerais de largura proporcional. Tabela OpenType: 'pnum'" #: ../src/ui/widget/font-variants.cpp:185 msgid "Same width numerals. OpenType table: 'tnum'" -msgstr "" +msgstr "Numerais da mesma largura. Tabela OpenType: 'tnum'" #: ../src/ui/widget/font-variants.cpp:186 -#, fuzzy msgid "Normal fractions." -msgstr "Orientação da página:" +msgstr "Frações normais." #: ../src/ui/widget/font-variants.cpp:187 msgid "Diagonal fractions. OpenType table: 'frac'" -msgstr "" +msgstr "Frações diagonais. Tabela OpenType: 'frac'" #: ../src/ui/widget/font-variants.cpp:188 msgid "Stacked fractions. OpenType table: 'afrc'" -msgstr "" +msgstr "Frações empilhadas. Tabela OpenType: 'afrc'" #: ../src/ui/widget/font-variants.cpp:189 msgid "Ordinals (raised 'th', etc.). OpenType table: 'ordn'" -msgstr "" +msgstr "Ordinais ('o', 'a', 'th' levantados, etc.). Tabela OpenType: 'ordn'" #: ../src/ui/widget/font-variants.cpp:190 msgid "Slashed zeros. OpenType table: 'zero'" -msgstr "" +msgstr "Zeros com Barra. Tabela OpenType: 'zero'" #. Feature settings --------------------- #. Add tooltips #: ../src/ui/widget/font-variants.cpp:240 msgid "Feature settings in CSS form. No sanity checking is performed." -msgstr "" +msgstr "Definições de características no CSS. Não é feita nenhuma verificação." #: ../src/ui/widget/layer-selector.cpp:118 msgid "Toggle current layer visibility" -msgstr "Tornar a camada actual visível" +msgstr "Pcoltar ou desocultar camada atual" #: ../src/ui/widget/layer-selector.cpp:138 msgid "Lock or unlock current layer" -msgstr "Bloquear ou desbloquear a camada actual" +msgstr "Bloquear ou desbloquear a camada atual" #: ../src/ui/widget/layer-selector.cpp:141 msgid "Current layer" -msgstr "Camada actual" +msgstr "Camada atual" #: ../src/ui/widget/layer-selector.cpp:582 msgid "(root)" @@ -26863,27 +25366,25 @@ msgstr "(raiz)" #: ../src/ui/widget/licensor.cpp:40 msgid "Proprietary" -msgstr "Proprietário" +msgstr "Proprietário (totalmente protegido por direitos de autor)" #: ../src/ui/widget/licensor.cpp:43 msgid "MetadataLicence|Other" -msgstr "" +msgstr "Outra" #: ../src/ui/widget/licensor.cpp:72 -#, fuzzy msgid "Document license updated" -msgstr "Desenho SVG" +msgstr "Licença do documento atualizada" #: ../src/ui/widget/object-composite-settings.cpp:47 #: ../src/ui/widget/selected-style.cpp:1118 #: ../src/ui/widget/selected-style.cpp:1119 -#, fuzzy msgid "Opacity (%)" -msgstr "Opacidade, %" +msgstr "Opacidade (%)" #: ../src/ui/widget/object-composite-settings.cpp:160 msgid "Change blur" -msgstr "Alterar desfoque" +msgstr "Alterar desfocagem" #: ../src/ui/widget/object-composite-settings.cpp:200 #: ../src/ui/widget/selected-style.cpp:942 @@ -26905,75 +25406,63 @@ msgstr "Altura do papel" #: ../src/ui/widget/page-sizer.cpp:239 msgid "T_op margin:" -msgstr "" +msgstr "Margem de _cima:" #: ../src/ui/widget/page-sizer.cpp:239 -#, fuzzy msgid "Top margin" -msgstr "Soltar cor" +msgstr "Margem de cima" #: ../src/ui/widget/page-sizer.cpp:240 -#, fuzzy msgid "L_eft:" -msgstr "Comprimento:" +msgstr "_Esquerda:" #: ../src/ui/widget/page-sizer.cpp:240 -#, fuzzy msgid "Left margin" -msgstr "Ângulo esquerdo" +msgstr "Margem esquerda" #: ../src/ui/widget/page-sizer.cpp:241 -#, fuzzy msgid "Ri_ght:" -msgstr "Direitos:" +msgstr "_Direita:" #: ../src/ui/widget/page-sizer.cpp:241 -#, fuzzy msgid "Right margin" -msgstr "Ângulo direito" +msgstr "Margem direita" #: ../src/ui/widget/page-sizer.cpp:242 -#, fuzzy msgid "Botto_m:" -msgstr "Fundo" +msgstr "Margem de _baixo:" #: ../src/ui/widget/page-sizer.cpp:242 -#, fuzzy msgid "Bottom margin" -msgstr "Soltar cor" +msgstr "Margem de baixo" #: ../src/ui/widget/page-sizer.cpp:244 -#, fuzzy msgid "Scale _x:" -msgstr "Ampliar" +msgstr "Escala _x:" #: ../src/ui/widget/page-sizer.cpp:244 -#, fuzzy msgid "Scale X" -msgstr "Ampliar" +msgstr "Escala X" #: ../src/ui/widget/page-sizer.cpp:245 -#, fuzzy msgid "Scale _y:" -msgstr "Ampliar" +msgstr "Escala _Y:" #: ../src/ui/widget/page-sizer.cpp:245 -#, fuzzy msgid "Scale Y" -msgstr "Ampliar" +msgstr "Escala Y" #: ../src/ui/widget/page-sizer.cpp:323 -#, fuzzy msgid "Orientation:" -msgstr "Orientação da página:" +msgstr "Orientação:" #: ../src/ui/widget/page-sizer.cpp:326 msgid "_Landscape" -msgstr "_Paisagem" +msgstr "_Horizontal" #: ../src/ui/widget/page-sizer.cpp:331 msgid "_Portrait" -msgstr "_Retrato" +msgstr "_Vertical" #. ## Set up custom size frame #: ../src/ui/widget/page-sizer.cpp:350 @@ -26982,20 +25471,19 @@ msgstr "Tamanho personalizado" #: ../src/ui/widget/page-sizer.cpp:395 msgid "Resi_ze page to content..." -msgstr "" +msgstr "Redimensionar página ao _conteúdo..." #: ../src/ui/widget/page-sizer.cpp:447 -#, fuzzy msgid "_Resize page to drawing or selection" -msgstr "_Ajustar página à selecção" +msgstr "_Redimensionar o tamanho da página ao conteúdo" #: ../src/ui/widget/page-sizer.cpp:448 msgid "" "Resize the page to fit the current selection, or the entire drawing if there " "is no selection" msgstr "" -"Redimensionar a página para caber a selecção actual, ou o desenho inteiro se " -"não houver nenhuma selecção" +"Redimensionar a página para caber na seleção atual, ou o desenho inteiro se " +"não houver nada selecionado" #: ../src/ui/widget/page-sizer.cpp:479 msgid "" @@ -27003,11 +25491,13 @@ msgid "" "scaling in Inkscape. To set a non-uniform scaling, set the 'viewBox' " "directly." msgstr "" +"Apesar do SVG permitir redimensionamento não uniforme, é recomendável usar " +"apenas o redimensionamento uniforme no Inkscape. Para aplicar " +"redimensionamento não uniforme, aplicar diretamente o 'viewBox'." #: ../src/ui/widget/page-sizer.cpp:483 -#, fuzzy msgid "_Viewbox..." -msgstr "_Ver" +msgstr "Caixa de _Visualização..." #: ../src/ui/widget/page-sizer.cpp:590 msgid "Set page size" @@ -27015,183 +25505,162 @@ msgstr "Definir tamanho da página" #: ../src/ui/widget/page-sizer.cpp:836 msgid "User units per " -msgstr "" +msgstr "Unidades personalizadas por " #: ../src/ui/widget/page-sizer.cpp:932 -#, fuzzy msgid "Set page scale" -msgstr "Definir tamanho da página" +msgstr "Definir escala da página" #: ../src/ui/widget/page-sizer.cpp:958 msgid "Set 'viewBox'" -msgstr "" +msgstr "Definir caixa de visualização ('viewBox')" #: ../src/ui/widget/panel.cpp:116 msgid "List" -msgstr "Listar" +msgstr "Lista" #: ../src/ui/widget/panel.cpp:139 -#, fuzzy msgctxt "Swatches" msgid "Size" msgstr "Tamanho" #: ../src/ui/widget/panel.cpp:143 -#, fuzzy msgctxt "Swatches height" msgid "Tiny" -msgstr "minúsculo" +msgstr "Minúsculo" #: ../src/ui/widget/panel.cpp:144 -#, fuzzy msgctxt "Swatches height" msgid "Small" msgstr "Pequeno" #: ../src/ui/widget/panel.cpp:145 -#, fuzzy msgctxt "Swatches height" msgid "Medium" msgstr "Médio" #: ../src/ui/widget/panel.cpp:146 -#, fuzzy msgctxt "Swatches height" msgid "Large" msgstr "Grande" #: ../src/ui/widget/panel.cpp:147 -#, fuzzy msgctxt "Swatches height" msgid "Huge" -msgstr "Matiz" +msgstr "Enorme" #: ../src/ui/widget/panel.cpp:169 -#, fuzzy msgctxt "Swatches" msgid "Width" msgstr "Largura" #: ../src/ui/widget/panel.cpp:173 -#, fuzzy msgctxt "Swatches width" msgid "Narrower" -msgstr "Abai_xar" +msgstr "Mais estreito" #: ../src/ui/widget/panel.cpp:174 -#, fuzzy msgctxt "Swatches width" msgid "Narrow" -msgstr "Abai_xar" +msgstr "Estreito" #: ../src/ui/widget/panel.cpp:175 -#, fuzzy msgctxt "Swatches width" msgid "Medium" msgstr "Médio" #: ../src/ui/widget/panel.cpp:176 -#, fuzzy msgctxt "Swatches width" msgid "Wide" -msgstr "_Ocultar" +msgstr "Largo" #: ../src/ui/widget/panel.cpp:177 -#, fuzzy msgctxt "Swatches width" msgid "Wider" -msgstr "_Ocultar" +msgstr "Mais largo" #: ../src/ui/widget/panel.cpp:207 -#, fuzzy msgctxt "Swatches" msgid "Border" -msgstr "Ordenar" +msgstr "Borda" #: ../src/ui/widget/panel.cpp:211 -#, fuzzy msgctxt "Swatches border" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../src/ui/widget/panel.cpp:212 msgctxt "Swatches border" msgid "Solid" -msgstr "" +msgstr "Sólida" #: ../src/ui/widget/panel.cpp:213 -#, fuzzy msgctxt "Swatches border" msgid "Wide" -msgstr "_Ocultar" +msgstr "Larga" #. TRANSLATORS: "Wrap" indicates how colour swatches are displayed #: ../src/ui/widget/panel.cpp:244 -#, fuzzy msgctxt "Swatches" msgid "Wrap" -msgstr "Envolver" +msgstr "Retornar à linha" #: ../src/ui/widget/preferences-widget.cpp:795 msgid "_Browse..." msgstr "_Navegar..." #: ../src/ui/widget/preferences-widget.cpp:881 -#, fuzzy msgid "Select a bitmap editor" -msgstr "Editor de degradê" +msgstr "Selecionar editor de imagem bitmap" #: ../src/ui/widget/random.cpp:84 msgid "" "Reseed the random number generator; this creates a different sequence of " "random numbers." msgstr "" +"Reiniciar o gerador de números aleatórios. Isto cria uma sequência diferente " +"de números aleatórios." #: ../src/ui/widget/rendering-options.cpp:33 -#, fuzzy msgid "Backend" -msgstr "Plano de fundo:" +msgstr "Motor" #: ../src/ui/widget/rendering-options.cpp:34 -#, fuzzy msgid "Vector" -msgstr "Seletor" +msgstr "Vetorial" #: ../src/ui/widget/rendering-options.cpp:35 -#, fuzzy msgid "Bitmap" -msgstr "Bias" +msgstr "Imagem bitmap" #: ../src/ui/widget/rendering-options.cpp:36 msgid "Bitmap options" -msgstr "" +msgstr "Opções de imagem bitmap" #: ../src/ui/widget/rendering-options.cpp:38 -#, fuzzy msgid "Preferred resolution of rendering, in dots per inch." -msgstr "Resolução preferida para a figura (pontos por polegada)" +msgstr "Resolução preferida para a visualização, em pontos por polegada." #: ../src/ui/widget/rendering-options.cpp:47 -#, fuzzy msgid "" "Render using Cairo vector operations. The resulting image is usually " "smaller in file size and can be arbitrarily scaled, but some filter effects " "will not be correctly rendered." msgstr "" -"Use os operadores de vetor PDF. A imagem resultante é geralmente menor em " -"tamanho de ficheiro e pode arbitrariamente ser escalada, mas os padrões de " -"preenchimento serão perdidas. " +"Renderizar utilizando as operações de vetor Cairo. A imagem resultante " +"geralmente ocupa menos espaço em disco e pode ser dimensionada " +"arbitrariamente, mas alguns efeitos de filtros não serão renderizados " +"corretamente." #: ../src/ui/widget/rendering-options.cpp:52 -#, fuzzy msgid "" "Render everything as bitmap. The resulting image is usually larger in file " "size and cannot be arbitrarily scaled without quality loss, but all objects " "will be rendered exactly as displayed." msgstr "" "Imprimir tudo como bitmap. A imagem resultante é geralmente maior em tamanho " -"e não pode ser ampliada sem perda de qualidade. Porém todos os objectos são " -"gerados exatamente como mostrado." +"e não pode ser ampliada sem perda de qualidade. Porém todos os objetos são " +"gerados exatamente como mostrado no ecrã." #: ../src/ui/widget/selected-style.cpp:131 #: ../src/ui/widget/style-swatch.cpp:129 @@ -27211,30 +25680,26 @@ msgstr "N/A" #: ../src/ui/widget/selected-style.cpp:1112 #: ../src/widgets/gradient-toolbar.cpp:162 msgid "Nothing selected" -msgstr "Nenhum objecto seleccionado" +msgstr "Nada selecionado" #: ../src/ui/widget/selected-style.cpp:185 -#, fuzzy msgctxt "Fill" msgid "None" msgstr "Nenhum" #: ../src/ui/widget/selected-style.cpp:187 -#, fuzzy msgctxt "Stroke" msgid "None" msgstr "Nenhum" #: ../src/ui/widget/selected-style.cpp:191 #: ../src/ui/widget/style-swatch.cpp:323 -#, fuzzy msgctxt "Fill and stroke" msgid "No fill" msgstr "Sem preenchimento" #: ../src/ui/widget/selected-style.cpp:191 #: ../src/ui/widget/style-swatch.cpp:323 -#, fuzzy msgctxt "Fill and stroke" msgid "No stroke" msgstr "Sem traço" @@ -27247,55 +25712,52 @@ msgstr "Padrão" #: ../src/ui/widget/selected-style.cpp:196 #: ../src/ui/widget/style-swatch.cpp:304 msgid "Pattern fill" -msgstr "Padrão de preenchimento" +msgstr "Padrão no preenchimento" #: ../src/ui/widget/selected-style.cpp:196 #: ../src/ui/widget/style-swatch.cpp:304 msgid "Pattern stroke" -msgstr "Padrão de traço" +msgstr "Padrão no traço" #: ../src/ui/widget/selected-style.cpp:198 msgid "L" -msgstr "E" +msgstr "L" #: ../src/ui/widget/selected-style.cpp:201 #: ../src/ui/widget/style-swatch.cpp:296 msgid "Linear gradient fill" -msgstr "Preenchimento em degradê linear" +msgstr "Preenchimento em gradiente linear" #: ../src/ui/widget/selected-style.cpp:201 #: ../src/ui/widget/style-swatch.cpp:296 msgid "Linear gradient stroke" -msgstr "Traço em degradê linear" +msgstr "Traço em gradiente linear" #: ../src/ui/widget/selected-style.cpp:208 msgid "R" -msgstr "D" +msgstr "R" #: ../src/ui/widget/selected-style.cpp:211 #: ../src/ui/widget/style-swatch.cpp:300 msgid "Radial gradient fill" -msgstr "Preenchimento em degradê radial" +msgstr "Preenchimento em gradiente radial" #: ../src/ui/widget/selected-style.cpp:211 #: ../src/ui/widget/style-swatch.cpp:300 msgid "Radial gradient stroke" -msgstr "Traço em degradê radial" +msgstr "Traço em gradiente radial" #: ../src/ui/widget/selected-style.cpp:219 -#, fuzzy msgid "M" -msgstr "E" +msgstr "M" #: ../src/ui/widget/selected-style.cpp:222 -#, fuzzy msgid "Mesh gradient fill" -msgstr "Preenchimento em degradê linear" +msgstr "Preenchimento em gradiente de malha" #: ../src/ui/widget/selected-style.cpp:222 -#, fuzzy msgid "Mesh gradient stroke" -msgstr "Traço em degradê linear" +msgstr "Traço em gradiente de malha" #: ../src/ui/widget/selected-style.cpp:230 msgid "Different" @@ -27311,9 +25773,8 @@ msgstr "Traços diferentes" #: ../src/ui/widget/selected-style.cpp:235 #: ../src/ui/widget/style-swatch.cpp:326 -#, fuzzy msgid "Unset" -msgstr "Linha" +msgstr "Indefinido" #. TRANSLATORS COMMENT: unset is a verb here #: ../src/ui/widget/selected-style.cpp:238 @@ -27321,14 +25782,14 @@ msgstr "Linha" #: ../src/ui/widget/selected-style.cpp:574 #: ../src/ui/widget/style-swatch.cpp:328 ../src/widgets/fill-style.cpp:703 msgid "Unset fill" -msgstr "Desfazer preenchimento" +msgstr "Preenchimento não definido" #: ../src/ui/widget/selected-style.cpp:238 #: ../src/ui/widget/selected-style.cpp:296 #: ../src/ui/widget/selected-style.cpp:590 #: ../src/ui/widget/style-swatch.cpp:328 ../src/widgets/fill-style.cpp:703 msgid "Unset stroke" -msgstr "Redefinir o traço" +msgstr "Traço não definido" #: ../src/ui/widget/selected-style.cpp:241 msgid "Flat color fill" @@ -27341,28 +25802,28 @@ msgstr "Traço em cor lisa" #. TRANSLATOR COMMENT: A means "Averaged" #: ../src/ui/widget/selected-style.cpp:244 msgid "a" -msgstr "a" +msgstr "md" #: ../src/ui/widget/selected-style.cpp:247 msgid "Fill is averaged over selected objects" -msgstr "Preenchimento médio entre os objectos seleccionados" +msgstr "Média do preenchimento dos objetos selecionados" #: ../src/ui/widget/selected-style.cpp:247 msgid "Stroke is averaged over selected objects" -msgstr "Traço médio entre os objectos seleccionados" +msgstr "Média do traço dos objetos selecionados" #. TRANSLATOR COMMENT: M means "Multiple" #: ../src/ui/widget/selected-style.cpp:250 msgid "m" -msgstr "m" +msgstr "ig" #: ../src/ui/widget/selected-style.cpp:253 msgid "Multiple selected objects have the same fill" -msgstr "Objectos seleccionados possuem o mesmo preenchimento" +msgstr "Vários objetos selecionados têm o mesmo preenchimento" #: ../src/ui/widget/selected-style.cpp:253 msgid "Multiple selected objects have the same stroke" -msgstr "Objectos seleccionados possuem o mesmo traço" +msgstr "Vários objetos selecionados têm o mesmo traço" #: ../src/ui/widget/selected-style.cpp:255 msgid "Edit fill..." @@ -27397,11 +25858,11 @@ msgstr "Trocar preenchimento e traço" #: ../src/ui/widget/selected-style.cpp:599 #: ../src/ui/widget/selected-style.cpp:608 msgid "Make fill opaque" -msgstr "Tornar preenchimento opaco" +msgstr "Tornar o preenchimento opaco" #: ../src/ui/widget/selected-style.cpp:291 msgid "Make stroke opaque" -msgstr "Tornar traço opaco" +msgstr "Tornar o traço opaco" #: ../src/ui/widget/selected-style.cpp:300 #: ../src/ui/widget/selected-style.cpp:556 ../src/widgets/fill-style.cpp:503 @@ -27415,19 +25876,19 @@ msgstr "Remover traço" #: ../src/ui/widget/selected-style.cpp:620 msgid "Apply last set color to fill" -msgstr "Aplicar a última cor para preenchimento" +msgstr "Aplicar a última cor definida ao preenchimento" #: ../src/ui/widget/selected-style.cpp:632 msgid "Apply last set color to stroke" -msgstr "Aplicar a última cor para traço" +msgstr "Aplicar a última cor definida ao traço" #: ../src/ui/widget/selected-style.cpp:643 msgid "Apply last selected color to fill" -msgstr "Aplicar a última cor para preenchimento da selecção" +msgstr "Aplicar a última cor selecionada ao preenchimento" #: ../src/ui/widget/selected-style.cpp:654 msgid "Apply last selected color to stroke" -msgstr "Aplicar a última cor para traço da selecção" +msgstr "Aplicar a última cor selecionada ao traço" #: ../src/ui/widget/selected-style.cpp:680 msgid "Invert fill" @@ -27463,16 +25924,16 @@ msgstr "Colar traço" #: ../src/ui/widget/selected-style.cpp:969 msgid "Change stroke width" -msgstr "Alterar largura do traço" +msgstr "Alterar espessura do traço" #: ../src/ui/widget/selected-style.cpp:1072 msgid ", drag to adjust" -msgstr ", arraste para ajustar" +msgstr ", arrastar para ajustar" #: ../src/ui/widget/selected-style.cpp:1157 #, c-format msgid "Stroke width: %.5g%s%s" -msgstr "Largura do traço: %.5g%s%s" +msgstr "Espessura do traço: %.5g%s%s" #: ../src/ui/widget/selected-style.cpp:1161 msgid " (averaged)" @@ -27487,88 +25948,90 @@ msgid "100% (opaque)" msgstr "100% (opaco)" #: ../src/ui/widget/selected-style.cpp:1385 -#, fuzzy msgid "Adjust alpha" -msgstr "Ajustar matiz" +msgstr "Ajustar transparência" #: ../src/ui/widget/selected-style.cpp:1387 -#, fuzzy, c-format +#, c-format msgid "" "Adjusting alpha: was %.3g, now %.3g (diff %.3g); with Ctrl to adjust lightness, with Shift to adjust saturation, without " "modifiers to adjust hue" msgstr "" -"Ajustando luminosidade: foi %.3g, agora %.3g (diff %.3g); com " -"Shift para ajustar a saturação, sem modificadores para ajustar a Matiz" +"A ajustar a transparência: era %.3g, agora %.3g (diferença " +"%.3g); com Ctrl para ajustar a luminosidade; com Shift para " +"ajustar saturação; sem modificadores para ajustar a matiz" #: ../src/ui/widget/selected-style.cpp:1391 msgid "Adjust saturation" msgstr "Ajustar saturação" #: ../src/ui/widget/selected-style.cpp:1393 -#, fuzzy, c-format +#, c-format msgid "" "Adjusting saturation: was %.3g, now %.3g (diff %.3g); with " "Ctrl to adjust lightness, with Alt to adjust alpha, without " "modifiers to adjust hue" msgstr "" -"Ajustando saturação: foi %.3g, agora %.3g (diff %.3g); com " -"Ctrl para ajustar a luminosidade, sem modificadores para ajustar matiz" +"A ajustar a saturação: era %.3g, agora %.3g (diferença %.3g); " +"com Ctrl para ajustar luminosidade; com Alt para ajustar a " +"transparência; sem modificadores para ajustar a matiz" #: ../src/ui/widget/selected-style.cpp:1397 msgid "Adjust lightness" msgstr "Ajustar luminosidade" #: ../src/ui/widget/selected-style.cpp:1399 -#, fuzzy, c-format +#, c-format msgid "" "Adjusting lightness: was %.3g, now %.3g (diff %.3g); with " "Shift to adjust saturation, with Alt to adjust alpha, without " "modifiers to adjust hue" msgstr "" -"Ajustando luminosidade: foi %.3g, agora %.3g (diff %.3g); com " -"Shift para ajustar a saturação, sem modificadores para ajustar a Matiz" +"A ajustar luminosidade: era %.3g, agora %.3g (diferença %.3g); " +"com Shift para ajustar a saturação; com Alt para ajustar a " +"transparência; sem modificadores para ajustar a matiz" #: ../src/ui/widget/selected-style.cpp:1403 msgid "Adjust hue" msgstr "Ajustar matiz" #: ../src/ui/widget/selected-style.cpp:1405 -#, fuzzy, c-format +#, c-format msgid "" "Adjusting hue: was %.3g, now %.3g (diff %.3g); with Shift to adjust saturation, with Alt to adjust alpha, with Ctrl " "to adjust lightness" msgstr "" -"Ajustando matiz: foi %.3g, agora %.3g (diff %.3g); com " -"Shift para ajustar saturação, com Ctrl para ajustar a " -"luminosidade" +"A ajustar a matiz: era %.3g, agora %.3g (diferença %.3g); com " +"Shift para ajustar a saturação; com Alt para ajustar a " +"transparência; com Ctrl para ajustar a luminosidade" #: ../src/ui/widget/selected-style.cpp:1523 #: ../src/ui/widget/selected-style.cpp:1537 -#, fuzzy msgid "Adjust stroke width" -msgstr "Largura do traço" +msgstr "Ajustar espessura do traço" #: ../src/ui/widget/selected-style.cpp:1524 #, c-format msgid "Adjusting stroke width: was %.3g, now %.3g (diff %.3g)" msgstr "" +"A ajustar a espessura do traço: era %.3g, agora %.3g " +"(diferença %.3g)" #. TRANSLATORS: "Link" means to _link_ two sliders together #: ../src/ui/widget/spin-scale.cpp:138 ../src/ui/widget/spin-slider.cpp:156 -#, fuzzy msgctxt "Sliders" msgid "Link" -msgstr "Linha" +msgstr "Ligação" #: ../src/ui/widget/style-swatch.cpp:294 msgid "L Gradient" -msgstr "Degradê L" +msgstr "Gradiente L" #: ../src/ui/widget/style-swatch.cpp:298 msgid "R Gradient" -msgstr "Degradê R" +msgstr "Gradiente R" #: ../src/ui/widget/style-swatch.cpp:314 #, c-format @@ -27581,7 +26044,6 @@ msgid "Stroke: %06x/%.3g" msgstr "Traço: %06x/%.3g" #: ../src/ui/widget/style-swatch.cpp:321 -#, fuzzy msgctxt "Fill and stroke" msgid "None" msgstr "Nenhum" @@ -27589,30 +26051,29 @@ msgstr "Nenhum" #: ../src/ui/widget/style-swatch.cpp:348 #, c-format msgid "Stroke width: %.5g%s" -msgstr "Largura do traço: %.5g%s" +msgstr "Espessura do traço: %.5g%s" #: ../src/ui/widget/style-swatch.cpp:364 #, c-format msgid "O: %2.0f" -msgstr "" +msgstr "O: %2.0f" #: ../src/ui/widget/style-swatch.cpp:369 -#, fuzzy, c-format +#, c-format msgid "Opacity: %2.1f %%" -msgstr "Opacidade: %.3g" +msgstr "Opacidade: %2.1f %%" #: ../src/vanishing-point.cpp:133 msgid "Split vanishing points" -msgstr "" +msgstr "Separar pontos de fuga" #: ../src/vanishing-point.cpp:178 -#, fuzzy msgid "Merge vanishing points" -msgstr "Criar novo caminho" +msgstr "Unir pontos de fuga" #: ../src/vanishing-point.cpp:246 msgid "3D box: Move vanishing point" -msgstr "" +msgstr "Caixa 3D: mover ponto de fuga" #: ../src/vanishing-point.cpp:329 #, c-format @@ -27620,8 +26081,10 @@ msgid "Finite vanishing point shared by %d box" msgid_plural "" "Finite vanishing point shared by %d boxes; drag with Shift to separate selected box(es)" -msgstr[0] "" +msgstr[0] "Ponto de fuga finito partilhado por %d caixa" msgstr[1] "" +"Ponto de fuga finito partilhado por %d caixas; arrastar com " +"Shift para separar as caixas selecionadas" #. This won't make sense any more when infinite VPs are not shown on the canvas, #. but currently we update the status message anyway @@ -27631,118 +26094,114 @@ msgid "Infinite vanishing point shared by %d box" msgid_plural "" "Infinite vanishing point shared by %d boxes; drag with " "Shift to separate selected box(es)" -msgstr[0] "" +msgstr[0] "Ponto de fuga infinito partilhado por %d caixa" msgstr[1] "" +"Ponto de fuga infinito partilhado por %d caixas; arrastar com " +"Shift para separar as caixas selecionadas" #: ../src/vanishing-point.cpp:344 -#, fuzzy, c-format +#, c-format msgid "" "shared by %d box; drag with Shift to separate selected box(es)" msgid_plural "" "shared by %d boxes; drag with Shift to separate selected " "box(es)" msgstr[0] "" -"Ponto do degradê compartilhado pelo degradê %d; arraste com Shift para separar" +"partilhado por %d caixa; arrastar com Shift para separar as " +"caixas selecionadas" msgstr[1] "" -"Ponto do degradê compartilhado pelos degradês %d; arraste com " -"Shift para separar" +"partilhado por %d caixas; arrastar com Shift para separar as " +"caixas selecionadas" #: ../src/verbs.cpp:137 msgid "File" msgstr "Ficheiro" #: ../src/verbs.cpp:232 ../share/extensions/interp_att_g.inx.h:24 -#, fuzzy msgid "Tag" -msgstr "Alvo" +msgstr "Etiqueta" #: ../src/verbs.cpp:251 -#, fuzzy msgid "Context" -msgstr "Contraste" +msgstr "Contexto" #: ../src/verbs.cpp:270 ../src/verbs.cpp:2297 #: ../share/extensions/jessyInk_view.inx.h:1 #: ../share/extensions/polyhedron_3d.inx.h:26 -#, fuzzy msgid "View" -msgstr "_Ver" +msgstr "Vista" #: ../src/verbs.cpp:290 -#, fuzzy msgid "Dialog" -msgstr "Diálogo Pin" +msgstr "Diálogo" #: ../src/verbs.cpp:1275 msgid "Switch to next layer" -msgstr "Trocar para a próxima camada" +msgstr "Mudar para a camada seguinte" #: ../src/verbs.cpp:1276 msgid "Switched to next layer." -msgstr "Trocado para a próxima camada." +msgstr "Mudado para a camada seguinte." #: ../src/verbs.cpp:1278 msgid "Cannot go past last layer." -msgstr "Não é possível ir antes da última camada." +msgstr "Não é possível ir para a última camada." #: ../src/verbs.cpp:1287 msgid "Switch to previous layer" -msgstr "Trocar para a camada anterior" +msgstr "Mudar para a camada anterior" #: ../src/verbs.cpp:1288 msgid "Switched to previous layer." -msgstr "Trocado para a camada anterior." +msgstr "Mudado para a camada anterior." #: ../src/verbs.cpp:1290 msgid "Cannot go before first layer." -msgstr "Não é possível ir antes da primeira camada." +msgstr "Não é possível ir para a primeira camada." #: ../src/verbs.cpp:1311 ../src/verbs.cpp:1378 ../src/verbs.cpp:1414 #: ../src/verbs.cpp:1420 ../src/verbs.cpp:1444 ../src/verbs.cpp:1459 msgid "No current layer." -msgstr "Nenhuma camada actual." +msgstr "Nenhuma camada atual." #: ../src/verbs.cpp:1340 ../src/verbs.cpp:1344 #, c-format msgid "Raised layer %s." -msgstr "Camada %s levantada." +msgstr "Camada %s alterada para cima." #: ../src/verbs.cpp:1341 msgid "Layer to top" -msgstr "Camada para o topo" +msgstr "Camada para cima" #: ../src/verbs.cpp:1345 msgid "Raise layer" -msgstr "Levantar camada" +msgstr "Mudar camada para cima" #: ../src/verbs.cpp:1348 ../src/verbs.cpp:1352 #, c-format msgid "Lowered layer %s." -msgstr "Camada abaixada %s." +msgstr "Camada mudada para baixo %s." #: ../src/verbs.cpp:1349 msgid "Layer to bottom" -msgstr "Camada para o fundo" +msgstr "Camada para baixo" #: ../src/verbs.cpp:1353 msgid "Lower layer" -msgstr "Baixar camada" +msgstr "Mudar camada para baixo" #: ../src/verbs.cpp:1362 msgid "Cannot move layer any further." -msgstr "Não é possível movimentar mais a camada." +msgstr "Não é possível mover mais a camada." #: ../src/verbs.cpp:1373 -#, fuzzy msgid "Duplicate layer" -msgstr "Duplicar filtro" +msgstr "Duplicar camada" #. TRANSLATORS: this means "The layer has been duplicated." #: ../src/verbs.cpp:1376 -#, fuzzy msgid "Duplicated layer." -msgstr "Duplicar filtro" +msgstr "Camada duplicada." #: ../src/verbs.cpp:1409 msgid "Delete layer" @@ -27751,45 +26210,40 @@ msgstr "Eliminar camada" #. TRANSLATORS: this means "The layer has been deleted." #: ../src/verbs.cpp:1412 msgid "Deleted layer." -msgstr "Camada apagada." +msgstr "Camada eliminada." #: ../src/verbs.cpp:1429 -#, fuzzy msgid "Show all layers" -msgstr "Selecionar em todas as camadas" +msgstr "Mostrar todas as camadas" #: ../src/verbs.cpp:1434 -#, fuzzy msgid "Hide all layers" -msgstr "Ocultar Camada" +msgstr "Ocultar todas as camadas" #: ../src/verbs.cpp:1439 -#, fuzzy msgid "Lock all layers" -msgstr "Selecionar em todas as camadas" +msgstr "Bloquear todas as camadas" #: ../src/verbs.cpp:1453 -#, fuzzy msgid "Unlock all layers" -msgstr "DesBloquear Camada" +msgstr "Desbloquear todas as camadas" #: ../src/verbs.cpp:1537 msgid "Flip horizontally" -msgstr "Inverter horizontalmente" +msgstr "Espelhar na horizontal" #: ../src/verbs.cpp:1542 msgid "Flip vertically" -msgstr "Inverter verticalmente" +msgstr "Espelhar na vertical" #: ../src/verbs.cpp:1590 -#, fuzzy, c-format +#, c-format msgid "Set %d" -msgstr "Definir alfa" +msgstr "Conjunto %d" #: ../src/verbs.cpp:1599 ../src/verbs.cpp:2729 -#, fuzzy msgid "Create new selection set" -msgstr "Criar novo elemento de nó" +msgstr "Criar novo conjunto de seleção" #. TRANSLATORS: If you have translated the tutorial-basic.en.svgz file to your language, #. then translate this string as "tutorial-basic.LANG.svgz" (where LANG is your language @@ -27814,9 +26268,8 @@ msgid "tutorial-tracing.svg" msgstr "tutorial-tracing.pt_BR.svg" #: ../src/verbs.cpp:2194 -#, fuzzy msgid "tutorial-tracing-pixelart.svg" -msgstr "tutorial-tracing.pt_BR.svg" +msgstr "tutorial-tracing-pixelart.svg" #. TRANSLATORS: See "tutorial-basic.svg" comment. #: ../src/verbs.cpp:2198 @@ -27825,9 +26278,8 @@ msgstr "tutorial-calligraphy.pt_BR.svg" #. TRANSLATORS: See "tutorial-basic.svg" comment. #: ../src/verbs.cpp:2202 -#, fuzzy msgid "tutorial-interpolate.svg" -msgstr "tutorial-tips.pt_BR.svg" +msgstr "tutorial-interpolate.pt_BR.svg" #. TRANSLATORS: See "tutorial-basic.svg" comment. #: ../src/verbs.cpp:2206 @@ -27841,25 +26293,24 @@ msgstr "tutorial-tips.pt_BR.svg" #: ../src/verbs.cpp:2396 ../src/verbs.cpp:3012 msgid "Unlock all objects in the current layer" -msgstr "DesBloquear todos os objectos da camada actual" +msgstr "Desbloquear todos os objetos da camada atual" #: ../src/verbs.cpp:2400 ../src/verbs.cpp:3014 msgid "Unlock all objects in all layers" -msgstr "DesBloquear todos os objectos de todas as camadas" +msgstr "Desbloquear todos os objetos em todas as camadas" #: ../src/verbs.cpp:2404 ../src/verbs.cpp:3016 msgid "Unhide all objects in the current layer" -msgstr "Mostrar todos os objectos na camada actual" +msgstr "Desocultar todos os objetos escondidos na camada actual" #: ../src/verbs.cpp:2408 ../src/verbs.cpp:3018 msgid "Unhide all objects in all layers" -msgstr "Mostrar todos os objectos em todas as camadas" +msgstr "Desocultar todos os objetos escondidos em todas as camadas" #: ../src/verbs.cpp:2423 -#, fuzzy msgctxt "Verb" msgid "None" -msgstr "Nenhum" +msgstr "Nada" #: ../src/verbs.cpp:2423 msgid "Does nothing" @@ -27881,36 +26332,37 @@ msgstr "_Abrir..." #: ../src/verbs.cpp:2429 msgid "Open an existing document" -msgstr "Abrir um desenho existente" +msgstr "Abrir um documento existente" #: ../src/verbs.cpp:2430 msgid "Re_vert" -msgstr "Re_verter" +msgstr "_Reverter" #: ../src/verbs.cpp:2431 msgid "Revert to the last saved version of document (changes will be lost)" msgstr "" -"Reverter para a última versão salva do desenho (mudanças serão perdidas)" +"Reverter para a última versão gravada do documento (as alterações serão " +"perdidas)" #: ../src/verbs.cpp:2432 msgid "Save document" -msgstr "Guardar documento" +msgstr "Gravar documento" #: ../src/verbs.cpp:2434 msgid "Save _As..." -msgstr "Guardar _Como..." +msgstr "Gravar _Como..." #: ../src/verbs.cpp:2435 msgid "Save document under a new name" -msgstr "Guardar documento com outro nome" +msgstr "Gravar documento com outro nome" #: ../src/verbs.cpp:2436 msgid "Save a Cop_y..." -msgstr "Guardar Cóp_ia..." +msgstr "Gra_var Cópia..." #: ../src/verbs.cpp:2437 msgid "Save a copy of the document under a new name" -msgstr "Guardar uma cópia do documento com outro nome" +msgstr "Gravar uma cópia do documento com outro nome" #: ../src/verbs.cpp:2438 msgid "_Print..." @@ -27922,17 +26374,16 @@ msgstr "Imprimir documento" #. TRANSLATORS: "Vacuum Defs" means "Clean up defs" (so as to remove unused definitions) #: ../src/verbs.cpp:2441 -#, fuzzy msgid "Clean _up document" -msgstr "Não foi possível definir a origem da impressão: %s" +msgstr "_Optimizar Documento" #: ../src/verbs.cpp:2441 msgid "" "Remove unused definitions (such as gradients or clipping paths) from the <" "defs> of the document" msgstr "" -"Limpar recursos pré-definidos não utilizados neste documento (como degradês, " -"pincéis, clipping, etc)" +"Remover definições não utilizadas (como gradientes ou caminhos de recorte) " +"das <defs> do documento" #: ../src/verbs.cpp:2443 msgid "_Import..." @@ -27940,18 +26391,16 @@ msgstr "_Importar..." #: ../src/verbs.cpp:2444 msgid "Import a bitmap or SVG image into this document" -msgstr "Importar figura ou imagem SVG para o documento" +msgstr "Importar imagem bitmap ou SVG para este documento" #. new FileVerb(SP_VERB_FILE_EXPORT, "FileExport", N_("_Export Bitmap..."), N_("Export this document or a selection as a bitmap image"), INKSCAPE_ICON("document-export")), #: ../src/verbs.cpp:2446 -#, fuzzy msgid "Import Clip Art..." -msgstr "_Importar..." +msgstr "Importar Clip Art..." #: ../src/verbs.cpp:2447 -#, fuzzy msgid "Import clipart from Open Clip Art Library" -msgstr "Importar de Open Clip Art Library" +msgstr "Importar imagens clip art de Open Clip Art Library" #. new FileVerb(SP_VERB_FILE_EXPORT_TO_OCAL, "FileExportToOCAL", N_("Export To Open Clip Art Library"), N_("Export this document to Open Clip Art Library"), INKSCAPE_ICON_DOCUMENT_EXPORT_OCAL), #: ../src/verbs.cpp:2449 @@ -27960,7 +26409,7 @@ msgstr "Próxima Jan_ela" #: ../src/verbs.cpp:2450 msgid "Switch to the next document window" -msgstr "Trocar para a próxima janela de documento" +msgstr "Mudar para a próxima janela do documento" #: ../src/verbs.cpp:2451 msgid "P_revious Window" @@ -27968,15 +26417,15 @@ msgstr "Janela Ante_rior" #: ../src/verbs.cpp:2452 msgid "Switch to the previous document window" -msgstr "Trocar para a janela anterior de documento" +msgstr "Mudar para a janela anterior do documento" #: ../src/verbs.cpp:2453 msgid "_Close" -msgstr "Fe_char" +msgstr "_Fechar" #: ../src/verbs.cpp:2454 msgid "Close this document window" -msgstr "Fechar a janela do documento" +msgstr "Fechar a janela deste documento" #: ../src/verbs.cpp:2455 msgid "_Quit" @@ -27987,14 +26436,12 @@ msgid "Quit Inkscape" msgstr "Sair do Inkscape" #: ../src/verbs.cpp:2456 -#, fuzzy msgid "New from _Template..." -msgstr "Modelos de Cores..." +msgstr "Novo a partir de um _modelo..." #: ../src/verbs.cpp:2457 -#, fuzzy msgid "Create new project from template" -msgstr "Criar um novo documento a partir do modelo padrão" +msgstr "Criar um novo documento a partir de um modelo padrão" #: ../src/verbs.cpp:2460 msgid "Undo last action" @@ -28002,7 +26449,7 @@ msgstr "Desfazer a última ação" #: ../src/verbs.cpp:2463 msgid "Do again the last undone action" -msgstr "Refazer a última ação desfeita" +msgstr "Tornar a fazer a última ação desfeita" #: ../src/verbs.cpp:2464 msgid "Cu_t" @@ -28010,7 +26457,7 @@ msgstr "Cor_tar" #: ../src/verbs.cpp:2465 msgid "Cut selection to clipboard" -msgstr "Cortar a selecção para a área de transferência" +msgstr "Cortar a seleção para a área de transferência" #: ../src/verbs.cpp:2466 msgid "_Copy" @@ -28018,7 +26465,7 @@ msgstr "_Copiar" #: ../src/verbs.cpp:2467 msgid "Copy selection to clipboard" -msgstr "Copiar a selecção para a área de transferência" +msgstr "Copiar a seleção para a área de transferência" #: ../src/verbs.cpp:2468 msgid "_Paste" @@ -28027,7 +26474,7 @@ msgstr "Co_lar" #: ../src/verbs.cpp:2469 msgid "Paste objects from clipboard to mouse point, or paste text" msgstr "" -"Colar objectos ou texto da área de transferência para a posição do mouse" +"Colar objetos ou texto da área de transferência para a posição do cursor" #: ../src/verbs.cpp:2470 msgid "Paste _Style" @@ -28035,11 +26482,11 @@ msgstr "Colar E_stilo" #: ../src/verbs.cpp:2471 msgid "Apply the style of the copied object to selection" -msgstr "Aplicar o estilo do objecto copiado para a selecção" +msgstr "Aplicar na seleção o estilo do objeto copiado" #: ../src/verbs.cpp:2473 msgid "Scale selection to match the size of the copied object" -msgstr "Redimensionar selecção para o tamanho do objecto seleccionado" +msgstr "Redimensionar seleção para o tamanho do objeto selecionado" #: ../src/verbs.cpp:2474 msgid "Paste _Width" @@ -28047,8 +26494,7 @@ msgstr "Colar La_rgura" #: ../src/verbs.cpp:2475 msgid "Scale selection horizontally to match the width of the copied object" -msgstr "" -"Redimensionar selecção horizontalmente para a largura do objecto copiado" +msgstr "Redimensionar seleção horizontalmente para a largura do objeto copiado" #: ../src/verbs.cpp:2476 msgid "Paste _Height" @@ -28056,7 +26502,7 @@ msgstr "Colar _Altura" #: ../src/verbs.cpp:2477 msgid "Scale selection vertically to match the height of the copied object" -msgstr "Redimensionar selecção verticalmente para a altura do objecto copiado" +msgstr "Redimensionar seleção verticalmente para a altura do objeto copiado" #: ../src/verbs.cpp:2478 msgid "Paste Size Separately" @@ -28064,8 +26510,7 @@ msgstr "Colar Tamanho Separadamente" #: ../src/verbs.cpp:2479 msgid "Scale each selected object to match the size of the copied object" -msgstr "" -"Redimensionar cada objecto seleccionado para o tamanho do objecto copiado" +msgstr "Redimensionar cada objeto selecionado para o tamanho do objeto copiado" #: ../src/verbs.cpp:2480 msgid "Paste Width Separately" @@ -28076,8 +26521,8 @@ msgid "" "Scale each selected object horizontally to match the width of the copied " "object" msgstr "" -"Redimensionar horizontalmente cada objecto seleccionado para a largura do " -"objecto copiado" +"Redimensionar horizontalmente cada objeto selecionado para a largura do " +"objeto copiado" #: ../src/verbs.cpp:2482 msgid "Paste Height Separately" @@ -28088,8 +26533,8 @@ msgid "" "Scale each selected object vertically to match the height of the copied " "object" msgstr "" -"Redimensionar verticalmente cada objecto seleccionado para a altura do " -"objecto copiado" +"Redimensionar verticalmente cada objeto selecionado para a altura do objeto " +"copiado" #: ../src/verbs.cpp:2484 msgid "Paste _In Place" @@ -28098,53 +26543,48 @@ msgstr "Colar _No Lugar" #: ../src/verbs.cpp:2485 msgid "Paste objects from clipboard to the original location" msgstr "" -"Colar os objectos da área de transferência para o lugar original de onde " -"foram copiados" +"Colar os objetos da área de transferência no local original de onde foram " +"copiados" #: ../src/verbs.cpp:2486 msgid "Paste Path _Effect" -msgstr "Colar Caminho do _Efeito" +msgstr "Colar _Efeito em Tempo Real no Caminho" #: ../src/verbs.cpp:2487 -#, fuzzy msgid "Apply the path effect of the copied object to selection" -msgstr "Aplicar o estilo do objecto copiado para a selecção" +msgstr "Aplicar o efeito em tempo real no caminho copiado na seleção" #: ../src/verbs.cpp:2488 -#, fuzzy msgid "Remove Path _Effect" -msgstr "Remover efeito de caminho" +msgstr "Remover _Efeito em Tempo Real do Caminho" #: ../src/verbs.cpp:2489 -#, fuzzy msgid "Remove any path effects from selected objects" -msgstr "Remover efeito da selecção" +msgstr "Remover todos os efeitos em tempo real dos objetos selecionados" #: ../src/verbs.cpp:2490 -#, fuzzy msgid "_Remove Filters" -msgstr "Remover filtro" +msgstr "_Remover Filtros" #: ../src/verbs.cpp:2491 -#, fuzzy msgid "Remove any filters from selected objects" -msgstr "Remover máscara da selecção" +msgstr "Remover todos os filtros dos objetos selecionados" #: ../src/verbs.cpp:2492 msgid "_Delete" -msgstr "Apa_gar" +msgstr "_Eliminar" #: ../src/verbs.cpp:2493 msgid "Delete selection" -msgstr "Eliminar a selecção" +msgstr "Eliminar a seleção" #: ../src/verbs.cpp:2494 msgid "Duplic_ate" -msgstr "Duplic_ar" +msgstr "D_uplicar" #: ../src/verbs.cpp:2495 msgid "Duplicate selected objects" -msgstr "Duplicar os objectos seleccionados" +msgstr "Duplicar os objetos selecionados" #: ../src/verbs.cpp:2496 msgid "Create Clo_ne" @@ -28152,27 +26592,28 @@ msgstr "Criar Clo_ne" #: ../src/verbs.cpp:2497 msgid "Create a clone (a copy linked to the original) of selected object" -msgstr "" -"Criar um clone dos objectos seleccionados (uma cópia ligada ao original)" +msgstr "Criar um clone dos objetos selecionados (uma cópia ligada ao original)" #: ../src/verbs.cpp:2498 msgid "Unlin_k Clone" msgstr "Desl_igar Clone" #: ../src/verbs.cpp:2499 -#, fuzzy msgid "" "Cut the selected clones' links to the originals, turning them into " "standalone objects" -msgstr "Remover a ligação do clone com seu original" +msgstr "" +"Cortar as ligações dos clones selecionados aos originais, tornando-os em " +"objetos independentes" #: ../src/verbs.cpp:2500 msgid "Relink to Copied" -msgstr "" +msgstr "Religar para o Copiado" #: ../src/verbs.cpp:2501 msgid "Relink the selected clones to the object currently on the clipboard" msgstr "" +"Religar os clones selecionados ao objeto atualmente na área de transferência" #: ../src/verbs.cpp:2502 msgid "Select _Original" @@ -28180,72 +26621,74 @@ msgstr "Selecionar _Original" #: ../src/verbs.cpp:2503 msgid "Select the object to which the selected clone is linked" -msgstr "Seleccione o objecto ao qual o clone está ligado" +msgstr "Selecionar o objeto ao qual o clone está ligado" #: ../src/verbs.cpp:2504 -#, fuzzy msgid "Clone original path (LPE)" -msgstr "Substituir texto..." +msgstr "Clonar caminho original (Efeitos Interativos em Caminhos)" #: ../src/verbs.cpp:2505 msgid "" "Creates a new path, applies the Clone original LPE, and refers it to the " "selected path" msgstr "" +"Cria um novo caminho, Aplica o Clone original Efeitos Interativos em " +"Caminhos, e refere-o ao caminho selecionado" #: ../src/verbs.cpp:2506 -#, fuzzy msgid "Objects to _Marker" -msgstr "Objecto para padrão" +msgstr "Converter em _Marcador" #: ../src/verbs.cpp:2507 -#, fuzzy msgid "Convert selection to a line marker" -msgstr "Cortar a selecção para a área de transferência" +msgstr "" +"Converte os objetos selecionados num marcador de linha (aparece nos " +"marcadores em Estilo do Traço)" #: ../src/verbs.cpp:2508 -#, fuzzy msgid "Objects to Gu_ides" -msgstr "Objecto para padrão" +msgstr "Converter em _Guias" #: ../src/verbs.cpp:2509 msgid "" "Convert selected objects to a collection of guidelines aligned with their " "edges" msgstr "" +"Converte os objetos selecionados em várias guias com base nas bordas dos " +"objetos" #: ../src/verbs.cpp:2510 msgid "Objects to Patter_n" -msgstr "O_bjecto para Padrão" +msgstr "Co_nverter em Padrão" #: ../src/verbs.cpp:2511 msgid "Convert selection to a rectangle with tiled pattern fill" -msgstr "Converter a selecção para um padrão, a ser usado como preenchimento." +msgstr "" +"Converter a seleção num retângulo com preenchimento de padrão ladrilhado" #: ../src/verbs.cpp:2512 msgid "Pattern to _Objects" -msgstr "Padrão para _Objecto" +msgstr "Padrão para _Objetos" #: ../src/verbs.cpp:2513 msgid "Extract objects from a tiled pattern fill" -msgstr "Extrai objectos de um preenchimento com padrões" +msgstr "Extrai objetos de um preenchimento com padrões ladrilhados" #: ../src/verbs.cpp:2514 msgid "Group to Symbol" -msgstr "" +msgstr "Grupo para Símbolo" #: ../src/verbs.cpp:2515 -#, fuzzy msgid "Convert group to a symbol" -msgstr "Converter borda do objecto em caminho" +msgstr "Converte grupo em símbolo" #: ../src/verbs.cpp:2516 msgid "Symbol to Group" -msgstr "" +msgstr "Símbolo para Grupo" #: ../src/verbs.cpp:2517 msgid "Extract group from a symbol" -msgstr "" +msgstr "Extrair grupo de um símbolo" #: ../src/verbs.cpp:2518 msgid "Clea_r All" @@ -28253,85 +26696,76 @@ msgstr "Limpa_r Todos" #: ../src/verbs.cpp:2519 msgid "Delete all objects from document" -msgstr "Eliminar todos os objectos do desenho" +msgstr "Elimina todos os objetos do documento" #: ../src/verbs.cpp:2520 msgid "Select Al_l" -msgstr "Se_lecionar Todos" +msgstr "Selecionar _Tudo" #: ../src/verbs.cpp:2521 msgid "Select all objects or all nodes" -msgstr "Selecionar todos os objectos ou todos os nós" +msgstr "Selecionar todos os objetos ou todos os nós" #: ../src/verbs.cpp:2522 msgid "Select All in All La_yers" -msgstr "Selecionar _Tudo em Todas Camadas" +msgstr "Seleci_onar Tudo em Todas as Camadas" #: ../src/verbs.cpp:2523 msgid "Select all objects in all visible and unlocked layers" -msgstr "Selecionar todos os objectos em todas camadas visíveis e não trancadas" +msgstr "Selecionar todos os objetos em todas camadas visíveis e não bloqueadas" #: ../src/verbs.cpp:2524 -#, fuzzy msgid "Fill _and Stroke" -msgstr "_Preenchimento e Traço" +msgstr "Preenchimento e Tr_aço" #: ../src/verbs.cpp:2525 -#, fuzzy msgid "" "Select all objects with the same fill and stroke as the selected objects" msgstr "" -"Seleccione um objecto com padrão de preenchimento para extrair " -"objectos dele." +"Selecionar todos os objetos com o mesmo preenchimento e traço dos objetos " +"selecionados" #: ../src/verbs.cpp:2526 -#, fuzzy msgid "_Fill Color" -msgstr "Cor lisa" +msgstr "Cor do _Preenchimento" #: ../src/verbs.cpp:2527 -#, fuzzy msgid "Select all objects with the same fill as the selected objects" msgstr "" -"Seleccione um objecto com padrão de preenchimento para extrair " -"objectos dele." +"Selecionar todos os objetos com o mesmo preenchimento dos objetos " +"selecionados" #: ../src/verbs.cpp:2528 -#, fuzzy msgid "_Stroke Color" -msgstr "Definir cor do traço" +msgstr "Cor do _Traço" #: ../src/verbs.cpp:2529 -#, fuzzy msgid "Select all objects with the same stroke as the selected objects" -msgstr "" -"Redimensionar cada objecto seleccionado para o tamanho do objecto copiado" +msgstr "Selecionar todos os objetos com o mesmo traço dos objetos selecionados" #: ../src/verbs.cpp:2530 -#, fuzzy msgid "Stroke St_yle" -msgstr "Estilo de traço" +msgstr "_Estilo do Traço" #: ../src/verbs.cpp:2531 -#, fuzzy msgid "" "Select all objects with the same stroke style (width, dash, markers) as the " "selected objects" msgstr "" -"Redimensionar cada objecto seleccionado para o tamanho do objecto copiado" +"Selecionar todos os objetos com o mesmo estilo do traço (espessura, " +"tracejado, marcadores) dos objetos selecionados" #: ../src/verbs.cpp:2532 -#, fuzzy msgid "_Object Type" -msgstr "Objecto" +msgstr "Tipo de _Objeto" #: ../src/verbs.cpp:2533 -#, fuzzy msgid "" "Select all objects with the same object type (rect, arc, text, path, bitmap " "etc) as the selected objects" msgstr "" -"Redimensionar cada objecto seleccionado para o tamanho do objecto copiado" +"Selecionar todos os objetos do mesmo tipo (retângulo, arco, texto, caminho, " +"bitmap, etc.) dos objetos selecionados" #: ../src/verbs.cpp:2534 msgid "In_vert Selection" @@ -28340,8 +26774,8 @@ msgstr "In_verter Seleção" #: ../src/verbs.cpp:2535 msgid "Invert selection (unselect what is selected and select everything else)" msgstr "" -"Inverter selecção (desselecionar o que está seleccionado e selecionar todo o " -"restante)" +"Inverter seleção (desseleciona o que está selecionado e seleciona tudo o " +"resto)" #: ../src/verbs.cpp:2536 msgid "Invert in All Layers" @@ -28349,7 +26783,7 @@ msgstr "Inverter em Todas Camadas" #: ../src/verbs.cpp:2537 msgid "Invert selection in all visible and unlocked layers" -msgstr "Inverter selecção em todas camadas visíveis e destravadas." +msgstr "Inverter seleção em todas camadas visíveis e desbloqueadas" #: ../src/verbs.cpp:2538 msgid "Select Next" @@ -28357,7 +26791,7 @@ msgstr "Selecionar Próximo" #: ../src/verbs.cpp:2539 msgid "Select next object or node" -msgstr "Selecionar próximo objecto ou nó" +msgstr "Selecionar próximo objeto ou nó" #: ../src/verbs.cpp:2540 msgid "Select Previous" @@ -28365,103 +26799,96 @@ msgstr "Selecionar Anterior" #: ../src/verbs.cpp:2541 msgid "Select previous object or node" -msgstr "Selecionar objecto ou nó anterior" +msgstr "Selecionar objeto ou nó anterior" #: ../src/verbs.cpp:2542 msgid "D_eselect" -msgstr "Remover S_eleção" +msgstr "_Desselecionar" #: ../src/verbs.cpp:2543 msgid "Deselect any selected objects or nodes" -msgstr "Retira a selecção de qualquer objecto ou nó" +msgstr "Desselecionar qualquer objeto ou nó selecionados" #: ../src/verbs.cpp:2545 -#, fuzzy msgid "Delete all the guides in the document" -msgstr "Eliminar todos os objectos do desenho" +msgstr "Eliminar todas as guias no documento" #: ../src/verbs.cpp:2546 -#, fuzzy msgid "Lock All Guides" -msgstr "DesBloquear Tudo" +msgstr "Bloquear Todas as Guias" #: ../src/verbs.cpp:2546 ../src/widgets/desktop-widget.cpp:404 -#, fuzzy msgid "Toggle lock of all guides in the document" -msgstr "Eliminar todos os objectos do desenho" +msgstr "Bloquear/desbloquear todas as guias no documento" #: ../src/verbs.cpp:2547 msgid "Create _Guides Around the Page" -msgstr "" +msgstr "Criar _Guias à Volta da Página" #: ../src/verbs.cpp:2548 msgid "Create four guides aligned with the page borders" -msgstr "" +msgstr "Criar 4 guias alinhadas às bordas da página" #: ../src/verbs.cpp:2549 -#, fuzzy msgid "Next path effect parameter" -msgstr "Próximo " +msgstr "Próximo parâmetro de efeito no caminho" #: ../src/verbs.cpp:2550 -#, fuzzy msgid "Show next editable path effect parameter" -msgstr "Próximo " +msgstr "Mostrar o próximo parâmetro de efeito no caminho editável" #. Selection #: ../src/verbs.cpp:2553 msgid "Raise to _Top" -msgstr "Levantar para o _Topo" +msgstr "Subir para o _Topo" #: ../src/verbs.cpp:2554 msgid "Raise selection to top" -msgstr "Levantar a selecção para o topo" +msgstr "Levantar a seleção para o topo de todos os outros elementos" #: ../src/verbs.cpp:2555 msgid "Lower to _Bottom" -msgstr "_Baixar para o Fundo" +msgstr "Baixar para o _Fundo" #: ../src/verbs.cpp:2556 msgid "Lower selection to bottom" -msgstr "Baixar a selecção até ficar em baixo de todos os outros elementos" +msgstr "Baixar a seleção até ao fundo de todos os outros elementos" #: ../src/verbs.cpp:2557 msgid "_Raise" -msgstr "Levanta_r" +msgstr "_Subir" #: ../src/verbs.cpp:2558 msgid "Raise selection one step" -msgstr "Levantar a selecção um passo" +msgstr "Levantar a seleção um passo" #: ../src/verbs.cpp:2559 msgid "_Lower" -msgstr "Bai_xar" +msgstr "_Baixar" #: ../src/verbs.cpp:2560 msgid "Lower selection one step" -msgstr "Baixar a selecção um passo" +msgstr "Baixar a seleção um passo" #: ../src/verbs.cpp:2562 msgid "Group selected objects" -msgstr "Agrupar os objectos seleccionados" +msgstr "Agrupar os objetos selecionados" #: ../src/verbs.cpp:2564 msgid "Ungroup selected groups" -msgstr "Desagrupar os grupos seleccionados" +msgstr "Desagrupar os grupos selecionados" #: ../src/verbs.cpp:2565 -#, fuzzy msgid "_Pop selected objects out of group" -msgstr "Agrupar os objectos seleccionados" +msgstr "_Subir Objetos Selecionados para o Topo" #: ../src/verbs.cpp:2566 -#, fuzzy msgid "Pop selected objects out of group" -msgstr "Agrupar os objectos seleccionados" +msgstr "Desagrupa e coloca na camada mais acima os objetos selecionados" #: ../src/verbs.cpp:2568 msgid "_Put on Path" -msgstr "_Por no Caminho" +msgstr "_Colocar no Caminho" #: ../src/verbs.cpp:2570 msgid "_Remove from Path" @@ -28469,13 +26896,15 @@ msgstr "_Remover do caminho" #: ../src/verbs.cpp:2572 msgid "Remove Manual _Kerns" -msgstr "Remover _Kerns Manuais" +msgstr "Remover _Entre-Letras Manuais" #. TRANSLATORS: "glyph": An image used in the visual representation of characters; #. roughly speaking, how a character looks. A font is a set of glyphs. #: ../src/verbs.cpp:2575 msgid "Remove all manual kerns and glyph rotations from a text object" -msgstr "Remover todos kerns manuais e rotações de glyph de um objecto de texto" +msgstr "" +"Remover todos espaçamentos entre-letras manuais e rotações de caracteres de " +"um texto" #: ../src/verbs.cpp:2577 msgid "_Union" @@ -28483,7 +26912,7 @@ msgstr "_União" #: ../src/verbs.cpp:2578 msgid "Create union of selected paths" -msgstr "União entre os caminhos seleccionados" +msgstr "Criar união dos caminhos selecionados" #: ../src/verbs.cpp:2579 msgid "_Intersection" @@ -28491,7 +26920,7 @@ msgstr "_Interseção" #: ../src/verbs.cpp:2580 msgid "Create intersection of selected paths" -msgstr "Interseção entre os caminhos seleccionados" +msgstr "Criar interseção dos caminhos selecionados" #: ../src/verbs.cpp:2581 msgid "_Difference" @@ -28499,7 +26928,7 @@ msgstr "_Diferença" #: ../src/verbs.cpp:2582 msgid "Create difference of selected paths (bottom minus top)" -msgstr "Diferença entre os objectos seleccionados (fundo menos topo)" +msgstr "Criar diferença dos caminhos selecionados (de baixo menos o de cima)" #: ../src/verbs.cpp:2583 msgid "E_xclusion" @@ -28510,8 +26939,8 @@ msgid "" "Create exclusive OR of selected paths (those parts that belong to only one " "path)" msgstr "" -"OU exclusivo entre os objectos seleccionados (as partes pertencentes a " -"apenas um caminho)" +"Criar exclusivo OU dos caminhos selecionados (as partes que pertençam apenas " +"a 1 caminho)" #: ../src/verbs.cpp:2585 msgid "Di_vision" @@ -28519,7 +26948,7 @@ msgstr "Di_visão" #: ../src/verbs.cpp:2586 msgid "Cut the bottom path into pieces" -msgstr "Cortar o objecto do fundo em pedaços" +msgstr "Cortar o objeto do fundo em pedaços" #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the #. Advanced tutorial for more info @@ -28530,7 +26959,7 @@ msgstr "Cortar Camin_ho" #: ../src/verbs.cpp:2590 msgid "Cut the bottom path's stroke into pieces, removing fill" msgstr "" -"Cortar o traço do objecto do fundo em pedaços, removendo o preenchimento" +"Cortar o traço do objeto do fundo em pedaços, removendo o preenchimento" #. TRANSLATORS: "outset": expand a shape by offsetting the object's path, #. i.e. by displacing it perpendicular to the path in each point. @@ -28541,7 +26970,7 @@ msgstr "_Expandir" #: ../src/verbs.cpp:2595 msgid "Outset selected paths" -msgstr "Expandir o(s) caminho(s) seleccionados" +msgstr "Expandir os caminhos selecionados" #: ../src/verbs.cpp:2597 msgid "O_utset Path by 1 px" @@ -28549,15 +26978,15 @@ msgstr "E_xpandir Caminho em 1px" #: ../src/verbs.cpp:2598 msgid "Outset selected paths by 1 px" -msgstr "Expandir os caminhos seleccionados em 1px" +msgstr "Expandir os caminhos selecionados em 1px" #: ../src/verbs.cpp:2600 msgid "O_utset Path by 10 px" -msgstr "E_xpandir Ca_minho em 10px" +msgstr "Expandir Ca_minho em 10px" #: ../src/verbs.cpp:2601 msgid "Outset selected paths by 10 px" -msgstr "Expandir os caminhos seleccionados em 10px" +msgstr "Expandir os caminhos selecionados em 10px" #. TRANSLATORS: "inset": contract a shape by offsetting the object's path, #. i.e. by displacing it perpendicular to the path in each point. @@ -28568,47 +26997,49 @@ msgstr "Co_mprimir" #: ../src/verbs.cpp:2606 msgid "Inset selected paths" -msgstr "Comprimir caminhos seleccionados" +msgstr "Comprimir caminhos selecionados" #: ../src/verbs.cpp:2608 msgid "I_nset Path by 1 px" -msgstr "Ava_nçar Caminho por 1px" +msgstr "Co_mprimir Caminho 1px" #: ../src/verbs.cpp:2609 msgid "Inset selected paths by 1 px" -msgstr "Comprime o caminho seleccionado por 1px" +msgstr "Comprimir o caminho selecionado em 1px" #: ../src/verbs.cpp:2611 msgid "I_nset Path by 10 px" -msgstr "Ava_nçar Caminho por 10px" +msgstr "Com_primir Caminho 10px" #: ../src/verbs.cpp:2612 msgid "Inset selected paths by 10 px" -msgstr "Comprimir o caminho seleccionado por 10px" +msgstr "Comprimir o caminho selecionado em 10px" #: ../src/verbs.cpp:2614 msgid "D_ynamic Offset" -msgstr "Tipografia D_inâmica" +msgstr "Deslocamento D_inâmico" #: ../src/verbs.cpp:2614 msgid "Create a dynamic offset object" -msgstr "Criar um objecto tipográfico dinâmico" +msgstr "Criar um objeto deslocado dinâmico" #: ../src/verbs.cpp:2616 msgid "_Linked Offset" -msgstr "Tipografia _Ligada" +msgstr "Deslocamento _Ligado ao Original" #: ../src/verbs.cpp:2617 msgid "Create a dynamic offset object linked to the original path" -msgstr "Cria um objecto tipográfico dinâmico ligado ao caminho original" +msgstr "Criar um objeto deslocado dinâmico ligado ao caminho original" #: ../src/verbs.cpp:2619 msgid "_Stroke to Path" -msgstr "_Traço para caminho" +msgstr "_Converter Traço num Caminho" #: ../src/verbs.cpp:2620 msgid "Convert selected object's stroke to paths" -msgstr "Converte o traço do objecto seleccionado em caminho" +msgstr "" +"Converter o traço do objeto selecionado em caminhos (se tiver traço, " +"converte-o num caminho pelos contornos do traço)" #: ../src/verbs.cpp:2621 msgid "Si_mplify" @@ -28616,38 +27047,38 @@ msgstr "Si_mplificar" #: ../src/verbs.cpp:2622 msgid "Simplify selected paths (remove extra nodes)" -msgstr "Simplificar os caminhos seleccionados removendo nós adicionais" +msgstr "Simplificar os caminhos selecionados (remove nós adicionais)" #: ../src/verbs.cpp:2623 msgid "_Reverse" -msgstr "_Reverter" +msgstr "_Inverter" #: ../src/verbs.cpp:2624 msgid "Reverse the direction of selected paths (useful for flipping markers)" msgstr "" -"Reverte a direção dos caminhos seleccionados (útil para inverter marcadores)" +"Inverter a direção dos caminhos selecionados (útil para inverter marcadores)" #: ../src/verbs.cpp:2629 msgid "Create one or more paths from a bitmap by tracing it" -msgstr "Cria um ou mais caminhos a partir de uma figura" +msgstr "Criar um ou mais caminhos a partir da vetorização de uma imagem bitmap" #: ../src/verbs.cpp:2632 -#, fuzzy msgid "Trace Pixel Art..." -msgstr "_Vectorizar Bitmap..." +msgstr "Vetorizar Arte de Píxeis..." #: ../src/verbs.cpp:2633 msgid "Create paths using Kopf-Lischinski algorithm to vectorize pixel art" msgstr "" +"Criar caminhos utilizando o algoritmo Kopf-Lischinski para vetorizar imagens " +"compostas por píxeis" #: ../src/verbs.cpp:2634 -#, fuzzy msgid "Make a _Bitmap Copy" -msgstr "Fazer u_ma Cópia em Bitmap" +msgstr "Fazer uma Cópia _Bitmap" #: ../src/verbs.cpp:2635 msgid "Export selection to a bitmap and insert it into document" -msgstr "Exportar selecção para uma figura e inseri-la para dentro do desenho" +msgstr "Exportar seleção para uma imagem bitmap e inseri-la no documento" #: ../src/verbs.cpp:2636 msgid "_Combine" @@ -28655,7 +27086,7 @@ msgstr "_Combinar" #: ../src/verbs.cpp:2637 msgid "Combine several paths into one" -msgstr "Combina diversos caminhos em um" +msgstr "Combina os caminhos selecionados num só caminho" #. TRANSLATORS: "to cut a path" is not the same as "to break a path apart" - see the #. Advanced tutorial for more info @@ -28665,17 +27096,15 @@ msgstr "Sep_arar" #: ../src/verbs.cpp:2641 msgid "Break selected paths into subpaths" -msgstr "Separar caminhos seleccionados em outros caminhos" +msgstr "Separa os caminhos selecionados" #: ../src/verbs.cpp:2642 -#, fuzzy msgid "_Arrange..." -msgstr "Ângulo" +msgstr "_Organizar..." #: ../src/verbs.cpp:2643 -#, fuzzy msgid "Arrange selected objects in a table or circle" -msgstr "Arrumar objectos seleccionados em um padrão de grelha" +msgstr "Organizar objetos selecionados num retângulo ou círculo" #. Layer #: ../src/verbs.cpp:2645 @@ -28688,19 +27117,19 @@ msgstr "Cria uma nova camada" #: ../src/verbs.cpp:2647 msgid "Re_name Layer..." -msgstr "Re_nomear Camada..." +msgstr "Alterar _Nome da Camada..." #: ../src/verbs.cpp:2648 msgid "Rename the current layer" -msgstr "Renomear a camada actual" +msgstr "Muda o nome da camada atual" #: ../src/verbs.cpp:2649 msgid "Switch to Layer Abov_e" -msgstr "Mudar para a Camada Acima" +msgstr "Mudar para a Camada Aci_ma" #: ../src/verbs.cpp:2650 msgid "Switch to the layer above the current" -msgstr "Mudar para a camada acima da actual" +msgstr "Mudar para a camada acima da atual" #: ../src/verbs.cpp:2651 msgid "Switch to Layer Belo_w" @@ -28708,28 +27137,27 @@ msgstr "Mudar para a Camada Abai_xo" #: ../src/verbs.cpp:2652 msgid "Switch to the layer below the current" -msgstr "Mudar para a camada abaixo da corrente" +msgstr "Mudar para a camada abaixo da atual" #: ../src/verbs.cpp:2653 msgid "Move Selection to Layer Abo_ve" -msgstr "Mo_ver selecção para a Camada Acima" +msgstr "Mover Seleção para a Camada _Acima" #: ../src/verbs.cpp:2654 msgid "Move selection to the layer above the current" -msgstr "Mover selecção para a camada acima da actual" +msgstr "Mover seleção para a camada acima da atual" #: ../src/verbs.cpp:2655 msgid "Move Selection to Layer Bel_ow" -msgstr "Mover selecção para a camada abaix_o" +msgstr "Mover Seleção para a Camada A_baixo" #: ../src/verbs.cpp:2656 msgid "Move selection to the layer below the current" -msgstr "Mover selecção para a camada abaixo da actual" +msgstr "Mover seleção para a camada abaixo da atual" #: ../src/verbs.cpp:2657 -#, fuzzy msgid "Move Selection to Layer..." -msgstr "Mo_ver selecção para a Camada Acima" +msgstr "Mover Seleção para a Camada..." #: ../src/verbs.cpp:2659 msgid "Layer to _Top" @@ -28737,152 +27165,132 @@ msgstr "Camada para o _Topo" #: ../src/verbs.cpp:2660 msgid "Raise the current layer to the top" -msgstr "Levanta a camada actual para o topo" +msgstr "Levanta a camada atual para o topo" #: ../src/verbs.cpp:2661 msgid "Layer to _Bottom" -msgstr "Camada para o _Baixo" +msgstr "Camada para o _Fundo" #: ../src/verbs.cpp:2662 msgid "Lower the current layer to the bottom" -msgstr "Abaixa a camada actual para o fundo" +msgstr "Baixa a camada atual para o fundo" #: ../src/verbs.cpp:2663 msgid "_Raise Layer" -msgstr "_Levantar Camada" +msgstr "_Subir Camada" #: ../src/verbs.cpp:2664 msgid "Raise the current layer" -msgstr "Levantar a camada actual" +msgstr "Levanta a camada atual" #: ../src/verbs.cpp:2665 msgid "_Lower Layer" -msgstr "Baixar Camada" +msgstr "_Baixar Camada" #: ../src/verbs.cpp:2666 msgid "Lower the current layer" -msgstr "Baixar a camada actual" +msgstr "Baixa a camada atual" #: ../src/verbs.cpp:2667 -#, fuzzy msgid "D_uplicate Current Layer" -msgstr "Eliminar Camada Atual" +msgstr "D_uplicar Camada Atual" #: ../src/verbs.cpp:2668 -#, fuzzy msgid "Duplicate an existing layer" -msgstr "Duplicar filtro" +msgstr "Duplica uma camada existente" #: ../src/verbs.cpp:2669 msgid "_Delete Current Layer" -msgstr "Eliminar Camada Atual" +msgstr "_Eliminar Camada Atual" #: ../src/verbs.cpp:2670 msgid "Delete the current layer" -msgstr "Eliminar a camada actual" +msgstr "Elimina a camada atual" #: ../src/verbs.cpp:2671 -#, fuzzy msgid "_Show/hide other layers" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "_Ocultar ou desocultar outras camadas" #: ../src/verbs.cpp:2672 -#, fuzzy msgid "Solo the current layer" -msgstr "Baixar a camada actual" +msgstr "Apenas a camada atual" #: ../src/verbs.cpp:2673 -#, fuzzy msgid "_Show all layers" -msgstr "Selecionar em todas as camadas" +msgstr "_Mostrar todas as camadas" #: ../src/verbs.cpp:2674 -#, fuzzy msgid "Show all the layers" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "Mostra todas as camadas" #: ../src/verbs.cpp:2675 -#, fuzzy msgid "_Hide all layers" -msgstr "Ocultar Camada" +msgstr "_Ocultar todas as camadas" #: ../src/verbs.cpp:2676 -#, fuzzy msgid "Hide all the layers" -msgstr "Ocultar Camada" +msgstr "Oculta todas as camadas" #: ../src/verbs.cpp:2677 -#, fuzzy msgid "_Lock all layers" -msgstr "Selecionar em todas as camadas" +msgstr "_Bloquear todas as camadas" #: ../src/verbs.cpp:2678 -#, fuzzy msgid "Lock all the layers" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "Bloqueia todas as camadas" #: ../src/verbs.cpp:2679 -#, fuzzy msgid "Lock/Unlock _other layers" -msgstr "Bloquear ou desbloquear a camada actual" +msgstr "Bloquear ou desbloquear _outras camadas" #: ../src/verbs.cpp:2680 -#, fuzzy msgid "Lock all the other layers" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "Bloqueia todas as outras camadas" #: ../src/verbs.cpp:2681 -#, fuzzy msgid "_Unlock all layers" -msgstr "DesBloquear Camada" +msgstr "_Desbloquear todas as camadas" #: ../src/verbs.cpp:2682 -#, fuzzy msgid "Unlock all the layers" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "Desbloqueia todas as camadas" #: ../src/verbs.cpp:2683 -#, fuzzy msgid "_Lock/Unlock Current Layer" -msgstr "Bloquear ou desbloquear a camada actual" +msgstr "_Bloquear ou Desbloquear Camada Atual" #: ../src/verbs.cpp:2684 -#, fuzzy msgid "Toggle lock on current layer" -msgstr "Baixar a camada actual" +msgstr "Bloqueia ou desbloqueia a camada atual" #: ../src/verbs.cpp:2685 -#, fuzzy msgid "_Show/hide Current Layer" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "_Ocultar ou Desocultar a Camada Atual" #: ../src/verbs.cpp:2686 -#, fuzzy msgid "Toggle visibility of current layer" -msgstr "Baixar a camada actual" +msgstr "Mostra ou oculta a camada atual" #. Object #: ../src/verbs.cpp:2689 -#, fuzzy msgid "Rotate _90° CW" -msgstr "Girar +_90° graus" +msgstr "Rodar _90°" #. This is shared between tooltips and statusbar, so they #. must use UTF-8, not HTML entities for special characters. #: ../src/verbs.cpp:2692 msgid "Rotate selection 90° clockwise" -msgstr "Girar a selecção 90° graus sentido hórario" +msgstr "Rodar a seleção 90° no sentido horário" #: ../src/verbs.cpp:2693 -#, fuzzy msgid "Rotate 9_0° CCW" -msgstr "Girar 9_0° graus" +msgstr "Rodar -9_0°" #. This is shared between tooltips and statusbar, so they #. must use UTF-8, not HTML entities for special characters. #: ../src/verbs.cpp:2696 msgid "Rotate selection 90° counter-clockwise" -msgstr "Girar a selecção 90° graus sentido anti-horário" +msgstr "Rodar a seleção 90° no sentido anti-horário" #: ../src/verbs.cpp:2697 msgid "Remove _Transformations" @@ -28890,27 +27298,29 @@ msgstr "Remover _Transformações" #: ../src/verbs.cpp:2698 msgid "Remove transformations from object" -msgstr "Remover transformações do objecto seleccionado" +msgstr "Remover transformações do objeto selecionado" #: ../src/verbs.cpp:2699 msgid "_Object to Path" -msgstr "_Objecto para Caminho" +msgstr "_Converter Objeto num Caminho" #: ../src/verbs.cpp:2700 msgid "Convert selected object to path" -msgstr "Converte os objectos seleccionados em caminhos" +msgstr "" +"Converte os objetos selecionados em caminhos, por exemplo converte " +"retângulos ou textos em caminhos" #: ../src/verbs.cpp:2701 msgid "_Flow into Frame" -msgstr "_Formatar Texto na Moldura" +msgstr "_Fluir na Moldura" #: ../src/verbs.cpp:2702 msgid "" "Put text into a frame (path or shape), creating a flowed text linked to the " "frame object" msgstr "" -"Posiciona o texto em uma moldura (forma ou caminho), criando uma caixa de " -"texto ligada ao objecto" +"Posiciona o texto numa moldura (forma ou caminho), criando um texto fluido " +"ligado à moldura do objeto" #: ../src/verbs.cpp:2703 msgid "_Unflow" @@ -28918,43 +27328,40 @@ msgstr "Retirar da Mold_ura" #: ../src/verbs.cpp:2704 msgid "Remove text from frame (creates a single-line text object)" -msgstr "" -"Remover texto da caixa de texto (criar um objecto de texto com linha simples)" +msgstr "Remover texto da moldura (cria um objeto com texto numa só linha)" #: ../src/verbs.cpp:2705 msgid "_Convert to Text" -msgstr "Converter para Texto" +msgstr "Retirar da Moldura mas Manter _Aparência" #: ../src/verbs.cpp:2706 msgid "Convert flowed text to regular text object (preserves appearance)" msgstr "" -"Converter o texto flutuante para um objecto de texto normal (preservar " -"aparência)" +"Converter texto fluido num texto normal (preservando a aparência na moldura)" #: ../src/verbs.cpp:2708 msgid "Flip _Horizontal" -msgstr "Inverter _Horizontalmente" +msgstr "Espelhar na _Horizontal" #: ../src/verbs.cpp:2708 msgid "Flip selected objects horizontally" -msgstr "Inverter objectos seleccionados horizontalmente" +msgstr "Espelhar horizontalmente os objetos selecionados" #: ../src/verbs.cpp:2711 msgid "Flip _Vertical" -msgstr "Inverter _Verticalmente" +msgstr "Espelhar na _Vertical" #: ../src/verbs.cpp:2711 msgid "Flip selected objects vertically" -msgstr "Inverter objectos seleccionados verticalmente" +msgstr "Espelhar verticalmente os objetos selecionados" #: ../src/verbs.cpp:2714 msgid "Apply mask to selection (using the topmost object as mask)" -msgstr "Aplicar mask para a selecção (usando o objecto acima como mask)" +msgstr "Aplica máscara à seleção (usando o objeto mais acima como máscara)" #: ../src/verbs.cpp:2716 -#, fuzzy msgid "Edit mask" -msgstr "Definir máscara" +msgstr "Editar máscara" #: ../src/verbs.cpp:2717 ../src/verbs.cpp:2725 msgid "_Release" @@ -28962,214 +27369,196 @@ msgstr "_Remover" #: ../src/verbs.cpp:2718 msgid "Remove mask from selection" -msgstr "Remover máscara da selecção" +msgstr "Remove a máscara da seleção" #: ../src/verbs.cpp:2720 msgid "" "Apply clipping path to selection (using the topmost object as clipping path)" msgstr "" -"Aplicar clip ao caminho da selecção (usa o objecto acima como o caminho para " -"o clip)" +"Aplicar caminho recortado à seleção (usando o objeto mais acima como caminho " +"recortado)" #: ../src/verbs.cpp:2721 -#, fuzzy msgid "Create Cl_ip Group" -msgstr "Criar Clo_ne" +msgstr "Criar Grupo de _Recorte" #: ../src/verbs.cpp:2722 -#, fuzzy msgid "Creates a clip group using the selected objects as a base" msgstr "" -"Criar um clone dos objectos seleccionados (uma cópia ligada ao original)" +"Cria um grupo de caminhos recortados utilizando os objetos selecionados como " +"base" #: ../src/verbs.cpp:2724 -#, fuzzy msgid "Edit clipping path" -msgstr "Definir caminho recortado" +msgstr "Editar caminho recortado" #: ../src/verbs.cpp:2726 msgid "Remove clipping path from selection" -msgstr "Remover clip ao caminho da selecção" +msgstr "Remover caminho recortado da seleção" #. Tools #: ../src/verbs.cpp:2731 -#, fuzzy msgctxt "ContextVerb" msgid "Select" msgstr "Selecionar" #: ../src/verbs.cpp:2732 msgid "Select and transform objects" -msgstr "Selecionar e transformar objectos" +msgstr "Ferramenta de Selecionar: selecionar e transformar objetos" #: ../src/verbs.cpp:2733 -#, fuzzy msgctxt "ContextVerb" msgid "Node Edit" -msgstr "Alterar Nó" +msgstr "Editar Nó" #: ../src/verbs.cpp:2734 msgid "Edit paths by nodes" -msgstr "Editar caminhos por nós" +msgstr "Ferramenta Nó: editar caminhos pelos nós" #: ../src/verbs.cpp:2735 -#, fuzzy msgctxt "ContextVerb" msgid "Tweak" -msgstr "Ajuste" +msgstr "Ajustar" #: ../src/verbs.cpp:2736 msgid "Tweak objects by sculpting or painting" -msgstr "Ajustar objectos ao esculpí-los ou pintá-los" +msgstr "" +"Ferramenta de Forças: altera objetos sob ação de forças gravíticas ou toque" #: ../src/verbs.cpp:2737 -#, fuzzy msgctxt "ContextVerb" msgid "Spray" -msgstr "Espiral" +msgstr "Pulverizar" #: ../src/verbs.cpp:2738 -#, fuzzy msgid "Spray objects by sculpting or painting" -msgstr "Ajustar objectos ao esculpí-los ou pintá-los" +msgstr "" +"Ferramenta Pulverizar: criar vários objetos iguais através de escultura ou " +"pintura" #: ../src/verbs.cpp:2739 -#, fuzzy msgctxt "ContextVerb" msgid "Rectangle" msgstr "Retângulo" #: ../src/verbs.cpp:2740 msgid "Create rectangles and squares" -msgstr "Criar retângulos e quadrados" +msgstr "Ferramenta Retângulo: criar retângulos e quadrados" #: ../src/verbs.cpp:2741 -#, fuzzy msgctxt "ContextVerb" msgid "3D Box" msgstr "Caixa 3D" #: ../src/verbs.cpp:2742 msgid "Create 3D boxes" -msgstr "Criar caixas 3D" +msgstr "Ferramenta Caixa 3D: criar caixas 3D em perspetiva" #: ../src/verbs.cpp:2743 -#, fuzzy msgctxt "ContextVerb" msgid "Ellipse" msgstr "Elipse" #: ../src/verbs.cpp:2744 msgid "Create circles, ellipses, and arcs" -msgstr "Criar círculos, elipses e arcos" +msgstr "Ferramenta Círculo: criar círculos, elipses e arcos" #: ../src/verbs.cpp:2745 -#, fuzzy msgctxt "ContextVerb" msgid "Star" -msgstr "Estrela" +msgstr "Polígono" #: ../src/verbs.cpp:2746 msgid "Create stars and polygons" -msgstr "Criar estrelas e polígonos" +msgstr "Ferramenta Polígono: criar polígonos e estrelas" #: ../src/verbs.cpp:2747 -#, fuzzy msgctxt "ContextVerb" msgid "Spiral" msgstr "Espiral" #: ../src/verbs.cpp:2748 msgid "Create spirals" -msgstr "Criar espirais" +msgstr "Ferramenta Espiral: criar espirais" #: ../src/verbs.cpp:2749 -#, fuzzy msgctxt "ContextVerb" msgid "Pencil" msgstr "Lápis" #: ../src/verbs.cpp:2750 msgid "Draw freehand lines" -msgstr "Desenhar linhas a mão-livre" +msgstr "Ferramenta Lápis: desenhar linhas à mão-livre" #: ../src/verbs.cpp:2751 -#, fuzzy msgctxt "ContextVerb" msgid "Pen" msgstr "Caneta" #: ../src/verbs.cpp:2752 msgid "Draw Bezier curves and straight lines" -msgstr "Desenhar curvas Bezier e linhas retas" +msgstr "Ferramenta Caneta: desenhar curvas Bézier e linhas retas" #: ../src/verbs.cpp:2753 -#, fuzzy msgctxt "ContextVerb" msgid "Calligraphy" msgstr "Caligrafia" #: ../src/verbs.cpp:2754 msgid "Draw calligraphic or brush strokes" -msgstr "Desenhar linhas caligráficas ou traços de pincel" +msgstr "" +"Ferramenta Caligrafia: desenhar linhas caligráficas ou traços de pincel" #: ../src/verbs.cpp:2756 msgid "Create and edit text objects" -msgstr "Criar e alterar objectos texto" +msgstr "Ferramenta Texto: criar e alterar textos" #: ../src/verbs.cpp:2757 -#, fuzzy msgctxt "ContextVerb" msgid "Gradient" -msgstr "Degradê" +msgstr "Gradiente" #: ../src/verbs.cpp:2758 msgid "Create and edit gradients" -msgstr "Criar e editar degradês" +msgstr "Ferramenta Gradiente: criar e editar gradientes" #: ../src/verbs.cpp:2759 msgctxt "ContextVerb" msgid "Mesh" -msgstr "" +msgstr "Malha" #: ../src/verbs.cpp:2760 -#, fuzzy msgid "Create and edit meshes" -msgstr "Criar e editar degradês" +msgstr "Ferramenta Malha: criar e editar malhas" #: ../src/verbs.cpp:2761 -#, fuzzy msgctxt "ContextVerb" msgid "Zoom" -msgstr "Ampliação" +msgstr "Lupa" #: ../src/verbs.cpp:2762 msgid "Zoom in or out" -msgstr "Ampliar ou Reduzir nível de zoom" +msgstr "Ferramenta Lupa: aumentar ou diminuir a vista" #: ../src/verbs.cpp:2764 -#, fuzzy msgid "Measurement tool" -msgstr "Unidade de medida:" +msgstr "Ferramenta Fita Métrica: medir e criar cotas no desenho" #: ../src/verbs.cpp:2765 -#, fuzzy msgctxt "ContextVerb" msgid "Dropper" -msgstr "Borrão" +msgstr "Pipeta" #: ../src/verbs.cpp:2767 -#, fuzzy msgctxt "ContextVerb" msgid "Connector" -msgstr "Conector" +msgstr "Conetor de Diagrama" #: ../src/verbs.cpp:2768 msgid "Create diagram connectors" -msgstr "Criar conectores de diagrama" +msgstr "Ferramenta Conetor de Diagrama: criar conetores de diagramas" #: ../src/verbs.cpp:2771 -#, fuzzy msgctxt "ContextVerb" msgid "Paint Bucket" msgstr "Balde de Tinta" @@ -29177,112 +27566,105 @@ msgstr "Balde de Tinta" # Talvez seja melhor "próximas" ao invés de "coladas" #: ../src/verbs.cpp:2772 msgid "Fill bounded areas" -msgstr "Preencher áreas fechadas" +msgstr "Ferramenta Balde de Tinta: preencher áreas fechadas" #: ../src/verbs.cpp:2775 -#, fuzzy msgctxt "ContextVerb" msgid "LPE Edit" -msgstr "_Editar" +msgstr "Edição Efeitos Interativos em Caminhos" #: ../src/verbs.cpp:2776 -#, fuzzy msgid "Edit Path Effect parameters" -msgstr "Próximo " +msgstr "" +"Ferramenta Efeitos Interativos em Caminhos: editar parâmetros de Efeitos " +"Interativos em Caminhos" #: ../src/verbs.cpp:2777 -#, fuzzy msgctxt "ContextVerb" msgid "Eraser" -msgstr "Rasterizar" +msgstr "Borracha" #: ../src/verbs.cpp:2778 -#, fuzzy msgid "Erase existing paths" -msgstr "Soltar caminho recortado" +msgstr "Ferramenta Borracha: apagar caminhos existentes" #: ../src/verbs.cpp:2779 -#, fuzzy msgctxt "ContextVerb" msgid "LPE Tool" -msgstr "Ferramentas" +msgstr "Ferramenta Efeitos Interativos em Caminhos" #: ../src/verbs.cpp:2780 msgid "Do geometric constructions" -msgstr "" +msgstr "Fazer construções geométricas" #. Tool prefs #: ../src/verbs.cpp:2782 msgid "Selector Preferences" -msgstr "Propriedades do Seletor" +msgstr "Preferências da Ferramenta Selecionar" #: ../src/verbs.cpp:2783 msgid "Open Preferences for the Selector tool" -msgstr "Abrir Preferências para a ferramenta Seletor" +msgstr "Abrir Preferências da Ferramenta Selecionar" #: ../src/verbs.cpp:2784 msgid "Node Tool Preferences" -msgstr "Propriedades da Ferramenta Nó" +msgstr "Preferências da Ferramenta Nó" #: ../src/verbs.cpp:2785 msgid "Open Preferences for the Node tool" -msgstr "Abre as Preferências da Ferramenta Nó" +msgstr "Abrir Preferências da Ferramenta Nó" #: ../src/verbs.cpp:2786 msgid "Tweak Tool Preferences" -msgstr "Preferências da Ferramenta de Ajuster" +msgstr "Preferências da Ferramenta de Ajuste" #: ../src/verbs.cpp:2787 -#, fuzzy msgid "Open Preferences for the Tweak tool" -msgstr "Abrir Preferências da Ferramenta de Texto" +msgstr "Abrir Preferências da Ferramenta de Ajuste" #: ../src/verbs.cpp:2788 -#, fuzzy msgid "Spray Tool Preferences" -msgstr "Propriedades de Espirais" +msgstr "Preferências da Ferramenta Pulverizar" #: ../src/verbs.cpp:2789 -#, fuzzy msgid "Open Preferences for the Spray tool" -msgstr "Abrir Preferências da Ferramenta Espiral" +msgstr "Abrir Preferências da Ferramenta Pulverizar" #: ../src/verbs.cpp:2790 msgid "Rectangle Preferences" -msgstr "Propriedades de Retângulos" +msgstr "Preferências da Ferramenta Retângulo" #: ../src/verbs.cpp:2791 msgid "Open Preferences for the Rectangle tool" -msgstr "Abre as Preferências da ferramenta Retângulo" +msgstr "Abrir Preferências da Ferramenta Retângulo" #: ../src/verbs.cpp:2792 msgid "3D Box Preferences" -msgstr "Preferências de Caixa 3D" +msgstr "Preferências da Ferramenta Caixa 3D" #: ../src/verbs.cpp:2793 -#, fuzzy msgid "Open Preferences for the 3D Box tool" -msgstr "Abre as Preferências da Ferramenta Nó" +msgstr "Abrir Preferências da Ferramenta Caixa 3D" #: ../src/verbs.cpp:2794 msgid "Ellipse Preferences" -msgstr "Propriedades de Elipses" +msgstr "Preferências da Ferramenta Elipse" #: ../src/verbs.cpp:2795 msgid "Open Preferences for the Ellipse tool" -msgstr "Abre as Preferências da ferramenta Elipse" +msgstr "Abrir Preferências da Ferramenta Elipse" #: ../src/verbs.cpp:2796 msgid "Star Preferences" -msgstr "Propriedades de Estrelas" +msgstr "Preferências da Ferramenta Polígono e Estrela" #: ../src/verbs.cpp:2797 msgid "Open Preferences for the Star tool" -msgstr "Abre as Preferências da ferramenta Estrela" +msgstr "Abrir Preferências da Ferramenta Polígono e Estrela" #: ../src/verbs.cpp:2798 msgid "Spiral Preferences" -msgstr "Propriedades de Espirais" +msgstr "Preferências da Ferramenta Espiral" #: ../src/verbs.cpp:2799 msgid "Open Preferences for the Spiral tool" @@ -29290,7 +27672,7 @@ msgstr "Abrir Preferências da Ferramenta Espiral" #: ../src/verbs.cpp:2800 msgid "Pencil Preferences" -msgstr "Propriedades do Lápis" +msgstr "Preferências da Ferramenta Lápis" #: ../src/verbs.cpp:2801 msgid "Open Preferences for the Pencil tool" @@ -29298,7 +27680,7 @@ msgstr "Abrir Preferências da Ferramenta Lápis" #: ../src/verbs.cpp:2802 msgid "Pen Preferences" -msgstr "Propriedades da Caneta" +msgstr "Preferências da Ferramenta Caneta" #: ../src/verbs.cpp:2803 msgid "Open Preferences for the Pen tool" @@ -29306,15 +27688,15 @@ msgstr "Abrir Preferências da Ferramenta Caneta" #: ../src/verbs.cpp:2804 msgid "Calligraphic Preferences" -msgstr "Propriedades de Linhas Caligráficas" +msgstr "Preferências da Ferramenta Caligrafia" #: ../src/verbs.cpp:2805 msgid "Open Preferences for the Calligraphy tool" -msgstr "Abrir Preferências da Ferramenta Caligráfica" +msgstr "Abrir Preferências da Ferramenta Caligrafia" #: ../src/verbs.cpp:2806 msgid "Text Preferences" -msgstr "Propriedades de Textos" +msgstr "Preferências da Ferramenta Texto" #: ../src/verbs.cpp:2807 msgid "Open Preferences for the Text tool" @@ -29322,84 +27704,75 @@ msgstr "Abrir Preferências da Ferramenta de Texto" #: ../src/verbs.cpp:2808 msgid "Gradient Preferences" -msgstr "Preferências do degradê" +msgstr "Preferências da Ferramenta Gradiente" #: ../src/verbs.cpp:2809 msgid "Open Preferences for the Gradient tool" -msgstr "Abrir Preferências da Ferramenta de degradê" +msgstr "Abrir Preferências da Ferramenta de Gradiente" #: ../src/verbs.cpp:2810 -#, fuzzy msgid "Mesh Preferences" -msgstr "Propriedades de Estrelas" +msgstr "Preferências da Ferramenta Malha" #: ../src/verbs.cpp:2811 -#, fuzzy msgid "Open Preferences for the Mesh tool" -msgstr "Abre as Preferências da ferramenta Estrela" +msgstr "Abrir Preferências da ferramenta Malha" #: ../src/verbs.cpp:2812 msgid "Zoom Preferences" -msgstr "Propriedades de Ampliações" +msgstr "Preferências da Ferramenta Lupa" #: ../src/verbs.cpp:2813 msgid "Open Preferences for the Zoom tool" -msgstr "Abrir Preferências da Ferramenta de Ampliação" +msgstr "Abrir Preferências da Ferramenta Lupa" #: ../src/verbs.cpp:2814 -#, fuzzy msgid "Measure Preferences" -msgstr "Propriedades de Estrelas" +msgstr "Preferências da Ferramenta Fita Métrica" #: ../src/verbs.cpp:2815 -#, fuzzy msgid "Open Preferences for the Measure tool" -msgstr "Abre as Preferências da ferramenta Estrela" +msgstr "Abrir Preferências da ferramenta de Medir" #: ../src/verbs.cpp:2816 msgid "Dropper Preferences" -msgstr "Propriedades do Borrão" +msgstr "Preferências da Ferramenta Pipeta" #: ../src/verbs.cpp:2817 msgid "Open Preferences for the Dropper tool" -msgstr "Abrir Preferências da Ferramenta Borrão" +msgstr "Abrir Preferências da Ferramenta Pipeta" #: ../src/verbs.cpp:2818 msgid "Connector Preferences" -msgstr "Propriedades do Seletor" +msgstr "Preferências da Ferramenta Conetor de Diagrama" #: ../src/verbs.cpp:2819 msgid "Open Preferences for the Connector tool" -msgstr "Abre as Preferências da ferramenta Conector" +msgstr "Abrir Preferências da ferramenta Conetor" #: ../src/verbs.cpp:2822 msgid "Paint Bucket Preferences" -msgstr "Preferências do balde de tinta" +msgstr "Preferências da Ferramenta Balde de Tinta" #: ../src/verbs.cpp:2823 -#, fuzzy msgid "Open Preferences for the Paint Bucket tool" -msgstr "Abrir Preferências da Ferramenta Caneta" +msgstr "Abrir Preferências da ferramenta Balde de Tinta" #: ../src/verbs.cpp:2826 -#, fuzzy msgid "Eraser Preferences" -msgstr "Propriedades de Estrelas" +msgstr "Preferências da Ferramenta Borracha" #: ../src/verbs.cpp:2827 -#, fuzzy msgid "Open Preferences for the Eraser tool" -msgstr "Abre as Preferências da ferramenta Estrela" +msgstr "Abrir Preferências da ferramenta Borracha" #: ../src/verbs.cpp:2828 -#, fuzzy msgid "LPE Tool Preferences" -msgstr "Propriedades da Ferramenta Nó" +msgstr "Preferências da Ferramenta Efeitos Interativos em Caminhos" #: ../src/verbs.cpp:2829 -#, fuzzy msgid "Open Preferences for the LPETool tool" -msgstr "Abrir Preferências da Ferramenta de Ampliação" +msgstr "Abrir Preferências da ferramenta Efeitos Interativos em Caminhos" #. Zoom/View #: ../src/verbs.cpp:2831 @@ -29408,7 +27781,7 @@ msgstr "Ampliar" #: ../src/verbs.cpp:2831 msgid "Zoom in" -msgstr "Ampliar" +msgstr "Ampliar vista" #: ../src/verbs.cpp:2832 msgid "Zoom Out" @@ -29416,7 +27789,7 @@ msgstr "Reduzir" #: ../src/verbs.cpp:2832 msgid "Zoom out" -msgstr "Reduzir" +msgstr "Reduzir vista" #: ../src/verbs.cpp:2833 msgid "_Rulers" @@ -29424,25 +27797,26 @@ msgstr "_Réguas" #: ../src/verbs.cpp:2833 msgid "Show or hide the canvas rulers" -msgstr "Mostrar ou esconder as réguas da Ecrã" +msgstr "Mostrar ou esconder as réguas" #: ../src/verbs.cpp:2834 msgid "Scroll_bars" -msgstr "_Barras de Rolagem" +msgstr "_Barras de Elevadores" #: ../src/verbs.cpp:2834 msgid "Show or hide the canvas scrollbars" -msgstr "Mostrar ou esconder as barras de rolagem da Ecrã" +msgstr "" +"Mostrar ou esconder as barras de deslocação da vista que se encontram " +"normalmente do lado direito e inferior" +# não usar "Grelha da Página" porque a grelha não é mostrada apenas na página mas na área de desenho toda #: ../src/verbs.cpp:2835 -#, fuzzy msgid "Page _Grid" -msgstr "_Largura da Página" +msgstr "_Grelha" #: ../src/verbs.cpp:2835 -#, fuzzy msgid "Show or hide the page grid" -msgstr "Mostrar ou esconder a grelha da Ecrã" +msgstr "Mostrar ou esconder a grelha" #: ../src/verbs.cpp:2836 msgid "G_uides" @@ -29450,58 +27824,51 @@ msgstr "G_uias" #: ../src/verbs.cpp:2836 msgid "Show or hide guides (drag from a ruler to create a guide)" -msgstr "" -"Mostrar ou esconder guias (clique e arraste a partir de uma das réguas para " -"criar uma guia)" +msgstr "Mostrar ou esconder guias (arrastar de uma régua para criar 1 guia)" #: ../src/verbs.cpp:2837 -#, fuzzy msgid "Enable snapping" -msgstr "Pré-Visualizar Ao Vivo" +msgstr "Ativar atração" #: ../src/verbs.cpp:2838 -#, fuzzy msgid "_Commands Bar" -msgstr "Barra de Comandos" +msgstr "Barra de _Botões Principais" #: ../src/verbs.cpp:2838 msgid "Show or hide the Commands bar (under the menu)" -msgstr "Mostrar ou esconder a Barra de Comandos (sob o menu)" +msgstr "Mostrar ou esconder a Barra de Botões Principais (abaixo do menu)" #: ../src/verbs.cpp:2839 -#, fuzzy msgid "Sn_ap Controls Bar" -msgstr "Barra de Controles de Ferramenta" +msgstr "Barra da Ferramenta de Atração" #: ../src/verbs.cpp:2839 -#, fuzzy msgid "Show or hide the snapping controls" -msgstr "Mostrar ou esconder a Barra de Controles de Ferramenta" +msgstr "Mostrar ou esconder os botões da ferramenta de atração" #: ../src/verbs.cpp:2840 -#, fuzzy msgid "T_ool Controls Bar" -msgstr "Barra de Controles de Ferramenta" +msgstr "Barra da Ferramenta _Atual" #: ../src/verbs.cpp:2840 msgid "Show or hide the Tool Controls bar" -msgstr "Mostrar ou esconder a Barra de Controles de Ferramenta" +msgstr "Mostrar ou esconder a Barra da Ferramenta Atual" #: ../src/verbs.cpp:2841 msgid "_Toolbox" -msgstr "Caixa de _Ferramentas" +msgstr "Barra de _Ferramentas" #: ../src/verbs.cpp:2841 msgid "Show or hide the main toolbox (on the left)" -msgstr "Mostrar ou esconder a caixa de ferramentas principal (à esquerda)" +msgstr "Mostrar ou esconder a barra de ferramentas principal (à esquerda)" #: ../src/verbs.cpp:2842 msgid "_Palette" -msgstr "_Paleta" +msgstr "_Palete de cores" #: ../src/verbs.cpp:2842 msgid "Show or hide the color palette" -msgstr "Mostrar ou esconder a paleta de cores" +msgstr "Mostrar ou esconder a palete de cores" #: ../src/verbs.cpp:2843 msgid "_Statusbar" @@ -29509,7 +27876,7 @@ msgstr "Barra de E_stado" #: ../src/verbs.cpp:2843 msgid "Show or hide the statusbar (at the bottom of the window)" -msgstr "Mostra ou esconde a barra de estado (em baixo na janela)" +msgstr "Mostra ou esconde a barra de estado (no fundo da janela)" #: ../src/verbs.cpp:2844 msgid "Nex_t Zoom" @@ -29525,7 +27892,7 @@ msgstr "Amp_liação Anterior" #: ../src/verbs.cpp:2846 msgid "Previous zoom (from the history of zooms)" -msgstr "Ampliação Anterior (da lista de ampliações utilizadas)" +msgstr "Ampliação anterior (da lista de ampliações utilizadas)" #: ../src/verbs.cpp:2848 msgid "Zoom 1:_1" @@ -29533,7 +27900,7 @@ msgstr "Ampliação 1:_1" #: ../src/verbs.cpp:2848 msgid "Zoom to 1:1" -msgstr "Mostra do tamanho original do desenho" +msgstr "Mostra o desenho no tamanho original" #: ../src/verbs.cpp:2850 msgid "Zoom 1:_2" @@ -29541,7 +27908,7 @@ msgstr "Ampliação 1:_2" #: ../src/verbs.cpp:2850 msgid "Zoom to 1:2" -msgstr "Mostra no dobro do tamanho do desenho" +msgstr "Mostra o desenho no dobro do tamanho" #: ../src/verbs.cpp:2852 msgid "_Zoom 2:1" @@ -29549,27 +27916,28 @@ msgstr "Ampliaçã_o 2:1" #: ../src/verbs.cpp:2852 msgid "Zoom to 2:1" -msgstr "Mostra na metade do tamanho do desenho" +msgstr "Mostra o desenho na metade do tamanho" #: ../src/verbs.cpp:2854 msgid "_Fullscreen" -msgstr "_Ecrã cheia" +msgstr "_Ecrã inteiro" #: ../src/verbs.cpp:2854 ../src/verbs.cpp:2856 msgid "Stretch this document window to full screen" -msgstr "Alarga esta janela de desenho para ocupar todo o monitor" +msgstr "Alarga esta janela por forma a ocupar todo o monitor" #: ../src/verbs.cpp:2856 msgid "Fullscreen & Focus Mode" -msgstr "" +msgstr "Ecrã Inteiro e Modo de Foco" #: ../src/verbs.cpp:2858 msgid "Toggle _Focus Mode" -msgstr "" +msgstr "Alternar Modo de _Foco" #: ../src/verbs.cpp:2858 msgid "Remove excess toolbars to focus on drawing" msgstr "" +"Remove barras de ferramentas excessivas para focar a atenção no desenho" #: ../src/verbs.cpp:2860 msgid "Duplic_ate Window" @@ -29577,7 +27945,7 @@ msgstr "Duplic_ar Janela" #: ../src/verbs.cpp:2860 msgid "Open a new window with the same document" -msgstr "Abre uma novo janela com o mesmo desenho" +msgstr "Abre uma nova janela com o mesmo desenho" #: ../src/verbs.cpp:2862 msgid "_New View Preview" @@ -29585,7 +27953,7 @@ msgstr "_Nova Visualização" #: ../src/verbs.cpp:2863 msgid "New View Preview" -msgstr "Nova visualização" +msgstr "Nova Visualização" #. "view_new_preview" #: ../src/verbs.cpp:2865 ../src/verbs.cpp:2873 @@ -29594,17 +27962,15 @@ msgstr "_Normal" #: ../src/verbs.cpp:2866 msgid "Switch to normal display mode" -msgstr "Trocar para o modo de visualização normal" +msgstr "Mudar para o modo de visualização normal" #: ../src/verbs.cpp:2867 -#, fuzzy msgid "No _Filters" -msgstr "_Filtrar" +msgstr "Sem _Filtros" #: ../src/verbs.cpp:2868 -#, fuzzy msgid "Switch to normal display without filters" -msgstr "Trocar para o modo de visualização normal" +msgstr "Mudar para o modo de visualização sem filtros" #: ../src/verbs.cpp:2869 msgid "_Outline" @@ -29612,7 +27978,7 @@ msgstr "_Contorno" #: ../src/verbs.cpp:2870 msgid "Switch to outline (wireframe) display mode" -msgstr "Trocar para o modo de visualização de contorno" +msgstr "Mudar para o modo de visualização de contornos (linhas)" #. new ZoomVerb(SP_VERB_VIEW_COLOR_MODE_PRINT_COLORS_PREVIEW, "ViewColorModePrintColorsPreview", N_("_Print Colors Preview"), #. N_("Switch to print colors preview mode"), NULL), @@ -29622,46 +27988,39 @@ msgstr "Al_ternar" #: ../src/verbs.cpp:2872 msgid "Toggle between normal and outline display modes" -msgstr "Alternar entre os modos de visualização" +msgstr "Alternar entre os modos de visualização normal e contorno" #: ../src/verbs.cpp:2874 -#, fuzzy msgid "Switch to normal color display mode" -msgstr "Trocar para o modo de visualização normal" +msgstr "Mudar para o modo de visualização a cores normal" #: ../src/verbs.cpp:2875 -#, fuzzy msgid "_Grayscale" -msgstr "Escala de cinzas" +msgstr "_Escala de cinzas" #: ../src/verbs.cpp:2876 -#, fuzzy msgid "Switch to grayscale display mode" -msgstr "Trocar para o modo de visualização normal" +msgstr "Mudar para o modo de visualização em cinzas" #: ../src/verbs.cpp:2880 -#, fuzzy msgid "Toggle between normal and grayscale color display modes" -msgstr "Alternar entre os modos de visualização" +msgstr "Alternar entre os modos de visualização a cores e modo a cinzas" #: ../src/verbs.cpp:2882 -#, fuzzy msgid "Color-managed view" -msgstr "Gerenciamento de cor" +msgstr "Visualização com gestão de cor" #: ../src/verbs.cpp:2883 -#, fuzzy msgid "Toggle color-managed display for this document window" -msgstr "Fechar a janela do documento" +msgstr "Alternar entre visualização com gestão de cor ou não nesta janela" #: ../src/verbs.cpp:2885 msgid "Ico_n Preview..." -msgstr "Pré-visualização do Ãco_ne..." +msgstr "Prever Ãco_ne..." #: ../src/verbs.cpp:2886 msgid "Open a window to preview objects at different icon resolutions" -msgstr "" -"Abre uma janela para pré-visualizar itens em diferentes resoluções de ícone" +msgstr "Abre uma janela para prever ícones com vários tamanhos" #: ../src/verbs.cpp:2888 msgid "Zoom to fit page in window" @@ -29681,104 +28040,99 @@ msgstr "Ampliar para caber o desenho na janela" #: ../src/verbs.cpp:2894 msgid "Zoom to fit selection in window" -msgstr "Ampliar para caber a selecção na janela" +msgstr "Ampliar para caber a seleção na janela" #. Dialogs #: ../src/verbs.cpp:2897 -#, fuzzy msgid "P_references..." -msgstr "Propriedades da Caneta" +msgstr "P_referências..." #: ../src/verbs.cpp:2898 msgid "Edit global Inkscape preferences" -msgstr "Editar configurações globais do Inkscape" +msgstr "Editar preferências globais do Inkscape" #: ../src/verbs.cpp:2899 msgid "_Document Properties..." -msgstr "Propriedades do _Desenho..." +msgstr "Propriedades do _Documento..." #: ../src/verbs.cpp:2900 msgid "Edit properties of this document (to be saved with the document)" -msgstr "Propriedades salvas com o desenho" +msgstr "Editar propriedades deste documento (a serem gravados no documento)" #: ../src/verbs.cpp:2901 msgid "Document _Metadata..." -msgstr "_Metadados do Desenho..." +msgstr "_Metadados do Documento..." #: ../src/verbs.cpp:2902 msgid "Edit document metadata (to be saved with the document)" -msgstr "Metadados salvos com o desenho" +msgstr "Editar metadados do documento (a serem gravados no documento)" #: ../src/verbs.cpp:2904 -#, fuzzy msgid "" "Edit objects' colors, gradients, arrowheads, and other fill and stroke " "properties..." msgstr "" -"Editar cores de objectos, degradês, largura de traço, pontas de setas, " -"padrões de traço..." +"Editar cores dos objetos, gradientes, pontas de setas, e outras propriedades " +"do preenchimento e traço..." #. FIXME: Probably better to either use something from the icon naming spec or ship our own "select-font" icon #: ../src/verbs.cpp:2906 msgid "Gl_yphs..." -msgstr "" +msgstr "_Caracteres..." #: ../src/verbs.cpp:2907 -#, fuzzy msgid "Select characters from a glyphs palette" -msgstr "Selecionar cores de uma paleta modelo" +msgstr "Selecionar caracteres de uma paleta de caracteres" #. FIXME: Probably better to either use something from the icon naming spec or ship our own "select-color" icon #. TRANSLATORS: "Swatches" means: color samples #: ../src/verbs.cpp:2910 msgid "S_watches..." -msgstr "Modelos de Cores..." +msgstr "Amostras de _Cores..." #: ../src/verbs.cpp:2911 msgid "Select colors from a swatches palette" -msgstr "Selecionar cores de uma paleta modelo" +msgstr "Selecionar cores de uma paleta de amostras de cores" #: ../src/verbs.cpp:2912 msgid "S_ymbols..." -msgstr "" +msgstr "Símbo_los..." #: ../src/verbs.cpp:2913 -#, fuzzy msgid "Select symbol from a symbols palette" -msgstr "Selecionar cores de uma paleta modelo" +msgstr "Selecionar símbolo de uma paleta de símbolos" #: ../src/verbs.cpp:2914 msgid "Transfor_m..." -msgstr "Transfor_mação..." +msgstr "_Transformar..." #: ../src/verbs.cpp:2915 msgid "Precisely control objects' transformations" -msgstr "Controlar precisamente as transformações dos objectos" +msgstr "Controlar com precisão as transformações dos objetos" #: ../src/verbs.cpp:2916 msgid "_Align and Distribute..." -msgstr "_Alinhar e Distribuir..." +msgstr "Al_inhar e Distribuir..." #: ../src/verbs.cpp:2917 msgid "Align and distribute objects" -msgstr "Alinhar e distribuir objectos" +msgstr "Alinhar e distribuir objetos" #: ../src/verbs.cpp:2918 msgid "_Spray options..." -msgstr "" +msgstr "Opções de _Pulverizar..." #: ../src/verbs.cpp:2919 -#, fuzzy msgid "Some options for the spray" -msgstr "Largura do padrão" +msgstr "Algumas opções da ferramenta pulverizar" #: ../src/verbs.cpp:2920 msgid "Undo _History..." -msgstr "_Histórico do desfazer..." +msgstr "_Histórico de Alterações..." #: ../src/verbs.cpp:2921 msgid "Undo History" -msgstr "Histórico do desfazer" +msgstr "Histórico de Alterações" #: ../src/verbs.cpp:2923 msgid "View and select font family, font size and other text properties" @@ -29790,30 +28144,27 @@ msgstr "Editor _XML..." #: ../src/verbs.cpp:2925 msgid "View and edit the XML tree of the document" -msgstr "Ver e editar a árvore XML do desenho" +msgstr "Ver e editar a árvore XML do documento" #: ../src/verbs.cpp:2926 -#, fuzzy msgid "_Find/Replace..." -msgstr "_Encontrar..." +msgstr "_Procurar/Substituir..." #: ../src/verbs.cpp:2927 msgid "Find objects in document" -msgstr "Encontrar objectos no desenho" +msgstr "Encontra objetos no documento" #: ../src/verbs.cpp:2928 msgid "Find and _Replace Text..." -msgstr "" +msgstr "Procu_rar e Substituir Texto...." #: ../src/verbs.cpp:2929 -#, fuzzy msgid "Find and replace text in document" -msgstr "Encontrar objectos no desenho" +msgstr "Procurar e substituir texto no documento" #: ../src/verbs.cpp:2931 -#, fuzzy msgid "Check spelling of text in document" -msgstr "Abrir um desenho existente" +msgstr "Verificar ortografia do texto no documento" #: ../src/verbs.cpp:2932 msgid "_Messages..." @@ -29825,11 +28176,11 @@ msgstr "Ver mensagens de depuração" #: ../src/verbs.cpp:2934 msgid "Show/Hide D_ialogs" -msgstr "Mostrar/Esconder Ca_ixas de Diálogo" +msgstr "Mostrar/Esconder _Painéis Laterais" #: ../src/verbs.cpp:2935 msgid "Show or hide all open dialogs" -msgstr "Mostrar ou esconder todas as janelas ativas" +msgstr "Mostrar ou esconder todos os painéis laterais da direita" #: ../src/verbs.cpp:2936 msgid "Create Tiled Clones..." @@ -29840,23 +28191,22 @@ msgid "" "Create multiple clones of selected object, arranging them into a pattern or " "scattering" msgstr "" -"Criar múltiplos clones do objecto seleccionado, arrumando-os em um padrão " -"definido" +"Criar múltiplos clones do objeto selecionado, arrumando-os num padrão ou " +"dispersão" #: ../src/verbs.cpp:2938 -#, fuzzy msgid "_Object attributes..." -msgstr "Propriedades do _Objecto" +msgstr "Atributos do _Objeto..." #: ../src/verbs.cpp:2939 -#, fuzzy msgid "Edit the object attributes..." -msgstr "Ajustar atributo" +msgstr "Editar atributos do objeto..." #: ../src/verbs.cpp:2941 msgid "Edit the ID, locked and visible status, and other object properties" msgstr "" -"Editar a ID, estados de visão e edição e outras propriedades do objecto" +"Editar o ID, estados de bloqueio e visibilidade e outras propriedades do " +"objeto" #: ../src/verbs.cpp:2942 msgid "_Input Devices..." @@ -29874,7 +28224,7 @@ msgstr "_Extensões..." #: ../src/verbs.cpp:2945 msgid "Query information about extensions" -msgstr "Buscar informações sobre extensões" +msgstr "Procurar informações sobre extensões" #: ../src/verbs.cpp:2946 msgid "Layer_s..." @@ -29882,94 +28232,83 @@ msgstr "_Camadas..." #: ../src/verbs.cpp:2947 msgid "View Layers" -msgstr "Visualizar Camadas" +msgstr "Ver Camadas" #: ../src/verbs.cpp:2948 -#, fuzzy msgid "Object_s..." -msgstr "Objectos" +msgstr "Objeto_s..." #: ../src/verbs.cpp:2949 -#, fuzzy msgid "View Objects" -msgstr "Objectos" +msgstr "Ver Objetos" #: ../src/verbs.cpp:2950 -#, fuzzy msgid "Selection se_ts..." -msgstr "Seleção" +msgstr "Conjuntos de seleções..." #: ../src/verbs.cpp:2951 -#, fuzzy msgid "View Tags" -msgstr "Visualizar Camadas" +msgstr "Ver Etiquetas" #: ../src/verbs.cpp:2952 -#, fuzzy msgid "Path E_ffects ..." -msgstr "Caminho de Efeitos..." +msgstr "E_feitos em Tempo Real no Caminho..." #: ../src/verbs.cpp:2953 -#, fuzzy msgid "Manage, edit, and apply path effects" -msgstr "Criar e aplicar efeito de caminho" +msgstr "Gerir, editar e aplicar efeitos em tempo real nos caminhos" #: ../src/verbs.cpp:2954 -#, fuzzy msgid "Filter _Editor..." -msgstr "Filtro de Efeitos..." +msgstr "_Editor de Filtros..." #: ../src/verbs.cpp:2955 -#, fuzzy msgid "Manage, edit, and apply SVG filters" -msgstr "Administrar efeitos de filtro SVG" +msgstr "Gerir, editar e aplicar filtros SVG" #: ../src/verbs.cpp:2956 -#, fuzzy msgid "SVG Font Editor..." -msgstr "Editor _XML..." +msgstr "Editor de Fontes SVG..." #: ../src/verbs.cpp:2957 -#, fuzzy msgid "Edit SVG fonts" -msgstr "Administrar efeitos de filtro SVG" +msgstr "Editar fontes SVG" #: ../src/verbs.cpp:2958 -#, fuzzy msgid "Print Colors..." -msgstr "Im_primir..." +msgstr "Imprimir Cores..." #: ../src/verbs.cpp:2959 msgid "" "Select which color separations to render in Print Colors Preview rendermode" msgstr "" +"Selecionar quais as separações de cor a renderizar no modo Prever Cores de " +"Impressão" #: ../src/verbs.cpp:2960 -#, fuzzy msgid "_Export PNG Image..." -msgstr "Extrair Uma Imagem" +msgstr "_Exportar para Imagem PNG..." #: ../src/verbs.cpp:2961 -#, fuzzy msgid "Export this document or a selection as a PNG image" -msgstr "Exportar o documento ou a selecção como uma imagem bitmap" +msgstr "Exportar este documento ou a seleção como imagem PNG" #. Help #: ../src/verbs.cpp:2963 msgid "About E_xtensions" -msgstr "Sobre E_xtensões" +msgstr "Sobre as E_xtensões" #: ../src/verbs.cpp:2964 msgid "Information on Inkscape extensions" -msgstr "Informações sobre extensões do Inkscape" +msgstr "Informações sobre as extensões do Inkscape" #: ../src/verbs.cpp:2965 msgid "About _Memory" -msgstr "Sobre a _Memória" +msgstr "Sobre a _Memória RAM" #: ../src/verbs.cpp:2966 msgid "Memory usage information" -msgstr "Informações sobre uso de memória" +msgstr "Informações sobre uso de memória RAM" #: ../src/verbs.cpp:2967 msgid "_About Inkscape" @@ -29977,7 +28316,7 @@ msgstr "_Sobre o Inkscape" #: ../src/verbs.cpp:2968 msgid "Inkscape version, authors, license" -msgstr "Inkscape versão, autores, licença" +msgstr "Versão, autores e licença do Inkscape" #. new HelpVerb(SP_VERB_SHOW_LICENSE, "ShowLicense", N_("_License"), #. N_("Distribution terms"), /*"show_license"*/"inkscape_options"), @@ -29997,7 +28336,7 @@ msgstr "Inkscape: Forma_s" #: ../src/verbs.cpp:2976 msgid "Using shape tools to create and edit shapes" -msgstr "Usar ferramentas de formas para criar e alterar formas" +msgstr "Usar ferramentas de formas geométricas para criar e alterar formas" #: ../src/verbs.cpp:2977 msgid "Inkscape: _Advanced" @@ -30005,25 +28344,24 @@ msgstr "Inkscape: _Avançado" #: ../src/verbs.cpp:2978 msgid "Advanced Inkscape topics" -msgstr "Tópicos Avançados do Inkscape" +msgstr "Tópicos avançados do Inkscape" #. TRANSLATORS: "to trace" means "to convert a bitmap to vector graphics" (to vectorize) #: ../src/verbs.cpp:2982 msgid "Inkscape: T_racing" -msgstr "Inkscape: Traçando" +msgstr "Inkscape: Ve_torização" #: ../src/verbs.cpp:2983 msgid "Using bitmap tracing" -msgstr "Usando o traçador de bitmaps" +msgstr "Usando o vetorizador de imagens bitmap" #: ../src/verbs.cpp:2986 -#, fuzzy msgid "Inkscape: Tracing Pixel Art" -msgstr "Inkscape: Traçando" +msgstr "Inkscape: Vetorizar Arte de Píxeis" #: ../src/verbs.cpp:2987 msgid "Using Trace Pixel Art dialog" -msgstr "" +msgstr "Janela Usando Vetorização de Arte de Píxeis" #: ../src/verbs.cpp:2988 msgid "Inkscape: _Calligraphy" @@ -30034,22 +28372,21 @@ msgid "Using the Calligraphy pen tool" msgstr "Utilizando a ferramenta Caneta Caligráfica" #: ../src/verbs.cpp:2990 -#, fuzzy msgid "Inkscape: _Interpolate" -msgstr "Inkscape: Forma_s" +msgstr "Inkscape: _Interpolar" #: ../src/verbs.cpp:2991 msgid "Using the interpolate extension" -msgstr "" +msgstr "Usar a extensão de interpolação" #. "tutorial_interpolate" #: ../src/verbs.cpp:2992 msgid "_Elements of Design" -msgstr "_Elementos do Desenho" +msgstr "_Elementos do Design" #: ../src/verbs.cpp:2993 msgid "Principles of design in the tutorial form" -msgstr "Tutorial sobre os princípios do desenho" +msgstr "Tutorial sobre os princípios do design" #. "tutorial_design" #: ../src/verbs.cpp:2994 @@ -30058,137 +28395,120 @@ msgstr "Dicas e _Truques" #: ../src/verbs.cpp:2995 msgid "Miscellaneous tips and tricks" -msgstr "Dicas e truques variados" +msgstr "Dicas e truques" #. "tutorial_tips" #. Effect -- renamed Extension #: ../src/verbs.cpp:2998 -#, fuzzy msgid "Previous Exte_nsion" -msgstr "Sobre E_xtensões" +msgstr "Exte_nsão Anterior" #: ../src/verbs.cpp:2999 -#, fuzzy msgid "Repeat the last extension with the same settings" -msgstr "Repetir o último efeito com as mesmas configurações" +msgstr "Repetir a última extensão com as mesmas configurações" #: ../src/verbs.cpp:3000 -#, fuzzy msgid "_Previous Extension Settings..." -msgstr "Configuração de efeito anterior..." +msgstr "_Configurações da Extensão Anterior..." #: ../src/verbs.cpp:3001 -#, fuzzy msgid "Repeat the last extension with new settings" -msgstr "Repetir o último efeito com novas configurações" +msgstr "Repetir a última extensão com as novas configurações" #: ../src/verbs.cpp:3005 msgid "Fit the page to the current selection" -msgstr "Ajusta a Ecrã à selecção actual" +msgstr "Ajusta a página à seleção atual" #: ../src/verbs.cpp:3007 msgid "Fit the page to the drawing" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Ajusta a página ao desenho" #: ../src/verbs.cpp:3008 -#, fuzzy msgid "_Resize Page to Selection" -msgstr "Ajustar Ecrã à Seleção" +msgstr "_Dimensionar Página à Seleção" #: ../src/verbs.cpp:3009 msgid "" "Fit the page to the current selection or the drawing if there is no selection" msgstr "" -"Ajustar a Ecrã à selecção actual ou ao desenho se não houver nada " -"seleccionado" +"Alterar tamanho da página para o tamanho da seleção atual ou ao desenho se " +"não houver nada selecionado" #: ../src/verbs.cpp:3013 msgid "Unlock All in All Layers" -msgstr "DesBloquear Tudo em Todas as Camadas" +msgstr "Desbloquear Tudo em Todas as Camadas" #: ../src/verbs.cpp:3015 msgid "Unhide All" -msgstr "Mostrar Tudo" +msgstr "Desocultar Tudo" #: ../src/verbs.cpp:3017 msgid "Unhide All in All Layers" -msgstr "Mostrar Tudo em Todas as Camadas" +msgstr "Desocultar Tudo em Todas as Camadas" #: ../src/verbs.cpp:3021 msgid "Link an ICC color profile" -msgstr "" +msgstr "Associar um perfil de cor ICC" #: ../src/verbs.cpp:3022 -#, fuzzy msgid "Remove Color Profile" -msgstr "Remover filtro" +msgstr "Remover Perfil de Cor" #: ../src/verbs.cpp:3023 msgid "Remove a linked ICC color profile" -msgstr "" +msgstr "Remover um perfil de cor ICC associado" #: ../src/verbs.cpp:3026 -#, fuzzy msgid "Add External Script" -msgstr "Editar preenchimento..." +msgstr "Adicionar Script Externo" #: ../src/verbs.cpp:3026 -#, fuzzy msgid "Add an external script" -msgstr "Editar preenchimento..." +msgstr "Adicionar um script externo" #: ../src/verbs.cpp:3028 -#, fuzzy msgid "Add Embedded Script" -msgstr "Editar preenchimento..." +msgstr "Adicionar Script Embutido" #: ../src/verbs.cpp:3028 -#, fuzzy msgid "Add an embedded script" -msgstr "Editar preenchimento..." +msgstr "Adicionar um script embutido" #: ../src/verbs.cpp:3030 -#, fuzzy msgid "Edit Embedded Script" -msgstr "Remover grelha" +msgstr "Editar Script Embutido" #: ../src/verbs.cpp:3030 -#, fuzzy msgid "Edit an embedded script" -msgstr "Remover grelha" +msgstr "Editar um script embutido" #: ../src/verbs.cpp:3032 -#, fuzzy msgid "Remove External Script" -msgstr "Remover texto do caminho" +msgstr "Remover Script Externo" #: ../src/verbs.cpp:3032 -#, fuzzy msgid "Remove an external script" -msgstr "Remover texto do caminho" +msgstr "Remover um script externo" #: ../src/verbs.cpp:3034 -#, fuzzy msgid "Remove Embedded Script" -msgstr "Remover grelha" +msgstr "Remover Script Embutido" #: ../src/verbs.cpp:3034 -#, fuzzy msgid "Remove an embedded script" -msgstr "Remover grelha" +msgstr "Remover um script embutido" #: ../src/verbs.cpp:3056 ../src/verbs.cpp:3057 -#, fuzzy msgid "Center on horizontal and vertical axis" -msgstr "Centralizar horizontalmente" +msgstr "Centrar no eixo horizontal e vertical" #: ../src/widgets/arc-toolbar.cpp:129 msgid "Arc: Change start/end" -msgstr "Arc: Mudanças inicio/fim" +msgstr "Arco: alterar início/fim" #: ../src/widgets/arc-toolbar.cpp:191 msgid "Arc: Change open/closed" -msgstr "Arc: Mudanças abrir/fechar" +msgstr "Arco: alterar aberto/fechado" #: ../src/widgets/arc-toolbar.cpp:280 ../src/widgets/arc-toolbar.cpp:310 #: ../src/widgets/rect-toolbar.cpp:260 ../src/widgets/rect-toolbar.cpp:299 @@ -30204,7 +28524,7 @@ msgstr "Novo:" #: ../src/widgets/spiral-toolbar.cpp:212 ../src/widgets/spiral-toolbar.cpp:223 #: ../src/widgets/star-toolbar.cpp:384 msgid "Change:" -msgstr "Modificado:" +msgstr "Alterar:" #: ../src/widgets/arc-toolbar.cpp:319 msgid "Start:" @@ -30212,7 +28532,7 @@ msgstr "Início:" #: ../src/widgets/arc-toolbar.cpp:320 msgid "The angle (in degrees) from the horizontal to the arc's start point" -msgstr "O ângulo (em graus) do do horizontal para o ponto inicial do arco." +msgstr "O ângulo (em graus) da horizontal para o ponto inicial do arco." #: ../src/widgets/arc-toolbar.cpp:332 msgid "End:" @@ -30220,18 +28540,15 @@ msgstr "Fim:" #: ../src/widgets/arc-toolbar.cpp:333 msgid "The angle (in degrees) from the horizontal to the arc's end point" -msgstr "O ângulo (em graus) do do horizontal para o ponto final do arco." +msgstr "O ângulo (em graus) da horizontal para o ponto final do arco." #: ../src/widgets/arc-toolbar.cpp:349 msgid "Closed arc" msgstr "Arco fechado" #: ../src/widgets/arc-toolbar.cpp:350 -#, fuzzy msgid "Switch to segment (closed shape with two radii)" -msgstr "" -"Trocar entre arco (forma não fechada) e segmento (forma fechada com dois " -"raios)" +msgstr "Alterar para segmento de arco (forma fechada com 2 raios)" #: ../src/widgets/arc-toolbar.cpp:356 msgid "Open Arc" @@ -30239,7 +28556,7 @@ msgstr "Arco Aberto" #: ../src/widgets/arc-toolbar.cpp:357 msgid "Switch to arc (unclosed shape)" -msgstr "" +msgstr "Alterar para arco (forma por fechar)" #: ../src/widgets/arc-toolbar.cpp:380 msgid "Make whole" @@ -30247,40 +28564,35 @@ msgstr "Tornar inteiro" #: ../src/widgets/arc-toolbar.cpp:381 msgid "Make the shape a whole ellipse, not arc or segment" -msgstr "Tornar a forma uma elipse inteira e não um arco ou segmento" +msgstr "Tornar a forma numa elipse inteira e não um arco ou segmento de arco" #. TODO: use the correct axis here, too #: ../src/widgets/box3d-toolbar.cpp:233 -#, fuzzy msgid "3D Box: Change perspective (angle of infinite axis)" -msgstr "Caixa 3D: Alterar perspectiva" +msgstr "Caixa 3D: alterar perspectiva (ângulo do eixo infinito)" #: ../src/widgets/box3d-toolbar.cpp:302 -#, fuzzy msgid "Angle in X direction" -msgstr "Definir VP na direção X" +msgstr "Ângulo na direção X" #. Translators: PL is short for 'perspective line' #: ../src/widgets/box3d-toolbar.cpp:304 -#, fuzzy msgid "Angle of PLs in X direction" -msgstr "Definir VP na direção X" +msgstr "Ângulo das Linhas de Perspetiva na direção X" #. Translators: VP is short for 'vanishing point' #: ../src/widgets/box3d-toolbar.cpp:326 -#, fuzzy msgid "State of VP in X direction" -msgstr "Definir VP na direção X" +msgstr "Estado do Ponto de Fuga na direção X" #: ../src/widgets/box3d-toolbar.cpp:327 -#, fuzzy msgid "Toggle VP in X direction between 'finite' and 'infinite' (=parallel)" -msgstr "Definir VP na direção X entre 'finito' e 'infinito' (=paralelo)" +msgstr "" +"Alterna o ponto de fuga na direção X entre 'finito' e 'infinito' (=paralelo)" #: ../src/widgets/box3d-toolbar.cpp:342 -#, fuzzy msgid "Angle in Y direction" -msgstr "Definir VP na direção Y" +msgstr "Ângulo na direção Y" #: ../src/widgets/box3d-toolbar.cpp:342 msgid "Angle Y:" @@ -30288,56 +28600,50 @@ msgstr "Ângulo Y:" #. Translators: PL is short for 'perspective line' #: ../src/widgets/box3d-toolbar.cpp:344 -#, fuzzy msgid "Angle of PLs in Y direction" -msgstr "Definir VP na direção Y" +msgstr "Ângulo das Linhas de Perspetiva na direção Y" #. Translators: VP is short for 'vanishing point' #: ../src/widgets/box3d-toolbar.cpp:365 -#, fuzzy msgid "State of VP in Y direction" -msgstr "Definir VP na direção Y" +msgstr "Estado do Ponto de Fuga na direção Y" #: ../src/widgets/box3d-toolbar.cpp:366 -#, fuzzy msgid "Toggle VP in Y direction between 'finite' and 'infinite' (=parallel)" -msgstr "Definir VP na direção Y entre 'finito' e 'infinito' (=paralelo)" +msgstr "" +"Alterna o ponto de fuga na direção Y entre 'finito' e 'infinito' (=paralelo)" #: ../src/widgets/box3d-toolbar.cpp:381 -#, fuzzy msgid "Angle in Z direction" -msgstr "Definir VP na direção Z" +msgstr "Ângulo na direção Z" #. Translators: PL is short for 'perspective line' #: ../src/widgets/box3d-toolbar.cpp:383 -#, fuzzy msgid "Angle of PLs in Z direction" -msgstr "Definir VP na direção Z" +msgstr "Ângulo das Linhas de Perspetiva na direção Z" #. Translators: VP is short for 'vanishing point' #: ../src/widgets/box3d-toolbar.cpp:404 -#, fuzzy msgid "State of VP in Z direction" -msgstr "Definir VP na direção Z" +msgstr "Estado do Ponto de Fuga na direção Z" #: ../src/widgets/box3d-toolbar.cpp:405 -#, fuzzy msgid "Toggle VP in Z direction between 'finite' and 'infinite' (=parallel)" -msgstr "Definir VP na direção Z entre 'finito' e 'infinito' (=paralelo)" +msgstr "" +"Alterna o ponto de fuga na direção Z entre 'finito' e 'infinito' (=paralelo)" #. gint preset_index = ege_select_one_action_get_active( sel ); #: ../src/widgets/calligraphy-toolbar.cpp:218 #: ../src/widgets/calligraphy-toolbar.cpp:262 #: ../src/widgets/calligraphy-toolbar.cpp:267 -#, fuzzy msgid "No preset" -msgstr "Pré-visualizar" +msgstr "Sem modelo" #. Width #: ../src/widgets/calligraphy-toolbar.cpp:427 #: ../src/widgets/eraser-toolbar.cpp:151 msgid "(hairline)" -msgstr "(linha do cabelo)" +msgstr "(linha fina)" #. Mean #. Rotation @@ -30355,48 +28661,47 @@ msgstr "(padrão)" #: ../src/widgets/calligraphy-toolbar.cpp:427 #: ../src/widgets/eraser-toolbar.cpp:151 -#, fuzzy msgid "(broad stroke)" -msgstr " (traço)" +msgstr "(linha larga)" #: ../src/widgets/calligraphy-toolbar.cpp:430 #: ../src/widgets/eraser-toolbar.cpp:154 msgid "Pen Width" -msgstr "Largura da caneta" +msgstr "Espessura da Caneta" #: ../src/widgets/calligraphy-toolbar.cpp:431 msgid "The width of the calligraphic pen (relative to the visible canvas area)" -msgstr "A largura da caneta caligráfica (em relação a área visível da página)" +msgstr "" +"A espessura da caneta caligráfica (em relação a área visível da página)" #. Thinning #: ../src/widgets/calligraphy-toolbar.cpp:444 msgid "(speed blows up stroke)" -msgstr "" +msgstr "(a velocidade aumenta a espessura)" #: ../src/widgets/calligraphy-toolbar.cpp:444 msgid "(slight widening)" -msgstr "" +msgstr "(ligeiramente espesso)" #: ../src/widgets/calligraphy-toolbar.cpp:444 msgid "(constant width)" -msgstr "(comprimento constante)" +msgstr "(espessura constante)" #: ../src/widgets/calligraphy-toolbar.cpp:444 msgid "(slight thinning, default)" -msgstr "" +msgstr "(ligeiramente estreito, padrão)" #: ../src/widgets/calligraphy-toolbar.cpp:444 msgid "(speed deflates stroke)" -msgstr "" +msgstr "(a velocidade reduz a espessura do traço)" #: ../src/widgets/calligraphy-toolbar.cpp:447 -#, fuzzy msgid "Stroke Thinning" -msgstr "Pintura de Traço" +msgstr "Estreitamento do Traço" #: ../src/widgets/calligraphy-toolbar.cpp:447 msgid "Thinning:" -msgstr "Sinuoso" +msgstr "Estreitamento:" #: ../src/widgets/calligraphy-toolbar.cpp:448 msgid "" @@ -30404,12 +28709,12 @@ msgid "" "makes them broader, 0 makes width independent of velocity)" msgstr "" "Quão rápido a velocidade afina o traço (> 0 torna os traços rápidos mais " -"finos, < 0 torna-os mais fortes, 0 os torna independente da velocidade)" +"finos, < 0 torna-os mais largos, 0 a espessura é independente da velocidade)" #. Angle #: ../src/widgets/calligraphy-toolbar.cpp:460 msgid "(left edge up)" -msgstr "" +msgstr "(borda esquerda para cima)" #: ../src/widgets/calligraphy-toolbar.cpp:460 msgid "(horizontal)" @@ -30417,11 +28722,11 @@ msgstr "(horizontal)" #: ../src/widgets/calligraphy-toolbar.cpp:460 msgid "(right edge up)" -msgstr "" +msgstr "(borda direita para cima)" #: ../src/widgets/calligraphy-toolbar.cpp:463 msgid "Pen Angle" -msgstr "Ângulo da caneta" +msgstr "Ângulo da Caneta" #: ../src/widgets/calligraphy-toolbar.cpp:463 #: ../share/extensions/motion.inx.h:3 ../share/extensions/restack.inx.h:5 @@ -30434,7 +28739,7 @@ msgid "" "fixation = 0)" msgstr "" "O ângulo da ponta da caneta (em graus; 0 = horizontal; não tem efeito se " -"fixar = 0)" +"fixação = 0)" #. Fixation #: ../src/widgets/calligraphy-toolbar.cpp:478 @@ -30443,39 +28748,36 @@ msgstr "(perpendicular ao traço, \"escova\")" #: ../src/widgets/calligraphy-toolbar.cpp:478 msgid "(almost fixed, default)" -msgstr "" +msgstr "(quase fixo, padrão)" #: ../src/widgets/calligraphy-toolbar.cpp:478 msgid "(fixed by Angle, \"pen\")" -msgstr "" +msgstr "(fixo por Ângulo, \"caneta\")" #: ../src/widgets/calligraphy-toolbar.cpp:481 -#, fuzzy msgid "Fixation" -msgstr "Fixação:" +msgstr "Fixação" #: ../src/widgets/calligraphy-toolbar.cpp:481 msgid "Fixation:" msgstr "Fixação:" #: ../src/widgets/calligraphy-toolbar.cpp:482 -#, fuzzy msgid "" "Angle behavior (0 = nib always perpendicular to stroke direction, 100 = " "fixed angle)" msgstr "" -"Comportamento do ângulo (0 = sempre perpendicular à direção do traço, 1 = " -"fixo)" +"Comportamento do ângulo (0 = ponta sempre perpendicular à direção do traço, " +"100 = ângulo fixo)" #. Cap Rounding #: ../src/widgets/calligraphy-toolbar.cpp:494 -#, fuzzy msgid "(blunt caps, default)" -msgstr "Ajustar como padrão" +msgstr "(pontas planas, padrão)" #: ../src/widgets/calligraphy-toolbar.cpp:494 msgid "(slightly bulging)" -msgstr "" +msgstr "(ligeiramente salientes)" #: ../src/widgets/calligraphy-toolbar.cpp:494 msgid "(approximately round)" @@ -30483,12 +28785,11 @@ msgstr "(aproximadamente redondo)" #: ../src/widgets/calligraphy-toolbar.cpp:494 msgid "(long protruding caps)" -msgstr "" +msgstr "(pontas muito salientes)" #: ../src/widgets/calligraphy-toolbar.cpp:498 -#, fuzzy msgid "Cap rounding" -msgstr "Alterar arredondamento" +msgstr "Arredondamento das pontas" #: ../src/widgets/calligraphy-toolbar.cpp:498 msgid "Caps:" @@ -30499,7 +28800,7 @@ msgid "" "Increase to make caps at the ends of strokes protrude more (0 = no caps, 1 = " "round caps)" msgstr "" -"Aumente para tornar as pontas dos traços mais salientes (0 = sem ponta, 1 = " +"Aumentar para tornar as pontas dos traços mais salientes (0 = sem ponta, 1 = " "ponta redonda)" #. Tremor @@ -30509,55 +28810,52 @@ msgstr "(linha suave)" #: ../src/widgets/calligraphy-toolbar.cpp:511 msgid "(slight tremor)" -msgstr "(tremor leve)" +msgstr "(tremido leve)" #: ../src/widgets/calligraphy-toolbar.cpp:511 msgid "(noticeable tremor)" -msgstr "(tremor perceptível)" +msgstr "(tremido perceptível)" #: ../src/widgets/calligraphy-toolbar.cpp:511 msgid "(maximum tremor)" -msgstr "(tremor máximo)" +msgstr "(tremido máximo)" #: ../src/widgets/calligraphy-toolbar.cpp:514 -#, fuzzy msgid "Stroke Tremor" -msgstr "Definir cor do traço" +msgstr "Traço Tremido" #: ../src/widgets/calligraphy-toolbar.cpp:514 msgid "Tremor:" -msgstr "Tremor:" +msgstr "Tremido:" #: ../src/widgets/calligraphy-toolbar.cpp:515 msgid "Increase to make strokes rugged and trembling" -msgstr "Aumente para fazer traços ásperos e trêmulos" +msgstr "Aumentar para fazer traços rugosos e tremidos" #. Wiggle #: ../src/widgets/calligraphy-toolbar.cpp:529 msgid "(no wiggle)" -msgstr "" +msgstr "(sem ondulação)" #: ../src/widgets/calligraphy-toolbar.cpp:529 -#, fuzzy msgid "(slight deviation)" -msgstr "Destino da impressão" +msgstr "(ligeiro desvio)" #: ../src/widgets/calligraphy-toolbar.cpp:529 msgid "(wild waves and curls)" -msgstr "" +msgstr "(ondas grandes e caracóis)" #: ../src/widgets/calligraphy-toolbar.cpp:532 -#, fuzzy msgid "Pen Wiggle" -msgstr "Ondulação:" +msgstr "Ondulação da Caneta" #: ../src/widgets/calligraphy-toolbar.cpp:532 msgid "Wiggle:" -msgstr "Ondulação:" +msgstr "Ondulado:" #: ../src/widgets/calligraphy-toolbar.cpp:533 msgid "Increase to make the pen waver and wiggle" -msgstr "Aumente para fazer traços ondulados e sinuosos" +msgstr "Aumentar para fazer traços ondulados e sinuosos" #. Mass #: ../src/widgets/calligraphy-toolbar.cpp:546 @@ -30568,12 +28866,12 @@ msgstr "(sem inércia)" #: ../src/widgets/calligraphy-toolbar.cpp:546 #: ../src/widgets/eraser-toolbar.cpp:168 msgid "(slight smoothing, default)" -msgstr "" +msgstr "(suavidade leve, padrão)" #: ../src/widgets/calligraphy-toolbar.cpp:546 #: ../src/widgets/eraser-toolbar.cpp:168 msgid "(noticeable lagging)" -msgstr "" +msgstr "(atraso notável)" #: ../src/widgets/calligraphy-toolbar.cpp:546 #: ../src/widgets/eraser-toolbar.cpp:168 @@ -30581,77 +28879,73 @@ msgid "(maximum inertia)" msgstr "(inércia máxima)" #: ../src/widgets/calligraphy-toolbar.cpp:549 -#, fuzzy msgid "Pen Mass" -msgstr "Massa:" +msgstr "Massa da Caneta" #: ../src/widgets/calligraphy-toolbar.cpp:549 #: ../src/widgets/eraser-toolbar.cpp:171 msgid "Mass:" -msgstr "Massa:" +msgstr "Inércia:" #: ../src/widgets/calligraphy-toolbar.cpp:550 msgid "Increase to make the pen drag behind, as if slowed by inertia" msgstr "" -"Aumente para tornar a caneta mais pesada, como se atrasada pela inércia" +"Aumentar para tornar a caneta mais pesada, como que atrasada pela inércia" #: ../src/widgets/calligraphy-toolbar.cpp:565 -#, fuzzy msgid "Trace Background" -msgstr "Plano de fundo:" +msgstr "Vetorizar Fundo" #: ../src/widgets/calligraphy-toolbar.cpp:566 msgid "" "Trace the lightness of the background by the width of the pen (white - " "minimum width, black - maximum width)" msgstr "" +"Vetorizar a luminosidade do fundo pela espessura da caneta (branco - " +"espessura mínima; preto - espessura máxima)" #: ../src/widgets/calligraphy-toolbar.cpp:579 msgid "Use the pressure of the input device to alter the width of the pen" msgstr "" -"Usar a pressão do dispositivo de entrada para alterar a largura da caneta" +"Usar a pressão do dispositivo de entrada para alterar a espessura da caneta" #: ../src/widgets/calligraphy-toolbar.cpp:591 msgid "Tilt" -msgstr "Tilt" +msgstr "Inclinação" #: ../src/widgets/calligraphy-toolbar.cpp:592 msgid "Use the tilt of the input device to alter the angle of the pen's nib" msgstr "" -"Usar a inclunação do dispositivo de entrada para alterar o ângulo da ponta " -"da caneta." +"Usar a inclinação do dispositivo de entrada para alterar o ângulo da ponta " +"da caneta" #: ../src/widgets/calligraphy-toolbar.cpp:607 -#, fuzzy msgid "Choose a preset" -msgstr "Pré-visualizar" +msgstr "Escolher modelo" #: ../src/widgets/calligraphy-toolbar.cpp:622 -#, fuzzy msgid "Add/Edit Profile" -msgstr "_Propriedades da Ligação" +msgstr "Adicionar/Editar Perfil" #: ../src/widgets/calligraphy-toolbar.cpp:623 -#, fuzzy msgid "Add or edit calligraphic profile" -msgstr "Desenhar linhas caligráficas" +msgstr "Adicionar ou editar perfil caligráfico" #: ../src/widgets/connector-toolbar.cpp:118 msgid "Set connector type: orthogonal" -msgstr "" +msgstr "Definir tipo de conetor: ortogonal" #: ../src/widgets/connector-toolbar.cpp:118 msgid "Set connector type: polyline" -msgstr "" +msgstr "Definir tipo de conetor: polilinha" #: ../src/widgets/connector-toolbar.cpp:165 -#, fuzzy msgid "Change connector curvature" -msgstr "Mudar espaçamento do conector" +msgstr "Alterar curvatura do conetor" #: ../src/widgets/connector-toolbar.cpp:214 msgid "Change connector spacing" -msgstr "Mudar espaçamento do conector" +msgstr "Alterar espaçamento do conetor" #: ../src/widgets/connector-toolbar.cpp:307 msgid "Avoid" @@ -30663,30 +28957,27 @@ msgstr "Ignorar" #: ../src/widgets/connector-toolbar.cpp:328 msgid "Orthogonal" -msgstr "" +msgstr "Ortogonal" #: ../src/widgets/connector-toolbar.cpp:329 msgid "Make connector orthogonal or polyline" -msgstr "" +msgstr "Tornar os conetores ortogonais ou polilinhas" #: ../src/widgets/connector-toolbar.cpp:343 -#, fuzzy msgid "Connector Curvature" -msgstr "Propriedades do Seletor" +msgstr "Curvatura do Conetor" #: ../src/widgets/connector-toolbar.cpp:343 -#, fuzzy msgid "Curvature:" -msgstr "Arrastar curva" +msgstr "Curvatura:" #: ../src/widgets/connector-toolbar.cpp:344 msgid "The amount of connectors curvature" -msgstr "" +msgstr "O valor da curvatura dos conetores" #: ../src/widgets/connector-toolbar.cpp:354 -#, fuzzy msgid "Connector Spacing" -msgstr "Mudar espaçamento do conector" +msgstr "Espaçamento do Conetor" #: ../src/widgets/connector-toolbar.cpp:354 msgid "Spacing:" @@ -30695,17 +28986,16 @@ msgstr "Espaçamento:" #: ../src/widgets/connector-toolbar.cpp:355 msgid "The amount of space left around objects by auto-routing connectors" msgstr "" -"Quantidade de espaço deixada em redor dos objectos quando os conectores são " -"posicionados automaticamente " +"Quantidade de espaço deixada em redor dos objetos quando os conetores são " +"posicionados automaticamente" #: ../src/widgets/connector-toolbar.cpp:366 msgid "Graph" msgstr "Gráfico" #: ../src/widgets/connector-toolbar.cpp:376 -#, fuzzy msgid "Connector Length" -msgstr "Conector" +msgstr "Comprimento do Conetor" #: ../src/widgets/connector-toolbar.cpp:376 msgid "Length:" @@ -30713,15 +29003,15 @@ msgstr "Comprimento:" #: ../src/widgets/connector-toolbar.cpp:377 msgid "Ideal length for connectors when layout is applied" -msgstr "Comprimento ideal para os conectores quando o layout é aplicado" +msgstr "Comprimento ideal para os conetores quando o layout é aplicado" #: ../src/widgets/connector-toolbar.cpp:389 msgid "Downwards" -msgstr "" +msgstr "Para baixo" #: ../src/widgets/connector-toolbar.cpp:390 msgid "Make connectors with end-markers (arrows) point downwards" -msgstr "Criar conectores com marcadores-fim (setas) apontando para baixo" +msgstr "Criar conetores com marcadores de fim (setas) apontando para baixo" #: ../src/widgets/connector-toolbar.cpp:406 msgid "Do not allow overlapping shapes" @@ -30729,15 +29019,16 @@ msgstr "Não permitir sobreposição de formas" #: ../src/widgets/dash-selector.cpp:59 msgid "Dash pattern" -msgstr "Padrão de traço" +msgstr "Padrão tracejado" #: ../src/widgets/dash-selector.cpp:76 msgid "Pattern offset" -msgstr "Padrão de Tipografia" +msgstr "Deslocamento do padrão" #: ../src/widgets/desktop-widget.cpp:499 msgid "Zoom drawing if window size changes" -msgstr "Ajustar nível de zoom do desenho se o tamanho da janela mudar" +msgstr "" +"Ajustar nível de aproximação do desenho se o tamanho da janela for alterado" #. Display the initial welcome message in the statusbar #: ../src/widgets/desktop-widget.cpp:701 @@ -30745,8 +29036,9 @@ msgid "" "Welcome to Inkscape! Use shape or freehand tools to create objects; " "use selector (arrow) to move or transform them." msgstr "" -"Bem vindo ao Inkscape! Use as ferramentas de forma ou mão-livre para " -"criar objectos. Use o selector (seta) para mover ou transformá-los." +"Bem vindo ao Inkscape! Use as ferramentas de formas geométricas ou " +"desenho à mão-livre para criar objetos. Use a Ferramenta de Selecionar " +"(seta) para os mover ou transformar." #: ../src/widgets/desktop-widget.cpp:743 msgid "Cursor coordinates" @@ -30754,87 +29046,77 @@ msgstr "Coordenadas do cursor" #: ../src/widgets/desktop-widget.cpp:764 msgid "Z:" -msgstr "" +msgstr "L:" #: ../src/widgets/desktop-widget.cpp:885 -#, fuzzy msgid "grayscale" -msgstr "Escala de cinzas" +msgstr "escala de cinzas" #: ../src/widgets/desktop-widget.cpp:886 -#, fuzzy msgid ", grayscale" -msgstr "Escala de cinzas" +msgstr ", escala de cinzas" #: ../src/widgets/desktop-widget.cpp:887 -#, fuzzy msgid "print colors preview" -msgstr "_Visualizar Impressão" +msgstr "prever cores de impressão" #: ../src/widgets/desktop-widget.cpp:888 -#, fuzzy msgid ", print colors preview" -msgstr "_Visualizar Impressão" +msgstr ", prever cores de impressão" #: ../src/widgets/desktop-widget.cpp:889 -#, fuzzy msgid "outline" -msgstr "_Contorno" +msgstr "contorno" #: ../src/widgets/desktop-widget.cpp:890 -#, fuzzy msgid "no filters" -msgstr "_Filtrar" +msgstr "sem filtros" #: ../src/widgets/desktop-widget.cpp:917 -#, fuzzy, c-format +#, c-format msgid "%s%s: %d (%s%s) - Inkscape" -msgstr "%s: %d - Inkscape" +msgstr "%s%s: %d (%s%s) - Inkscape" #: ../src/widgets/desktop-widget.cpp:919 ../src/widgets/desktop-widget.cpp:923 -#, fuzzy, c-format +#, c-format msgid "%s%s: %d (%s) - Inkscape" -msgstr "%s: %d - Inkscape" +msgstr "%s%s: %d (%s) - Inkscape" #: ../src/widgets/desktop-widget.cpp:925 -#, fuzzy, c-format +#, c-format msgid "%s%s: %d - Inkscape" -msgstr "%s: %d - Inkscape" +msgstr "%s%s: %d - Inkscape" #: ../src/widgets/desktop-widget.cpp:931 -#, fuzzy, c-format +#, c-format msgid "%s%s (%s%s) - Inkscape" -msgstr "%s - Inkscape" +msgstr "%s%s (%s%s) - Inkscape" #: ../src/widgets/desktop-widget.cpp:933 ../src/widgets/desktop-widget.cpp:937 -#, fuzzy, c-format +#, c-format msgid "%s%s (%s) - Inkscape" -msgstr "%s - Inkscape" +msgstr "%s%s (%s) - Inkscape" #: ../src/widgets/desktop-widget.cpp:939 -#, fuzzy, c-format +#, c-format msgid "%s%s - Inkscape" -msgstr "%s - Inkscape" +msgstr "%s%s - Inkscape" #: ../src/widgets/desktop-widget.cpp:1111 -#, fuzzy msgid "Locked all guides" -msgstr "Selecionar em todas as camadas" +msgstr "Bloqueadas todas as guias" #: ../src/widgets/desktop-widget.cpp:1113 -#, fuzzy msgid "Unlocked all guides" -msgstr "DesBloquear Camada" +msgstr "Desbloqueadas todas as guias" #: ../src/widgets/desktop-widget.cpp:1130 -#, fuzzy msgid "Color-managed display is enabled in this window" -msgstr "Fechar a janela do documento" +msgstr "A visualização com gestão de cor está ativada nesta janela" #: ../src/widgets/desktop-widget.cpp:1132 -#, fuzzy msgid "Color-managed display is disabled in this window" -msgstr "Fechar a janela do documento" +msgstr "A visualização com gestão de cor está desativada nesta janela" #: ../src/widgets/desktop-widget.cpp:1187 #, c-format @@ -30844,152 +29126,139 @@ msgid "" "\n" "If you close without saving, your changes will be discarded." msgstr "" -"Guardar as modificações do desenho \"%s" +"Gravar as alterações no documento \"%s" "\" antes de fechar?\n" "\n" -"Se fechar sem guardar, suas modificações serão descartadas." +"Se fechar sem gravar, as alterações serão perdidas." #: ../src/widgets/desktop-widget.cpp:1197 #: ../src/widgets/desktop-widget.cpp:1256 msgid "Close _without saving" -msgstr "Fechar _sem guardar" +msgstr "_Fechar sem guardar" #: ../src/widgets/desktop-widget.cpp:1246 -#, fuzzy, c-format +#, c-format msgid "" "The file \"%s\" was saved with a " "format that may cause data loss!\n" "\n" "Do you want to save this file as Inkscape SVG?" msgstr "" -"O ficheiro \"%s\" foi salvo com um " -"formato (%s) que causará perda de dados!\n" +"O ficheiro \"%s\" foi gravado num " +"formato que poderá causar perda de dados!\n" "\n" -"Deseja guardar este ficheiro noutro formato?" +"Quer guardar este ficheiro no formato Inkscape SVG?" #: ../src/widgets/desktop-widget.cpp:1258 -#, fuzzy msgid "_Save as Inkscape SVG" -msgstr "_Guardar como SVG" +msgstr "_Guardar como Inkscape SVG" #: ../src/widgets/desktop-widget.cpp:1472 msgid "Note:" -msgstr "" +msgstr "Nota:" #: ../src/widgets/dropper-toolbar.cpp:90 -#, fuzzy msgid "Pick opacity" -msgstr "Capturar alfa" +msgstr "Capturar opacidade" #: ../src/widgets/dropper-toolbar.cpp:91 msgid "" "Pick both the color and the alpha (transparency) under cursor; otherwise, " "pick only the visible color premultiplied by alpha" msgstr "" -"Capturar a cor e o alfa (transparência) sob o cursor; senão, capturar apenas " -"a cor visível pré-multiplicada pelo alfa" +"Capturar a cor e a transparência (canal alfa); Se desativado, capturar " +"apenas a cor equivalente, mas sem usar a transparência" #: ../src/widgets/dropper-toolbar.cpp:94 -#, fuzzy msgid "Pick" -msgstr "Bias" +msgstr "Capturar" #: ../src/widgets/dropper-toolbar.cpp:103 -#, fuzzy msgid "Assign opacity" -msgstr "Alterar opacidade" +msgstr "Atribuir transparência" #: ../src/widgets/dropper-toolbar.cpp:104 msgid "" "If alpha was picked, assign it to selection as fill or stroke transparency" msgstr "" -"Com o alfa capturado, atribuí-lo à selecção como transparência de " -"preenchimento ou de traço" +"Se a transparência foi capturada, aplicá-la à seleção como transparência do " +"preenchimento ou do traço" #: ../src/widgets/dropper-toolbar.cpp:107 -#, fuzzy msgid "Assign" -msgstr "Alinhar" +msgstr "Atribuir" #: ../src/widgets/ege-paint-def.cpp:87 -#, fuzzy msgid "remove" -msgstr "Remover" +msgstr "remover" #: ../src/widgets/eraser-toolbar.cpp:121 msgid "Delete objects touched by the eraser" -msgstr "" +msgstr "Eliminar objetos tocados pela borracha" #: ../src/widgets/eraser-toolbar.cpp:127 -#, fuzzy msgid "Cut" -msgstr "Cor_tar" +msgstr "Cortar" #: ../src/widgets/eraser-toolbar.cpp:128 -#, fuzzy msgid "Cut out from objects" -msgstr "Padrão para objecto" +msgstr "Recortar os objetos" #. Width #: ../src/widgets/eraser-toolbar.cpp:151 -#, fuzzy msgid "(no width)" -msgstr "Largura da caneta" +msgstr "(sem espessura)" #: ../src/widgets/eraser-toolbar.cpp:155 -#, fuzzy msgid "The width of the eraser pen (relative to the visible canvas area)" -msgstr "A largura da caneta caligráfica (em relação a área visível da página)" +msgstr "A largura da borracha (em relação a área visível da página)" #: ../src/widgets/eraser-toolbar.cpp:171 -#, fuzzy msgid "Eraser Mass" -msgstr "Rasterizar" +msgstr "Massa da Borracha" #: ../src/widgets/eraser-toolbar.cpp:172 -#, fuzzy msgid "Increase to make the eraser drag behind, as if slowed by inertia" msgstr "" -"Aumente para tornar a caneta mais pesada, como se atrasada pela inércia" +"Aumentar para tornar a borracha mais pesada, como se ficasse mais lenta " +"devido à inércia" #: ../src/widgets/eraser-toolbar.cpp:186 ../src/widgets/eraser-toolbar.cpp:187 -#, fuzzy msgid "Break apart cut items" -msgstr "Separar" +msgstr "Separar itens cortados (se for cortado de um lado ao outro)" #: ../src/widgets/fill-style.cpp:356 msgid "Change fill rule" -msgstr "Mudar regra de preenchimento" +msgstr "Alterar regra do preenchimento" #: ../src/widgets/fill-style.cpp:440 ../src/widgets/fill-style.cpp:518 msgid "Set fill color" -msgstr "Definir cor de preenchimento" +msgstr "Aplicar cor do preenchimento" #: ../src/widgets/fill-style.cpp:440 ../src/widgets/fill-style.cpp:518 msgid "Set stroke color" -msgstr "Definir cor do traço" +msgstr "Aplicar cor do traço" #: ../src/widgets/fill-style.cpp:616 msgid "Set gradient on fill" -msgstr "Definir degradê no preenchimento" +msgstr "Aplicar gradiente no preenchimento" #: ../src/widgets/fill-style.cpp:616 msgid "Set gradient on stroke" -msgstr "Criar degradê no traço" +msgstr "Aplicar gradiente no traço" #: ../src/widgets/fill-style.cpp:676 msgid "Set pattern on fill" -msgstr "Definir padrão de preenchimento" +msgstr "Aplicar padrão no preenchimento" #: ../src/widgets/fill-style.cpp:677 msgid "Set pattern on stroke" -msgstr "Definir padrão de traço" +msgstr "Aplicar padrão no traço" #: ../src/widgets/font-selector.cpp:120 ../src/widgets/text-toolbar.cpp:1207 #: ../src/widgets/text-toolbar.cpp:1606 -#, fuzzy msgid "Font size" -msgstr "Tamanho da Fonte" +msgstr "Tamanho da fonte" #. Family frame #: ../src/widgets/font-selector.cpp:134 @@ -30998,157 +29267,137 @@ msgstr "Família da fonte" #. Style frame #: ../src/widgets/font-selector.cpp:194 -#, fuzzy msgctxt "Font selector" msgid "Style" msgstr "Estilo" #: ../src/widgets/font-selector.cpp:226 -#, fuzzy msgid "Face" -msgstr "Nivelar" +msgstr "Fonte" #: ../src/widgets/font-selector.cpp:255 ../share/extensions/dots.inx.h:3 #: ../share/extensions/nicechart.inx.h:17 msgid "Font size:" -msgstr "Tamanho da Fonte" +msgstr "Tamanho da fonte:" #: ../src/widgets/gradient-selector.cpp:201 -#, fuzzy msgid "Create a duplicate gradient" -msgstr "Criar e editar degradês" +msgstr "Criar gradiente duplicado" #: ../src/widgets/gradient-selector.cpp:212 -#, fuzzy msgid "Edit gradient" -msgstr "Degradê radial" +msgstr "Editar gradiente" #: ../src/widgets/gradient-selector.cpp:281 #: ../src/widgets/paint-selector.cpp:233 -#, fuzzy msgid "Swatch" -msgstr "Ajustar" +msgstr "Amostra de cor" #: ../src/widgets/gradient-selector.cpp:331 -#, fuzzy msgid "Rename gradient" -msgstr "Degradê linear" +msgstr "Alterar nome do gradiente" #: ../src/widgets/gradient-toolbar.cpp:156 #: ../src/widgets/gradient-toolbar.cpp:169 #: ../src/widgets/gradient-toolbar.cpp:758 #: ../src/widgets/gradient-toolbar.cpp:1097 -#, fuzzy msgid "No gradient" -msgstr "Mover alça do degradê" +msgstr "Sem gradiente" #: ../src/widgets/gradient-toolbar.cpp:176 -#, fuzzy msgid "Multiple gradients" -msgstr "Mover alça do degradê" +msgstr "Gradientes múltiplos" #: ../src/widgets/gradient-toolbar.cpp:678 -#, fuzzy msgid "Multiple stops" -msgstr "Estilos múltiplos" +msgstr "Múltiplas paragens" #: ../src/widgets/gradient-toolbar.cpp:776 #: ../src/widgets/gradient-vector.cpp:614 msgid "No stops in gradient" -msgstr "Nenhuma parada no degradê" +msgstr "Nenhuma paragem no gradiente" #: ../src/widgets/gradient-toolbar.cpp:930 msgid "Assign gradient to object" -msgstr "Atribuir o degradê ao objecto" +msgstr "Aplicar o gradiente no objeto" #: ../src/widgets/gradient-toolbar.cpp:952 -#, fuzzy msgid "Set gradient repeat" -msgstr "Criar degradê no traço" +msgstr "Definir repedição do gradiente" #: ../src/widgets/gradient-toolbar.cpp:990 #: ../src/widgets/gradient-vector.cpp:727 msgid "Change gradient stop offset" -msgstr "Alterar posição da parada do degradê" +msgstr "Alterar posição da paragem no gradiente" #: ../src/widgets/gradient-toolbar.cpp:1037 -#, fuzzy msgid "linear" -msgstr "Linear" +msgstr "linear" #: ../src/widgets/gradient-toolbar.cpp:1037 msgid "Create linear gradient" -msgstr "Criar degradê linear" +msgstr "Criar gradiente linear" #: ../src/widgets/gradient-toolbar.cpp:1041 msgid "radial" -msgstr "" +msgstr "radial" #: ../src/widgets/gradient-toolbar.cpp:1041 msgid "Create radial (elliptic or circular) gradient" -msgstr "Criar degradê radial (elíptico ou circular)" +msgstr "Criar gradiente radial (elíptico ou circular)" #: ../src/widgets/gradient-toolbar.cpp:1044 ../src/widgets/mesh-toolbar.cpp:387 msgid "New:" -msgstr "" +msgstr "Novo:" #: ../src/widgets/gradient-toolbar.cpp:1067 ../src/widgets/mesh-toolbar.cpp:410 -#, fuzzy msgid "fill" -msgstr "Tipografia normal" +msgstr "preencher" #: ../src/widgets/gradient-toolbar.cpp:1067 ../src/widgets/mesh-toolbar.cpp:410 msgid "Create gradient in the fill" -msgstr "Criar degradê no preenchimento" +msgstr "Criar gradiente no preenchimento" #: ../src/widgets/gradient-toolbar.cpp:1071 ../src/widgets/mesh-toolbar.cpp:414 -#, fuzzy msgid "stroke" -msgstr "Traço:" +msgstr "traço" #: ../src/widgets/gradient-toolbar.cpp:1071 ../src/widgets/mesh-toolbar.cpp:414 msgid "Create gradient in the stroke" -msgstr "Criar degradê no traço" +msgstr "Criar gradiente no traço" #: ../src/widgets/gradient-toolbar.cpp:1074 ../src/widgets/mesh-toolbar.cpp:417 -#, fuzzy msgid "on:" -msgstr "ligado" +msgstr "em:" #: ../src/widgets/gradient-toolbar.cpp:1099 msgid "Select" msgstr "Selecionar" #: ../src/widgets/gradient-toolbar.cpp:1099 -#, fuzzy msgid "Choose a gradient" -msgstr "Pré-visualizar" +msgstr "Escolher gradiente" #: ../src/widgets/gradient-toolbar.cpp:1100 -#, fuzzy msgid "Select:" -msgstr "Selecionar" +msgstr "Selecionar:" #: ../src/widgets/gradient-toolbar.cpp:1115 -#, fuzzy msgctxt "Gradient repeat type" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../src/widgets/gradient-toolbar.cpp:1118 -#, fuzzy msgid "Reflected" -msgstr "refletido" +msgstr "Refletida" #: ../src/widgets/gradient-toolbar.cpp:1121 -#, fuzzy msgid "Direct" -msgstr "direto" +msgstr "Direita" #: ../src/widgets/gradient-toolbar.cpp:1123 -#, fuzzy msgid "Repeat" -msgstr "Repetir:" +msgstr "Repetição" #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/pservers.html#LinearGradientSpreadMethodAttribute #: ../src/widgets/gradient-toolbar.cpp:1125 @@ -31158,201 +29407,184 @@ msgid "" "(spreadMethod=\"repeat\"), or repeat the gradient in alternating opposite " "directions (spreadMethod=\"reflect\")" msgstr "" -"Se para preencher com uma cor além do final do vetor do degradê " -"(spreadMethod=\"pad\"), ou repetir o degradê na mesma direção (spreadMethod=" -"\"repeat\"), ou repetir o degradê ao alternar entre direções opostas " -"(spreadMethod=\"reflect\")" +"Se para preencher com uma cor lisa além dos finais do vetor do gradiente " +"(spreadMethod=\"pad\"), ou repetir o gradiente na mesma direção " +"(spreadMethod=\"repeat\"), ou repetir o gradiente ao alternar entre direções " +"opostas (spreadMethod=\"reflect\")" #: ../src/widgets/gradient-toolbar.cpp:1130 msgid "Repeat:" -msgstr "Repetir:" +msgstr "Repetição:" #: ../src/widgets/gradient-toolbar.cpp:1144 -#, fuzzy msgid "No stops" -msgstr "Sem traço" +msgstr "Sem paragens" #: ../src/widgets/gradient-toolbar.cpp:1146 -#, fuzzy msgid "Stops" -msgstr "_Aplicar" +msgstr "Paragens" #: ../src/widgets/gradient-toolbar.cpp:1146 -#, fuzzy msgid "Select a stop for the current gradient" -msgstr "Editar as paradas do degradê" +msgstr "Selecionar uma paragem para o gradiente atual" #: ../src/widgets/gradient-toolbar.cpp:1147 -#, fuzzy msgid "Stops:" -msgstr "_Aplicar" +msgstr "Paragens:" #. Label #: ../src/widgets/gradient-toolbar.cpp:1159 #: ../src/widgets/gradient-vector.cpp:916 -#, fuzzy msgctxt "Gradient" msgid "Offset:" -msgstr "Offset:" +msgstr "Deslocamento:" #: ../src/widgets/gradient-toolbar.cpp:1159 -#, fuzzy msgid "Offset of selected stop" -msgstr "Expandir o(s) caminho(s) seleccionados" +msgstr "Deslocamento da paragem selecionada" #: ../src/widgets/gradient-toolbar.cpp:1177 #: ../src/widgets/gradient-toolbar.cpp:1178 -#, fuzzy msgid "Insert new stop" -msgstr "Inserir nó" +msgstr "Inserir nova paragem" #: ../src/widgets/gradient-toolbar.cpp:1191 #: ../src/widgets/gradient-toolbar.cpp:1192 #: ../src/widgets/gradient-vector.cpp:898 msgid "Delete stop" -msgstr "Eliminar parada" +msgstr "Eliminar paragem" #: ../src/widgets/gradient-toolbar.cpp:1206 -#, fuzzy msgid "Reverse the direction of the gradient" -msgstr "Editar as paradas do degradê" +msgstr "Inverter a direção do gradiente" #: ../src/widgets/gradient-toolbar.cpp:1220 -#, fuzzy msgid "Link gradients" -msgstr "Degradê linear" +msgstr "Ligar gradientes" #: ../src/widgets/gradient-toolbar.cpp:1221 msgid "Link gradients to change all related gradients" -msgstr "" +msgstr "Ligar gradientes para alterar todos os gradientes relacionados" #: ../src/widgets/gradient-vector.cpp:317 ../src/widgets/paint-selector.cpp:965 #: ../src/widgets/stroke-marker-selector.cpp:154 msgid "No document selected" -msgstr "Nenhum documento seleccionado" +msgstr "Nenhum documento selecionado" #: ../src/widgets/gradient-vector.cpp:321 msgid "No gradients in document" -msgstr "Nenhum degradê no desenho" +msgstr "Nenhum gradiente no desenho" #: ../src/widgets/gradient-vector.cpp:325 msgid "No gradient selected" -msgstr "Nenhum degradê seleccionado" +msgstr "Nenhum gradiente selecionado" #. TRANSLATORS: "Stop" means: a "phase" of a gradient #: ../src/widgets/gradient-vector.cpp:893 msgid "Add stop" -msgstr "Acrescentar parada" +msgstr "Adicionar paragem" #: ../src/widgets/gradient-vector.cpp:896 msgid "Add another control stop to gradient" -msgstr "Acrescentar outra parada de controle no degradê" +msgstr "Acrescentar outra paragem de controle no gradiente" #: ../src/widgets/gradient-vector.cpp:901 msgid "Delete current control stop from gradient" -msgstr "Eliminar parada de controle actual do degradê" +msgstr "Eliminar paragem de controle atual do gradiente" #. TRANSLATORS: "Stop" means: a "phase" of a gradient #: ../src/widgets/gradient-vector.cpp:975 msgid "Stop Color" -msgstr "Cor da Parada" +msgstr "Cor da Paragem" #: ../src/widgets/gradient-vector.cpp:1014 msgid "Gradient editor" -msgstr "Editor de degradê" +msgstr "Editor de gradiente" #: ../src/widgets/gradient-vector.cpp:1366 msgid "Change gradient stop color" -msgstr "Alterar cor da parada do degradê" +msgstr "Alterar cor da paragem no gradiente" #: ../src/widgets/image-menu-item.c:151 -#, fuzzy msgid "Image widget" -msgstr "Imagem" +msgstr "Imagem do widget" #: ../src/widgets/image-menu-item.c:152 msgid "Child widget to appear next to the menu text" -msgstr "" +msgstr "Widget filho a aparecer a seguir ao texto do menu" #: ../src/widgets/image-menu-item.c:167 -#, fuzzy msgid "Use stock" -msgstr "Colar traço" +msgstr "Usar originais" #: ../src/widgets/image-menu-item.c:168 msgid "Whether to use the label text to create a stock menu item" msgstr "" +"Se usar ou não a etiqueta de texto para criar um item de menu de origem" #: ../src/widgets/image-menu-item.c:183 -#, fuzzy msgid "Accel Group" -msgstr "Agrupar" +msgstr "Grupo de Acelaração" #: ../src/widgets/image-menu-item.c:184 msgid "The Accel Group to use for stock accelerator keys" -msgstr "" +msgstr "O Grupo de Acelaração a usar para as teclas de acelaração padrão" #: ../src/widgets/lpe-toolbar.cpp:233 -#, fuzzy msgid "Closed" -msgstr "Fe_char" +msgstr "Fechado" #: ../src/widgets/lpe-toolbar.cpp:235 -#, fuzzy msgid "Open start" -msgstr "Arco Aberto" +msgstr "Início aberto" #: ../src/widgets/lpe-toolbar.cpp:237 -#, fuzzy msgid "Open end" -msgstr "Abrir _Recentes" +msgstr "Fim aberto" #: ../src/widgets/lpe-toolbar.cpp:239 msgid "Open both" -msgstr "" +msgstr "Ambos abertos" #: ../src/widgets/lpe-toolbar.cpp:301 msgid "All inactive" -msgstr "" +msgstr "Todos inativos" #: ../src/widgets/lpe-toolbar.cpp:302 msgid "No geometric tool is active" -msgstr "" +msgstr "Nenhuma ferramenta geométrica está ativa" #: ../src/widgets/lpe-toolbar.cpp:335 -#, fuzzy msgid "Show limiting bounding box" -msgstr "Margem oposta da caixa de limites" +msgstr "Mostrar caixa limitadora" #: ../src/widgets/lpe-toolbar.cpp:336 msgid "Show bounding box (used to cut infinite lines)" -msgstr "" +msgstr "Mostrar caixa limitadora (usada para cortar linhas infinitas)" #: ../src/widgets/lpe-toolbar.cpp:347 -#, fuzzy msgid "Get limiting bounding box from selection" -msgstr "Remover clip ao caminho da selecção" +msgstr "Obter caixa limitadora da seleção" #: ../src/widgets/lpe-toolbar.cpp:348 -#, fuzzy msgid "" "Set limiting bounding box (used to cut infinite lines) to the bounding box " "of current selection" -msgstr "Ajustar cantos das caixas limitadoras a outros cantos" +msgstr "" +"Definir a caixa limitadora (usada para cortar linhas infinitas) à caixa " +"limitadora da seleção atual" #: ../src/widgets/lpe-toolbar.cpp:360 -#, fuzzy msgid "Choose a line segment type" -msgstr "Alterar tipo do segmento" +msgstr "Escolher tipo de segmento de linha" #: ../src/widgets/lpe-toolbar.cpp:376 -#, fuzzy msgid "Display measuring info" -msgstr "_Modo de visão" +msgstr "Mostrar medidas" #: ../src/widgets/lpe-toolbar.cpp:377 msgid "Display measuring info for selected items" -msgstr "" +msgstr "Mostrar medidas dos itens selecionados" #. Add the units menu. #: ../src/widgets/lpe-toolbar.cpp:387 ../src/widgets/node-toolbar.cpp:613 @@ -31364,304 +29596,268 @@ msgstr "Unidades" #: ../src/widgets/lpe-toolbar.cpp:397 msgid "Open LPE dialog" -msgstr "" +msgstr "Abrir janela de Efeitos Interativos em Caminhos" #: ../src/widgets/lpe-toolbar.cpp:398 msgid "Open LPE dialog (to adapt parameters numerically)" msgstr "" +"Abre a janela de Efeitos Interativos em Caminhos para ajustar os parâmetros " +"numericamente" #: ../src/widgets/measure-toolbar.cpp:157 msgid "Start and end measures inactive." -msgstr "" +msgstr "Medidas inicial e final inativas." #: ../src/widgets/measure-toolbar.cpp:159 msgid "Start and end measures active." -msgstr "" +msgstr "Medidas inicial e final ativas." #: ../src/widgets/measure-toolbar.cpp:175 -#, fuzzy msgid "Show all crossings." -msgstr "Selecionar em todas as camadas" +msgstr "Mostrar todos os cruzamentos." #: ../src/widgets/measure-toolbar.cpp:177 msgid "Show visible crossings." -msgstr "" +msgstr "Mostrar cruzamentos visíveis." #: ../src/widgets/measure-toolbar.cpp:193 msgid "Use all layers in the measure." -msgstr "" +msgstr "Usar todas as camadas na medição." #: ../src/widgets/measure-toolbar.cpp:195 -#, fuzzy msgid "Use current layer in the measure." -msgstr "Levanta a camada actual para o topo" +msgstr "Usar camada atual na medição." #: ../src/widgets/measure-toolbar.cpp:211 -#, fuzzy msgid "Compute all elements." -msgstr "tutorial-elements.pt_BR.svg" +msgstr "Calcular todos os elementos." #: ../src/widgets/measure-toolbar.cpp:213 -#, fuzzy msgid "Compute max length." -msgstr "Caminho ao longo do caminho" +msgstr "Calcular comprimento máximo." #: ../src/widgets/measure-toolbar.cpp:274 ../src/widgets/text-toolbar.cpp:1609 -#, fuzzy msgid "Font Size" -msgstr "Tamanho da fonte" +msgstr "Tamanho da Fonte" #: ../src/widgets/measure-toolbar.cpp:274 -#, fuzzy msgid "Font Size:" -msgstr "Tamanho da fonte" +msgstr "Tamanho da Fonte:" #: ../src/widgets/measure-toolbar.cpp:275 msgid "The font size to be used in the measurement labels" -msgstr "" +msgstr "Tamanho da fonte utlizada nas medidas mostradas" #: ../src/widgets/measure-toolbar.cpp:286 #: ../src/widgets/measure-toolbar.cpp:294 msgid "The units to be used for the measurements" -msgstr "" +msgstr "Unidade utilizada nas medidas" #: ../src/widgets/measure-toolbar.cpp:302 ../share/extensions/measure.inx.h:14 -#, fuzzy msgid "Precision:" -msgstr "Precisão" +msgstr "Precisão:" #: ../src/widgets/measure-toolbar.cpp:303 msgid "Decimal precision of measure" -msgstr "" +msgstr "Número de casas decimais nas medidas" #: ../src/widgets/measure-toolbar.cpp:315 -#, fuzzy msgid "Scale %" -msgstr "Ampliar" +msgstr "Escala %" #: ../src/widgets/measure-toolbar.cpp:315 -#, fuzzy msgid "Scale %:" -msgstr "Ampliar" +msgstr "Escala %:" #: ../src/widgets/measure-toolbar.cpp:316 msgid "Scale the results" -msgstr "" +msgstr "Permite alterar a escala das medidas" #: ../src/widgets/measure-toolbar.cpp:329 -#, fuzzy msgid "The offset size" -msgstr "Padrão de Tipografia" +msgstr "Tamanho do deslocamento" #: ../src/widgets/measure-toolbar.cpp:341 #: ../src/widgets/measure-toolbar.cpp:342 -#, fuzzy msgid "Ignore first and last" -msgstr "Ignorar objectos ocultos" +msgstr "Não mostrar primeira e última medidas" #: ../src/widgets/measure-toolbar.cpp:352 #: ../src/widgets/measure-toolbar.cpp:353 -#, fuzzy msgid "Show hidden intersections" -msgstr "Ajustar às interseções de guias com a grelha" +msgstr "Mostrar interseções ocultas" #: ../src/widgets/measure-toolbar.cpp:363 #: ../src/widgets/measure-toolbar.cpp:364 -#, fuzzy msgid "Show measures between items" -msgstr "Espaço entre cópias:" +msgstr "Mostrar medidas entre itens" #: ../src/widgets/measure-toolbar.cpp:374 #: ../src/widgets/measure-toolbar.cpp:375 -#, fuzzy msgid "Measure all layers" -msgstr "Selecionar em todas as camadas" +msgstr "Medir todas as camadas" #: ../src/widgets/measure-toolbar.cpp:385 #: ../src/widgets/measure-toolbar.cpp:386 -#, fuzzy msgid "Reverse measure" -msgstr "Reverter caminho" +msgstr "Medida inversa" #: ../src/widgets/measure-toolbar.cpp:395 #: ../src/widgets/measure-toolbar.cpp:396 msgid "Phantom measure" -msgstr "" +msgstr "Medida fantasma" #: ../src/widgets/measure-toolbar.cpp:405 #: ../src/widgets/measure-toolbar.cpp:406 -#, fuzzy msgid "To guides" -msgstr "Mostrar _guias" +msgstr "Criar guias" #: ../src/widgets/measure-toolbar.cpp:415 #: ../src/widgets/measure-toolbar.cpp:416 -#, fuzzy msgid "Mark Dimension" -msgstr "Divisão" +msgstr "Criar Cota" #: ../src/widgets/measure-toolbar.cpp:425 #: ../src/widgets/measure-toolbar.cpp:426 -#, fuzzy msgid "Convert to item" -msgstr "Converter para Texto" +msgstr "Converter medição em objeto permanente do desenho" #: ../src/widgets/mesh-toolbar.cpp:318 -#, fuzzy msgid "Set mesh type" -msgstr "Definir estilo do texto" +msgstr "Definir tipo de malha" #: ../src/widgets/mesh-toolbar.cpp:380 -#, fuzzy msgid "normal" -msgstr "Normal" +msgstr "normal" #: ../src/widgets/mesh-toolbar.cpp:380 -#, fuzzy msgid "Create mesh gradient" -msgstr "Criar degradê linear" +msgstr "Criar gradiente de malha" #: ../src/widgets/mesh-toolbar.cpp:384 msgid "conical" -msgstr "" +msgstr "cónico" #: ../src/widgets/mesh-toolbar.cpp:384 -#, fuzzy msgid "Create conical gradient" -msgstr "Criar degradê linear" +msgstr "Criar gradiente cónico" #: ../src/widgets/mesh-toolbar.cpp:439 -#, fuzzy msgid "Rows" -msgstr "Linhas:" +msgstr "Linhas" #: ../src/widgets/mesh-toolbar.cpp:439 #: ../share/extensions/guides_creator.inx.h:5 #: ../share/extensions/layout_nup.inx.h:12 -#, fuzzy msgid "Rows:" msgstr "Linhas:" #: ../src/widgets/mesh-toolbar.cpp:439 -#, fuzzy msgid "Number of rows in new mesh" -msgstr "Número de linhas" +msgstr "Número de linhas na nova malha" #: ../src/widgets/mesh-toolbar.cpp:455 -#, fuzzy msgid "Columns" -msgstr "Colunas:" +msgstr "Colunas" #: ../src/widgets/mesh-toolbar.cpp:455 #: ../share/extensions/guides_creator.inx.h:4 -#, fuzzy msgid "Columns:" msgstr "Colunas:" #: ../src/widgets/mesh-toolbar.cpp:455 -#, fuzzy msgid "Number of columns in new mesh" -msgstr "Número de colunas" +msgstr "Número de colunas na nova malha" #: ../src/widgets/mesh-toolbar.cpp:469 -#, fuzzy msgid "Edit Fill" -msgstr "Editar preenchimento..." +msgstr "Editar Preenchimento" #: ../src/widgets/mesh-toolbar.cpp:470 -#, fuzzy msgid "Edit fill mesh" -msgstr "Editar preenchimento..." +msgstr "Editar preenchimento da malha" #: ../src/widgets/mesh-toolbar.cpp:481 -#, fuzzy msgid "Edit Stroke" -msgstr "Editar traço..." +msgstr "Editar Traço" #: ../src/widgets/mesh-toolbar.cpp:482 -#, fuzzy msgid "Edit stroke mesh" -msgstr "Editar traço..." +msgstr "Editar traço da malha" #: ../src/widgets/mesh-toolbar.cpp:493 ../src/widgets/node-toolbar.cpp:521 -#, fuzzy msgid "Show Handles" -msgstr "Desenhar Alças" +msgstr "Mostrar Alças" #: ../src/widgets/mesh-toolbar.cpp:494 -#, fuzzy msgid "Show side and tensor handles" -msgstr "Armazenar transformação:" +msgstr "Mostrar alças de lado e tensor" #: ../src/widgets/mesh-toolbar.cpp:509 msgid "WARNING: Mesh SVG Syntax Subject to Change" -msgstr "" +msgstr "AVISO: a sintaxe da Malha SVG está sujeita a alterações" #: ../src/widgets/mesh-toolbar.cpp:519 msgctxt "Type" msgid "Coons" -msgstr "" +msgstr "Coons" #: ../src/widgets/mesh-toolbar.cpp:522 msgid "Bicubic" -msgstr "" +msgstr "Bicúbico" #: ../src/widgets/mesh-toolbar.cpp:524 msgid "Coons" -msgstr "" +msgstr "Coons" #: ../src/widgets/mesh-toolbar.cpp:525 msgid "Coons: no smoothing. Bicubic: smoothing across patch boundaries." msgstr "" +"Coons: sem suavidade. Bicúbico: suavidade através dos limites do remendo." #: ../src/widgets/mesh-toolbar.cpp:527 ../src/widgets/pencil-toolbar.cpp:375 -#, fuzzy msgid "Smoothing:" -msgstr "Suavizar" +msgstr "Suavizar:" #: ../src/widgets/mesh-toolbar.cpp:537 -#, fuzzy msgid "Toggle Sides" -msgstr "Al_ternar" +msgstr "Trocar Lados" #: ../src/widgets/mesh-toolbar.cpp:538 msgid "Toggle selected sides between Beziers and lines." -msgstr "" +msgstr "Alternar lados selecionados entre Béziers e linhas." #: ../src/widgets/mesh-toolbar.cpp:541 -#, fuzzy msgid "Toggle side:" -msgstr "Al_ternar" +msgstr "Trocar lado:" #: ../src/widgets/mesh-toolbar.cpp:548 -#, fuzzy msgid "Make elliptical" -msgstr "Tornar itálico" +msgstr "Tornar elíptico" #: ../src/widgets/mesh-toolbar.cpp:549 msgid "" "Make selected sides elliptical by changing length of handles. Works best if " "handles already approximate ellipse." msgstr "" +"Tornar os lados selecionados elípticos alterando o comprimento das alças. " +"Funciona melhor se as alças já aproximam a elipse." #: ../src/widgets/mesh-toolbar.cpp:552 -#, fuzzy msgid "Make elliptical:" -msgstr "Tornar itálico" +msgstr "Tornar elíptico:" #: ../src/widgets/mesh-toolbar.cpp:559 -#, fuzzy msgid "Pick colors:" -msgstr "Soltar cor" +msgstr "Pegar cores:" #: ../src/widgets/mesh-toolbar.cpp:560 msgid "Pick colors for selected corner nodes from underneath mesh." -msgstr "" +msgstr "Pegar cores dos nós de cantos selecionados da malha de baixo." #: ../src/widgets/mesh-toolbar.cpp:563 -#, fuzzy msgid "Pick Color" -msgstr "Cor lisa" +msgstr "Pegar cor" #: ../src/widgets/node-toolbar.cpp:341 msgid "Insert node" @@ -31669,80 +29865,67 @@ msgstr "Inserir nó" #: ../src/widgets/node-toolbar.cpp:342 msgid "Insert new nodes into selected segments" -msgstr "Inserir novos nós dentro dos segmentos seleccionados" +msgstr "Inserir novos nós nos segmentos selecionados" #: ../src/widgets/node-toolbar.cpp:345 msgid "Insert" msgstr "Inserir" #: ../src/widgets/node-toolbar.cpp:356 -#, fuzzy msgid "Insert node at min X" -msgstr "Inserir nó" +msgstr "Inserir nó no X mínimo" #: ../src/widgets/node-toolbar.cpp:357 -#, fuzzy msgid "Insert new nodes at min X into selected segments" -msgstr "Inserir novos nós dentro dos segmentos seleccionados" +msgstr "Inserir novos nós no X mínimo nos segmentos selecionados" #: ../src/widgets/node-toolbar.cpp:360 -#, fuzzy msgid "Insert min X" -msgstr "Inserir nó" +msgstr "Inserir X mínimo" #: ../src/widgets/node-toolbar.cpp:366 -#, fuzzy msgid "Insert node at max X" -msgstr "Inserir nó" +msgstr "Inserir nó no X máximo" #: ../src/widgets/node-toolbar.cpp:367 -#, fuzzy msgid "Insert new nodes at max X into selected segments" -msgstr "Inserir novos nós dentro dos segmentos seleccionados" +msgstr "Inserir novos nós no X máximo nos segmentos selecionados" #: ../src/widgets/node-toolbar.cpp:370 -#, fuzzy msgid "Insert max X" -msgstr "Inserir" +msgstr "Inserir X máximo" #: ../src/widgets/node-toolbar.cpp:376 -#, fuzzy msgid "Insert node at min Y" -msgstr "Inserir nó" +msgstr "Inserir nó no Y mínimo" #: ../src/widgets/node-toolbar.cpp:377 -#, fuzzy msgid "Insert new nodes at min Y into selected segments" -msgstr "Inserir novos nós dentro dos segmentos seleccionados" +msgstr "Inserir novos nós no Y mínimo nos segmentos selecionados" #: ../src/widgets/node-toolbar.cpp:380 -#, fuzzy msgid "Insert min Y" -msgstr "Inserir nó" +msgstr "Inserir Y mínimo" #: ../src/widgets/node-toolbar.cpp:386 -#, fuzzy msgid "Insert node at max Y" -msgstr "Inserir nó" +msgstr "Inserir nó no Y máximo" #: ../src/widgets/node-toolbar.cpp:387 -#, fuzzy msgid "Insert new nodes at max Y into selected segments" -msgstr "Inserir novos nós dentro dos segmentos seleccionados" +msgstr "Inserir novos nós no Y máximo nos segmentos selecionados" #: ../src/widgets/node-toolbar.cpp:390 -#, fuzzy msgid "Insert max Y" -msgstr "Inserir" +msgstr "Inserir Y máximo" #: ../src/widgets/node-toolbar.cpp:398 msgid "Delete selected nodes" -msgstr "Eliminar nós seleccionados" +msgstr "Eliminar nós selecionados" #: ../src/widgets/node-toolbar.cpp:409 -#, fuzzy msgid "Join selected nodes" -msgstr "Juntar camimhos nos nós seleccionados" +msgstr "Unir nós selecionados" #: ../src/widgets/node-toolbar.cpp:412 msgid "Join" @@ -31750,121 +29933,107 @@ msgstr "Unir" #: ../src/widgets/node-toolbar.cpp:420 msgid "Break path at selected nodes" -msgstr "Quebrar caminho nos nós seleccionados" +msgstr "Partir caminho nos nós selecionados" #: ../src/widgets/node-toolbar.cpp:430 -#, fuzzy msgid "Join with segment" -msgstr "Unir Segmento" +msgstr "Unir ao segmento" #: ../src/widgets/node-toolbar.cpp:431 msgid "Join selected endnodes with a new segment" -msgstr "Juntar caminhos nos nós seleccionados com novo segmento" +msgstr "Unir nós finais selecionados com um novo segmento" #: ../src/widgets/node-toolbar.cpp:440 msgid "Delete segment" msgstr "Eliminar segmento" #: ../src/widgets/node-toolbar.cpp:441 -#, fuzzy msgid "Delete segment between two non-endpoint nodes" -msgstr "Separar caminho entre dois nós que não sejam pontos finais" +msgstr "Eliminar segmento entre 2 nós não extremos" #: ../src/widgets/node-toolbar.cpp:450 -#, fuzzy msgid "Node Cusp" -msgstr "Nós" +msgstr "Nó Afiado" #: ../src/widgets/node-toolbar.cpp:451 msgid "Make selected nodes corner" -msgstr "Tornar nós seleccionados em um canto" +msgstr "Tornar os nós selecionados em nós afiados" #: ../src/widgets/node-toolbar.cpp:460 msgid "Node Smooth" -msgstr "Suavizar Nó" +msgstr "Nó Suave" #: ../src/widgets/node-toolbar.cpp:461 msgid "Make selected nodes smooth" -msgstr "Suavizar nós seleccionados" +msgstr "Tornar os nós selecionados em nós suaves" #: ../src/widgets/node-toolbar.cpp:470 msgid "Node Symmetric" -msgstr "Simetria do Nó" +msgstr "Nó Simétrico" #: ../src/widgets/node-toolbar.cpp:471 msgid "Make selected nodes symmetric" -msgstr "Tornar nós seleccionados simétricos" +msgstr "Tornar os nós selecionados em nós simétricos" #: ../src/widgets/node-toolbar.cpp:480 -#, fuzzy msgid "Node Auto" -msgstr "Alterar Nó" +msgstr "Nó Automático" #: ../src/widgets/node-toolbar.cpp:481 -#, fuzzy msgid "Make selected nodes auto-smooth" -msgstr "Suavizar nós seleccionados" +msgstr "Tornar os nós selecionados em nós suavizados automaticamente" #: ../src/widgets/node-toolbar.cpp:490 msgid "Node Line" -msgstr "Linha do Nó" +msgstr "Nó Linha" #: ../src/widgets/node-toolbar.cpp:491 msgid "Make selected segments lines" -msgstr "Converter segmentos seleccionados em linhas" +msgstr "Alterar segmentos selecionados para linhas retas" #: ../src/widgets/node-toolbar.cpp:500 msgid "Node Curve" -msgstr "Curva do Nó" +msgstr "Nó Curvo" #: ../src/widgets/node-toolbar.cpp:501 msgid "Make selected segments curves" -msgstr "Converter segmentos seleccionados em curvas" +msgstr "Alterar segmentos selecionados para curvas" #: ../src/widgets/node-toolbar.cpp:510 -#, fuzzy msgid "Show Transform Handles" -msgstr "Desenhar Alças" +msgstr "Mostrar Alças de Transformar" #: ../src/widgets/node-toolbar.cpp:511 -#, fuzzy msgid "Show transformation handles for selected nodes" -msgstr "Mostrar as alças de Bezier dos nós seleccionados" +msgstr "Mostrar alças de transformação em nós selecionados" #: ../src/widgets/node-toolbar.cpp:522 -#, fuzzy msgid "Show Bezier handles of selected nodes" -msgstr "Mostrar as alças de Bezier dos nós seleccionados" +msgstr "Mostrar alças de Bézier em nós selecionados" #: ../src/widgets/node-toolbar.cpp:532 -#, fuzzy msgid "Show Outline" -msgstr "_Contorno" +msgstr "Mostrar Contorno" #: ../src/widgets/node-toolbar.cpp:533 -#, fuzzy msgid "Show path outline (without path effects)" -msgstr "Largura do padrão" +msgstr "Mostrar e destacar caminho (sem efeitos aplicados)" #: ../src/widgets/node-toolbar.cpp:555 -#, fuzzy msgid "Edit clipping paths" -msgstr "Definir caminho recortado" +msgstr "Editar caminhos recortados" #: ../src/widgets/node-toolbar.cpp:556 -#, fuzzy msgid "Show clipping path(s) of selected object(s)" -msgstr "Definir caminho recortado" +msgstr "Mostrar caminhos recortados dos objetos selecionados" #: ../src/widgets/node-toolbar.cpp:566 -#, fuzzy msgid "Edit masks" -msgstr "Definir máscara" +msgstr "Editar máscaras" #: ../src/widgets/node-toolbar.cpp:567 -#, fuzzy msgid "Show mask(s) of selected object(s)" -msgstr "Fazer com que os conectores evitem os objectos seleccionados" +msgstr "Mostrar máscaras dos objetos selecionados" #: ../src/widgets/node-toolbar.cpp:581 msgid "X coordinate:" @@ -31872,7 +30041,7 @@ msgstr "Coordenada X:" #: ../src/widgets/node-toolbar.cpp:581 msgid "X coordinate of selected node(s)" -msgstr "Coordenada X do nó(s) seleccionado(s)" +msgstr "Coordenada X dos nós selecionados" #: ../src/widgets/node-toolbar.cpp:599 msgid "Y coordinate:" @@ -31880,7 +30049,7 @@ msgstr "Coordenada Y:" #: ../src/widgets/node-toolbar.cpp:599 msgid "Y coordinate of selected node(s)" -msgstr "Coordenada X do nó(s) seleccionado(s)" +msgstr "Coordenada Y dos nós selecionados" #: ../src/widgets/paint-selector.cpp:219 msgid "No paint" @@ -31892,20 +30061,19 @@ msgstr "Cor lisa" #: ../src/widgets/paint-selector.cpp:223 msgid "Linear gradient" -msgstr "Degradê linear" +msgstr "Gradiente linear" #: ../src/widgets/paint-selector.cpp:225 msgid "Radial gradient" -msgstr "Degradê radial" +msgstr "Gradiente radial" #: ../src/widgets/paint-selector.cpp:228 -#, fuzzy msgid "Mesh gradient" -msgstr "Mover alça do degradê" +msgstr "Gradiente de malha" #: ../src/widgets/paint-selector.cpp:235 msgid "Unset paint (make it undefined so it can be inherited)" -msgstr "Pintura indefinida (deixe indefinido e ela poderá ser herdada)" +msgstr "Pintura indefinida (deixar indefinida para poder ser herdada)" #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty #: ../src/widgets/paint-selector.cpp:252 @@ -31913,110 +30081,102 @@ msgid "" "Any path self-intersections or subpaths create holes in the fill (fill-rule: " "evenodd)" msgstr "" -"Para cada auto intersecção de caminhos ou sub-caminhos, criar buracos no " -"preenchimanto (ench-régua: evenodd) " +"Qualquer auto-interseção de caminhos ou sub-caminhos cria buracos no " +"preenchimento (fill-rule: evenodd)" #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty #: ../src/widgets/paint-selector.cpp:263 msgid "" "Fill is solid unless a subpath is counterdirectional (fill-rule: nonzero)" msgstr "" -"O preenchimento será sólido a menos que um caminho secundário seja " -"direcionado ao contrário (fill-rule: nonzero)" +"O preenchimento é sólido a não ser que um sub-caminho tenha direção " +"contrária (fill-rule: nonzero)" #: ../src/widgets/paint-selector.cpp:605 -#, fuzzy msgid "No objects" -msgstr "Snapping to objects" +msgstr "Nenhum objeto" #: ../src/widgets/paint-selector.cpp:616 -#, fuzzy msgid "Multiple styles" -msgstr "Estilos múltiplos" +msgstr "Vários estilos" #: ../src/widgets/paint-selector.cpp:627 -#, fuzzy msgid "Paint is undefined" -msgstr "A pintura está indefinida" +msgstr "A pintura é indefinida" #: ../src/widgets/paint-selector.cpp:638 -#, fuzzy msgid "No paint" -msgstr "Opacidade" +msgstr "Sem pintura" #: ../src/widgets/paint-selector.cpp:722 -#, fuzzy msgid "Flat color" -msgstr "Cor lisa" +msgstr "Cor lisa" #. sp_gradient_selector_set_mode(SP_GRADIENT_SELECTOR(gsel), SP_GRADIENT_SELECTOR_MODE_LINEAR); #: ../src/widgets/paint-selector.cpp:791 -#, fuzzy msgid "Linear gradient" -msgstr "Degradê linear" +msgstr "Gradiente linear" #: ../src/widgets/paint-selector.cpp:794 -#, fuzzy msgid "Radial gradient" -msgstr "Degradê radial" +msgstr "Gradiente radial" #: ../src/widgets/paint-selector.cpp:799 -#, fuzzy msgid "Mesh gradient" -msgstr "Degradê linear" +msgstr "Gradiente de malha" #: ../src/widgets/paint-selector.cpp:1098 -#, fuzzy msgid "" "Use the Node tool to adjust position, scale, and rotation of the " "pattern on canvas. Use Object > Pattern > Objects to Pattern to " "create a new pattern from selection." msgstr "" -"Use Objecto > Padrão de preenchimento > Objecto para Padrão " -"para criar um novo padrão a partir da selecção." +"Selecionar a Ferramenta Nó e mover os controlos que aparecem no canto " +"superior esquerdo da página para ajustar a posição, escala, e rotação do " +"padrão na área de desenho. Usar Objeto > Padrão > Objetos para " +"Padrão para criar um novo padrão a partir da seleção." #: ../src/widgets/paint-selector.cpp:1111 -#, fuzzy msgid "Pattern fill" -msgstr "Padrão de preenchimento" +msgstr "Padrão do preenchimento" #: ../src/widgets/paint-selector.cpp:1205 -#, fuzzy msgid "Swatch fill" -msgstr "Desfazer preenchimento" +msgstr "Preenchimento de amostra de cor" #: ../src/widgets/paintbucket-toolbar.cpp:134 -#, fuzzy msgid "Fill by" -msgstr "Preencher por:" +msgstr "Preencher em" #: ../src/widgets/paintbucket-toolbar.cpp:135 msgid "Fill by:" -msgstr "Preencher por:" +msgstr "Preencher em:" #: ../src/widgets/paintbucket-toolbar.cpp:147 -#, fuzzy msgid "Fill Threshold" -msgstr "Limiar" +msgstr "Limiar do Preenchimento" #: ../src/widgets/paintbucket-toolbar.cpp:148 msgid "" "The maximum allowed difference between the clicked pixel and the neighboring " "pixels to be counted in the fill" msgstr "" +"A diferença máxima permitida entre o píxel clicado e os píxeis em redor a " +"ser considerado no preenchimento" #: ../src/widgets/paintbucket-toolbar.cpp:175 msgid "Grow/shrink by" -msgstr "Aumentar/Diminuir por" +msgstr "Aumentar/diminuir" #: ../src/widgets/paintbucket-toolbar.cpp:175 msgid "Grow/shrink by:" -msgstr "Aumentar/Diminuir por:" +msgstr "Aumentar/diminuir:" #: ../src/widgets/paintbucket-toolbar.cpp:176 msgid "" "The amount to grow (positive) or shrink (negative) the created fill path" msgstr "" +"O valor da área de preenchimento a aumentar (positivo) ou diminuir (negativo)" #: ../src/widgets/paintbucket-toolbar.cpp:199 msgid "Close gaps" @@ -32033,128 +30193,115 @@ msgid "Defaults" msgstr "Padrões" #: ../src/widgets/paintbucket-toolbar.cpp:212 -#, fuzzy msgid "" "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools " "to change defaults)" msgstr "" -"Reiniciar parâmetros da forma para padrões (use Configurações do Inkscape > " -"Ferramentas para alterar os padrões)" +"Repor parâmetros padrão do balde de tinta. Usar \"Preferências do Inkscape-" +">Ferramentas\" para alterar os valores padrão." #: ../src/widgets/pencil-toolbar.cpp:105 msgid "Bezier" -msgstr "" +msgstr "Bézier" #: ../src/widgets/pencil-toolbar.cpp:106 -#, fuzzy msgid "Create regular Bezier path" -msgstr "Criar novo caminho" +msgstr "Criar caminho Bézier regular" #: ../src/widgets/pencil-toolbar.cpp:113 -#, fuzzy msgid "Create Spiro path" -msgstr "Criar espirais" +msgstr "Criar caminho Espiral Clotóide" #: ../src/widgets/pencil-toolbar.cpp:119 -#, fuzzy msgid "Create BSpline path" -msgstr "Criar espirais" +msgstr "Criar caminho B-Spline" #: ../src/widgets/pencil-toolbar.cpp:125 msgid "Zigzag" -msgstr "" +msgstr "Ziguezague" #: ../src/widgets/pencil-toolbar.cpp:126 msgid "Create a sequence of straight line segments" -msgstr "" +msgstr "Criar uma sequência de linhas direitas" #: ../src/widgets/pencil-toolbar.cpp:132 -#, fuzzy msgid "Paraxial" -msgstr "parcial" +msgstr "Paraxial" #: ../src/widgets/pencil-toolbar.cpp:133 msgid "Create a sequence of paraxial line segments" -msgstr "" +msgstr "Criar uma sequência de segmentos de linha paraxiais" #: ../src/widgets/pencil-toolbar.cpp:141 msgid "Mode of new lines drawn by this tool" -msgstr "" +msgstr "Modo de linhas novas criadas por esta ferramenta" #: ../src/widgets/pencil-toolbar.cpp:176 -#, fuzzy msgctxt "Freehand shape" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../src/widgets/pencil-toolbar.cpp:177 -#, fuzzy msgid "Triangle in" -msgstr "Único" +msgstr "Triângulo para dentro" #: ../src/widgets/pencil-toolbar.cpp:178 -#, fuzzy msgid "Triangle out" -msgstr "Único" +msgstr "Triângulo para fora" #: ../src/widgets/pencil-toolbar.cpp:180 msgid "From clipboard" -msgstr "" +msgstr "Da área de transferência" #: ../src/widgets/pencil-toolbar.cpp:181 -#, fuzzy msgid "Bend from clipboard" -msgstr "Cortar a selecção para a área de transferência" +msgstr "Dobra da área de transferência" #: ../src/widgets/pencil-toolbar.cpp:182 -#, fuzzy msgid "Last applied" -msgstr "Colar tamanho" +msgstr "Último aplicado" #: ../src/widgets/pencil-toolbar.cpp:207 ../src/widgets/pencil-toolbar.cpp:208 -#, fuzzy msgid "Shape:" -msgstr "Formas" +msgstr "Forma:" #: ../src/widgets/pencil-toolbar.cpp:207 -#, fuzzy msgid "Shape of new paths drawn by this tool" -msgstr "Estilo de novos caminhos criados pelo Lápis" +msgstr "" +"Forma geométrica dos novos caminhos criados com esta ferramenta (através de " +"Efeito no Caminho)" #: ../src/widgets/pencil-toolbar.cpp:372 msgid "(many nodes, rough)" -msgstr "" +msgstr "(muitos nós, rugoso)" #: ../src/widgets/pencil-toolbar.cpp:372 -#, fuzzy msgid "(few nodes, smooth)" -msgstr "Suavizar nós seleccionados" +msgstr "(poucos nós, suave)" #: ../src/widgets/pencil-toolbar.cpp:375 -#, fuzzy msgid "Smoothing: " -msgstr "Suavizar" +msgstr "Suavizar: " #: ../src/widgets/pencil-toolbar.cpp:376 msgid "How much smoothing (simplifying) is applied to the line" -msgstr "" +msgstr "Quantidade de suavização (simplificando) aplicada na linha" #: ../src/widgets/pencil-toolbar.cpp:397 -#, fuzzy msgid "" "Reset pencil parameters to defaults (use Inkscape Preferences > Tools to " "change defaults)" msgstr "" -"Reiniciar parâmetros da forma para padrões (use Configurações do Inkscape > " -"Ferramentas para alterar os padrões)" +"Repor parâmetros do lápis (usar Preferências do Inkscape->Ferramentas para " +"alterar os valores padrão)" #: ../src/widgets/pencil-toolbar.cpp:407 ../src/widgets/pencil-toolbar.cpp:408 msgid "LPE based interactive simplify" -msgstr "" +msgstr "Efeitos Interativos em Caminhos baseados em simplificação interativa" #: ../src/widgets/pencil-toolbar.cpp:418 ../src/widgets/pencil-toolbar.cpp:419 msgid "LPE simplify flatten" -msgstr "" +msgstr "Aplanar simplificado de Efeitos Interativos em Caminhos" #: ../src/widgets/rect-toolbar.cpp:125 msgid "Change rectangle" @@ -32162,7 +30309,7 @@ msgstr "Alterar retângulo" #: ../src/widgets/rect-toolbar.cpp:317 msgid "W:" -msgstr "W:" +msgstr "L:" #: ../src/widgets/rect-toolbar.cpp:317 msgid "Width of rectangle" @@ -32170,7 +30317,7 @@ msgstr "Largura do retângulo" #: ../src/widgets/rect-toolbar.cpp:334 msgid "H:" -msgstr "H:" +msgstr "A:" #: ../src/widgets/rect-toolbar.cpp:334 msgid "Height of rectangle" @@ -32178,11 +30325,11 @@ msgstr "Altura do retângulo" #: ../src/widgets/rect-toolbar.cpp:348 ../src/widgets/rect-toolbar.cpp:363 msgid "not rounded" -msgstr "Não redondo" +msgstr "não redondo" #: ../src/widgets/rect-toolbar.cpp:351 msgid "Horizontal radius" -msgstr " Horizontal" +msgstr "Raio horizontal" #: ../src/widgets/rect-toolbar.cpp:351 msgid "Rx:" @@ -32190,12 +30337,11 @@ msgstr "Rx:" #: ../src/widgets/rect-toolbar.cpp:351 msgid "Horizontal radius of rounded corners" -msgstr "Raio horizontal de cantos arredondados" +msgstr "Raio horizontal dos cantos arredondados" #: ../src/widgets/rect-toolbar.cpp:366 -#, fuzzy msgid "Vertical radius" -msgstr "Espaçamento Vertical" +msgstr "Raio vertical" #: ../src/widgets/rect-toolbar.cpp:366 msgid "Ry:" @@ -32203,7 +30349,7 @@ msgstr "Ry:" #: ../src/widgets/rect-toolbar.cpp:366 msgid "Vertical radius of rounded corners" -msgstr "Raio vertical de cantos arredondados" +msgstr "Raio vertical dos cantos arredondados" #: ../src/widgets/rect-toolbar.cpp:385 msgid "Not rounded" @@ -32214,46 +30360,40 @@ msgid "Make corners sharp" msgstr "Tornar cantos agudos" #: ../src/widgets/ruler.cpp:202 -#, fuzzy msgid "The orientation of the ruler" -msgstr "Orientação da página:" +msgstr "Orientação da régua" #: ../src/widgets/ruler.cpp:212 -#, fuzzy msgid "Unit of the ruler" -msgstr "Largura do padrão" +msgstr "Unidades da régua" #: ../src/widgets/ruler.cpp:219 msgid "Lower" -msgstr "Abai_xar" +msgstr "Inferior" #: ../src/widgets/ruler.cpp:220 -#, fuzzy msgid "Lower limit of ruler" -msgstr "Mover para a camada anterior" +msgstr "Limite inferior da régua" #: ../src/widgets/ruler.cpp:229 -#, fuzzy msgid "Upper" -msgstr "Borrão" +msgstr "Superior" #: ../src/widgets/ruler.cpp:230 msgid "Upper limit of ruler" -msgstr "" +msgstr "Limite superior da régua" #: ../src/widgets/ruler.cpp:240 -#, fuzzy msgid "Position of mark on the ruler" -msgstr "Rotação (graus)" +msgstr "Posição da marca na régua" #: ../src/widgets/ruler.cpp:249 -#, fuzzy msgid "Max Size" -msgstr "Tamanho" +msgstr "Tamanho Máximo" #: ../src/widgets/ruler.cpp:250 msgid "Maximum size of the ruler" -msgstr "" +msgstr "Tamanho máximo da régua" #: ../src/widgets/select-toolbar.cpp:262 msgid "Transform by toolbar" @@ -32262,22 +30402,22 @@ msgstr "Transformar através da barra de ferramentas" #: ../src/widgets/select-toolbar.cpp:280 msgid "Now stroke width is scaled when objects are scaled." msgstr "" -"Agora a largura do traço é redimensionada de acordo com os " -"objectos." +"Agora a espessura do traço é redimensionada quando os objetos " +"são redimensionados." #: ../src/widgets/select-toolbar.cpp:282 msgid "Now stroke width is not scaled when objects are scaled." msgstr "" -"Agora a largura do traço não é redimensionada de acordo com os " -"objectos." +"Agora a espessura do traço não é redimensionada quando os " +"objetos são redimensionados." #: ../src/widgets/select-toolbar.cpp:293 msgid "" "Now rounded rectangle corners are scaled when rectangles are " "scaled." msgstr "" -"Agora os cantos arredondados dos retângulos são redimensionada " -"de acordo com os retângulos." +"Agora os cantos arredondados dos retângulos são redimensionados retângulos são redimensionados." #: ../src/widgets/select-toolbar.cpp:295 msgid "" @@ -32285,147 +30425,131 @@ msgid "" "are scaled." msgstr "" "Agora os cantos arredondados dos retângulos não são " -"redimensionados de acordo com os retângulos." +"redimensionados retângulos são redimensionados." #: ../src/widgets/select-toolbar.cpp:306 msgid "" "Now gradients are transformed along with their objects when " "those are transformed (moved, scaled, rotated, or skewed)." msgstr "" -"Agora os degradês são transformados de acordo com as " -"transformações nos objectos (mover, redimensionar, girar ou inclinar)." +"Agora os gradientes são transformados com os objetos quando os " +"objetos forem transformados (mover, redimensionar, rodar ou inclinar)." #: ../src/widgets/select-toolbar.cpp:308 msgid "" "Now gradients remain fixed when objects are transformed " "(moved, scaled, rotated, or skewed)." msgstr "" -"Agora os degradês permanecem fixos com as transformações nos " -"objectos (mover, redimensionar, girar ou inclinar)." +"Agora os gradientes permanecem fixos quando os objetos forem " +"transformados (mover, redimensionar, rodar ou inclinar)." #: ../src/widgets/select-toolbar.cpp:319 msgid "" "Now patterns are transformed along with their objects when " "those are transformed (moved, scaled, rotated, or skewed)." msgstr "" -"Agora os padrões são transformados de acordo com as " -"transformações nos objectos (mover, redimensionar, girar ou inclinar)." +"Agora os padrões são transformados com os objetos quando os " +"objetos forem transformados (mover, redimensionar, rodar ou inclinar)." #: ../src/widgets/select-toolbar.cpp:321 msgid "" "Now patterns remain fixed when objects are transformed (moved, " "scaled, rotated, or skewed)." msgstr "" -"Agora os padrões permanecem fixos com as transformações nos " -"objectos (mover, redimensionar, girar ou inclinar)." +"Agora os padrões permanecem fixos quando os objetos são " +"transformados (mover, redimensionar, rodar ou inclinar)." #. name #: ../src/widgets/select-toolbar.cpp:441 -#, fuzzy msgctxt "Select toolbar" msgid "X position" -msgstr "Posição:" +msgstr "Posição X" #. label #: ../src/widgets/select-toolbar.cpp:442 -#, fuzzy msgctxt "Select toolbar" msgid "X:" msgstr "X:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:443 -#, fuzzy msgctxt "Select toolbar" msgid "Horizontal coordinate of selection" -msgstr "Coordenada horizontal da selecção" +msgstr "Coordenada horizontal da seleção" #. name #: ../src/widgets/select-toolbar.cpp:460 -#, fuzzy msgctxt "Select toolbar" msgid "Y position" -msgstr "Posição:" +msgstr "Posição Y" #. label #: ../src/widgets/select-toolbar.cpp:461 -#, fuzzy msgctxt "Select toolbar" msgid "Y:" msgstr "Y:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:462 -#, fuzzy msgctxt "Select toolbar" msgid "Vertical coordinate of selection" -msgstr "Coordenada vertical da selecção" +msgstr "Coordenada vertical da seleção" #. name #: ../src/widgets/select-toolbar.cpp:479 -#, fuzzy msgctxt "Select toolbar" msgid "Width" msgstr "Largura" #. label #: ../src/widgets/select-toolbar.cpp:480 -#, fuzzy msgctxt "Select toolbar" msgid "W:" -msgstr "W:" +msgstr "L:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:481 -#, fuzzy msgctxt "Select toolbar" msgid "Width of selection" -msgstr "Largura da selecção" +msgstr "Largura da seleção" #: ../src/widgets/select-toolbar.cpp:499 -#, fuzzy msgid "Lock width and height" -msgstr "Largura, altura: " +msgstr "Bloquear largura e altura" #: ../src/widgets/select-toolbar.cpp:500 msgid "When locked, change both width and height by the same proportion" -msgstr "Alterar largura e altura pela mesma proporção" +msgstr "Quando bloqueado, alterar largura e altura pela mesma proporção" #. name #: ../src/widgets/select-toolbar.cpp:511 -#, fuzzy msgctxt "Select toolbar" msgid "Height" -msgstr "Altura:" +msgstr "Altura" #. label #: ../src/widgets/select-toolbar.cpp:512 -#, fuzzy msgctxt "Select toolbar" msgid "H:" -msgstr "H:" +msgstr "A:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:513 -#, fuzzy msgctxt "Select toolbar" msgid "Height of selection" -msgstr "Altura da selecção" +msgstr "Altura da seleção" #: ../src/widgets/select-toolbar.cpp:575 -#, fuzzy msgid "Scale rounded corners" -msgstr "Ampliar canto arredondados em retângulos" +msgstr "Redimensionar cantos arredondados" #: ../src/widgets/select-toolbar.cpp:586 -#, fuzzy msgid "Move gradients" -msgstr "Mover alça do degradê" +msgstr "Mover gradientes" #: ../src/widgets/select-toolbar.cpp:597 -#, fuzzy msgid "Move patterns" -msgstr "Padrões" +msgstr "Mover padrões" #: ../src/widgets/sp-attribute-widget.cpp:299 msgid "Set attribute" @@ -32457,11 +30581,11 @@ msgstr "uma revolução completa" #: ../src/widgets/spiral-toolbar.cpp:245 msgid "Number of turns" -msgstr "Número de curvas" +msgstr "Número de voltas" #: ../src/widgets/spiral-toolbar.cpp:245 msgid "Turns:" -msgstr "Rotação:" +msgstr "Voltas:" #: ../src/widgets/spiral-toolbar.cpp:245 msgid "Number of revolutions" @@ -32473,15 +30597,15 @@ msgstr "círculo" #: ../src/widgets/spiral-toolbar.cpp:256 msgid "edge is much denser" -msgstr "limite é muito mais denso" +msgstr "borda é muito mais densa" #: ../src/widgets/spiral-toolbar.cpp:256 msgid "edge is denser" -msgstr "limite é mais denso" +msgstr "borda é mais densa" #: ../src/widgets/spiral-toolbar.cpp:256 msgid "even" -msgstr "mesmo" +msgstr "igual" #: ../src/widgets/spiral-toolbar.cpp:256 msgid "center is denser" @@ -32501,7 +30625,7 @@ msgstr "Divergência:" #: ../src/widgets/spiral-toolbar.cpp:259 msgid "How much denser/sparser are outer revolutions; 1 = uniform" -msgstr "Quão densas/esparsas são revoluções externas; 1 = uniforme" +msgstr "Quão densas/esparsas são as revoluções externas; 1 = uniforme" #: ../src/widgets/spiral-toolbar.cpp:270 msgid "starts from center" @@ -32513,12 +30637,11 @@ msgstr "começa no meio do caminho" #: ../src/widgets/spiral-toolbar.cpp:270 msgid "starts near edge" -msgstr "começa perto do limite" +msgstr "começa perto da borda" #: ../src/widgets/spiral-toolbar.cpp:273 -#, fuzzy msgid "Inner radius" -msgstr "Raio interno:" +msgstr "Raio interno" #: ../src/widgets/spiral-toolbar.cpp:273 msgid "Inner radius:" @@ -32533,105 +30656,90 @@ msgid "" "Reset shape parameters to defaults (use Inkscape Preferences > Tools to " "change defaults)" msgstr "" -"Reiniciar parâmetros da forma para padrões (use Configurações do Inkscape > " -"Ferramentas para alterar os padrões)" +"Repor parâmetros padrão da forma (usar Configurações do Inkscape > " +"Ferramentas para alterar o padrão)" #. Width #: ../src/widgets/spray-toolbar.cpp:294 -#, fuzzy msgid "(narrow spray)" -msgstr "Abai_xar" +msgstr "(pulverizar estreito)" #: ../src/widgets/spray-toolbar.cpp:294 -#, fuzzy msgid "(broad spray)" -msgstr " (traço)" +msgstr "(pulverizar largo)" #: ../src/widgets/spray-toolbar.cpp:297 -#, fuzzy msgid "The width of the spray area (relative to the visible canvas area)" -msgstr "A largura da caneta caligráfica (em relação a área visível da página)" +msgstr "A largura da área pulverizada (em relação à área visível da página)" #: ../src/widgets/spray-toolbar.cpp:312 -#, fuzzy msgid "Use the pressure of the input device to alter the width of spray area" msgstr "" -"Usar a pressão do dispositivo de entrada para alterar a largura da caneta" +"Usar a pressão do dispositivo de entrada para alterar a largura da área " +"pulverizada" #: ../src/widgets/spray-toolbar.cpp:323 -#, fuzzy msgid "(maximum mean)" -msgstr "(inércia máxima)" +msgstr "(significado máximo)" #: ../src/widgets/spray-toolbar.cpp:326 -#, fuzzy msgid "Focus" -msgstr "agudo" +msgstr "Foco" #: ../src/widgets/spray-toolbar.cpp:326 -#, fuzzy msgid "Focus:" -msgstr "Força:" +msgstr "Foco:" #: ../src/widgets/spray-toolbar.cpp:326 msgid "0 to spray a spot; increase to enlarge the ring radius" -msgstr "" +msgstr "0 para pulverizar um ponto; aumentar para usar um diâmetro maior" #. Standard_deviation #: ../src/widgets/spray-toolbar.cpp:339 -#, fuzzy msgid "(minimum scatter)" -msgstr "(força mínima)" +msgstr "(dispersão mínima)" #: ../src/widgets/spray-toolbar.cpp:339 -#, fuzzy msgid "(maximum scatter)" -msgstr "(tremor máximo)" +msgstr "(dispersão máxima)" #: ../src/widgets/spray-toolbar.cpp:342 -#, fuzzy msgctxt "Spray tool" msgid "Scatter" -msgstr "Padrão" +msgstr "Dispersar" #: ../src/widgets/spray-toolbar.cpp:342 -#, fuzzy msgctxt "Spray tool" msgid "Scatter:" -msgstr "Padrão" +msgstr "Dispersar:" #: ../src/widgets/spray-toolbar.cpp:342 msgid "Increase to scatter sprayed objects" -msgstr "" +msgstr "Aumentar para espalhar os objetos pulverizados" #: ../src/widgets/spray-toolbar.cpp:361 -#, fuzzy msgid "Spray copies of the initial selection" -msgstr "Aplicar efeito escolhido à selecção" +msgstr "Pulverizar cópias da seleção inicial" #: ../src/widgets/spray-toolbar.cpp:368 -#, fuzzy msgid "Spray clones of the initial selection" -msgstr "Criar e ladrilhar os clones da selecção" +msgstr "Pulverizar clones da seleção inicial" #: ../src/widgets/spray-toolbar.cpp:375 -#, fuzzy msgid "Spray single path" -msgstr "Soltar caminho recortado" +msgstr "Pulverizar num caminho" #: ../src/widgets/spray-toolbar.cpp:376 msgid "Spray objects in a single path" -msgstr "" +msgstr "Pulverizar os objetos num caminho" #: ../src/widgets/spray-toolbar.cpp:383 -#, fuzzy msgid "Delete sprayed items" -msgstr "Eliminar parada do degradê" +msgstr "Eliminar itens pulverizados" #: ../src/widgets/spray-toolbar.cpp:384 -#, fuzzy msgid "Delete sprayed items from selection" -msgstr "Remover máscara da selecção" +msgstr "Eliminar itens pulverizados da seleção" #: ../src/widgets/spray-toolbar.cpp:388 ../src/widgets/tweak-toolbar.cpp:253 msgid "Mode" @@ -32640,42 +30748,38 @@ msgstr "Modo" #. Population #: ../src/widgets/spray-toolbar.cpp:408 msgid "(low population)" -msgstr "" +msgstr "(poucos)" #: ../src/widgets/spray-toolbar.cpp:408 -#, fuzzy msgid "(high population)" -msgstr "Destino da impressão" +msgstr "(muitos)" #: ../src/widgets/spray-toolbar.cpp:411 msgid "Amount" -msgstr "Quantidade" +msgstr "Número" #: ../src/widgets/spray-toolbar.cpp:412 msgid "Adjusts the number of items sprayed per click" -msgstr "" +msgstr "Ajustar a quantidade de itens pulverizados por cada clique" #: ../src/widgets/spray-toolbar.cpp:428 -#, fuzzy msgid "" "Use the pressure of the input device to alter the amount of sprayed objects" msgstr "" -"Usar a pressão do dispositivo de entrada para alterar a largura da caneta" +"Usar a pressão do dispositivo de entrada para alterar a quantidade de " +"objetos pulverizados" #: ../src/widgets/spray-toolbar.cpp:438 -#, fuzzy msgid "(high rotation variation)" -msgstr "Destino da impressão" +msgstr "(variação de rotação alta)" #: ../src/widgets/spray-toolbar.cpp:441 -#, fuzzy msgid "Rotation" -msgstr "_Rotação" +msgstr "Rotação" #: ../src/widgets/spray-toolbar.cpp:441 -#, fuzzy msgid "Rotation:" -msgstr "_Rotação" +msgstr "Rotação:" #: ../src/widgets/spray-toolbar.cpp:443 #, no-c-format @@ -32683,23 +30787,22 @@ msgid "" "Variation of the rotation of the sprayed objects; 0% for the same rotation " "than the original object" msgstr "" +"Variação da rotação dos objetos pulverizados; 0% para usar a mesma rotação " +"do objeto original" #: ../src/widgets/spray-toolbar.cpp:456 -#, fuzzy msgid "(high scale variation)" -msgstr "Destino da impressão" +msgstr "(variação da escala alta)" #: ../src/widgets/spray-toolbar.cpp:459 -#, fuzzy msgctxt "Spray tool" msgid "Scale" -msgstr "Ampliar" +msgstr "Escala" #: ../src/widgets/spray-toolbar.cpp:459 -#, fuzzy msgctxt "Spray tool" msgid "Scale:" -msgstr "Ampliar" +msgstr "Escala:" #: ../src/widgets/spray-toolbar.cpp:461 #, no-c-format @@ -32707,86 +30810,83 @@ msgid "" "Variation in the scale of the sprayed objects; 0% for the same scale than " "the original object" msgstr "" +"Variação na escala dos objetos pulverizados. Usar 0% para a mesma escala do " +"objeto original" #: ../src/widgets/spray-toolbar.cpp:477 -#, fuzzy msgid "Use the pressure of the input device to alter the scale of new items" msgstr "" -"Usar a pressão do dispositivo de entrada para alterar a largura da caneta" +"Usar a pressão do dispositivo de entrada para alterar a escala dos itens " +"novos" #: ../src/widgets/spray-toolbar.cpp:489 ../src/widgets/spray-toolbar.cpp:490 msgid "" "Pick color from the drawing. You can use clonetiler trace dialog for " "advanced effects. In clone mode original fill or stroke colors must be unset." msgstr "" +"Capturar cor do desenho. Pode-se usar a janela de clonar ladrilho do traço " +"para efeitos avançados. No modo clone, o preenchimento original e as cores " +"de traço não devem estar definidos." #: ../src/widgets/spray-toolbar.cpp:502 ../src/widgets/spray-toolbar.cpp:503 msgid "Pick from center instead average area." -msgstr "" +msgstr "Capturar do centro em vez da média da área." #: ../src/widgets/spray-toolbar.cpp:515 ../src/widgets/spray-toolbar.cpp:516 msgid "Inverted pick value, retaining color in advanced trace mode" -msgstr "" +msgstr "Valor capturado invertido, retendo a cor no modo de vetorizar avançado" #: ../src/widgets/spray-toolbar.cpp:528 ../src/widgets/spray-toolbar.cpp:529 -#, fuzzy msgid "Apply picked color to fill" -msgstr "Aplicar a última cor para preenchimento da selecção" +msgstr "Aplicar cor capturada ao preenchimento" #: ../src/widgets/spray-toolbar.cpp:541 ../src/widgets/spray-toolbar.cpp:542 -#, fuzzy msgid "Apply picked color to stroke" -msgstr "Aplicar a última cor para traço da selecção" +msgstr "Aplicar cor capturada ao traço" #: ../src/widgets/spray-toolbar.cpp:554 ../src/widgets/spray-toolbar.cpp:555 msgid "No overlap between colors" -msgstr "" +msgstr "Não sobrepor entre cores" #: ../src/widgets/spray-toolbar.cpp:567 ../src/widgets/spray-toolbar.cpp:568 msgid "Apply over transparent areas" -msgstr "" +msgstr "Aplicar sobre áreas transparentes" #: ../src/widgets/spray-toolbar.cpp:580 ../src/widgets/spray-toolbar.cpp:581 msgid "Apply over no transparent areas" -msgstr "" +msgstr "Aplicar sobre áreas não transparentes" #: ../src/widgets/spray-toolbar.cpp:593 ../src/widgets/spray-toolbar.cpp:594 -#, fuzzy msgid "Prevent overlapping objects" -msgstr "Duplicar os objectos seleccionados" +msgstr "Impedir sobreposição dos objetos" #: ../src/widgets/spray-toolbar.cpp:605 -#, fuzzy msgid "(minimum offset)" -msgstr "(força mínima)" +msgstr "(deslocamento mínimo)" #: ../src/widgets/spray-toolbar.cpp:605 -#, fuzzy msgid "(maximum offset)" -msgstr "(força máxima)" +msgstr "(deslocamento máximo)" #: ../src/widgets/spray-toolbar.cpp:608 -#, fuzzy msgid "Offset %" -msgstr "Deslocamentos" +msgstr "Deslocamento %" #: ../src/widgets/spray-toolbar.cpp:608 -#, fuzzy msgid "Offset %:" -msgstr "Offset:" +msgstr "Deslocamento %:" #: ../src/widgets/spray-toolbar.cpp:609 msgid "Increase to segregate objects more (value in percent)" -msgstr "" +msgstr "Aumentar para separar mais os objetos (valor em percentagem)" #: ../src/widgets/star-toolbar.cpp:103 msgid "Star: Change number of corners" -msgstr "Alterar número de cantos" +msgstr "Estrela ou polígono: alterar número de cantos" #: ../src/widgets/star-toolbar.cpp:156 -#, fuzzy msgid "Star: Change spoke ratio" -msgstr "Alterar proporção do raio" +msgstr "Estrela: alterar proporção do raio" #: ../src/widgets/star-toolbar.cpp:201 msgid "Make polygon" @@ -32798,40 +30898,39 @@ msgstr "Criar estrela" #: ../src/widgets/star-toolbar.cpp:240 msgid "Star: Change rounding" -msgstr "Alterar arredondamento" +msgstr "Estrela ou polígono: alterar arredondamento" #: ../src/widgets/star-toolbar.cpp:280 msgid "Star: Change randomization" -msgstr "Alterar aleatoriedade" +msgstr "Estrela ou polígono: alterar aleatoriedade" #: ../src/widgets/star-toolbar.cpp:463 msgid "Regular polygon (with one handle) instead of a star" -msgstr "Polígono regular (com uma alça) ao invés de uma estrela" +msgstr "Polígono regular (com 1 alça) em vez de uma estrela" #: ../src/widgets/star-toolbar.cpp:470 -#, fuzzy msgid "Star instead of a regular polygon (with one handle)" -msgstr "Polígono regular (com uma alça) ao invés de uma estrela" +msgstr "Estrela em vez de um polígono regular (com 1 alça)" #: ../src/widgets/star-toolbar.cpp:491 msgid "triangle/tri-star" -msgstr "triângulo/tri-estrela" +msgstr "triângulo/estrela de 3 pontas" #: ../src/widgets/star-toolbar.cpp:491 msgid "square/quad-star" -msgstr "quadrado/quad-estrela" +msgstr "quadrado/estrela de 4 pontas" #: ../src/widgets/star-toolbar.cpp:491 msgid "pentagon/five-pointed star" -msgstr "pentágono/estrela de cinco pontas" +msgstr "pentágono/estrela de 5 pontas" #: ../src/widgets/star-toolbar.cpp:491 msgid "hexagon/six-pointed star" -msgstr "hexágono/estrela de seis pontas" +msgstr "hexágono/estrela de 6 pontas" #: ../src/widgets/star-toolbar.cpp:494 msgid "Corners" -msgstr "Esquinas" +msgstr "Cantos" #: ../src/widgets/star-toolbar.cpp:494 msgid "Corners:" @@ -32839,11 +30938,11 @@ msgstr "Cantos:" #: ../src/widgets/star-toolbar.cpp:494 msgid "Number of corners of a polygon or star" -msgstr "Número de cantos de um polígono ou estrela" +msgstr "Número de cantos do polígono ou estrela" #: ../src/widgets/star-toolbar.cpp:507 msgid "thin-ray star" -msgstr "estrela raio-fino" +msgstr "estrela de raio fino" #: ../src/widgets/star-toolbar.cpp:507 msgid "pentagram" @@ -32866,9 +30965,8 @@ msgid "regular polygon" msgstr "polígono regular" #: ../src/widgets/star-toolbar.cpp:510 -#, fuzzy msgid "Spoke ratio" -msgstr "Proporção do raio:" +msgstr "Proporção do raio" #: ../src/widgets/star-toolbar.cpp:510 msgid "Spoke ratio:" @@ -32878,7 +30976,7 @@ msgstr "Proporção do raio:" #. Base radius is the same for the closest handle. #: ../src/widgets/star-toolbar.cpp:513 msgid "Base radius to tip radius ratio" -msgstr "Proporção do raio base para o raio externo" +msgstr "Proporção entre o raio interno e o raio externo" #: ../src/widgets/star-toolbar.cpp:531 msgid "stretched" @@ -32890,31 +30988,32 @@ msgstr "torcido" #: ../src/widgets/star-toolbar.cpp:531 msgid "slightly pinched" -msgstr "" +msgstr "ligeiramente comprimido" #: ../src/widgets/star-toolbar.cpp:531 msgid "NOT rounded" -msgstr "Não redondo" +msgstr "NÃO redondo" #: ../src/widgets/star-toolbar.cpp:531 msgid "slightly rounded" -msgstr "Levemente redondo" +msgstr "levemente redondo" #: ../src/widgets/star-toolbar.cpp:531 msgid "visibly rounded" -msgstr "Visivelmente redondo" +msgstr "visivelmente redondo" #: ../src/widgets/star-toolbar.cpp:531 msgid "well rounded" -msgstr "bem arredondado" +msgstr "bem redondo" #: ../src/widgets/star-toolbar.cpp:531 msgid "amply rounded" msgstr "amplamente redondo" +# optou-se por "muito" porque esta mensagem é utilizada em 2 contextos diferentes: "muito arredondado" e "muito aleatório" #: ../src/widgets/star-toolbar.cpp:531 ../src/widgets/star-toolbar.cpp:546 msgid "blown up" -msgstr "explodido" +msgstr "muito" #: ../src/widgets/star-toolbar.cpp:534 msgid "Rounded:" @@ -32922,23 +31021,24 @@ msgstr "Arredondado:" #: ../src/widgets/star-toolbar.cpp:534 msgid "How much rounded are the corners (0 for sharp)" -msgstr "Quão redondos são os cantos (0 para agudo)" +msgstr "Quão redondos são os cantos (0 para não arredondado)" #: ../src/widgets/star-toolbar.cpp:546 msgid "NOT randomized" -msgstr "NÃO randômico" +msgstr "NÃO aleatório" +# usar "aleatório" e não "irregular" para manter coerência com as outras #: ../src/widgets/star-toolbar.cpp:546 msgid "slightly irregular" -msgstr "levemente irregular" +msgstr "levemente aleatório" #: ../src/widgets/star-toolbar.cpp:546 msgid "visibly randomized" -msgstr "visivelmente randômico" +msgstr "visivelmente aleatório" #: ../src/widgets/star-toolbar.cpp:546 msgid "strongly randomized" -msgstr "fortemente randômico" +msgstr "muito aleatório" #: ../src/widgets/star-toolbar.cpp:549 msgid "Randomized" @@ -32950,71 +31050,74 @@ msgstr "Aleatório:" #: ../src/widgets/star-toolbar.cpp:549 msgid "Scatter randomly the corners and angles" -msgstr "Difunde aleatoriamente os cantos e ângulos" +msgstr "Dispersar aleatoriamente os cantos e ângulos" #: ../src/widgets/stroke-marker-selector.cpp:388 -#, fuzzy msgctxt "Marker" msgid "None" msgstr "Nenhum" #: ../src/widgets/stroke-style.cpp:192 msgid "Stroke width" -msgstr "Largura do traço" +msgstr "Espessura do traço" #: ../src/widgets/stroke-style.cpp:194 -#, fuzzy msgctxt "Stroke width" msgid "_Width:" -msgstr "_Largura:" +msgstr "_Espessura:" #. Dash #: ../src/widgets/stroke-style.cpp:225 msgid "Dashes:" -msgstr "Traços:" +msgstr "Tracejado:" #. Drop down marker selectors #. TRANSLATORS: Path markers are an SVG feature that allows you to attach arbitrary shapes #. (arrowheads, bullets, faces, whatever) to the start, end, or middle nodes of a path. #: ../src/widgets/stroke-style.cpp:251 -#, fuzzy msgid "Markers:" -msgstr "Mais escuro" +msgstr "Marcadores:" #: ../src/widgets/stroke-style.cpp:257 msgid "Start Markers are drawn on the first node of a path or shape" msgstr "" +"Marcadores Iniciais são desenhados no primeiro nó de um caminho ou forma " +"geométrica" #: ../src/widgets/stroke-style.cpp:266 msgid "" "Mid Markers are drawn on every node of a path or shape except the first and " "last nodes" msgstr "" +"Marcadores do Meio são desenhados em todos os nós de um caminho ou forma " +"geométrica exceto o primeiro e último nós" #: ../src/widgets/stroke-style.cpp:275 msgid "End Markers are drawn on the last node of a path or shape" msgstr "" +"Marcadores Finais são desenhados no último nó de um caminho ou forma " +"geométrica" #. TRANSLATORS: Round join: joining lines with a rounded corner. #. For an example, draw a triangle with a large stroke width and modify the #. "Join" option (in the Fill and Stroke dialog). #: ../src/widgets/stroke-style.cpp:300 msgid "Round join" -msgstr "Junção redonda" +msgstr "Esquina redonda" #. TRANSLATORS: Bevel join: joining lines with a blunted (flattened) corner. #. For an example, draw a triangle with a large stroke width and modify the #. "Join" option (in the Fill and Stroke dialog). #: ../src/widgets/stroke-style.cpp:308 msgid "Bevel join" -msgstr "Junção de vinco" +msgstr "Esquina vincada" #. TRANSLATORS: Miter join: joining lines with a sharp (pointed) corner. #. For an example, draw a triangle with a large stroke width and modify the #. "Join" option (in the Fill and Stroke dialog). #: ../src/widgets/stroke-style.cpp:316 msgid "Miter join" -msgstr "Junção aguda" +msgstr "Esquina aguda" #. Cap type #. TRANSLATORS: cap type specifies the shape for the ends of lines @@ -33042,33 +31145,28 @@ msgid "Square cap" msgstr "Ponta quadrada" #: ../src/widgets/stroke-style.cpp:392 -#, fuzzy msgid "Fill, Stroke, Markers" -msgstr "Estilo de traço" +msgstr "Preenchimento, Traço, Marcadores" #: ../src/widgets/stroke-style.cpp:396 -#, fuzzy msgid "Stroke, Fill, Markers" -msgstr "Estilo de traço" +msgstr "Traço, Preenchimento, Marcadores" #: ../src/widgets/stroke-style.cpp:400 -#, fuzzy msgid "Fill, Markers, Stroke" -msgstr "_Preenchimento e Traço" +msgstr "Preenchimento, Marcadores, Traço" #: ../src/widgets/stroke-style.cpp:408 -#, fuzzy msgid "Markers, Fill, Stroke" -msgstr "_Preenchimento e Traço" +msgstr "Marcadores, Preenchimento, Traço" #: ../src/widgets/stroke-style.cpp:412 -#, fuzzy msgid "Stroke, Markers, Fill" -msgstr "Estilo de traço" +msgstr "Traço, Marcadores, Preenchimento" #: ../src/widgets/stroke-style.cpp:416 msgid "Markers, Stroke, Fill" -msgstr "" +msgstr "Marcadores, Traço, Preenchimento" #: ../src/widgets/stroke-style.cpp:534 msgid "Set markers" @@ -33076,132 +31174,121 @@ msgstr "Definir marcadores" #: ../src/widgets/stroke-style.cpp:1116 ../src/widgets/stroke-style.cpp:1205 msgid "Set stroke style" -msgstr "Definir estilo de traço" +msgstr "Definir estilo do traço" #: ../src/widgets/stroke-style.cpp:1309 -#, fuzzy msgid "Set marker color" -msgstr "Definir cor do traço" +msgstr "Definir cor do marcador" #: ../src/widgets/swatch-selector.cpp:89 -#, fuzzy msgid "Change swatch color" -msgstr "Alterar cor da parada do degradê" +msgstr "Alterar cor da amostra de cor" #: ../src/widgets/text-toolbar.cpp:179 msgid "Text: Change font family" -msgstr "Alterar fonte" +msgstr "Texto: alterar fonte" #: ../src/widgets/text-toolbar.cpp:245 msgid "Text: Change font size" -msgstr "Texto: Alterar o tamanho da fonte" +msgstr "Texto: alterar o tamanho da fonte" #: ../src/widgets/text-toolbar.cpp:281 msgid "Text: Change font style" -msgstr "Texto: Alterar estilo da fonte" +msgstr "Texto: alterar estilo da fonte" #: ../src/widgets/text-toolbar.cpp:359 msgid "Text: Change superscript or subscript" -msgstr "" +msgstr "Texto: alterar sobrescrito ou subscrito" #: ../src/widgets/text-toolbar.cpp:502 msgid "Text: Change alignment" -msgstr "Texto: Alterar alinhamento" +msgstr "Texto: alterar alinhamento" #: ../src/widgets/text-toolbar.cpp:573 -#, fuzzy msgid "Text: Change line-height" -msgstr "Texto: Alterar alinhamento" +msgstr "Texto: alterar altura da linha" #: ../src/widgets/text-toolbar.cpp:728 -#, fuzzy msgid "Text: Change line-height unit" -msgstr "Texto: Alterar alinhamento" +msgstr "Texto: alterar unidade da altura da linha" #: ../src/widgets/text-toolbar.cpp:777 -#, fuzzy msgid "Text: Change word-spacing" -msgstr "Texto: Alterar orientação" +msgstr "Texto: alterar espaço entre palavras" #: ../src/widgets/text-toolbar.cpp:817 -#, fuzzy msgid "Text: Change letter-spacing" -msgstr "Aumentar espaçamento entre letras" +msgstr "Texto: alterar espaço entre letras" #: ../src/widgets/text-toolbar.cpp:855 -#, fuzzy msgid "Text: Change dx (kern)" -msgstr "Texto: Alterar o tamanho da fonte" +msgstr "Texto: alterar dX (entre-letras)" #: ../src/widgets/text-toolbar.cpp:889 -#, fuzzy msgid "Text: Change dy" -msgstr "Texto: Alterar estilo da fonte" +msgstr "Texto: alterar dY" #: ../src/widgets/text-toolbar.cpp:924 -#, fuzzy msgid "Text: Change rotate" -msgstr "Texto: Alterar estilo da fonte" +msgstr "Texto: alterar rotação" #: ../src/widgets/text-toolbar.cpp:977 -#, fuzzy msgid "Text: Change writing mode" -msgstr "Texto: Alterar orientação" +msgstr "Texto: alterar modo de escrita" #: ../src/widgets/text-toolbar.cpp:1031 msgid "Text: Change orientation" -msgstr "Texto: Alterar orientação" +msgstr "Texto: alterar orientação" #: ../src/widgets/text-toolbar.cpp:1539 -#, fuzzy msgid "Font Family" -msgstr "Família da fonte" +msgstr "Família da Fonte" #: ../src/widgets/text-toolbar.cpp:1540 -#, fuzzy msgid "Select Font Family (Alt-X to access)" -msgstr "Família da fonte" +msgstr "Selecionar Família da Fonte (Alt-X para aceder)" #. Focus widget #. Enable entry completion #: ../src/widgets/text-toolbar.cpp:1550 msgid "Select all text with this font-family" -msgstr "" +msgstr "Selecionar todo o texto com esta família de fonte" #: ../src/widgets/text-toolbar.cpp:1554 msgid "Font not found on system" -msgstr "" +msgstr "Fonte não encontrada no sistema" #: ../src/widgets/text-toolbar.cpp:1631 -#, fuzzy msgid "Font Style" -msgstr "Tamanho da fonte" +msgstr "Estilo da Fonte" #: ../src/widgets/text-toolbar.cpp:1632 -#, fuzzy msgid "Font style" -msgstr "Tamanho da fonte" +msgstr "Estilo da fonte" +# Apenas "Sobrescrito" por não fazer sentido usar o "Alternar sobrescrito" nos botões. Ou está ativo ou não. #. Name #: ../src/widgets/text-toolbar.cpp:1649 msgid "Toggle Superscript" -msgstr "" +msgstr "Sobrescrito" +# Apenas "Sobrescrito" por não fazer sentido usar o "Alternar sobrescrito" nos botões. Ou está ativo ou não. #. Label #: ../src/widgets/text-toolbar.cpp:1650 msgid "Toggle superscript" -msgstr "" +msgstr "sobrescrito" +# Apenas "Subscrito" por não fazer sentido usar o "Alternar subscrito" nos botões. Ou está ativo ou não. #. Name #: ../src/widgets/text-toolbar.cpp:1662 msgid "Toggle Subscript" -msgstr "" +msgstr "Subscrito" +# Apenas "Subscrito" por não fazer sentido usar o "Alternar subscrito" nos botões. Ou está ativo ou não. #. Label #: ../src/widgets/text-toolbar.cpp:1663 -#, fuzzy msgid "Toggle subscript" -msgstr "Postscript" +msgstr "subscrito" #: ../src/widgets/text-toolbar.cpp:1704 msgid "Justify" @@ -33209,221 +31296,187 @@ msgstr "Justificar" #. Name #: ../src/widgets/text-toolbar.cpp:1711 -#, fuzzy msgid "Alignment" -msgstr "Alinhar à esquerda" +msgstr "Alinhamento" #. Label #: ../src/widgets/text-toolbar.cpp:1712 -#, fuzzy msgid "Text alignment" -msgstr "Texto: Alterar alinhamento" +msgstr "Alinhamento do texto" #: ../src/widgets/text-toolbar.cpp:1739 -#, fuzzy msgid "Horizontal" -msgstr "_Horizontal" +msgstr "Horizontal" #: ../src/widgets/text-toolbar.cpp:1746 -#, fuzzy msgid "Vertical — RL" -msgstr "_Vertical" +msgstr "Vertical — DE" #: ../src/widgets/text-toolbar.cpp:1747 msgid "Vertical text — lines: right to left" -msgstr "" +msgstr "Texto vertical — linhas: da direita para a esquerda" #: ../src/widgets/text-toolbar.cpp:1753 -#, fuzzy msgid "Vertical — LR" -msgstr "_Vertical" +msgstr "Vertical — ED" #: ../src/widgets/text-toolbar.cpp:1754 msgid "Vertical text — lines: left to right" -msgstr "" +msgstr "Texto vertical — linhas: da esquerda para a direita" #. Name #: ../src/widgets/text-toolbar.cpp:1759 -#, fuzzy msgid "Writing mode" -msgstr "Desenho" +msgstr "Modo de escrita" #. Label #: ../src/widgets/text-toolbar.cpp:1760 msgid "Block progression" -msgstr "" +msgstr "Progressão do bloco" #: ../src/widgets/text-toolbar.cpp:1789 -#, fuzzy msgid "Auto glyph orientation" -msgstr "Orientação da página:" +msgstr "Orientação automática do caractere" #: ../src/widgets/text-toolbar.cpp:1796 -#, fuzzy msgid "Upright" -msgstr "Mais claro" +msgstr "Na vertical" #: ../src/widgets/text-toolbar.cpp:1797 -#, fuzzy msgid "Upright glyph orientation" -msgstr "Orientação da página:" +msgstr "Orientação do caractere na vertical" #: ../src/widgets/text-toolbar.cpp:1804 msgid "Sideways" -msgstr "" +msgstr "Para os lados" #: ../src/widgets/text-toolbar.cpp:1805 -#, fuzzy msgid "Sideways glyph orientation" -msgstr "Orientação da página:" +msgstr "Orientação do caractere para os lados" #. Name #: ../src/widgets/text-toolbar.cpp:1811 -#, fuzzy msgid "Text orientation" -msgstr "Orientação da página:" +msgstr "Orientação do texto" #. Label #: ../src/widgets/text-toolbar.cpp:1812 msgid "Text (glyph) orientation in vertical text." -msgstr "" +msgstr "Orientação do texto (caractere) em texto vertical." #. Drop down menu #: ../src/widgets/text-toolbar.cpp:1845 -#, fuzzy msgid "Smaller spacing" -msgstr "Definir espaçamento:" +msgstr "Espaçamento pequeno" #: ../src/widgets/text-toolbar.cpp:1845 ../src/widgets/text-toolbar.cpp:1884 #: ../src/widgets/text-toolbar.cpp:1915 -#, fuzzy msgctxt "Text tool" msgid "Normal" msgstr "Normal" #: ../src/widgets/text-toolbar.cpp:1845 -#, fuzzy msgid "Larger spacing" -msgstr "Espaçamento de linha:" +msgstr "Espaçamento grande" #. name #: ../src/widgets/text-toolbar.cpp:1850 -#, fuzzy msgid "Line Height" -msgstr "Altura:" +msgstr "Altura da Linha" #. label #: ../src/widgets/text-toolbar.cpp:1851 -#, fuzzy msgid "Line:" -msgstr "Linha" +msgstr "Linha:" #. short label #: ../src/widgets/text-toolbar.cpp:1852 -#, fuzzy msgid "Spacing between baselines (times font size)" -msgstr "Espaçamento entre linhas" +msgstr "Espaçamento entre linhas (tamanho da fonte Times)" #. Drop down menu #: ../src/widgets/text-toolbar.cpp:1884 ../src/widgets/text-toolbar.cpp:1915 -#, fuzzy msgid "Negative spacing" -msgstr "Definir espaçamento:" +msgstr "Espaçamento negativo" #: ../src/widgets/text-toolbar.cpp:1884 ../src/widgets/text-toolbar.cpp:1915 -#, fuzzy msgid "Positive spacing" -msgstr "Espaçamento de linha:" +msgstr "Espaçamento positivo" #. name #: ../src/widgets/text-toolbar.cpp:1889 -#, fuzzy msgid "Word spacing" -msgstr "Definir espaçamento:" +msgstr "Espaçamento entre palavras" #. label #: ../src/widgets/text-toolbar.cpp:1890 -#, fuzzy msgid "Word:" -msgstr "Modo:" +msgstr "Palavra:" #. short label #: ../src/widgets/text-toolbar.cpp:1891 -#, fuzzy msgid "Spacing between words (px)" -msgstr "Espaçamento entre letras" +msgstr "Espaçamento entre palavras (px)" #. name #: ../src/widgets/text-toolbar.cpp:1920 -#, fuzzy msgid "Letter spacing" -msgstr "Definir espaçamento:" +msgstr "Espaçamento entre letras" #. label #: ../src/widgets/text-toolbar.cpp:1921 -#, fuzzy msgid "Letter:" -msgstr "Comprimento:" +msgstr "Letra:" #. short label #: ../src/widgets/text-toolbar.cpp:1922 -#, fuzzy msgid "Spacing between letters (px)" -msgstr "Espaçamento entre letras" +msgstr "Espaçamento entre letras (px)" #. name #: ../src/widgets/text-toolbar.cpp:1951 -#, fuzzy msgid "Kerning" -msgstr "_Desenho" +msgstr "Entre-letras" #. label #: ../src/widgets/text-toolbar.cpp:1952 -#, fuzzy msgid "Kern:" -msgstr "Kernel" +msgstr "Entre-letras:" #. short label #: ../src/widgets/text-toolbar.cpp:1953 -#, fuzzy msgid "Horizontal kerning (px)" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento entre-letras horizontal (px)" #. name #: ../src/widgets/text-toolbar.cpp:1982 -#, fuzzy msgid "Vertical Shift" -msgstr "Texto vertical" +msgstr "Deslocamento Vertical" #. label #: ../src/widgets/text-toolbar.cpp:1983 -#, fuzzy msgid "Vert:" -msgstr "Inverter:" +msgstr "Vert:" #. short label #: ../src/widgets/text-toolbar.cpp:1984 -#, fuzzy msgid "Vertical shift (px)" -msgstr "Desvio Vertical" +msgstr "Deslocamento vertical (px)" #. name #: ../src/widgets/text-toolbar.cpp:2013 -#, fuzzy msgid "Letter rotation" -msgstr "Definir espaçamento:" +msgstr "Rotação da letra" #. label #: ../src/widgets/text-toolbar.cpp:2014 -#, fuzzy msgid "Rot:" -msgstr "Cargo:" +msgstr "Rot:" #. short label #: ../src/widgets/text-toolbar.cpp:2015 -#, fuzzy msgid "Character rotation (degrees)" -msgstr "Rotação (graus)" +msgstr "Rotação do caractere (graus)" #: ../src/widgets/toolbox.cpp:186 msgid "Color/opacity used for color tweaking" @@ -33451,7 +31504,7 @@ msgstr "Estilo de novas espirais" #: ../src/widgets/toolbox.cpp:204 msgid "Style of new paths created by Pencil" -msgstr "Estilo de novos caminhos criados pelo Lápis" +msgstr "Estilo dos novos caminhos criados pelo Lápis" #: ../src/widgets/toolbox.cpp:206 msgid "Style of new paths created by Pen" @@ -33460,189 +31513,159 @@ msgstr "Estilo dos novos caminhos criados pela Caneta" # Porque estes "Style of new..." alguns têm estas traduções estranhas? #: ../src/widgets/toolbox.cpp:208 msgid "Style of new calligraphic strokes" -msgstr "Estilo de novos traços caligráficos" +msgstr "Estilo dos novos traços caligráficos" #: ../src/widgets/toolbox.cpp:210 ../src/widgets/toolbox.cpp:212 msgid "TBD" -msgstr "" +msgstr "A definir" #: ../src/widgets/toolbox.cpp:225 -#, fuzzy msgid "Style of Paint Bucket fill objects" -msgstr "Estilo do preenchimento dos objectos da Ecrã de Pintura" +msgstr "Estilo do preenchimento do Balde de Tinta nos objetos" #: ../src/widgets/toolbox.cpp:1750 -#, fuzzy msgid "Bounding box" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Caixa limitadora" #: ../src/widgets/toolbox.cpp:1750 -#, fuzzy msgid "Snap bounding boxes" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Atrair às caixas limitadoras" #: ../src/widgets/toolbox.cpp:1759 -#, fuzzy msgid "Bounding box edges" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Laterais da caixa limitadora" #: ../src/widgets/toolbox.cpp:1759 -#, fuzzy msgid "Snap to edges of a bounding box" -msgstr "Ajustar aos _nós do objecto" +msgstr "Atrair às laterais da caixa limitadora" #: ../src/widgets/toolbox.cpp:1768 -#, fuzzy msgid "Bounding box corners" -msgstr "_Cantos de caixas limitadoras" +msgstr "Cantos da caixa limitadora" #: ../src/widgets/toolbox.cpp:1768 -#, fuzzy msgid "Snap bounding box corners" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Atrair aos cantos da caixa limitadora" #: ../src/widgets/toolbox.cpp:1777 msgid "BBox Edge Midpoints" -msgstr "" +msgstr "Pontos Centrais das Laterais da Caixa Limitadora" #: ../src/widgets/toolbox.cpp:1777 -#, fuzzy msgid "Snap midpoints of bounding box edges" -msgstr "Ajustar aos _nós do objecto" +msgstr "Atrair aos pontos centrais dos lados da caixa limitadora" #: ../src/widgets/toolbox.cpp:1787 -#, fuzzy msgid "BBox Centers" -msgstr "Centralizar" +msgstr "Centros da Caixa Limitadora" #: ../src/widgets/toolbox.cpp:1787 -#, fuzzy msgid "Snapping centers of bounding boxes" -msgstr "" -"Ajustar cantos das caixas limitadoras e guias às fronteiras das caixas " -"limitadoras" +msgstr "Atrair aos centros das caixas limitadoras" #: ../src/widgets/toolbox.cpp:1796 -#, fuzzy msgid "Snap nodes, paths, and handles" -msgstr "Deslocar alças do nó" +msgstr "Atrair aos nós, caminhos e alças" #: ../src/widgets/toolbox.cpp:1804 -#, fuzzy msgid "Snap to paths" -msgstr "Encaixar no camin_ho" +msgstr "Atrair aos caminhos" #: ../src/widgets/toolbox.cpp:1813 -#, fuzzy msgid "Path intersections" -msgstr "Intersecção" +msgstr "Interseções de caminhos" #: ../src/widgets/toolbox.cpp:1813 -#, fuzzy msgid "Snap to path intersections" -msgstr "Ajustar às interseções de guias com a grelha" +msgstr "Atrair às interseções de caminhos" #: ../src/widgets/toolbox.cpp:1822 -#, fuzzy msgid "To nodes" -msgstr "Mover nós" +msgstr "Aos nós" #: ../src/widgets/toolbox.cpp:1822 msgid "Snap cusp nodes, incl. rectangle corners" -msgstr "" +msgstr "Atrair aos nós afiados, incluindo cantos de retângulos" #: ../src/widgets/toolbox.cpp:1831 -#, fuzzy msgid "Smooth nodes" -msgstr "Suavidade" +msgstr "Nós suaves" #: ../src/widgets/toolbox.cpp:1831 msgid "Snap smooth nodes, incl. quadrant points of ellipses" -msgstr "" +msgstr "Atrair aos nós suaves, incluindo pontos quadrantes e elipses" #: ../src/widgets/toolbox.cpp:1840 -#, fuzzy msgid "Line Midpoints" -msgstr "Largura da Linha" +msgstr "Pontos do Meio das Linhas" #: ../src/widgets/toolbox.cpp:1840 -#, fuzzy msgid "Snap midpoints of line segments" -msgstr "Ajustar aos _nós do objecto" +msgstr "Atrair aos pontos centrais de segmentos de linha" #: ../src/widgets/toolbox.cpp:1849 -#, fuzzy msgid "Others" -msgstr "Outro" +msgstr "Outros" #: ../src/widgets/toolbox.cpp:1849 msgid "Snap other points (centers, guide origins, gradient handles, etc.)" msgstr "" +"Atrair aos outros pontos (centros, origens de guias, alças de gradientes, " +"etc.)" #: ../src/widgets/toolbox.cpp:1857 -#, fuzzy msgid "Object Centers" -msgstr "_Propriedades do Objecto" +msgstr "Centros dos objetos" #: ../src/widgets/toolbox.cpp:1857 -#, fuzzy msgid "Snap centers of objects" -msgstr "Encaixar nós e guias aos nós dos objectos" +msgstr "Atrair aos centros dos objetos" #: ../src/widgets/toolbox.cpp:1866 -#, fuzzy msgid "Rotation Centers" -msgstr "Rotação (graus)" +msgstr "Centros de Rotação" #: ../src/widgets/toolbox.cpp:1866 -#, fuzzy msgid "Snap an item's rotation center" -msgstr "Incluir objectos ocultos à busca" +msgstr "Atrair ao centro de rotação de um item" #: ../src/widgets/toolbox.cpp:1875 -#, fuzzy msgid "Text baseline" -msgstr "Alinhar linhas base do texto" +msgstr "Linhas base do texto" #: ../src/widgets/toolbox.cpp:1875 -#, fuzzy msgid "Snap text anchors and baselines" -msgstr "Alinhar linhas base do texto" +msgstr "Atrair às âncoras de texto e linhas base de texto" #: ../src/widgets/toolbox.cpp:1885 -#, fuzzy msgid "Page border" -msgstr "Cor da borda da página" +msgstr "Borda da página" #: ../src/widgets/toolbox.cpp:1885 -#, fuzzy msgid "Snap to the page border" -msgstr "Mostrar bordas da página" +msgstr "Atrair às bordas da página" #: ../src/widgets/toolbox.cpp:1894 -#, fuzzy msgid "Snap to grids" -msgstr "Encaixar à grelha" +msgstr "Atrair às grelhas" #: ../src/widgets/toolbox.cpp:1903 -#, fuzzy msgid "Snap guides" -msgstr "Encaixando às guias" +msgstr "Atrair às guias" #. Width #: ../src/widgets/tweak-toolbar.cpp:125 msgid "(pinch tweak)" -msgstr "" +msgstr "(largura pequena)" #: ../src/widgets/tweak-toolbar.cpp:125 -#, fuzzy msgid "(broad tweak)" -msgstr " (traço)" +msgstr "(largura grande)" #: ../src/widgets/tweak-toolbar.cpp:128 -#, fuzzy msgid "The width of the tweak area (relative to the visible canvas area)" -msgstr "A largura da caneta caligráfica (em relação a área visível da página)" +msgstr "" +"A largura da área de forças (em relação a área visível da área de desenho)" #. Force #: ../src/widgets/tweak-toolbar.cpp:142 @@ -33663,100 +31686,93 @@ msgstr "Força:" #: ../src/widgets/tweak-toolbar.cpp:145 msgid "The force of the tweak action" -msgstr "" +msgstr "A intensidade da força para alterar os objetos" #: ../src/widgets/tweak-toolbar.cpp:163 -#, fuzzy msgid "Move mode" -msgstr "Mover nós" +msgstr "Modo mover" #: ../src/widgets/tweak-toolbar.cpp:164 -#, fuzzy msgid "Move objects in any direction" -msgstr "Definir VP na direção X" +msgstr "Mover objetos em qualquer direção" #: ../src/widgets/tweak-toolbar.cpp:170 -#, fuzzy msgid "Move in/out mode" -msgstr "Mover nós" +msgstr "Mover para dentro/para fora" #: ../src/widgets/tweak-toolbar.cpp:171 msgid "Move objects towards cursor; with Shift from cursor" msgstr "" +"Mover objetos na direção do cursor; com Shift na direção inversa oposta do " +"cursor" #: ../src/widgets/tweak-toolbar.cpp:177 -#, fuzzy msgid "Move jitter mode" -msgstr "Aguçar nós" +msgstr "Mover no modo nervoso" #: ../src/widgets/tweak-toolbar.cpp:178 -#, fuzzy msgid "Move objects in random directions" -msgstr "Definir VP na direção X" +msgstr "Mover objetos em direções aleatórias" #: ../src/widgets/tweak-toolbar.cpp:184 -#, fuzzy msgid "Scale mode" -msgstr "Escalar nós" +msgstr "Modo dimensionar" #: ../src/widgets/tweak-toolbar.cpp:185 -#, fuzzy msgid "Shrink objects, with Shift enlarge" -msgstr "Ajustar título do objecto" +msgstr "Encolher objetos, com Shift alargar" #: ../src/widgets/tweak-toolbar.cpp:191 -#, fuzzy msgid "Rotate mode" -msgstr "Girar nós" +msgstr "Modo rodar" #: ../src/widgets/tweak-toolbar.cpp:192 -#, fuzzy msgid "Rotate objects, with Shift counterclockwise" -msgstr "Girar a selecção 90° graus sentido anti-horário" +msgstr "" +"Rodar objetos no sentido horário; com Shift rodar no sentido anti-horário" #: ../src/widgets/tweak-toolbar.cpp:198 -#, fuzzy msgid "Duplicate/delete mode" -msgstr "Duplicar nó" +msgstr "Modo Duplicar/eliminar" #: ../src/widgets/tweak-toolbar.cpp:199 msgid "Duplicate objects, with Shift delete" -msgstr "" +msgstr "Duplicar objetos; com Shift elimina" #: ../src/widgets/tweak-toolbar.cpp:205 msgid "Push mode" -msgstr "" +msgstr "Modo puxar" #: ../src/widgets/tweak-toolbar.cpp:206 msgid "Push parts of paths in any direction" -msgstr "" +msgstr "Puxar partes dos caminhos em qualquer direção" #: ../src/widgets/tweak-toolbar.cpp:212 -#, fuzzy msgid "Shrink/grow mode" -msgstr "Modo encolher" +msgstr "Modo encolher/crescer" #: ../src/widgets/tweak-toolbar.cpp:213 -#, fuzzy msgid "Shrink (inset) parts of paths; with Shift grow (outset)" -msgstr "Separar caminhos seleccionados em outros caminhos" +msgstr "" +"Encolher (para dentro) partes dos caminhos; com Shift crescer (para fora)" #: ../src/widgets/tweak-toolbar.cpp:219 -#, fuzzy msgid "Attract/repel mode" -msgstr "Modo atrair" +msgstr "Modo atrair/repelir" #: ../src/widgets/tweak-toolbar.cpp:220 msgid "Attract parts of paths towards cursor; with Shift from cursor" msgstr "" +"Atrai partes de caminhos na direção do cursor; com Shift na direção oposta " +"do cursor" #: ../src/widgets/tweak-toolbar.cpp:226 msgid "Roughen mode" -msgstr "Modo áspero" +msgstr "Modo rugoso" #: ../src/widgets/tweak-toolbar.cpp:227 msgid "Roughen parts of paths" -msgstr "" +msgstr "Torna rugoso as partes dos caminhos" #: ../src/widgets/tweak-toolbar.cpp:233 msgid "Color paint mode" @@ -33764,27 +31780,25 @@ msgstr "Modo cor da tinta" #: ../src/widgets/tweak-toolbar.cpp:234 msgid "Paint the tool's color upon selected objects" -msgstr "Pintar a ferramenta de cor sobre os objectos seleccionados" +msgstr "" +"Aplicar a cor da ferramenta nos objetos selecionados (apenas objetos com cor " +"definida)" #: ../src/widgets/tweak-toolbar.cpp:240 -#, fuzzy msgid "Color jitter mode" -msgstr "Aguçar nós" +msgstr "Modo de variação das cores" #: ../src/widgets/tweak-toolbar.cpp:241 -#, fuzzy msgid "Jitter the colors of selected objects" -msgstr "Fazer com que os conectores evitem os objectos seleccionados" +msgstr "Alterar cores aleatoriamente nos objetos selecionados" #: ../src/widgets/tweak-toolbar.cpp:247 -#, fuzzy msgid "Blur mode" -msgstr "_Modo misturar:" +msgstr "Modo desfocar" #: ../src/widgets/tweak-toolbar.cpp:248 -#, fuzzy msgid "Blur selected objects more; with Shift, blur less" -msgstr "Inverter objectos seleccionados horizontalmente" +msgstr "Desfocar mais os objetos selecionados; com Shift, desfocar menos" #: ../src/widgets/tweak-toolbar.cpp:275 msgid "Channels:" @@ -33792,44 +31806,40 @@ msgstr "Canais:" #: ../src/widgets/tweak-toolbar.cpp:287 msgid "In color mode, act on objects' hue" -msgstr "Em modo de cor, agir na matiz do objecto" +msgstr "Em modo de cor, agir na matiz do objeto" #. TRANSLATORS: "H" here stands for hue #: ../src/widgets/tweak-toolbar.cpp:291 -#, fuzzy msgctxt "Hue" msgid "H" -msgstr "H" +msgstr "M" #: ../src/widgets/tweak-toolbar.cpp:303 msgid "In color mode, act on objects' saturation" -msgstr "" +msgstr "No modo a cores, atuar na saturação do objeto" #. TRANSLATORS: "S" here stands for Saturation #: ../src/widgets/tweak-toolbar.cpp:307 -#, fuzzy msgctxt "Saturation" msgid "S" msgstr "S" #: ../src/widgets/tweak-toolbar.cpp:319 msgid "In color mode, act on objects' lightness" -msgstr "" +msgstr "No modo a cores, atuar na luminosidade do objeto" #. TRANSLATORS: "L" here stands for Lightness #: ../src/widgets/tweak-toolbar.cpp:323 -#, fuzzy msgctxt "Lightness" msgid "L" msgstr "L" #: ../src/widgets/tweak-toolbar.cpp:335 msgid "In color mode, act on objects' opacity" -msgstr "" +msgstr "No modo a cores, atuar na opacidade do objeto" #. TRANSLATORS: "O" here stands for Opacity #: ../src/widgets/tweak-toolbar.cpp:339 -#, fuzzy msgctxt "Opacity" msgid "O" msgstr "O" @@ -33837,7 +31847,7 @@ msgstr "O" #. Fidelity #: ../src/widgets/tweak-toolbar.cpp:350 msgid "(rough, simplified)" -msgstr "(áspero, simplificado)" +msgstr "(rugoso, simplificado)" #: ../src/widgets/tweak-toolbar.cpp:350 msgid "(fine, but many nodes)" @@ -33849,68 +31859,68 @@ msgstr "Fidelidade" #: ../src/widgets/tweak-toolbar.cpp:353 msgid "Fidelity:" -msgstr "Fideliade:" +msgstr "Fidelidade:" #: ../src/widgets/tweak-toolbar.cpp:354 msgid "" "Low fidelity simplifies paths; high fidelity preserves path features but may " "generate a lot of new nodes" msgstr "" +"Fidelidade baixa simplifica caminhos; fidelidade alta preserva as " +"características do caminho mas pode criar muitos nós novos" #: ../src/widgets/tweak-toolbar.cpp:373 -#, fuzzy msgid "Use the pressure of the input device to alter the force of tweak action" msgstr "" -"Usar a pressão do dispositivo de entrada para alterar a largura da caneta" +"Usar a pressão do dispositivo de entrada para alterar a força do ajuste da " +"caneta" #: ../share/extensions/convert2dashes.py:56 msgid "Total number of objects not converted: {}\n" -msgstr "" +msgstr "Número total de objetos não convertidos: {}\n" #: ../share/extensions/dimension.py:108 -#, fuzzy msgid "Please select an object." -msgstr "Duplicar os objectos seleccionados" +msgstr "Selecione um objeto." #: ../share/extensions/dimension.py:133 msgid "Unable to process this object. Try changing it into a path first." msgstr "" +"Não foi possível processar este objeto. Tente alterá-lo para um caminho " +"primeiro." #. report to the Inkscape console using errormsg #: ../share/extensions/draw_from_triangle.py:179 -#, fuzzy msgid "Side Length 'a' (px): " -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do Lado 'a' (px): " #: ../share/extensions/draw_from_triangle.py:180 -#, fuzzy msgid "Side Length 'b' (px): " -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do Lado 'b' (px): " #: ../share/extensions/draw_from_triangle.py:181 -#, fuzzy msgid "Side Length 'c' (px): " -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do Lado 'c' (px): " #: ../share/extensions/draw_from_triangle.py:182 msgid "Angle 'A' (radians): " -msgstr "" +msgstr "Ângulo 'A' (radianos): " #: ../share/extensions/draw_from_triangle.py:183 msgid "Angle 'B' (radians): " -msgstr "" +msgstr "Ângulo 'B' (radianos): " #: ../share/extensions/draw_from_triangle.py:184 msgid "Angle 'C' (radians): " -msgstr "" +msgstr "Ângulo 'C' (radianos): " #: ../share/extensions/draw_from_triangle.py:185 msgid "Semiperimeter (px): " -msgstr "" +msgstr "Semi-perímetro (px): " #: ../share/extensions/draw_from_triangle.py:186 msgid "Area (px^2): " -msgstr "" +msgstr "Ãrea (px^2): " #: ../share/extensions/dxf_input.py:530 #, python-format @@ -33918,34 +31928,43 @@ msgid "" "%d ENTITIES of type POLYLINE encountered and ignored. Please try to convert " "to Release 13 format using QCad." msgstr "" +"%d ENTIDADES do tipo POLILINHA encontradas e ignoradas. Por favor tentar " +"converter para o formato Release 13 utilizando o QCad." #: ../share/extensions/dxf_outlines.py:47 msgid "" "Failed to import the numpy or numpy.linalg modules. These modules are " "required by this extension. Please install them and try again." msgstr "" +"Falhou a importação dos módulos numpy ou numpy.linalg. Estes módulos são " +"necessários para esta extensão. Instale-os e tente de novo." #: ../share/extensions/dxf_outlines.py:313 msgid "" "Error: Field 'Layer match name' must be filled when using 'By name match' " "option" msgstr "" +"Erro: o campo 'Nome que corresponde à camada' tem de ser preenchido ao " +"utilizar a opção 'Por correspondência do nome'" #: ../share/extensions/dxf_outlines.py:354 -#, fuzzy, python-format +#, python-format msgid "Warning: Layer '%s' not found!" -msgstr "Camada para o topo" +msgstr "Aviso: a camada '%s' não foi encontrada!" #: ../share/extensions/embedimage.py:83 msgid "" "No xlink:href or sodipodi:absref attributes found, or they do not point to " "an existing file! Unable to embed image." msgstr "" +"Não foram encontrados os atributos xlink:href ou sodipodi:absref, ou eles " +"não apontam para um ficheiro existente, por isso não foi possível embutir a " +"imagem." #: ../share/extensions/embedimage.py:85 #, python-format msgid "Sorry we could not locate %s" -msgstr "" +msgstr "Não foi possível localizar %s" #: ../share/extensions/embedimage.py:110 #, python-format @@ -33953,43 +31972,48 @@ msgid "" "%s is not of type image/png, image/jpeg, image/bmp, image/gif, image/tiff, " "or image/x-icon" msgstr "" +"%s não é do tipo image/png, image/jpeg, image/bmp, image/gif, image/tiff ou " +"image/x-icon" #: ../share/extensions/export_gimp_palette.py:16 msgid "" "The export_gpl.py module requires PyXML. Please download the latest version " "from http://pyxml.sourceforge.net/." msgstr "" +"O módulo export_gpl.py necessita de PyXML. Descarregar a última versão em " +"http://pyxml.sourceforge.net/" #: ../share/extensions/extractimage.py:66 #, python-format msgid "Image extracted to: %s" -msgstr "" +msgstr "Imagem extraída para: %s" #: ../share/extensions/extractimage.py:73 -#, fuzzy msgid "Unable to find image data." -msgstr "Impossível encontrar o ID de nó: '%s'\n" +msgstr "Não foi possível encontrar os dados da imagem." #: ../share/extensions/extrude.py:41 -#, fuzzy msgid "Need at least 2 paths selected" -msgstr "Nenhum objecto seleccionado" +msgstr "Necessário selecionar pelo menos 2 caminhos" #: ../share/extensions/funcplot.py:46 msgid "" "x-interval cannot be zero. Please modify 'Start X value' or 'End X value'" msgstr "" +"O intervalo X não pode ser zero. Altere o 'Valor X inicial' ou o 'Valor X " +"final'" #: ../share/extensions/funcplot.py:58 msgid "" "y-interval cannot be zero. Please modify 'Y value of rectangle's top' or 'Y " "value of rectangle's bottom'" msgstr "" +"O intervalo Y não pode ser zero. Altere o 'Valor Y do topo do retângulo' ou " +"o 'Valor Y do fundo do retângulo'" #: ../share/extensions/funcplot.py:313 -#, fuzzy msgid "Please select a rectangle" -msgstr "Duplicar os objectos seleccionados" +msgstr "Selecione um retângulo" #: ../share/extensions/gcodetools.py:3319 #: ../share/extensions/gcodetools.py:4524 @@ -33998,28 +32022,27 @@ msgstr "Duplicar os objectos seleccionados" #: ../share/extensions/gcodetools.py:6425 msgid "No paths are selected! Trying to work on all available paths." msgstr "" +"Nenhum caminho selecionado! A tentar trabalhar em todos os caminhos " +"disponíveis." #: ../share/extensions/gcodetools.py:3322 -#, fuzzy msgid "Nothing is selected. Please select something." -msgstr "" -"Mais de um objecto seleccionado. Não é possível obter o estilo a " -"partir de múltiplos objectos." +msgstr "Não está nada selecionado. Selecione algo." #: ../share/extensions/gcodetools.py:3862 -#, fuzzy msgid "" "Directory does not exist! Please specify existing directory at Preferences " "tab!" -msgstr "A pasta %s não existe ou não é uma pasta.\n" +msgstr "" +"A pasta não existe! Especifique uma pasta existente na aba das Preferências!" #: ../share/extensions/gcodetools.py:3892 -#, fuzzy, python-format +#, python-format msgid "" "Can not write to specified file!\n" "%s" msgstr "" -"Não foi possível modificar o ficheiro %s.\n" +"Não foi possível gravar para o ficheiro especificado!\n" "%s" #: ../share/extensions/gcodetools.py:4038 @@ -34028,11 +32051,13 @@ msgid "" "Orientation points for '%s' layer have not been found! Please add " "orientation points using Orientation tab!" msgstr "" +"Os pontos de orientação para a camada '%s' não foram encontrados! Adicione " +"pontos de orientação utilizando a aba Orientação!" #: ../share/extensions/gcodetools.py:4045 #, python-format msgid "There are more than one orientation point groups in '%s' layer" -msgstr "" +msgstr "Existem mais do que 1 grupo de pontos de orientação na camada '%s'" #: ../share/extensions/gcodetools.py:4076 #: ../share/extensions/gcodetools.py:4078 @@ -34041,6 +32066,9 @@ msgid "" "should not be the same. If there are three orientation points they should " "not be in a straight line.)" msgstr "" +"Os pontos de orientação estão errados! Se existirem mais do que 2 pontos de " +"orientação, estes não devem ser os mesmos. Se existirem 3 pontos de " +"orientação, estes devem estar numa linha reta." #: ../share/extensions/gcodetools.py:4248 #, python-format @@ -34048,6 +32076,8 @@ msgid "" "Warning! Found bad orientation points in '%s' layer. Resulting Gcode could " "be corrupt!" msgstr "" +"Aviso: foram encontrados pontos de orientação errados na camada '%s'. O " +"Gcode resultante pode estar corrompido!" #: ../share/extensions/gcodetools.py:4261 #, python-format @@ -34055,6 +32085,8 @@ msgid "" "Warning! Found bad graffiti reference point in '%s' layer. Resulting Gcode " "could be corrupt!" msgstr "" +"Aviso: foi encontrado um ponto de referência grafiti errado na camada '%s'. " +"O Gcode resultante pode estar corrompido!" #. xgettext:no-pango-format #: ../share/extensions/gcodetools.py:4282 @@ -34066,18 +32098,30 @@ msgid "" "Solution 3: export all contours to PostScript level 2 (File->Save As->.ps) " "and File->Import this file." msgstr "" +"Esta extensão funciona apenas com Caminhos, Deslocamentos Dinâmicos e grupos " +"destes! Todos os outros objetos serão ignorados!\n" +"Solução 1: usar o menu Caminho->Converter Objeto num Caminho ou Shift+Ctrl" +"+C.\n" +"Solução 2: Caminho->Deslocamento Dinâmico ou Ctrl+J.\n" +"Solução 3: exportar todos os contornos no formato PostScript nível 2 " +"(Ficheiro->Gravar Como->.ps) e de seguida importar esse ficheiro no menu " +"Ficheiro->Importar." #: ../share/extensions/gcodetools.py:4288 msgid "" "Document has no layers! Add at least one layer using layers panel (Ctrl+Shift" "+L)" msgstr "" +"O documento não tem camadas! Adicionar pelo menos 1 camada utilizando o " +"painel Camadas (Ctrl+Shift+L)" #: ../share/extensions/gcodetools.py:4292 msgid "" "Warning! There are some paths in the root of the document, but not in any " "layer! Using bottom-most layer for them." msgstr "" +"Aviso: existem alguns caminhos na raiz do documento que não estão em nenhuma " +"camada! A utilizar a camada mais baixa para estes objetos." #: ../share/extensions/gcodetools.py:4369 #, python-format @@ -34085,22 +32129,28 @@ msgid "" "Warning! Tool's and default tool's parameter's (%s) types are not the same " "( type('%s') != type('%s') )." msgstr "" +"Aviso: os tipos de parâmetro da ferramenta e da ferramenta padrão (%s) não " +"são os mesmos ( tipo('%s') != tipo('%s') )." #: ../share/extensions/gcodetools.py:4372 #, python-format msgid "Warning! Tool has parameter that default tool has not ( '%s': '%s' )." msgstr "" +"Aviso: a ferramenta tem o parãmetro que a ferramenta padrão não tem ( '%s': " +"'%s' )." #: ../share/extensions/gcodetools.py:4386 #, python-format msgid "Layer '%s' contains more than one tool!" -msgstr "" +msgstr "A camada '%s' contém mais do que 1 ferramenta!" #: ../share/extensions/gcodetools.py:4389 #, python-format msgid "" "Can not find tool for '%s' layer! Please add one with Tools library tab!" msgstr "" +"Não foi possível encontrar a ferramenta para a camada '%s'! Adicione uma na " +"aba da biblioteca de Ferramentas!" #: ../share/extensions/gcodetools.py:4551 #: ../share/extensions/gcodetools.py:4706 @@ -34108,68 +32158,76 @@ msgid "" "Warning: One or more paths do not have 'd' parameter, try to Ungroup (Ctrl" "+Shift+G) and Object to Path (Ctrl+Shift+C)!" msgstr "" +"Aviso: um ou mais caminhos não têm o parâmetro 'd'. Tente Desagrupar (Ctrl" +"+Shift+G) e usar Converter Objeto num Caminho (Ctrl+Shift+C)!" #: ../share/extensions/gcodetools.py:4665 msgid "" "Nothing is selected. Please select something to convert to drill point " "(dxfpoint) or clear point sign." msgstr "" +"Não está nada selecionado. Selecione algo para converter em ponto perfurado " +"(dxfpoint) ou limpar o símbolo de ponto." #: ../share/extensions/gcodetools.py:4748 #: ../share/extensions/gcodetools.py:4994 -#, fuzzy msgid "This extension requires at least one selected path." -msgstr "União entre os caminhos seleccionados" +msgstr "Esta extensão requer pelo menos um caminho selecionado." #: ../share/extensions/gcodetools.py:4754 #: ../share/extensions/gcodetools.py:5000 #, python-format msgid "Tool diameter must be > 0 but tool's diameter on '%s' layer is not!" msgstr "" +"O diâmetro da ferramenta tem de ser > 0 mas o diâmetro na camada '%s' não é " +"> 0!" #: ../share/extensions/gcodetools.py:4765 #: ../share/extensions/gcodetools.py:4954 #: ../share/extensions/gcodetools.py:5009 msgid "Warning: omitting non-path" -msgstr "" +msgstr "Aviso: a omitir um não-caminho" #: ../share/extensions/gcodetools.py:5509 -#, fuzzy msgid "Please select at least one path to engrave and run again." msgstr "" -"Seleccione pelo menos dois caminhos para fazer uma operação booleana." +"Selecionar pelo menos 1 caminho para fazer a gravura e fazer de novo." #: ../share/extensions/gcodetools.py:5517 msgid "Unknown unit selected. mm assumed" -msgstr "" +msgstr "Unidade selecionada desconhecida. A utilizar milímetros" #: ../share/extensions/gcodetools.py:5538 #, python-format msgid "Tool '%s' has no shape. 45 degree cone assumed!" msgstr "" +"A ferramenta '%s' não tem forma geométrica. Foi assumido um cone de 45 graus!" #: ../share/extensions/gcodetools.py:5609 #: ../share/extensions/gcodetools.py:5614 msgid "csp_normalised_normal error. See log." -msgstr "" +msgstr "Erro csp_normalised_normal. Ver registos." #: ../share/extensions/gcodetools.py:5802 msgid "No need to engrave sharp angles." -msgstr "" +msgstr "Não é necessário talhar ângulos pontiagudos." #: ../share/extensions/gcodetools.py:5846 msgid "" "Active layer already has orientation points! Remove them or select another " "layer!" msgstr "" +"A camada ativa já tem pontos de orientação! Remova-os ou selecione outra " +"camada!" #: ../share/extensions/gcodetools.py:5891 msgid "Active layer already has a tool! Remove it or select another layer!" msgstr "" +"A camada ativa já tem uma ferramenta! Remova-a ou selecione outra camada!" #: ../share/extensions/gcodetools.py:6006 msgid "Selection is empty! Will compute whole drawing." -msgstr "" +msgstr "A seleção econtra-se vazia! Será processado todo o desenho." #: ../share/extensions/gcodetools.py:6060 msgid "" @@ -34179,14 +32237,20 @@ msgid "" "and Russian support forum:\n" "\thttp://www.cnc-club.ru/gcodetoolsru" msgstr "" +"Podem-se encontrar tutoriais, manuais e ajuda\n" +"no fórum em inglês:\n" +"\thttp://www.cnc-club.ru/gcodetools\n" +"e no fórum em russo:\n" +"\thttp://www.cnc-club.ru/gcodetoolsru" #: ../share/extensions/gcodetools.py:6105 msgid "Lathe X and Z axis remap should be 'X', 'Y' or 'Z'. Exiting..." msgstr "" +"Os eixos X e Z do remapear do torno deviam ser 'X', 'Y' ou 'Z'. A sair..." #: ../share/extensions/gcodetools.py:6108 msgid "Lathe X and Z axis remap should be the same. Exiting..." -msgstr "" +msgstr "Os eixos X e Z do remapear do torno deviam ser os mesmos. A sair..." #: ../share/extensions/gcodetools.py:6660 #, python-format @@ -34195,83 +32259,91 @@ msgid "" "Orientation, Offset, Lathe or Tools library.\n" " Current active tab id is %s" msgstr "" +"Selecionar uma das abas de ação - Caminho para Gcode, Ãrea, Gravura, pontos " +"DXF, orientação, Deslocamento, Tornear ou biblioteca de Ferramentas.\n" +" O identificador (ID) da aba atual ativa é %s" #: ../share/extensions/gcodetools.py:6666 msgid "" "Orientation points have not been defined! A default set of orientation " "points has been automatically added." msgstr "" +"Os pontos de orientação não foram definidos! Foi adicionado automaticamente " +"um conjunto de pontos de orientação padrão." #: ../share/extensions/gcodetools.py:6670 msgid "" "Cutting tool has not been defined! A default tool has been automatically " "added." msgstr "" +"A ferramenta de corte não foi definida! Foi adicionada automaticamente uma " +"ferramenta padrão." #: ../share/extensions/generate_voronoi.py:33 msgid "" "Failed to import the subprocess module. Please report this as a bug at: " "https://bugs.launchpad.net/inkscape." msgstr "" +"Falhou a importação do módulo subprocesso. Por favor reportar isto como erro " +"em: https://bugs.launchpad.net/inkscape" #: ../share/extensions/generate_voronoi.py:34 -#, fuzzy msgid "Python version is: " -msgstr "Remover guias existentes" +msgstr "A versão do Python é: " #: ../share/extensions/generate_voronoi.py:92 -#, fuzzy msgid "Please select an object" -msgstr "Duplicar os objectos seleccionados" +msgstr "Selecione um objeto" #: ../share/extensions/gimp_xcf.py:37 msgid "Inkscape must be installed and set in your path variable." msgstr "" +"O Inkscape tem de estar instalado e acessível na variável PATH do sistema." #: ../share/extensions/gimp_xcf.py:41 msgid "Gimp must be installed and set in your path variable." -msgstr "" +msgstr "O GIMP tem de estar instalado e acessível na variável PATH do sistema." #: ../share/extensions/gimp_xcf.py:45 msgid "An error occurred while processing the XCF file." -msgstr "" +msgstr "Ocorreu um erro ao processar o ficheiro XCF." #: ../share/extensions/gimp_xcf.py:183 -#, fuzzy msgid "This extension requires at least one non empty layer." -msgstr "União entre os caminhos seleccionados" +msgstr "Esta extensão requer pelo menos 1 camada não vazia." #: ../share/extensions/guillotine.py:248 msgid "The sliced bitmaps have been saved as:" -msgstr "" +msgstr "As imagens bitmap fatiadas foram gravadas como:" #: ../share/extensions/hpgl_decoder.py:42 -#, fuzzy msgid "Movements" -msgstr "Mover alça do degradê" +msgstr "Movimentos" #: ../share/extensions/hpgl_decoder.py:43 -#, fuzzy msgid "Pen " -msgstr "Massa:" +msgstr "Caneta " #. issue error if no hpgl data found #: ../share/extensions/hpgl_input.py:56 -#, fuzzy msgid "No HPGL data found." -msgstr "Não arredondado" +msgstr "Nenhuns dados HPGL encontrados." #: ../share/extensions/hpgl_input.py:64 msgid "" "The HPGL data contained unknown (unsupported) commands, there is a " "possibility that the drawing is missing some content." msgstr "" +"Os dados HPGL contêm comandos desconhecidos (não suportados). Existe a " +"possibilidade de faltar algum conteúdo no desenho." #. issue error if no paths found #: ../share/extensions/hpgl_output.py:57 msgid "" "No paths where found. Please convert all objects you want to save into paths." msgstr "" +"Não foram encontrados caminhos. Converta todos os objetos que quer gravar em " +"caminhos." #: ../share/extensions/inkex.py:116 #, python-format @@ -34284,32 +32356,37 @@ msgid "" "Technical details:\n" "%s" msgstr "" +"O lxml wrapper para libxml2 é necessário por inkex.py e também por esta " +"extensão. Descarregue e instale a última versão de http://cheeseshop.python." +"org/pypi/lxml/ ou, em sistemas Linux, instale-o através do gestor de pacotes " +"com um comando como: sudo apt-get install python-lxml\n" +"\n" +"Detalhes técnicos:\n" +"%s" #: ../share/extensions/inkex.py:184 -#, fuzzy, python-format +#, python-format msgid "Unable to open specified file: %s" -msgstr "" -"Não foi possível modificar o ficheiro %s.\n" -"%s" +msgstr "Não foi possível abrir o ficheiro: %s" #: ../share/extensions/inkex.py:193 #, python-format msgid "Unable to open object member file: %s" -msgstr "" +msgstr "Não foi possível abrir o ficheiro membro do objeto: %s" #: ../share/extensions/inkex.py:299 #, python-format msgid "No matching node for expression: %s" -msgstr "" +msgstr "Nenhum nó corresponde à expressão: %s" #: ../share/extensions/inkex.py:358 msgid "SVG Width not set correctly! Assuming width = 100" msgstr "" +"A Largura SVG não está definida corretamente! A assumir a largura = 100" #: ../share/extensions/interp_att_g.py:175 -#, fuzzy msgid "There is no selection to interpolate" -msgstr "Levantar a selecção para o topo" +msgstr "Não há nenhuma seleção a interpolar" #: ../share/extensions/jessyInk_autoTexts.py:44 #: ../share/extensions/jessyInk_effects.py:49 @@ -34328,13 +32405,18 @@ msgid "" "update the JessyInk script.\n" "\n" msgstr "" +"O script JessyInk não está instalado neste ficheiro SVG ou tem uma versão " +"diferente das extensões JessyInk. Selecione \"Extensões->JessyInk->instalar/" +"atualizar...\" para instalar ou atualizar o script JessyInk.\n" +"\n" #: ../share/extensions/jessyInk_autoTexts.py:47 -#, fuzzy msgid "" "To assign an effect, please select an object.\n" "\n" -msgstr "Duplicar os objectos seleccionados" +msgstr "" +"Para aplicar um efeito, selecionar um objeto.\n" +"\n" #: ../share/extensions/jessyInk_autoTexts.py:53 #, python-brace-format @@ -34342,71 +32424,81 @@ msgid "" "Node with id '{0}' is not a suitable text node and was therefore ignored.\n" "\n" msgstr "" +"O nó com o ID '{0}' não é um nó de texto adequado e foi por isso ignorado.\n" +"\n" #: ../share/extensions/jessyInk_effects.py:52 msgid "" "No object selected. Please select the object you want to assign an effect to " "and then press apply.\n" msgstr "" +"Nenhum objeto selecionado. Selecione o objeto ao qual quer atribuir um " +"efeito e clique em Aplicar.\n" #: ../share/extensions/jessyInk_export.py:80 msgid "Could not find Inkscape command.\n" -msgstr "" +msgstr "Não foi possível encontrar o comando do Inkscape.\n" #: ../share/extensions/jessyInk_masterSlide.py:54 msgid "Layer not found. Removed current master slide selection.\n" msgstr "" +"Camada não encontrada. Foi removida a seleção do slide principal atual.\n" #: ../share/extensions/jessyInk_masterSlide.py:56 msgid "" "More than one layer with this name found. Removed current master slide " "selection.\n" msgstr "" +"Encontrada mais do que uma camada com este nome. Foi removida a seleção do " +"slide principal atual.\n" #: ../share/extensions/jessyInk_summary.py:68 #, python-brace-format msgid "JessyInk script version {0} installed." -msgstr "" +msgstr "Versão do script JessyInk {0} instalada." #: ../share/extensions/jessyInk_summary.py:70 msgid "JessyInk script installed." -msgstr "" +msgstr "Script JessyInk instalado." #: ../share/extensions/jessyInk_summary.py:82 -#, fuzzy msgid "" "\n" "Master slide:" -msgstr "Colar tamanho" +msgstr "" +"\n" +"Slide principal:" #: ../share/extensions/jessyInk_summary.py:88 msgid "" "\n" "Slide {0!s}:" msgstr "" +"\n" +"Slide {0!s}:" #: ../share/extensions/jessyInk_summary.py:93 -#, fuzzy, python-brace-format +#, python-brace-format msgid "{0}Layer name: {1}" -msgstr "Nome da camada:" +msgstr "{0}Nome da camada: {1}" #: ../share/extensions/jessyInk_summary.py:101 msgid "{0}Transition in: {1} ({2!s} s)" -msgstr "" +msgstr "{0}Transição de entrada: {1} ({2!s} s)" #: ../share/extensions/jessyInk_summary.py:103 -#, fuzzy, python-brace-format +#, python-brace-format msgid "{0}Transition in: {1}" -msgstr "Informação" +msgstr "{0}Transição de entrada: {1}" #: ../share/extensions/jessyInk_summary.py:110 msgid "{0}Transition out: {1} ({2!s} s)" -msgstr "" +msgstr "{0}Transição de saída: {1} ({2!s} s)" #: ../share/extensions/jessyInk_summary.py:112 -#, fuzzy, python-brace-format +#, python-brace-format msgid "{0}Transition out: {1}" -msgstr "Colar efeito de caminho ao vivo" +msgstr "{0}Transição de saída: {1}" #: ../share/extensions/jessyInk_summary.py:119 #, python-brace-format @@ -34414,11 +32506,13 @@ msgid "" "\n" "{0}Auto-texts:" msgstr "" +"\n" +"{0}Textos automáticos:" #: ../share/extensions/jessyInk_summary.py:122 #, python-brace-format msgid "{0}\t\"{1}\" (object id \"{2}\") will be replaced by \"{3}\"." -msgstr "" +msgstr "{0}\t\"{1}\" (o id \"{2}\" do objeto) será substituido por \"{3}\"." #: ../share/extensions/jessyInk_summary.py:167 #, python-brace-format @@ -34426,54 +32520,55 @@ msgid "" "\n" "{0}Initial effect (order number {1}):" msgstr "" +"\n" +"{0}Efeito inicial (número {1} da ordem):" #: ../share/extensions/jessyInk_summary.py:169 msgid "" "\n" "{0}Effect {1!s} (order number {2}):" msgstr "" +"\n" +"{0}Efeito {1!s} (número {2} da ordem):" #: ../share/extensions/jessyInk_summary.py:173 #, python-brace-format msgid "{0}\tView will be set according to object \"{1}\"" -msgstr "" +msgstr "{0}\tA vista será definida de acordo com o objeto \"{1}\"" #: ../share/extensions/jessyInk_summary.py:175 #, python-brace-format msgid "{0}\tObject \"{1}\"" -msgstr "" +msgstr "{0}\tObjeto \"{1}\"" #: ../share/extensions/jessyInk_summary.py:178 -#, fuzzy msgid " will appear" -msgstr "Preencher área fechada" +msgstr " irá aparecer" #: ../share/extensions/jessyInk_summary.py:180 msgid " will disappear" -msgstr "" +msgstr " irá desaparecer" #: ../share/extensions/jessyInk_summary.py:183 #, python-brace-format msgid " using effect \"{0}\"" -msgstr "" +msgstr " usando o efeito \"{0}\"" #: ../share/extensions/jessyInk_summary.py:186 msgid " in {0!s} s" -msgstr "" +msgstr " em {0!s} s" #: ../share/extensions/jessyInk_transitions.py:54 -#, fuzzy msgid "Layer not found.\n" -msgstr "Camada para o topo" +msgstr "Camada não encontrada.\n" #: ../share/extensions/jessyInk_transitions.py:56 msgid "More than one layer with this name found.\n" -msgstr "" +msgstr "Encontrada mais do que 1 camada com este nome.\n" #: ../share/extensions/jessyInk_transitions.py:69 -#, fuzzy msgid "Please enter a layer name.\n" -msgstr "Você deve informar um nome de ficheiro" +msgstr "Introduza um nome de camada.\n" #: ../share/extensions/jessyInk_video.py:52 #: ../share/extensions/jessyInk_video.py:57 @@ -34481,29 +32576,31 @@ msgid "" "Could not obtain the selected layer for inclusion of the video element.\n" "\n" msgstr "" +"Não foi possível obter a camada selecionada para a inclusão do elemento de " +"vídeo.\n" +"\n" #: ../share/extensions/jessyInk_view.py:74 -#, fuzzy msgid "More than one object selected. Please select only one object.\n" -msgstr "" -"Mais de um objecto seleccionado. Não é possível obter o estilo a " -"partir de múltiplos objectos." +msgstr "Mais do que um objeto selecionado. Selecione apenas 1 objeto.\n" #: ../share/extensions/jessyInk_view.py:78 msgid "" "No object selected. Please select the object you want to assign a view to " "and then press apply.\n" msgstr "" +"Nenhum objeto selecionado. Selecione o objeto no qual pretende atribuir uma " +"vista e então clicar em Aplicar.\n" #: ../share/extensions/markers_strokepaint.py:82 #, python-format msgid "No style attribute found for id: %s" -msgstr "" +msgstr "Não foi encontrado nenhum atributo de estilo para o ID: %s" #: ../share/extensions/markers_strokepaint.py:136 #, python-format msgid "unable to locate marker: %s" -msgstr "" +msgstr "não foi possível encontrar o marcador: %s" #: ../share/extensions/measure.py:57 msgid "" @@ -34511,33 +32608,40 @@ msgid "" "extension. Please install them and try again. On a Debian-like system this " "can be done with the command, sudo apt-get install python-numpy." msgstr "" +"Não foi possível importar os módulos numpy. Estes módulos são necessários " +"para esta extensão. Instale-os e tente de novo. Num sistema Debian ou " +"similar isto pode ser feito com o comando 'sudo apt-get install python-" +"numpy'." #: ../share/extensions/measure.py:119 msgid "Area is zero, cannot calculate Center of Mass" -msgstr "" +msgstr "A área é zero, não é possível calcular o Centro da Massa" #: ../share/extensions/pathalongpath.py:207 #: ../share/extensions/pathscatter.py:226 ../share/extensions/perspective.py:50 -#, fuzzy msgid "This extension requires two selected paths." -msgstr "União entre os caminhos seleccionados" +msgstr "Esta extensão requer 2 caminhos selecionados." #: ../share/extensions/pathalongpath.py:233 msgid "" "The total length of the pattern is too small :\n" "Please choose a larger object or set 'Space between copies' > 0" msgstr "" +"O comprimento total do padrão é demasiado pequeno:\n" +"Escolha um objeto maior ou altere o 'Espaço entre cópias' > 0" #: ../share/extensions/pathalongpath.py:276 msgid "" "The 'stretch' option requires that the pattern must have non-zero width :\n" "Please edit the pattern width." msgstr "" +"A opção 'esticar' necessita que o padrão tenha uma largura não zero:\n" +"Edite a largura do padrão." #: ../share/extensions/pathmodifier.py:235 #, python-format msgid "Please first convert objects to paths! (Got [%s].)" -msgstr "" +msgstr "Converta primeiro os objetos em caminhos! (Obtido [%s].)" #: ../share/extensions/perspective.py:42 msgid "" @@ -34546,6 +32650,10 @@ msgid "" "like system this can be done with the command, sudo apt-get install python-" "numpy." msgstr "" +"Não foi possível importar o módulo numpy ou numpy.linalg. Estes módulos são " +"necessários para esta extensão. Instale-os e tente de novo. Num sistema " +"Debian ou similar isto pode ser feito com o comando 'sudo apt-get install " +"python-numpy'." #: ../share/extensions/perspective.py:58 ../share/extensions/summersnight.py:49 #, python-format @@ -34553,64 +32661,81 @@ msgid "" "The first selected object is of type '%s'.\n" "Try using the procedure Path->Object to Path." msgstr "" +"O primeiro objeto selecionado é do tipo '%s'.\n" +"Tente usar o menu Caminho->Converter Objeto num Caminho." #: ../share/extensions/perspective.py:65 ../share/extensions/summersnight.py:57 msgid "" "This extension requires that the second selected path be four nodes long." msgstr "" +"Esta extensão necessita que o segundo caminho contenha pelo menos 4 nós." #: ../share/extensions/perspective.py:91 ../share/extensions/summersnight.py:90 msgid "" "The second selected object is a group, not a path.\n" "Try using the procedure Object->Ungroup." msgstr "" +"O segundo objeto selecionado está num grupo, não num caminho.\n" +"Tente usar o menu Objeto->Desagrupar." #: ../share/extensions/perspective.py:93 ../share/extensions/summersnight.py:92 msgid "" "The second selected object is not a path.\n" "Try using the procedure Path->Object to Path." msgstr "" +"O segundo objeto selecionado não é um caminho.\n" +"Tente usar o menu Caminho->Converter Objeto num Caminho." #: ../share/extensions/perspective.py:96 ../share/extensions/summersnight.py:95 msgid "" "The first selected object is not a path.\n" "Try using the procedure Path->Object to Path." msgstr "" +"O primeiro objeto selecionado não é um caminho.\n" +"Tente usar o menu Caminho->Converter Objeto num Caminho." #. issue error if no paths found #: ../share/extensions/plotter.py:68 msgid "" "No paths where found. Please convert all objects you want to plot into paths." msgstr "" +"Não foram encontrados caminhos. Converta todos os objetos que quer converter " +"em caminhos." #: ../share/extensions/plotter.py:146 msgid "pySerial is not installed. Please follow these steps:" -msgstr "" +msgstr "O pySerial não está instalado. Siga estes passos:" #: ../share/extensions/plotter.py:147 msgid "1. Download and extract (unzip) this file to your local harddisk:" -msgstr "" +msgstr "1. Descarregar e extrair este ficheiro ZIP para o disco rígido:" #: ../share/extensions/plotter.py:149 msgid "" "2. Copy the \"serial\" folder (Can be found inside the just extracted folder)" msgstr "" +"2. Copiar a pasta \"serial\" (encontra-se na pasta para onde se extraiu o " +"ficheiro ZIP)" #: ../share/extensions/plotter.py:150 msgid "" " into the following Inkscape folder: C:\\[Program files]\\inkscape\\python" "\\Lib\\" msgstr "" +" para a seguinte pasta do Inkscape: C:\\[Programas]\\inkscape\\python\\Lib" +"\\" #: ../share/extensions/plotter.py:151 msgid "3. Close and restart Inkscape." -msgstr "" +msgstr "3. Fechar e reabrir o Inkscape" #: ../share/extensions/plotter.py:200 msgid "" "Could not open port. Please check that your plotter is running, connected " "and the settings are correct." msgstr "" +"Não foi possível abrir a porta. Verifique que a plotter está ligada, com os " +"cabos ligados e se as configurações estão corretas." #: ../share/extensions/polyhedron_3d.py:64 msgid "" @@ -34618,22 +32743,27 @@ msgid "" "extension. Please install it and try again. On a Debian-like system this " "can be done with the command 'sudo apt-get install python-numpy'." msgstr "" +"Não foi possível importar o módulo numpy. Este módulo é necessário para esta " +"extensão. Instale-o e tente de novo. Num sistema Debian ou similar isto pode " +"ser feito com o comando 'sudo apt-get install python-numpy'." #: ../share/extensions/polyhedron_3d.py:335 msgid "No face data found in specified file." -msgstr "" +msgstr "Não foram encontrados dados de faces no ficheiro especificado." #: ../share/extensions/polyhedron_3d.py:336 msgid "Try selecting \"Edge Specified\" in the Model File tab.\n" msgstr "" +"Tente selecionar \"Especificado pelas Bordas\" na aba Ficheiro de Modelo.\n" #: ../share/extensions/polyhedron_3d.py:342 msgid "No edge data found in specified file." -msgstr "" +msgstr "Não foram encontrados dados de bordas no ficheiro especificado." #: ../share/extensions/polyhedron_3d.py:343 msgid "Try selecting \"Face Specified\" in the Model File tab.\n" msgstr "" +"Tente selecionar \"Especificado pelas Faces\" na aba Ficheiro de Modelo.\n" #. we cannot generate a list of faces from the edges without a lot of computation #: ../share/extensions/polyhedron_3d.py:522 @@ -34641,56 +32771,59 @@ msgid "" "Face Data Not Found. Ensure file contains face data, and check the file is " "imported as \"Face-Specified\" under the \"Model File\" tab.\n" msgstr "" +"Não foram encontrados dados de faces. Confirme se o ficheir contém dados de " +"faces, e verifique se o ficheiro é importado como \"Especificado pelas Faces" +"\" na aba \"Ficheiro de Modelo\".\n" #: ../share/extensions/polyhedron_3d.py:524 msgid "Internal Error. No view type selected\n" -msgstr "" +msgstr "Erro Interno. Nenhum tipo de vista selecionada\n" #: ../share/extensions/print_win32_vector.py:39 msgid "sorry, this will run only on Windows, exiting..." -msgstr "" +msgstr "desculpe, isto funciona apenas em Windows, a sair..." #: ../share/extensions/print_win32_vector.py:177 -#, fuzzy msgid "Failed to open default printer" -msgstr "Criar degradê padrão" +msgstr "Não foi possível abrir a impressora padrão" #: ../share/extensions/render_barcode_datamatrix.py:201 msgid "Unrecognised DataMatrix size" -msgstr "" +msgstr "Tamanho não reconhecido da Matriz de Dados." #. we have an invalid bit value #: ../share/extensions/render_barcode_datamatrix.py:642 msgid "Invalid bit value, this is a bug!" -msgstr "" +msgstr "Valor de bit inválido, isto é um erro!" #. abort if converting blank text #: ../share/extensions/render_barcode_datamatrix.py:677 msgid "Please enter an input string" -msgstr "" +msgstr "Introduza uma expressão de entrada" #. abort if converting blank text #: ../share/extensions/render_barcode_qrcode.py:1053 -#, fuzzy msgid "Please enter an input text" -msgstr "Você deve informar um nome de ficheiro" +msgstr "Introduza um texto de entrada" #: ../share/extensions/replace_font.py:131 msgid "" "Couldn't find anything using that font, please ensure the spelling and " "spacing is correct." msgstr "" +"Não foi encontrado nada que utilize essa fonte. Confirmar se a grafia e os " +"espaços estão corretos." #: ../share/extensions/replace_font.py:138 #: ../share/extensions/svg_and_media_zip_output.py:193 msgid "Didn't find any fonts in this document/selection." -msgstr "" +msgstr "Não foram encontradas fontes neste documento/seleção." #: ../share/extensions/replace_font.py:141 #: ../share/extensions/svg_and_media_zip_output.py:196 #, python-format msgid "Found the following font only: %s" -msgstr "" +msgstr "Foi encontrada apenas a seguinte fonte: %s" #: ../share/extensions/replace_font.py:143 #: ../share/extensions/svg_and_media_zip_output.py:198 @@ -34699,45 +32832,46 @@ msgid "" "Found the following fonts:\n" "%s" msgstr "" +"Foram encontradas as seguintes fontes:\n" +"%s" #: ../share/extensions/replace_font.py:194 -#, fuzzy msgid "There was nothing selected" -msgstr "Nenhum objecto seleccionado" +msgstr "Não estava nada selecionado" #: ../share/extensions/replace_font.py:242 msgid "Please enter a search string in the find box." -msgstr "" +msgstr "Introduza uma expressão a pesquisar na caixa de pesquisa." #: ../share/extensions/replace_font.py:246 msgid "Please enter a replacement font in the replace with box." -msgstr "" +msgstr "Introduza uma fonte de substituição na caixa de substituir." #: ../share/extensions/replace_font.py:251 msgid "Please enter a replacement font in the replace all box." -msgstr "" +msgstr "Introduza uma fonte de substituição na caixa de substituir tudo." #: ../share/extensions/restack.py:75 -#, fuzzy msgid "There is no selection to restack." -msgstr "Levantar a selecção para o topo" +msgstr "Não é nenhuma selecção para tornar a empilhar." #: ../share/extensions/summersnight.py:41 -#, fuzzy msgid "" "This extension requires two selected paths. \n" "The second path must be exactly four nodes long." -msgstr "União entre os caminhos seleccionados" +msgstr "" +"Esta extensão necessita de 2 caminhos selecionados. \n" +"O segundo caminho tem de ter exatamente 4 nós." #: ../share/extensions/svg_and_media_zip_output.py:128 -#, fuzzy, python-format +#, python-format msgid "Could not locate file: %s" -msgstr "Não foi possível exportar para o ficheiro %s.\n" +msgstr "Não foi possível localizar o ficheiro: %s" #: ../share/extensions/svgcalendar.py:265 #: ../share/extensions/svgcalendar.py:287 msgid "You must select a correct system encoding." -msgstr "" +msgstr "Tem de selecionar uma codificação de sistema correta." #: ../share/extensions/uniconv-ext.py:54 #: ../share/extensions/uniconv_output.py:121 @@ -34748,72 +32882,77 @@ msgid "" "http://sk1project.org/modules.php?name=Products&product=uniconvertor\n" "and install into your Inkscape's Python location\n" msgstr "" +"É necessário instalar o programa UniConvertor.\n" +"Em GNU/Linux: instalar o pacote python-uniconvertor.\n" +"Em Windows: descarregar em\n" +"http://sk1project.org/modules.php?name=Products&product=uniconvertor\n" +"e instalar na localização do Python no Inkscape\n" #: ../share/extensions/voronoi2svg.py:205 -#, fuzzy msgid "Please select objects!" -msgstr "Duplicar os objectos seleccionados" +msgstr "Por favor selecione os objetos!" #: ../share/extensions/web-set-att.py:56 #: ../share/extensions/web-transmit-att.py:53 msgid "You must select at least two elements." -msgstr "" +msgstr "Tem de selecionar pelo menos 2 elementos." #: ../share/extensions/webslicer_create_group.py:55 msgid "" "You must create and select some \"Slicer rectangles\" before trying to group." msgstr "" +"É necessário criar e selecionar alguns \"Retângulos fatiados\" antes de " +"tentar agrupar." #: ../share/extensions/webslicer_create_group.py:70 msgid "" "You must to select some \"Slicer rectangles\" or other \"Layout groups\"." msgstr "" +"É necessário selecionar alguns \"Retângulos fatiados\" ou outros \"Grupos de " +"layout\"" #: ../share/extensions/webslicer_create_group.py:74 #, python-format msgid "Oops... The element \"%s\" is not in the Web Slicer layer" -msgstr "" +msgstr "Oops... O elemento \"%s\" não está na camada Fatiador Web (Web Slicer)" #: ../share/extensions/webslicer_export.py:55 msgid "You must give a directory to export the slices." -msgstr "" +msgstr "Tem de indicar uma pasta para onde exportar as fatias." #: ../share/extensions/webslicer_export.py:67 -#, fuzzy, python-format +#, python-format msgid "Can't create \"%s\"." -msgstr "" -"Não foi possível criar o ficheiro %s.\n" -"%s" +msgstr "Não foi possível criar \"%s\"." #: ../share/extensions/webslicer_export.py:68 -#, fuzzy, python-format +#, python-format msgid "Error: %s" -msgstr "Erros" +msgstr "Erro: %s" #: ../share/extensions/webslicer_export.py:71 -#, fuzzy, python-format +#, python-format msgid "The directory \"%s\" does not exists." -msgstr "A pasta %s não existe ou não é uma pasta.\n" +msgstr "A pasta \"%s\" não existe." #: ../share/extensions/webslicer_export.py:76 -#, fuzzy msgid "No slicer layer found." -msgstr "Nenhuma camada actual." +msgstr "Não foi encontrada nenhuma camada de fatias." #: ../share/extensions/webslicer_export.py:106 #, python-format msgid "You have more than one element with \"%s\" html-id." -msgstr "" +msgstr "Tem mais do que um elemento com o id HTML \"%s\"." #: ../share/extensions/webslicer_export.py:336 msgid "You must install the ImageMagick to get JPG and GIF." -msgstr "" +msgstr "Tem de instalar o ImageMagick para poder usar JPG e GIF." #. PARAMETER PROCESSING #. lines of longitude are odd : abort #: ../share/extensions/wireframe_sphere.py:116 msgid "Please enter an even number of lines of longitude." -msgstr "" +msgstr "Introduzir um número par de linhas de longitude." #. vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 #: ../share/extensions/addnodes.inx.h:1 @@ -34821,24 +32960,20 @@ msgid "Add Nodes" msgstr "Adicionar Nós" #: ../share/extensions/addnodes.inx.h:2 -#, fuzzy msgid "Division method:" -msgstr "Divisão" +msgstr "Método de divisão:" #: ../share/extensions/addnodes.inx.h:3 -#, fuzzy msgid "By max. segment length" -msgstr "Comprimento máximo dos segmentos" +msgstr "Pelo comprimento máximo do segmento" #: ../share/extensions/addnodes.inx.h:5 -#, fuzzy msgid "Maximum segment length (px):" -msgstr "Comprimento máximo dos segmentos" +msgstr "Comprimento máximo do segmento (px):" #: ../share/extensions/addnodes.inx.h:6 -#, fuzzy msgid "Number of segments:" -msgstr "Número de passos" +msgstr "Número de segmentos:" #: ../share/extensions/addnodes.inx.h:7 #: ../share/extensions/convert2dashes.inx.h:2 @@ -34853,25 +32988,24 @@ msgstr "Número de passos" #: ../share/extensions/straightseg.inx.h:4 #: ../share/extensions/summersnight.inx.h:2 ../share/extensions/whirl.inx.h:4 msgid "Modify Path" -msgstr "Modificar Caminho" +msgstr "Alterar Caminho" #: ../share/extensions/ai_input.inx.h:1 msgid "AI 8.0 Input" -msgstr "Entrada AI 8.0" +msgstr "Importar AI 8.0" #: ../share/extensions/ai_input.inx.h:2 -#, fuzzy msgid "Adobe Illustrator 8.0 and below (*.ai)" -msgstr "Adobe Illustrator 8.0 (*.ai)" +msgstr "Adobe Illustrator 8.0 ou inferior (*.ai)" #: ../share/extensions/ai_input.inx.h:3 -#, fuzzy msgid "Open files saved with Adobe Illustrator 8.0 or older" -msgstr "Abrir ficheiros salvos com o Adobe Illustrator" +msgstr "" +"Abrir ficheiros gravados no Adobe Illustrator 8.0 ou versões inferiores" #: ../share/extensions/aisvg.inx.h:1 msgid "AI SVG Input" -msgstr "Entrada AI SVG" +msgstr "Importar AI SVG" #: ../share/extensions/aisvg.inx.h:2 msgid "Adobe Illustrator SVG (*.ai.svg)" @@ -34883,103 +33017,93 @@ msgstr "Limpa as impurezas dos Adobe Illustrator SVGs antes de abrir" #: ../share/extensions/ccx_input.inx.h:1 msgid "Corel DRAW Compressed Exchange files input (UC)" -msgstr "" +msgstr "Importar Corel DRAW Compressed Exchange (UC)" #: ../share/extensions/ccx_input.inx.h:2 msgid "Corel DRAW Compressed Exchange files (UC) (*.ccx)" -msgstr "" +msgstr "Corel DRAW Compressed Exchange (UC) (*.ccx)" #: ../share/extensions/ccx_input.inx.h:3 -#, fuzzy msgid "Open compressed exchange files saved in Corel DRAW (UC)" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros Compressed Exchange gravados no Corel DRAW (UC)" #: ../share/extensions/cdr_input.inx.h:1 msgid "Corel DRAW Input (UC)" -msgstr "" +msgstr "Importar Corel DRAW (UC)" #: ../share/extensions/cdr_input.inx.h:2 msgid "Corel DRAW 7-X4 files (UC) (*.cdr)" -msgstr "" +msgstr "Corel DRAW 7-X4 (UC) (*.cdr)" #: ../share/extensions/cdr_input.inx.h:3 -#, fuzzy msgid "Open files saved in Corel DRAW 7-X4 (UC)" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros gravados no Corel DRAW 7-X4 (UC)" #: ../share/extensions/cdt_input.inx.h:1 msgid "Corel DRAW templates input (UC)" -msgstr "" +msgstr "Importar Corel DRAW template (UC)" #: ../share/extensions/cdt_input.inx.h:2 msgid "Corel DRAW 7-13 template files (UC) (*.cdt)" -msgstr "" +msgstr "Corel DRAW 7-13 template (UC) (*.cdt)" #: ../share/extensions/cdt_input.inx.h:3 -#, fuzzy msgid "Open files saved in Corel DRAW 7-13 (UC)" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros gravados no Corel DRAW 7-13 (UC)" #: ../share/extensions/cgm_input.inx.h:1 msgid "Computer Graphics Metafile files input" -msgstr "" +msgstr "Importar Computer Graphics Metafile" #: ../share/extensions/cgm_input.inx.h:2 -#, fuzzy msgid "Computer Graphics Metafile files (*.cgm)" -msgstr "Ficheiro XFIG Graphics (*.fig)" +msgstr "Computer Graphics Metafile (*.cgm)" #: ../share/extensions/cgm_input.inx.h:3 msgid "Open Computer Graphics Metafile files" -msgstr "" +msgstr "Ficheiros Open Computer Graphics Metafile" #: ../share/extensions/cmx_input.inx.h:1 msgid "Corel DRAW Presentation Exchange files input (UC)" -msgstr "" +msgstr "Importar Corel DRAW Presentation Exchange (UC)" #: ../share/extensions/cmx_input.inx.h:2 msgid "Corel DRAW Presentation Exchange files (UC) (*.cmx)" -msgstr "" +msgstr "Corel DRAW Presentation Exchange (UC) (*.cmx)" #: ../share/extensions/cmx_input.inx.h:3 -#, fuzzy msgid "Open presentation exchange files saved in Corel DRAW (UC)" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros presentation exchange gravados no Corel DRAW (UC)" #: ../share/extensions/color_HSL_adjust.inx.h:1 -#, fuzzy msgid "HSL Adjust" -msgstr "Ajustar matiz" +msgstr "Ajuste HSL" #: ../share/extensions/color_HSL_adjust.inx.h:3 -#, fuzzy msgid "Hue (°)" -msgstr "Rotação (graus)" +msgstr "Matiz (°)" #: ../share/extensions/color_HSL_adjust.inx.h:4 -#, fuzzy msgid "Random hue" -msgstr "Ãrvore Aleatória" +msgstr "Matiz aleatória" #: ../share/extensions/color_HSL_adjust.inx.h:6 -#, fuzzy, no-c-format +#, no-c-format msgid "Saturation (%)" -msgstr "Saturação" +msgstr "Saturação (%)" #: ../share/extensions/color_HSL_adjust.inx.h:7 -#, fuzzy msgid "Random saturation" -msgstr "Ajustar saturação" +msgstr "Saturação aleatória" #: ../share/extensions/color_HSL_adjust.inx.h:9 -#, fuzzy, no-c-format +#, no-c-format msgid "Lightness (%)" -msgstr "Brilho" +msgstr "Luminosidade (%)" #: ../share/extensions/color_HSL_adjust.inx.h:10 -#, fuzzy msgid "Random lightness" -msgstr "Luminosidade" +msgstr "Luminosidade aleatória" #: ../share/extensions/color_HSL_adjust.inx.h:13 #, no-c-format @@ -34993,44 +33117,48 @@ msgid "" " * Random Hue/Saturation/Lightness: randomize the parameter's value.\n" " " msgstr "" +"Ajusta a matiz, saturação e luminosidade na representação HSL da cor dos " +"objetos selecionados.\n" +"Opções:\n" +" * Matiz: rodar em graus (roda à volta).\n" +" * Saturação: adicionar/subtrair % (mín=-100, máx=100).\n" +" * Luminosidade: adicionar/subtrair % (mín=-100, máx=100).\n" +" * Matiz/Saturação/Luminosidade aleatórios: atribuir valor aleatório ao " +"parâmetro.\n" +" " #: ../share/extensions/color_blackandwhite.inx.h:1 -#, fuzzy msgid "Black and White" -msgstr "Inverter regiões pretas e brancas para traçados simples" +msgstr "Preto e Branco" #: ../share/extensions/color_blackandwhite.inx.h:2 msgid "Threshold Color (1-255):" -msgstr "" +msgstr "Limiar de Cor (1-255):" #: ../share/extensions/color_brighter.inx.h:1 msgid "Brighter" msgstr "Mais claro" #: ../share/extensions/color_custom.inx.h:1 -#, fuzzy msgctxt "Custom color extension" msgid "Custom" -msgstr "_Personalizado" +msgstr "Personalizado" #: ../share/extensions/color_custom.inx.h:3 -#, fuzzy msgid "Red Function:" -msgstr "Função Vermelho" +msgstr "Função Vermelho:" #: ../share/extensions/color_custom.inx.h:4 -#, fuzzy msgid "Green Function:" -msgstr "Função Verde" +msgstr "Função Verde:" #: ../share/extensions/color_custom.inx.h:5 -#, fuzzy msgid "Blue Function:" -msgstr "Função Azul" +msgstr "Função Azul:" #: ../share/extensions/color_custom.inx.h:6 msgid "Input (r,g,b) Color Range:" -msgstr "" +msgstr "Intervalo de cor (r,g,b) de entrada:" #: ../share/extensions/color_custom.inx.h:8 msgid "" @@ -35043,6 +33171,15 @@ msgid "" " Green Function: b \n" " Blue Function: g" msgstr "" +"Permite avaliar diferentes funções para cada canal.\n" +"r, g e b são os valores normalizados dos canais vermelho, verde e azul. Os " +"valores RGB resultantes são processados automaticamente para caberem no " +"intervalo.\n" +" \n" +"Exemplo (metade do vermelho, troca do verde e azul):\n" +" Função Vermelho: r*0.5 \n" +" Função Verde: b \n" +" Função Azul: g" #: ../share/extensions/color_darker.inx.h:1 msgid "Darker" @@ -35059,7 +33196,7 @@ msgstr "Escala de cinzas" #: ../share/extensions/color_lesshue.inx.h:1 msgid "Less Hue" -msgstr "Menos Gama" +msgstr "Menos Matiz" #: ../share/extensions/color_lesslight.inx.h:1 msgid "Less Light" @@ -35071,7 +33208,7 @@ msgstr "Menos Saturação" #: ../share/extensions/color_morehue.inx.h:1 msgid "More Hue" -msgstr "Mais Gama" +msgstr "Mais Matiz" #: ../share/extensions/color_morelight.inx.h:1 msgid "More Light" @@ -35087,29 +33224,28 @@ msgstr "Negativo" #: ../share/extensions/color_randomize.inx.h:1 #: ../share/extensions/render_alphabetsoup.inx.h:4 -#, fuzzy msgid "Randomize" -msgstr "Aleatório:" +msgstr "Aleatório" #: ../share/extensions/color_randomize.inx.h:4 -#, fuzzy, no-c-format +#, no-c-format msgid "Hue range (%)" -msgstr "Rotação (graus)" +msgstr "Intervalo da matiz (%)" #: ../share/extensions/color_randomize.inx.h:6 -#, fuzzy, no-c-format +#, no-c-format msgid "Saturation range (%)" -msgstr "Saturação" +msgstr "Intervalo da saturação (%)" #: ../share/extensions/color_randomize.inx.h:8 -#, fuzzy, no-c-format +#, no-c-format msgid "Lightness range (%)" -msgstr "Brilho" +msgstr "Intervalo da luminosidade (%)" #: ../share/extensions/color_randomize.inx.h:10 -#, fuzzy, no-c-format +#, no-c-format msgid "Opacity range (%)" -msgstr "Opacidade, %" +msgstr "Intervalo da opacidade (%)" #: ../share/extensions/color_randomize.inx.h:12 msgid "" @@ -35117,6 +33253,9 @@ msgid "" "only for objects and groups). Change the range values to limit the distance " "between the original color and the randomized one." msgstr "" +"Atribui valores aleatórios à matiz, saturação, luminosidade e/ou opacidade " +"(opacidade aleatória apenas em objetos e grupos). Alterar os valores do " +"intervalo para limitar a distância entre a cor original e a cor aleatória." #: ../share/extensions/color_removeblue.inx.h:1 msgid "Remove Blue" @@ -35131,53 +33270,48 @@ msgid "Remove Red" msgstr "Remover Vermelho" #: ../share/extensions/color_replace.inx.h:1 -#, fuzzy msgid "Replace color" -msgstr "Substituir cor..." +msgstr "Substituir cor" #: ../share/extensions/color_replace.inx.h:2 msgid "Replace color (RRGGBB hex):" msgstr "Substituir cor (RRGGBB hex):" #: ../share/extensions/color_replace.inx.h:3 -#, fuzzy msgid "Color to replace" -msgstr "Cor das linhas de grelha" +msgstr "Cor a substituir" #: ../share/extensions/color_replace.inx.h:4 msgid "By color (RRGGBB hex):" -msgstr "Por cor (RRGGBB hex):" +msgstr "Pela cor (RRGGBB hex):" #: ../share/extensions/color_replace.inx.h:5 -#, fuzzy msgid "New color" -msgstr "Soltar cor" +msgstr "Nova cor" #: ../share/extensions/color_rgbbarrel.inx.h:1 msgid "RGB Barrel" msgstr "Barril RGB" #: ../share/extensions/convert2dashes.inx.h:1 -#, fuzzy msgid "Convert to Dashes" -msgstr "Converter para Texto" +msgstr "Converter para Traços" #: ../share/extensions/dhw_input.inx.h:1 -#, fuzzy msgid "DHW file input" -msgstr "Entrada de Metafile do Windows" +msgstr "Importar DHW" #: ../share/extensions/dhw_input.inx.h:2 msgid "ACECAD Digimemo File (*.dhw)" -msgstr "" +msgstr "ACECAD Digimemo (*.dhw)" #: ../share/extensions/dhw_input.inx.h:3 msgid "Open files from ACECAD Digimemo" -msgstr "" +msgstr "Abrir ficheiros de ACECAD Digimemo" #: ../share/extensions/dia.inx.h:1 msgid "Dia Input" -msgstr "Entrada DIA" +msgstr "Importar DIA" #: ../share/extensions/dia.inx.h:2 msgid "" @@ -35185,16 +33319,16 @@ msgid "" "If you do not have it, there is likely to be something wrong with your " "Inkscape installation." msgstr "" -"O script dia2svg.sh deve ter sido instalado juntamente com o Inkscape. Se " -"não o possue, há algo errado com sua instalação do Inkscape." +"O script dia2svg.sh é instalado automaticamente com o Inkscape. Se não o " +"tem, há algo errado com sua instalação do Inkscape." #: ../share/extensions/dia.inx.h:3 msgid "" "In order to import Dia files, Dia itself must be installed. You can get Dia " "at http://live.gnome.org/Dia" msgstr "" -"Para importar ficheiros Dia, o próprio Dia ser instalado. Você pode obtê-lo " -"em http://live.gnome.org/Dia" +"Para importar ficheiros Dia, o programa Dia tem de estar instalado. Pode " +"obtê-lo em http://live.gnome.org/Dia" #: ../share/extensions/dia.inx.h:4 msgid "Dia Diagram (*.dia)" @@ -35205,58 +33339,49 @@ msgid "A diagram created with the program Dia" msgstr "Um diagrama criado com o programa Dia" #: ../share/extensions/dimension.inx.h:1 -#, fuzzy msgid "Dimensions" -msgstr "Divisão" +msgstr "Dimensões" #: ../share/extensions/dimension.inx.h:2 -#, fuzzy msgid "X Offset:" -msgstr "Deslocamentos" +msgstr "Deslocamento X:" #: ../share/extensions/dimension.inx.h:3 -#, fuzzy msgid "Y Offset:" -msgstr "Deslocamentos" +msgstr "Deslocamento Y:" #: ../share/extensions/dimension.inx.h:4 -#, fuzzy msgid "Bounding box type:" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Tipo de caixa limitadora:" #: ../share/extensions/dimension.inx.h:5 -#, fuzzy msgid "Geometric" -msgstr "Aumentar ajuste" +msgstr "Geométrico" #: ../share/extensions/dimension.inx.h:6 -#, fuzzy msgid "Visual" -msgstr "Visualizando Caminho" +msgstr "Visual" #: ../share/extensions/dimension.inx.h:7 ../share/extensions/dots.inx.h:13 #: ../share/extensions/handles.inx.h:2 ../share/extensions/measure.inx.h:42 msgid "Visualize Path" -msgstr "Visualizando Caminho" +msgstr "Visualizar Caminho" #: ../share/extensions/dots.inx.h:1 msgid "Number Nodes" msgstr "Numerar Nós" #: ../share/extensions/dots.inx.h:4 -#, fuzzy msgid "Dot size:" -msgstr "Tamanho do ponto" +msgstr "Tamanho do ponto:" #: ../share/extensions/dots.inx.h:5 -#, fuzzy msgid "Starting dot number:" -msgstr "Ângulo da caneta" +msgstr "Começo do número do ponto:" #: ../share/extensions/dots.inx.h:6 -#, fuzzy msgid "Step:" -msgstr "Passos" +msgstr "Passo:" #: ../share/extensions/dots.inx.h:8 msgid "" @@ -35268,169 +33393,152 @@ msgid "" "first node of the path.\n" " * Step: numbering step between two nodes." msgstr "" +"Esta extensão substitui os nós da seleção por pontos numerados de acordo com " +"as seguintes opções:\n" +" * Tamanho da fonte: tamanho das etiquetas do número dos pontos (20px, " +"12pt...).\n" +" * Tamanho do ponto: diâmetro dos pontos colocados nos nós do caminho " +"(10px, 2mm...).\n" +" * Número inicial do ponto: primeiro número na sequência, atribuído ao " +"primeiro nó do caminho.\n" +" * Passo: intervalo de número entre 2 nós." #: ../share/extensions/draw_from_triangle.inx.h:1 -#, fuzzy msgid "Draw From Triangle" -msgstr "Único" +msgstr "Desenhar do Triângulo" #: ../share/extensions/draw_from_triangle.inx.h:2 -#, fuzzy msgid "Common Objects" -msgstr "Objectos" +msgstr "Objetos Comuns" #: ../share/extensions/draw_from_triangle.inx.h:3 -#, fuzzy msgid "Circumcircle" -msgstr "Círculo" +msgstr "Circuncírculo" #: ../share/extensions/draw_from_triangle.inx.h:4 -#, fuzzy msgid "Circumcentre" -msgstr "Desenho SVG" +msgstr "Circuncentro" #: ../share/extensions/draw_from_triangle.inx.h:5 -#, fuzzy msgid "Incircle" -msgstr "círculo" +msgstr "Círculo Inscrito" #: ../share/extensions/draw_from_triangle.inx.h:6 -#, fuzzy msgid "Incentre" -msgstr "Indentar nó" +msgstr "Centro Inscrito" #: ../share/extensions/draw_from_triangle.inx.h:7 -#, fuzzy msgid "Contact Triangle" -msgstr "Único" +msgstr "Triângulo de Contacto" #: ../share/extensions/draw_from_triangle.inx.h:8 -#, fuzzy msgid "Excircles" -msgstr "círculo" +msgstr "Círculo Exinscrito" #: ../share/extensions/draw_from_triangle.inx.h:9 -#, fuzzy msgid "Excentres" -msgstr "Extrudir" +msgstr "Centro Exinscrito" #: ../share/extensions/draw_from_triangle.inx.h:10 -#, fuzzy msgid "Extouch Triangle" -msgstr "Único" +msgstr "Triângulo Extoque" #: ../share/extensions/draw_from_triangle.inx.h:11 -#, fuzzy msgid "Excentral Triangle" -msgstr "Único" +msgstr "Triângulo Excentral" #: ../share/extensions/draw_from_triangle.inx.h:12 -#, fuzzy msgid "Orthocentre" -msgstr "Outro" +msgstr "Ortocentro" #: ../share/extensions/draw_from_triangle.inx.h:13 -#, fuzzy msgid "Orthic Triangle" -msgstr "Único" +msgstr "Triângulo Órtico" #: ../share/extensions/draw_from_triangle.inx.h:14 -#, fuzzy msgid "Altitudes" -msgstr "Amplitude" +msgstr "Altitudes" #: ../share/extensions/draw_from_triangle.inx.h:15 -#, fuzzy msgid "Angle Bisectors" -msgstr "Divisão" +msgstr "Bissetriz" #: ../share/extensions/draw_from_triangle.inx.h:16 -#, fuzzy msgid "Centroid" -msgstr "Centralizar" +msgstr "Centróide" #: ../share/extensions/draw_from_triangle.inx.h:17 msgid "Nine-Point Centre" -msgstr "" +msgstr "Centro de 9 Pontos" #: ../share/extensions/draw_from_triangle.inx.h:18 msgid "Nine-Point Circle" -msgstr "" +msgstr "Círculo de 9 Pontos" #: ../share/extensions/draw_from_triangle.inx.h:19 msgid "Symmedians" -msgstr "" +msgstr "Simedianos" #: ../share/extensions/draw_from_triangle.inx.h:20 -#, fuzzy msgid "Symmedian Point" -msgstr "Texto vertical" +msgstr "Ponto Simediano" #: ../share/extensions/draw_from_triangle.inx.h:21 -#, fuzzy msgid "Symmedial Triangle" -msgstr "Único" +msgstr "Triângulo Simedial" #: ../share/extensions/draw_from_triangle.inx.h:22 -#, fuzzy msgid "Gergonne Point" -msgstr "Pintura de Traço" +msgstr "Ponto de Gergonne" #: ../share/extensions/draw_from_triangle.inx.h:23 -#, fuzzy msgid "Nagel Point" -msgstr "Ponto Negro" +msgstr "Ponto de Nagel" #: ../share/extensions/draw_from_triangle.inx.h:24 -#, fuzzy msgid "Custom Points and Options" -msgstr "Opções da Linha de Comando" +msgstr "Pontos Personalizados e Opções" #: ../share/extensions/draw_from_triangle.inx.h:25 msgid "Custom Point Specified By:" -msgstr "" +msgstr "Ponto Personalizado Especificado Por:" #: ../share/extensions/draw_from_triangle.inx.h:26 -#, fuzzy msgid "Point At:" -msgstr "Pontos Em" +msgstr "Ponto em:" #: ../share/extensions/draw_from_triangle.inx.h:27 msgid "Draw Marker At This Point" -msgstr "" +msgstr "Desenhar Marcador Neste Ponto" #: ../share/extensions/draw_from_triangle.inx.h:28 msgid "Draw Circle Around This Point" -msgstr "" +msgstr "Desenhar Círculo À Volta Deste Ponto" #: ../share/extensions/draw_from_triangle.inx.h:29 #: ../share/extensions/wireframe_sphere.inx.h:6 -#, fuzzy msgid "Radius (px):" -msgstr "Raio" +msgstr "Raio (px):" #: ../share/extensions/draw_from_triangle.inx.h:30 msgid "Draw Isogonal Conjugate" -msgstr "" +msgstr "Desenhar Conjugador Isogonal" #: ../share/extensions/draw_from_triangle.inx.h:31 msgid "Draw Isotomic Conjugate" -msgstr "" +msgstr "Desenhar Conjugador Isotómico" #: ../share/extensions/draw_from_triangle.inx.h:32 -#, fuzzy msgid "Report this triangle's properties" -msgstr "Definir propriedades da guia" +msgstr "Reportar as propriedades deste triângulo" #: ../share/extensions/draw_from_triangle.inx.h:33 -#, fuzzy msgid "Trilinear Coordinates" -msgstr "Coordenadas do cursor" +msgstr "Coordenadas Trilineares" #: ../share/extensions/draw_from_triangle.inx.h:34 -#, fuzzy msgid "Triangle Function" -msgstr "Função Azul" +msgstr "Função Triangulo" #: ../share/extensions/draw_from_triangle.inx.h:36 msgid "" @@ -35464,42 +33572,70 @@ msgid "" "may cause a divide-by-zero error for certain points.\n" " " msgstr "" +"Esta extensão desenha construções à volta de um triângulo definido pelos " +"primeiros 3 nós de um caminho selecionado. Pode-se selecionar um dos objetos " +"presentes ou criar outros.\n" +" \n" +"Todas as unidades estão na unidade de píxel do Inkscape. Os ângulos estão " +"todos em radianos.\n" +"Pode-se especificar um ponto por coordenadas trilineares ou por uma função " +"de centro do triângulo.\n" +"Introduzir como funções do comprimento do lado ou ângulos.\n" +"Os elementos trilineares devem ser separados por dois pontos (':').\n" +"Os comprimentos do lado são representados como 's_a', 's_b' e 's_c'.\n" +"Os ângulos correspondentes a estes são 'a_a', 'a_b', e 'a_c'.\n" +"Também se pode usar o semi-perímetro e a área do triângulo como constantes. " +"Digitar 'area' ou 'semiperim' para estes.\n" +"\n" +"Também se pode usar qualquer função matemática do Python Padrão:\n" +"ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); \n" +"modf(x); exp(x); log(x [, base]); log10(x); pow(x,y); sqrt(x); \n" +"acos(x); asin(x); atan(x); atan2(y,x); hypot(x,y); \n" +"cos(x); sin(x); tan(x); degrees(x); radians(x); \n" +"cosh(x); sinh(x); tanh(x)\n" +"\n" +"Também estáo disponíveis as funções de trigonometria inversa:\n" +"sec(x); csc(x); cot(x)\n" +"\n" +"Pode-se especificar o raio de um círculo à volta de um ponto personalizado " +"utilizando uma fórmula, que pode conter também o comprimento dos lados, " +"ângulos, etc. Pode-se também traçar o conjugado isogonal e isotómico do " +"ponto. Ter em conta que isto pode causar um erro de divisão-por-zero para " +"certos pontos.\n" +" " #: ../share/extensions/dxf_input.inx.h:1 msgid "DXF Input" -msgstr "Entrada DXF" +msgstr "Importar DXF" #: ../share/extensions/dxf_input.inx.h:3 msgid "Method of Scaling:" -msgstr "" +msgstr "Método de Escala:" #: ../share/extensions/dxf_input.inx.h:4 -#, fuzzy msgid "Manual scale factor:" -msgstr "Cor lisa" +msgstr "Fator de escala manual:" #: ../share/extensions/dxf_input.inx.h:5 msgid "Manual x-axis origin (mm):" -msgstr "" +msgstr "Origem do eixo X manual (mm):" #: ../share/extensions/dxf_input.inx.h:6 msgid "Manual y-axis origin (mm):" -msgstr "" +msgstr "Origem do eixo Y manual (mm):" #: ../share/extensions/dxf_input.inx.h:7 msgid "Gcodetools compatible point import" -msgstr "" +msgstr "Importação de ponto compatível com Gcodetools" #: ../share/extensions/dxf_input.inx.h:8 #: ../share/extensions/render_barcode_qrcode.inx.h:16 -#, fuzzy msgid "Character encoding:" -msgstr "Alterar arredondamento" +msgstr "Codificação de caracteres:" #: ../share/extensions/dxf_input.inx.h:9 -#, fuzzy msgid "Text Font:" -msgstr "Entrada de Texto" +msgstr "Fonte do Texto:" #: ../share/extensions/dxf_input.inx.h:11 msgid "" @@ -35512,11 +33648,19 @@ msgid "" "- layers are preserved only on File->Open, not Import.\n" "- limited support for BLOCKS, use AutoCAD Explode Blocks instead, if needed." msgstr "" +"- AutoCAD Release 13 e mais recentes.\n" +"- para escala manual assumir que o desenho DXF está em mm.\n" +"- assumir que o desenho SVG está em píxeis, a 96 dpi.\n" +"- fator de escala e origem aplicam-se apenas a escala manual.\n" +"- 'Escala automática' irá enquadrar a largura numa página A4.\n" +"- 'Ler do ficheiro' usa a variável $MEASUREMENT.\n" +"- as camadas são preservadas apenas em Ficheiro->Abrir, não em Importar.\n" +"- suporte limitado para BLOCKS, usar em vez disso AutoCAD Explode Blocks, se " +"necessário." #: ../share/extensions/dxf_input.inx.h:19 -#, fuzzy msgid "AutoCAD DXF R13 (*.dxf)" -msgstr "AutoCAD DXF (*.dxf)" +msgstr "AutoCAD DXF R13 (*.dxf)" #: ../share/extensions/dxf_input.inx.h:20 msgid "Import AutoCAD's Document Exchange Format" @@ -35524,35 +33668,31 @@ msgstr "Importar Formato AutoCAD's Document Exchange" #: ../share/extensions/dxf_outlines.inx.h:1 msgid "Desktop Cutting Plotter" -msgstr "" +msgstr "Desktop Cutting Plotter" #: ../share/extensions/dxf_outlines.inx.h:3 msgid "use ROBO-Master type of spline output" -msgstr "" +msgstr "usar tipo de spline ROBO-Master na saída" #: ../share/extensions/dxf_outlines.inx.h:4 msgid "use LWPOLYLINE type of line output" -msgstr "" +msgstr "usar tipo de linha LWPOLYLINE na saída" #: ../share/extensions/dxf_outlines.inx.h:5 -#, fuzzy msgid "Base unit:" -msgstr "Freqüência Base" +msgstr "Unidade base:" #: ../share/extensions/dxf_outlines.inx.h:6 -#, fuzzy msgid "Character Encoding:" -msgstr "Alterar arredondamento" +msgstr "Codificação de Caracteres:" #: ../share/extensions/dxf_outlines.inx.h:7 -#, fuzzy msgid "Layer export selection:" -msgstr "Eliminar a selecção" +msgstr "Seleção da camada a exportar:" #: ../share/extensions/dxf_outlines.inx.h:8 -#, fuzzy msgid "Layer match name:" -msgstr "Nome da camada:" +msgstr "Nome que corresponde à camada:" #: ../share/extensions/dxf_outlines.inx.h:9 msgid "pt" @@ -35560,7 +33700,7 @@ msgstr "pt" #: ../share/extensions/dxf_outlines.inx.h:10 msgid "pc" -msgstr "" +msgstr "pc" #: ../share/extensions/dxf_outlines.inx.h:11 #: ../share/extensions/render_gears.inx.h:7 @@ -35597,42 +33737,39 @@ msgstr "m" #: ../share/extensions/gcodetools_path_to_gcode.inx.h:29 #: ../share/extensions/render_gears.inx.h:8 msgid "in" -msgstr "in" +msgstr "polegadas" #: ../share/extensions/dxf_outlines.inx.h:16 msgid "ft" -msgstr "" +msgstr "pés" #: ../share/extensions/dxf_outlines.inx.h:17 -#, fuzzy msgid "Latin 1" -msgstr "Início" +msgstr "Latim 1" #: ../share/extensions/dxf_outlines.inx.h:18 msgid "CP 1250" -msgstr "" +msgstr "CP 1250" #: ../share/extensions/dxf_outlines.inx.h:19 msgid "CP 1252" -msgstr "" +msgstr "CP 1252" #: ../share/extensions/dxf_outlines.inx.h:20 msgid "UTF 8" -msgstr "" +msgstr "UTF 8" #: ../share/extensions/dxf_outlines.inx.h:21 -#, fuzzy msgid "All (default)" -msgstr "(padrão)" +msgstr "Tudo (padrão)" #: ../share/extensions/dxf_outlines.inx.h:22 -#, fuzzy msgid "Visible only" -msgstr "Cores Visíveis" +msgstr "Apenas visíveis" #: ../share/extensions/dxf_outlines.inx.h:23 msgid "By name match" -msgstr "" +msgstr "Por correspondência do nome" #: ../share/extensions/dxf_outlines.inx.h:25 msgid "" @@ -35650,196 +33787,184 @@ msgid "" "- You can choose to export all layers, only visible ones or by name match " "(case insensitive and use comma ',' as separator)" msgstr "" +"- Formato AutoCAD Release 14 DXF.\n" +"- O parâmetro de unidade base especifica em que unidade as coordenadas são " +"usadas na saída (96 px = 1 in).\n" +"- Tipos de elementos suportados\n" +" - caminhos (linhas e splines)\n" +" - retângulos\n" +" - clones (a referência cruzada ao original é perdida)\n" +"- Saída ROBO-Master spline é uma spline especializada legível apenas por " +"visualizadores ROBO-Master e AutoDesk, não pelo Inkscape.\n" +"- Saída LWPOLYLINE é uma polilinha ligada multiplicarmente, desativar para " +"usar uma versão anterior da saída LINE.\n" +"- Pode escolher exportar todas as camadas, apenas as visíveis ou por " +"correspondência de nome (não sensível a maiúsculas e minúsculas e usar a " +"vírgula ',' como separador)" #: ../share/extensions/dxf_outlines.inx.h:34 -#, fuzzy msgid "Desktop Cutting Plotter (AutoCAD DXF R14) (*.dxf)" -msgstr "AutoCAD DXF (*.dxf)" +msgstr "Desktop Cutting Plotter (AutoCAD DXF R14) (*.dxf)" #: ../share/extensions/dxf_output.inx.h:1 msgid "DXF Output" -msgstr "Saída DXF" +msgstr "Exportar em DXF" #: ../share/extensions/dxf_output.inx.h:2 msgid "pstoedit must be installed to run; see http://www.pstoedit.net/pstoedit" -msgstr "O pstoedit deve estar instalado; veja http://www.pstoedit.net/pstoedit" +msgstr "" +"O pstoedit tem de estar instalado; ver http://www.pstoedit.net/pstoedit" #: ../share/extensions/dxf_output.inx.h:3 -#, fuzzy msgid "AutoCAD DXF R12 (*.dxf)" -msgstr "AutoCAD DXF (*.dxf)" +msgstr "AutoCAD DXF R12 (*.dxf)" #: ../share/extensions/dxf_output.inx.h:4 msgid "DXF file written by pstoedit" msgstr "Ficheiro DXF escrito pelo pstoedit" #: ../share/extensions/edge3d.inx.h:1 -#, fuzzy msgid "Edge 3D" -msgstr "Limite" +msgstr "Edge 3D" #: ../share/extensions/edge3d.inx.h:2 -#, fuzzy msgid "Illumination Angle:" -msgstr "Rotação (graus)" +msgstr "Ângulo de Iluminação:" #: ../share/extensions/edge3d.inx.h:3 -#, fuzzy msgid "Shades:" -msgstr "Sombra" +msgstr "Sombras:" #: ../share/extensions/edge3d.inx.h:4 -#, fuzzy msgid "Only black and white:" -msgstr "Inverter regiões pretas e brancas para traçados simples" +msgstr "Apenas preto e branco:" #: ../share/extensions/edge3d.inx.h:6 -#, fuzzy msgid "Blur stdDeviation:" -msgstr "Desvio Padrão" +msgstr "Defocagem do Desvio Padrão (stdDeviation):" #: ../share/extensions/edge3d.inx.h:7 -#, fuzzy msgid "Blur width:" -msgstr "Largura igual" +msgstr "Largura da desfocagem:" #: ../share/extensions/edge3d.inx.h:8 -#, fuzzy msgid "Blur height:" -msgstr "Altura da Barra:" +msgstr "Altura da desfocagem:" #: ../share/extensions/embedimage.inx.h:1 -#, fuzzy msgid "Embed Images" -msgstr "Embutir imagens" +msgstr "Embutir Imagens" #: ../share/extensions/embedimage.inx.h:2 #: ../share/extensions/embedselectedimages.inx.h:2 msgid "Embed only selected images" -msgstr "Embutir somente a imagem selecionada" +msgstr "Embutir apenas as imagens selecionadas" #: ../share/extensions/embedselectedimages.inx.h:1 -#, fuzzy msgid "Embed Selected Images" -msgstr "Embutir somente a imagem selecionada" +msgstr "Embutir Imagens Selecionadas" #: ../share/extensions/empty_business_card.inx.h:1 msgid "Business Card" -msgstr "" +msgstr "Cartão Comercial" #: ../share/extensions/empty_business_card.inx.h:2 msgid "Business card size:" -msgstr "" +msgstr "Tamanho do Cartão Comercial:" #: ../share/extensions/empty_desktop.inx.h:1 msgid "Desktop" -msgstr "" +msgstr "Secretária" #: ../share/extensions/empty_desktop.inx.h:2 -#, fuzzy msgid "Desktop size:" -msgstr "Tamanho do ponto" +msgstr "Tamanho da secretária:" #. Maximum size is '16k' #: ../share/extensions/empty_desktop.inx.h:4 #: ../share/extensions/empty_generic.inx.h:2 #: ../share/extensions/empty_video.inx.h:4 -#, fuzzy msgid "Custom Width:" -msgstr "Tamanho personalizado" +msgstr "Largura Personalizada:" #: ../share/extensions/empty_desktop.inx.h:5 #: ../share/extensions/empty_generic.inx.h:3 #: ../share/extensions/empty_video.inx.h:5 -#, fuzzy msgid "Custom Height:" -msgstr "Altura da Barra:" +msgstr "Altura Personalizada:" #: ../share/extensions/empty_dvd_cover.inx.h:1 -#, fuzzy msgid "DVD Cover" -msgstr "Capa" +msgstr "Capa de DVD" #: ../share/extensions/empty_dvd_cover.inx.h:2 -#, fuzzy msgid "DVD spine width:" -msgstr "Largura da Linha" +msgstr "Largura da lomba do DVD:" #: ../share/extensions/empty_dvd_cover.inx.h:3 msgid "DVD cover bleed (mm):" -msgstr "" +msgstr "Sangria da Capa de DVD (mm):" #: ../share/extensions/empty_generic.inx.h:1 -#, fuzzy msgid "Generic Canvas" -msgstr "Ciano" +msgstr "Ãrea de Trabalho Genérica" #: ../share/extensions/empty_generic.inx.h:4 -#, fuzzy msgid "SVG Unit:" -msgstr "Unidades:" +msgstr "Unidade SVG:" #: ../share/extensions/empty_generic.inx.h:5 -#, fuzzy msgid "Canvas background:" -msgstr "Plano de fundo:" +msgstr "Fundo da área de trabalho :" #: ../share/extensions/empty_generic.inx.h:6 #: ../share/extensions/empty_page.inx.h:5 -#, fuzzy msgid "Hide border" -msgstr "Modo Limite" +msgstr "Esconder borda" #: ../share/extensions/empty_icon.inx.h:1 msgid "Icon" -msgstr "" +msgstr "Ãcone" #: ../share/extensions/empty_icon.inx.h:2 -#, fuzzy msgid "Icon size:" -msgstr "Tamanho da Fonte" +msgstr "Tamanho do Ãcone:" #: ../share/extensions/empty_page.inx.h:2 -#, fuzzy msgid "Page size:" -msgstr "T_amanho da página:" +msgstr "Tamanho da página:" #: ../share/extensions/empty_page.inx.h:3 msgid "Page orientation:" msgstr "Orientação da página:" #: ../share/extensions/empty_page.inx.h:4 -#, fuzzy msgid "Page background:" -msgstr "Plano de fundo:" +msgstr "Fundo da página:" #: ../share/extensions/empty_video.inx.h:1 -#, fuzzy msgid "Video Screen" msgstr "Ecrã" #: ../share/extensions/empty_video.inx.h:2 -#, fuzzy msgid "Video size:" -msgstr "Tamanho do ponto" +msgstr "Tamanho do ecrâ:" #: ../share/extensions/eps_input.inx.h:1 msgid "EPS Input" -msgstr "Entrada EPS" +msgstr "Importar EPS" #: ../share/extensions/eqtexsvg.inx.h:1 -#, fuzzy msgid "LaTeX" -msgstr "Impressão LaTeX" +msgstr "LaTeX" #: ../share/extensions/eqtexsvg.inx.h:2 -#, fuzzy msgid "LaTeX input: " -msgstr "Impressão LaTeX" +msgstr "Entrada LaTeX: " #: ../share/extensions/eqtexsvg.inx.h:3 msgid "Additional packages (comma-separated): " -msgstr "" +msgstr "Pacotes adicionais (separados por vírgula): " #: ../share/extensions/export_gimp_palette.inx.h:1 msgid "Export as GIMP Palette" @@ -35854,14 +33979,12 @@ msgid "Exports the colors of this document as GIMP Palette" msgstr "Exporta as cores do desenho como Paleta do GIMP" #: ../share/extensions/extractimage.inx.h:1 -#, fuzzy msgid "Extract Image" -msgstr "Extrair Uma Imagem" +msgstr "Extrair Imagem" #: ../share/extensions/extractimage.inx.h:2 -#, fuzzy msgid "Path to save image:" -msgstr "Local onde guardar a imagem" +msgstr "Local onde guardar a imagem:" #: ../share/extensions/extractimage.inx.h:3 msgid "" @@ -35869,20 +33992,22 @@ msgid "" "* A relative path (or a filename without path) is relative to the user's " "home directory." msgstr "" +"* Não escrever a extensão do ficheiro, esta será introduzida " +"automaticamente.\n" +"* Um caminho relativo (ou nome de ficheiro sem caminho) é relativo à pasta " +"principal do utilizador." #: ../share/extensions/extrude.inx.h:3 -#, fuzzy msgid "Lines" -msgstr "Linha" +msgstr "Linhas" #: ../share/extensions/extrude.inx.h:4 -#, fuzzy msgid "Polygons" -msgstr "Polígono" +msgstr "Polígonos" #: ../share/extensions/fig_input.inx.h:1 msgid "XFIG Input" -msgstr "Entrada XFIG" +msgstr "Importar XFIG" #: ../share/extensions/fig_input.inx.h:2 msgid "XFIG Graphics File (*.fig)" @@ -35890,110 +34015,97 @@ msgstr "Ficheiro XFIG Graphics (*.fig)" #: ../share/extensions/fig_input.inx.h:3 msgid "Open files saved with XFIG" -msgstr "Abrir ficheiros salvos com XFIG" +msgstr "Abrir ficheiros gravados com o XFIG" #: ../share/extensions/flatten.inx.h:1 msgid "Flatten Beziers" -msgstr "Nivelar Curvas" +msgstr "Nivelar Béziers" #: ../share/extensions/flatten.inx.h:2 -#, fuzzy msgid "Flatness:" -msgstr "Nivelar" +msgstr "Grau da Nivelação:" #: ../share/extensions/foldablebox.inx.h:1 msgid "Foldable Box" -msgstr "" +msgstr "Caixa Dobrável" #: ../share/extensions/foldablebox.inx.h:4 -#, fuzzy msgid "Depth:" -msgstr "Dentes" +msgstr "Profundidade:" #: ../share/extensions/foldablebox.inx.h:5 -#, fuzzy msgid "Paper Thickness:" -msgstr "Medida da Grossura do Papel" +msgstr "Grossura do Papel:" #: ../share/extensions/foldablebox.inx.h:6 -#, fuzzy msgid "Tab Proportion:" -msgstr "Escala proporcional" +msgstr "Proporção da Tabulação:" #: ../share/extensions/foldablebox.inx.h:8 -#, fuzzy msgid "Add Guide Lines" -msgstr "Linha guia" +msgstr "Adicionar Linhas Guia" #: ../share/extensions/fractalize.inx.h:1 msgid "Fractalize" msgstr "Fractalizar" #: ../share/extensions/fractalize.inx.h:2 -#, fuzzy msgid "Subdivisions:" -msgstr "Subdivisões" +msgstr "Subdivisões:" #: ../share/extensions/funcplot.inx.h:1 msgid "Function Plotter" msgstr "Desenhar Função" #: ../share/extensions/funcplot.inx.h:2 -#, fuzzy msgid "Range and sampling" -msgstr "Escala e Amostragem" +msgstr "Alcance e amostra" #: ../share/extensions/funcplot.inx.h:3 -#, fuzzy msgid "Start X value:" -msgstr "Valor de x inicial" +msgstr "Valor de X inicial:" #: ../share/extensions/funcplot.inx.h:4 -#, fuzzy msgid "End X value:" -msgstr "Valor de x final" +msgstr "Valor de X final:" #: ../share/extensions/funcplot.inx.h:5 -#, fuzzy msgid "Multiply X range by 2*pi" -msgstr "Multiplicar a escala x por 2*pi" +msgstr "Multiplicar alcance X por 2*pi" #: ../share/extensions/funcplot.inx.h:6 -#, fuzzy msgid "Y value of rectangle's bottom:" -msgstr "Valor de y da base do retângulo" +msgstr "Valor de Y da base do retângulo:" #: ../share/extensions/funcplot.inx.h:7 -#, fuzzy msgid "Y value of rectangle's top:" -msgstr "Valor de y do topo do retângulo" +msgstr "Valor de Y do topo do retângulo:" #: ../share/extensions/funcplot.inx.h:8 -#, fuzzy msgid "Number of samples:" -msgstr "Número de passos" +msgstr "Número de amostras:" #: ../share/extensions/funcplot.inx.h:9 #: ../share/extensions/param_curves.inx.h:11 msgid "Isotropic scaling" -msgstr "" +msgstr "Escala isotrópica" #: ../share/extensions/funcplot.inx.h:10 msgid "Use polar coordinates" -msgstr "Use coordenadas polar" +msgstr "Usar coordenadas polares" #: ../share/extensions/funcplot.inx.h:11 #: ../share/extensions/param_curves.inx.h:12 -#, fuzzy msgid "" "When set, Isotropic scaling uses smallest of width/xrange or height/yrange" msgstr "" -"Escala isotrópica (usa o menor entre largura/escala x ou altura/escala y)" +"Quando definido, a escala isotrópica usa o menor de largura/alcance X ou " +"altura/alcance Y" #: ../share/extensions/funcplot.inx.h:12 #: ../share/extensions/param_curves.inx.h:13 msgid "Use" -msgstr "Uso" +msgstr "Usar" #: ../share/extensions/funcplot.inx.h:13 msgid "" @@ -36007,6 +34119,16 @@ msgid "" " Isotropic scaling is disabled.\n" " First derivative is always determined numerically." msgstr "" +"Selecionar um retângulo antes de usar a extensão,\n" +"irá determinar as escalas X e Y. Se desejar preencher a área, então adicione " +"pontos terminais no eixo do X.\n" +"\n" +"Com coordenadas polares:\n" +" Os valores de início e fim de X definem o alcance do ângulo em radianos.\n" +" A escala X é definida para que as bordas esquerda e direita do retângulo " +"estão a +/-1.\n" +" A escala isotrópica é desativada.\n" +" A primeira derivada é determinada sempre numericamente." #: ../share/extensions/funcplot.inx.h:21 #: ../share/extensions/param_curves.inx.h:16 @@ -36015,7 +34137,6 @@ msgstr "Funções" #: ../share/extensions/funcplot.inx.h:22 #: ../share/extensions/param_curves.inx.h:17 -#, fuzzy msgid "" "Standard Python math functions are available:\n" "\n" @@ -36027,31 +34148,31 @@ msgid "" "\n" "The constants pi and e are also available." msgstr "" -"As seguintes funções estão disponíveis: (funções matemáticas padrão da " -"linguagem python) ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x," -"i); modf(x); exp(x); log(x [, base]); log10(x); pow(x,y); sqrt(x); acos(x); " -"asin(x); atan(x); atan2(y,x); hypot(x,y); cos(x); sin(x); tan(x); " -"degrees(x); radians(x); cosh(x); sinh(x); tanh(x). As constantes pi e e " -"também estão disponíveis." +"Funções matemáticas do Python Padrão disponíveis:\n" +"\n" +"ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); \n" +"modf(x); exp(x); log(x [, base]); log10(x); pow(x,y); sqrt(x); \n" +"acos(x); asin(x); atan(x); atan2(y,x); hypot(x,y); \n" +"cos(x); sin(x); tan(x); degrees(x); radians(x); \n" +"cosh(x); sinh(x); tanh(x).\n" +"\n" +"As constantes \"pi\" e \"e\" também estão disponíveis." #: ../share/extensions/funcplot.inx.h:31 -#, fuzzy msgid "Function:" -msgstr "Função" +msgstr "Função:" #: ../share/extensions/funcplot.inx.h:32 msgid "Calculate first derivative numerically" -msgstr "Calcular primeira derivada numericamente" +msgstr "Calcular a primeira derivada numericamente" #: ../share/extensions/funcplot.inx.h:33 -#, fuzzy msgid "First derivative:" -msgstr "Primeira derivada" +msgstr "Primeira derivada:" #: ../share/extensions/funcplot.inx.h:34 -#, fuzzy msgid "Clip with rectangle" -msgstr "Largura do retângulo" +msgstr "Recorte com retângulo" #: ../share/extensions/funcplot.inx.h:35 #: ../share/extensions/param_curves.inx.h:28 @@ -36065,11 +34186,11 @@ msgstr "Desenhar Eixos" #: ../share/extensions/funcplot.inx.h:37 msgid "Add x-axis endpoints" -msgstr "" +msgstr "Adicionar pontos terminais no eixo X" #: ../share/extensions/gcodetools_about.inx.h:1 msgid "About" -msgstr "" +msgstr "Sobre" #: ../share/extensions/gcodetools_about.inx.h:2 msgid "" @@ -36080,6 +34201,12 @@ msgid "" "engravers Plotters etc. To get more info visit developers page at http://www." "cnc-club.ru/gcodetools" msgstr "" +"Ferramentas-Gcode foi desenvolvido para fazer Gcode simples a partir de " +"caminhos do Inkscape. O Gcode é um formato especial que é usado na maioria " +"das máquinas CNC. Por isso o Ferramentas-Gcode permite usar o Inkscape como " +"um programa CAD. Pode ser usado com muitos tipos de máquinas: fresadoras, " +"tornos, cortadores laser e plasma, gravadores, plotters, etc. para mais " +"informações ver a página http://www.cnc-club.ru/gcodetools" #: ../share/extensions/gcodetools_about.inx.h:4 #: ../share/extensions/gcodetools_area.inx.h:54 @@ -36101,6 +34228,13 @@ msgid "" "www.cnc-club.ru/gcodetoolsru Credits: Nick Drobchenko, Vladimir Kalyaev, " "John Brooker, Henry Nicolas, Chris Lusby Taylor. Gcodetools ver. 1.7" msgstr "" +"Módulo Ferramentas-Gcode: converte caminhos para Gcode (utilizando " +"interpolação circular), faz caminhos deslocados e gravuras de cantos " +"pontiagudos utilizando cortadores em cone. Este módulo calcula o Gcode para " +"caminhos utilizando interpolação circular ou movimento linear quando " +"necessário. Podem ser encontrados tutotiais, manuais e apoio em http://www." +"cnc-club.ru/gcodetools Créditos: Nick Drobchenko, Vladimir Kalyaev, John " +"Brooker, Henry Nicolas, Chris Lusby Taylor. Gcodetools versão 1.7" #: ../share/extensions/gcodetools_about.inx.h:5 #: ../share/extensions/gcodetools_area.inx.h:55 @@ -36114,25 +34248,23 @@ msgstr "" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:19 #: ../share/extensions/gcodetools_tools_library.inx.h:14 msgid "Gcodetools" -msgstr "" +msgstr "Ferramentas-Gcode" #: ../share/extensions/gcodetools_area.inx.h:1 -#, fuzzy msgid "Area" -msgstr "São desligados" +msgstr "Ãrea" #: ../share/extensions/gcodetools_area.inx.h:2 msgid "Maximum area cutting curves:" -msgstr "" +msgstr "Ãrea máxima das curvas de corte:" #: ../share/extensions/gcodetools_area.inx.h:3 -#, fuzzy msgid "Area width:" -msgstr "Escala de largura" +msgstr "Largura da área:" #: ../share/extensions/gcodetools_area.inx.h:4 msgid "Area tool overlap (0..0.9):" -msgstr "" +msgstr "Sobreposição da ferramenta de área (0..0.9):" #: ../share/extensions/gcodetools_area.inx.h:5 msgid "" @@ -36142,56 +34274,56 @@ msgid "" "the nearest tool definition (\"Tool diameter\" value). Only one offset will " "be created if the \"Area width\" is equal to \"1/2 D\"." msgstr "" +"\"Criar deslocamento de área\": cria vários deslocamentos de caminhos para " +"preencher a área original até ao valor \"Raio da área\". Os contornos " +"começam de \"1/2 D\" até largura total de \"Largura da área\" com \"D\" " +"intervalos onde D é obtido da definição mais próxima da ferramenta (valor de " +"\"Diâmetro da ferramenta\"). Apenas será criado um deslocamento se a " +"\"Largura da área\" for igual a \"1/2 D\"." #: ../share/extensions/gcodetools_area.inx.h:6 -#, fuzzy msgid "Fill area" -msgstr "Preencher área fechada" +msgstr "Ãrea de preenchimento" #: ../share/extensions/gcodetools_area.inx.h:7 -#, fuzzy msgid "Area fill angle" -msgstr "Ângulo esquerdo" +msgstr "Ângulo da área de preenchimento" #: ../share/extensions/gcodetools_area.inx.h:8 msgid "Area fill shift" -msgstr "" +msgstr "Deslocamento da área de preenchimento" #: ../share/extensions/gcodetools_area.inx.h:9 -#, fuzzy msgid "Filling method" -msgstr "Divisão" +msgstr "Método de preenchimento" #: ../share/extensions/gcodetools_area.inx.h:10 msgid "Zig zag" -msgstr "" +msgstr "Ziguezague" #: ../share/extensions/gcodetools_area.inx.h:12 msgid "Area artifacts" -msgstr "" +msgstr "Artefactos da área" #: ../share/extensions/gcodetools_area.inx.h:13 msgid "Artifact diameter:" -msgstr "" +msgstr "Diâmetro dos artefactos:" #: ../share/extensions/gcodetools_area.inx.h:14 -#, fuzzy msgid "Action:" -msgstr "Aceleração:" +msgstr "Ação:" #: ../share/extensions/gcodetools_area.inx.h:15 msgid "mark with an arrow" -msgstr "" +msgstr "marcar com seta" #: ../share/extensions/gcodetools_area.inx.h:16 -#, fuzzy msgid "mark with style" -msgstr "Curativo Ladrilhado" +msgstr "marcar com o estilo" #: ../share/extensions/gcodetools_area.inx.h:17 -#, fuzzy msgid "delete" -msgstr "Eliminar" +msgstr "eliminar" #: ../share/extensions/gcodetools_area.inx.h:18 msgid "" @@ -36199,65 +34331,63 @@ msgid "" "+Ctrl+G) 3. Press Apply Suspected small objects will be marked out by " "colored arrows." msgstr "" +"Utilização: 1. Selecionar todos os Deslocamentos de Ãrea (contornos " +"cinzentos) 2. Objeto/Desagrupar (Shift+Ctrl+G) 3. Clicar em Aplicar. Os " +"objetos pequenos suspeitos serão marcados com setas coloridas." #: ../share/extensions/gcodetools_area.inx.h:19 #: ../share/extensions/gcodetools_lathe.inx.h:12 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:1 -#, fuzzy msgid "Path to Gcode" -msgstr "O caminho está fechado." +msgstr "Caminho para o Gcode" #: ../share/extensions/gcodetools_area.inx.h:20 #: ../share/extensions/gcodetools_lathe.inx.h:13 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:2 -#, fuzzy msgid "Biarc interpolation tolerance:" -msgstr "Passos da interpolação" +msgstr "Tolerância de interpolação Biarco:" #: ../share/extensions/gcodetools_area.inx.h:21 #: ../share/extensions/gcodetools_lathe.inx.h:14 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:3 -#, fuzzy msgid "Maximum splitting depth:" -msgstr "Simplificando caminhos:" +msgstr "Máxima profundidade de separação:" #: ../share/extensions/gcodetools_area.inx.h:22 #: ../share/extensions/gcodetools_lathe.inx.h:15 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:4 msgid "Cutting order:" -msgstr "" +msgstr "Ordem de corte:" #: ../share/extensions/gcodetools_area.inx.h:23 #: ../share/extensions/gcodetools_lathe.inx.h:16 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:5 -#, fuzzy msgid "Depth function:" -msgstr "Função Vermelho" +msgstr "Função de profundidade:" #: ../share/extensions/gcodetools_area.inx.h:24 #: ../share/extensions/gcodetools_lathe.inx.h:17 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:6 msgid "Sort paths to reduse rapid distance" -msgstr "" +msgstr "Ordenar caminhos para reduzir distância rápida" #: ../share/extensions/gcodetools_area.inx.h:25 #: ../share/extensions/gcodetools_lathe.inx.h:18 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:7 msgid "Subpath by subpath" -msgstr "" +msgstr "Subcaminho por subcaminho" #: ../share/extensions/gcodetools_area.inx.h:26 #: ../share/extensions/gcodetools_lathe.inx.h:19 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:8 -#, fuzzy msgid "Path by path" -msgstr "Colar caminho" +msgstr "Caminho por caminho" #: ../share/extensions/gcodetools_area.inx.h:27 #: ../share/extensions/gcodetools_lathe.inx.h:20 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:9 msgid "Pass by Pass" -msgstr "" +msgstr "Passagem por Passagem" #: ../share/extensions/gcodetools_area.inx.h:28 #: ../share/extensions/gcodetools_lathe.inx.h:21 @@ -36270,6 +34400,12 @@ msgid "" "(black), d is the depth defined by orientation points, s - surface defined " "by orientation points." msgstr "" +"A tolerância de interpolação biarco é a distância máxima entre o caminho e a " +"sua aproximação. O segmento será separado em 2 segmentos se a distância " +"entre o segmento do caminho e a sua aproximação exceder a tolerância da " +"interpolação biarco. Para a função profundidade c=intensidade da cor de 0.0 " +"(branco) até 1.0 (preto),d - é a profundidade definida pelos pontos de " +"orientação, s - é superfície definida pelos pontos de orientação." #: ../share/extensions/gcodetools_area.inx.h:30 #: ../share/extensions/gcodetools_engraving.inx.h:8 @@ -36277,7 +34413,7 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:23 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:12 msgid "Scale along Z axis:" -msgstr "" +msgstr "Escala ao longo do eixo Z:" #: ../share/extensions/gcodetools_area.inx.h:31 #: ../share/extensions/gcodetools_engraving.inx.h:9 @@ -36285,7 +34421,7 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:24 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:13 msgid "Offset along Z axis:" -msgstr "" +msgstr "Deslocamento ao longo do eixo Z:" #: ../share/extensions/gcodetools_area.inx.h:32 #: ../share/extensions/gcodetools_engraving.inx.h:10 @@ -36293,16 +34429,15 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:25 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:14 msgid "Select all paths if nothing is selected" -msgstr "" +msgstr "Selecionar todos os caminhos se não estiver nada selecionado" #: ../share/extensions/gcodetools_area.inx.h:33 #: ../share/extensions/gcodetools_engraving.inx.h:11 #: ../share/extensions/gcodetools_graffiti.inx.h:25 #: ../share/extensions/gcodetools_lathe.inx.h:26 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:15 -#, fuzzy msgid "Minimum arc radius:" -msgstr "Raio interno:" +msgstr "Raio mínimo do arco:" #: ../share/extensions/gcodetools_area.inx.h:34 #: ../share/extensions/gcodetools_engraving.inx.h:12 @@ -36310,7 +34445,7 @@ msgstr "Raio interno:" #: ../share/extensions/gcodetools_lathe.inx.h:27 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:16 msgid "Comment Gcode:" -msgstr "" +msgstr "Comentário Gcode:" #: ../share/extensions/gcodetools_area.inx.h:35 #: ../share/extensions/gcodetools_engraving.inx.h:13 @@ -36318,7 +34453,7 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:28 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:17 msgid "Get additional comments from object's properties" -msgstr "" +msgstr "Obter comentários adicionais das propriedades do objeto" #: ../share/extensions/gcodetools_area.inx.h:36 #: ../share/extensions/gcodetools_dxf_points.inx.h:8 @@ -36326,9 +34461,8 @@ msgstr "" #: ../share/extensions/gcodetools_graffiti.inx.h:28 #: ../share/extensions/gcodetools_lathe.inx.h:29 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:18 -#, fuzzy msgid "Preferences" -msgstr "Propriedades da Caneta" +msgstr "Preferências" #: ../share/extensions/gcodetools_area.inx.h:37 #: ../share/extensions/gcodetools_dxf_points.inx.h:9 @@ -36337,9 +34471,8 @@ msgstr "Propriedades da Caneta" #: ../share/extensions/gcodetools_lathe.inx.h:30 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:19 #: ../share/extensions/nicechart.inx.h:4 -#, fuzzy msgid "File:" -msgstr "Ficheiro" +msgstr "Ficheiro:" #: ../share/extensions/gcodetools_area.inx.h:38 #: ../share/extensions/gcodetools_dxf_points.inx.h:10 @@ -36348,7 +34481,7 @@ msgstr "Ficheiro" #: ../share/extensions/gcodetools_lathe.inx.h:31 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:20 msgid "Add numeric suffix to filename" -msgstr "" +msgstr "Adicionar sufixo numérico ao nome do ficheiro" #: ../share/extensions/gcodetools_area.inx.h:39 #: ../share/extensions/gcodetools_dxf_points.inx.h:11 @@ -36356,9 +34489,8 @@ msgstr "" #: ../share/extensions/gcodetools_graffiti.inx.h:31 #: ../share/extensions/gcodetools_lathe.inx.h:32 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:21 -#, fuzzy msgid "Directory:" -msgstr "Descrição" +msgstr "Pasta:" #: ../share/extensions/gcodetools_area.inx.h:40 #: ../share/extensions/gcodetools_dxf_points.inx.h:12 @@ -36367,7 +34499,7 @@ msgstr "Descrição" #: ../share/extensions/gcodetools_lathe.inx.h:33 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:22 msgid "Z safe height for G00 move over blank:" -msgstr "" +msgstr "Altura segura Z para o movimento G00 sobre o vazio:" #: ../share/extensions/gcodetools_area.inx.h:41 #: ../share/extensions/gcodetools_dxf_points.inx.h:13 @@ -36377,7 +34509,7 @@ msgstr "" #: ../share/extensions/gcodetools_orientation_points.inx.h:6 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:23 msgid "Units (mm or in):" -msgstr "" +msgstr "Unidades (mm ou polegadas):" #: ../share/extensions/gcodetools_area.inx.h:42 #: ../share/extensions/gcodetools_dxf_points.inx.h:14 @@ -36386,7 +34518,7 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:35 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:24 msgid "Post-processor:" -msgstr "" +msgstr "Pós-processador:" #: ../share/extensions/gcodetools_area.inx.h:43 #: ../share/extensions/gcodetools_dxf_points.inx.h:15 @@ -36395,7 +34527,7 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:36 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:25 msgid "Additional post-processor:" -msgstr "" +msgstr "Pós-processador adicional:" #: ../share/extensions/gcodetools_area.inx.h:44 #: ../share/extensions/gcodetools_dxf_points.inx.h:16 @@ -36403,9 +34535,8 @@ msgstr "" #: ../share/extensions/gcodetools_graffiti.inx.h:35 #: ../share/extensions/gcodetools_lathe.inx.h:37 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:26 -#, fuzzy msgid "Generate log file" -msgstr "Gerar Modelo" +msgstr "Gerar ficheiro de registos" #: ../share/extensions/gcodetools_area.inx.h:45 #: ../share/extensions/gcodetools_dxf_points.inx.h:17 @@ -36413,9 +34544,8 @@ msgstr "Gerar Modelo" #: ../share/extensions/gcodetools_graffiti.inx.h:36 #: ../share/extensions/gcodetools_lathe.inx.h:38 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:27 -#, fuzzy msgid "Full path to log file:" -msgstr "Preenchimento em cor lisa" +msgstr "Caminho completo do ficheiro de registos:" #: ../share/extensions/gcodetools_area.inx.h:48 #: ../share/extensions/gcodetools_dxf_points.inx.h:20 @@ -36423,7 +34553,6 @@ msgstr "Preenchimento em cor lisa" #: ../share/extensions/gcodetools_graffiti.inx.h:37 #: ../share/extensions/gcodetools_lathe.inx.h:41 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:30 -#, fuzzy msgctxt "GCode postprocessor" msgid "None" msgstr "Nenhum" @@ -36434,9 +34563,8 @@ msgstr "Nenhum" #: ../share/extensions/gcodetools_graffiti.inx.h:38 #: ../share/extensions/gcodetools_lathe.inx.h:42 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:31 -#, fuzzy msgid "Parameterize Gcode" -msgstr "Parâmetros" +msgstr "Parameterizar Gcode" #: ../share/extensions/gcodetools_area.inx.h:50 #: ../share/extensions/gcodetools_dxf_points.inx.h:22 @@ -36445,7 +34573,7 @@ msgstr "Parâmetros" #: ../share/extensions/gcodetools_lathe.inx.h:43 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:32 msgid "Flip y axis and parameterize Gcode" -msgstr "" +msgstr "Espelhar eixo Y e parameterizar o Gcode" #: ../share/extensions/gcodetools_area.inx.h:51 #: ../share/extensions/gcodetools_dxf_points.inx.h:23 @@ -36454,7 +34582,7 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:44 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:33 msgid "Round all values to 4 digits" -msgstr "" +msgstr "Arredondar todos os valores para 4 dígitos" #: ../share/extensions/gcodetools_area.inx.h:52 #: ../share/extensions/gcodetools_dxf_points.inx.h:24 @@ -36463,30 +34591,29 @@ msgstr "" #: ../share/extensions/gcodetools_lathe.inx.h:45 #: ../share/extensions/gcodetools_path_to_gcode.inx.h:34 msgid "Fast pre-penetrate" -msgstr "" +msgstr "Pré-penetração rápida" #: ../share/extensions/gcodetools_check_for_updates.inx.h:1 msgid "Check for updates" -msgstr "" +msgstr "Verificar atualizações" #: ../share/extensions/gcodetools_check_for_updates.inx.h:2 msgid "Check for Gcodetools latest stable version and try to get the updates." msgstr "" +"Verificar pela última versão estável de Gcodetools e tentar obter as " +"atualizações." #: ../share/extensions/gcodetools_dxf_points.inx.h:1 -#, fuzzy msgid "DXF Points" -msgstr "Pontos" +msgstr "Pontos DXF" #: ../share/extensions/gcodetools_dxf_points.inx.h:2 -#, fuzzy msgid "DXF points" -msgstr "Entrada DXF" +msgstr "Pontos DXF" #: ../share/extensions/gcodetools_dxf_points.inx.h:3 -#, fuzzy msgid "Convert selection:" -msgstr "In_verter Seleção" +msgstr "Converter seleção:" #: ../share/extensions/gcodetools_dxf_points.inx.h:4 msgid "" @@ -36495,40 +34622,43 @@ msgid "" "used. Also you can manually select object, open XML editor (Shift+Ctrl+X) " "and add or remove XML tag 'dxfpoint' with any value." msgstr "" +"Converter os objetos selecionados para perfurar pontos (tal como o módulo " +"dxf_import faz). Também pode gravar a forma original. Apenas será utilizado " +"o ponto inicial de cada curva. Também pode selecionar o objeto manualmente, " +"abrir o editor XML (Shift+Ctrl+X) e adicionar ou remover a etiqueta XML " +"'dxfpoint' com qualquer valor." #: ../share/extensions/gcodetools_dxf_points.inx.h:5 msgid "set as dxfpoint and save shape" -msgstr "" +msgstr "definir como ponto dxf (dxfpoint) e gravar forma" #: ../share/extensions/gcodetools_dxf_points.inx.h:6 msgid "set as dxfpoint and draw arrow" -msgstr "" +msgstr "definir como ponto dxf (dxfpoint) e desenhar seta" #: ../share/extensions/gcodetools_dxf_points.inx.h:7 msgid "clear dxfpoint sign" -msgstr "" +msgstr "limpar sinal de ponto dxf (dxfpoint)" #: ../share/extensions/gcodetools_engraving.inx.h:1 -#, fuzzy msgid "Engraving" -msgstr "Desenho" +msgstr "Gravura" #: ../share/extensions/gcodetools_engraving.inx.h:2 msgid "Smooth convex corners between this value and 180 degrees:" -msgstr "" +msgstr "Suavizar cantos convexos entre este valor e 180 graus:" #: ../share/extensions/gcodetools_engraving.inx.h:3 -#, fuzzy msgid "Maximum distance for engraving (mm/inch):" -msgstr "Deslocamento máximo, px" +msgstr "Distância máxima para gravura (mm/polegadas):" #: ../share/extensions/gcodetools_engraving.inx.h:4 msgid "Accuracy factor (2 low to 10 high):" -msgstr "" +msgstr "Fator de precisão (de 2 baixo até 10 alto):" #: ../share/extensions/gcodetools_engraving.inx.h:5 msgid "Draw additional graphics to see engraving path" -msgstr "" +msgstr "Desenhar gráficos adicionais para ver o caminho de gravura" #: ../share/extensions/gcodetools_engraving.inx.h:6 msgid "" @@ -36539,83 +34669,81 @@ msgid "" "sphere..(radius r)...........................: math.sqrt(max(0,r**2-w**2)) " "ellipse.(minor axis r, major 4r).....: math.sqrt(max(0,r**2-w**2))*4" msgstr "" +"Esta função cria um caminho para letras de gravura ou qualquer forma com " +"ângulos agudos. A profundidade de corte como função do raio é definida pela " +"ferramenta. A profundidade pode ser qualquer expressão Python. Por exemplo: " +"cone....(45 degrees)......................: w cone....(height/" +"diameter=10/3)..: 10*w/3 sphere..(radius r)...........................: math." +"sqrt(max(0,r**2-w**2)) ellipse.(minor axis r, major 4r).....: math." +"sqrt(max(0,r**2-w**2))*4" #: ../share/extensions/gcodetools_graffiti.inx.h:1 msgid "Graffiti" -msgstr "" +msgstr "Grafiti" #: ../share/extensions/gcodetools_graffiti.inx.h:2 -#, fuzzy msgid "Maximum segment length:" -msgstr "Comprimento máximo dos segmentos" +msgstr "Comprimento máximo do segmento:" #: ../share/extensions/gcodetools_graffiti.inx.h:3 -#, fuzzy msgid "Minimal connector radius:" -msgstr "Raio interno:" +msgstr "Raio mínimo do conetor:" #: ../share/extensions/gcodetools_graffiti.inx.h:4 -#, fuzzy msgid "Start position (x;y):" -msgstr "Posição Aleatória" +msgstr "Posição inicial (x;y):" #: ../share/extensions/gcodetools_graffiti.inx.h:5 -#, fuzzy msgid "Create preview" -msgstr "Pré-Visualizar Ao Vivo" +msgstr "Criar pré-visuzalização" #: ../share/extensions/gcodetools_graffiti.inx.h:6 -#, fuzzy msgid "Create linearization preview" -msgstr "Criar degradê linear" +msgstr "Criar pré-visuzalização linear" #: ../share/extensions/gcodetools_graffiti.inx.h:7 -#, fuzzy msgid "Preview's size (px):" -msgstr "Ponta quadrada" +msgstr "Tamanho da pré-visualização (px):" #: ../share/extensions/gcodetools_graffiti.inx.h:8 msgid "Preview's paint emmit (pts/s):" -msgstr "" +msgstr "Prever a emissão de pintura (pontos/segundo):" #: ../share/extensions/gcodetools_graffiti.inx.h:10 #: ../share/extensions/gcodetools_orientation_points.inx.h:3 -#, fuzzy msgid "Orientation type:" -msgstr "Orientação da página:" +msgstr "Tipo de orientação:" #: ../share/extensions/gcodetools_graffiti.inx.h:11 #: ../share/extensions/gcodetools_orientation_points.inx.h:4 msgid "Z surface:" -msgstr "" +msgstr "Superfície Z:" #: ../share/extensions/gcodetools_graffiti.inx.h:12 #: ../share/extensions/gcodetools_orientation_points.inx.h:5 -#, fuzzy msgid "Z depth:" -msgstr "Dentes" +msgstr "Profundidade Z:" #: ../share/extensions/gcodetools_graffiti.inx.h:14 #: ../share/extensions/gcodetools_orientation_points.inx.h:7 msgid "2-points mode (move and rotate, maintained aspect ratio X/Y)" -msgstr "" +msgstr "Modo 2-pontos (mover e rodar, rácio altura/largura X/Y inalterado)" #: ../share/extensions/gcodetools_graffiti.inx.h:15 #: ../share/extensions/gcodetools_orientation_points.inx.h:8 msgid "3-points mode (move, rotate and mirror, different X/Y scale)" msgstr "" +"Modo 3 pontos (mover, rodar e espelhar, escala altura/largura X/Y diferente)" #: ../share/extensions/gcodetools_graffiti.inx.h:16 #: ../share/extensions/gcodetools_orientation_points.inx.h:9 -#, fuzzy msgid "graffiti points" -msgstr "Orientação da página:" +msgstr "pontos grafiti" #: ../share/extensions/gcodetools_graffiti.inx.h:17 #: ../share/extensions/gcodetools_orientation_points.inx.h:10 -#, fuzzy msgid "in-out reference point" -msgstr "Preferências do degradê" +msgstr "ponto de referência dentro-fora" #: ../share/extensions/gcodetools_graffiti.inx.h:20 #: ../share/extensions/gcodetools_orientation_points.inx.h:13 @@ -36629,177 +34757,168 @@ msgid "" "the group or by Ctrl+Click. Now press apply to create control points " "(independent set for each layer)." msgstr "" +"Os pontos de orientação são usados para calcular a transformação " +"(deslocamento, escala, espelho, rotação no plano XY) do caminho. Modo 3 " +"pontos apenas: não puxar todos os 3 para 1 linha (usar antes modo de 2 " +"pontos). Pode alterar a superfície Z e os valores de profundidade Z mais " +"tarde utilizando a ferramenta de texto (terceiras coordenadas). Se não " +"houverem pontos de orientação dentro da camada atual, estes são retirados da " +"camada acima. Não desagrupar pontos de orientação! Pode-se selecioná-los com " +"clique duplo neles para entrar no grupo ou com Ctrl+clicar. Agora clicar em " +"Aplicar para criar os pontos de controlo (definição independente para cada " +"camada)." #: ../share/extensions/gcodetools_lathe.inx.h:1 -#, fuzzy msgid "Lathe" -msgstr "Metro" +msgstr "Torneado" #: ../share/extensions/gcodetools_lathe.inx.h:2 -#, fuzzy msgid "Lathe width:" -msgstr "Escala de largura" +msgstr "Largura do torneado:" #: ../share/extensions/gcodetools_lathe.inx.h:3 -#, fuzzy msgid "Fine cut width:" -msgstr "Escala de largura" +msgstr "Largura do corte perfeito:" #: ../share/extensions/gcodetools_lathe.inx.h:4 -#, fuzzy msgid "Fine cut count:" -msgstr "Fundo" +msgstr "Contagem do corte perfeito:" #: ../share/extensions/gcodetools_lathe.inx.h:5 -#, fuzzy msgid "Create fine cut using:" -msgstr "Criar novos objectos com:" +msgstr "Criar corte perfeito com:" #: ../share/extensions/gcodetools_lathe.inx.h:6 msgid "Lathe X axis remap:" -msgstr "" +msgstr "Remapear o tornear do eixo X:" #: ../share/extensions/gcodetools_lathe.inx.h:7 msgid "Lathe Z axis remap:" -msgstr "" +msgstr "Remapear o tornear do eixo Z:" #: ../share/extensions/gcodetools_lathe.inx.h:8 -#, fuzzy msgid "Move path" -msgstr "Padrões" +msgstr "Caminho de mover" #: ../share/extensions/gcodetools_lathe.inx.h:9 msgid "Offset path" -msgstr "Tipografia" +msgstr "Caminho de deslocamento" #: ../share/extensions/gcodetools_lathe.inx.h:10 -#, fuzzy msgid "Lathe modify path" -msgstr "Modificar Caminho" +msgstr "Caminho para alterar o torneado" #: ../share/extensions/gcodetools_lathe.inx.h:11 msgid "" "This function modifies path so it will be able to be cut with the " "rectangular cutter." msgstr "" +"Esta função altera o caminho para que este possa ser cortado com o cortante " +"retangular." #: ../share/extensions/gcodetools_orientation_points.inx.h:1 -#, fuzzy msgid "Orientation points" -msgstr "Orientação da página:" +msgstr "Pontos de orientação" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:1 msgid "Prepare path for plasma" -msgstr "" +msgstr "Preparar caminho para plasma" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:2 msgid "Prepare path for plasma or laser cuters" -msgstr "" +msgstr "Preparar o caminho para corte a plasma ou a laser" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:3 -#, fuzzy msgid "Create in-out paths" -msgstr "Criar espirais" +msgstr "Criar caminhos dentro-fora" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:4 -#, fuzzy msgid "In-out path length:" -msgstr "Caminho ao longo do caminho" +msgstr "Comprimento do caminho dentro-fora:" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:5 msgid "In-out path max distance to reference point:" -msgstr "" +msgstr "Distância máxima do caminho dentro-fora ao ponto de referência:" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:6 msgid "In-out path type:" -msgstr "" +msgstr "Tipo do caminho dentro-fora:" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:7 msgid "In-out path radius for round path:" -msgstr "" +msgstr "Raio do caminho dentro-fora para o caminho redondo:" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:8 -#, fuzzy msgid "Replace original path" -msgstr "Substituir texto..." +msgstr "Substituir caminho original" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:9 msgid "Do not add in-out reference points" -msgstr "" +msgstr "Náo adicionar pontos de referência dentro-fora" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:10 -#, fuzzy msgid "Prepare corners" -msgstr "Cor da borda da página" +msgstr "Preparar cantos" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:11 -#, fuzzy msgid "Stepout distance for corners:" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "A distância de saída para os cantos:" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:12 msgid "Maximum angle for corner (0-180 deg):" -msgstr "" +msgstr "Ângulo máximo para o canto (0-180 graus):" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:14 -#, fuzzy msgid "Perpendicular" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "Perpendicular" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:15 -#, fuzzy msgid "Tangent" -msgstr "Magenta" +msgstr "Tangente" #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:16 msgid "-------------------------------------------------" -msgstr "" +msgstr "-------------------------------------------------" #: ../share/extensions/gcodetools_tools_library.inx.h:1 msgid "Tools library" -msgstr "" +msgstr "Biblioteca de ferramentas" #: ../share/extensions/gcodetools_tools_library.inx.h:2 -#, fuzzy msgid "Tools type:" -msgstr "Todos os tipos" +msgstr "Tipo de ferramentas:" #: ../share/extensions/gcodetools_tools_library.inx.h:3 -#, fuzzy msgid "default" -msgstr "(padrão)" +msgstr "padrão" #: ../share/extensions/gcodetools_tools_library.inx.h:4 -#, fuzzy msgid "cylinder" -msgstr "Multilinha" +msgstr "cilindro" #: ../share/extensions/gcodetools_tools_library.inx.h:5 -#, fuzzy msgid "cone" -msgstr "Esquinas" +msgstr "cone" #: ../share/extensions/gcodetools_tools_library.inx.h:6 -#, fuzzy msgid "plasma" -msgstr "_Splash" +msgstr "plasma" #: ../share/extensions/gcodetools_tools_library.inx.h:7 -#, fuzzy msgid "tangent knife" -msgstr "Tipografia tangencial" +msgstr "faca tangente" #: ../share/extensions/gcodetools_tools_library.inx.h:8 msgid "lathe cutter" -msgstr "" +msgstr "cortante de torno" #: ../share/extensions/gcodetools_tools_library.inx.h:9 msgid "graffiti" -msgstr "" +msgstr "grafiti" #: ../share/extensions/gcodetools_tools_library.inx.h:10 msgid "Just check tools" -msgstr "" +msgstr "Apenas verificar ferramentas" #: ../share/extensions/gcodetools_tools_library.inx.h:11 msgid "" @@ -36808,19 +34927,23 @@ msgid "" "active layer is used. If there is no tool inside the current layer it is " "taken from the upper layer. Press Apply to create new tool." msgstr "" +"O tipo de ferramenta selecionada preenche os valores padrão apropriados. " +"Pode-se alterar estes valores utilizando a ferramenta Texto posteriormente. " +"É usada a ferramenta mais acima (ordem Z) na camada ativa. Se não existir " +"nenhuma ferramenta dentro da camada atual, é usada a ferramenta da camada " +"acima. Clicar em Aplicar para criar uma nova ferramenta." #: ../share/extensions/generate_voronoi.inx.h:1 -#, fuzzy msgid "Voronoi Pattern" -msgstr "Padrões" +msgstr "Padrão Voronoi" #: ../share/extensions/generate_voronoi.inx.h:3 msgid "Average size of cell (px):" -msgstr "" +msgstr "Tamanho médio da célula (px):" #: ../share/extensions/generate_voronoi.inx.h:4 msgid "Size of Border (px):" -msgstr "" +msgstr "Tamanho da Borda (px):" #: ../share/extensions/generate_voronoi.inx.h:6 msgid "" @@ -36832,30 +34955,33 @@ msgid "" "join of the pattern at the edges. Use a negative border to reduce the size " "of the pattern and get an empty border." msgstr "" +"Gera um padrão aleatório de células Voronoi. O padrão estará acessível no " +"painel de Preenchimento e Traço. Tem de se selecionar um objeto ou grupo.\n" +"\n" +"Se a borda for zero, o padrão será descontínuo nas laterais. Usar uma borda " +"de valor positivo, preferencialmente maior que o tamanho da célula, para " +"produzir uma união suave do padrão nas bordas. Usar uma borda de valor " +"negativo para reduzir o tamanho do padrão e para obter uma borda vazia." #: ../share/extensions/gimp_xcf.inx.h:1 msgid "GIMP XCF" msgstr "GIMP XCF" #: ../share/extensions/gimp_xcf.inx.h:3 -#, fuzzy msgid "Save Guides" -msgstr "Guias" +msgstr "Gravar Guias" #: ../share/extensions/gimp_xcf.inx.h:4 -#, fuzzy msgid "Save Grid" -msgstr "Guias" +msgstr "Gravar Grelha" #: ../share/extensions/gimp_xcf.inx.h:5 -#, fuzzy msgid "Save Background" -msgstr "Plano de fundo:" +msgstr "Gravar Fundo" #: ../share/extensions/gimp_xcf.inx.h:6 -#, fuzzy msgid "File Resolution:" -msgstr "Relação:" +msgstr "Resolução do Ficheiro:" #: ../share/extensions/gimp_xcf.inx.h:8 msgid "" @@ -36871,170 +34997,161 @@ msgid "" "concatenated and converted with their first level parent layer into a single " "Gimp layer." msgstr "" +"Esta extensão exporta o documento para o formato GIMP XCF de acordo com as " +"seguintes opções:\n" +" * Gravar Guias: converte todas as guias em guias GIMP.\n" +" * Gravar Grelha: converte a primeira grelha retangular numa grelha GIMP " +"(notar que a grelha padrão do Inkscape é muito estreita quando mostrada no " +"GIMP).\n" +" * Gravar Fundo: adiciona o fundo do documento a cada camada convertida.\n" +" * Resolução do Ficheiro: resolução em pontos por polegada (DPI) do " +"ficheiro XCF.\n" +"\n" +"Cada camada de primeiro nível é convertida numa camada GIMP. As sub-camadas " +"são unidas e convertidas com a camada acima numa camada apenas do GIMP." #: ../share/extensions/gimp_xcf.inx.h:15 -#, fuzzy msgid "GIMP XCF maintaining layers (*.xcf)" -msgstr "GIMP XCF preservando camadas (*.XCF)" +msgstr "GIMP XCF preservando camadas (*.xcf" #: ../share/extensions/grid_cartesian.inx.h:1 -#, fuzzy msgid "Cartesian Grid" -msgstr "Criar nova grelha" +msgstr "Grelha Cartesiana" #: ../share/extensions/grid_cartesian.inx.h:2 #: ../share/extensions/grid_isometric.inx.h:10 -#, fuzzy msgid "Border Thickness (px):" -msgstr "Medida da Grossura do Papel" +msgstr "Espessura da Borda (px):" #: ../share/extensions/grid_cartesian.inx.h:3 msgid "X Axis" -msgstr "" +msgstr "Eixo X" #: ../share/extensions/grid_cartesian.inx.h:4 -#, fuzzy msgid "Major X Divisions:" -msgstr "Divisão" +msgstr "Divisões X Maiores:" #: ../share/extensions/grid_cartesian.inx.h:5 -#, fuzzy msgid "Major X Division Spacing (px):" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento da Divisão X Maior (px):" #: ../share/extensions/grid_cartesian.inx.h:6 -#, fuzzy msgid "Subdivisions per Major X Division:" -msgstr "Divisão" +msgstr "Subdivisões por Divisão X Maior:" #: ../share/extensions/grid_cartesian.inx.h:7 msgid "Logarithmic X Subdiv. (Base given by entry above)" -msgstr "" +msgstr "Subdivisão X Logarítmica (base obtida da entrada acima)" #: ../share/extensions/grid_cartesian.inx.h:8 msgid "Subsubdivs. per X Subdivision:" -msgstr "" +msgstr "Subsubdiviões por Subdivisão X:" #: ../share/extensions/grid_cartesian.inx.h:9 msgid "Halve X Subsubdiv. Frequency after 'n' Subdivs. (log only):" msgstr "" +"Metade das subsubdivisões X. Frequência após 'N' Suvdivisões. (apenas log):" #: ../share/extensions/grid_cartesian.inx.h:10 -#, fuzzy msgid "Major X Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão X Maior (px):" #: ../share/extensions/grid_cartesian.inx.h:11 -#, fuzzy msgid "Minor X Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão X Menor (px):" #: ../share/extensions/grid_cartesian.inx.h:12 -#, fuzzy msgid "Subminor X Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão X Submenor (px):" #: ../share/extensions/grid_cartesian.inx.h:13 msgid "Y Axis" -msgstr "" +msgstr "Eixo Y" #: ../share/extensions/grid_cartesian.inx.h:14 -#, fuzzy msgid "Major Y Divisions:" -msgstr "Divisão" +msgstr "Divisões Y Maiores:" #: ../share/extensions/grid_cartesian.inx.h:15 -#, fuzzy msgid "Major Y Division Spacing (px):" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento Divisão Y Maior (px):" #: ../share/extensions/grid_cartesian.inx.h:16 -#, fuzzy msgid "Subdivisions per Major Y Division:" -msgstr "Divisão" +msgstr "Subdivisões por Divisão Y Maior:" #: ../share/extensions/grid_cartesian.inx.h:17 msgid "Logarithmic Y Subdiv. (Base given by entry above)" -msgstr "" +msgstr "Subdivisão Y Logarítmica (base obtida da entrada acima)" #: ../share/extensions/grid_cartesian.inx.h:18 msgid "Subsubdivs. per Y Subdivision:" -msgstr "" +msgstr "Subsubdiviões por Subdivisão Y:" #: ../share/extensions/grid_cartesian.inx.h:19 msgid "Halve Y Subsubdiv. Frequency after 'n' Subdivs. (log only):" msgstr "" +"Metade das subsubdivisões Y. Frequência após 'N' Suvdivisões. (apenas log):" #: ../share/extensions/grid_cartesian.inx.h:20 -#, fuzzy msgid "Major Y Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Y Maior (px):" #: ../share/extensions/grid_cartesian.inx.h:21 -#, fuzzy msgid "Minor Y Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Y Menor (px):" #: ../share/extensions/grid_cartesian.inx.h:22 -#, fuzzy msgid "Subminor Y Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Y Submenor (px):" #: ../share/extensions/grid_isometric.inx.h:1 -#, fuzzy msgid "Isometric Grid" -msgstr "Grelha axonométrica" +msgstr "Grelha Isométrica:" #: ../share/extensions/grid_isometric.inx.h:2 -#, fuzzy msgid "X Divisions [x2]:" -msgstr "Divisão" +msgstr "Divisões X [x2]:" #: ../share/extensions/grid_isometric.inx.h:3 msgid "Y Divisions [x2] [> 1/2 X Div]:" -msgstr "" +msgstr "Divisões Y [x2] [> 1/2 Div X]:" #: ../share/extensions/grid_isometric.inx.h:4 -#, fuzzy msgid "Division Spacing (px):" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento das Divisões (px):" #: ../share/extensions/grid_isometric.inx.h:5 -#, fuzzy msgid "Subdivisions per Major Division:" -msgstr "Divisão" +msgstr "Subdivisões por Divisão Maior:" #: ../share/extensions/grid_isometric.inx.h:6 -#, fuzzy msgid "Subsubdivs per Subdivision:" -msgstr "Divisão" +msgstr "Subsubdivisões por Subdivisão:" #: ../share/extensions/grid_isometric.inx.h:7 -#, fuzzy msgid "Major Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Maior (px):" #: ../share/extensions/grid_isometric.inx.h:8 -#, fuzzy msgid "Minor Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Menor (px):" #: ../share/extensions/grid_isometric.inx.h:9 -#, fuzzy msgid "Subminor Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Submenor (px):" #: ../share/extensions/grid_polar.inx.h:1 msgid "Polar Grid" -msgstr "" +msgstr "Grelha Polar" #: ../share/extensions/grid_polar.inx.h:2 msgid "Centre Dot Diameter (px):" -msgstr "" +msgstr "Diâmetro do Ponto do Meio (px):" #: ../share/extensions/grid_polar.inx.h:3 msgid "Circumferential Labels:" -msgstr "" +msgstr "Etiquetas Circunferenciais:" #: ../share/extensions/grid_polar.inx.h:5 msgid "Degrees" @@ -37042,203 +35159,172 @@ msgstr "Graus" #: ../share/extensions/grid_polar.inx.h:6 msgid "Circumferential Label Size (px):" -msgstr "" +msgstr "Tamanho da Etiqueta Circunferencial (px):" #: ../share/extensions/grid_polar.inx.h:7 msgid "Circumferential Label Outset (px):" -msgstr "" +msgstr "Deslocamento da Etiqueta Circunferencial (px):" #: ../share/extensions/grid_polar.inx.h:8 -#, fuzzy msgid "Circular Divisions" -msgstr "Divisão" +msgstr "Divisões Circulares" #: ../share/extensions/grid_polar.inx.h:9 -#, fuzzy msgid "Major Circular Divisions:" -msgstr "Divisão" +msgstr "Divisões Circulares Maiores:" #: ../share/extensions/grid_polar.inx.h:10 -#, fuzzy msgid "Major Circular Division Spacing (px):" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento da Divisão Circular Maior (px):" #: ../share/extensions/grid_polar.inx.h:11 msgid "Subdivisions per Major Circular Division:" -msgstr "" +msgstr "Subdivisões por Divisão Circular Maior:" #: ../share/extensions/grid_polar.inx.h:12 msgid "Logarithmic Subdiv. (Base given by entry above)" -msgstr "" +msgstr "Subdivisão Logarítmica (base fornecida pela entrada acima)" #: ../share/extensions/grid_polar.inx.h:13 -#, fuzzy msgid "Major Circular Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Circular Maior (px):" #: ../share/extensions/grid_polar.inx.h:14 -#, fuzzy msgid "Minor Circular Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Circular Menor (px):" #: ../share/extensions/grid_polar.inx.h:15 -#, fuzzy msgid "Angular Divisions" -msgstr "Divisão" +msgstr "Divisões Angulares" #: ../share/extensions/grid_polar.inx.h:16 -#, fuzzy msgid "Angle Divisions:" -msgstr "Divisão" +msgstr "Divisões do Ângulo:" #: ../share/extensions/grid_polar.inx.h:17 -#, fuzzy msgid "Angle Divisions at Centre:" -msgstr "Divisão" +msgstr "Divisões do Ângulo no Centro:" #: ../share/extensions/grid_polar.inx.h:18 msgid "Subdivisions per Major Angular Division:" -msgstr "" +msgstr "Subdivisões por Divisão Angular Maior:" #: ../share/extensions/grid_polar.inx.h:19 msgid "Minor Angle Division End 'n' Divs. Before Centre:" -msgstr "" +msgstr "Divisão do Ângulo Menor Termina a 'N' Divs. Antes do Centro:" #: ../share/extensions/grid_polar.inx.h:20 -#, fuzzy msgid "Major Angular Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Angular Maior (px):" #: ../share/extensions/grid_polar.inx.h:21 -#, fuzzy msgid "Minor Angular Division Thickness (px):" -msgstr "Divisão" +msgstr "Espessura da Divisão Angular Menor (px):" #: ../share/extensions/guides_creator.inx.h:1 -#, fuzzy msgid "Guides creator" -msgstr "Cor das gui_as:" +msgstr "Criador de guias" #: ../share/extensions/guides_creator.inx.h:2 -#, fuzzy msgid "Regular guides" -msgstr "Grelha retangular" +msgstr "Guias regulares" #: ../share/extensions/guides_creator.inx.h:3 -#, fuzzy msgid "Guides preset:" -msgstr "Cor das gui_as:" +msgstr "Modelo de guias:" #: ../share/extensions/guides_creator.inx.h:6 -#, fuzzy msgid "Start from edges" -msgstr "começar do centro" +msgstr "Começar pelas bordas" #: ../share/extensions/guides_creator.inx.h:7 -#, fuzzy msgid "Delete existing guides" -msgstr "Remover guias existentes" +msgstr "Eliminar guias existentes" #: ../share/extensions/guides_creator.inx.h:8 msgid "Custom..." -msgstr "Personalizar..." +msgstr "Personalizado..." #: ../share/extensions/guides_creator.inx.h:9 -#, fuzzy msgid "Golden ratio" -msgstr "Proporção do raio:" +msgstr "Proporção de ouro" #: ../share/extensions/guides_creator.inx.h:10 msgid "Rule-of-third" -msgstr "" +msgstr "Regra dos terços" #: ../share/extensions/guides_creator.inx.h:11 -#, fuzzy msgid "Diagonal guides" -msgstr "Encaixando às guias" +msgstr "Guias diagonais" #: ../share/extensions/guides_creator.inx.h:12 -#, fuzzy msgid "Upper left corner" -msgstr "Cor da borda da página" +msgstr "Canto superior esquerdo" #: ../share/extensions/guides_creator.inx.h:13 -#, fuzzy msgid "Upper right corner" -msgstr "Cor da borda da página" +msgstr "Canto superior direito" #: ../share/extensions/guides_creator.inx.h:14 -#, fuzzy msgid "Lower left corner" -msgstr "Baixar a camada actual" +msgstr "Canto inferior esquerdo" #: ../share/extensions/guides_creator.inx.h:15 -#, fuzzy msgid "Lower right corner" -msgstr "Baixar a camada actual" +msgstr "Canto inferior direito" #: ../share/extensions/guides_creator.inx.h:16 -#, fuzzy msgid "Margins" -msgstr "caixa de arte" +msgstr "Margens" #: ../share/extensions/guides_creator.inx.h:17 msgid "Margins preset:" -msgstr "" +msgstr "Modelo de margens:" #: ../share/extensions/guides_creator.inx.h:18 -#, fuzzy msgid "Header margin:" -msgstr "Ângulo esquerdo" +msgstr "Margem do cabeçalho:" #: ../share/extensions/guides_creator.inx.h:19 -#, fuzzy msgid "Footer margin:" -msgstr "Soltar cor" +msgstr "Margem do rodapé:" #: ../share/extensions/guides_creator.inx.h:20 -#, fuzzy msgid "Left margin:" -msgstr "Ângulo esquerdo" +msgstr "Margem esquerda:" #: ../share/extensions/guides_creator.inx.h:21 -#, fuzzy msgid "Right margin:" -msgstr "Ângulo direito" +msgstr "Margem direita:" #: ../share/extensions/guides_creator.inx.h:22 -#, fuzzy msgid "Left book page" -msgstr "Ângulo esquerdo" +msgstr "Página esquerda de livro" #: ../share/extensions/guides_creator.inx.h:23 -#, fuzzy msgid "Right book page" -msgstr "Ângulo direito" +msgstr "Página direita de livro" #: ../share/extensions/guides_creator.inx.h:24 -#, fuzzy msgctxt "Margin" msgid "None" -msgstr "Nenhum" +msgstr "Nenhuma" #: ../share/extensions/guillotine.inx.h:1 -#, fuzzy msgid "Guillotine" -msgstr "Cor da linha guia" +msgstr "Guilhotina" #: ../share/extensions/guillotine.inx.h:2 -#, fuzzy msgid "Directory to save images to:" -msgstr "Local onde guardar a imagem" +msgstr "Local onde gravar as imagens:" #: ../share/extensions/guillotine.inx.h:3 msgid "Image name (without extension):" -msgstr "" +msgstr "Nome da imagem (sem extensão):" #: ../share/extensions/guillotine.inx.h:4 msgid "Ignore these settings and use export hints" -msgstr "" +msgstr "Ignorar estas definições e usar dicas de exportar" #: ../share/extensions/handles.inx.h:1 msgid "Draw Handles" @@ -37246,138 +35332,118 @@ msgstr "Desenhar Alças" #: ../share/extensions/hershey.inx.h:1 msgid "Hershey Text" -msgstr "" +msgstr "Texto Hershey" #: ../share/extensions/hershey.inx.h:2 -#, fuzzy msgid "Render Text" -msgstr "Render" +msgstr "Renderizar Texto" #: ../share/extensions/hershey.inx.h:3 #: ../share/extensions/render_alphabetsoup.inx.h:2 #: ../share/extensions/render_barcode_datamatrix.inx.h:2 #: ../share/extensions/render_barcode_qrcode.inx.h:3 -#, fuzzy msgid "Text:" -msgstr "Texto" +msgstr "Texto:" #: ../share/extensions/hershey.inx.h:4 -#, fuzzy msgid "Action: " -msgstr "Aceleração:" +msgstr "Ação: " #: ../share/extensions/hershey.inx.h:5 -#, fuzzy msgid "Font face: " -msgstr "Tamanho da Fonte" +msgstr "Fonte: " #: ../share/extensions/hershey.inx.h:6 -#, fuzzy msgid "Typeset that text" -msgstr "Digite o texto" +msgstr "Escrever esse texto" #: ../share/extensions/hershey.inx.h:7 msgid "Write glyph table" -msgstr "" +msgstr "Escrever tabela de caracteres" #: ../share/extensions/hershey.inx.h:8 -#, fuzzy msgid "Sans 1-stroke" -msgstr "Redefinir o traço" +msgstr "Sem serifa 1-traço" #: ../share/extensions/hershey.inx.h:9 -#, fuzzy msgid "Sans bold" -msgstr "Tornar negrito" +msgstr "Sem serifa negrito" #: ../share/extensions/hershey.inx.h:10 -#, fuzzy msgid "Serif medium" -msgstr "médio" +msgstr "Serifa médio" #: ../share/extensions/hershey.inx.h:11 msgid "Serif medium italic" -msgstr "" +msgstr "Serifa médio itálico" #: ../share/extensions/hershey.inx.h:12 msgid "Serif bold italic" -msgstr "" +msgstr "Serifa negrito itálico" #: ../share/extensions/hershey.inx.h:13 -#, fuzzy msgid "Serif bold" -msgstr "Tornar negrito" +msgstr "Serifa negrito" #: ../share/extensions/hershey.inx.h:14 -#, fuzzy msgid "Script 1-stroke" -msgstr "Redefinir o traço" +msgstr "Cursiva 1-traço" #: ../share/extensions/hershey.inx.h:15 msgid "Script 1-stroke (alt)" -msgstr "" +msgstr "Cursiva 1-traço (alt)" #: ../share/extensions/hershey.inx.h:16 -#, fuzzy msgid "Script medium" -msgstr "Script" +msgstr "Cursiva média" #: ../share/extensions/hershey.inx.h:17 -#, fuzzy msgid "Gothic English" -msgstr "Aumentar ajuste" +msgstr "Gótico Inglês" #: ../share/extensions/hershey.inx.h:18 -#, fuzzy msgid "Gothic German" -msgstr "Aumentar ajuste" +msgstr "Gótico Alemão" #: ../share/extensions/hershey.inx.h:19 -#, fuzzy msgid "Gothic Italian" -msgstr "Aumentar ajuste" +msgstr "Gótico Italiano" #: ../share/extensions/hershey.inx.h:20 -#, fuzzy msgid "Greek 1-stroke" -msgstr "Redefinir o traço" +msgstr "Grego 1-traço" #: ../share/extensions/hershey.inx.h:21 -#, fuzzy msgid "Greek medium" -msgstr "médio" +msgstr "Grego médio" #: ../share/extensions/hershey.inx.h:23 -#, fuzzy msgid "Japanese" -msgstr "linhas" +msgstr "Japonês" #: ../share/extensions/hershey.inx.h:24 -#, fuzzy msgid "Astrology" -msgstr "Morfologia" +msgstr "Astrologia" #: ../share/extensions/hershey.inx.h:25 msgid "Math (lower)" -msgstr "" +msgstr "Matemática (baixa)" #: ../share/extensions/hershey.inx.h:26 -#, fuzzy msgid "Math (upper)" -msgstr "(perpendicular ao traço, \"escova\")" +msgstr "Matemática (alta)" #: ../share/extensions/hershey.inx.h:28 -#, fuzzy msgid "Meteorology" -msgstr "Morfologia" +msgstr "Metereologia" #: ../share/extensions/hershey.inx.h:29 msgid "Music" -msgstr "" +msgstr "Música" #: ../share/extensions/hershey.inx.h:30 msgid "Symbolic" -msgstr "" +msgstr "Simbólico" #: ../share/extensions/hershey.inx.h:31 msgid "" @@ -37386,10 +35452,14 @@ msgid "" "\n" "\n" msgstr "" +" \n" +"\n" +"\n" +"\n" #: ../share/extensions/hershey.inx.h:36 msgid "About..." -msgstr "" +msgstr "Sobre..." #: ../share/extensions/hershey.inx.h:37 msgid "" @@ -37409,11 +35479,25 @@ msgid "" "For additional information, please visit:\n" " www.evilmadscientist.com/go/hershey" msgstr "" +"\n" +"Esta extensão renderiza uma linha de texto usando\n" +"as fontes \"Hershey\" para plotters, derivadas de \n" +"NBS SP-424 1976-04, \"A contribution to \n" +"computer typesetting techniques: Tables of\n" +"Coordinates for Hershey's Repertory of\n" +"Occidental Type Fonts and Graphic Symbols.\"\n" +"\n" +"Estas fontes não são fontes tradicionais\n" +"de \"contorno\", mas sim fontes de \"traço único\",\n" +"ou fontes tipo \"gravura\" nas quais o caracter é\n" +"formado pela linha (e não o preenchimento).\n" +"\n" +"Para mais informações, aceder a:\n" +" www.evilmadscientist.com/go/hershey" #: ../share/extensions/hpgl_input.inx.h:1 -#, fuzzy msgid "HPGL Input" -msgstr "Entrada WPG" +msgstr "Importar HPGL" #: ../share/extensions/hpgl_input.inx.h:2 msgid "" @@ -37421,12 +35505,14 @@ msgid "" "other HPGL files please change their file extension to .plt, make sure you " "have UniConverter installed and open them again." msgstr "" +"Notar que apenas se pode abrir ficheiros HPGL gravados no Inkscape. Para " +"abrir ficheiros HPGL gravados noutros programas, tem de se alterar a " +"extensão dos ficheiros para .plt e ter instalado o UniConverter." #: ../share/extensions/hpgl_input.inx.h:3 #: ../share/extensions/hpgl_output.inx.h:4 ../share/extensions/plotter.inx.h:32 -#, fuzzy msgid "Resolution X (dpi):" -msgstr "Resolução preferida para a figura (pontos por polegada)" +msgstr "Resolução X (dpi):" #: ../share/extensions/hpgl_input.inx.h:4 #: ../share/extensions/hpgl_output.inx.h:5 ../share/extensions/plotter.inx.h:33 @@ -37434,12 +35520,13 @@ msgid "" "The amount of steps the plotter moves if it moves for 1 inch on the X axis " "(Default: 1016.0)" msgstr "" +"A quantidade de passos que a plotter se move em 1 polegada no eixo do Y " +"(padrão: 1016.0)" #: ../share/extensions/hpgl_input.inx.h:5 #: ../share/extensions/hpgl_output.inx.h:6 ../share/extensions/plotter.inx.h:34 -#, fuzzy msgid "Resolution Y (dpi):" -msgstr "Resolução preferida para a figura (pontos por polegada)" +msgstr "Resolução Y (dpi):" #: ../share/extensions/hpgl_input.inx.h:6 #: ../share/extensions/hpgl_output.inx.h:7 ../share/extensions/plotter.inx.h:35 @@ -37447,30 +35534,29 @@ msgid "" "The amount of steps the plotter moves if it moves for 1 inch on the Y axis " "(Default: 1016.0)" msgstr "" +"A quantidade de passos que a plotter se move em 1 polegada no eixo do Y " +"(padrão: 1016.0)" #: ../share/extensions/hpgl_input.inx.h:7 msgid "Show movements between paths" -msgstr "" +msgstr "Mostrar movimentos entre caminhos" #: ../share/extensions/hpgl_input.inx.h:8 msgid "Check this to show movements between paths (Default: Unchecked)" -msgstr "" +msgstr "Ativar para mostrar movimentos entre caminhos (padrão: desativado)" #: ../share/extensions/hpgl_input.inx.h:9 #: ../share/extensions/hpgl_output.inx.h:35 -#, fuzzy msgid "HP Graphics Language file (*.hpgl)" -msgstr "Ficheiro XFIG Graphics (*.fig)" +msgstr "HP Graphics Language(*.hpgl)" #: ../share/extensions/hpgl_input.inx.h:10 -#, fuzzy msgid "Import an HP Graphics Language file" -msgstr "Ficheiro XFIG Graphics (*.fig)" +msgstr "Importar um ficheiro HP Graphics Language" #: ../share/extensions/hpgl_output.inx.h:1 -#, fuzzy msgid "HPGL Output" -msgstr "Saída SVG" +msgstr "Exportar em HPGL" #: ../share/extensions/hpgl_output.inx.h:2 msgid "" @@ -37478,25 +35564,26 @@ msgid "" "Please use the plotter extension (Extensions menu) to plot directly over a " "serial connection." msgstr "" +"Confirmar se todos os objetos que se pretende gravar estão convertidos em " +"caminhos. Usar a extensão Plotter (menu Extensões) para enviar para a " +"plotter diretamente sob uma ligação em série." #: ../share/extensions/hpgl_output.inx.h:3 ../share/extensions/plotter.inx.h:31 -#, fuzzy msgid "Plotter Settings " -msgstr "Importar configurações de PDF" +msgstr "Configurações da Plotter " #: ../share/extensions/hpgl_output.inx.h:8 ../share/extensions/plotter.inx.h:36 -#, fuzzy msgid "Pen number:" -msgstr "Ângulo da caneta" +msgstr "Número da caneta:" #: ../share/extensions/hpgl_output.inx.h:9 ../share/extensions/plotter.inx.h:37 msgid "The number of the pen (tool) to use (Standard: '1')" -msgstr "" +msgstr "O número da caneta (ferramenta) a usar (padrão: '1')" #: ../share/extensions/hpgl_output.inx.h:10 #: ../share/extensions/plotter.inx.h:38 msgid "Pen force (g):" -msgstr "" +msgstr "Força da caneta (g):" #: ../share/extensions/hpgl_output.inx.h:11 #: ../share/extensions/plotter.inx.h:39 @@ -37504,11 +35591,13 @@ msgid "" "The amount of force pushing down the pen in grams, set to 0 to omit command; " "most plotters ignore this command (Default: 0)" msgstr "" +"A quantidade de força a puxar a caneta em gramas. Aplicar 0 para omitir o " +"comando. A maioria das plotters ignora este comando (padrão: 0)." #: ../share/extensions/hpgl_output.inx.h:12 #: ../share/extensions/plotter.inx.h:40 msgid "Pen speed (cm/s or mm/s):" -msgstr "" +msgstr "Velocidade da caneta (cm/s ou mm/s):" #: ../share/extensions/hpgl_output.inx.h:13 msgid "" @@ -37516,48 +35605,49 @@ msgid "" "(depending on your plotter model), set to 0 to omit command; most plotters " "ignore this command (Default: 0)" msgstr "" +"A velocidade que a caneta se move, em centímetros ou milímetros por segundo " +"(dependendo do modelo da plotter). Aplicar 0 para omitir o comando. A " +"maioria das plotters ignoram este comando (padrão: 0)." #: ../share/extensions/hpgl_output.inx.h:14 -#, fuzzy msgid "Rotation (°, Clockwise):" -msgstr "Girar no sentido horário" +msgstr "Rotação (°, sentido horário):" #: ../share/extensions/hpgl_output.inx.h:15 #: ../share/extensions/plotter.inx.h:43 msgid "Rotation of the drawing (Default: 0°)" -msgstr "" +msgstr "Rotação do desenho (padrão: 0°)" #: ../share/extensions/hpgl_output.inx.h:16 #: ../share/extensions/plotter.inx.h:44 msgid "Mirror X axis" -msgstr "" +msgstr "Espelhar eixo X" #: ../share/extensions/hpgl_output.inx.h:17 #: ../share/extensions/plotter.inx.h:45 msgid "Check this to mirror the X axis (Default: Unchecked)" -msgstr "" +msgstr "Ativar para espelhar o eixo X (padrão: não ativado)" #: ../share/extensions/hpgl_output.inx.h:18 #: ../share/extensions/plotter.inx.h:46 msgid "Mirror Y axis" -msgstr "" +msgstr "Espelhar eixo Y" #: ../share/extensions/hpgl_output.inx.h:19 #: ../share/extensions/plotter.inx.h:47 msgid "Check this to mirror the Y axis (Default: Unchecked)" -msgstr "" +msgstr "Ativar para espelhar o eixo Y (padrão: não ativado)" #: ../share/extensions/hpgl_output.inx.h:20 #: ../share/extensions/plotter.inx.h:48 -#, fuzzy msgid "Center zero point" -msgstr "Centralizar linhas" +msgstr "Ponto zero do centro" #: ../share/extensions/hpgl_output.inx.h:21 #: ../share/extensions/plotter.inx.h:49 msgid "" "Check this if your plotter uses a centered zero point (Default: Unchecked)" -msgstr "" +msgstr "Ativar caso a plotter use um ponto zero centrado (padrão: inativo)" #: ../share/extensions/hpgl_output.inx.h:22 #: ../share/extensions/plotter.inx.h:50 @@ -37566,17 +35656,20 @@ msgid "" "each pen, name the layers \"Pen 1\", \"Pen 2\", etc., and put your drawings " "in the corresponding layers. This overrules the pen number option above." msgstr "" +"Se pretender usar várias canetas ou a caneta da plotter cria uma camada para " +"cada caneta, atribuir o nome às camadas como \"Caneta 1\", \"Caneta 2\", " +"etc. e colocar os desenhos nas camadas correspondentes. Isto anula a opção " +"Número da Caneta acima." #: ../share/extensions/hpgl_output.inx.h:23 #: ../share/extensions/plotter.inx.h:51 -#, fuzzy msgid "Plot Features " -msgstr "Metro" +msgstr "Funcionalidades Plot " #: ../share/extensions/hpgl_output.inx.h:24 #: ../share/extensions/plotter.inx.h:52 msgid "Overcut (mm):" -msgstr "" +msgstr "Corte por fora (mm):" #: ../share/extensions/hpgl_output.inx.h:25 #: ../share/extensions/plotter.inx.h:53 @@ -37584,12 +35677,13 @@ msgid "" "The distance in mm that will be cut over the starting point of the path to " "prevent open paths, set to 0.0 to omit command (Default: 1.00)" msgstr "" +"A distância em mm que será cortada no ponto inicial do caminho para prevenir " +"caminhos abertos. Usar 0.0 para omitir este comando (padrão: 1.00)" #: ../share/extensions/hpgl_output.inx.h:26 #: ../share/extensions/plotter.inx.h:54 -#, fuzzy msgid "Tool (Knife) offset correction (mm):" -msgstr "Desvio Horizontal" +msgstr "Correção do deslocamento da ferramenta Faca (mm):" #: ../share/extensions/hpgl_output.inx.h:27 #: ../share/extensions/plotter.inx.h:55 @@ -37597,12 +35691,13 @@ msgid "" "The offset from the tool tip to the tool axis in mm, set to 0.0 to omit " "command (Default: 0.25)" msgstr "" +"O deslocamento desde a ponta da ferramenta ao eixo da ferramenta em mm. Usar " +"0.0 para omitir este comando (padrão: 0.25)." #: ../share/extensions/hpgl_output.inx.h:28 #: ../share/extensions/plotter.inx.h:56 -#, fuzzy msgid "Precut" -msgstr "Ajustar como padrão" +msgstr "Pré-cortar" #: ../share/extensions/hpgl_output.inx.h:29 #: ../share/extensions/plotter.inx.h:57 @@ -37610,12 +35705,13 @@ msgid "" "Check this to cut a small line before the real drawing starts to correctly " "align the tool orientation. (Default: Checked)" msgstr "" +"Ativar para cortar uma pequena linha antes do desenho começar para alinhar a " +"orientação da ferramenta corretamente (padrão: ativado)." #: ../share/extensions/hpgl_output.inx.h:30 #: ../share/extensions/plotter.inx.h:58 -#, fuzzy msgid "Curve flatness:" -msgstr "Nivelar" +msgstr "Nivelação das curvas:" #: ../share/extensions/hpgl_output.inx.h:31 #: ../share/extensions/plotter.inx.h:59 @@ -37623,12 +35719,13 @@ msgid "" "Curves are divided into lines, this number controls how fine the curves will " "be reproduced, the smaller the finer (Default: '1.2')" msgstr "" +"As curvas são divididas em linhas. Este número controla quão finas as curvas " +"serão reproduzidas. Quanto mais pequeno mais fino (padrão: 1.2)" #: ../share/extensions/hpgl_output.inx.h:32 #: ../share/extensions/plotter.inx.h:60 -#, fuzzy msgid "Auto align" -msgstr "Alinhar" +msgstr "Alinhar automaticamente" #: ../share/extensions/hpgl_output.inx.h:33 #: ../share/extensions/plotter.inx.h:61 @@ -37637,6 +35734,10 @@ msgid "" "if used). If unchecked you have to make sure that all parts of your drawing " "are within the document border! (Default: Checked)" msgstr "" +"Ativar isto para alinhar automaticamente o desenho ao ponto zero (mais o " +"deslocamento da ferramenta, se usado). Se inativado, deve-se confirmar se " +"todas as partes do desenho se encontram dentro das bordas da página! " +"(Padrão: ativado)." #: ../share/extensions/hpgl_output.inx.h:34 #: ../share/extensions/plotter.inx.h:64 @@ -37644,147 +35745,136 @@ msgid "" "All these settings depend on the plotter you use, for more information " "please consult the manual or homepage for your plotter." msgstr "" +"Todas estas configurações dependem da plotter utilizada. Para mais " +"informações consultar o manual ou o sítio web do fabricante da plotter." #: ../share/extensions/hpgl_output.inx.h:36 -#, fuzzy msgid "Export an HP Graphics Language file" -msgstr "Ficheiro XFIG Graphics (*.fig)" +msgstr "Exportar um ficheiro HP Graphics Language" #: ../share/extensions/image_attributes.inx.h:1 -#, fuzzy msgid "Set Image Attributes" -msgstr "Ajustar atributo" +msgstr "Definir Atributos da Imagem" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:3 msgid "Basic" -msgstr "" +msgstr "Básico" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:5 msgid "Support non-uniform scaling" -msgstr "" +msgstr "Suportar escalonamento não uniforme" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:7 msgid "Render images blocky" -msgstr "" +msgstr "Renderizar as imagens em blocos" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:9 msgid "" "Render all bitmap images like in older Inskcape versions. Available options:" msgstr "" +"Renderiza as imagens conforme as versões anteriores do Inkscape. Opções " +"diponíveis:" #. image aspect ratio #: ../share/extensions/image_attributes.inx.h:11 -#, fuzzy msgid "Image Aspect Ratio" -msgstr "" -"%s não é uma pasta válida.\n" -"%s" +msgstr "Proporção da Imagem" #. image aspect ratio #: ../share/extensions/image_attributes.inx.h:13 msgid "preserveAspectRatio attribute:" -msgstr "" +msgstr "atributo de manter a proporção:" #. image aspect ratio #: ../share/extensions/image_attributes.inx.h:15 msgid "meetOrSlice:" -msgstr "" +msgstr "meetOrSlice:" #. image-rendering #: ../share/extensions/image_attributes.inx.h:17 msgid "Scope:" -msgstr "" +msgstr "Âmbito:" #. image-rendering #: ../share/extensions/image_attributes.inx.h:19 -#, fuzzy msgid "Unset" -msgstr "comprimir" +msgstr "Não definido" #: ../share/extensions/image_attributes.inx.h:20 -#, fuzzy msgid "Change only selected image(s)" -msgstr "Embutir somente a imagem selecionada" +msgstr "Alterar apenas as imagems selecionadas" #: ../share/extensions/image_attributes.inx.h:21 -#, fuzzy msgid "Change all images in selection" -msgstr "Modificar definição de cor" +msgstr "Alterar todas as imagens selecionadas" #: ../share/extensions/image_attributes.inx.h:22 -#, fuzzy msgid "Change all images in document" -msgstr "Abrir um desenho existente" +msgstr "Alterar todas as imagens no documento" #. image-rendering #: ../share/extensions/image_attributes.inx.h:24 -#, fuzzy msgid "Image Rendering Quality" -msgstr "Render" +msgstr "Qualidade de Renderização da Imagem" #. image-rendering #: ../share/extensions/image_attributes.inx.h:26 -#, fuzzy msgid "Image rendering attribute:" -msgstr "Render" +msgstr "Atributo da renderização da imagem:" #: ../share/extensions/image_attributes.inx.h:27 -#, fuzzy msgid "Apply attribute to parent group of selection" -msgstr "Aplicar transformação à selecção" +msgstr "Aplicar atributo ao grupo pai da seleção" #: ../share/extensions/image_attributes.inx.h:28 -#, fuzzy msgid "Apply attribute to SVG root" -msgstr "Nome do atributo" +msgstr "Aplicar atributo à raiz SVG" #: ../share/extensions/ink2canvas.inx.h:1 -#, fuzzy msgid "Convert to html5 canvas" -msgstr "Converter para Texto" +msgstr "Converter para canvas HTML5" #: ../share/extensions/ink2canvas.inx.h:2 msgid "HTML 5 canvas (*.html)" -msgstr "" +msgstr "HTML 5 canvas (*.html)" #: ../share/extensions/ink2canvas.inx.h:3 msgid "HTML 5 canvas code" -msgstr "" +msgstr "HTML 5 canvas code" #: ../share/extensions/inkscape_follow_link.inx.h:1 -#, fuzzy msgid "Follow Link" -msgstr "Se_guir Ligação" +msgstr "Seguir Ligação" #: ../share/extensions/inkscape_help_askaquestion.inx.h:1 msgid "Ask Us a Question" -msgstr "" +msgstr "Faça-nos Uma Pergunta" #: ../share/extensions/inkscape_help_commandline.inx.h:1 msgid "Command Line Options" -msgstr "Opções da Linha de Comando" +msgstr "Opções da Linha de Comandos" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_commandline.inx.h:3 msgid "http://inkscape.org/doc/inkscape-man.html" -msgstr "" +msgstr "http://inkscape.org/pt/doc/inkscape-man.html" #: ../share/extensions/inkscape_help_faq.inx.h:1 msgid "FAQ" -msgstr "FAQ" +msgstr "Perguntas Frequentes" #: ../share/extensions/inkscape_help_keys.inx.h:1 msgid "Keys and Mouse Reference" -msgstr "RefeKeys and Mouse Reference" +msgstr "Guia de Referência de Teclado e Rato" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_keys.inx.h:3 msgid "http://inkscape.org/doc/keys092.html" -msgstr "" +msgstr "http://inkscape.org/pt/doc/keys092.html" #: ../share/extensions/inkscape_help_manual.inx.h:1 msgid "Inkscape Manual" @@ -37793,7 +35883,7 @@ msgstr "Manual do Inkscape" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_manual.inx.h:3 msgid "http://tavmjong.free.fr/INKSCAPE/MANUAL/html/index.php" -msgstr "" +msgstr "http://tavmjong.free.fr/INKSCAPE/MANUAL/html/index.php" #: ../share/extensions/inkscape_help_relnotes.inx.h:1 msgid "New in This Version" @@ -37802,11 +35892,11 @@ msgstr "Novo Nesta Versão" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_relnotes.inx.h:3 msgid "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92" -msgstr "" +msgstr "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92" #: ../share/extensions/inkscape_help_reportabug.inx.h:1 msgid "Report a Bug" -msgstr "Reportar Bug" +msgstr "Reportar Erro aos Programadores" #: ../share/extensions/inkscape_help_svgspec.inx.h:1 msgid "SVG 1.1 Specification" @@ -37817,76 +35907,66 @@ msgid "Interpolate" msgstr "Interpolar" #: ../share/extensions/interp.inx.h:3 -#, fuzzy msgid "Interpolation steps:" -msgstr "Passos da interpolação" +msgstr "Passos de interpolação:" #: ../share/extensions/interp.inx.h:4 -#, fuzzy msgid "Interpolation method:" -msgstr "Método de interpolação" +msgstr "Método de interpolação:" #: ../share/extensions/interp.inx.h:5 msgid "Duplicate endpaths" msgstr "Duplicar caminhos finais" #: ../share/extensions/interp.inx.h:6 -#, fuzzy msgid "Interpolate style" -msgstr "Interpolar" +msgstr "Estilo de interpolação" #: ../share/extensions/interp.inx.h:7 ../share/extensions/interp_att_g.inx.h:10 -#, fuzzy msgid "Use Z-order" -msgstr "Levantar nó" +msgstr "Usar ordem Z" #: ../share/extensions/interp.inx.h:8 ../share/extensions/interp_att_g.inx.h:11 msgid "Workaround for reversed selection order in Live Preview cycles" msgstr "" +"Alternativa para a ordem invertida da seleção em ciclos de Pré-visualização " +"em Tempo Real" #: ../share/extensions/interp_att_g.inx.h:1 msgid "Interpolate Attribute in a group" -msgstr "" +msgstr "Interpolar Atributo num grupo" #: ../share/extensions/interp_att_g.inx.h:3 -#, fuzzy msgid "Attribute to Interpolate:" -msgstr "Nome do atributo" +msgstr "Atributo a Interpolar:" #: ../share/extensions/interp_att_g.inx.h:4 -#, fuzzy msgid "Other Attribute:" -msgstr "Atributo" +msgstr "Outro Atributo:" #: ../share/extensions/interp_att_g.inx.h:5 -#, fuzzy msgid "Other Attribute type:" -msgstr "Nome do atributo" +msgstr "Outro tipo de Atributo:" #: ../share/extensions/interp_att_g.inx.h:6 -#, fuzzy msgid "Apply to:" -msgstr "Aplicar filtro" +msgstr "Aplicar a:" #: ../share/extensions/interp_att_g.inx.h:7 -#, fuzzy msgid "Start Value:" -msgstr "Valor de x inicial" +msgstr "Valor Inicial:" #: ../share/extensions/interp_att_g.inx.h:8 -#, fuzzy msgid "End Value:" -msgstr "Valor de x final" +msgstr "Valor Final:" #: ../share/extensions/interp_att_g.inx.h:15 -#, fuzzy msgid "Translate X" -msgstr "_Tradutores" +msgstr "Traduzir X" #: ../share/extensions/interp_att_g.inx.h:16 -#, fuzzy msgid "Translate Y" -msgstr "_Tradutores" +msgstr "Traduzir Y" #: ../share/extensions/interp_att_g.inx.h:17 #: ../share/extensions/markers_strokepaint.inx.h:9 @@ -37902,15 +35982,16 @@ msgid "" "If you select \"Other\", you must know the SVG attributes to identify here " "this \"other\"." msgstr "" +"Se escolher \"Outro\", tem de saber os atributos SVG para identificar onde " +"está o \"Outro\"." #: ../share/extensions/interp_att_g.inx.h:22 msgid "Integer Number" -msgstr "" +msgstr "Número Inteiro" #: ../share/extensions/interp_att_g.inx.h:23 -#, fuzzy msgid "Float Number" -msgstr "Parâmetros de efeitos" +msgstr "Número Flutuante" #: ../share/extensions/interp_att_g.inx.h:25 #: ../share/extensions/polyhedron_3d.inx.h:33 @@ -37918,18 +35999,16 @@ msgid "Style" msgstr "Estilo" #: ../share/extensions/interp_att_g.inx.h:26 -#, fuzzy msgid "Transformation" -msgstr "Informação" +msgstr "Transformação" #: ../share/extensions/interp_att_g.inx.h:27 msgid "••••••••••••••••••••••••••••••••••••••••••••••••" -msgstr "" +msgstr "••••••••••••••••••••••••••••••••••••••••••••••••" #: ../share/extensions/interp_att_g.inx.h:28 -#, fuzzy msgid "No Unit" -msgstr "Unidade" +msgstr "Sem Unidade" #: ../share/extensions/interp_att_g.inx.h:30 msgid "" @@ -37937,10 +36016,13 @@ msgid "" "elements inside the selected group or for all elements in a multiple " "selection." msgstr "" +"Este efeito aplica um valor para qualquer atributo interpolatável para todos " +"os elementos dentro de grupo selecionado ou para todos os elementos numa " +"seleção múltipla." #: ../share/extensions/jessyInk_autoTexts.inx.h:1 msgid "Auto-texts" -msgstr "" +msgstr "Textos automáticos" #: ../share/extensions/jessyInk_autoTexts.inx.h:2 #: ../share/extensions/jessyInk_effects.inx.h:2 @@ -37948,32 +36030,28 @@ msgstr "" #: ../share/extensions/jessyInk_masterSlide.inx.h:2 #: ../share/extensions/jessyInk_transitions.inx.h:2 #: ../share/extensions/jessyInk_view.inx.h:2 -#, fuzzy msgid "Settings" -msgstr "Início" +msgstr "Definições" #: ../share/extensions/jessyInk_autoTexts.inx.h:3 msgid "Auto-Text:" -msgstr "" +msgstr "Texto-Automático:" #: ../share/extensions/jessyInk_autoTexts.inx.h:4 -#, fuzzy msgid "None (remove)" -msgstr "Remover" +msgstr "Nenhum (remover)" #: ../share/extensions/jessyInk_autoTexts.inx.h:5 msgid "Slide title" -msgstr "" +msgstr "Título do slide" #: ../share/extensions/jessyInk_autoTexts.inx.h:6 -#, fuzzy msgid "Slide number" -msgstr "Ângulo da caneta" +msgstr "Número do slide" #: ../share/extensions/jessyInk_autoTexts.inx.h:7 -#, fuzzy msgid "Number of slides" -msgstr "Número de passos" +msgstr "Número de slides" #: ../share/extensions/jessyInk_autoTexts.inx.h:9 msgid "" @@ -37981,6 +36059,9 @@ msgid "" "JessyInk presentation. Please see code.google.com/p/jessyink for more " "details." msgstr "" +"Esta extensão permite instalar, atualizar e remover textos automáticos para " +"uma apresentação JessyInk. Para mais informações ver http://code.google.com/" +"p/jessyink" #: ../share/extensions/jessyInk_autoTexts.inx.h:10 #: ../share/extensions/jessyInk_effects.inx.h:15 @@ -37994,56 +36075,47 @@ msgstr "" #: ../share/extensions/jessyInk_video.inx.h:4 #: ../share/extensions/jessyInk_view.inx.h:9 msgid "JessyInk" -msgstr "" +msgstr "JessyInk" #: ../share/extensions/jessyInk_effects.inx.h:1 -#, fuzzy msgid "Effects" -msgstr "Efeito_s" +msgstr "Efeitos" #: ../share/extensions/jessyInk_effects.inx.h:4 #: ../share/extensions/jessyInk_transitions.inx.h:4 #: ../share/extensions/jessyInk_view.inx.h:4 -#, fuzzy msgid "Duration in seconds:" -msgstr "Desenho concluído" +msgstr "Duração em segundos:" #: ../share/extensions/jessyInk_effects.inx.h:6 -#, fuzzy msgid "Build-in effect" -msgstr "Efeito actual" +msgstr "Efeito para dentro" #: ../share/extensions/jessyInk_effects.inx.h:7 -#, fuzzy msgid "None (default)" -msgstr "(padrão)" +msgstr "Nenhum (padrão)" #: ../share/extensions/jessyInk_effects.inx.h:8 #: ../share/extensions/jessyInk_transitions.inx.h:8 -#, fuzzy msgid "Appear" -msgstr "Script" +msgstr "Aparecer" #: ../share/extensions/jessyInk_effects.inx.h:9 -#, fuzzy msgid "Fade in" -msgstr "Nivelar" +msgstr "Desvanecer para dentro" #: ../share/extensions/jessyInk_effects.inx.h:10 #: ../share/extensions/jessyInk_transitions.inx.h:10 -#, fuzzy msgid "Pop" -msgstr "Topo" +msgstr "Destacar" #: ../share/extensions/jessyInk_effects.inx.h:11 -#, fuzzy msgid "Build-out effect" -msgstr "Sem efeito" +msgstr "Efeito para fora" #: ../share/extensions/jessyInk_effects.inx.h:12 -#, fuzzy msgid "Fade out" -msgstr "Escurecer:" +msgstr "Desvanecer para fora" #: ../share/extensions/jessyInk_effects.inx.h:14 msgid "" @@ -38051,23 +36123,25 @@ msgid "" "JessyInk presentation. Please see code.google.com/p/jessyink for more " "details." msgstr "" +"Esta extensão permite instalar, atualizar e remover efeitos dos objetos para " +"uma apresentação JessyInk. Para mais informações ver http://code.google.com/" +"p/jessyink" #: ../share/extensions/jessyInk_export.inx.h:1 msgid "JessyInk zipped pdf or png output" -msgstr "" +msgstr "Exportar em JessyInk PDF ou PNG comprimido" #: ../share/extensions/jessyInk_export.inx.h:4 -#, fuzzy msgid "Resolution:" -msgstr "Relação:" +msgstr "Resolução:" #: ../share/extensions/jessyInk_export.inx.h:5 msgid "PDF" -msgstr "" +msgstr "PDF" #: ../share/extensions/jessyInk_export.inx.h:6 msgid "PNG" -msgstr "" +msgstr "PNG" #: ../share/extensions/jessyInk_export.inx.h:8 msgid "" @@ -38075,20 +36149,25 @@ msgid "" "an export layer in your browser. Please see code.google.com/p/jessyink for " "more details." msgstr "" +"Esta extensão permite exportar uma apresentação JessyInk após se ter criado " +"uma camada exportada no navegador de internet. Para mais informações ver " +"http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_export.inx.h:9 msgid "JessyInk zipped pdf or png output (*.zip)" -msgstr "" +msgstr "Apresentação JessyInk PDF ou PNG comprimido (*.zip)" #: ../share/extensions/jessyInk_export.inx.h:10 msgid "" "Creates a zip file containing pdfs or pngs of all slides of a JessyInk " "presentation." msgstr "" +"Cria um ficheiro ZIP que contém ficheiros PDF e PNG de todos os slides de " +"uma apresentação JessyInk." #: ../share/extensions/jessyInk_install.inx.h:1 msgid "Install/update" -msgstr "" +msgstr "Instalar/atualizar" #: ../share/extensions/jessyInk_install.inx.h:3 msgid "" @@ -38096,269 +36175,235 @@ msgid "" "to turn your SVG file into a presentation. Please see code.google.com/p/" "jessyink for more details." msgstr "" +"Esta extensão permite instalar ou atualizar o script JessyInk por forma a " +"tornar o ficheiro SVG numa apresentação. Para mais informações ver http://" +"code.google.com/p/jessyink" #: ../share/extensions/jessyInk_keyBindings.inx.h:1 -#, fuzzy msgid "Key bindings" -msgstr "_Desenho" +msgstr "Teclas associadas" #: ../share/extensions/jessyInk_keyBindings.inx.h:2 -#, fuzzy msgid "Slide mode" -msgstr "Escalar nós" +msgstr "Modo de slide" #: ../share/extensions/jessyInk_keyBindings.inx.h:3 -#, fuzzy msgid "Back (with effects):" -msgstr "Caminho de Efeitos..." +msgstr "Anterior (com efeitos):" #: ../share/extensions/jessyInk_keyBindings.inx.h:4 -#, fuzzy msgid "Next (with effects):" -msgstr "Efeito actual" +msgstr "Seguinte (com efeitos):" #: ../share/extensions/jessyInk_keyBindings.inx.h:5 msgid "Back (without effects):" -msgstr "" +msgstr "Anterior (sem efeitos):" #: ../share/extensions/jessyInk_keyBindings.inx.h:6 -#, fuzzy msgid "Next (without effects):" -msgstr "Efeito actual" +msgstr "Seguinte (sem efeitos):" #: ../share/extensions/jessyInk_keyBindings.inx.h:7 -#, fuzzy msgid "First slide:" -msgstr "Primeiro seleccionado" +msgstr "Primeiro slide:" #: ../share/extensions/jessyInk_keyBindings.inx.h:8 -#, fuzzy msgid "Last slide:" -msgstr "Colar tamanho" +msgstr "Último slide:" #: ../share/extensions/jessyInk_keyBindings.inx.h:9 -#, fuzzy msgid "Switch to index mode:" -msgstr "Trocar para a próxima camada" +msgstr "Mudar para modo índice:" #: ../share/extensions/jessyInk_keyBindings.inx.h:10 -#, fuzzy msgid "Switch to drawing mode:" -msgstr "Trocar para o modo de visualização normal" +msgstr "Mudar para modo de desenho:" #: ../share/extensions/jessyInk_keyBindings.inx.h:11 -#, fuzzy msgid "Set duration:" -msgstr "Saturação" +msgstr "Definir duração:" #: ../share/extensions/jessyInk_keyBindings.inx.h:12 -#, fuzzy msgid "Add slide:" -msgstr "nó final" +msgstr "Adicionar slide:" #: ../share/extensions/jessyInk_keyBindings.inx.h:13 msgid "Toggle progress bar:" -msgstr "" +msgstr "Alternar barra de progresso:" #: ../share/extensions/jessyInk_keyBindings.inx.h:14 -#, fuzzy msgid "Reset timer:" -msgstr "Redefinir centro" +msgstr "Repor o relógio a zero:" #: ../share/extensions/jessyInk_keyBindings.inx.h:15 -#, fuzzy msgid "Export presentation:" -msgstr "Orientação da página:" +msgstr "Exportar apresentação:" #: ../share/extensions/jessyInk_keyBindings.inx.h:17 -#, fuzzy msgid "Switch to slide mode:" -msgstr "Trocar para o modo de visualização normal" +msgstr "Mudar para o modo slide:" #: ../share/extensions/jessyInk_keyBindings.inx.h:18 -#, fuzzy msgid "Set path width to default:" -msgstr "Ajustar como padrão" +msgstr "Aplicar espessura do traço padrão:" #: ../share/extensions/jessyInk_keyBindings.inx.h:19 -#, fuzzy msgid "Set path width to 1:" -msgstr "Escala de largura" +msgstr "Aplicar espessura 1 ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:20 -#, fuzzy msgid "Set path width to 3:" -msgstr "Escala de largura" +msgstr "Aplicar espessura 3 ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:21 -#, fuzzy msgid "Set path width to 5:" -msgstr "Escala de largura" +msgstr "Aplicar espessura 5 ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:22 -#, fuzzy msgid "Set path width to 7:" -msgstr "Escala de largura" +msgstr "Aplicar espessura 7 ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:23 -#, fuzzy msgid "Set path width to 9:" -msgstr "Escala de largura" +msgstr "Aplicar espessura 9 ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:24 -#, fuzzy msgid "Set path color to blue:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor azul ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:25 -#, fuzzy msgid "Set path color to cyan:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor ciano ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:26 -#, fuzzy msgid "Set path color to green:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor verde ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:27 -#, fuzzy msgid "Set path color to black:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor preta ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:28 -#, fuzzy msgid "Set path color to magenta:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor magenta ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:29 -#, fuzzy msgid "Set path color to orange:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor laranja ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:30 -#, fuzzy msgid "Set path color to red:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor vermelha ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:31 -#, fuzzy msgid "Set path color to white:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor branca ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:32 -#, fuzzy msgid "Set path color to yellow:" -msgstr "Definir cor do traço" +msgstr "Aplicar cor amarela ao traço:" #: ../share/extensions/jessyInk_keyBindings.inx.h:33 -#, fuzzy msgid "Undo last path segment:" -msgstr "Desfazer a última ação" +msgstr "Desfazer o último segmento do caminho:" #: ../share/extensions/jessyInk_keyBindings.inx.h:34 -#, fuzzy msgid "Index mode" -msgstr "Indentar nó" +msgstr "Modo índice" #: ../share/extensions/jessyInk_keyBindings.inx.h:35 -#, fuzzy msgid "Select the slide to the left:" -msgstr "Selecionar um ficheiro para guardar" +msgstr "Selecionar o slide à esquerda:" #: ../share/extensions/jessyInk_keyBindings.inx.h:36 -#, fuzzy msgid "Select the slide to the right:" -msgstr "Ajusta a Ecrã ao desenho" +msgstr "Selecionar o slide à direita:" #: ../share/extensions/jessyInk_keyBindings.inx.h:37 msgid "Select the slide above:" -msgstr "" +msgstr "Selecionar o slide acima:" #: ../share/extensions/jessyInk_keyBindings.inx.h:38 msgid "Select the slide below:" -msgstr "" +msgstr "Selecionar o slide abaixo:" #: ../share/extensions/jessyInk_keyBindings.inx.h:39 -#, fuzzy msgid "Previous page:" -msgstr "Efeito Anterior" +msgstr "Página anterior:" #: ../share/extensions/jessyInk_keyBindings.inx.h:40 -#, fuzzy msgid "Next page:" -msgstr "Selecionar página:" +msgstr "Página seguinte:" #: ../share/extensions/jessyInk_keyBindings.inx.h:41 -#, fuzzy msgid "Decrease number of columns:" -msgstr "Número de colunas" +msgstr "Diminuir número de colunas:" #: ../share/extensions/jessyInk_keyBindings.inx.h:42 -#, fuzzy msgid "Increase number of columns:" -msgstr "Número de colunas" +msgstr "Aumentar número de colunas:" #: ../share/extensions/jessyInk_keyBindings.inx.h:43 -#, fuzzy msgid "Set number of columns to default:" -msgstr "Número de colunas" +msgstr "Aplicar o número de colunas padrão:" #: ../share/extensions/jessyInk_keyBindings.inx.h:45 msgid "" "This extension allows you customise the key bindings JessyInk uses. Please " "see code.google.com/p/jessyink for more details." msgstr "" +"Esta extensão permite configurar os atalhos de teclado que o JessyInk usa. " +"Para mais informações ver http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_masterSlide.inx.h:1 -#, fuzzy msgid "Master slide" -msgstr "Colar tamanho" +msgstr "Slide principal" #: ../share/extensions/jessyInk_masterSlide.inx.h:3 #: ../share/extensions/jessyInk_transitions.inx.h:3 -#, fuzzy msgid "Name of layer:" -msgstr "Renomear camada" +msgstr "Nome da camada:" #: ../share/extensions/jessyInk_masterSlide.inx.h:4 msgid "If no layer name is supplied, the master slide is unset." msgstr "" +"Se não for fornecido nenhum nome da camada, o slide principal não é definido." #: ../share/extensions/jessyInk_masterSlide.inx.h:6 msgid "" "This extension allows you to change the master slide JessyInk uses. Please " "see code.google.com/p/jessyink for more details." msgstr "" +"Esta extensão permite mudar o slide principal que o JessyInk usa. Para mais " +"informações ver http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_mouseHandler.inx.h:1 -#, fuzzy msgid "Mouse handler" -msgstr "Mover manualmente" +msgstr "Alça do rato" #: ../share/extensions/jessyInk_mouseHandler.inx.h:2 -#, fuzzy msgid "Mouse settings:" -msgstr "Configurações da página" +msgstr "Configurações do rato:" #: ../share/extensions/jessyInk_mouseHandler.inx.h:4 msgid "No-click" -msgstr "" +msgstr "Sem clique" #: ../share/extensions/jessyInk_mouseHandler.inx.h:5 -#, fuzzy msgid "Dragging/zoom" -msgstr "Desenho" +msgstr "Arrastar/aumentar-diminuir vista" #: ../share/extensions/jessyInk_mouseHandler.inx.h:7 msgid "" "This extension allows you customise the mouse handler JessyInk uses. Please " "see code.google.com/p/jessyink for more details." msgstr "" +"Esta extensão permite configurar a alça do rato que o JessyInk usa. Para " +"mais informações ver http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_summary.inx.h:1 -#, fuzzy msgid "Summary" -msgstr "_Simetria" +msgstr "Sumário" #: ../share/extensions/jessyInk_summary.inx.h:3 msgid "" @@ -38366,80 +36411,77 @@ msgid "" "effects and transitions contained in this SVG file. Please see code.google." "com/p/jessyink for more details." msgstr "" +"Esta extensão permite obter informações sobre o JessyInk, quanto ao script, " +"efeitos e transições presentes neste ficheiro SVG. Para mais informações ver " +"http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_transitions.inx.h:1 -#, fuzzy msgid "Transitions" -msgstr "Informação" +msgstr "Transições" #: ../share/extensions/jessyInk_transitions.inx.h:6 msgid "Transition in effect" -msgstr "" +msgstr "Efeito de transição para dentro" #: ../share/extensions/jessyInk_transitions.inx.h:9 -#, fuzzy msgid "Fade" -msgstr "Nivelar" +msgstr "Desvanecer" #: ../share/extensions/jessyInk_transitions.inx.h:11 -#, fuzzy msgid "Transition out effect" -msgstr "Colar efeito de caminho ao vivo" +msgstr "Efeito de transição para fora" #: ../share/extensions/jessyInk_transitions.inx.h:13 msgid "" "This extension allows you to change the transition JessyInk uses for the " "selected layer. Please see code.google.com/p/jessyink for more details." msgstr "" +"Esta extensão permite alterar a transição que o JessyInk usa para a camada " +"selecionada. Para mais informações ver http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_uninstall.inx.h:1 msgid "Uninstall/remove" -msgstr "" +msgstr "Desinstalar/remover" #: ../share/extensions/jessyInk_uninstall.inx.h:3 -#, fuzzy msgid "Remove script" -msgstr "Remover grelha" +msgstr "Remover script" #: ../share/extensions/jessyInk_uninstall.inx.h:4 -#, fuzzy msgid "Remove effects" -msgstr "Remover efeito de caminho" +msgstr "Remover efeitos" #: ../share/extensions/jessyInk_uninstall.inx.h:5 -#, fuzzy msgid "Remove master slide assignment" -msgstr "Remover máscara da selecção" +msgstr "Remover atribuição do slide principal" #: ../share/extensions/jessyInk_uninstall.inx.h:6 -#, fuzzy msgid "Remove transitions" -msgstr "Remover _Transformações" +msgstr "Remover transições" #: ../share/extensions/jessyInk_uninstall.inx.h:7 -#, fuzzy msgid "Remove auto-texts" -msgstr "Remover traço" +msgstr "Remover textos automáticos" #: ../share/extensions/jessyInk_uninstall.inx.h:8 -#, fuzzy msgid "Remove views" -msgstr "Remover filtro" +msgstr "Remover vistas" #: ../share/extensions/jessyInk_uninstall.inx.h:9 msgid "Please select the parts of JessyInk you want to uninstall/remove." -msgstr "" +msgstr "Selecionar as partes que quer instalar ou remover do JessyInk." #: ../share/extensions/jessyInk_uninstall.inx.h:11 msgid "" "This extension allows you to uninstall the JessyInk script. Please see code." "google.com/p/jessyink for more details." msgstr "" +"Esta extensão permite desinstalar o script JessyInk. Para mais informações " +"ver http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_video.inx.h:1 -#, fuzzy msgid "Video" -msgstr "_Ver" +msgstr "Video" #: ../share/extensions/jessyInk_video.inx.h:3 msgid "" @@ -38447,35 +36489,38 @@ msgid "" "This element allows you to integrate a video into your JessyInk " "presentation. Please see code.google.com/p/jessyink for more details." msgstr "" +"Esta extensão coloca um elemento de video JessyInk no slide atual (camada). " +"Este elemento permite integrar um video na apresentação JessyInk. Para mais " +"informações ver http://code.google.com/p/jessyink" #: ../share/extensions/jessyInk_view.inx.h:5 -#, fuzzy msgid "Remove view" -msgstr "Remover Vermelho" +msgstr "Remover vista" #: ../share/extensions/jessyInk_view.inx.h:6 msgid "Choose order number 0 to set the initial view of a slide." -msgstr "" +msgstr "Escolher o número da ordem 0 para definir a vista inicial de um slide." #: ../share/extensions/jessyInk_view.inx.h:8 msgid "" "This extension allows you to set, update and remove views for a JessyInk " "presentation. Please see code.google.com/p/jessyink for more details." msgstr "" +"Esta extensão permite configurar, atualizar e remover vistas de uma " +"apresentação JessyInk. Para mais informações ver http://code.google.com/p/" +"jessyink" #: ../share/extensions/jitternodes.inx.h:1 msgid "Jitter nodes" -msgstr "Aguçar nós" +msgstr "Nós aguçados" #: ../share/extensions/jitternodes.inx.h:3 -#, fuzzy msgid "Maximum displacement in X (px):" -msgstr "Deslocamento máximo, px" +msgstr "Deslocamento máximo no X (px):" #: ../share/extensions/jitternodes.inx.h:4 -#, fuzzy msgid "Maximum displacement in Y (px):" -msgstr "Deslocamento máximo, px" +msgstr "Deslocamento máximo no Y (px):" #: ../share/extensions/jitternodes.inx.h:6 msgid "Shift node handles" @@ -38483,38 +36528,35 @@ msgstr "Deslocar alças do nó" #: ../share/extensions/jitternodes.inx.h:7 msgid "Distribution of the displacements:" -msgstr "" +msgstr "Distribuição dos deslocamentos:" #: ../share/extensions/jitternodes.inx.h:8 -#, fuzzy msgid "Uniform" -msgstr "Ruído Uniforme" +msgstr "Uniforme" #: ../share/extensions/jitternodes.inx.h:9 msgid "Pareto" -msgstr "" +msgstr "Pareto" #: ../share/extensions/jitternodes.inx.h:10 -#, fuzzy msgid "Gaussian" -msgstr "Desfocagem gaussiana" +msgstr "Gaussiano" #: ../share/extensions/jitternodes.inx.h:11 -#, fuzzy msgid "Log-normal" -msgstr "Normal" +msgstr "Log-normal" #: ../share/extensions/jitternodes.inx.h:13 msgid "" "This effect randomly shifts the nodes (and optionally node handles) of the " "selected path." msgstr "" -"Este efeito aleatoriamente desloca os nós (e opcionalmente suas alças) do " -"caminho seleccionado." +"Este efeito desloca os nós aleatoriamente (e opcionalmente as alças) do " +"caminho selecionado." #: ../share/extensions/layers2svgfont.inx.h:1 msgid "3 - Convert Glyph Layers to SVG Font" -msgstr "" +msgstr "3 - Converter Camadas de Caracteres em Fontes SVG" #: ../share/extensions/layers2svgfont.inx.h:2 #: ../share/extensions/new_glyph_layer.inx.h:3 @@ -38522,116 +36564,97 @@ msgstr "" #: ../share/extensions/previous_glyph_layer.inx.h:2 #: ../share/extensions/setup_typography_canvas.inx.h:7 #: ../share/extensions/svgfont2layers.inx.h:3 -#, fuzzy msgid "Typography" -msgstr "Espiral" +msgstr "Tipografia" #: ../share/extensions/layout_nup.inx.h:1 msgid "N-up layout" -msgstr "" +msgstr "Disposição de N elementos" #: ../share/extensions/layout_nup.inx.h:2 -#, fuzzy msgid "Page dimensions" -msgstr "Divisão" +msgstr "Dimensões da página" #: ../share/extensions/layout_nup.inx.h:4 -#, fuzzy msgid "Size X:" -msgstr "Tamanho" +msgstr "Tamanho X:" #: ../share/extensions/layout_nup.inx.h:5 -#, fuzzy msgid "Size Y:" -msgstr "Tamanho" +msgstr "Tamanho Y:" #: ../share/extensions/layout_nup.inx.h:6 #: ../share/extensions/printing_marks.inx.h:13 -#, fuzzy msgid "Top:" -msgstr "Topo" +msgstr "Topo:" #: ../share/extensions/layout_nup.inx.h:7 #: ../share/extensions/printing_marks.inx.h:14 -#, fuzzy msgid "Bottom:" -msgstr "Fundo" +msgstr "Fundo:" #: ../share/extensions/layout_nup.inx.h:8 #: ../share/extensions/printing_marks.inx.h:15 -#, fuzzy msgid "Left:" -msgstr "Comprimento:" +msgstr "Esquerda:" #: ../share/extensions/layout_nup.inx.h:9 #: ../share/extensions/printing_marks.inx.h:16 -#, fuzzy msgid "Right:" -msgstr "Direitos:" +msgstr "Direita:" #: ../share/extensions/layout_nup.inx.h:10 -#, fuzzy msgid "Page margins" -msgstr "Ângulo esquerdo" +msgstr "Margens da página" #: ../share/extensions/layout_nup.inx.h:11 -#, fuzzy msgid "Layout dimensions" -msgstr "Posição Aleatória" +msgstr "Dimensões do laioute" #: ../share/extensions/layout_nup.inx.h:13 -#, fuzzy msgid "Cols:" -msgstr "Cores" +msgstr "Colunas:" #: ../share/extensions/layout_nup.inx.h:14 msgid "Auto calculate layout size" -msgstr "" +msgstr "Calcular automaticamente o tamanho do laioute" #: ../share/extensions/layout_nup.inx.h:15 -#, fuzzy msgid "Layout padding" -msgstr "Posição Aleatória" +msgstr "Acolchoamento do laioute" #: ../share/extensions/layout_nup.inx.h:16 -#, fuzzy msgid "Layout margins" -msgstr "Ângulo esquerdo" +msgstr "Margens do laioute" #: ../share/extensions/layout_nup.inx.h:17 #: ../share/extensions/printing_marks.inx.h:2 -#, fuzzy msgid "Marks" -msgstr "Marca" +msgstr "Marcas" #: ../share/extensions/layout_nup.inx.h:18 -#, fuzzy msgid "Place holder" -msgstr "Traço preto" +msgstr "Espaço reservado" #: ../share/extensions/layout_nup.inx.h:19 -#, fuzzy msgid "Cutting marks" -msgstr "Imprimir usando operadores PostScript" +msgstr "Marcas de corte" #: ../share/extensions/layout_nup.inx.h:20 msgid "Padding guide" -msgstr "" +msgstr "Guia de alcochoado" #: ../share/extensions/layout_nup.inx.h:21 -#, fuzzy msgid "Margin guide" -msgstr "Mover guia" +msgstr "Guia de margem" #: ../share/extensions/layout_nup.inx.h:22 -#, fuzzy msgid "Padding box" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Caixa de acolchoado" #: ../share/extensions/layout_nup.inx.h:23 -#, fuzzy msgid "Margin box" -msgstr "caixa de arte" +msgstr "Caixa de margem" #: ../share/extensions/layout_nup.inx.h:25 msgid "" @@ -38646,56 +36669,65 @@ msgid "" " * Layout padding: inner padding for each part of the layout.\n" " " msgstr "" +"\n" +"Parâmetros:\n" +" * Tamanho da página: largura e altura.\n" +" * Margens da página: espaço extra à volta de cada página.\n" +" * Linhas e colunas do laioute.\n" +" * Tamanho do laioute: largura e altura, calculado automaticamente se um " +"deles for 0.\n" +" * Calcular automaticamente o tamanho do laioute: não usar os valores de " +"tamanho do laioute.\n" +" * Margens do laioute: espaço em branco à volta de cada parte do " +"laioute.\n" +" * Acolchoados de laioute: acolchoados de dentro para cada parte do " +"laioute.\n" +" " #: ../share/extensions/layout_nup.inx.h:36 #: ../share/extensions/perfectboundcover.inx.h:20 #: ../share/extensions/printing_marks.inx.h:21 #: ../share/extensions/svgcalendar.inx.h:13 msgid "Layout" -msgstr "Arranjo" +msgstr "Laioute" #: ../share/extensions/lindenmayer.inx.h:1 msgid "L-system" -msgstr "L-Sistema" +msgstr "Sistema de Lindenmayer" #: ../share/extensions/lindenmayer.inx.h:2 msgid "Axiom and rules" -msgstr "" +msgstr "Axioma e regras" #: ../share/extensions/lindenmayer.inx.h:3 -#, fuzzy msgid "Axiom:" -msgstr "Axioma" +msgstr "Axioma:" #: ../share/extensions/lindenmayer.inx.h:4 -#, fuzzy msgid "Rules:" -msgstr "Regras" +msgstr "Regras:" #: ../share/extensions/lindenmayer.inx.h:6 -#, fuzzy msgid "Step length (px):" -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do passo (px):" #: ../share/extensions/lindenmayer.inx.h:8 -#, fuzzy, no-c-format +#, no-c-format msgid "Randomize step (%):" -msgstr "Passos aleatórios (%)" +msgstr "Passo aleatório (%):" #: ../share/extensions/lindenmayer.inx.h:9 -#, fuzzy msgid "Left angle:" -msgstr "Ângulo esquerdo" +msgstr "Ângulo esquerdo:" #: ../share/extensions/lindenmayer.inx.h:10 -#, fuzzy msgid "Right angle:" -msgstr "Ângulo direito" +msgstr "Ângulo direito:" #: ../share/extensions/lindenmayer.inx.h:12 -#, fuzzy, no-c-format +#, no-c-format msgid "Randomize angle (%):" -msgstr "Ângulo aleatório (%)" +msgstr "Ângulo aleatório (%):" #: ../share/extensions/lindenmayer.inx.h:14 msgid "" @@ -38719,25 +36751,41 @@ msgid "" "\n" "]: return to remembered point\n" msgstr "" +"\n" +"O caminho é gerado aplicando as \n" +"substituições das Regras para o Axioma, \n" +"tempos de Ordem. Os seguintes comandos são \n" +"reconhecidos no Axioma e Regras:\n" +"\n" +"Qualquer um A,B,C,D,E,F: desenhar em frente \n" +"\n" +"Qualquer um G,H,I,J,K,L: mover em frente \n" +"\n" +"+: virar à esquerda\n" +"\n" +"-: virar à direita\n" +"\n" +"|: virar 180 graus\n" +"\n" +"[: lembrar ponto\n" +"\n" +"]: voltar ao ponto lembrado\n" #: ../share/extensions/lorem_ipsum.inx.h:1 msgid "Lorem ipsum" msgstr "Lorem ipsum" #: ../share/extensions/lorem_ipsum.inx.h:3 -#, fuzzy msgid "Number of paragraphs:" -msgstr "Número de parágrafos" +msgstr "Número de parágrafos:" #: ../share/extensions/lorem_ipsum.inx.h:4 -#, fuzzy msgid "Sentences per paragraph:" -msgstr "Frases por parágrafo" +msgstr "Frases por parágrafo:" #: ../share/extensions/lorem_ipsum.inx.h:5 -#, fuzzy msgid "Paragraph length fluctuation (sentences):" -msgstr "Flutuação do tamanho do parágrafo (frases)" +msgstr "Flutuação do tamanho do parágrafo (frases):" #: ../share/extensions/lorem_ipsum.inx.h:7 msgid "" @@ -38745,173 +36793,149 @@ msgid "" "text. If a flowed text is selected, Lorem Ipsum is added to it; otherwise a " "new flowed text object, the size of the page, is created in a new layer." msgstr "" +"Este efeito cria o texto de espaço reservado \"Lorem Ipsum\". Se for " +"selecionado um texto fluido, o \"Lorem Ipsum\" é adicionado a este, caso " +"contrário é criado um objeto novo de texto fluido, do tamanho da página, " +"numa nova camada." #: ../share/extensions/markers_strokepaint.inx.h:1 -#, fuzzy msgid "Color Markers" -msgstr "Cores" +msgstr "Marcadores Coloridos" #: ../share/extensions/markers_strokepaint.inx.h:2 -#, fuzzy msgid "From object" -msgstr "Nenhum objecto" +msgstr "Do objeto" #: ../share/extensions/markers_strokepaint.inx.h:3 -#, fuzzy msgid "Marker type:" -msgstr "Mais escuro" +msgstr "Tipo de marcador:" #: ../share/extensions/markers_strokepaint.inx.h:4 -#, fuzzy msgid "Invert fill and stroke colors" -msgstr "Definir cor do traço" +msgstr "Inverter preenchimento e cor do traço" #: ../share/extensions/markers_strokepaint.inx.h:5 -#, fuzzy msgid "Assign alpha" -msgstr "Alterar opacidade" +msgstr "Atribuir transparência" #: ../share/extensions/markers_strokepaint.inx.h:6 msgid "solid" -msgstr "" +msgstr "sólido" #: ../share/extensions/markers_strokepaint.inx.h:7 -#, fuzzy msgid "filled" -msgstr "Tipografia normal" +msgstr "preenchido" #: ../share/extensions/markers_strokepaint.inx.h:10 -#, fuzzy msgid "Assign fill color" -msgstr "Definir cor de preenchimento" +msgstr "Atribuir cor do preenchimento" #: ../share/extensions/markers_strokepaint.inx.h:11 -#, fuzzy msgid "Stroke" -msgstr "Traço:" +msgstr "Traço" #: ../share/extensions/markers_strokepaint.inx.h:12 -#, fuzzy msgid "Assign stroke color" -msgstr "Definir cor do traço" +msgstr "Atribuir cor do traço" #: ../share/extensions/measure.inx.h:1 msgid "Measure Path" -msgstr "Medir Caminho" +msgstr "Caminho de Medição" #: ../share/extensions/measure.inx.h:3 -#, fuzzy msgid "Measurement Type: " -msgstr "Unidade de medida:" +msgstr "Tipo de Medida: " #: ../share/extensions/measure.inx.h:4 -#, fuzzy msgid "Text Presets" -msgstr "Propriedades de Textos" +msgstr "Modelos de Texto" #: ../share/extensions/measure.inx.h:6 -#, fuzzy msgid "Text on Path" -msgstr "_Por no Caminho" +msgstr "Texto no Caminho" #: ../share/extensions/measure.inx.h:8 -#, fuzzy, no-c-format +#, no-c-format msgid "Offset (%)" -msgstr "Deslocamentos" +msgstr "Deslocamento (%)" #: ../share/extensions/measure.inx.h:9 -#, fuzzy msgid "Text anchor:" -msgstr "Entrada de Texto" +msgstr "Âncora de texto:" #: ../share/extensions/measure.inx.h:10 -#, fuzzy msgid "Fixed Text" -msgstr "Texto fluído" +msgstr "Texto Fixo" #: ../share/extensions/measure.inx.h:11 -#, fuzzy msgid "Angle (°):" -msgstr "Ângulo X:" +msgstr "Ângulo (°):" #: ../share/extensions/measure.inx.h:12 -#, fuzzy msgid "Font size (px):" -msgstr "Tamanho da fonte [px]" +msgstr "Tamanho da fonte (px):" #: ../share/extensions/measure.inx.h:13 -#, fuzzy msgid "Offset (px):" -msgstr "Deslocamentos" +msgstr "Deslocamento (px):" #: ../share/extensions/measure.inx.h:15 msgid "Scale Factor (Drawing:Real Length) = 1:" -msgstr "" +msgstr "Fator de Escala (Desenhando:Comprimento Real) = 1:" #: ../share/extensions/measure.inx.h:16 -#, fuzzy msgid "Length Unit:" msgstr "Unidade de Comprimento:" #: ../share/extensions/measure.inx.h:18 -#, fuzzy msgctxt "measure extension" msgid "Area" -msgstr "São desligados" +msgstr "Ãrea" #: ../share/extensions/measure.inx.h:19 -#, fuzzy msgctxt "measure extension" msgid "Center of Mass" -msgstr "Massa:" +msgstr "Centro da Massa" #: ../share/extensions/measure.inx.h:21 -#, fuzzy msgid "Text on Path, Start" -msgstr "_Por no Caminho" +msgstr "Texto no Caminho, Início" #: ../share/extensions/measure.inx.h:22 -#, fuzzy msgid "Text on Path, Middle" -msgstr "_Por no Caminho" +msgstr "Texto no Caminho, Meio" #: ../share/extensions/measure.inx.h:23 -#, fuzzy msgid "Text on Path, End" -msgstr "_Por no Caminho" +msgstr "Texto no Caminho, Fim" #: ../share/extensions/measure.inx.h:24 msgid "Fixed Text, Start of Path" -msgstr "" +msgstr "Texto Fixo, Início do Caminho" #: ../share/extensions/measure.inx.h:25 msgid "Fixed Text, Center of BBox" -msgstr "" +msgstr "Texto Fixo, Centro da Caixa Limitadora" #: ../share/extensions/measure.inx.h:26 -#, fuzzy msgid "Fixed Text, Center of Mass" -msgstr "Massa:" +msgstr "Texto Fixo, Centro de Massa" #: ../share/extensions/measure.inx.h:28 -#, fuzzy msgid "Center" -msgstr "Centralizar" +msgstr "Centro" #: ../share/extensions/measure.inx.h:30 -#, fuzzy msgid "Start of Path" -msgstr "Pontilhar peças" +msgstr "Início do Caminho" #: ../share/extensions/measure.inx.h:31 -#, fuzzy msgid "Center of BBox" -msgstr "Massa:" +msgstr "Centor da Caixa Limitadora" #: ../share/extensions/measure.inx.h:32 -#, fuzzy msgid "Center of Mass" -msgstr "Massa:" +msgstr "Centro de Massa" #: ../share/extensions/measure.inx.h:35 #, no-c-format @@ -38932,10 +36956,24 @@ msgid "" "Bezier curves. If a circle is used, the area may be too high by as much as " "0.03%." msgstr "" +"Este efeito mede o comprimento, a área ou o centro de massa dos caminhos " +"selecionados. O comprimento e a área são adicionados como objeto de texto " +"com as unidades selecionadas. O centro de massa é mostrado numa cruz.\n" +" * O formato de visualização do texto pode ser tanto Texto-no-Caminho como " +"texto isolado num ângulo especificado.\n" +" * O número de dígitos significantes pode ser controlado no campo " +"Precisão.\n" +" * O campo Deslocamento controla a distância entre o texto e o caminho.\n" +" * O fator de Escala pode ser usado para fazer medições em desenhos " +"redimensionados. Por exemplo, se 1cm no desenho equivale a 2,5m no mundo " +"real, deve-se introduzir no campo Escala o valor 250.\n" +" * Ao calcular a área, o resultado deve ter precisão para polígonos e " +"curvas Bézier. Se for usado um círculo, a área pode ser demasiado elevada, " +"tanto como 0.03%." #: ../share/extensions/merge_styles.inx.h:1 msgid "Merge Styles into CSS" -msgstr "" +msgstr "Fundir Estilos no CSS" #: ../share/extensions/merge_styles.inx.h:2 msgid "" @@ -38944,258 +36982,226 @@ msgid "" "inline style attributes. Please use a name which best describes the kinds of " "objects and their common context for best effect." msgstr "" +"Todos os nós selecionados serão agrupados juntos e os seus atributos de " +"estilo comum criarão uma nova classe. Esta classe substituirá os atributos " +"do estilo inline. Deve-se usar um nome que descreva da melhor forma o tipo " +"de objetos e o contexto para obter o melhor efeito." #: ../share/extensions/merge_styles.inx.h:3 msgid "New Class Name:" -msgstr "" +msgstr "Novo Nome da Classe:" #: ../share/extensions/merge_styles.inx.h:4 -#, fuzzy msgid "Stylesheet" -msgstr "Estilo" +msgstr "Folha de Estilo" #: ../share/extensions/motion.inx.h:1 -#, fuzzy msgid "Motion" -msgstr "Posição:" +msgstr "Movimento" #: ../share/extensions/motion.inx.h:2 -#, fuzzy msgid "Magnitude:" -msgstr "Magnitude" +msgstr "Magnitude:" #: ../share/extensions/new_glyph_layer.inx.h:1 -#, fuzzy msgid "2 - Add Glyph Layer" -msgstr "Adicionar camada" +msgstr "2 - Adicionar Camada de Caractere" #: ../share/extensions/new_glyph_layer.inx.h:2 -#, fuzzy msgid "Unicode character:" -msgstr "Inserir caractere Unicode" +msgstr "Caractere Unicode:" #: ../share/extensions/next_glyph_layer.inx.h:1 msgid "View Next Glyph" -msgstr "" +msgstr "Ver o Próximo Caractere" #: ../share/extensions/nicechart.inx.h:1 msgid "NiceCharts" -msgstr "" +msgstr "Gráficos Bons" #: ../share/extensions/nicechart.inx.h:2 msgid "Data" -msgstr "" +msgstr "Dados" #: ../share/extensions/nicechart.inx.h:3 -#, fuzzy msgid "Data from file" -msgstr "_Propriedades da Ligação" +msgstr "Dados de um ficheiro" #: ../share/extensions/nicechart.inx.h:5 -#, fuzzy msgid "Delimiter:" -msgstr "Limite de aguçamento:" +msgstr "Delimitador:" #: ../share/extensions/nicechart.inx.h:6 msgid "Column that contains the keys:" -msgstr "" +msgstr "Coluna que contém as chaves:" #: ../share/extensions/nicechart.inx.h:7 -#, fuzzy msgid "Column that contains the values:" -msgstr "Rotação (graus)" +msgstr "Coluna que contém os valores:" #: ../share/extensions/nicechart.inx.h:8 msgid "File encoding (e.g. utf-8):" -msgstr "" +msgstr "Codificação do ficheiro (por ex. utf-8):" #: ../share/extensions/nicechart.inx.h:9 msgid "First line contains headings" -msgstr "" +msgstr "A primeira linha contém os cabeçalhos" #: ../share/extensions/nicechart.inx.h:10 -#, fuzzy msgid "Direct input" -msgstr "Descrição" +msgstr "Entrada direta" #: ../share/extensions/nicechart.inx.h:11 msgid "Data:" -msgstr "" +msgstr "Dados:" #: ../share/extensions/nicechart.inx.h:12 -#, fuzzy msgid "Enter the full path to a CSV file:" -msgstr "Preenchimento em cor lisa" +msgstr "Introduzir caminho completo do ficheiro CSV:" #: ../share/extensions/nicechart.inx.h:13 msgid "Type in comma separated values:" -msgstr "" +msgstr "Escrever valores separados com vírgula:" #: ../share/extensions/nicechart.inx.h:14 msgid "(format like this: apples:3,bananas:5)" -msgstr "" +msgstr "(por exemplo: maçâs:3,bananas:5)" #: ../share/extensions/nicechart.inx.h:15 -#, fuzzy msgid "Labels" -msgstr "_Rótulo" +msgstr "Etiquetas" #: ../share/extensions/nicechart.inx.h:16 -#, fuzzy msgid "Font:" -msgstr "Fonte" +msgstr "Fonte:" #: ../share/extensions/nicechart.inx.h:18 -#, fuzzy msgid "Font color:" -msgstr "Soltar cor" +msgstr "Cor da fonte:" #: ../share/extensions/nicechart.inx.h:19 msgid "Charts" -msgstr "" +msgstr "Gráficos" #: ../share/extensions/nicechart.inx.h:20 -#, fuzzy msgid "Draw horizontally" -msgstr "Mover horizontalmente" +msgstr "Desenhar horizontalmente" #: ../share/extensions/nicechart.inx.h:21 -#, fuzzy msgid "Bar length:" -msgstr "Comprimento de onda" +msgstr "Comprimento da barra:" #: ../share/extensions/nicechart.inx.h:22 -#, fuzzy msgid "Bar width:" -msgstr "Largura igual" +msgstr "Largura da barra:" #: ../share/extensions/nicechart.inx.h:23 -#, fuzzy msgid "Pie radius:" -msgstr "Raio interno:" +msgstr "Raio do queijo:" #: ../share/extensions/nicechart.inx.h:24 -#, fuzzy msgid "Bar offset:" -msgstr "Ajustar a distância de compensação" +msgstr "Deslocamento da barra:" #: ../share/extensions/nicechart.inx.h:26 msgid "Offset between chart and labels:" -msgstr "" +msgstr "Deslocamento entre o gráfico e as etiquetas:" #: ../share/extensions/nicechart.inx.h:27 msgid "Offset between chart and chart title:" -msgstr "" +msgstr "Deslocamento entre o gráfico e o título do gráfico:" #: ../share/extensions/nicechart.inx.h:28 msgid "Work around aliasing effects (creates overlapping segments)" -msgstr "" +msgstr "Alternativa a efeitos serrilhados (cria segmentos sobrepostos)" #: ../share/extensions/nicechart.inx.h:29 -#, fuzzy msgid "Color scheme:" -msgstr "Cores:" +msgstr "Esquema de cores:" #: ../share/extensions/nicechart.inx.h:30 -#, fuzzy msgid "Custom colors:" -msgstr "Soltar cor" +msgstr "Cores personalizadas:" #: ../share/extensions/nicechart.inx.h:31 -#, fuzzy msgid "Reverse color scheme" -msgstr "Remover traço" +msgstr "Esquema invertido de cores" #: ../share/extensions/nicechart.inx.h:32 -#, fuzzy msgid "Drop shadow" -msgstr "Soltar SVG" +msgstr "Sombra caída" #: ../share/extensions/nicechart.inx.h:37 msgid "SAP" -msgstr "" +msgstr "SAP" #: ../share/extensions/nicechart.inx.h:38 -#, fuzzy msgid "Values" -msgstr "Valor" +msgstr "Valores" #: ../share/extensions/nicechart.inx.h:39 -#, fuzzy msgid "Show values" -msgstr "Desenhar Alças" +msgstr "Mostrar valores" #: ../share/extensions/nicechart.inx.h:40 -#, fuzzy msgid "Chart type:" -msgstr "Sombra" +msgstr "Tipo de gráfico:" #: ../share/extensions/nicechart.inx.h:41 -#, fuzzy msgid "Bar chart" -msgstr "Altura da Barra:" +msgstr "Gráfico de barras" #: ../share/extensions/nicechart.inx.h:42 msgid "Pie chart" -msgstr "" +msgstr "Gráfico de queijo" #: ../share/extensions/nicechart.inx.h:43 msgid "Pie chart (percentage)" -msgstr "" +msgstr "Gráfico de queijo (percentagem)" #: ../share/extensions/nicechart.inx.h:44 msgid "Stacked bar chart" -msgstr "" +msgstr "Gráfico de barras acumuladas" #: ../share/extensions/param_curves.inx.h:1 -#, fuzzy msgid "Parametric Curves" -msgstr "Parâmetros" +msgstr "Curvas Paramétricas" #: ../share/extensions/param_curves.inx.h:2 -#, fuzzy msgid "Range and Sampling" msgstr "Escala e Amostragem" #: ../share/extensions/param_curves.inx.h:3 -#, fuzzy msgid "Start t-value:" -msgstr "Valor de x inicial" +msgstr "Valor de T inicial:" #: ../share/extensions/param_curves.inx.h:4 -#, fuzzy msgid "End t-value:" -msgstr "Valor de x final" +msgstr "Valor de T final:" #: ../share/extensions/param_curves.inx.h:5 -#, fuzzy msgid "Multiply t-range by 2*pi" -msgstr "Multiplicar a escala x por 2*pi" +msgstr "Multiplicar a escala T por 2*pi" #: ../share/extensions/param_curves.inx.h:6 -#, fuzzy msgid "X-value of rectangle's left:" -msgstr "Valor de y do topo do retângulo" +msgstr "Valor X da esquerda do retângulo:" #: ../share/extensions/param_curves.inx.h:7 -#, fuzzy msgid "X-value of rectangle's right:" -msgstr "Valor de y do topo do retângulo" +msgstr "Valor X da direita do retângulo:" #: ../share/extensions/param_curves.inx.h:8 -#, fuzzy msgid "Y-value of rectangle's bottom:" -msgstr "Valor de y da base do retângulo" +msgstr "Valor Y da parte de baixo do retângulo:" #: ../share/extensions/param_curves.inx.h:9 -#, fuzzy msgid "Y-value of rectangle's top:" -msgstr "Valor de y do topo do retângulo" +msgstr "Valor Y da parte de cima do retângulo:" #: ../share/extensions/param_curves.inx.h:10 -#, fuzzy msgid "Samples:" -msgstr "Amostras" +msgstr "Amostras:" #: ../share/extensions/param_curves.inx.h:14 msgid "" @@ -39203,20 +37209,21 @@ msgid "" "scales.\n" "First derivatives are always determined numerically." msgstr "" +"Selecionar um retângulo antes de usar a extensão. Irá determinar as escalas " +"X e Y.\n" +"As primeiras derivadas são sempre determinadas numericamente." #: ../share/extensions/param_curves.inx.h:26 -#, fuzzy msgid "X-Function:" -msgstr "Função" +msgstr "Função X:" #: ../share/extensions/param_curves.inx.h:27 -#, fuzzy msgid "Y-Function:" -msgstr "Função" +msgstr "Função Y:" #: ../share/extensions/pathalongpath.inx.h:1 msgid "Pattern along Path" -msgstr "Padrão ao longo do caminho" +msgstr "Padrão ao longo do Caminho" #: ../share/extensions/pathalongpath.inx.h:3 msgid "Copies of the pattern:" @@ -39233,15 +37240,13 @@ msgstr "Espaço entre cópias:" #: ../share/extensions/pathalongpath.inx.h:6 #: ../share/extensions/pathscatter.inx.h:6 -#, fuzzy msgid "Normal offset:" -msgstr "Tipografia normal" +msgstr "Deslocamento normal:" #: ../share/extensions/pathalongpath.inx.h:7 #: ../share/extensions/pathscatter.inx.h:7 -#, fuzzy msgid "Tangential offset:" -msgstr "Tipografia tangencial" +msgstr "Deslocamento tangencial:" #: ../share/extensions/pathalongpath.inx.h:8 #: ../share/extensions/pathscatter.inx.h:8 @@ -39254,13 +37259,12 @@ msgid "Duplicate the pattern before deformation" msgstr "Duplicar o padrão antes da deformação" #: ../share/extensions/pathalongpath.inx.h:14 -#, fuzzy msgid "Snake" -msgstr "Enviesar" +msgstr "Cobra" #: ../share/extensions/pathalongpath.inx.h:15 msgid "Ribbon" -msgstr "" +msgstr "Fita" #: ../share/extensions/pathalongpath.inx.h:17 msgid "" @@ -39268,53 +37272,49 @@ msgid "" "The pattern is the topmost object in the selection. Groups of paths, shapes " "or clones are allowed." msgstr "" +"Este efeito espalha ou dobra um padrão ao longo de caminhos \"esqueletos\" " +"arbitrários. O padrão tem de ser o objeto mais acima na seleção. São " +"permitidos grupos de caminhos, formas geométricas e clones." #: ../share/extensions/pathscatter.inx.h:3 -#, fuzzy msgid "Follow path orientation" -msgstr "Orientação da página:" +msgstr "Seguir orientação do caminho" #: ../share/extensions/pathscatter.inx.h:4 msgid "Stretch spaces to fit skeleton length" -msgstr "" +msgstr "Esticar espaços para caber no comprimento do esqueleto" #: ../share/extensions/pathscatter.inx.h:9 -#, fuzzy msgid "Original pattern will be:" -msgstr "Padrão é vertical" +msgstr "O padrão original será:" #: ../share/extensions/pathscatter.inx.h:11 msgid "If pattern is a group, pick group members" -msgstr "" +msgstr "Se o padrão for um grupo, pegar nos membros do grupo" #: ../share/extensions/pathscatter.inx.h:12 msgid "Pick group members:" -msgstr "" +msgstr "Pegar em membros de grupos:" #: ../share/extensions/pathscatter.inx.h:13 -#, fuzzy msgid "Moved" -msgstr "Mover" +msgstr "Movido" #: ../share/extensions/pathscatter.inx.h:14 -#, fuzzy msgid "Copied" -msgstr "Combinado" +msgstr "Copiado" #: ../share/extensions/pathscatter.inx.h:15 -#, fuzzy msgid "Cloned" -msgstr "Clones" +msgstr "Clonado" #: ../share/extensions/pathscatter.inx.h:16 -#, fuzzy msgid "Randomly" -msgstr "Aleatório:" +msgstr "Aleatoriamente" #: ../share/extensions/pathscatter.inx.h:17 -#, fuzzy msgid "Sequentially" -msgstr "Desfazer preenchimento" +msgstr "Sequencialmente" #: ../share/extensions/pathscatter.inx.h:19 msgid "" @@ -39322,29 +37322,29 @@ msgid "" "pattern must be the topmost object in the selection. Groups of paths, " "shapes, clones are allowed." msgstr "" +"Este efeito espalha um padrão ao longo de caminhos \"esqueletos\" " +"arbitrários. O padrão tem de ser o objeto mais acima na seleção. São " +"permitidos grupos de caminhos, formas geométricas e clones." #: ../share/extensions/perfectboundcover.inx.h:1 msgid "Perfect-Bound Cover Template" -msgstr "" +msgstr "Modelo de Capa com Vinco Perfeito" #: ../share/extensions/perfectboundcover.inx.h:2 msgid "Book Properties" msgstr "Propriedades do Livro" #: ../share/extensions/perfectboundcover.inx.h:3 -#, fuzzy msgid "Book Width (inches):" -msgstr "Largura do Livro (polegadas)" +msgstr "Largura do Livro (polegadas):" #: ../share/extensions/perfectboundcover.inx.h:4 -#, fuzzy msgid "Book Height (inches):" -msgstr "Altura do Livro (polegadas)" +msgstr "Altura do Livro (polegadas):" #: ../share/extensions/perfectboundcover.inx.h:5 -#, fuzzy msgid "Number of Pages:" -msgstr "Número de páginas" +msgstr "Número de Páginas:" #: ../share/extensions/perfectboundcover.inx.h:6 msgid "Remove existing guides" @@ -39355,17 +37355,16 @@ msgid "Interior Pages" msgstr "Páginas Internas" #: ../share/extensions/perfectboundcover.inx.h:8 -#, fuzzy msgid "Paper Thickness Measurement:" -msgstr "Medida da Grossura do Papel" +msgstr "Medição da Grossura do Papel:" #: ../share/extensions/perfectboundcover.inx.h:9 msgid "Pages Per Inch (PPI)" -msgstr "" +msgstr "Páginas Por Polegada (PPP)" #: ../share/extensions/perfectboundcover.inx.h:10 msgid "Caliper (inches)" -msgstr "" +msgstr "Calibre (polegadas)" #: ../share/extensions/perfectboundcover.inx.h:11 msgid "Points" @@ -39373,85 +37372,82 @@ msgstr "Pontos" #: ../share/extensions/perfectboundcover.inx.h:12 msgid "Bond Weight #" -msgstr "" +msgstr "Tamanho do Vinco #" #: ../share/extensions/perfectboundcover.inx.h:13 -#, fuzzy msgid "Specify Width" -msgstr "Largura da caneta" +msgstr "Especificar Largura" #: ../share/extensions/perfectboundcover.inx.h:14 -#, fuzzy msgid "Value:" -msgstr "Valor" +msgstr "Valor:" #: ../share/extensions/perfectboundcover.inx.h:15 msgid "Cover" msgstr "Capa" #: ../share/extensions/perfectboundcover.inx.h:16 -#, fuzzy msgid "Cover Thickness Measurement:" -msgstr "Medida da Grossura da Capa" +msgstr "Medição da Grossura da Capa:" #: ../share/extensions/perfectboundcover.inx.h:17 -#, fuzzy msgid "Bleed (in):" -msgstr "Sangrar (in)" +msgstr "Sangrar (polegadas):" #: ../share/extensions/perfectboundcover.inx.h:18 msgid "Note: Bond Weight # calculations are a best-guess estimate." -msgstr "" +msgstr "Nota: os cálculos do Tamanho do Vinco # são uma estimativa." #: ../share/extensions/pixelsnap.inx.h:1 -#, fuzzy msgid "PixelSnap" -msgstr "Pixel" +msgstr "Atrair aos Píxeis" #: ../share/extensions/pixelsnap.inx.h:2 msgid "" "Snap all paths in selection to pixels. Snaps borders to half-points and " "fills to full points." msgstr "" +"Atrai todos os caminhos na seleção aos píxeis. Atrai bordas aos meios-pontos " +"e preenchimentos aos pontos totais." #: ../share/extensions/plotter.inx.h:1 msgid "Plot" -msgstr "" +msgstr "Enviar para a Plotter" #: ../share/extensions/plotter.inx.h:2 msgid "" "Please make sure that all objects you want to plot are converted to paths." msgstr "" +"Confirme que todos os objetos que pretende enviar para a plotter estão " +"convertidos em caminhos." #: ../share/extensions/plotter.inx.h:3 -#, fuzzy msgid "Connection Settings " -msgstr "Conexões" +msgstr "Configurações de Ligação " #: ../share/extensions/plotter.inx.h:4 -#, fuzzy msgid "Serial port:" -msgstr "Texto vertical" +msgstr "Porta série:" #: ../share/extensions/plotter.inx.h:5 msgid "" "The port of your serial connection, on Windows something like 'COM1', on " "Linux something like: '/dev/ttyUSB0' (Default: COM1)" msgstr "" +"A porta da ligação série. Em Windows é algo como 'COM1', em Linux algo como " +"'/dev/ttyUSB0' (Padrão: COM1)" #: ../share/extensions/plotter.inx.h:6 -#, fuzzy msgid "Serial baud rate:" -msgstr "_Vertical" +msgstr "Taxa de Baud em série:" #: ../share/extensions/plotter.inx.h:7 msgid "The Baud rate of your serial connection (Default: 9600)" -msgstr "" +msgstr "A taxa de Baud da ligação em série (padrão:9600)" #: ../share/extensions/plotter.inx.h:8 -#, fuzzy msgid "Serial byte size:" -msgstr "Colar tamanho" +msgstr "Tamanho do byte série:" #: ../share/extensions/plotter.inx.h:10 #, no-c-format @@ -39459,11 +37455,12 @@ msgid "" "The Byte size of your serial connection, 99% of all plotters use the default " "setting (Default: 8 Bits)" msgstr "" +"O tamanho do Byte da ligação série, 99% de todas as plotters usam a " +"definição padrão (8 Bits)" #: ../share/extensions/plotter.inx.h:11 -#, fuzzy msgid "Serial stop bits:" -msgstr "Texto vertical" +msgstr "Bits de paragem série:" #: ../share/extensions/plotter.inx.h:13 #, no-c-format @@ -39471,11 +37468,12 @@ msgid "" "The Stop bits of your serial connection, 99% of all plotters use the default " "setting (Default: 1 Bit)" msgstr "" +"Os bits de paragem da ligação série, 99% de todas as plotters usam a " +"definição padrão (1 Bit)" #: ../share/extensions/plotter.inx.h:14 -#, fuzzy msgid "Serial parity:" -msgstr "Texto vertical" +msgstr "Paridade série:" #: ../share/extensions/plotter.inx.h:16 #, no-c-format @@ -39483,66 +37481,74 @@ msgid "" "The Parity of your serial connection, 99% of all plotters use the default " "setting (Default: None)" msgstr "" +"A paridade da ligação série, 99% de todas as plotters usam a definição " +"padrão (nenhum)" #: ../share/extensions/plotter.inx.h:17 -#, fuzzy msgid "Serial flow control:" -msgstr "Texto vertical" +msgstr "Controle de fluxo série:" #: ../share/extensions/plotter.inx.h:18 msgid "" "The Software / Hardware flow control of your serial connection (Default: " "Software)" msgstr "" +"O controle de fluxo série por Software ou Hardware da ligação em série " +"(padrão: Software)" #: ../share/extensions/plotter.inx.h:19 -#, fuzzy msgid "Command language:" -msgstr "Linguagem:" +msgstr "Linguagem de comandos:" #: ../share/extensions/plotter.inx.h:20 msgid "The command language to use (Default: HPGL)" -msgstr "" +msgstr "A linguagem de comandos a usar (padrão: HPGL)" #: ../share/extensions/plotter.inx.h:21 msgid "Software (XON/XOFF)" -msgstr "" +msgstr "Software (XON/XOFF)" #: ../share/extensions/plotter.inx.h:22 msgid "Hardware (RTS/CTS)" -msgstr "" +msgstr "Hardware (RTS/CTS)" #: ../share/extensions/plotter.inx.h:23 msgid "Hardware (DSR/DTR + RTS/CTS)" -msgstr "" +msgstr "Hardware (DSR/DTR + RTS/CTS)" #: ../share/extensions/plotter.inx.h:25 msgid "HPGL" -msgstr "" +msgstr "HPGL" #: ../share/extensions/plotter.inx.h:26 msgid "DMPL" -msgstr "" +msgstr "DMPL" #: ../share/extensions/plotter.inx.h:27 msgid "KNK Plotter (HPGL variant)" -msgstr "" +msgstr "KNK Plotter (variante HPGL)" #: ../share/extensions/plotter.inx.h:28 msgid "" "Using wrong settings can under certain circumstances cause Inkscape to " "freeze. Always save your work before plotting!" msgstr "" +"Utilizar configurações erradas pode, em certas circunstâncias, causar o " +"bloqueio do Inkscape. Grave sempre os documentos antes de imprimir na " +"plotter!" #: ../share/extensions/plotter.inx.h:29 msgid "" "This can be a physical serial connection or a USB-to-Serial bridge. Ask your " "plotter manufacturer for drivers if needed." msgstr "" +"Isto pode ser uma ligação física em série ou uma ponte USB-para-Série. " +"Procure pelos drivers da plotter no sítio web do fabricante caso seja " +"necessário." #: ../share/extensions/plotter.inx.h:30 msgid "Parallel (LPT) connections are not supported." -msgstr "" +msgstr "Não são suportadas ligações paralelas (LPT)." #: ../share/extensions/plotter.inx.h:41 msgid "" @@ -39550,352 +37556,313 @@ msgid "" "(depending on your plotter model), set to 0 to omit command. Most plotters " "ignore this command. (Default: 0)" msgstr "" +"A velocidade que a caneta se movimenta em centímetros ou milímetros por " +"segundo (dependendo do modelo da plotter). Aplicar o valor 0 para omitir o " +"comando. A maioria das plotters ignoram este comando. (Padrão: 0)" #: ../share/extensions/plotter.inx.h:42 -#, fuzzy msgid "Rotation (°, clockwise):" -msgstr "Girar no sentido horário" +msgstr "Rotação (°, sentido horário):" #: ../share/extensions/plotter.inx.h:62 -#, fuzzy msgid "Show debug information" -msgstr "Informações sobre uso de memória" +msgstr "Mostrar informação de depuração" #: ../share/extensions/plotter.inx.h:63 msgid "" "Check this to get verbose information about the plot without actually " "sending something to the plotter (A.k.a. data dump) (Default: Unchecked)" msgstr "" +"Ativar isto para obter informações detalhadas sobre a plottagem sem enviar " +"nada para a plotter (isto é, dump de dados) (padrão: não ativado)" #: ../share/extensions/plt_input.inx.h:1 msgid "AutoCAD Plot Input" -msgstr "" +msgstr "Importar AutoCAD Plot" #: ../share/extensions/plt_input.inx.h:2 ../share/extensions/plt_output.inx.h:2 -#, fuzzy msgid "HP Graphics Language Plot file [AutoCAD] (*.plt)" -msgstr "Ficheiro XFIG Graphics (*.fig)" +msgstr "HP Graphics Language Plot [AutoCAD] (*.plt)" #: ../share/extensions/plt_input.inx.h:3 -#, fuzzy msgid "Open HPGL plotter files" -msgstr "Renomear filtro" +msgstr "Abrir ficheiros HPGL ploter" #: ../share/extensions/plt_output.inx.h:1 msgid "AutoCAD Plot Output" -msgstr "" +msgstr "Exportar em AutoCAD Plot" #: ../share/extensions/plt_output.inx.h:3 -#, fuzzy msgid "Save a file for plotters" -msgstr "Seleccione um nome de ficheiro para exportar" +msgstr "Gravar um ficheiro para plotters" #: ../share/extensions/polyhedron_3d.inx.h:1 -#, fuzzy msgid "3D Polyhedron" -msgstr "Polígono" +msgstr "Poliedro 3D" #: ../share/extensions/polyhedron_3d.inx.h:2 -#, fuzzy msgid "Model file" -msgstr "Todos os tipos" +msgstr "Ficheiro de modelo" #: ../share/extensions/polyhedron_3d.inx.h:3 -#, fuzzy msgid "Object:" -msgstr "Objecto" +msgstr "Objeto:" #: ../share/extensions/polyhedron_3d.inx.h:4 -#, fuzzy msgid "Filename:" -msgstr "Renomear ficheiro" +msgstr "Nome do ficheiro:" #: ../share/extensions/polyhedron_3d.inx.h:5 -#, fuzzy msgid "Object Type:" -msgstr "Objecto" +msgstr "Tipo de Objeto:" #: ../share/extensions/polyhedron_3d.inx.h:6 -#, fuzzy msgid "Clockwise wound object" -msgstr "DesBloquear objectos" +msgstr "Objeto lesado no sentido horário" #: ../share/extensions/polyhedron_3d.inx.h:7 msgid "Cube" -msgstr "" +msgstr "Cubo" #: ../share/extensions/polyhedron_3d.inx.h:8 msgid "Truncated Cube" -msgstr "" +msgstr "Cubo Truncado" #: ../share/extensions/polyhedron_3d.inx.h:9 msgid "Snub Cube" -msgstr "" +msgstr "Bubo Snub" #: ../share/extensions/polyhedron_3d.inx.h:10 -#, fuzzy msgid "Cuboctahedron" -msgstr "Outro" +msgstr "Cuboctaedro" #: ../share/extensions/polyhedron_3d.inx.h:11 msgid "Tetrahedron" -msgstr "" +msgstr "Tetraedro" #: ../share/extensions/polyhedron_3d.inx.h:12 msgid "Truncated Tetrahedron" -msgstr "" +msgstr "Tetraedro Truncado" #: ../share/extensions/polyhedron_3d.inx.h:13 -#, fuzzy msgid "Octahedron" -msgstr "Outro" +msgstr "Octaedro" #: ../share/extensions/polyhedron_3d.inx.h:14 msgid "Truncated Octahedron" -msgstr "" +msgstr "Octaedro Truncado" #: ../share/extensions/polyhedron_3d.inx.h:15 msgid "Icosahedron" -msgstr "" +msgstr "Isocaedro" #: ../share/extensions/polyhedron_3d.inx.h:16 msgid "Truncated Icosahedron" -msgstr "" +msgstr "Isocaedro Truncado" #: ../share/extensions/polyhedron_3d.inx.h:17 msgid "Small Triambic Icosahedron" -msgstr "" +msgstr "Pequeno Isocaedro Triâmbico" #: ../share/extensions/polyhedron_3d.inx.h:18 msgid "Dodecahedron" -msgstr "" +msgstr "Dodecaedro" #: ../share/extensions/polyhedron_3d.inx.h:19 msgid "Truncated Dodecahedron" -msgstr "" +msgstr "Dodecaedro Truncado" #: ../share/extensions/polyhedron_3d.inx.h:20 msgid "Snub Dodecahedron" -msgstr "" +msgstr "Dodecaedro Snub" #: ../share/extensions/polyhedron_3d.inx.h:21 msgid "Great Dodecahedron" -msgstr "" +msgstr "Grande Dodecaedro" #: ../share/extensions/polyhedron_3d.inx.h:22 msgid "Great Stellated Dodecahedron" -msgstr "" +msgstr "Grande Dodecaedro Estrelado" #: ../share/extensions/polyhedron_3d.inx.h:23 -#, fuzzy msgid "Load from file" -msgstr "_Propriedades da Ligação" +msgstr "Carregar do ficheiro" #: ../share/extensions/polyhedron_3d.inx.h:24 msgid "Face-Specified" -msgstr "" +msgstr "Especificado por Face" #: ../share/extensions/polyhedron_3d.inx.h:25 msgid "Edge-Specified" -msgstr "" +msgstr "Especificado por Borda" #: ../share/extensions/polyhedron_3d.inx.h:27 -#, fuzzy msgid "Rotate around:" -msgstr "Girar nós" +msgstr "Rodar à volta de:" #: ../share/extensions/polyhedron_3d.inx.h:28 #: ../share/extensions/spirograph.inx.h:8 #: ../share/extensions/wireframe_sphere.inx.h:5 -#, fuzzy msgid "Rotation (deg):" -msgstr "Rotação (graus)" +msgstr "Rotação (graus):" #: ../share/extensions/polyhedron_3d.inx.h:29 -#, fuzzy msgid "Then rotate around:" -msgstr "Não redondo" +msgstr "Depois rodar à volta de:" #: ../share/extensions/polyhedron_3d.inx.h:30 msgid "X-Axis" -msgstr "" +msgstr "Eixo X" #: ../share/extensions/polyhedron_3d.inx.h:31 msgid "Y-Axis" -msgstr "" +msgstr "Eixo Y" #: ../share/extensions/polyhedron_3d.inx.h:32 msgid "Z-Axis" -msgstr "" +msgstr "Eixo Z" #: ../share/extensions/polyhedron_3d.inx.h:34 -#, fuzzy msgid "Scaling factor:" -msgstr "Cor lisa" +msgstr "Fator de escala:" #: ../share/extensions/polyhedron_3d.inx.h:35 -#, fuzzy msgid "Fill color, Red:" -msgstr "Cor lisa" +msgstr "Cor do preenchimento, Vemelho:" #: ../share/extensions/polyhedron_3d.inx.h:36 -#, fuzzy msgid "Fill color, Green:" -msgstr "Traço em cor lisa" +msgstr "Cor do preenchimento, Verde:" #: ../share/extensions/polyhedron_3d.inx.h:37 -#, fuzzy msgid "Fill color, Blue:" -msgstr "Preenchimento em cor lisa" +msgstr "Cor do preenchimento, Azul:" #: ../share/extensions/polyhedron_3d.inx.h:39 -#, fuzzy, no-c-format +#, no-c-format msgid "Fill opacity (%):" -msgstr "Opacidade, %" +msgstr "Opacidade do preenchimento (%):" #: ../share/extensions/polyhedron_3d.inx.h:41 -#, fuzzy, no-c-format +#, no-c-format msgid "Stroke opacity (%):" -msgstr "_Pintura de traço" +msgstr "Opacidade do traço (%):" #: ../share/extensions/polyhedron_3d.inx.h:42 -#, fuzzy msgid "Stroke width (px):" -msgstr "Largura do traço" +msgstr "Espessura do traço (px):" #: ../share/extensions/polyhedron_3d.inx.h:43 -#, fuzzy msgid "Shading" -msgstr "Espaçamento" +msgstr "Sombreado" #: ../share/extensions/polyhedron_3d.inx.h:44 -#, fuzzy msgid "Light X:" -msgstr "Iluminar" +msgstr "Luz X:" #: ../share/extensions/polyhedron_3d.inx.h:45 -#, fuzzy msgid "Light Y:" -msgstr "Iluminar" +msgstr "Luz Y:" #: ../share/extensions/polyhedron_3d.inx.h:46 -#, fuzzy msgid "Light Z:" -msgstr "Iluminar" +msgstr "Luz Z:" #: ../share/extensions/polyhedron_3d.inx.h:48 -#, fuzzy msgid "Draw back-facing polygons" -msgstr "Criar estrelas e polígonos" +msgstr "Desenhar faces de trás dos polígonos" #: ../share/extensions/polyhedron_3d.inx.h:49 msgid "Z-sort faces by:" -msgstr "" +msgstr "Ordenação Z das faces por:" #: ../share/extensions/polyhedron_3d.inx.h:50 -#, fuzzy msgid "Faces" -msgstr "Nivelar" +msgstr "Faces" #: ../share/extensions/polyhedron_3d.inx.h:51 -#, fuzzy msgid "Edges" -msgstr "Limite" +msgstr "Bordas" #: ../share/extensions/polyhedron_3d.inx.h:52 -#, fuzzy msgid "Vertices" -msgstr "_Vertical" +msgstr "Vértices" #: ../share/extensions/polyhedron_3d.inx.h:53 -#, fuzzy msgid "Maximum" -msgstr "Médio" +msgstr "Máximo" #: ../share/extensions/polyhedron_3d.inx.h:54 -#, fuzzy msgid "Minimum" -msgstr "Tamanho mínimo" +msgstr "Mínimo" #: ../share/extensions/polyhedron_3d.inx.h:55 msgid "Mean" -msgstr "" +msgstr "Significado" #: ../share/extensions/previous_glyph_layer.inx.h:1 -#, fuzzy msgid "View Previous Glyph" -msgstr "Efeito Anterior" +msgstr "Ver Caractere Anterior" #: ../share/extensions/print_win32_vector.inx.h:1 -#, fuzzy msgid "Win32 Vector Print" msgstr "Impressão Windows 32-bit" #: ../share/extensions/printing_marks.inx.h:1 -#, fuzzy msgid "Printing Marks" -msgstr "Imprimir usando operadores PostScript" +msgstr "Marcas de Impressão" #: ../share/extensions/printing_marks.inx.h:3 msgid "Crop Marks" -msgstr "" +msgstr "Marcas de Corte" #: ../share/extensions/printing_marks.inx.h:4 -#, fuzzy msgid "Bleed Marks" -msgstr "Marcadores centrais:" +msgstr "Marcas de Sangria" #: ../share/extensions/printing_marks.inx.h:5 msgid "Registration Marks" -msgstr "" +msgstr "Marcas de Registo" #: ../share/extensions/printing_marks.inx.h:6 -#, fuzzy msgid "Star Target" -msgstr "Alvo" +msgstr "Estrela Alvo" #: ../share/extensions/printing_marks.inx.h:7 -#, fuzzy msgid "Color Bars" -msgstr "Cores" +msgstr "Barras de Cor" #: ../share/extensions/printing_marks.inx.h:8 -#, fuzzy msgid "Page Information" -msgstr "Informação" +msgstr "Informação da Página" #: ../share/extensions/printing_marks.inx.h:9 -#, fuzzy msgid "Positioning" -msgstr "Posição:" +msgstr "Posicionamento" #: ../share/extensions/printing_marks.inx.h:10 -#, fuzzy msgid "Set crop marks to:" -msgstr "Definir marcadores" +msgstr "Definir marcas de corte para:" #: ../share/extensions/printing_marks.inx.h:17 -#, fuzzy msgid "Canvas" -msgstr "Ciano" +msgstr "Ãrea de Desenho" #: ../share/extensions/printing_marks.inx.h:19 -#, fuzzy msgid "Bleed Margin" -msgstr "Sangrar (in)" +msgstr "Sangria da Margem" #: ../share/extensions/ps_input.inx.h:1 -#, fuzzy msgid "PostScript Input" -msgstr "Entrada Postscript" +msgstr "Importar PostScript" #: ../share/extensions/render_alphabetsoup.inx.h:1 msgid "Alphabet Soup" -msgstr "" +msgstr "Sopa do Alfabeto" #: ../share/extensions/render_barcode.inx.h:1 msgid "Classic" -msgstr "" +msgstr "Clássico" #: ../share/extensions/render_barcode.inx.h:2 msgid "Barcode Type:" @@ -39903,7 +37870,7 @@ msgstr "Tipo de Código de Barras:" #: ../share/extensions/render_barcode.inx.h:3 msgid "Barcode Data:" -msgstr "Dados de Código de barras:" +msgstr "Dados de Código de Barras:" #: ../share/extensions/render_barcode.inx.h:4 msgid "Bar Height:" @@ -39916,230 +37883,203 @@ msgid "Barcode" msgstr "Código de barras" #: ../share/extensions/render_barcode_datamatrix.inx.h:1 -#, fuzzy msgid "Datamatrix" -msgstr "Dados de Código de barras:" +msgstr "Matriz de dados" #: ../share/extensions/render_barcode_datamatrix.inx.h:3 #: ../share/extensions/render_barcode_qrcode.inx.h:4 msgid "Size, in unit squares:" -msgstr "" +msgstr "Tamanho em unidades quadradas:" #: ../share/extensions/render_barcode_datamatrix.inx.h:4 -#, fuzzy msgid "Square Size (px):" -msgstr "Ponta quadrada" +msgstr "Tamanho Quadrado (px):" #: ../share/extensions/render_barcode_qrcode.inx.h:1 msgid "QR Code" -msgstr "" +msgstr "Código QR" #: ../share/extensions/render_barcode_qrcode.inx.h:2 msgid "See http://www.denso-wave.com/qrcode/index-e.html for details" -msgstr "" +msgstr "Para mais detalhes ver http://www.qrcode.com/en/" #: ../share/extensions/render_barcode_qrcode.inx.h:6 msgid "" "With \"Auto\", the size of the barcode depends on the length of the text and " "the error correction level" msgstr "" +"Com \"Auto\" o tamanho do código de barras depende do comprimento do texto e " +"o nível de correção de erros" #: ../share/extensions/render_barcode_qrcode.inx.h:7 -#, fuzzy msgid "Error correction level:" -msgstr "PM: reflexão" +msgstr "Nível de correção de erros:" #: ../share/extensions/render_barcode_qrcode.inx.h:9 #, no-c-format msgid "L (Approx. 7%)" -msgstr "" +msgstr "L (Aprox. 7%)" #: ../share/extensions/render_barcode_qrcode.inx.h:11 #, no-c-format msgid "M (Approx. 15%)" -msgstr "" +msgstr "M (Aprox. 15%)" #: ../share/extensions/render_barcode_qrcode.inx.h:13 #, no-c-format msgid "Q (Approx. 25%)" -msgstr "" +msgstr "Q (Aprox. 25%)" #: ../share/extensions/render_barcode_qrcode.inx.h:15 #, no-c-format msgid "H (Approx. 30%)" -msgstr "" +msgstr "H (Aprox. 30%)" #: ../share/extensions/render_barcode_qrcode.inx.h:17 -#, fuzzy msgid "Square size (px):" -msgstr "Ponta quadrada" +msgstr "Tamanho quadrado (px):" #: ../share/extensions/render_gear_rack.inx.h:1 -#, fuzzy msgid "Rack Gear" -msgstr "Li_mpar" +msgstr "Mecanismo da Prateleira" #: ../share/extensions/render_gear_rack.inx.h:2 -#, fuzzy msgid "Rack Length:" -msgstr "Comprimento:" +msgstr "Comprimento da Prateleira:" #: ../share/extensions/render_gear_rack.inx.h:3 -#, fuzzy msgid "Tooth Spacing:" -msgstr "Espaçamento Horizontal" +msgstr "Espaçamento dos Dentes:" #: ../share/extensions/render_gear_rack.inx.h:4 -#, fuzzy msgid "Contact Angle:" -msgstr "Único" +msgstr "Ângulo de Contacto:" #: ../share/extensions/render_gear_rack.inx.h:6 #: ../share/extensions/render_gears.inx.h:1 -#, fuzzy msgid "Gear" -msgstr "Li_mpar" +msgstr "Engrenagem" #: ../share/extensions/render_gears.inx.h:2 -#, fuzzy msgid "Number of teeth:" -msgstr "Número de dentes" +msgstr "Número de dentes:" #: ../share/extensions/render_gears.inx.h:3 -#, fuzzy msgid "Circular pitch (tooth size):" -msgstr "Barra de Controles de Ferramenta" +msgstr "Inclinação circular (tamanho do dente):" #: ../share/extensions/render_gears.inx.h:4 -#, fuzzy msgid "Pressure angle (degrees):" -msgstr "Ângulo de pressão" +msgstr "Ângulo de pressão (graus):" #: ../share/extensions/render_gears.inx.h:5 msgid "Diameter of center hole (0 for none):" -msgstr "" +msgstr "Diâmetro do buraco central (0 para nenhum):" #: ../share/extensions/render_gears.inx.h:10 msgid "Unit of measurement for both circular pitch and center diameter." msgstr "" +"Unidade de medida tanto para a inclinação circular como o diâmetro do centro." #: ../share/extensions/replace_font.inx.h:1 -#, fuzzy msgid "Replace font" -msgstr "Substituir texto..." +msgstr "Substituir fonte" #: ../share/extensions/replace_font.inx.h:2 -#, fuzzy msgid "Find and Replace font" -msgstr "Encontrar objectos no desenho" +msgstr "Procurar e Substituir fonte" #: ../share/extensions/replace_font.inx.h:3 -#, fuzzy msgid "Find font: " -msgstr "Adicionar filtro" +msgstr "Procurar fonte: " #: ../share/extensions/replace_font.inx.h:4 -#, fuzzy msgid "Replace with: " -msgstr "Substituir" +msgstr "Substituir com: " #: ../share/extensions/replace_font.inx.h:5 msgid "Replace all fonts with: " -msgstr "" +msgstr "Substituir todas as fontes com: " #: ../share/extensions/replace_font.inx.h:6 -#, fuzzy msgid "List all fonts" -msgstr "Administrar efeitos de filtro SVG" +msgstr "Listar todas as fontes" #: ../share/extensions/replace_font.inx.h:7 msgid "" "Choose this tab if you would like to see a list of the fonts used/found." msgstr "" +"Escolher esta opção para ver a lista de fontes utilizadas ou encontradas." #: ../share/extensions/replace_font.inx.h:8 -#, fuzzy msgid "Work on:" -msgstr "Modo:" +msgstr "Trabalhar em:" #: ../share/extensions/replace_font.inx.h:9 -#, fuzzy msgid "Entire drawing" -msgstr "A área exportada é toda a Ecrã de pintura" +msgstr "Todo o desenho" #: ../share/extensions/replace_font.inx.h:10 -#, fuzzy msgid "Selected objects only" -msgstr "Inverter objectos seleccionados horizontalmente" +msgstr "Apenas objetos selecionados" #: ../share/extensions/restack.inx.h:1 -#, fuzzy msgid "Restack" -msgstr " R_edefinir " +msgstr "Tornar a Empilhar" #: ../share/extensions/restack.inx.h:2 -#, fuzzy msgid "Based on Position" -msgstr "Posição:" +msgstr "Baseado na Posição" #: ../share/extensions/restack.inx.h:3 -#, fuzzy msgid "Presets" -msgstr " R_edefinir " +msgstr "Modelos" #: ../share/extensions/restack.inx.h:6 -#, fuzzy msgid "Horizontal:" -msgstr "_Horizontal" +msgstr "Horizontal:" #: ../share/extensions/restack.inx.h:7 -#, fuzzy msgid "Vertical:" -msgstr "_Vertical" +msgstr "Vertical:" #: ../share/extensions/restack.inx.h:8 -#, fuzzy msgid "Restack Direction" -msgstr "Descrição:" +msgstr "Direção de Tornar a Empilhar" #: ../share/extensions/restack.inx.h:9 msgid "Left to Right (0)" -msgstr "" +msgstr "Esquerda para a Direita (0)" #: ../share/extensions/restack.inx.h:10 msgid "Bottom to Top (90)" -msgstr "" +msgstr "Baixo para Cima (90)" #: ../share/extensions/restack.inx.h:11 msgid "Right to Left (180)" -msgstr "" +msgstr "Direita para a Esquerda (180)" #: ../share/extensions/restack.inx.h:12 -#, fuzzy msgid "Top to Bottom (270)" -msgstr "_Baixar para o Fundo" +msgstr "Cima para Baixo (270)" #: ../share/extensions/restack.inx.h:13 -#, fuzzy msgid "Radial Outward" -msgstr "Degradê radial" +msgstr "Radial para Fora" #: ../share/extensions/restack.inx.h:14 -#, fuzzy msgid "Radial Inward" -msgstr "Degradê radial" +msgstr "Radial para Dentro" #: ../share/extensions/restack.inx.h:15 -#, fuzzy msgid "Object Reference Point" -msgstr "Preferências do degradê" +msgstr "Ponto de Referência do Objeto" #: ../share/extensions/restack.inx.h:17 #: ../share/extensions/text_extract.inx.h:9 #: ../share/extensions/text_merge.inx.h:9 -#, fuzzy msgid "Middle" -msgstr "Ladrilhado" +msgstr "Meio" #: ../share/extensions/restack.inx.h:19 #: ../share/extensions/text_extract.inx.h:12 @@ -40150,28 +38090,24 @@ msgstr "Topo" #: ../share/extensions/restack.inx.h:20 #: ../share/extensions/text_extract.inx.h:13 #: ../share/extensions/text_merge.inx.h:13 -#, fuzzy msgid "Bottom" msgstr "Fundo" #: ../share/extensions/restack.inx.h:21 -#, fuzzy msgid "Based on Z-Order" -msgstr "Levantar nó" +msgstr "Baseado na Ordem Z" #: ../share/extensions/restack.inx.h:22 -#, fuzzy msgid "Restack Mode" -msgstr " R_edefinir " +msgstr "Modo de Tornar a Empilhar" #: ../share/extensions/restack.inx.h:23 -#, fuzzy msgid "Reverse Z-Order" -msgstr "Inverter degradê" +msgstr "Inverter Ordem Z" #: ../share/extensions/restack.inx.h:24 msgid "Shuffle Z-Order" -msgstr "" +msgstr "Baralhar Ordem Z" #: ../share/extensions/restack.inx.h:26 msgid "" @@ -40180,59 +38116,57 @@ msgid "" "objects inside a single selected group, or a selection of multiple objects " "on the current drawing level (layer or group)." msgstr "" +"Esta extensão altera a ordem Z dos objetos baseados na sua posição na área " +"de desenho ou na ordem Z atual. Seleção: a extensão torna a empilhar os " +"objetos dentro de um grupo único selecionado ou uma seleção de vários " +"objetos no nível de desenho atual (camada ou grupo)." #: ../share/extensions/restack.inx.h:27 #: ../share/extensions/ungroup_deep.inx.h:6 -#, fuzzy msgid "Arrange" -msgstr "Ângulo" +msgstr "Organizar" #: ../share/extensions/rtree.inx.h:1 msgid "Random Tree" msgstr "Ãrvore Aleatória" #: ../share/extensions/rtree.inx.h:2 -#, fuzzy msgid "Initial size:" -msgstr "Tamanho inicial" +msgstr "Tamanho inicial:" #: ../share/extensions/rtree.inx.h:3 -#, fuzzy msgid "Minimum size:" -msgstr "Tamanho mínimo" +msgstr "Tamanho mínimo:" #: ../share/extensions/rtree.inx.h:4 -#, fuzzy msgid "Omit redundant segments" -msgstr "Endireitar Segmentos" +msgstr "Omitir segmentos redundantes" #: ../share/extensions/rtree.inx.h:5 msgid "Lift pen for backward steps" -msgstr "" +msgstr "Levantar caneta para passos para trás" #: ../share/extensions/rubberstretch.inx.h:1 -#, fuzzy msgid "Rubber Stretch" -msgstr "Número de dentes" +msgstr "Esticar tipo Borracha" #: ../share/extensions/rubberstretch.inx.h:3 -#, fuzzy, no-c-format +#, no-c-format msgid "Strength (%):" -msgstr "Tamanho do passo (px)" +msgstr "Força (%):" #: ../share/extensions/rubberstretch.inx.h:5 #, no-c-format msgid "Curve (%):" -msgstr "" +msgstr "Curva (%):" #: ../share/extensions/scour.inx.h:1 -#, fuzzy msgid "Optimized SVG Output" -msgstr "Saída SVG" +msgstr "Exportar em SVG Otimizado" #: ../share/extensions/scour.inx.h:3 msgid "Number of significant digits for coordinates:" -msgstr "" +msgstr "Número de dígitos significantes para coordenadas:" #: ../share/extensions/scour.inx.h:4 msgid "" @@ -40242,82 +38176,97 @@ msgid "" "\"3\" is specified, the coordinate 3.14159 is output as 3.14 while the " "coordinate 123.675 is output as 124." msgstr "" +"Especifica o número de dígitos significantes que devem ser utilizados para " +"as coordenadas. Notar que os dígitos significantes *não* são o número de " +"casas decimais mas sim o número total de dígitos de saída. Por exemplo, se " +"for especificado um valor de \"3\", a coordenada 3.14159 é convertida para " +"3.14 assim como 123.675 é convertida para 124." #: ../share/extensions/scour.inx.h:5 -#, fuzzy msgid "Shorten color values" -msgstr "Soltar cor" +msgstr "Abreviar valores de cores" #: ../share/extensions/scour.inx.h:6 msgid "" "Convert all color specifications to #RRGGBB (or #RGB where applicable) " "format." msgstr "" +"Converter todas as especificações de cor para o formato #RRGGBB (ou #RGB " +"quando aplicável)." #: ../share/extensions/scour.inx.h:7 -#, fuzzy msgid "Convert CSS attributes to XML attributes" -msgstr "Eliminar atributo" +msgstr "Converter atributos CSS em atributos XML" #: ../share/extensions/scour.inx.h:8 msgid "" "Convert styles from style tags and inline style=\"\" declarations into XML " "attributes." msgstr "" +"Converter estilos das etiquetas de estilo e declarações inline style=\"\" em " +"atributos XML." #: ../share/extensions/scour.inx.h:9 -#, fuzzy msgid "Collapse groups" -msgstr "Limpa_r Todos" +msgstr "Contrair grupos" #: ../share/extensions/scour.inx.h:10 msgid "" "Remove useless groups, promoting their contents up one level. Requires " "\"Remove unused IDs\" to be set." msgstr "" +"Remover grupos inúteis, promovendo os seus conteúdos para um nível acima. " +"Necessita de ter configurado \"Remover IDs não utilizados\"." #: ../share/extensions/scour.inx.h:11 msgid "Create groups for similar attributes" -msgstr "" +msgstr "Criar grupos para atributos similares" #: ../share/extensions/scour.inx.h:12 msgid "" "Create groups for runs of elements having at least one attribute in common " "(e.g. fill-color, stroke-opacity, ...)." msgstr "" +"Criar grupos para processamento de elementos que tenham pelo menos 1 " +"atributo em comum (por exemplo cor do preenchimento, opacidade do traço, " +"etc.)." #: ../share/extensions/scour.inx.h:13 msgid "Keep editor data" -msgstr "" +msgstr "Manter dados do editor" #: ../share/extensions/scour.inx.h:14 msgid "" "Don't remove editor-specific elements and attributes. Currently supported: " "Inkscape, Sodipodi and Adobe Illustrator." msgstr "" +"Não remover elementos e atributos específicos dos editores. Suportados " +"atualmente: Inkscape, Sodipodi e Adobe Illustrator." #: ../share/extensions/scour.inx.h:15 msgid "Keep unreferenced definitions" -msgstr "" +msgstr "Manter definições não referenciadas" #: ../share/extensions/scour.inx.h:16 msgid "Keep element definitions that are not currently used in the SVG" -msgstr "" +msgstr "Manter definições de elementos que não estejam a ser utilizados no SVG" #: ../share/extensions/scour.inx.h:17 msgid "Work around renderer bugs" -msgstr "" +msgstr "Usar recurso alternativo para evitar erros" #: ../share/extensions/scour.inx.h:18 msgid "" "Works around some common renderer bugs (mainly libRSVG) at the cost of a " "slightly larger SVG file." msgstr "" +"Contorna alguns problemas comuns para processar e visualizar gráficos SVG " +"(principalmente o libRSVG) com a contrapartida de resultar num ficheiro que " +"ocupa ligeiramente mais espaço em disco." #: ../share/extensions/scour.inx.h:20 -#, fuzzy msgid "Remove the XML declaration" -msgstr "Remover _Transformações" +msgstr "Remover a declaração XML" #: ../share/extensions/scour.inx.h:21 msgid "" @@ -40325,11 +38274,13 @@ msgid "" "especially if special characters are used in the document) from the file " "header." msgstr "" +"Remove a declaração XML (que é opcional mas deve ser utilizada, " +"especialmente se forem usados caracteres especiais no documento) do " +"cabeçalho do documento." #: ../share/extensions/scour.inx.h:22 -#, fuzzy msgid "Remove metadata" -msgstr "Remover Vermelho" +msgstr "Remover metadados" #: ../share/extensions/scour.inx.h:23 msgid "" @@ -40337,31 +38288,33 @@ msgid "" "include license and author information, alternate versions for non-SVG-" "enabled browsers, etc." msgstr "" +"Remove as etiquetas de metadados e respetiva informação, que pode incluir a " +"informação sobre a licença, autor, etc. Os metadados podem ser visualizados " +"e editados no menu \"Ficheiro->Propriedades do Documento...->aba Metadados\"" #: ../share/extensions/scour.inx.h:24 -#, fuzzy msgid "Remove comments" -msgstr "Remover filtro" +msgstr "Remover comentários" #: ../share/extensions/scour.inx.h:25 msgid "Remove all XML comments from output." -msgstr "" +msgstr "Remover todos os comentários XML na saída." #: ../share/extensions/scour.inx.h:26 -#, fuzzy msgid "Embed raster images" -msgstr "Embutir imagens" +msgstr "Embutir imagens raster" #: ../share/extensions/scour.inx.h:27 msgid "" "Resolve external references to raster images and embed them as Base64-" "encoded data URLs." msgstr "" +"Resolver as referências externas para imagens raster e incluí-las no " +"ficheiro como URL de dados codificados em Base64." #: ../share/extensions/scour.inx.h:28 -#, fuzzy msgid "Enable viewboxing" -msgstr "Pré-Visualizar Ao Vivo" +msgstr "Ativar viewBox" #: ../share/extensions/scour.inx.h:30 #, no-c-format @@ -40369,10 +38322,13 @@ msgid "" "Set page size to 100%/100% (full width and height of the display area) and " "introduce a viewBox specifying the drawings dimensions." msgstr "" +"Definir o tamanho da página como 100%/100% (largura e altura total da área " +"de visualização) e introduzir uma viewBox especificando as dimensões do " +"desenho." #: ../share/extensions/scour.inx.h:31 msgid "Format output with line-breaks and indentation" -msgstr "" +msgstr "Formatar saída com quebras de linha e identação" #: ../share/extensions/scour.inx.h:32 msgid "" @@ -40380,11 +38336,13 @@ msgid "" "to hand-edit the SVG file you can disable this option to bring down the file " "size even more at the cost of clarity." msgstr "" +"Produz uma saída bem formatada incluindo quebras de linha. Se não pretender " +"editar manualmente o ficheiro SVG, pode desativar esta opção para que o " +"ficheiro ocupe menos espaço em disco." #: ../share/extensions/scour.inx.h:33 -#, fuzzy msgid "Indentation characters:" -msgstr "Inserir caractere Unicode" +msgstr "Caractere de identação:" #: ../share/extensions/scour.inx.h:34 msgid "" @@ -40392,21 +38350,27 @@ msgid "" "Specify \"None\" to disable indentation. This option has no effect if " "\"Format output with line-breaks and indentation\" is disabled." msgstr "" +"O tipo de identação utilizada para cada nível de arredores (nesting) na " +"saída. Especificar \"Nenhuma\" para desativar a identação. Esta opção não " +"tem efeito se a opção \"Formatar saída com quebras de linha e identação\" " +"estiver desativada." #: ../share/extensions/scour.inx.h:35 -#, fuzzy msgid "Depth of indentation:" -msgstr "Função Vermelho" +msgstr "Profundidade da identação:" #: ../share/extensions/scour.inx.h:36 msgid "" "The depth of the chosen type of indentation. E.g. if you choose \"2\" every " "nesting level in the output will be indented by two additional spaces/tabs." msgstr "" +"A profundidade do tipo de identação escolhida. Por exemplo, se escolher " +"\"2\", todo o nível envolvente na saída será identado por 2 espaços/" +"tabulações adicionais." #: ../share/extensions/scour.inx.h:37 msgid "Strip the \"xml:space\" attribute from the root SVG element" -msgstr "" +msgstr "Retirar o atributo \"xml:space\" do elemento SVG raiz" #: ../share/extensions/scour.inx.h:38 msgid "" @@ -40414,54 +38378,52 @@ msgid "" "root SVG element which instructs the SVG editor not to change whitespace in " "the document at all (and therefore overrides the options above)." msgstr "" +"Isto é útil se o ficheiro de entrada especifica \"xml:space='preserve'\" no " +"elemento SVG raiz que instrui o editor SVG para não alterar o espaço em " +"branco no documento (e por isso sobrepõe-se às opções acima)." #: ../share/extensions/scour.inx.h:39 -#, fuzzy msgid "Document options" -msgstr "Propriedades do _Desenho..." +msgstr "Opções do documento" #: ../share/extensions/scour.inx.h:40 -#, fuzzy msgid "Pretty-printing" -msgstr "Pintura a Óleo" +msgstr "Impressão Organizada" # Tradução forçada... ao pé da letra... # - samymn #: ../share/extensions/scour.inx.h:41 -#, fuzzy msgid "Space" -msgstr "Dessalpicar" +msgstr "Espaço" #: ../share/extensions/scour.inx.h:42 -#, fuzzy msgid "Tab" -msgstr "Tabela" +msgstr "Tabulação" #: ../share/extensions/scour.inx.h:43 -#, fuzzy msgctxt "Indent" msgid "None" msgstr "Nenhum" #: ../share/extensions/scour.inx.h:44 -#, fuzzy msgid "IDs" -msgstr "ID" +msgstr "IDs" #: ../share/extensions/scour.inx.h:45 -#, fuzzy msgid "Remove unused IDs" -msgstr "Remover Vermelho" +msgstr "Remover IDs por usar" #: ../share/extensions/scour.inx.h:46 msgid "" "Remove all unreferenced IDs from elements. Those are not needed for " "rendering." msgstr "" +"Remover todos os identificadores (IDs) não referenciados dos elementos. " +"Estes não são necessários para renderizar." #: ../share/extensions/scour.inx.h:47 msgid "Shorten IDs" -msgstr "" +msgstr "Abreviar IDs" #: ../share/extensions/scour.inx.h:48 msgid "" @@ -40469,18 +38431,22 @@ msgid "" "shortest values to the most-referenced elements. For instance, " "\"linearGradient5621\" will become \"a\" if it is the most used element." msgstr "" +"Minimizar o comprimento dos IDs utilizando apenas letras minúsculas, " +"atribuindo os valores mais curtos aos elementos mais referenciados. Por " +"exemplo, \"degradeLinear5621\" torna-se apenas \"a\" se for o elementos mais " +"usado." #: ../share/extensions/scour.inx.h:49 msgid "Prefix shortened IDs with:" -msgstr "" +msgstr "Adicionar prefixo nos IDs abreviados com:" #: ../share/extensions/scour.inx.h:50 msgid "Prepend shortened IDs with the specified prefix." -msgstr "" +msgstr "Adiciona o prefixo definido aos IDs abreviados." #: ../share/extensions/scour.inx.h:51 msgid "Preserve manually created IDs not ending with digits" -msgstr "" +msgstr "Preservar IDs criados manualmente que não terminem com dígitos" #: ../share/extensions/scour.inx.h:52 msgid "" @@ -40489,115 +38455,110 @@ msgid "" "preserved while numbered IDs (as they are generated by most SVG editors " "including Inkscape) will be removed/shortened." msgstr "" +"IDs descritivos que foram criados manualmente para referir ou etiquetar " +"elementos específicos ou grupos (por exemplo #setaInicio, #setaFim or " +"#textoNome) serão mantidos enquanto os IDs numerados (como estes são gerados " +"pela maioria dos editores SVG incluindo o Inkscape) serão removidos ou " +"abreviados." #: ../share/extensions/scour.inx.h:53 msgid "Preserve the following IDs:" -msgstr "" +msgstr "Preservar os seguintes IDs:" #: ../share/extensions/scour.inx.h:54 msgid "A comma-separated list of IDs that are to be preserved." -msgstr "" +msgstr "Lista separada por vírgulas dos IDs que não devem ser alterados." #: ../share/extensions/scour.inx.h:55 msgid "Preserve IDs starting with:" -msgstr "" +msgstr "Preservar IDs que começam com:" #: ../share/extensions/scour.inx.h:56 msgid "" "Preserve all IDs that start with the specified prefix (e.g. specify \"flag\" " "to preserve \"flag-mx\", \"flag-pt\", etc.)." msgstr "" +"Preservar todos os IDs que comecem com o prefixo especificado (por exemplo, " +"especificar \"bandeira\" para preservar \"bandeira-en\", \"bandeira-pt\", " +"etc.)" #: ../share/extensions/scour.inx.h:57 -#, fuzzy msgid "Optimized SVG (*.svg)" -msgstr "Inkscape SVG (*.svg)" +msgstr "SVG otimizado (*.svg)" #: ../share/extensions/scour.inx.h:58 -#, fuzzy msgid "Scalable Vector Graphics" -msgstr "Gráfico Vectorial Escalável (*.svg)" +msgstr "Scalable Vector Graphics" #: ../share/extensions/seamless_pattern.inx.h:1 -#, fuzzy msgid "Seamless Pattern" -msgstr "Padrões" +msgstr "Padrão Contínuo" #: ../share/extensions/seamless_pattern.inx.h:2 #: ../share/extensions/seamless_pattern_procedural.inx.h:2 -#, fuzzy msgid "Custom Width (px):" -msgstr "Largura do traço" +msgstr "Largura Personalizada (px):" #: ../share/extensions/seamless_pattern.inx.h:3 #: ../share/extensions/seamless_pattern_procedural.inx.h:3 -#, fuzzy msgid "Custom Height (px):" -msgstr "Direitos:" +msgstr "Altura Personalizada (px):" #: ../share/extensions/seamless_pattern.inx.h:4 -#, fuzzy msgid "This extension overwrites the current document" -msgstr "Editar as paradas do degradê" +msgstr "Esta extensão grava por cima do documento atual" #: ../share/extensions/seamless_pattern_procedural.inx.h:1 msgid "Seamless Pattern Procedural" -msgstr "" +msgstr "Procedural de Padrão Repetido Suave" #: ../share/extensions/setup_typography_canvas.inx.h:1 msgid "1 - Setup Typography Canvas" -msgstr "" +msgstr "1 - Configurar Ãrea de Desenho de Tipografia" #: ../share/extensions/setup_typography_canvas.inx.h:2 -#, fuzzy msgid "Em-size:" -msgstr "Tamanho:" +msgstr "Tamanho Eme:" #: ../share/extensions/setup_typography_canvas.inx.h:3 -#, fuzzy msgid "Ascender:" -msgstr "Render" +msgstr "Ascendente:" #: ../share/extensions/setup_typography_canvas.inx.h:4 -#, fuzzy msgid "Caps Height:" -msgstr "Altura da Barra:" +msgstr "Altura das Maiúsculas:" #: ../share/extensions/setup_typography_canvas.inx.h:5 -#, fuzzy msgid "X-Height:" -msgstr "Altura:" +msgstr "Altura do X:" #: ../share/extensions/setup_typography_canvas.inx.h:6 -#, fuzzy msgid "Descender:" -msgstr "Dependência:" +msgstr "Descendente:" #: ../share/extensions/sk1_input.inx.h:1 msgid "sK1 vector graphics files input" -msgstr "" +msgstr "Importar ficheiros de gráficos vetoriais sK1" #: ../share/extensions/sk1_input.inx.h:2 ../share/extensions/sk1_output.inx.h:2 msgid "sK1 vector graphics files (*.sk1)" -msgstr "" +msgstr "sK1 ficheiros vetoriais gráficos (*.sk1)" #: ../share/extensions/sk1_input.inx.h:3 -#, fuzzy msgid "Open files saved in sK1 vector graphics editor" -msgstr "Inkscape Editor de Imagem Vectorial" +msgstr "Abrir ficheiros gravados no editor de gráficos vetoriais sK1" #: ../share/extensions/sk1_output.inx.h:1 msgid "sK1 vector graphics files output" -msgstr "" +msgstr "Exportar em ficheiros de gráficos vetoriais sK1" #: ../share/extensions/sk1_output.inx.h:3 -#, fuzzy msgid "File format for use in sK1 vector graphics editor" -msgstr "Inkscape Editor de Imagem Vectorial" +msgstr "Formato de ficheiro para usar no editor de gráficos vetoriais sK1" #: ../share/extensions/sk_input.inx.h:1 msgid "Sketch Input" -msgstr "Entrada Sketch" +msgstr "Importar Sketch" #: ../share/extensions/sk_input.inx.h:2 msgid "Sketch Diagram (*.sk)" @@ -40608,115 +38569,103 @@ msgid "A diagram created with the program Sketch" msgstr "Um diagrama criado com o programa Sketch" #: ../share/extensions/spirograph.inx.h:1 -#, fuzzy msgid "Spirograph" -msgstr "Espiral" +msgstr "Espirógrafo" #: ../share/extensions/spirograph.inx.h:2 msgid "R - Ring Radius (px):" -msgstr "" +msgstr "R - Raio do Anel (px):" #: ../share/extensions/spirograph.inx.h:3 msgid "r - Gear Radius (px):" -msgstr "" +msgstr "r - Raio da Engrenagem (px):" #: ../share/extensions/spirograph.inx.h:4 msgid "d - Pen Radius (px):" -msgstr "" +msgstr "d - Raio da Caneta (px):" #: ../share/extensions/spirograph.inx.h:5 -#, fuzzy msgid "Gear Placement:" -msgstr "Novo nó elementar" +msgstr "Posicionamento da Engrenagem:" #: ../share/extensions/spirograph.inx.h:6 msgid "Inside (Hypotrochoid)" -msgstr "" +msgstr "Dentro (hipotrocoide)" #: ../share/extensions/spirograph.inx.h:7 msgid "Outside (Epitrochoid)" -msgstr "" +msgstr "Fora (Epitrocoide)" #: ../share/extensions/spirograph.inx.h:9 -#, fuzzy msgid "Quality (Default = 16):" -msgstr "Qualidade (Padrão = 16)" +msgstr "Qualidade (Padrão = 16):" #: ../share/extensions/split.inx.h:1 -#, fuzzy msgid "Split text" -msgstr "Eliminar texto" +msgstr "Separar texto" #: ../share/extensions/split.inx.h:3 msgid "Split:" -msgstr "" +msgstr "Separar:" #: ../share/extensions/split.inx.h:4 msgid "Preserve original text" -msgstr "" +msgstr "Preservar texto original" #: ../share/extensions/split.inx.h:5 -#, fuzzy msgctxt "split" msgid "Lines" -msgstr "Linha" +msgstr "Linhas" #: ../share/extensions/split.inx.h:6 -#, fuzzy msgctxt "split" msgid "Words" -msgstr "Modo:" +msgstr "Palavras" #: ../share/extensions/split.inx.h:7 -#, fuzzy msgctxt "split" msgid "Letters" -msgstr "Comprimento:" +msgstr "Letras" #: ../share/extensions/split.inx.h:9 msgid "This effect splits texts into different lines, words or letters." -msgstr "" +msgstr "Este efeito separa os textos em diferentes linhas, palavras ou letras." #: ../share/extensions/straightseg.inx.h:1 -#, fuzzy msgid "Straighten Segments" msgstr "Endireitar Segmentos" #: ../share/extensions/straightseg.inx.h:2 -#, fuzzy msgid "Percent:" -msgstr "Percentual" +msgstr "Percentagem:" #: ../share/extensions/straightseg.inx.h:3 -#, fuzzy msgid "Behavior:" -msgstr "Comportamento" +msgstr "Comportamento:" #: ../share/extensions/summersnight.inx.h:1 msgid "Envelope" msgstr "Envelope" #: ../share/extensions/svg2fxg.inx.h:1 -#, fuzzy msgid "FXG Output" -msgstr "Saída SVG" +msgstr "Exportar em FXG" #: ../share/extensions/svg2fxg.inx.h:2 -#, fuzzy msgid "Flash XML Graphics (*.fxg)" -msgstr "Ficheiro XFIG Graphics (*.fig)" +msgstr "Flash XML Graphics (*.fxg)" #: ../share/extensions/svg2fxg.inx.h:3 msgid "Adobe's XML Graphics file format" -msgstr "" +msgstr "Ficheiro no formato XML Graphics da Adobe" #: ../share/extensions/svg2xaml.inx.h:1 msgid "XAML Output" -msgstr "Saída XAML" +msgstr "Exportar em XAML" #: ../share/extensions/svg2xaml.inx.h:2 msgid "Silverlight compatible XAML" -msgstr "" +msgstr "XAML compatível com o Silverlight" #: ../share/extensions/svg2xaml.inx.h:3 ../share/extensions/xaml2svg.inx.h:2 msgid "Microsoft XAML (*.xaml)" @@ -40727,25 +38676,20 @@ msgid "Microsoft's GUI definition format" msgstr "Definição de formato GUI da Microsoft" #: ../share/extensions/svg_and_media_zip_output.inx.h:1 -#, fuzzy msgid "Compressed Inkscape SVG with media export" -msgstr "Inkscape SVG compactado com mídia (*.zip)" +msgstr "SVG Inkscape compactado com mídia" #: ../share/extensions/svg_and_media_zip_output.inx.h:2 -#, fuzzy msgid "Image zip directory:" -msgstr "" -"%s não é uma pasta válida.\n" -"%s" +msgstr "Pasta de imagens ZIP:" #: ../share/extensions/svg_and_media_zip_output.inx.h:3 -#, fuzzy msgid "Add font list" -msgstr "Adicionar filtro" +msgstr "Adicionar lista de fontes" #: ../share/extensions/svg_and_media_zip_output.inx.h:4 msgid "Compressed Inkscape SVG with media (*.zip)" -msgstr "Inkscape SVG compactado com mídia (*.zip)" +msgstr "SVG Inkscape compactado com mídia (*.zip)" #: ../share/extensions/svg_and_media_zip_output.inx.h:5 msgid "" @@ -40756,258 +38700,231 @@ msgstr "" "de mídia" #: ../share/extensions/svgcalendar.inx.h:1 -#, fuzzy msgid "Calendar" -msgstr "_Limpar" +msgstr "Calendário" #: ../share/extensions/svgcalendar.inx.h:3 msgid "Year (4 digits):" -msgstr "" +msgstr "Ano (4 dígitos):" #: ../share/extensions/svgcalendar.inx.h:4 msgid "Month (0 for all):" -msgstr "" +msgstr "Mês (0 para todos):" #: ../share/extensions/svgcalendar.inx.h:5 msgid "Fill empty day boxes with next month's days" -msgstr "" +msgstr "Preencher as caixas de dias em branco com os meses do mês seguinte" #: ../share/extensions/svgcalendar.inx.h:6 -#, fuzzy msgid "Show week number" -msgstr "Ângulo da caneta" +msgstr "Mostrar número da semana" #: ../share/extensions/svgcalendar.inx.h:7 -#, fuzzy msgid "Week start day:" -msgstr "começa no meio do caminho" +msgstr "Dia de início da semana:" #: ../share/extensions/svgcalendar.inx.h:8 -#, fuzzy msgid "Weekend:" -msgstr "Velocidade:" +msgstr "Fim de semana:" #: ../share/extensions/svgcalendar.inx.h:9 -#, fuzzy msgid "Sunday" -msgstr "Encaixe" +msgstr "Domingo" #: ../share/extensions/svgcalendar.inx.h:10 -#, fuzzy msgid "Monday" -msgstr "Modo" +msgstr "Segunda-feira" #: ../share/extensions/svgcalendar.inx.h:11 msgid "Saturday and Sunday" -msgstr "" +msgstr "Sábado e Domingo" #: ../share/extensions/svgcalendar.inx.h:12 -#, fuzzy msgid "Saturday" -msgstr "Saturar" +msgstr "Sábado" #: ../share/extensions/svgcalendar.inx.h:14 msgid "Automatically set size and position" -msgstr "" +msgstr "Definir tamanho e posição automaticamente" #: ../share/extensions/svgcalendar.inx.h:15 -#, fuzzy msgid "Months per line:" -msgstr "Centralizar linhas" +msgstr "Meses por linha:" #: ../share/extensions/svgcalendar.inx.h:16 -#, fuzzy msgid "Month Width:" -msgstr "Largura da caneta" +msgstr "Largura do Mês:" #: ../share/extensions/svgcalendar.inx.h:17 -#, fuzzy msgid "Month Margin:" -msgstr "Soltar cor" +msgstr "Margem do Mês:" #: ../share/extensions/svgcalendar.inx.h:18 msgid "The options below have no influence when the above is checked." -msgstr "" +msgstr "As opções abaixo não têm influência quando estiver ativado acima." #: ../share/extensions/svgcalendar.inx.h:20 -#, fuzzy msgid "Year color:" -msgstr "Soltar cor" +msgstr "Cor do ano:" #: ../share/extensions/svgcalendar.inx.h:21 -#, fuzzy msgid "Month color:" -msgstr "Soltar cor" +msgstr "Cor do mês:" #: ../share/extensions/svgcalendar.inx.h:22 -#, fuzzy msgid "Weekday name color:" -msgstr "Ajustar a cor escolhida" +msgstr "Cor do nome do dia da semana:" #: ../share/extensions/svgcalendar.inx.h:23 -#, fuzzy msgid "Day color:" -msgstr "Soltar cor" +msgstr "Cor do dia:" #: ../share/extensions/svgcalendar.inx.h:24 -#, fuzzy msgid "Weekend day color:" -msgstr "Ajustar a cor escolhida" +msgstr "Cor dos dias do fim de semana:" #: ../share/extensions/svgcalendar.inx.h:25 -#, fuzzy msgid "Next month day color:" -msgstr "Ajustar a cor escolhida" +msgstr "Cor do dia do mês seguinte:" #: ../share/extensions/svgcalendar.inx.h:26 -#, fuzzy msgid "Week number color:" -msgstr "Ajustar a cor escolhida" +msgstr "Cor do número da semana:" #: ../share/extensions/svgcalendar.inx.h:27 -#, fuzzy msgid "Localization" msgstr "Localização" #: ../share/extensions/svgcalendar.inx.h:28 -#, fuzzy msgid "Month names:" -msgstr "Não nomeado" +msgstr "Nomes dos meses:" #: ../share/extensions/svgcalendar.inx.h:29 -#, fuzzy msgid "Day names:" -msgstr "Nome da camada:" +msgstr "Nomes dos dias:" #: ../share/extensions/svgcalendar.inx.h:30 -#, fuzzy msgid "Week number column name:" -msgstr "Número de colunas" +msgstr "Nome da coluna do número da semana:" #: ../share/extensions/svgcalendar.inx.h:31 -#, fuzzy msgid "Char Encoding:" -msgstr "Alterar arredondamento" +msgstr "Codificação de Caracteres:" #: ../share/extensions/svgcalendar.inx.h:32 msgid "You may change the names for other languages:" -msgstr "" +msgstr "Pode alterar os nomes para outras línguas:" #: ../share/extensions/svgcalendar.inx.h:33 msgid "" "January February March April May June July August September October November " "December" msgstr "" +"Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro " +"Novembro Dezembro" #: ../share/extensions/svgcalendar.inx.h:34 msgid "Sun Mon Tue Wed Thu Fri Sat" -msgstr "" +msgstr "Seg Ter Qua Qui Sex Sáb Dom" #: ../share/extensions/svgcalendar.inx.h:35 msgid "The day names list must start from Sunday." -msgstr "" +msgstr "A lista de dias da semanda tem de começar no Domingo." #: ../share/extensions/svgcalendar.inx.h:36 msgid "Wk" -msgstr "" +msgstr "Sem" #: ../share/extensions/svgcalendar.inx.h:37 msgid "" "Select your system encoding. More information at http://docs.python.org/" "library/codecs.html#standard-encodings." msgstr "" +"Selecionar a codificação do seu sistema. Mais informações em http://docs." +"python.org/library/codecs.html#standard-encodings" #: ../share/extensions/svgfont2layers.inx.h:1 -#, fuzzy msgid "Convert SVG Font to Glyph Layers" -msgstr "Inverter em Todas Camadas" +msgstr "Converter Fonte SVG em Camadas de Caracteres" #: ../share/extensions/svgfont2layers.inx.h:2 msgid "Load only the first 30 glyphs (Recommended)" -msgstr "" +msgstr "Carregar apenas os primeiros 30 caracteres (recomendado)" #: ../share/extensions/synfig_output.inx.h:1 -#, fuzzy msgid "Synfig Output" -msgstr "Saída SVG" +msgstr "Exportar em Synfig" #: ../share/extensions/synfig_output.inx.h:2 msgid "Synfig Animation (*.sif)" -msgstr "" +msgstr "Synfig - Animação (*.sif)" #: ../share/extensions/synfig_output.inx.h:3 msgid "Synfig Animation written using the sif-file exporter extension" -msgstr "" +msgstr "Animação Synfig gravada com a extensão de exportar sif-file" #: ../share/extensions/tar_layers.inx.h:1 msgid "Collection of SVG files One per root layer" -msgstr "" +msgstr "Coleção de ficheiros SVG, um por cada camada raiz" #: ../share/extensions/tar_layers.inx.h:2 msgid "Layers as Separate SVG (*.tar)" -msgstr "" +msgstr "Camadas em SVG separados (*.tar)" #: ../share/extensions/tar_layers.inx.h:3 msgid "" "Each layer split into it's own svg file and collected as a tape archive (tar " "file)" msgstr "" +"Cada camada é separada num ficheiro SVG, sendo os ficheiros resultantes " +"gravados num só ficheiro TAR" #: ../share/extensions/text_braille.inx.h:1 -#, fuzzy msgid "Convert to Braille" -msgstr "Converter para Texto" +msgstr "Converter para Braile" #: ../share/extensions/text_extract.inx.h:1 -#, fuzzy msgid "Extract" -msgstr "Extrair Uma Imagem" +msgstr "Extrair" #: ../share/extensions/text_extract.inx.h:2 #: ../share/extensions/text_merge.inx.h:2 -#, fuzzy msgid "Text direction:" -msgstr "Aumentar espaçamento entre linhas" +msgstr "Direção do texto:" #: ../share/extensions/text_extract.inx.h:3 #: ../share/extensions/text_merge.inx.h:3 -#, fuzzy msgid "Left to right" -msgstr "Unidade de Comprimento:" +msgstr "Esquerda para a direita" #: ../share/extensions/text_extract.inx.h:4 #: ../share/extensions/text_merge.inx.h:4 -#, fuzzy msgid "Bottom to top" -msgstr "Quebrar caminho" +msgstr "Baixo para cima" #: ../share/extensions/text_extract.inx.h:5 #: ../share/extensions/text_merge.inx.h:5 -#, fuzzy msgid "Right to left" -msgstr "Ângulo direito" +msgstr "Direita para a esquerda" #: ../share/extensions/text_extract.inx.h:6 #: ../share/extensions/text_merge.inx.h:6 -#, fuzzy msgid "Top to bottom" -msgstr "A_baixar até o Fundo" +msgstr "Cima para baixo" #: ../share/extensions/text_extract.inx.h:7 #: ../share/extensions/text_merge.inx.h:7 -#, fuzzy msgid "Horizontal point:" -msgstr "Texto horizontal" +msgstr "Ponto horizontal:" #: ../share/extensions/text_extract.inx.h:11 #: ../share/extensions/text_merge.inx.h:11 -#, fuzzy msgid "Vertical point:" -msgstr "Texto vertical" +msgstr "Ponto vertical:" #: ../share/extensions/text_flipcase.inx.h:1 msgid "fLIP cASE" -msgstr "iNVERTER tAMANHO dE lETRA" +msgstr "iNVERTER cAIXAS" #: ../share/extensions/text_flipcase.inx.h:3 #: ../share/extensions/text_lowercase.inx.h:3 @@ -41015,9 +38932,8 @@ msgstr "iNVERTER tAMANHO dE lETRA" #: ../share/extensions/text_sentencecase.inx.h:3 #: ../share/extensions/text_titlecase.inx.h:3 #: ../share/extensions/text_uppercase.inx.h:3 -#, fuzzy msgid "Change Case" -msgstr "Mudar manualmente" +msgstr "Alterar Caixa" #: ../share/extensions/text_lowercase.inx.h:1 msgid "lowercase" @@ -41025,285 +38941,254 @@ msgstr "caixa baixa" #. false #: ../share/extensions/text_merge.inx.h:15 -#, fuzzy msgid "Keep style" -msgstr "Definir estilo do texto" +msgstr "Manter estilo" #: ../share/extensions/text_randomcase.inx.h:1 msgid "rANdOm CasE" -msgstr "tAMaNhO De LeTra aLeATÓrIO" +msgstr "cAIxa alEAtÓRiA" #: ../share/extensions/text_sentencecase.inx.h:1 msgid "Sentence case" -msgstr "Tamanho de Letra da Sentença" +msgstr "Caixa de frase" #: ../share/extensions/text_titlecase.inx.h:1 msgid "Title Case" -msgstr "Tamanho de Letra do Título" +msgstr "Caixa de Título" #: ../share/extensions/text_uppercase.inx.h:1 msgid "UPPERCASE" msgstr "CAIXA ALTA" #: ../share/extensions/triangle.inx.h:1 -#, fuzzy msgid "Triangle" -msgstr "Único" +msgstr "Triângulo" #: ../share/extensions/triangle.inx.h:2 -#, fuzzy msgid "Side Length a (px):" -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do Lado a (px):" #: ../share/extensions/triangle.inx.h:3 -#, fuzzy msgid "Side Length b (px):" -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do Lado b (px):" #: ../share/extensions/triangle.inx.h:4 -#, fuzzy msgid "Side Length c (px):" -msgstr "Tamanho do passo (px)" +msgstr "Comprimento do Lado c (px):" #: ../share/extensions/triangle.inx.h:5 -#, fuzzy msgid "Angle a (deg):" -msgstr "graus" +msgstr "Ângulo a (graus):" #: ../share/extensions/triangle.inx.h:6 -#, fuzzy msgid "Angle b (deg):" -msgstr "graus" +msgstr "Ângulo b (graus):" #: ../share/extensions/triangle.inx.h:7 -#, fuzzy msgid "Angle c (deg):" -msgstr "graus" +msgstr "Ângulo c (graus):" #: ../share/extensions/triangle.inx.h:9 msgid "From Three Sides" -msgstr "" +msgstr "Dos Três Lados" #: ../share/extensions/triangle.inx.h:10 msgid "From Sides a, b and Angle c" -msgstr "" +msgstr "Dos Lados a, b e Ângulo c" #: ../share/extensions/triangle.inx.h:11 msgid "From Sides a, b and Angle a" -msgstr "" +msgstr "Dos Lados a, b e Ângulo a" #: ../share/extensions/triangle.inx.h:12 msgid "From Side a and Angles a, b" -msgstr "" +msgstr "Do Lado a e Ângulos a, b" #: ../share/extensions/triangle.inx.h:13 msgid "From Side c and Angles a, b" -msgstr "" +msgstr "Do Lado c e Ângulos a, b" #: ../share/extensions/ungroup_deep.inx.h:1 -#, fuzzy msgid "Deep Ungroup" -msgstr "Desagrupar" +msgstr "Desagrupar em Profundidade" #: ../share/extensions/ungroup_deep.inx.h:2 -#, fuzzy msgid "Ungroup all groups in the selected object." -msgstr "" -"Criar um clone dos objectos seleccionados (uma cópia ligada ao original)" +msgstr "Desagrupar todos os grupos no objeto selecionado." #: ../share/extensions/ungroup_deep.inx.h:3 -#, fuzzy msgid "Starting Depth" -msgstr "Pontilhar peças" +msgstr "Profundidade Inicial" #: ../share/extensions/ungroup_deep.inx.h:4 -#, fuzzy msgid "Stopping Depth (from top)" -msgstr "Remover clip ao caminho da selecção" +msgstr "Profundidade Final (a partir do topo)" #: ../share/extensions/ungroup_deep.inx.h:5 msgid "Depth to Keep (from bottom)" -msgstr "" +msgstr "Profundidade a Manter (a partir do fundo)" #: ../share/extensions/voronoi2svg.inx.h:1 -#, fuzzy msgid "Voronoi Diagram" -msgstr "Padrões" +msgstr "Diagrama Voronoi" #: ../share/extensions/voronoi2svg.inx.h:3 msgid "Type of diagram:" -msgstr "" +msgstr "Tipo de diagrama:" #: ../share/extensions/voronoi2svg.inx.h:4 -#, fuzzy msgid "Bounding box of the diagram:" -msgstr "Ajustar caixas limitadoras às g_uias" +msgstr "Caixa limitadora do diagrama:" #: ../share/extensions/voronoi2svg.inx.h:5 -#, fuzzy msgid "Show the bounding box" -msgstr "Margem oposta da caixa de limites" +msgstr "Mostrar caixa limitadora" #: ../share/extensions/voronoi2svg.inx.h:6 -#, fuzzy msgid "Triangles color" -msgstr "Único" +msgstr "Cor dos triângulos" #: ../share/extensions/voronoi2svg.inx.h:7 -#, fuzzy msgid "Delaunay Triangulation" -msgstr "Negar convite" +msgstr "Triangulação de Delaunay" #: ../share/extensions/voronoi2svg.inx.h:8 -#, fuzzy msgid "Voronoi and Delaunay" -msgstr "Padrões" +msgstr "Voronoi e Delaunay" #: ../share/extensions/voronoi2svg.inx.h:9 msgid "Options for Voronoi diagram" -msgstr "" +msgstr "Opções para o diagrama Voronoi" #: ../share/extensions/voronoi2svg.inx.h:11 -#, fuzzy msgid "Automatic from selected objects" -msgstr "Agrupar os objectos seleccionados" +msgstr "Automático a partir dos objetos selecionados" #: ../share/extensions/voronoi2svg.inx.h:12 -#, fuzzy msgid "Options for Delaunay Triangulation" -msgstr "Negar convite" +msgstr "Opções para a Triangulação de Delaunay" #: ../share/extensions/voronoi2svg.inx.h:13 msgid "Default (Stroke black and no fill)" -msgstr "" +msgstr "Padrão (Traço a preto e sem preenchimento)" #: ../share/extensions/voronoi2svg.inx.h:14 -#, fuzzy msgid "Triangles with item color" -msgstr "Alterar cor da parada do degradê" +msgstr "Triângulos com cor do item" #: ../share/extensions/voronoi2svg.inx.h:15 msgid "Triangles with item color (random on apply)" -msgstr "" +msgstr "Triângulos com cor do item (aleatório ao aplicar)" #: ../share/extensions/voronoi2svg.inx.h:17 msgid "" "Select a set of objects. Their centroids will be used as the sites of the " "Voronoi diagram. Text objects are not handled." msgstr "" +"Selecionar um conjunto de objetos. Os seus centróides serão usados como " +"localizações do diagrama Voronoi. Os objetos de texto não são utilizados." #: ../share/extensions/web-set-att.inx.h:1 -#, fuzzy msgid "Set Attributes" -msgstr "Ajustar atributo" +msgstr "Aplicar Atributos" #: ../share/extensions/web-set-att.inx.h:3 -#, fuzzy msgid "Attribute to set:" -msgstr "Nome do atributo" +msgstr "Atributo a aplicar:" #: ../share/extensions/web-set-att.inx.h:4 msgid "When should the set be done:" -msgstr "" +msgstr "Quando a aplicação deve ser feita:" #: ../share/extensions/web-set-att.inx.h:5 -#, fuzzy msgid "Value to set:" -msgstr "Valore(s)" +msgstr "Valor a aplicar:" #: ../share/extensions/web-set-att.inx.h:6 #: ../share/extensions/web-transmit-att.inx.h:5 msgid "Compatibility with previews code to this event:" -msgstr "" +msgstr "Compatibilidade com código de prever com este evento:" #: ../share/extensions/web-set-att.inx.h:7 msgid "Source and destination of setting:" -msgstr "" +msgstr "Fonte e destino da aplicação:" #: ../share/extensions/web-set-att.inx.h:8 #: ../share/extensions/web-transmit-att.inx.h:7 msgid "on click" -msgstr "" +msgstr "ao clicar" #: ../share/extensions/web-set-att.inx.h:9 #: ../share/extensions/web-transmit-att.inx.h:8 msgid "on focus" -msgstr "" +msgstr "em foco" #: ../share/extensions/web-set-att.inx.h:10 #: ../share/extensions/web-transmit-att.inx.h:9 -#, fuzzy msgid "on blur" -msgstr "Alterar desfoque" +msgstr "ao desfocar" #: ../share/extensions/web-set-att.inx.h:11 #: ../share/extensions/web-transmit-att.inx.h:10 -#, fuzzy msgid "on activate" -msgstr "Desativado" +msgstr "ao ativar" #: ../share/extensions/web-set-att.inx.h:12 #: ../share/extensions/web-transmit-att.inx.h:11 msgid "on mouse down" -msgstr "" +msgstr "ao clicar para baixo" #: ../share/extensions/web-set-att.inx.h:13 #: ../share/extensions/web-transmit-att.inx.h:12 msgid "on mouse up" -msgstr "" +msgstr "ao soltar clique" #: ../share/extensions/web-set-att.inx.h:14 #: ../share/extensions/web-transmit-att.inx.h:13 msgid "on mouse over" -msgstr "" +msgstr "com cursor por cima" #: ../share/extensions/web-set-att.inx.h:15 #: ../share/extensions/web-transmit-att.inx.h:14 msgid "on mouse move" -msgstr "" +msgstr "com cursor a mover" #: ../share/extensions/web-set-att.inx.h:16 #: ../share/extensions/web-transmit-att.inx.h:15 -#, fuzzy msgid "on mouse out" -msgstr "Ampliar ou Reduzir nível de zoom" +msgstr "com cursor a sair" #: ../share/extensions/web-set-att.inx.h:17 #: ../share/extensions/web-transmit-att.inx.h:16 -#, fuzzy msgid "on element loaded" -msgstr "Novo nó elementar" +msgstr "ao carregar elemento" #: ../share/extensions/web-set-att.inx.h:18 msgid "The list of values must have the same size as the attributes list." -msgstr "" +msgstr "A lista de valores deve ter o mesmo tamanho da lista de atributos." #: ../share/extensions/web-set-att.inx.h:19 #: ../share/extensions/web-transmit-att.inx.h:17 msgid "Run it after" -msgstr "" +msgstr "Efetuá-lo depois" #: ../share/extensions/web-set-att.inx.h:20 #: ../share/extensions/web-transmit-att.inx.h:18 msgid "Run it before" -msgstr "" +msgstr "Efetuá-lo antes" #: ../share/extensions/web-set-att.inx.h:22 #: ../share/extensions/web-transmit-att.inx.h:20 msgid "The next parameter is useful when you select more than two elements" -msgstr "" +msgstr "O próximo parâmetro é útil quando seleciona mais do que 2 elementos" #: ../share/extensions/web-set-att.inx.h:23 -#, fuzzy msgid "All selected ones set an attribute in the last one" -msgstr "" -"Cada objecto seleccionado tem um marca de diamante no canto esquerdo superior" +msgstr "Todos os selecionados aplicam um atributo no último" #: ../share/extensions/web-set-att.inx.h:24 -#, fuzzy msgid "The first selected sets an attribute in all others" -msgstr "" -"Cada objecto seleccionado tem um marca de diamante no canto esquerdo superior" +msgstr "O primeiro selecionado aplica um atributo em todos os outros" #: ../share/extensions/web-set-att.inx.h:26 #: ../share/extensions/web-transmit-att.inx.h:24 @@ -41311,18 +39196,24 @@ msgid "" "This effect adds a feature visible (or usable) only on a SVG enabled web " "browser (like Firefox)." msgstr "" +"Este efeito adiciona uma funcionalidade visível (ou usável) apenas num " +"navegador de internet que suporte SVG (como o Firefox)" #: ../share/extensions/web-set-att.inx.h:27 msgid "" "This effect sets one or more attributes in the second selected element, when " "a defined event occurs on the first selected element." msgstr "" +"Este efeito aplica 1 ou mais atributos do segundo elemento selecionado " +"quando 1 evento definido ocorre no primeiro elemento selecionado." #: ../share/extensions/web-set-att.inx.h:28 msgid "" "If you want to set more than one attribute, you must separate this with a " "space, and only with a space." msgstr "" +"Quando quiser aplicar mais do que 1 atributo, deve separar isto num espaço e " +"apenas com um espaço." #: ../share/extensions/web-set-att.inx.h:29 #: ../share/extensions/web-transmit-att.inx.h:27 @@ -41330,315 +39221,291 @@ msgstr "" #: ../share/extensions/webslicer_create_rect.inx.h:41 #: ../share/extensions/webslicer_export.inx.h:8 msgid "Web" -msgstr "" +msgstr "Web" #: ../share/extensions/web-transmit-att.inx.h:1 -#, fuzzy msgid "Transmit Attributes" -msgstr "Ajustar atributo" +msgstr "Transmitir Atributos" #: ../share/extensions/web-transmit-att.inx.h:3 -#, fuzzy msgid "Attribute to transmit:" -msgstr "Nome do atributo" +msgstr "Atributo a transmitir:" #: ../share/extensions/web-transmit-att.inx.h:4 -#, fuzzy msgid "When to transmit:" -msgstr "Ajustar Kern para a direita" +msgstr "Quando transmitir:" #: ../share/extensions/web-transmit-att.inx.h:6 msgid "Source and destination of transmitting:" -msgstr "" +msgstr "Fonte e destino da transmissão:" #: ../share/extensions/web-transmit-att.inx.h:21 -#, fuzzy msgid "All selected ones transmit to the last one" -msgstr "Objectos seleccionados possuem o mesmo traço" +msgstr "Todos os selecionados trasmitem para o último" #: ../share/extensions/web-transmit-att.inx.h:22 msgid "The first selected transmits to all others" -msgstr "" +msgstr "O primeiro selecionado transmite para todos os outros" #: ../share/extensions/web-transmit-att.inx.h:25 msgid "" "This effect transmits one or more attributes from the first selected element " "to the second when an event occurs." msgstr "" +"Este efeito transmite 1 ou mais atributos do primeiro elemento selecionado " +"para o segundo quando ocorre um evento." #: ../share/extensions/web-transmit-att.inx.h:26 msgid "" "If you want to transmit more than one attribute, you should separate this " "with a space, and only with a space." msgstr "" +"Quando quiser transmitir mais do que 1 atributo, deve separar isto com um " +"espaço e apenas com um espaço." #: ../share/extensions/webslicer_create_group.inx.h:1 msgid "Set a layout group" -msgstr "" +msgstr "Definir um grupo de laioute" #: ../share/extensions/webslicer_create_group.inx.h:3 #: ../share/extensions/webslicer_create_rect.inx.h:18 -#, fuzzy msgid "HTML id attribute:" -msgstr "Ajustar atributo" +msgstr "Atributo id HTML:" #: ../share/extensions/webslicer_create_group.inx.h:4 #: ../share/extensions/webslicer_create_rect.inx.h:19 -#, fuzzy msgid "HTML class attribute:" -msgstr "Ajustar atributo" +msgstr "Atributo classe HTML:" #: ../share/extensions/webslicer_create_group.inx.h:5 -#, fuzzy msgid "Width unit:" -msgstr "Largura" +msgstr "Unidade de largura:" #: ../share/extensions/webslicer_create_group.inx.h:6 -#, fuzzy msgid "Height unit:" -msgstr "Altura:" +msgstr "Unidade de altura:" #: ../share/extensions/webslicer_create_group.inx.h:7 #: ../share/extensions/webslicer_create_rect.inx.h:9 -#, fuzzy msgid "Background color:" -msgstr "Cor de plano de fundo" +msgstr "Cor do fundo:" #: ../share/extensions/webslicer_create_group.inx.h:8 msgid "Pixel (fixed)" -msgstr "" +msgstr "Píxel (fixo)" #: ../share/extensions/webslicer_create_group.inx.h:9 -#, fuzzy msgid "Percent (relative to parent size)" -msgstr "Escala de largura relativa" +msgstr "Percentagem (relativo ao tamanho pai)" #: ../share/extensions/webslicer_create_group.inx.h:10 msgid "Undefined (relative to non-floating content size)" -msgstr "" +msgstr "Não definido (relativo ao tamanho do conteúdo não flutuante)" #: ../share/extensions/webslicer_create_group.inx.h:12 msgid "" "Layout Group is only about to help a better code generation (if you need " "it). To use this, you must to select some \"Slicer rectangles\" first." msgstr "" +"Grupo de Laioute ajuda a gerar um código melhor (se necessitar). Para usar " +"isto, é necessário selecionar alguns \"Retângulos de fatiar\" primeiro." #: ../share/extensions/webslicer_create_group.inx.h:14 -#, fuzzy msgid "Slicer" -msgstr "Padrão" +msgstr "Fatias" #: ../share/extensions/webslicer_create_rect.inx.h:1 -#, fuzzy msgid "Create a slicer rectangle" -msgstr "Criar retângulo" +msgstr "Criar retângulo de fatias" #: ../share/extensions/webslicer_create_rect.inx.h:4 -#, fuzzy msgid "DPI:" -msgstr "DPI" +msgstr "DPI:" #: ../share/extensions/webslicer_create_rect.inx.h:5 -#, fuzzy msgid "Force Dimension:" -msgstr "Divisão" +msgstr "Forçar Dimensão:" #. i18n. Description duplicated in a fake value attribute in order to make it translatable #: ../share/extensions/webslicer_create_rect.inx.h:7 msgid "Force Dimension must be set as x" -msgstr "" +msgstr "O Forçar Dimensão deve ser definido como x" #: ../share/extensions/webslicer_create_rect.inx.h:8 msgid "If set, this will replace DPI." -msgstr "" +msgstr "Se definido, isto irá substituir o DPI." #: ../share/extensions/webslicer_create_rect.inx.h:10 -#, fuzzy msgid "JPG specific options" -msgstr "Especificação do SVG 1.1" +msgstr "Opções específicas do JPG" #: ../share/extensions/webslicer_create_rect.inx.h:11 -#, fuzzy msgid "Quality:" -msgstr "_Sair" +msgstr "Qualidade:" #: ../share/extensions/webslicer_create_rect.inx.h:12 msgid "" "0 is the lowest image quality and highest compression, and 100 is the best " "quality but least effective compression" msgstr "" +"0 é a qualidade mínima com o máximo de compressão; 100 é a qualidade máxima " +"mas com menos compressão" #: ../share/extensions/webslicer_create_rect.inx.h:13 -#, fuzzy msgid "GIF specific options" -msgstr "Especificação do SVG 1.1" +msgstr "Opções específicas do GIF" #: ../share/extensions/webslicer_create_rect.inx.h:16 -#, fuzzy msgid "Palette" -msgstr "_Paleta" +msgstr "Paleta" #: ../share/extensions/webslicer_create_rect.inx.h:17 -#, fuzzy msgid "Palette size:" -msgstr "Colar tamanho" +msgstr "Tamanho da paleta:" #: ../share/extensions/webslicer_create_rect.inx.h:20 msgid "Options for HTML export" -msgstr "" +msgstr "Opções para exportação HTML" #: ../share/extensions/webslicer_create_rect.inx.h:21 -#, fuzzy msgid "Layout disposition:" -msgstr "Posição Aleatória" +msgstr "Disposição do laioute:" #: ../share/extensions/webslicer_create_rect.inx.h:22 msgid "Positioned html block element with the image as Background" -msgstr "" +msgstr "Elemento bloco HTML posicionado na imagem como Fundo" #: ../share/extensions/webslicer_create_rect.inx.h:23 msgid "Tiled Background (on parent group)" -msgstr "" +msgstr "Fundo Ladrilhado (no grupo pai)" #: ../share/extensions/webslicer_create_rect.inx.h:24 msgid "Background — repeat horizontally (on parent group)" -msgstr "" +msgstr "Fundo — repetir horizontalmente (no grupo pai)" #: ../share/extensions/webslicer_create_rect.inx.h:25 msgid "Background — repeat vertically (on parent group)" -msgstr "" +msgstr "Fundo — repetir verticalmente (no grupo pai)" #: ../share/extensions/webslicer_create_rect.inx.h:26 msgid "Background — no repeat (on parent group)" -msgstr "" +msgstr "Fundo — sem repetir (no grupo pai)" #: ../share/extensions/webslicer_create_rect.inx.h:27 -#, fuzzy msgid "Positioned Image" -msgstr "Posição:" +msgstr "Imagem Posicionada" #: ../share/extensions/webslicer_create_rect.inx.h:28 -#, fuzzy msgid "Non Positioned Image" -msgstr "Rotação (graus)" +msgstr "Imagem Não-Posicionada" #: ../share/extensions/webslicer_create_rect.inx.h:29 msgid "Left Floated Image" -msgstr "" +msgstr "Imagem Flutuante à Esquerda" #: ../share/extensions/webslicer_create_rect.inx.h:30 -#, fuzzy msgid "Right Floated Image" -msgstr "Ângulo direito" +msgstr "Imagem Flutuante à Direita" #: ../share/extensions/webslicer_create_rect.inx.h:31 -#, fuzzy msgid "Position anchor:" -msgstr "Posição:" +msgstr "Âncora de posicionamento:" #: ../share/extensions/webslicer_create_rect.inx.h:32 -#, fuzzy msgid "Top and Left" -msgstr "Quebrar caminho" +msgstr "Cima e Esquerda" #: ../share/extensions/webslicer_create_rect.inx.h:33 -#, fuzzy msgid "Top and Center" -msgstr "Quebrar caminho" +msgstr "Cima e Centro" #: ../share/extensions/webslicer_create_rect.inx.h:34 -#, fuzzy msgid "Top and right" -msgstr "Dicas e _Truques" +msgstr "Cima e Direita" #: ../share/extensions/webslicer_create_rect.inx.h:35 -#, fuzzy msgid "Middle and Left" -msgstr "Quebrar caminho" +msgstr "Meio e Esquerda" #: ../share/extensions/webslicer_create_rect.inx.h:36 msgid "Middle and Center" -msgstr "" +msgstr "Meio e Centro" #: ../share/extensions/webslicer_create_rect.inx.h:37 -#, fuzzy msgid "Middle and Right" -msgstr "Quebrar caminho" +msgstr "Meio e Direita" #: ../share/extensions/webslicer_create_rect.inx.h:38 -#, fuzzy msgid "Bottom and Left" -msgstr "Quebrar caminho" +msgstr "Abaixo e Esquerda" #: ../share/extensions/webslicer_create_rect.inx.h:39 -#, fuzzy msgid "Bottom and Center" -msgstr "Quebrar caminho" +msgstr "Abaixo e Centro" #: ../share/extensions/webslicer_create_rect.inx.h:40 -#, fuzzy msgid "Bottom and Right" -msgstr "Quebrar caminho" +msgstr "Abaixo e Direita" #: ../share/extensions/webslicer_export.inx.h:1 msgid "Export layout pieces and HTML+CSS code" -msgstr "" +msgstr "Exportar peças de laioute e código HTML+CSS" #: ../share/extensions/webslicer_export.inx.h:3 msgid "Directory path to export:" -msgstr "" +msgstr "Caminho da pasta a exportar:" #: ../share/extensions/webslicer_export.inx.h:4 msgid "Create directory, if it does not exists" -msgstr "" +msgstr "Criar pasta se esta não existir" #: ../share/extensions/webslicer_export.inx.h:5 msgid "With HTML and CSS" -msgstr "" +msgstr "Com HTML e CSS" #: ../share/extensions/webslicer_export.inx.h:7 msgid "" "All sliced images, and optionally - code, will be generated as you had " "configured and saved to one directory." msgstr "" +"Todas as imagens fatiadas, e opcionalmente - o código será gerado tal como " +"configurado e gravado para uma pasta." #: ../share/extensions/whirl.inx.h:1 msgid "Whirl" msgstr "Torção" #: ../share/extensions/whirl.inx.h:2 -#, fuzzy msgid "Amount of whirl:" -msgstr "Quantidade de rotação" +msgstr "Quantidade de torção:" #: ../share/extensions/whirl.inx.h:3 msgid "Rotation is clockwise" -msgstr "Girar no sentido horário" +msgstr "Rotação é no sentido horário" #: ../share/extensions/wireframe_sphere.inx.h:1 msgid "Wireframe Sphere" -msgstr "" +msgstr "Esfera de Arames" #: ../share/extensions/wireframe_sphere.inx.h:2 -#, fuzzy msgid "Lines of latitude:" -msgstr "Cópias do padrão:" +msgstr "Linhas de latitude:" #: ../share/extensions/wireframe_sphere.inx.h:3 msgid "Lines of longitude:" -msgstr "" +msgstr "Linhas de longitude:" #: ../share/extensions/wireframe_sphere.inx.h:4 msgid "Tilt (deg):" -msgstr "" +msgstr "Inclinação (graus):" #: ../share/extensions/wireframe_sphere.inx.h:7 msgid "Hide lines behind the sphere" -msgstr "" +msgstr "Esconder linhas por trás da esfera" #: ../share/extensions/wmf_input.inx.h:1 ../share/extensions/wmf_output.inx.h:1 msgid "Windows Metafile Input" -msgstr "Entrada de Metafile do Windows" +msgstr "Importar Windows Metafile" #: ../share/extensions/wmf_input.inx.h:3 ../share/extensions/wmf_output.inx.h:3 msgid "A popular graphics file format for clipart" @@ -41646,30 +39513,29 @@ msgstr "Um formato de ficheiro gráfico popular para clipart" #: ../share/extensions/xaml2svg.inx.h:1 msgid "XAML Input" -msgstr "Entrada XAML" +msgstr "Importar XAML" + +#~ msgid "Add Stored to measure tool" +#~ msgstr "Adicionar Armazenado à ferramenta de medição" #, fuzzy #~ msgid "" #~ "Select exactly 2 paths to perform difference, division, or path " #~ "cut." #~ msgstr "" -#~ "Seleccione exatamente dois caminhos para fazer diferença, ou-" +#~ "Seleccione exatamente 2 caminhos para fazer diferença, ou-" #~ "exclusivo, divisão ou corte de caminho." -#, fuzzy #~ msgid "Miter _limit:" -#~ msgstr "Limite de aguçamento:" +#~ msgstr "Limite da _esquina:" -#, fuzzy #~ msgid "Text Orientation: " -#~ msgstr "Orientação da página:" +#~ msgstr "Orientação do Texto:" -#, fuzzy #~ msgctxt "measure extension" #~ msgid "Fixed Angle" -#~ msgstr "Ângulo da caneta" +#~ msgstr "Ângulo Fixo" -#, fuzzy #~ msgctxt "Flow control" #~ msgid "None" #~ msgstr "Nenhum" @@ -41677,50 +39543,41 @@ msgstr "Entrada XAML" #~ msgid "Use normal distribution" #~ msgstr "Usar distribuição normal" -#, fuzzy #~ msgid "Arbitrary Angle" -#~ msgstr "Ângulo" +#~ msgstr "Ângulo Arbitrário" -#, fuzzy #~ msgid "Horizontal Point:" -#~ msgstr "Texto horizontal" +#~ msgstr "Ponto Horizontal:" -#, fuzzy #~ msgid "Vertical Point:" -#~ msgstr "Texto vertical" +#~ msgstr "Ponto Vertical:" -#, fuzzy #~ msgid "Ids" -#~ msgstr "_Id" +#~ msgstr "IDs" -#, fuzzy #~ msgid "Help (Options)" -#~ msgstr "Opções" +#~ msgstr "Ajuda (Opções)" -#, fuzzy #~ msgctxt "Symbol" #~ msgid "Map Symbols" -#~ msgstr "Miscelânio:" +#~ msgstr "Símbolos de Mapas" #, fuzzy #~ msgctxt "Symbol" #~ msgid "Bed and Breakfast" -#~ msgstr "Criar e editar degradês" +#~ msgstr "Bed and Breakfast" -#, fuzzy #~ msgctxt "Symbol" #~ msgid "Hostel" -#~ msgstr "recuar" +#~ msgstr "Hostel" -#, fuzzy #~ msgctxt "Symbol" #~ msgid "Chalet" -#~ msgstr "_Paleta" +#~ msgstr "Chalé" -#, fuzzy #~ msgctxt "Symbol" #~ msgid "Playground" -#~ msgstr "Plano de fundo:" +#~ msgstr "Parque Infantil" #, fuzzy #~ msgctxt "Symbol" @@ -41908,27 +39765,23 @@ msgstr "Entrada XAML" #~ msgid "Boolops" #~ msgstr "Ferramentas" -#, fuzzy #~ msgid "Select one path to clone." -#~ msgstr "Seleccione um objecto para clonar." +#~ msgstr "Selecione um caminho para clonar." -#, fuzzy #~ msgid "Select one path to clone." -#~ msgstr "Seleccione um objecto para clonar." +#~ msgstr "Selecione um caminho para clonar." #~ msgid "<no name found>" #~ msgstr "<nenhum nome encontrado>" #~ msgid "Default _units:" -#~ msgstr "Unidades padrão:" +#~ msgstr "_Unidades padrão:" -#, fuzzy #~ msgid "_Delay (in ms):" -#~ msgstr "Nome da camada:" +#~ msgstr "_Atraso (em ms):" -#, fuzzy #~ msgid "Set Resolution" -#~ msgstr "Relação:" +#~ msgstr "Definir Resolução:" #, fuzzy #~ msgid "Move a connection point" @@ -41979,9 +39832,8 @@ msgstr "Entrada XAML" #~ msgid "All shapes" #~ msgstr "Todas as formas" -#, fuzzy #~ msgid "_Text:" -#~ msgstr "_Texto: " +#~ msgstr "_Texto:" #~ msgid "Find objects by their text content (exact or partial match)" #~ msgstr "" @@ -41994,9 +39846,8 @@ msgstr "Entrada XAML" #~ "Encontrar objectos pelo valor de seu atributo id (casamento exato ou " #~ "parcial)" -#, fuzzy #~ msgid "_Style:" -#~ msgstr "E_stilo: " +#~ msgstr "E_stilo:" #~ msgid "" #~ "Find objects by the value of the style attribute (exact or partial match)" @@ -42004,9 +39855,8 @@ msgstr "Entrada XAML" #~ "Encontrar objectos pelo valor do atributo estilo (casamento exato ou " #~ "parcial)" -#, fuzzy #~ msgid "_Attribute:" -#~ msgstr "_Atributo: " +#~ msgstr "_Atributo:" #~ msgid "Find objects by the name of an attribute (exact or partial match)" #~ msgstr "" @@ -42024,33 +39874,26 @@ msgstr "Entrada XAML" #~ msgid "Select objects matching all of the fields you filled in" #~ msgstr "Busca por objectos casando com os valores que preencheu" -#, fuzzy #~ msgid "Green:" -#~ msgstr "Verde" +#~ msgstr "Verde:" -#, fuzzy #~ msgid "Blue:" -#~ msgstr "Azul" +#~ msgstr "Azul:" -#, fuzzy #~ msgid "Lightness:" -#~ msgstr "Brilho" +#~ msgstr "Luminosidade:" -#, fuzzy #~ msgid "Alpha:" -#~ msgstr "Alfa" +#~ msgstr "Alfa:" -#, fuzzy #~ msgid "Level:" -#~ msgstr "Nível" +#~ msgstr "Nível:" -#, fuzzy #~ msgid "Contrast:" -#~ msgstr "Contraste" +#~ msgstr "Contraste:" -#, fuzzy #~ msgid "Composite:" -#~ msgstr "Composição" +#~ msgstr "Composição:" #, fuzzy #~ msgid "Glow:" @@ -42071,19 +39914,18 @@ msgstr "Entrada XAML" #~ msgid "drawing-%d%s" #~ msgstr "desenho-%d%s" -#, fuzzy #~ msgid "%s" -#~ msgstr "%" +#~ msgstr "%s" #~ msgid "Pt" #~ msgstr "Pt" #, fuzzy #~ msgid "Picas" -#~ msgstr "Bias" +#~ msgstr "Picas" #~ msgid "Pixels" -#~ msgstr "Pixels" +#~ msgstr "Píxeis" #~ msgid "Px" #~ msgstr "Px" @@ -42109,6 +39951,9 @@ msgstr "Entrada XAML" #~ msgid "Inches" #~ msgstr "Polegadas" +#~ msgid "Only visible intersections" +#~ msgstr "Apenas interseções visíveis" + #, fuzzy #~ msgid "Foot" #~ msgstr "Fonte" @@ -42410,13 +40255,11 @@ msgstr "Entrada XAML" #~ msgid "_Start Markers:" #~ msgstr "Marcadores de Início:" -#, fuzzy #~ msgid "_Mid Markers:" -#~ msgstr "Marcadores centrais:" +#~ msgstr "Marcadores _Centrais:" -#, fuzzy #~ msgid "_End Markers:" -#~ msgstr "Marcadores de fim:" +#~ msgstr "Marcadores de _Fim:" #, fuzzy #~ msgid "Failed to find font matching: %s\n" @@ -42472,9 +40315,8 @@ msgstr "Entrada XAML" #~ msgid "[Unstable!] Clone original path" #~ msgstr "Substituir texto..." -#, fuzzy #~ msgid "_Description" -#~ msgstr "Descrição" +#~ msgstr "_Descrição" #~ msgid "Bitmap size" #~ msgstr "Tamanho do bitmap" @@ -42510,37 +40352,29 @@ msgstr "Entrada XAML" #~ msgid "Color Management" #~ msgstr "Gerenciamento de cor" -#, fuzzy #~ msgid "Add" -#~ msgstr "_Adicionar" +#~ msgstr "Adicionar" -#, fuzzy #~ msgid "Re_place:" -#~ msgstr "Substituir" +#~ msgstr "_Substituir:" -#, fuzzy #~ msgid "S_election" -#~ msgstr "Seleção" +#~ msgstr "S_eleção" -#, fuzzy #~ msgid "Attribute _Name" -#~ msgstr "Nome do atributo" +#~ msgstr "_Nome do Atributo" -#, fuzzy #~ msgid "Attribute _Value" -#~ msgstr "Valor do atributo" +#~ msgstr "_Valor do Atributo" -#, fuzzy #~ msgid "objects" -#~ msgstr "Objectos" +#~ msgstr "objetos" -#, fuzzy #~ msgid "found" -#~ msgstr "Arredondado" +#~ msgstr "encontrado" -#, fuzzy #~ msgid "Text Replace" -#~ msgstr "Substituir" +#~ msgstr "Substituir Texto" #, fuzzy #~ msgid "Major grid line emphasizing" @@ -42568,77 +40402,69 @@ msgstr "Entrada XAML" #~ msgid "Font size (px)" #~ msgstr "Tamanho da fonte [px]" -#, fuzzy #~ msgid "Angle 0" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 0" -#, fuzzy #~ msgid "Angle 120" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 120" -#, fuzzy #~ msgid "Angle 135" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 135" -#, fuzzy #~ msgid "Angle 150" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 150" -#, fuzzy #~ msgid "Angle 180" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 180" -#, fuzzy #~ msgid "Angle 210" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 210" -#, fuzzy #~ msgid "Angle 225" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 225" #, fuzzy #~ msgid "Angle 240" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 240" #, fuzzy #~ msgid "Angle 270" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 270" #, fuzzy #~ msgid "Angle 30" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 30" #, fuzzy #~ msgid "Angle 300" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 300" #, fuzzy #~ msgid "Angle 315" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 315" #, fuzzy #~ msgid "Angle 330" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 330" #, fuzzy #~ msgid "Angle 45" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 45" #, fuzzy #~ msgid "Angle 60" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 60" #, fuzzy #~ msgid "Angle 90" -#~ msgstr "Ângulo X" +#~ msgstr "Ângulo 90" #, fuzzy #~ msgid "Display Format: " #~ msgstr "_Modo de visão" -#, fuzzy #~ msgid "By:" -#~ msgstr "Ry:" +#~ msgstr "Por:" #, fuzzy #~ msgid "Replace text" @@ -44964,7 +42790,7 @@ msgstr "Entrada XAML" #~ "Imprimir diretamente para um ficheiro ou redirecionamento sem alertas." #~ msgid "Gradients" -#~ msgstr "Degradês" +#~ msgstr "Gradientes" #~ msgid "Vertical kerning" -#~ msgstr "Espaçamento Vertical" +#~ msgstr "Espaçamento vertical" -- cgit v1.2.3 From 3e3920f9ebb18e7e2dcdc5eaa52f9e30308198f7 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Sat, 30 Jul 2016 18:29:37 -0500 Subject: Grab the python2 interpreter for the extensions (bzr r14950.1.18) --- .snapcraft.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.snapcraft.yaml b/.snapcraft.yaml index 8ab13715f..18fe6ed3c 100644 --- a/.snapcraft.yaml +++ b/.snapcraft.yaml @@ -71,9 +71,20 @@ parts: - libvisio-0.1-1 - libwpg-0.3-3 - libglib2.0-bin + - aspell + - imagemagick + - libimage-magick-perl + - libwmf-bin + - python-lxml + - python-numpy + - transfig + - pstoedit + - libsvg-perl + - libxml-xql-perl + - python-uniconvertor + - ruby stage: - -usr/sbin/update-icon-caches - - -usr/share/pkgconfig snap: - -lib/inkscape/*.a after: [desktop/gtk2] -- cgit v1.2.3 From 58d2be6cdbecbce28a453f3f8f22a73d26be8ab1 Mon Sep 17 00:00:00 2001 From: firashanife Date: Tue, 2 Aug 2016 12:26:58 +0200 Subject: [Bug #1574561] Italian translation updates for 0.92.x. Fixed bugs: - https://launchpad.net/bugs/1574561 (bzr r15023.3.3) --- po/it.po | 68 ++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/po/it.po b/po/it.po index c069e24c4..4b0abbf46 100644 --- a/po/it.po +++ b/po/it.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Inkscape 0.92\n" "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2016-06-17 15:11+0200\n" +"POT-Creation-Date: 2016-07-17 21:43+0200\n" "PO-Revision-Date: 2016-06-10 15:31+0100\n" "Last-Translator: Firas Hanife \n" "Language-Team: \n" @@ -959,7 +959,7 @@ msgstr "Rughe a bolle, opache" #: ../share/filters/filters.svg.h:352 msgid "Same as Bubbly Bumps but with a diffuse light instead of a specular one" -msgstr "Come rughe a bolle ma con un'illuminazione diffusa anziché speculare" +msgstr "Come Rughe a bolle ma con un'illuminazione diffusa anziché speculare" #: ../share/filters/filters.svg.h:354 msgid "Blotting Paper" @@ -5683,7 +5683,7 @@ msgstr "Soglia" #: ../src/extension/internal/bitmap/threshold.cpp:40 #: ../src/extension/internal/bitmap/unsharpmask.cpp:46 -#: ../src/widgets/paintbucket-toolbar.cpp:147 +#: ../src/widgets/paintbucket-toolbar.cpp:148 msgid "Threshold:" msgstr "Soglia:" @@ -11730,7 +11730,7 @@ msgstr "Inverti" #: ../src/live_effects/parameter/originalpatharray.cpp:130 #: ../src/live_effects/parameter/originalpatharray.cpp:315 -#: ../src/live_effects/parameter/path.cpp:510 +#: ../src/live_effects/parameter/path.cpp:508 msgid "Link path parameter to path" msgstr "Lega il parametro del tracciato al parametro" @@ -11780,7 +11780,7 @@ msgstr "Incolla tracciato" msgid "Link to path on clipboard" msgstr "Collega a tracciato negli appunti" -#: ../src/live_effects/parameter/path.cpp:478 +#: ../src/live_effects/parameter/path.cpp:476 msgid "Paste path parameter" msgstr "Incolla parametri tracciato" @@ -12641,7 +12641,7 @@ msgstr "Seleziona un gruppo da dividere." msgid "No groups to ungroup in the selection." msgstr "Nessun gruppo nella selezione da dividere." -#: ../src/selection-chemistry.cpp:901 ../src/sp-item-group.cpp:550 +#: ../src/selection-chemistry.cpp:901 ../src/sp-item-group.cpp:652 #: ../src/ui/dialog/objects.cpp:1916 msgid "Ungroup" msgstr "Dividi" @@ -13333,16 +13333,16 @@ msgstr "[riferimento errato]: %s" msgid "%d × %d: %s" msgstr "%d × %d: %s" -#: ../src/sp-item-group.cpp:307 ../src/ui/dialog/objects.cpp:1915 +#: ../src/sp-item-group.cpp:311 ../src/ui/dialog/objects.cpp:1915 msgid "Group" msgstr "Gruppo" -#: ../src/sp-item-group.cpp:313 ../src/sp-switch.cpp:69 +#: ../src/sp-item-group.cpp:317 ../src/sp-switch.cpp:69 #, c-format msgid "of %d object" msgstr "di %d oggetto" -#: ../src/sp-item-group.cpp:313 ../src/sp-switch.cpp:69 +#: ../src/sp-item-group.cpp:317 ../src/sp-switch.cpp:69 #, c-format msgid "of %d objects" msgstr "di %d oggetti" @@ -14476,7 +14476,7 @@ msgstr "Accumula la rotazione per ogni colonna" #: ../src/ui/dialog/clonetiler.cpp:551 msgid "_Blur & opacity" -msgstr "Sfocatura & _opacità" +msgstr "Sfocatura & _Opacità" #: ../src/ui/dialog/clonetiler.cpp:560 msgid "Blur:" @@ -29735,7 +29735,7 @@ msgstr "Visualizza informazioni di misura per gli elementi selezionati" #. Add the units menu. #: ../src/widgets/lpe-toolbar.cpp:387 ../src/widgets/node-toolbar.cpp:613 -#: ../src/widgets/paintbucket-toolbar.cpp:167 +#: ../src/widgets/paintbucket-toolbar.cpp:168 #: ../src/widgets/rect-toolbar.cpp:378 ../src/widgets/select-toolbar.cpp:530 #: ../src/widgets/text-toolbar.cpp:1876 msgid "Units" @@ -30296,19 +30296,19 @@ msgstr "Motivo" msgid "Swatch fill" msgstr "Campione" -#: ../src/widgets/paintbucket-toolbar.cpp:134 +#: ../src/widgets/paintbucket-toolbar.cpp:135 msgid "Fill by" msgstr "Riempi con" -#: ../src/widgets/paintbucket-toolbar.cpp:135 +#: ../src/widgets/paintbucket-toolbar.cpp:136 msgid "Fill by:" msgstr "Riempi con:" -#: ../src/widgets/paintbucket-toolbar.cpp:147 +#: ../src/widgets/paintbucket-toolbar.cpp:148 msgid "Fill Threshold" msgstr "Soglia riempimento" -#: ../src/widgets/paintbucket-toolbar.cpp:148 +#: ../src/widgets/paintbucket-toolbar.cpp:149 msgid "" "The maximum allowed difference between the clicked pixel and the neighboring " "pixels to be counted in the fill" @@ -30316,36 +30316,36 @@ msgstr "" "La differenza massima consentita tra il pixel cliccato e i pixel vicini da " "contare per il riempimento" -#: ../src/widgets/paintbucket-toolbar.cpp:175 +#: ../src/widgets/paintbucket-toolbar.cpp:176 msgid "Grow/shrink by" msgstr "Intrudi/Estrudi di" -#: ../src/widgets/paintbucket-toolbar.cpp:175 +#: ../src/widgets/paintbucket-toolbar.cpp:176 msgid "Grow/shrink by:" msgstr "Intrudi/Estrudi di:" -#: ../src/widgets/paintbucket-toolbar.cpp:176 +#: ../src/widgets/paintbucket-toolbar.cpp:177 msgid "" "The amount to grow (positive) or shrink (negative) the created fill path" msgstr "" "Di quanto estrudere (valore positivo) o intrudere (valore negativo) il " "riempimento creato" -#: ../src/widgets/paintbucket-toolbar.cpp:199 +#: ../src/widgets/paintbucket-toolbar.cpp:200 msgid "Close gaps" msgstr "Area cuscinetto" -#: ../src/widgets/paintbucket-toolbar.cpp:200 +#: ../src/widgets/paintbucket-toolbar.cpp:201 msgid "Close gaps:" msgstr "Area cuscinetto:" -#: ../src/widgets/paintbucket-toolbar.cpp:211 +#: ../src/widgets/paintbucket-toolbar.cpp:212 #: ../src/widgets/pencil-toolbar.cpp:396 ../src/widgets/spiral-toolbar.cpp:285 #: ../src/widgets/star-toolbar.cpp:564 msgid "Defaults" msgstr "Predefiniti" -#: ../src/widgets/paintbucket-toolbar.cpp:212 +#: ../src/widgets/paintbucket-toolbar.cpp:213 msgid "" "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools " "to change defaults)" @@ -31034,7 +31034,8 @@ msgstr "Scostamento %:" #: ../src/widgets/spray-toolbar.cpp:609 msgid "Increase to segregate objects more (value in percent)" -msgstr "Aumentare per separare maggiormente gli oggetti (valore in percentuale)" +msgstr "" +"Aumentare per separare maggiormente gli oggetti (valore in percentuale)" #: ../src/widgets/star-toolbar.cpp:103 msgid "Star: Change number of corners" @@ -32031,18 +32032,17 @@ msgstr "Seleziona un oggetto." msgid "Unable to process this object. Try changing it into a path first." msgstr "Impossibile elaborare questo oggetto. Convertirlo prima in tracciato." -#. report to the Inkscape console using errormsg #: ../share/extensions/draw_from_triangle.py:179 -msgid "Side Length 'a' (px): " -msgstr "Lunghezza lato 'a' (px): " +msgid "Side Length 'a' (" +msgstr "Lunghezza lato 'a' (" #: ../share/extensions/draw_from_triangle.py:180 -msgid "Side Length 'b' (px): " -msgstr "Lunghezza lato 'b' (px): " +msgid "Side Length 'b' (" +msgstr "Lunghezza lato 'b' (" #: ../share/extensions/draw_from_triangle.py:181 -msgid "Side Length 'c' (px): " -msgstr "Lunghezza lato 'c' (px): " +msgid "Side Length 'c' (" +msgstr "Lunghezza lato 'c' (" #: ../share/extensions/draw_from_triangle.py:182 msgid "Angle 'A' (radians): " @@ -32061,8 +32061,8 @@ msgid "Semiperimeter (px): " msgstr "Semiperimetro (px): " #: ../share/extensions/draw_from_triangle.py:186 -msgid "Area (px^2): " -msgstr "Area (px^2): " +msgid "Area (" +msgstr "Area (" #: ../share/extensions/dxf_input.py:530 #, python-format @@ -39554,6 +39554,9 @@ msgstr "Un formato grafico molto diffuso per clipart" msgid "XAML Input" msgstr "Input XAML" +#~ msgid "Area (px^2): " +#~ msgstr "Area (px^2): " + #~ msgid "" #~ "The selected object is not a path.\n" #~ "Try using the procedure Path->Object to Path." @@ -40482,6 +40485,7 @@ msgstr "Input XAML" #, fuzzy #~ msgid "keep only visible layers" #~ msgstr "Stampa livelli invisibili" + #, fuzzy #~ msgid "Horizontal guide each:" #~ msgstr "Guide orizzontali ogni" -- cgit v1.2.3 From d8266516e9200af97cd4108908e433eab4429db7 Mon Sep 17 00:00:00 2001 From: xande6ruz Date: Tue, 2 Aug 2016 12:44:00 +0200 Subject: [Bug #1604784] Portuguese translation - Windows installer. Fixed bugs: - https://launchpad.net/bugs/1604784 (bzr r15023.3.4) --- Makefile.am | 1 + packaging/win32/inkscape.nsi | 6 +- packaging/win32/languages/Portuguese.nsh | 117 +++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 packaging/win32/languages/Portuguese.nsh diff --git a/Makefile.am b/Makefile.am index d4e416d4e..8ab952a9a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -532,6 +532,7 @@ EXTRA_DIST = \ packaging/win32/languages/Italian.nsh \ packaging/win32/languages/Japanese.nsh \ packaging/win32/languages/Polish.nsh \ + packaging/win32/languages/Portuguese.nsh \ packaging/win32/languages/PortugueseBR.nsh \ packaging/win32/languages/Romanian.nsh \ packaging/win32/languages/Russian.nsh \ diff --git a/packaging/win32/inkscape.nsi b/packaging/win32/inkscape.nsi index d1bcb7216..7948e4b85 100755 --- a/packaging/win32/inkscape.nsi +++ b/packaging/win32/inkscape.nsi @@ -130,6 +130,7 @@ ShowUninstDetails hide !insertmacro INKLANGFILE Italian !insertmacro INKLANGFILE Japanese !insertmacro INKLANGFILE Polish +!insertmacro INKLANGFILE Portuguese !insertmacro INKLANGFILE PortugueseBR !insertmacro INKLANGFILE Romanian !insertmacro INKLANGFILE Russian @@ -238,7 +239,7 @@ VIProductVersion ${VERSION_X.X.X.X} VIAddVersionKey ProductName Inkscape VIAddVersionKey Comments "Licensed under the GNU GPL" VIAddVersionKey CompanyName inkscape.org -VIAddVersionKey LegalCopyright "© 2015 Inkscape" +VIAddVersionKey LegalCopyright "© 2016 Inkscape" VIAddVersionKey FileDescription Inkscape VIAddVersionKey FileVersion ${VERSION_X.X.X.X} VIAddVersionKey ProductVersion ${VERSION_X.X.X.X} @@ -664,7 +665,6 @@ Function .onInit ; initialise the installer {{{2 !macroend ; No need for English to be detected as it's the default - !insertmacro LanguageAutoSelect PortugueseBrazil 1046 !insertmacro LanguageAutoSelect Breton 1150 !insertmacro LanguageAutoSelect Catalan 1027 !insertmacro LanguageAutoSelect Czech 1029 @@ -680,6 +680,8 @@ Function .onInit ; initialise the installer {{{2 !insertmacro LanguageAutoSelect Italian 1040 !insertmacro LanguageAutoSelect Japanese 1041 !insertmacro LanguageAutoSelect Polish 1045 + !insertmacro LanguageAutoSelect Portuguese 2070 + !insertmacro LanguageAutoSelect PortugueseBrazil 1046 !insertmacro LanguageAutoSelect Romanian 1048 !insertmacro LanguageAutoSelect Russian 1049 !insertmacro LanguageAutoSelect Slovak 1051 diff --git a/packaging/win32/languages/Portuguese.nsh b/packaging/win32/languages/Portuguese.nsh new file mode 100644 index 000000000..c308f7e36 --- /dev/null +++ b/packaging/win32/languages/Portuguese.nsh @@ -0,0 +1,117 @@ +;Language: Portuguese (2070, CP1252) +;By Rui +${LangFileString} CaptionDescription "Editor de Gráficos Vetoriais Escaláveis de Código Aberto" +${LangFileString} LICENSE_BOTTOM_TEXT "$(^Name) é disponibilizado sob a GNU General Public License (GPL). A licença é disponibilizada aqui apenas para fins informativos. $_CLICK" +${LangFileString} DIFFERENT_USER "O Inkscape já foi instalado pelo utilizador $0.$\r$\nSe continuar, poderá não conseguir instalar por completo!$\r$\nPor favor entre na conta de $0 e tente de novo." +${LangFileString} WANT_UNINSTALL_BEFORE "$R1 já foi instalado. $\nPretende remover a versão anterior antes de instalar o $(^Name)?" +${LangFileString} OK_CANCEL_DESC "$\n$\nClique em OK para continuar ou clique em CANCELAR para abortar." +${LangFileString} NO_ADMIN "A sua conta não tem privilégios de administrador.$\r$\nPoderá não conseguir instalar o Inkscape em todas as contas.$\r$\nDesmarque a opção 'Instalar em todas as contas'." +${LangFileString} NOT_SUPPORTED "O Inkscape não corre nos sistemas operativos Windows 95/98/ME!$\r$\nPor favor consulte o site oficial para mais informações." +${LangFileString} Full "Completo" +${LangFileString} Optimal "Opcional" +${LangFileString} Minimal "Mínimo" +${LangFileString} Core "Inkscape - Editor SVG (necessário)" +${LangFileString} CoreDesc "Ficheiros do núcleo e dlls do Inkscape" +${LangFileString} GTKFiles "GTK+ Runtime Environment (necessário)" +${LangFileString} GTKFilesDesc "Uma biblioteca de GUI multi-plataforma, usada pelo Inkscape" +${LangFileString} Shortcuts "Atalhos" +${LangFileString} ShortcutsDesc "Atalhos para abrir o Inkscape" +${LangFileString} Alluser "Instalar em todas as contas" +${LangFileString} AlluserDesc "Instalar esta aplicação para todos os utilizadores que usem este computador (todas as contas)" +${LangFileString} Desktop "Ambiente de Trabalho" +${LangFileString} DesktopDesc "Criar um atalho do Inkscape no Ambiente de Trabalho" +${LangFileString} Startmenu "Menu de Início" +${LangFileString} StartmenuDesc "Criar um atalho do Inkscape no Menu de Início" +${LangFileString} Quicklaunch "Lançamento Rápido" +${LangFileString} QuicklaunchDesc "Criar um atalho do Inkscape na barra de Lançamento Rápido" +${LangFileString} SVGWriter "Abrir ficheiros SVG com o Inkscape" +${LangFileString} SVGWriterDesc "Selecionar o Inkscape como o editor padrão para ficheiros SVG" +${LangFileString} ContextMenu "Menu de Contexto" +${LangFileString} ContextMenuDesc "Adicionar o Inkscape no Menu de Contexto para ficheiros SVG" +${LangFileString} DeletePrefs "Eliminar preferências" +${LangFileString} DeletePrefsDesc "Eliminar preferências de versões anteriormente instaladas do Inkscape" +${LangFileString} Addfiles "Ficheiros Adicionais" +${LangFileString} AddfilesDesc "Ficheiros Adicionais" +${LangFileString} Examples "Exemplos" +${LangFileString} ExamplesDesc "Exemplos de utilização do Inkscape" +${LangFileString} Tutorials "Tutoriais" +${LangFileString} TutorialsDesc "Tutoriais para aprender a usar o Inkscape" +${LangFileString} Languages "Traduções" +${LangFileString} LanguagesDesc "Instalar várias traduções do Inkscape" +${LangFileString} lng_am "Amárico" +${LangFileString} lng_ar "Arábico" +${LangFileString} lng_az "Azerbaijano" +${LangFileString} lng_be "Bielorrusso" +${LangFileString} lng_bg "Búlgaro" +${LangFileString} lng_bn "Bengali" +${LangFileString} lng_bn_BD "Bengali do Bangladeche" +${LangFileString} lng_br "Bretão" +${LangFileString} lng_ca "Catalão" +${LangFileString} lng_ca@valencia "Catalão Valenciano" +${LangFileString} lng_cs "Checo" +${LangFileString} lng_da "Dinamarquês" +${LangFileString} lng_de "Alemão" +${LangFileString} lng_dz "Butanês" +${LangFileString} lng_el "Grego" +${LangFileString} lng_en "Inglês" +${LangFileString} lng_en_AU "Inglês Australiano" +${LangFileString} lng_en_CA "Inglês Canadiano" +${LangFileString} lng_en_GB "Inglês Britânico" +${LangFileString} lng_en_US@piglatin "Pig Latin" +${LangFileString} lng_eo "Esperanto" +${LangFileString} lng_es "Espanhol" +${LangFileString} lng_es_MX "Espanhol Mexicano" +${LangFileString} lng_et "Estónio" +${LangFileString} lng_eu "Basco" +${LangFileString} lng_fa "Persa" +${LangFileString} lng_fi "Finlandês" +${LangFileString} lng_fr "Francês" +${LangFileString} lng_ga "Irlandês" +${LangFileString} lng_gl "Galego" +${LangFileString} lng_he "Hebraico" +${LangFileString} lng_hr "Croata" +${LangFileString} lng_hu "Húngaro" +${LangFileString} lng_hy "Arménio" +${LangFileString} lng_id "Indonésio" +${LangFileString} lng_is "Islandês" +${LangFileString} lng_it "Italiano" +${LangFileString} lng_ja "Japonês" +${LangFileString} lng_km "Cambojano" +${LangFileString} lng_ko "Coreano" +${LangFileString} lng_lt "Lituano" +${LangFileString} lng_lv "Letão" +${LangFileString} lng_mk "Macedónio" +${LangFileString} lng_mn "Mongol" +${LangFileString} lng_ne "Nepalês" +${LangFileString} lng_nb "Bokmål Norueguês" +${LangFileString} lng_nl "Neerlandês" +${LangFileString} lng_nn "Novo Norueguês" +${LangFileString} lng_pa "Panjabi" +${LangFileString} lng_pl "Polaco" +${LangFileString} lng_pt "Português" +${LangFileString} lng_pt_BR "Português do Brasil" +${LangFileString} lng_ro "Romeno" +${LangFileString} lng_ru "Russo" +${LangFileString} lng_rw "Quiniaruanda" +${LangFileString} lng_sk "Eslovaco" +${LangFileString} lng_sl "Esloveno" +${LangFileString} lng_sq "Albanês" +${LangFileString} lng_sr "Sérvio" +${LangFileString} lng_sr@latin "Sérvio no alfabeto Latino" +${LangFileString} lng_sv "Sueco" +${LangFileString} lng_te "Telugo" +${LangFileString} lng_th "Tailandês" +${LangFileString} lng_tr "Turco" +${LangFileString} lng_uk "Ucraniano" +${LangFileString} lng_vi "Vietnamita" +${LangFileString} lng_zh_CN "Chinês Simplificado" +${LangFileString} lng_zh_TW "Chinês Traditional" +${LangFileString} UInstOpt "Opções de Desinstalação" +${LangFileString} UInstOpt1 "Por favor faça as suas escolhas para opções adicionais" +${LangFileString} PurgePrefs "Manter Preferências" +${LangFileString} UninstallLogNotFound "$INSTDIR\uninstall.log não foi encontrado!$\r$\nPor favor desinstale manualmente eliminado a pasta $INSTDIR!" +${LangFileString} FileChanged "O ficheiro $filename foi alterado depois de instalado.$\r$\nQuer mesmo eliminar o ficheiro?" +${LangFileString} Yes "Sim" +${LangFileString} AlwaysYes "responder sempre Sim" +${LangFileString} No "Não" +${LangFileString} AlwaysNo "responder sempre Não" -- cgit v1.2.3 From 37f2ee93e986ec7060fe18376624f5d3306ddfdc Mon Sep 17 00:00:00 2001 From: Ivan Mas??r Date: Wed, 3 Aug 2016 00:15:46 +0200 Subject: * [INTL:zh_TW] Traditional Chinese translation update (bzr r15032) --- po/zh_TW.po | 2283 ++++++++++++++++++++++++++--------------------------------- 1 file changed, 1009 insertions(+), 1274 deletions(-) mode change 100644 => 100755 po/zh_TW.po diff --git a/po/zh_TW.po b/po/zh_TW.po old mode 100644 new mode 100755 index 29e788273..0b4406253 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1,16 +1,16 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # -# Dongjun Wu , 2011, 2012, 2013, 2014. #: ../src/ui/dialog/clonetiler.cpp:1010 +# Dongjun Wu , 2011, 2012, 2013, 2014, 2016. msgid "" msgstr "" "Project-Id-Version: inkscape\n" "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2016-06-02 12:12+0200\n" -"PO-Revision-Date: 2015-09-10 11:39+0100\n" +"POT-Creation-Date: 2016-06-08 09:06+0200\n" +"PO-Revision-Date: 2016-06-22 02:22+0800\n" "Last-Translator: Dongjun Wu \n" -"Language-Team: Chinese Traditional \n" +"Language-Team: Chinese \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,7 +18,7 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Poedit-Language: Chinese (tranditional)\n" "X-Poedit-Country: TAIWAN\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 2.0\n" #: ../inkscape.appdata.xml.in.h:1 ../inkscape.desktop.in.h:1 msgid "Inkscape" @@ -34,6 +34,8 @@ msgid "" "Illustrator, CorelDraw, or Xara X, using the W3C standard Scalable Vector " "Graphics (SVG) file format." msgstr "" +"開放原始碼å‘é‡ç¹ªåœ–編輯器,功能類似 Illustratorã€CorelDraw 或 Xara X,使用 " +"W3C 標準å¯ç¸®æ”¾å‘é‡åœ–å½¢ (SVG) 檔案格å¼ã€‚" #: ../inkscape.appdata.xml.in.h:4 msgid "" @@ -43,11 +45,13 @@ msgid "" "trace bitmaps and much more. We also aim to maintain a thriving user and " "developer community by using open, community-oriented development." msgstr "" +"Inkscape 支æ´è¨±å¤šé€²éšŽçš„ SVG 特性 (標記ã€ä»¿è£½ã€é€æ˜Žæ··åˆç­‰ç­‰) ä¸¦è‘—é‡æµæš¢æ“作性" +"所設計的使用介é¢ã€‚æ­¤è»Ÿé«”èƒ½å¤ ç°¡å–®ç·¨è¼¯ç¯€é»žã€æ“ä½œè¤‡é›œçš„è·¯å¾‘ã€æç¹ªé»žé™£åœ–ç­‰è¨±å¤šåŠŸ" +"èƒ½ã€‚æˆ‘å€‘ç©æ¥µç¶“營使用者與開發人員的社群,秉æŒé–‹æ”¾ã€ç¤¾ç¾¤å°Žå‘開發ç†å¿µã€‚" #: ../inkscape.appdata.xml.in.h:5 -#, fuzzy msgid "Main application window" -msgstr "å†è£½è¦–窗(_A)" +msgstr "應用程å¼ä¸»è¦–窗" #: ../inkscape.desktop.in.h:3 msgid "Inkscape Vector Graphics Editor" @@ -59,7 +63,7 @@ msgstr "建立和編輯å¯ç¸®æ”¾å‘é‡ç¹ªåœ–圖形" #: ../inkscape.desktop.in.h:5 msgid "image;editor;vector;drawing;" -msgstr "" +msgstr "å½±åƒ;編輯器;å‘é‡;圖畫;" #: ../inkscape.desktop.in.h:6 msgid "New Drawing" @@ -4215,17 +4219,15 @@ msgstr "碼頭" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:239 ../share/symbols/symbols.h:240 -#, fuzzy msgctxt "Symbol" msgid "Motorbike Trail" -msgstr "雪車é“" +msgstr "摩托車" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:241 ../share/symbols/symbols.h:242 -#, fuzzy msgctxt "Symbol" msgid "Radiator Water" -msgstr "相關性" +msgstr "暖氣機水" #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:243 ../share/symbols/symbols.h:244 @@ -4363,7 +4365,7 @@ msgstr "è¡æµª" #: ../share/symbols/symbols.h:291 msgctxt "Symbol" msgid "Blank" -msgstr "" +msgstr "空白符號" #: ../share/templates/templates.h:1 msgid "CD Label 120mmx120mm " @@ -4419,16 +4421,16 @@ msgstr "åƒè€ƒç·šå°åˆ·ç•«å¸ƒ" msgid "3D Box" msgstr "立方體" -#: ../src/color-profile.cpp:842 +#: ../src/color-profile.cpp:856 #, c-format msgid "Color profiles directory (%s) is unavailable." msgstr "色彩æè¿°æª”目錄 (%s) 無法使用。" -#: ../src/color-profile.cpp:901 ../src/color-profile.cpp:918 +#: ../src/color-profile.cpp:928 ../src/color-profile.cpp:945 msgid "(invalid UTF-8 string)" msgstr "(䏿­£ç¢ºçš„ UTF-8 字串)" -#: ../src/color-profile.cpp:903 +#: ../src/color-profile.cpp:930 msgctxt "Profile name" msgid "None" msgstr "ç„¡" @@ -4993,7 +4995,7 @@ msgstr "" "ç›®å‰æ²’有關於這個擴充功能的說明。如果你有關於這個擴充功能的å•題請詳見 " "Inkscape 網站或在郵件論壇上詢å•。" -#: ../src/extension/implementation/script.cpp:1108 +#: ../src/extension/implementation/script.cpp:1111 msgid "" "Inkscape has received additional data from the script executed. The script " "did not return an error, but this may indicate the results will not be as " @@ -5662,30 +5664,26 @@ msgstr "Postscript 等級 2" #: ../src/extension/internal/cairo-ps-out.cpp:333 #: ../src/extension/internal/cairo-ps-out.cpp:375 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:250 -#, fuzzy msgid "Text output options:" -msgstr "文字方å‘" +msgstr "文字輸出é¸é …:" #: ../src/extension/internal/cairo-ps-out.cpp:334 #: ../src/extension/internal/cairo-ps-out.cpp:376 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:251 -#, fuzzy msgid "Embed fonts" -msgstr "嵌入點陣圖" +msgstr "內嵌字型" #: ../src/extension/internal/cairo-ps-out.cpp:335 #: ../src/extension/internal/cairo-ps-out.cpp:377 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:252 -#, fuzzy msgid "Convert text to paths" msgstr "將文字轉æˆè·¯å¾‘" #: ../src/extension/internal/cairo-ps-out.cpp:336 #: ../src/extension/internal/cairo-ps-out.cpp:378 #: ../src/extension/internal/cairo-renderer-pdf-out.cpp:253 -#, fuzzy msgid "Omit text in PDF and create LaTeX file" -msgstr "PDF+LaTeX:çœç•¥ PDF 裡的文字,並建立 LaTeX 檔" +msgstr "çœç•¥ PDF 中的文字並建立 LaTeX 檔" #: ../src/extension/internal/cairo-ps-out.cpp:338 #: ../src/extension/internal/cairo-ps-out.cpp:380 @@ -6525,51 +6523,48 @@ msgid "Replace RGB by any color" msgstr "用兩種é¡è‰²æ›¿ä»£ RGB" #: ../src/extension/internal/filter/color.h:254 -#, fuzzy msgid "Color Blindness" -msgstr "彩色外框" +msgstr "色盲" #: ../src/extension/internal/filter/color.h:258 -#, fuzzy msgid "Blindness type:" -msgstr "æ··åˆé¡žåž‹ï¼š" +msgstr "色盲類型:" #: ../src/extension/internal/filter/color.h:259 msgid "Rod monochromacy (atypical achromatopsia)" -msgstr "" +msgstr "桿細胞單色盲 (éžå…¸åž‹è‰²ç›²)" #: ../src/extension/internal/filter/color.h:260 msgid "Cone monochromacy (typical achromatopsia)" -msgstr "" +msgstr "視éŒç´°èƒžå–®è‰²ç›² (典型色盲)" #: ../src/extension/internal/filter/color.h:261 msgid "Green weak (deuteranomaly)" -msgstr "" +msgstr "綠色弱 (第二色弱)" #: ../src/extension/internal/filter/color.h:262 msgid "Green blind (deuteranopia)" -msgstr "" +msgstr "綠色盲 (第二色盲)" #: ../src/extension/internal/filter/color.h:263 msgid "Red weak (protanomaly)" -msgstr "" +msgstr "紅色弱 (第一色弱)" #: ../src/extension/internal/filter/color.h:264 msgid "Red blind (protanopia)" -msgstr "" +msgstr "紅色盲 (第一色盲)" #: ../src/extension/internal/filter/color.h:265 msgid "Blue weak (tritanomaly)" -msgstr "" +msgstr "è—色弱 (第三色弱)" #: ../src/extension/internal/filter/color.h:266 msgid "Blue blind (tritanopia)" -msgstr "" +msgstr "è—色盲 (第三色盲)" #: ../src/extension/internal/filter/color.h:286 -#, fuzzy msgid "Simulate color blindness" -msgstr "模擬油畫筆觸風格" +msgstr "模擬色盲" #: ../src/extension/internal/filter/color.h:329 msgid "Color Shift" @@ -7969,7 +7964,7 @@ msgstr "備註:若精確度設定太高å¯èƒ½æœƒä½¿ SVG 檔的體ç©è®Š #: ../src/extension/internal/pdfinput/pdf-input.cpp:134 msgid "Poppler/Cairo import" -msgstr "" +msgstr "Poppler/Cairo 匯入" #: ../src/extension/internal/pdfinput/pdf-input.cpp:135 msgid "" @@ -7977,11 +7972,12 @@ msgid "" "glyphs where each glyph is a path. Images are stored internally. Meshes " "cause entire document to be rendered as a raster image." msgstr "" +"經由外部函å¼åº«åŒ¯å…¥ã€‚文字組æˆç¾¤çµ„包å«è¤‡è£½å­—而æ¯ä¸€å€‹å­—是路徑。影åƒå„²å­˜åœ¨å…§éƒ¨ã€‚" +"ç¶²é¢æœƒå°‡æ•´å€‹æ–‡ä»¶ç¹ªç®—為點陣圖。" #: ../src/extension/internal/pdfinput/pdf-input.cpp:136 -#, fuzzy msgid "Internal import" -msgstr "åºåˆ—連接埠:" +msgstr "內部匯入" #: ../src/extension/internal/pdfinput/pdf-input.cpp:137 msgid "" @@ -7989,6 +7985,8 @@ msgid "" "white space is missing. Meshes are converted to tiles, the number depends on " "the precision set below." msgstr "" +"經由內部 (æºè‡ª Poppler) 函å¼åº«åŒ¯å…¥ã€‚文字以文字儲存,但空白會éºå¤±ã€‚ç¶²é¢è½‰æ›æˆ" +"圖塊,數é‡å–決於下é¢è¨­å®šçš„精確度。" #: ../src/extension/internal/pdfinput/pdf-input.cpp:148 msgid "rough" @@ -8288,8 +8286,7 @@ msgstr "在 <defs> 沒有未使用的定義。" msgid "" "No Inkscape extension found to save document (%s). This may have been " "caused by an unknown filename extension." -msgstr "" -"找ä¸åˆ° Inkscape 擴充功能來儲存檔案 (%s) 。這å¯èƒ½æ˜¯å› ä¸æ˜Žçš„å‰¯æª”åæ‰€å°Žè‡´ã€‚" +msgstr "找ä¸åˆ° Inkscape 擴充功能來儲存檔案 (%s) 。這å¯èƒ½æ˜¯å› ä¸æ˜Žçš„å‰¯æª”åæ‰€å°Žè‡´ã€‚" #: ../src/file.cpp:680 ../src/file.cpp:688 ../src/file.cpp:696 #: ../src/file.cpp:702 ../src/file.cpp:707 @@ -8750,8 +8747,7 @@ msgstr "管ç†å™¨" #: ../src/libgdl/gdl-dock-bar.c:106 msgid "GdlDockMaster object which the dockbar widget is attached to" -msgstr "" -"工具欄列介é¢å…ƒä»¶è¢«æ”¾åˆ°åœ–å½¢è£ç½®ä»‹é¢ (GDI) 工具欄管ç†å™¨ (GdlDockMaster) 物件" +msgstr "工具欄列介é¢å…ƒä»¶è¢«æ”¾åˆ°åœ–å½¢è£ç½®ä»‹é¢ (GDI) 工具欄管ç†å™¨ (GdlDockMaster) 物件" #: ../src/libgdl/gdl-dock-bar.c:113 msgid "Dockbar style" @@ -8902,8 +8898,7 @@ msgstr "åˆ‡æ›æŒ‰éˆ•樣å¼" msgid "" "master %p: unable to add object %p[%s] to the hash. There already is an " "item with that name (%p)." -msgstr "" -"管ç†å™¨ %p:無法加入物件 %p[%s] 到此信æ¯ã€‚已有一個相åŒå稱 (%p) 的項目。" +msgstr "管ç†å™¨ %p:無法加入物件 %p[%s] 到此信æ¯ã€‚已有一個相åŒå稱 (%p) 的項目。" #: ../src/libgdl/gdl-dock-master.c:955 #, c-format @@ -9272,9 +9267,8 @@ msgid "Interpolate points" msgstr "æ’入點" #: ../src/live_effects/effect.cpp:140 -#, fuzzy msgid "Transform by 2 points" -msgstr "漸層變形" +msgstr "ä¾ 2 點變形" #: ../src/live_effects/effect.cpp:141 #: ../src/live_effects/lpe-show_handles.cpp:26 @@ -9448,9 +9442,8 @@ msgstr "在沿著彎曲路徑彎曲之å‰ï¼Œå°‡åŽŸæœ¬çš„æ—‹è½‰ 90 度" #: ../src/live_effects/lpe-bendpath.cpp:178 #: ../src/live_effects/lpe-patternalongpath.cpp:285 -#, fuzzy msgid "Change the width" -msgstr "變更邊框寬度" +msgstr "變更寬度" #: ../src/live_effects/lpe-bounding-box.cpp:24 #: ../src/live_effects/lpe-clone-original.cpp:18 @@ -9494,11 +9487,11 @@ msgstr "輔助標示尺寸" #: ../src/live_effects/lpe-bspline.cpp:32 msgid "Apply changes if weight = 0%" -msgstr "" +msgstr "å¦‚æžœæ¬Šé‡ = 0% 則套用變更" #: ../src/live_effects/lpe-bspline.cpp:33 msgid "Apply changes if weight > 0%" -msgstr "" +msgstr "å¦‚æžœæ¬Šé‡ > 0% 則套用變更" #: ../src/live_effects/lpe-bspline.cpp:34 #: ../src/live_effects/lpe-fillet-chamfer.cpp:56 @@ -9506,14 +9499,12 @@ msgid "Change only selected nodes" msgstr "åªæ”¹è®Šé¸å–的節點" #: ../src/live_effects/lpe-bspline.cpp:35 -#, fuzzy msgid "Change weight %:" -msgstr "變更權é‡ï¼š" +msgstr "è®Šæ›´æ¬Šé‡ %:" #: ../src/live_effects/lpe-bspline.cpp:35 -#, fuzzy msgid "Change weight percent of the effect" -msgstr "變更特效權é‡" +msgstr "變更特效權é‡ç™¾åˆ†æ¯”" #: ../src/live_effects/lpe-bspline.cpp:99 msgid "Default weight" @@ -9524,14 +9515,12 @@ msgid "Make cusp" msgstr "變æˆå°–è§’" #: ../src/live_effects/lpe-bspline.cpp:148 -#, fuzzy msgid "Change to default weight" -msgstr "é è¨­æ¬Šé‡" +msgstr "變更為é è¨­æ¬Šé‡" #: ../src/live_effects/lpe-bspline.cpp:154 -#, fuzzy msgid "Change to 0 weight" -msgstr "變更權é‡ï¼š" +msgstr "變更為 0 權é‡" #: ../src/live_effects/lpe-bspline.cpp:160 #: ../src/live_effects/lpe-fillet-chamfer.cpp:240 @@ -9747,36 +9736,32 @@ msgid "Use knots distance instead radius" msgstr "改用環çµè·é›¢è€ŒéžåŠå¾‘" #: ../src/live_effects/lpe-fillet-chamfer.cpp:59 -#, fuzzy msgid "Method:" -msgstr "æ–¹å¼" +msgstr "æ–¹å¼ï¼š" #: ../src/live_effects/lpe-fillet-chamfer.cpp:59 msgid "Fillets methods" msgstr "圓角方å¼" #: ../src/live_effects/lpe-fillet-chamfer.cpp:60 -#, fuzzy msgid "Radius (unit or %):" -msgstr "åŠå¾‘ (單使ˆ– %)" +msgstr "åŠå¾‘ (單使ˆ– %):" #: ../src/live_effects/lpe-fillet-chamfer.cpp:60 msgid "Radius, in unit or %" msgstr "åŠå¾‘ï¼Œå–®ä½æˆ– %" #: ../src/live_effects/lpe-fillet-chamfer.cpp:61 -#, fuzzy msgid "Chamfer steps:" -msgstr "倒角階數" +msgstr "倒角階數:" #: ../src/live_effects/lpe-fillet-chamfer.cpp:61 msgid "Chamfer steps" msgstr "倒角階數" #: ../src/live_effects/lpe-fillet-chamfer.cpp:63 -#, fuzzy msgid "Helper size with direction:" -msgstr "æ–¹å‘æ€§è¼”助標示尺寸" +msgstr "æ–¹å‘æ€§è¼”助標示尺寸:" #: ../src/live_effects/lpe-fillet-chamfer.cpp:63 msgid "Helper size with direction" @@ -9784,11 +9769,11 @@ msgstr "æ–¹å‘æ€§è¼”助標示尺寸" #: ../src/live_effects/lpe-fillet-chamfer.cpp:103 msgid "IMPORTANT! New version soon..." -msgstr "" +msgstr "é‡è¦ï¼å³å°‡æœ‰æ–°ç‰ˆæœ¬..." #: ../src/live_effects/lpe-fillet-chamfer.cpp:107 msgid "Not compatible. Convert to path after." -msgstr "" +msgstr "ä¸ç›¸å®¹ã€‚ä¹‹å¾Œè½‰æ›æˆè·¯å¾‘。" #: ../src/live_effects/lpe-fillet-chamfer.cpp:165 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:72 @@ -9807,29 +9792,25 @@ msgstr "倒角" #: ../src/live_effects/lpe-fillet-chamfer.cpp:178 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:78 -#, fuzzy msgid "Inverse chamfer" -msgstr "åå‘圓角" +msgstr "åå‘倒角" #: ../src/live_effects/lpe-fillet-chamfer.cpp:247 -#, fuzzy msgid "Convert to fillet" -msgstr "è½‰æ›æˆé»žå­—" +msgstr "è½‰æ›æˆåœ“è§’" #: ../src/live_effects/lpe-fillet-chamfer.cpp:254 #: ../src/live_effects/lpe-fillet-chamfer.cpp:278 -#, fuzzy msgid "Convert to inverse fillet" -msgstr "è½‰æ›æˆé»žå­—" +msgstr "è½‰æ›æˆåå‘圓角" #: ../src/live_effects/lpe-fillet-chamfer.cpp:270 -#, fuzzy msgid "Convert to chamfer" -msgstr "轉æˆç ´æŠ˜è™Ÿ" +msgstr "è½‰æ›æˆå€’è§’" #: ../src/live_effects/lpe-fillet-chamfer.cpp:290 msgid "Knots and helper paths refreshed" -msgstr "" +msgstr "ç’°çµå’Œè¼”åŠ©æ¨™ç¤ºè·¯å¾‘å·²é‡æ–°æ•´ç†" #: ../src/live_effects/lpe-gears.cpp:214 msgid "_Teeth:" @@ -9931,9 +9912,8 @@ msgid "Miter" msgstr "斜切" #: ../src/live_effects/lpe-jointype.cpp:34 -#, fuzzy msgid "Miter Clip" -msgstr "斜切é™åˆ¶" +msgstr "斜切剪è£" #. {LINEJOIN_EXTRP_MITER, N_("Extrapolated"), "extrapolated"}, // disabled because doesn't work well #: ../src/live_effects/lpe-jointype.cpp:35 @@ -9942,19 +9922,16 @@ msgid "Extrapolated arc" msgstr "外推弧" #: ../src/live_effects/lpe-jointype.cpp:36 -#, fuzzy msgid "Extrapolated arc Alt1" -msgstr "外推弧" +msgstr "外推弧 Alt1" #: ../src/live_effects/lpe-jointype.cpp:37 -#, fuzzy msgid "Extrapolated arc Alt2" -msgstr "外推弧" +msgstr "外推弧 Alt2" #: ../src/live_effects/lpe-jointype.cpp:38 -#, fuzzy msgid "Extrapolated arc Alt3" -msgstr "外推弧" +msgstr "外推弧 Alt3" #: ../src/live_effects/lpe-jointype.cpp:42 #: ../src/live_effects/lpe-powerstroke.cpp:149 @@ -10077,279 +10054,227 @@ msgstr "變更環çµäº¤å‰é»ž" #: ../src/live_effects/lpe-lattice2.cpp:47 #: ../src/live_effects/lpe-perspective-envelope.cpp:43 -#, fuzzy msgid "Mirror movements in horizontal" -msgstr "水平移動節點" +msgstr "æ°´å¹³é¡åƒç§»å‹•" #: ../src/live_effects/lpe-lattice2.cpp:48 #: ../src/live_effects/lpe-perspective-envelope.cpp:44 -#, fuzzy msgid "Mirror movements in vertical" -msgstr "垂直移動節點" +msgstr "垂直é¡åƒç§»å‹•" #: ../src/live_effects/lpe-lattice2.cpp:49 msgid "Update while moving knots (maybe slow)" -msgstr "" +msgstr "ç§»å‹•ç’°çµæ™‚æ›´æ–° (å¯èƒ½æœƒè®“程å¼è®Šå¾ˆæ…¢)" #: ../src/live_effects/lpe-lattice2.cpp:50 -#, fuzzy msgid "Control 0:" msgstr "控制柄 0:" #: ../src/live_effects/lpe-lattice2.cpp:50 -#, fuzzy msgid "Control 0 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 0 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 0 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:51 -#, fuzzy msgid "Control 1:" msgstr "控制柄 1:" #: ../src/live_effects/lpe-lattice2.cpp:51 -#, fuzzy msgid "Control 1 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 1 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 1 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:52 -#, fuzzy msgid "Control 2:" -msgstr "控制柄 2:" +msgstr "控制柄 2:" #: ../src/live_effects/lpe-lattice2.cpp:52 -#, fuzzy msgid "Control 2 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 2 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 2 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:53 -#, fuzzy msgid "Control 3:" -msgstr "控制柄 3:" +msgstr "控制柄 3:" #: ../src/live_effects/lpe-lattice2.cpp:53 -#, fuzzy msgid "Control 3 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 3 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 3 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:54 -#, fuzzy msgid "Control 4:" -msgstr "控制柄 4:" +msgstr "控制柄 4:" #: ../src/live_effects/lpe-lattice2.cpp:54 -#, fuzzy msgid "Control 4 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 4 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 4 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:55 -#, fuzzy msgid "Control 5:" -msgstr "控制柄 5:" +msgstr "控制柄 5:" #: ../src/live_effects/lpe-lattice2.cpp:55 -#, fuzzy msgid "Control 5 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 5 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 5 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:56 -#, fuzzy msgid "Control 6:" -msgstr "控制柄 6:" +msgstr "控制柄 6:" #: ../src/live_effects/lpe-lattice2.cpp:56 -#, fuzzy msgid "Control 6 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 6 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 6 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:57 -#, fuzzy msgid "Control 7:" -msgstr "控制柄 7:" +msgstr "控制柄 7:" #: ../src/live_effects/lpe-lattice2.cpp:57 -#, fuzzy msgid "Control 7 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 7 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 7 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:58 -#, fuzzy msgid "Control 8x9:" -msgstr "控制柄 8x9:" +msgstr "控制柄 8x9:" #: ../src/live_effects/lpe-lattice2.cpp:58 -#, fuzzy msgid "" "Control 8x9 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 8x9 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 8x9 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:59 -#, fuzzy msgid "Control 10x11:" -msgstr "控制柄 10x11:" +msgstr "控制柄 10x11:" #: ../src/live_effects/lpe-lattice2.cpp:59 -#, fuzzy msgid "" "Control 10x11 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 10x11 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 10x11 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:60 -#, fuzzy msgid "Control 12:" -msgstr "控制柄 12:" +msgstr "控制柄 12:" #: ../src/live_effects/lpe-lattice2.cpp:60 -#, fuzzy msgid "Control 12 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 12 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 12 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:61 -#, fuzzy msgid "Control 13:" -msgstr "控制柄 12" +msgstr "控制柄 13:" #: ../src/live_effects/lpe-lattice2.cpp:61 -#, fuzzy msgid "Control 13 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 13 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 13 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:62 -#, fuzzy msgid "Control 14:" -msgstr "控制柄 14:" +msgstr "控制柄 14:" #: ../src/live_effects/lpe-lattice2.cpp:62 -#, fuzzy msgid "Control 14 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 14 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 14 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:63 -#, fuzzy msgid "Control 15:" -msgstr "控制柄 14" +msgstr "控制柄 15:" #: ../src/live_effects/lpe-lattice2.cpp:63 -#, fuzzy msgid "Control 15 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 15 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 15 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:64 -#, fuzzy msgid "Control 16:" -msgstr "控制柄 16:" +msgstr "控制柄 15 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:64 -#, fuzzy msgid "Control 16 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 16 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:65 -#, fuzzy msgid "Control 17:" msgstr "控制柄 17:" #: ../src/live_effects/lpe-lattice2.cpp:65 -#, fuzzy msgid "Control 17 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 17 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:66 -#, fuzzy msgid "Control 18:" -msgstr "控制柄 18:" +msgstr "控制柄 15 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:66 -#, fuzzy msgid "Control 18 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 18 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:67 -#, fuzzy msgid "Control 19:" msgstr "控制柄 19:" #: ../src/live_effects/lpe-lattice2.cpp:67 -#, fuzzy msgid "Control 19 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 19 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:68 -#, fuzzy msgid "Control 20x21:" -msgstr "控制柄 20x21:" +msgstr "控制柄 20x21:" #: ../src/live_effects/lpe-lattice2.cpp:68 -#, fuzzy msgid "" "Control 20x21 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 20x21 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 20x21 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:69 -#, fuzzy msgid "Control 22x23:" -msgstr "控制柄 22x23:" +msgstr "控制柄 22x23:" #: ../src/live_effects/lpe-lattice2.cpp:69 -#, fuzzy msgid "" "Control 22x23 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 22x23 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 22x23 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:70 -#, fuzzy msgid "Control 24x26:" -msgstr "控制柄 24x26:" +msgstr "控制柄 24x26:" #: ../src/live_effects/lpe-lattice2.cpp:70 -#, fuzzy msgid "" "Control 24x26 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 24x26 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 24x26 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:71 -#, fuzzy msgid "Control 25x27:" -msgstr "控制柄 25x27:" +msgstr "控制柄 25x27:" #: ../src/live_effects/lpe-lattice2.cpp:71 -#, fuzzy msgid "" "Control 25x27 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 25x27 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 25x27 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:72 -#, fuzzy msgid "Control 28x30:" -msgstr "控制柄 28x30:" +msgstr "控制柄 28x30:" #: ../src/live_effects/lpe-lattice2.cpp:72 -#, fuzzy msgid "" "Control 28x30 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 28x30 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 28x30 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:73 -#, fuzzy msgid "Control 29x31:" -msgstr "控制柄 29x31:" +msgstr "控制柄 29x31:" #: ../src/live_effects/lpe-lattice2.cpp:73 -#, fuzzy msgid "" "Control 29x31 - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "控制柄 29x31 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 29x31 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:74 -#, fuzzy msgid "Control 32x33x34x35:" -msgstr "控制柄 32x33x34x35:" +msgstr "控制柄 32x33x34x35:" #: ../src/live_effects/lpe-lattice2.cpp:74 -#, fuzzy msgid "" "Control 32x33x34x35 - Ctrl+Alt+Click: reset, Ctrl: move along " "axes" -msgstr "控制柄 32x33x34x35 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" +msgstr "控制柄 32x33x34x35 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-lattice2.cpp:239 msgid "Reset grid" @@ -10357,14 +10282,12 @@ msgstr "é‡è¨­æ ¼ç·š" #: ../src/live_effects/lpe-lattice2.cpp:271 #: ../src/live_effects/lpe-lattice2.cpp:286 -#, fuzzy msgid "Show Points" -msgstr "排åºå移點" +msgstr "顯示點" #: ../src/live_effects/lpe-lattice2.cpp:284 -#, fuzzy msgid "Hide Points" -msgstr "éš±è—ç’°çµ" +msgstr "éš±è—點" #: ../src/live_effects/lpe-patternalongpath.cpp:63 #: ../share/extensions/pathalongpath.inx.h:10 @@ -10469,9 +10392,8 @@ msgid "Envelope deformation" msgstr "å°å¥—變形" #: ../src/live_effects/lpe-perspective-envelope.cpp:45 -#, fuzzy msgid "Overflow perspective" -msgstr "é€è¦–" +msgstr "溢æµé€è¦–" #: ../src/live_effects/lpe-perspective-envelope.cpp:46 msgid "Type" @@ -10486,36 +10408,32 @@ msgid "Top Left" msgstr "左上" #: ../src/live_effects/lpe-perspective-envelope.cpp:47 -#, fuzzy msgid "Top Left - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "Alt:鎖定控柄長度;Ctrl+Alt:沿著控柄移動" +msgstr "左上 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-perspective-envelope.cpp:48 msgid "Top Right" msgstr "å³ä¸Š" #: ../src/live_effects/lpe-perspective-envelope.cpp:48 -#, fuzzy msgid "Top Right - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "Alt:鎖定控柄長度;Ctrl+Alt:沿著控柄移動" +msgstr "å³ä¸Š - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-perspective-envelope.cpp:49 msgid "Down Left" msgstr "左下" #: ../src/live_effects/lpe-perspective-envelope.cpp:49 -#, fuzzy msgid "Down Left - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "Alt:鎖定控柄長度;Ctrl+Alt:沿著控柄移動" +msgstr "左下 - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-perspective-envelope.cpp:50 msgid "Down Right" msgstr "å³ä¸‹" #: ../src/live_effects/lpe-perspective-envelope.cpp:50 -#, fuzzy msgid "Down Right - Ctrl+Alt+Click: reset, Ctrl: move along axes" -msgstr "Alt:鎖定控柄長度;Ctrl+Alt:沿著控柄移動" +msgstr "å³ä¸‹ - Ctrl+Alt+點擊:é‡è¨­ï¼›Ctrl:沿著軸移動" #: ../src/live_effects/lpe-perspective-envelope.cpp:367 msgid "Handles:" @@ -10764,19 +10682,16 @@ msgid "By max. segment size" msgstr "ä¾ç…§æœ€å¤§ç·šæ®µé•·åº¦" #: ../src/live_effects/lpe-roughen.cpp:38 -#, fuzzy msgid "Along nodes" -msgstr "å°é½Šç¯€é»ž" +msgstr "沿著節點" #: ../src/live_effects/lpe-roughen.cpp:39 -#, fuzzy msgid "Rand" -msgstr "隨機" +msgstr "隨機數" #: ../src/live_effects/lpe-roughen.cpp:40 -#, fuzzy msgid "Retract" -msgstr "摘å–" +msgstr "撤銷" #. initialise your parameters here: #: ../src/live_effects/lpe-roughen.cpp:49 @@ -10808,14 +10723,12 @@ msgid "Global randomize" msgstr "總體隨機化" #: ../src/live_effects/lpe-roughen.cpp:61 -#, fuzzy msgid "Handles" -msgstr "控制點:" +msgstr "控制點" #: ../src/live_effects/lpe-roughen.cpp:61 -#, fuzzy msgid "Handles options" -msgstr "隨機ä½ç½®" +msgstr "控制點é¸é …" #: ../src/live_effects/lpe-roughen.cpp:63 #: ../share/extensions/jitternodes.inx.h:5 @@ -10823,22 +10736,20 @@ msgid "Shift nodes" msgstr "移動節點" #: ../src/live_effects/lpe-roughen.cpp:65 -#, fuzzy msgid "Fixed displacement" -msgstr "X ç§»ä½ï¼š" +msgstr "固定移ä½" #: ../src/live_effects/lpe-roughen.cpp:65 msgid "Fixed displacement, 1/3 of segment length" -msgstr "" +msgstr "固定移ä½ï¼Œ1/3 線段長度" #: ../src/live_effects/lpe-roughen.cpp:67 -#, fuzzy msgid "Spray Tool friendly" -msgstr "å™´ç‘工具å好設定" +msgstr "簡單好用噴ç‘工具" #: ../src/live_effects/lpe-roughen.cpp:67 msgid "For use with spray tool in copy mode" -msgstr "" +msgstr "複製模å¼ä¸­ä½¿ç”¨å™´ç‘工具" #: ../src/live_effects/lpe-roughen.cpp:121 msgid "Add nodes Subdivide each segment" @@ -10854,7 +10765,7 @@ msgstr "加強型粗糙化會加入é¡å¤–的粗糙圖層" #: ../src/live_effects/lpe-roughen.cpp:148 msgid "Options Modify options to rough" -msgstr "" +msgstr "é¸é …修改粗糙的é¸é …" #: ../src/live_effects/lpe-ruler.cpp:25 ../share/extensions/measure.inx.h:27 #: ../share/extensions/restack.inx.h:16 @@ -11005,13 +10916,12 @@ msgid "Roughly threshold:" msgstr "粗略臨界值:" #: ../src/live_effects/lpe-simplify.cpp:32 -#, fuzzy msgid "Smooth angles:" -msgstr "平滑度:" +msgstr "平滑角度:" #: ../src/live_effects/lpe-simplify.cpp:32 msgid "Max degree difference on handles to perform a smooth" -msgstr "" +msgstr "執行平滑的控制柄最大角度差值" #: ../src/live_effects/lpe-simplify.cpp:34 msgid "Paths separately" @@ -11179,36 +11089,32 @@ msgid "The (non-tapered) width of the path" msgstr "該路徑的寬度 (éžéŒåŒ–的寬度)" #: ../src/live_effects/lpe-taperstroke.cpp:74 -#, fuzzy msgid "Start offset:" -msgstr "é–‹å§‹åç§»" +msgstr "èµ·å§‹å移:" #: ../src/live_effects/lpe-taperstroke.cpp:74 msgid "Taper distance from path start" msgstr "路徑起點的éŒåŒ–è·é›¢" #: ../src/live_effects/lpe-taperstroke.cpp:75 -#, fuzzy msgid "End offset:" -msgstr "çµæŸåç§»" +msgstr "çµæŸå移:" #: ../src/live_effects/lpe-taperstroke.cpp:75 msgid "The ending position of the taper" msgstr "éŒåŒ–çš„çµæŸä½ç½®" #: ../src/live_effects/lpe-taperstroke.cpp:76 -#, fuzzy msgid "Taper smoothing:" -msgstr "éŒåŒ–平滑" +msgstr "éŒåŒ–平滑:" #: ../src/live_effects/lpe-taperstroke.cpp:76 msgid "Amount of smoothing to apply to the tapers" msgstr "套用到éŒåŒ–的平滑程度" #: ../src/live_effects/lpe-taperstroke.cpp:77 -#, fuzzy msgid "Join type:" -msgstr "接åˆé¡žåž‹" +msgstr "接åˆé¡žåž‹ï¼š" #: ../src/live_effects/lpe-taperstroke.cpp:77 msgid "Join type for non-smooth nodes" @@ -11227,89 +11133,72 @@ msgid "End point of the taper" msgstr "éŒåŒ–的末端" #: ../src/live_effects/lpe-transform_2pts.cpp:31 -#, fuzzy msgid "Elastic" -msgstr "å¡‘åƒé»åœŸ" +msgstr "彈性伸縮" #: ../src/live_effects/lpe-transform_2pts.cpp:31 -#, fuzzy msgid "Elastic transform mode" -msgstr "é¸å–和變形物件" +msgstr "彈性伸縮變形模å¼" #: ../src/live_effects/lpe-transform_2pts.cpp:32 -#, fuzzy msgid "From original width" -msgstr "複製原本路徑" +msgstr "原本路徑寬度" #: ../src/live_effects/lpe-transform_2pts.cpp:33 -#, fuzzy msgid "Lock length" -msgstr "鎖定圖層" +msgstr "鎖定長度" #: ../src/live_effects/lpe-transform_2pts.cpp:33 -#, fuzzy msgid "Lock length to current distance" -msgstr "鎖定或解除鎖定目å‰åœ–層" +msgstr "鎖定長度到目å‰è·é›¢" #: ../src/live_effects/lpe-transform_2pts.cpp:34 -#, fuzzy msgid "Lock angle" -msgstr "圓éŒè§’" +msgstr "鎖定角度" #: ../src/live_effects/lpe-transform_2pts.cpp:35 -#, fuzzy msgid "Flip horizontal" msgstr "水平翻轉" #: ../src/live_effects/lpe-transform_2pts.cpp:36 -#, fuzzy msgid "Flip vertical" msgstr "垂直翻轉" #: ../src/live_effects/lpe-transform_2pts.cpp:37 -#, fuzzy msgid "Start point" -msgstr "排åºå移點" +msgstr "起始點" #: ../src/live_effects/lpe-transform_2pts.cpp:38 -#, fuzzy msgid "End point" -msgstr "çµæŸè·¯å¾‘:" +msgstr "çµæŸé»ž" #: ../src/live_effects/lpe-transform_2pts.cpp:39 -#, fuzzy msgid "Stretch" -msgstr "強度" +msgstr "拉伸" #: ../src/live_effects/lpe-transform_2pts.cpp:39 -#, fuzzy msgid "Stretch the result" -msgstr "設定濾é¡è§£æžåº¦" +msgstr "æ‹‰ä¼¸çµæžœ" #: ../src/live_effects/lpe-transform_2pts.cpp:40 -#, fuzzy msgid "Offset from knots" -msgstr "å移點" +msgstr "ç’°çµåç§»" #: ../src/live_effects/lpe-transform_2pts.cpp:41 -#, fuzzy msgid "First Knot" -msgstr "急救" +msgstr "第一個環çµ" #: ../src/live_effects/lpe-transform_2pts.cpp:42 -#, fuzzy msgid "Last Knot" -msgstr "ç’°çµ" +msgstr "最後環çµ" #: ../src/live_effects/lpe-transform_2pts.cpp:43 -#, fuzzy msgid "Rotation helper size" -msgstr "旋轉中心" +msgstr "旋轉輔助標示尺寸" #: ../src/live_effects/lpe-transform_2pts.cpp:196 -#, fuzzy msgid "Change index of knot" -msgstr "變更節點類型" +msgstr "變更環çµç´¢å¼•" #: ../src/live_effects/lpe-transform_2pts.cpp:349 #: ../src/ui/dialog/inkscape-preferences.cpp:1623 @@ -11384,43 +11273,39 @@ msgstr "è®Šæ›´è¨ˆç®—åƒæ•¸" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:778 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:839 -#, fuzzy msgid "" "Chamfer: Ctrl+Click toggle type, Shift+Click open " "dialog, Ctrl+Alt+Click reset" msgstr "" -"倒角:Ctrl+滑鼠點擊å¯ä»¥é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯ä»¥" -"開啟å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯ä»¥é‡è¨­" +"倒角:Ctrl+滑鼠點擊å¯é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯é–‹å•Ÿ" +"å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯é‡è¨­" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:782 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:843 -#, fuzzy msgid "" "Inverse Chamfer: Ctrl+Click toggle type, Shift+Click " "open dialog, Ctrl+Alt+Click reset" msgstr "" -"倒角:Ctrl+滑鼠點擊å¯ä»¥é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯ä»¥" -"開啟å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯ä»¥é‡è¨­" +"å轉倒角:Ctrl+滑鼠點擊å¯é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯" +"開啟å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯é‡è¨­" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:786 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:847 -#, fuzzy msgid "" "Inverse Fillet: Ctrl+Click toggle type, Shift+Click " "open dialog, Ctrl+Alt+Click reset" msgstr "" -"åå‘圓角:Ctrl+滑鼠點擊å¯ä»¥é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊" -"å¯ä»¥é–‹å•Ÿå°è©±çª—,Ctrl+Alt+滑鼠點擊å¯ä»¥é‡è¨­" +"å轉圓角:Ctrl+滑鼠點擊å¯é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯" +"開啟å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯é‡è¨­" #: ../src/live_effects/parameter/filletchamferpointarray.cpp:790 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:851 -#, fuzzy msgid "" "Fillet: Ctrl+Click toggle type, Shift+Click open " "dialog, Ctrl+Alt+Click reset" msgstr "" -"圓角:Ctrl+滑鼠點擊å¯ä»¥é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯ä»¥" -"開啟å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯ä»¥é‡è¨­" +"圓角:Ctrl+滑鼠點擊å¯é–‹å•Ÿ/關閉類型,Shift+滑鼠點擊å¯é–‹å•Ÿ" +"å°è©±çª—,Ctrl+Alt+滑鼠點擊å¯é‡è¨­" #: ../src/live_effects/parameter/originalpath.cpp:67 #: ../src/live_effects/parameter/originalpatharray.cpp:155 @@ -11666,11 +11551,10 @@ msgid "Export document to an EPS file" msgstr "å°‡æ–‡ä»¶åŒ¯å‡ºæˆ EPS 檔" #: ../src/main.cpp:412 -#, fuzzy msgid "" "Choose the PostScript Level used to export. Possible choices are 2 and 3 " "(the default)" -msgstr "鏿“‡åŒ¯å‡ºè¦ä½¿ç”¨çš„ PostScript ç­‰ç´šã€‚æ­£å¸¸é¸æ“‡ 2 (é è¨­å€¼) å’Œ 3" +msgstr "鏿“‡åŒ¯å‡ºè¦ä½¿ç”¨çš„ PostScript ç­‰ç´šã€‚æ­£å¸¸é¸æ“‡ 2 å’Œ 3 (é è¨­å€¼)" #: ../src/main.cpp:414 msgid "PS Level" @@ -12276,19 +12160,16 @@ msgid "Group" msgstr "群組" #: ../src/selection-chemistry.cpp:798 -#, fuzzy msgid "No objects selected to pop out of group." -msgstr "沒有é¸å–任何物件å¯å¾žå…¶ä¸­å–得樣å¼ã€‚" +msgstr "沒有é¸å–任何物件å¯è„«é›¢ç¾¤çµ„。" #: ../src/selection-chemistry.cpp:808 -#, fuzzy msgid "Selection not in a group." -msgstr "鏿“‡è¦è§£æ•£çš„群組。" +msgstr "é¸å–é …ç›®ä¸åœ¨ç¾¤çµ„中。" #: ../src/selection-chemistry.cpp:822 -#, fuzzy msgid "Pop selection from group" -msgstr "å°‡é¸å–å€è¦–為群組(_T):" +msgstr "從群組中脫離é¸å–é …ç›®" #: ../src/selection-chemistry.cpp:830 msgid "Select a group to ungroup." @@ -12746,8 +12627,8 @@ msgstr "使用 Shift+D 找尋訊框" #, c-format msgid "%1$i objects selected of type %2$s" msgid_plural "%1$i objects selected of types %2$s" -msgstr[0] "已鏿“‡é¡žåž‹ %2$s çš„ %1$i 個物件" -msgstr[1] "已鏿“‡é¡žåž‹ %2$s çš„ %1$i 個物件" +msgstr[0] "å·²é¸å–類型 %2$s çš„ %1$i 物件" +msgstr[1] "å·²é¸å–類型 %2$s çš„ %1$i 物件" #: ../src/selection-describer.cpp:246 #, c-format @@ -12920,36 +12801,36 @@ msgid_plural "(%d characters%s)" msgstr[0] "(%d 個字元%s)" msgstr[1] "(%d 個字元%s)" -#: ../src/sp-guide.cpp:261 +#: ../src/sp-guide.cpp:262 msgid "Create Guides Around the Page" msgstr "在é é¢å‘¨åœå»ºç«‹åƒè€ƒç·š" -#: ../src/sp-guide.cpp:274 ../src/verbs.cpp:2544 +#: ../src/sp-guide.cpp:275 ../src/verbs.cpp:2544 msgid "Delete All Guides" msgstr "刪除全部åƒè€ƒç·š" #. Guide has probably been deleted and no longer has an attached namedview. -#: ../src/sp-guide.cpp:485 +#: ../src/sp-guide.cpp:486 msgid "Deleted" msgstr "已刪除" -#: ../src/sp-guide.cpp:494 +#: ../src/sp-guide.cpp:495 msgid "" "Shift+drag to rotate, Ctrl+drag to move origin, Del to " "delete" msgstr "Shift+æ‹–æ›³å¯æ—‹è½‰ï¼ŒCtrl+拖曳å¯ç§»å‹•原點,Del å¯åˆªé™¤" -#: ../src/sp-guide.cpp:498 +#: ../src/sp-guide.cpp:499 #, c-format msgid "vertical, at %s" msgstr "åž‚ç›´ï¼Œä½æ–¼ %s" -#: ../src/sp-guide.cpp:501 +#: ../src/sp-guide.cpp:502 #, c-format msgid "horizontal, at %s" msgstr "æ°´å¹³ï¼Œä½æ–¼ %s" -#: ../src/sp-guide.cpp:506 +#: ../src/sp-guide.cpp:507 #, c-format msgid "at %d degrees, through (%s,%s)" msgstr "æ–¼ %d åº¦ï¼Œç¶“éŽ (%s,%s)" @@ -13205,8 +13086,7 @@ msgstr "è«‹è‡³å°‘é¸æ“‡ 1 æ¢è·¯å¾‘來執行布林è¯é›†ã€‚" msgid "" "Unable to determine the z-order of the objects selected for " "difference, XOR, division, or path cut." -msgstr "" -"無法決定é¸å–物件的排列順åºä¾†é€²è¡Œå·®é›†ï¹‘互斥 (XOR)﹑分割或剪切路徑。" +msgstr "無法決定é¸å–物件的排列順åºä¾†é€²è¡Œå·®é›†ï¹‘互斥 (XOR)﹑分割或剪切路徑。" #: ../src/splivarot.cpp:408 msgid "" @@ -13751,19 +13631,16 @@ msgid "Selection Area" msgstr "é¸å–範åœ" #: ../src/ui/dialog/align-and-distribute.cpp:1097 -#, fuzzy msgid "Middle of selection" -msgstr "é¸å–å€çš„寬度" +msgstr "é¸å–å€ä¸­é–“" #: ../src/ui/dialog/align-and-distribute.cpp:1098 -#, fuzzy msgid "Min value" -msgstr "å­—æ¯ç·ŠæŽ’值:" +msgstr "最å°å€¼" #: ../src/ui/dialog/align-and-distribute.cpp:1099 -#, fuzzy msgid "Max value" -msgstr "清除數值" +msgstr "最大值" #: ../src/ui/dialog/calligraphic-profile-rename.cpp:40 #: ../src/ui/dialog/calligraphic-profile-rename.cpp:138 @@ -14135,11 +14012,12 @@ msgid "Initial color of tiled clones" msgstr "鋪排仿製物件的åˆå§‹é¡è‰²" #: ../src/ui/dialog/clonetiler.cpp:665 -#, fuzzy msgid "" "Initial color for clones (works only if the original has unset fill or " "stroke or on spray tool in copy mode)" -msgstr "仿製物件的åˆå§‹é¡è‰² (éœ€å°‡åŽŸå§‹ç‰©ä»¶å¡«å……æˆ–é‚Šæ¡†è¨­å®šç‚ºã€Œå–æ¶ˆå¡—繪ã€)" +msgstr "" +"仿製物件的åˆå§‹é¡è‰² (éœ€å°‡åŽŸå§‹ç‰©ä»¶å¡«å……æˆ–é‚Šæ¡†è¨­å®šç‚ºã€Œå–æ¶ˆå¡—ç¹ªã€æˆ–者噴ç‘工具使用" +"複製模å¼)" #: ../src/ui/dialog/clonetiler.cpp:680 msgid "H:" @@ -14202,28 +14080,26 @@ msgid "_Trace" msgstr "æç¹ª(_T)" #: ../src/ui/dialog/clonetiler.cpp:788 -#, fuzzy msgid "Trace the drawing under the clones/sprayed items" -msgstr "æç¹ªé‹ªæŽ’物件下é¢çš„圖畫" +msgstr "æç¹ªé‹ªæŽ’/å™´ç‘物件下é¢çš„圖畫" #: ../src/ui/dialog/clonetiler.cpp:792 -#, fuzzy msgid "" "For each clone/sprayed item, pick a value from the drawing in its location " "and apply it" -msgstr "å°æ–¼æ¯å€‹ä»¿è£½ç‰©ä»¶ï¼Œéƒ½å¾žå®ƒæ‰€åœ¨ä½ç½®çš„繪圖中å–得數值,並將其套用到仿製物件" +msgstr "æ¯å€‹ä»¿è£½/å™´ç‘物件都從它所在ä½ç½®çš„繪圖中å–得數值,並將其套用到仿製物件" #: ../src/ui/dialog/clonetiler.cpp:811 msgid "1. Pick from the drawing:" -msgstr "1. 從圖畫中汲å–:" +msgstr "1. 從圖畫中拾å–:" #: ../src/ui/dialog/clonetiler.cpp:829 msgid "Pick the visible color and opacity" -msgstr "æ±²å–å¯è¦‹è‰²å½©èˆ‡ä¸é€æ˜Žåº¦" +msgstr "拾å–å¯è¦‹è‰²å½©èˆ‡ä¸é€æ˜Žåº¦" #: ../src/ui/dialog/clonetiler.cpp:837 msgid "Pick the total accumulated opacity" -msgstr "æ±²å–æ•´é«”累加的ä¸é€æ˜Žåº¦" +msgstr "æ‹¾å–æ•´é«”累加的ä¸é€æ˜Žåº¦" #: ../src/ui/dialog/clonetiler.cpp:844 msgid "R" @@ -14231,7 +14107,7 @@ msgstr "ç´…" #: ../src/ui/dialog/clonetiler.cpp:845 msgid "Pick the Red component of the color" -msgstr "æ±²å–色彩的紅色組æˆ" +msgstr "拾å–色彩的紅色組æˆ" #: ../src/ui/dialog/clonetiler.cpp:852 msgid "G" @@ -14239,7 +14115,7 @@ msgstr "ç¶ " #: ../src/ui/dialog/clonetiler.cpp:853 msgid "Pick the Green component of the color" -msgstr "æ±²å–色彩的綠色組æˆ" +msgstr "拾å–色彩的綠色組æˆ" #: ../src/ui/dialog/clonetiler.cpp:860 msgid "B" @@ -14247,7 +14123,7 @@ msgstr "è—" #: ../src/ui/dialog/clonetiler.cpp:861 msgid "Pick the Blue component of the color" -msgstr "æ±²å–色彩的è—色組æˆ" +msgstr "拾å–色彩的è—色組æˆ" #: ../src/ui/dialog/clonetiler.cpp:868 msgctxt "Clonetiler color hue" @@ -14256,7 +14132,7 @@ msgstr "色相" #: ../src/ui/dialog/clonetiler.cpp:869 msgid "Pick the hue of the color" -msgstr "æ±²å–色相" +msgstr "拾å–色相" #: ../src/ui/dialog/clonetiler.cpp:876 msgctxt "Clonetiler color saturation" @@ -14265,7 +14141,7 @@ msgstr "飽和度" #: ../src/ui/dialog/clonetiler.cpp:877 msgid "Pick the saturation of the color" -msgstr "æ±²å–é¡è‰²é£½å’Œåº¦" +msgstr "拾å–é¡è‰²é£½å’Œåº¦" #: ../src/ui/dialog/clonetiler.cpp:884 msgctxt "Clonetiler color lightness" @@ -14274,7 +14150,7 @@ msgstr "明度" #: ../src/ui/dialog/clonetiler.cpp:885 msgid "Pick the lightness of the color" -msgstr "æ±²å–é¡è‰²äº®åº¦" +msgstr "拾å–é¡è‰²äº®åº¦" #: ../src/ui/dialog/clonetiler.cpp:895 msgid "2. Tweak the picked value:" @@ -14316,7 +14192,7 @@ msgstr "出ç¾" msgid "" "Each clone is created with the probability determined by the picked value in " "that point" -msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶ç”±è©²é»žå–得數值決定的機率來建立" +msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶ç”±è©²æ‹¾å–得數值決定的機率來建立" #: ../src/ui/dialog/clonetiler.cpp:969 msgid "Size" @@ -14324,22 +14200,21 @@ msgstr "大å°" #: ../src/ui/dialog/clonetiler.cpp:972 msgid "Each clone's size is determined by the picked value in that point" -msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶çš„大å°ç”±è©²é»žå–得數值來決定" +msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶çš„大å°ç”±è©²æ‹¾å–得數值來決定" #: ../src/ui/dialog/clonetiler.cpp:982 msgid "" "Each clone is painted by the picked color (the original must have unset fill " "or stroke)" -msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶ç”±å–å¾—çš„é¡è‰²ä¾†ç¹ªè£½ (原始物件必須解除設定填充或邊框)" +msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶ç”±å–å¾—çš„é¡è‰²ä¾†ç¹ªè£½ (原始物件必須將填充或邊框改為未設定)" #: ../src/ui/dialog/clonetiler.cpp:992 msgid "Each clone's opacity is determined by the picked value in that point" -msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶çš„ä¸é€æ˜Žåº¦ç”±è©²é»žå–得的數值來決定" +msgstr "æ¯å€‹ä»¿è£½ç‰©ä»¶çš„ä¸é€æ˜Žåº¦ç”±è©²æ‹¾å–得的數值來決定" #: ../src/ui/dialog/clonetiler.cpp:1011 -#, fuzzy msgid "Apply to tiled clones:" -msgstr "刪除鋪排的仿製物件" +msgstr "套用到鋪排仿製物件:" #: ../src/ui/dialog/clonetiler.cpp:1052 msgid "How many rows in the tiling" @@ -14381,8 +14256,7 @@ msgstr "使用已儲存的鋪排大å°å’Œä½ç½®" msgid "" "Pretend that the size and position of the tile are the same as the last time " "you tiled it (if any), instead of using the current size" -msgstr "" -"å‡å®šé‹ªæŽ’的大å°å’Œä½ç½®è·Ÿä¸Šä¸€æ¬¡ä½¿ç”¨é‹ªæŽ’æ™‚ç›¸åŒ (如果有的話)ï¼Œè€Œä¸æ˜¯ä½¿ç”¨ç›®å‰çš„大å°" +msgstr "å‡å®šé‹ªæŽ’的大å°å’Œä½ç½®è·Ÿä¸Šä¸€æ¬¡ä½¿ç”¨é‹ªæŽ’æ™‚ç›¸åŒ (如果有的話)ï¼Œè€Œä¸æ˜¯ä½¿ç”¨ç›®å‰çš„大å°" #: ../src/ui/dialog/clonetiler.cpp:1254 msgid " _Create " @@ -14544,12 +14418,12 @@ msgid "License" msgstr "授權" #: ../src/ui/dialog/document-metadata.cpp:126 -#: ../src/ui/dialog/document-properties.cpp:994 +#: ../src/ui/dialog/document-properties.cpp:1037 msgid "Dublin Core Entities" msgstr "éƒ½æŸæž—核心實體" #: ../src/ui/dialog/document-metadata.cpp:168 -#: ../src/ui/dialog/document-properties.cpp:1056 +#: ../src/ui/dialog/document-properties.cpp:1099 msgid "License" msgstr "授權" @@ -14563,15 +14437,14 @@ msgid "If unset, no antialiasing will be done on the drawing" msgstr "å¦‚æžœå–æ¶ˆè¨­å®šï¼Œå‰‡åœ–å½¢ç¹ªè£½ä¸æœƒä½¿ç”¨å鋸齒" #: ../src/ui/dialog/document-properties.cpp:119 -#, fuzzy msgid "Checkerboard background" -msgstr "棋盤格紋" +msgstr "棋盤格紋背景" #: ../src/ui/dialog/document-properties.cpp:119 msgid "" "If set, use checkerboard for background, otherwise use background color at " "full opacity." -msgstr "" +msgstr "若設定此項,背景會使用棋盤格紋,å之則使用ä¸é€æ˜Žçš„背景é¡è‰²ã€‚" #: ../src/ui/dialog/document-properties.cpp:120 msgid "Show page _border" @@ -14602,12 +14475,13 @@ msgid "Back_ground color:" msgstr "背景é¡è‰²(_G):" #: ../src/ui/dialog/document-properties.cpp:123 -#, fuzzy msgid "" "Color of the page background. Note: transparency setting ignored while " "editing if 'Checkerboard background' unset (but used when exporting to " "bitmap)." -msgstr "é é¢èƒŒæ™¯é¡è‰²ã€‚å‚™è¨»ï¼šç·¨è¼¯æ™‚æœƒå¿½ç•¥é€æ˜Žåº¦è¨­å®šå€¼ï¼Œä½†åŒ¯å‡ºæˆé»žé™£åœ–時會使用。" +msgstr "" +"é é¢èƒŒæ™¯é¡è‰²ã€‚備註:若沒有設定「棋盤格紋背景ã€å‰‡ç·¨è¼¯æ™‚æœƒå¿½ç•¥é€æ˜Žåº¦è¨­å®šå€¼ (但" +"匯出æˆé»žé™£åœ–時會使用)。" #: ../src/ui/dialog/document-properties.cpp:124 msgid "Border _color:" @@ -14622,9 +14496,8 @@ msgid "Color of the page border" msgstr "é é¢é‚Šç•Œçš„é¡è‰²" #: ../src/ui/dialog/document-properties.cpp:125 -#, fuzzy msgid "Display _units:" -msgstr "顯示單ä½" +msgstr "顯示單ä½(_U):" #. --------------------------------------------------------------- #. General snap options @@ -14808,9 +14681,8 @@ msgid "Page Size" msgstr "é é¢å°ºå¯¸" #: ../src/ui/dialog/document-properties.cpp:336 -#, fuzzy msgid "Background" -msgstr "背景" +msgstr "背景" #: ../src/ui/dialog/document-properties.cpp:339 msgid "Border" @@ -14844,139 +14716,138 @@ msgstr "å…¶ä»–" #. Inkscape::GC::release(defsRepr); #. inform the document, so we can undo #. Color Management -#: ../src/ui/dialog/document-properties.cpp:526 ../src/verbs.cpp:3020 +#: ../src/ui/dialog/document-properties.cpp:542 ../src/verbs.cpp:3020 msgid "Link Color Profile" msgstr "連çµè‰²å½©æè¿°æª”" -#: ../src/ui/dialog/document-properties.cpp:623 +#: ../src/ui/dialog/document-properties.cpp:654 msgid "Remove linked color profile" msgstr "移除已連çµçš„色彩æè¿°æª”" -#: ../src/ui/dialog/document-properties.cpp:636 +#: ../src/ui/dialog/document-properties.cpp:673 msgid "Linked Color Profiles:" msgstr "已連çµçš„色彩æè¿°æª”:" -#: ../src/ui/dialog/document-properties.cpp:638 +#: ../src/ui/dialog/document-properties.cpp:675 msgid "Available Color Profiles:" msgstr "å¯ç”¨çš„色彩æè¿°æª”:" -#: ../src/ui/dialog/document-properties.cpp:640 +#: ../src/ui/dialog/document-properties.cpp:677 msgid "Link Profile" msgstr "é€£çµæè¿°æª”" -#: ../src/ui/dialog/document-properties.cpp:643 +#: ../src/ui/dialog/document-properties.cpp:680 msgid "Unlink Profile" msgstr "å–æ¶ˆé€£çµæè¿°æª”" -#: ../src/ui/dialog/document-properties.cpp:721 +#: ../src/ui/dialog/document-properties.cpp:764 msgid "Profile Name" msgstr "æè¿°æª”å稱" -#: ../src/ui/dialog/document-properties.cpp:757 +#: ../src/ui/dialog/document-properties.cpp:800 msgid "External scripts" msgstr "外部腳本" -#: ../src/ui/dialog/document-properties.cpp:758 +#: ../src/ui/dialog/document-properties.cpp:801 msgid "Embedded scripts" msgstr "內嵌腳本" -#: ../src/ui/dialog/document-properties.cpp:763 +#: ../src/ui/dialog/document-properties.cpp:806 msgid "External script files:" msgstr "外部的腳本檔案:" -#: ../src/ui/dialog/document-properties.cpp:765 +#: ../src/ui/dialog/document-properties.cpp:808 msgid "Add the current file name or browse for a file" msgstr "åŠ å…¥ç›®å‰æª”案å稱或ç€è¦½æª”案" -#: ../src/ui/dialog/document-properties.cpp:768 -#: ../src/ui/dialog/document-properties.cpp:845 +#: ../src/ui/dialog/document-properties.cpp:811 +#: ../src/ui/dialog/document-properties.cpp:888 #: ../src/ui/widget/selected-style.cpp:357 msgid "Remove" msgstr "移除" -#: ../src/ui/dialog/document-properties.cpp:832 +#: ../src/ui/dialog/document-properties.cpp:875 msgid "Filename" msgstr "檔å" -#: ../src/ui/dialog/document-properties.cpp:840 +#: ../src/ui/dialog/document-properties.cpp:883 msgid "Embedded script files:" msgstr "內嵌的腳本檔案:" -#: ../src/ui/dialog/document-properties.cpp:842 +#: ../src/ui/dialog/document-properties.cpp:885 #: ../src/ui/dialog/objects.cpp:1894 msgid "New" msgstr "新增" -#: ../src/ui/dialog/document-properties.cpp:909 +#: ../src/ui/dialog/document-properties.cpp:952 msgid "Script id" msgstr "腳本識別碼" -#: ../src/ui/dialog/document-properties.cpp:915 +#: ../src/ui/dialog/document-properties.cpp:958 msgid "Content:" msgstr "內容:" -#: ../src/ui/dialog/document-properties.cpp:1032 +#: ../src/ui/dialog/document-properties.cpp:1075 msgid "_Save as default" msgstr "儲存æˆé è¨­å€¼(_S)" -#: ../src/ui/dialog/document-properties.cpp:1033 +#: ../src/ui/dialog/document-properties.cpp:1076 msgid "Save this metadata as the default metadata" msgstr "將此中繼資料儲存為é è¨­ä¸­ç¹¼è³‡æ–™" -#: ../src/ui/dialog/document-properties.cpp:1034 +#: ../src/ui/dialog/document-properties.cpp:1077 msgid "Use _default" msgstr "使用é è¨­å€¼(_D)" -#: ../src/ui/dialog/document-properties.cpp:1035 +#: ../src/ui/dialog/document-properties.cpp:1078 msgid "Use the previously saved default metadata here" msgstr "這裡使用上次儲存的é è¨­ä¸­ç¹¼è³‡æ–™" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1108 +#: ../src/ui/dialog/document-properties.cpp:1151 msgid "Add external script..." msgstr "加入外部腳本..." -#: ../src/ui/dialog/document-properties.cpp:1147 +#: ../src/ui/dialog/document-properties.cpp:1190 msgid "Select a script to load" msgstr "鏿“‡è¦è¼‰å…¥çš„腳本" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1175 +#: ../src/ui/dialog/document-properties.cpp:1218 msgid "Add embedded script..." msgstr "加入內嵌腳本..." #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1206 +#: ../src/ui/dialog/document-properties.cpp:1249 msgid "Remove external script" msgstr "移除外部腳本" #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1235 +#: ../src/ui/dialog/document-properties.cpp:1278 msgid "Remove embedded script" msgstr "移除內嵌腳本" #. TODO repr->set_content(_EmbeddedContent.get_buffer()->get_text()); #. inform the document, so we can undo -#: ../src/ui/dialog/document-properties.cpp:1331 +#: ../src/ui/dialog/document-properties.cpp:1374 msgid "Edit embedded script" msgstr "編輯內嵌腳本" -#: ../src/ui/dialog/document-properties.cpp:1415 +#: ../src/ui/dialog/document-properties.cpp:1458 msgid "Creation" msgstr "建立" -#: ../src/ui/dialog/document-properties.cpp:1416 +#: ../src/ui/dialog/document-properties.cpp:1459 msgid "Defined grids" msgstr "定義的格線" -#: ../src/ui/dialog/document-properties.cpp:1660 +#: ../src/ui/dialog/document-properties.cpp:1703 msgid "Remove grid" msgstr "移除格線" -#: ../src/ui/dialog/document-properties.cpp:1752 -#, fuzzy +#: ../src/ui/dialog/document-properties.cpp:1795 msgid "Changed default display unit" -msgstr "變更的文件單ä½" +msgstr "變更é è¨­é¡¯ç¤ºå–®ä½" #: ../src/ui/dialog/export.cpp:147 ../src/verbs.cpp:2887 msgid "_Page" @@ -15097,7 +14968,6 @@ msgid "Export the bitmap file with these settings" msgstr "ä¾ç…§é€™äº›è¨­å®šå€¼åŒ¯å‡ºé»žé™£åœ–檔案" #: ../src/ui/dialog/export.cpp:479 -#, fuzzy msgid "bitmap" msgstr "點陣圖" @@ -16022,8 +15892,7 @@ msgstr "" msgid "" "The feImage filter primitive fills the region with an external image " "or another part of the document." -msgstr "" -"此圖片 (feImage) 濾é¡åŸºå…ƒæœƒç”¨å¤–éƒ¨çš„å½±åƒæˆ–文件的其他部份來填充該å€åŸŸã€‚" +msgstr "此圖片 (feImage) 濾é¡åŸºå…ƒæœƒç”¨å¤–éƒ¨çš„å½±åƒæˆ–文件的其他部份來填充該å€åŸŸã€‚" #: ../src/ui/dialog/filter-effects-dialog.cpp:3026 msgid "" @@ -16066,12 +15935,12 @@ msgstr "" "åœæœƒåŠ å¼·æµ®å‡¸çš„è¦–è¦ºæ•ˆæžœï¼Œè€Œè¼ƒä½Žçš„ä¸é€æ˜Žç¯„åœå‰‡æœƒæ¸›å¼±ã€‚" #: ../src/ui/dialog/filter-effects-dialog.cpp:3042 -#, fuzzy msgid "" "The feTile filter primitive tiles a region with an input graphic. The " "source tile is defined by the filter primitive subregion of the input." msgstr "" -"此圖片 (feImage) 濾é¡åŸºå…ƒæœƒç”¨å¤–éƒ¨çš„å½±åƒæˆ–文件的其他部份來填充該å€åŸŸã€‚" +"此鋪排 (feTile) 濾é¡åŸºå…ƒæœƒç”¨è¼¸å…¥åœ–形鋪排æˆä¸€å€‹å€åŸŸã€‚鋪排的來æºç”±è¼¸å…¥çš„" +"濾é¡åŸºå…ƒå­å€åŸŸ (subregion) 定義。" #: ../src/ui/dialog/filter-effects-dialog.cpp:3046 msgid "" @@ -17221,13 +17090,12 @@ msgid "_Set spacing:" msgstr "設定間è·(_S):" #: ../src/ui/dialog/guides.cpp:47 -#, fuzzy msgid "Lo_cked" -msgstr "鎖定" +msgstr "鎖定(_C)" #: ../src/ui/dialog/guides.cpp:47 msgid "Lock the movement of guides" -msgstr "" +msgstr "鎖定åƒè€ƒç·šçš„移動" #: ../src/ui/dialog/guides.cpp:48 msgid "Rela_tive change" @@ -17341,17 +17209,16 @@ msgid "Size of dots created with Ctrl+click (relative to current stroke width)" msgstr "用 Ctrl+é»žæ“Šæ‰€å»ºç«‹çš„é»žå¤§å° (ç›¸å°æ–¼ç›®å‰çš„邊框寬度)" #: ../src/ui/dialog/inkscape-preferences.cpp:213 -#, fuzzy msgid "Base simplify:" -msgstr "簡化:" +msgstr "基本簡化:" #: ../src/ui/dialog/inkscape-preferences.cpp:213 msgid "on dynamic LPE simplify" -msgstr "" +msgstr "å‹•æ…‹å³æ™‚路徑特效簡化" #: ../src/ui/dialog/inkscape-preferences.cpp:214 msgid "Base simplify of dynamic LPE based simplify" -msgstr "" +msgstr "ä»¥ç°¡åŒ–åŠŸèƒ½ç‚ºåŸºç¤Žçš„å‹•æ…‹å³æ™‚路徑特效基本簡化" #: ../src/ui/dialog/inkscape-preferences.cpp:229 msgid "No objects selected to take the style from." @@ -17549,8 +17416,7 @@ msgstr "拖曳節點時更新輪廓" msgid "" "Update the outline when dragging or transforming nodes; if this is off, the " "outline will only update when completing a drag" -msgstr "" -"拖曳或變形節點時更新輪廓;若åœç”¨é€™é¸é …ï¼Œåªæœ‰åœ¨å®Œæˆæ‹–æ›³å‹•ä½œæ™‚æ‰æœƒæ›´æ–°è¼ªå»“" +msgstr "拖曳或變形節點時更新輪廓;若åœç”¨é€™é¸é …ï¼Œåªæœ‰åœ¨å®Œæˆæ‹–æ›³å‹•ä½œæ™‚æ‰æœƒæ›´æ–°è¼ªå»“" #: ../src/ui/dialog/inkscape-preferences.cpp:371 msgid "Update paths when dragging nodes" @@ -17560,8 +17426,7 @@ msgstr "拖曳節點時更新路徑" msgid "" "Update paths when dragging or transforming nodes; if this is off, paths will " "only be updated when completing a drag" -msgstr "" -"拖曳或變形節點時更新路徑;若åœç”¨é€™é¸é …ï¼Œåªæœ‰åœ¨å®Œæˆæ‹–æ›³å‹•ä½œæ™‚æ‰æœƒæ›´æ–°è·¯å¾‘" +msgstr "拖曳或變形節點時更新路徑;若åœç”¨é€™é¸é …ï¼Œåªæœ‰åœ¨å®Œæˆæ‹–æ›³å‹•ä½œæ™‚æ‰æœƒæ›´æ–°è·¯å¾‘" #: ../src/ui/dialog/inkscape-preferences.cpp:373 msgid "Show path direction on outlines" @@ -17671,8 +17536,7 @@ msgstr "è‰åœ–模å¼" msgid "" "If on, the sketch result will be the normal average of all sketches made, " "instead of averaging the old result with the new sketch" -msgstr "" -"若開啟,該è‰åœ–çµæžœæ˜¯å…¨éƒ¨è‰åœ–製作的普通平å‡å€¼ï¼Œè€Œä¸æ˜¯ç”¨æ–°è‰åœ–å¹³å‡ä¹‹å‰çš„çµæžœ" +msgstr "若開啟,該è‰åœ–çµæžœæ˜¯å…¨éƒ¨è‰åœ–製作的普通平å‡å€¼ï¼Œè€Œä¸æ˜¯ç”¨æ–°è‰åœ–å¹³å‡ä¹‹å‰çš„çµæžœ" #. Pen #: ../src/ui/dialog/inkscape-preferences.cpp:443 @@ -17867,9 +17731,8 @@ msgid "Armenian (hy)" msgstr "亞美尼亞語 (hy)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 -#, fuzzy msgid "Assamese (as)" -msgstr "日文 (ja)" +msgstr "阿薩姆語 (as)" #: ../src/ui/dialog/inkscape-preferences.cpp:538 msgid "Azerbaijani (az)" @@ -17896,9 +17759,8 @@ msgid "Bengali/Bangladesh (bn_BD)" msgstr "孟加拉語 / 西孟加拉 (bn)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 -#, fuzzy msgid "Bodo (brx)" -msgstr "ä¸åˆ—塔尼語 (br)" +msgstr "åšå¤šèªž (brx)" #: ../src/ui/dialog/inkscape-preferences.cpp:539 msgid "Breton (br)" @@ -17934,7 +17796,7 @@ msgstr "丹麥語 (da)" #: ../src/ui/dialog/inkscape-preferences.cpp:541 msgid "Dogri (doi)" -msgstr "" +msgstr "多格èŠèªž (doi)" #: ../src/ui/dialog/inkscape-preferences.cpp:541 msgid "Dutch (nl)" @@ -17997,9 +17859,8 @@ msgid "Galician (gl)" msgstr "加裡西亞語 (gl)" #: ../src/ui/dialog/inkscape-preferences.cpp:545 -#, fuzzy msgid "Gujarati (gu)" -msgstr "å¤å‰æ‹‰ç‰¹æ–‡" +msgstr "å¤å‰æ‹‰ç‰¹èªž (qu)" #: ../src/ui/dialog/inkscape-preferences.cpp:546 msgid "Hebrew (he)" @@ -18007,7 +17868,7 @@ msgstr "希伯來語 (he)" #: ../src/ui/dialog/inkscape-preferences.cpp:546 msgid "Hindi (hi)" -msgstr "" +msgstr "å°åœ°èªž (hi)" #: ../src/ui/dialog/inkscape-preferences.cpp:546 msgid "Hungarian (hu)" @@ -18015,7 +17876,7 @@ msgstr "匈牙利語 (hu)" #: ../src/ui/dialog/inkscape-preferences.cpp:547 msgid "Icelandic (is)" -msgstr "" +msgstr "冰島語 (is)" #: ../src/ui/dialog/inkscape-preferences.cpp:547 msgid "Indonesian (id)" @@ -18034,17 +17895,16 @@ msgid "Japanese (ja)" msgstr "日文 (ja)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 -#, fuzzy msgid "Kannada (kn)" -msgstr "åŽé‚£é”æ–‡" +msgstr "åŽé‚£é”語 (kn)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Kashmiri in Peso-Arabic script (ks@aran)" -msgstr "" +msgstr "披索阿拉伯書寫體喀什米爾語 (ks@aran)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Kashmiri in Devanagari script (ks@deva)" -msgstr "" +msgstr "迪瓦那格里書寫體喀什米爾語 (ks@deva)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Khmer (km)" @@ -18055,14 +17915,12 @@ msgid "Kinyarwanda (rw)" msgstr "金亞盧安é”語 (rw)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 -#, fuzzy msgid "Konkani (kok)" -msgstr "韓語 (ko)" +msgstr "å­”å¡å°¼èªž (kok)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 -#, fuzzy msgid "Konkani in Latin script (kok@latin)" -msgstr "塞爾維亞文 - æ‹‰ä¸ (sr@latin)" +msgstr "æ‹‰ä¸æ›¸å¯«é«”å­”å¡å°¼èªž (kok@latin)" #: ../src/ui/dialog/inkscape-preferences.cpp:549 msgid "Korean (ko)" @@ -18082,24 +17940,23 @@ msgstr "馬其頓語 (mk)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Maithili (mai)" -msgstr "" +msgstr "é‚蒂利語 (mai)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 -#, fuzzy msgid "Malayalam (ml)" -msgstr "馬拉雅拉姆文" +msgstr "馬拉雅拉姆語 (ml)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Manipuri (mni)" -msgstr "" +msgstr "曼尼普爾語 (mni)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Manipuri in Bengali script (mni@beng)" -msgstr "" +msgstr "孟加拉書寫體曼尼普爾語 (mni@beng)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Marathi (mr)" -msgstr "" +msgstr "馬拉æèªž (mr)" #: ../src/ui/dialog/inkscape-preferences.cpp:551 msgid "Mongolian (mn)" @@ -18119,7 +17976,7 @@ msgstr "æŒªå¨ Nynorsk 語 (nn)" #: ../src/ui/dialog/inkscape-preferences.cpp:553 msgid "Odia (or)" -msgstr "" +msgstr "æ­åˆ©äºžèªž (or)" #: ../src/ui/dialog/inkscape-preferences.cpp:554 msgid "Panjabi (pa)" @@ -18147,17 +18004,15 @@ msgstr "ä¿„æ–‡ (ru)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 msgid "Sanskrit (sa)" -msgstr "" +msgstr "梵語 (sa)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 -#, fuzzy msgid "Santali (sat)" -msgstr "義大利語 (it)" +msgstr "桑塔利語 (sat)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 -#, fuzzy msgid "Santali in Devanagari script (sat@deva)" -msgstr "塞爾維亞文 - æ‹‰ä¸ (sr@latin)" +msgstr "迪瓦那格里書寫體桑塔利語 (sat@deva)" #: ../src/ui/dialog/inkscape-preferences.cpp:556 msgid "Serbian (sr)" @@ -18169,12 +18024,11 @@ msgstr "塞爾維亞文 - æ‹‰ä¸ (sr@latin)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Sindhi (sd)" -msgstr "" +msgstr "信德語 (sd)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 -#, fuzzy msgid "Sindhi in Devanagari script (sd@deva)" -msgstr "塞爾維亞文 - æ‹‰ä¸ (sr@latin)" +msgstr "迪瓦那格里書寫體信德語 (sd@deva)" #: ../src/ui/dialog/inkscape-preferences.cpp:557 msgid "Slovak (sk)" @@ -18197,9 +18051,8 @@ msgid "Swedish (sv)" msgstr "瑞典語 (sv)" #: ../src/ui/dialog/inkscape-preferences.cpp:558 -#, fuzzy msgid "Tamil (ta)" -msgstr "塔米爾文" +msgstr "å¦ç±³çˆ¾èªž (ta)" #: ../src/ui/dialog/inkscape-preferences.cpp:558 msgid "Telugu (te)" @@ -18219,7 +18072,7 @@ msgstr "çƒå…‹è˜­èªž (uk)" #: ../src/ui/dialog/inkscape-preferences.cpp:559 msgid "Urdu (ur)" -msgstr "" +msgstr "çƒçˆ¾éƒ½èªž (ur)" #: ../src/ui/dialog/inkscape-preferences.cpp:560 msgid "Vietnamese (vi)" @@ -18234,28 +18087,24 @@ msgid "Set the language for menus and number formats" msgstr "設定é¸å–®çš„語言和數字的格å¼" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Larger" -msgstr "大" +msgstr "更大" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Large" msgstr "大" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Small" msgstr "å°" #: ../src/ui/dialog/inkscape-preferences.cpp:616 -#, fuzzy msgctxt "Icon size" msgid "Smaller" -msgstr "較å°" +msgstr "æ›´å°" #: ../src/ui/dialog/inkscape-preferences.cpp:621 msgid "Toolbox icon size:" @@ -18436,19 +18285,16 @@ msgid "Aggressive" msgstr "ç©æ¥µ" #: ../src/ui/dialog/inkscape-preferences.cpp:702 -#, fuzzy msgctxt "Window size" msgid "Small" msgstr "å°" #: ../src/ui/dialog/inkscape-preferences.cpp:702 -#, fuzzy msgctxt "Window size" msgid "Large" msgstr "大" #: ../src/ui/dialog/inkscape-preferences.cpp:702 -#, fuzzy msgctxt "Window size" msgid "Maximized" msgstr "最大化" @@ -18761,8 +18607,7 @@ msgstr "使用命åé¡è‰²" msgid "" "If set, write the CSS name of the color when available (e.g. 'red' or " "'magenta') instead of the numeric value" -msgstr "" -"若設定,å¯ç”¨ (例如:'red' 或 'magenta') 時寫入é¡è‰²çš„ CSS åç¨±è€Œä¸æ˜¯æ•¸å€¼" +msgstr "若設定,å¯ç”¨ (例如:'red' 或 'magenta') 時寫入é¡è‰²çš„ CSS åç¨±è€Œä¸æ˜¯æ•¸å€¼" #: ../src/ui/dialog/inkscape-preferences.cpp:928 msgid "XML formatting" @@ -18941,8 +18786,7 @@ msgstr "編輯階段" msgid "" "Check attributes and style properties while editing SVG files (may slow down " "Inkscape, mostly useful for debugging)" -msgstr "" -"編輯 SVG 檔案時檢查屬性值和樣å¼å±¬æ€§ (å¯èƒ½æœƒè®“ Inkscape 變慢,大多用來除錯)" +msgstr "編輯 SVG 檔案時檢查屬性值和樣å¼å±¬æ€§ (å¯èƒ½æœƒè®“ Inkscape 變慢,大多用來除錯)" #: ../src/ui/dialog/inkscape-preferences.cpp:988 msgid "Writing" @@ -19076,7 +18920,7 @@ msgstr "在 CMYK -> CMYK è½‰æ›æ™‚ä¿ç•™é»‘色色版" #: ../src/ui/dialog/inkscape-preferences.cpp:1091 #: ../src/ui/widget/color-icc-selector.cpp:394 -#: ../src/ui/widget/color-icc-selector.cpp:685 +#: ../src/ui/widget/color-icc-selector.cpp:699 msgid "" msgstr "<ç„¡>" @@ -19190,7 +19034,7 @@ msgstr "" #: ../src/ui/dialog/inkscape-preferences.cpp:1189 msgid "Color stock markers the same color as object" -msgstr "彩色é…備標記與物件é¡è‰²ç›¸åŒ" +msgstr "彩色 stock 標記與物件é¡è‰²ç›¸åŒ" #: ../src/ui/dialog/inkscape-preferences.cpp:1190 msgid "Color custom markers the same color as object" @@ -19398,13 +19242,12 @@ msgstr "" "畫布的內å´" #: ../src/ui/dialog/inkscape-preferences.cpp:1266 -#, fuzzy msgid "Mouse move pans when Space is pressed" -msgstr "æŒ‰è‘—ç©ºç™½éµæ™‚滑鼠左éµå¯å¹³ç§»ç•«å¸ƒ" +msgstr "æŒ‰è‘—ç©ºç™½éµæ™‚滑鼠å¯å¹³ç§»ç•«å¸ƒ" #: ../src/ui/dialog/inkscape-preferences.cpp:1268 msgid "When on, pressing and holding Space and dragging pans canvas" -msgstr "" +msgstr "開啟時,按ä½ç©ºç™½éµä¸¦æ‹–曳平移畫布" #: ../src/ui/dialog/inkscape-preferences.cpp:1269 msgid "Mouse wheel zooms by default" @@ -19424,9 +19267,8 @@ msgstr "æ²å‹•" #. Snapping options #: ../src/ui/dialog/inkscape-preferences.cpp:1275 -#, fuzzy msgid "Snap indicator" -msgstr "啟用貼齊指標" +msgstr "貼齊指標" #: ../src/ui/dialog/inkscape-preferences.cpp:1277 msgid "Enable snap indicator" @@ -19438,17 +19280,17 @@ msgstr "貼齊之後,於已貼齊的點上繪製符號" #: ../src/ui/dialog/inkscape-preferences.cpp:1284 msgid "Snap indicator persistence (in seconds):" -msgstr "" +msgstr "貼齊標示æŒçºŒæ™‚é–“ (å–®ä½ç‚ºç§’):" #: ../src/ui/dialog/inkscape-preferences.cpp:1285 msgid "" "Controls how long the snap indicator message will be shown, before it " "disappears" -msgstr "" +msgstr "控制貼齊標示訊æ¯åœ¨æ¶ˆå¤±å‰æŒçºŒé¡¯ç¤ºçš„æ™‚é–“" #: ../src/ui/dialog/inkscape-preferences.cpp:1287 msgid "What should snap" -msgstr "" +msgstr "貼齊的æ¢ä»¶" #: ../src/ui/dialog/inkscape-preferences.cpp:1289 msgid "Only snap the node closest to the pointer" @@ -19481,18 +19323,15 @@ msgid "" "When dragging a knot along a constraint line, then snap the position of the " "mouse pointer instead of snapping the projection of the knot onto the " "constraint line" -msgstr "" -"沿著é™å®šç›´ç·šæ‹–曳節點時,貼齊滑鼠游標的ä½ç½®è€Œä¸æ˜¯å‘é™å®šç·šä¾†è²¼é½Šç’°çµçš„çªèµ·éƒ¨ä½" +msgstr "沿著é™å®šç›´ç·šæ‹–曳節點時,貼齊滑鼠游標的ä½ç½®è€Œä¸æ˜¯å‘é™å®šç·šä¾†è²¼é½Šç’°çµçš„çªèµ·éƒ¨ä½" #: ../src/ui/dialog/inkscape-preferences.cpp:1301 -#, fuzzy msgid "Delayed snap" -msgstr "始終貼齊" +msgstr "å»¶é²å¼è²¼é½Š" #: ../src/ui/dialog/inkscape-preferences.cpp:1304 -#, fuzzy msgid "Delay (in seconds):" -msgstr "å»¶é² (毫秒):" +msgstr "å»¶é² (å–®ä½ç‚ºç§’):" #: ../src/ui/dialog/inkscape-preferences.cpp:1305 msgid "" @@ -19791,8 +19630,7 @@ msgstr "MiB" msgid "" "Set the amount of memory per document which can be used to store rendered " "parts of the drawing for later reuse; set to zero to disable caching" -msgstr "" -"設定æ¯ä»½æ–‡ä»¶å­˜å–ç¨å€™å¯é‡è¤‡ä½¿ç”¨çš„圖畫繪算部分記憶體容é‡ï¼›è¨­å®šç‚ºé›¶å¯åœç”¨å¿«å–" +msgstr "設定æ¯ä»½æ–‡ä»¶å­˜å–ç¨å€™å¯é‡è¤‡ä½¿ç”¨çš„圖畫繪算部分記憶體容é‡ï¼›è¨­å®šç‚ºé›¶å¯åœç”¨å¿«å–" #. blur quality #. filter quality @@ -19830,8 +19668,7 @@ msgstr "高斯模糊顯示å“質" msgid "" "Best quality, but display may be very slow at high zooms (bitmap export " "always uses best quality)" -msgstr "" -"最佳å“質,於高å€ç•«é¢ç¸®æ”¾æ™‚顯示也許會éžå¸¸æ…¢ (點陣圖匯出時會自動使用最佳å“質)" +msgstr "最佳å“質,於高å€ç•«é¢ç¸®æ”¾æ™‚顯示也許會éžå¸¸æ…¢ (點陣圖匯出時會自動使用最佳å“質)" #: ../src/ui/dialog/inkscape-preferences.cpp:1451 #: ../src/ui/dialog/inkscape-preferences.cpp:1475 @@ -19958,12 +19795,10 @@ msgid "Bitmaps" msgstr "點陣圖" #: ../src/ui/dialog/inkscape-preferences.cpp:1549 -#, fuzzy msgid "" "Select a file of predefined shortcuts to use. Any customized shortcuts you " "create will be added separately to " -msgstr "" -"鏿“‡è¦ä½¿ç”¨çš„é å…ˆå®šç¾©å¿«æ·éµæª”案。任何你建立的自訂快æ·éµéƒ½æœƒå€‹åˆ¥åŠ å…¥åˆ°è©²æª”æ¡ˆ" +msgstr "鏿“‡è¦ä½¿ç”¨çš„é å…ˆå®šç¾©å¿«æ·éµæª”案。任何你建立的自訂快æ·éµéƒ½æœƒå€‹åˆ¥åŠ å…¥åˆ°è©²æª”æ¡ˆ" #: ../src/ui/dialog/inkscape-preferences.cpp:1552 msgid "Shortcut file:" @@ -20081,8 +19916,7 @@ msgstr "é å…ˆç¹ªç®—命å圖示" msgid "" "When on, named icons will be rendered before displaying the ui. This is for " "working around bugs in GTK+ named icon notification" -msgstr "" -"開啟時,顯示使用介é¢å‰æœƒç¹ªç®—命å圖示。這是為了é¿é–‹åœ¨ GTK+ 命å圖示通知的錯誤" +msgstr "開啟時,顯示使用介é¢å‰æœƒç¹ªç®—命å圖示。這是為了é¿é–‹åœ¨ GTK+ 命å圖示通知的錯誤" #: ../src/ui/dialog/inkscape-preferences.cpp:1977 msgid "System info" @@ -20268,19 +20102,16 @@ msgid "None" msgstr "ç„¡" #: ../src/ui/dialog/knot-properties.cpp:59 -#, fuzzy msgid "Position X:" -msgstr "ä½ç½®ï¼š" +msgstr "ä½ç½® X:" #: ../src/ui/dialog/knot-properties.cpp:66 -#, fuzzy msgid "Position Y:" -msgstr "ä½ç½®ï¼š" +msgstr "ä½ç½® Y:" #: ../src/ui/dialog/knot-properties.cpp:120 -#, fuzzy msgid "Modify Knot Position" -msgstr "修改節點ä½ç½®" +msgstr "修改環çµä½ç½®" #: ../src/ui/dialog/knot-properties.cpp:121 #: ../src/ui/dialog/layer-properties.cpp:411 @@ -20290,14 +20121,14 @@ msgid "_Move" msgstr "移動(_M)" #: ../src/ui/dialog/knot-properties.cpp:180 -#, fuzzy, c-format +#, c-format msgid "Position X (%s):" -msgstr "ä½ç½® (%):" +msgstr "ä½ç½® X (%s):" #: ../src/ui/dialog/knot-properties.cpp:181 -#, fuzzy, c-format +#, c-format msgid "Position Y (%s):" -msgstr "ä½ç½® (%):" +msgstr "ä½ç½® Y (%s):" #: ../src/ui/dialog/layer-properties.cpp:55 msgid "Layer name:" @@ -20386,9 +20217,8 @@ msgid "Lock other layers" msgstr "鎖定其他圖層" #: ../src/ui/dialog/layers.cpp:730 -#, fuzzy msgid "Move layer" -msgstr "移動的圖層" +msgstr "移動圖層" #: ../src/ui/dialog/layers.cpp:892 msgctxt "Layers" @@ -20506,17 +20336,14 @@ msgid "_Modify" msgstr "修改(_M)" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:201 -#, fuzzy msgid "Radius" -msgstr "åŠå¾‘:" +msgstr "åŠå¾‘" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:203 -#, fuzzy msgid "Radius approximated" msgstr "è¿‘ä¼¼åŠå¾‘" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:206 -#, fuzzy msgid "Knot distance" msgstr "ç’°çµè·é›¢" @@ -20525,9 +20352,8 @@ msgid "Position (%):" msgstr "ä½ç½® (%):" #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:216 -#, fuzzy msgid "%1:" -msgstr "k1:" +msgstr "%1:" #: ../src/ui/dialog/lpe-powerstroke-properties.cpp:122 msgid "Modify Node Position" @@ -20729,9 +20555,8 @@ msgid "Set object description" msgstr "設定物件æè¿°" #: ../src/ui/dialog/object-properties.cpp:535 -#, fuzzy msgid "Set image rendering option" -msgstr "è£ç½®è‰²å½©å°æ‡‰æ–¹å¼ï¼š" +msgstr "設定影åƒç¹ªç®—é¸é …" #: ../src/ui/dialog/object-properties.cpp:554 msgid "Lock object" @@ -20801,67 +20626,64 @@ msgstr "設定物件模糊" #: ../src/ui/dialog/objects.cpp:1621 msgctxt "Visibility" msgid "V" -msgstr "" +msgstr "å¯è¦‹åº¦(V)" #: ../src/ui/dialog/objects.cpp:1622 -#, fuzzy msgctxt "Lock" msgid "L" -msgstr "明度" +msgstr "鎖定(L)" #: ../src/ui/dialog/objects.cpp:1623 msgctxt "Type" msgid "T" -msgstr "" +msgstr "類型(T)" #: ../src/ui/dialog/objects.cpp:1624 -#, fuzzy msgctxt "Clip and mask" msgid "CM" -msgstr "CMS" +msgstr "è£å‰ªå’Œé®ç½©(CM)" #: ../src/ui/dialog/objects.cpp:1625 -#, fuzzy msgctxt "Highlight" msgid "HL" -msgstr "HSL" +msgstr "高亮度顯示(HL)" #: ../src/ui/dialog/objects.cpp:1626 -#, fuzzy msgid "Label" -msgstr "標籤:" +msgstr "標籤" #. In order to get tooltips on header, we must create our own label. #: ../src/ui/dialog/objects.cpp:1668 -#, fuzzy msgid "Toggle visibility of Layer, Group, or Object." -msgstr "切æ›ç›®å‰åœ–層的隱ç¾ç‹€æ…‹" +msgstr "切æ›åœ–層ã€ç¾¤çµ„ã€ç‰©ä»¶çš„éš±ç¾ç‹€æ…‹ã€‚" #: ../src/ui/dialog/objects.cpp:1681 msgid "Toggle lock of Layer, Group, or Object." -msgstr "" +msgstr "開啟/關閉圖層ã€ç¾¤çµ„ã€ç‰©ä»¶çš„鎖定狀態。" #: ../src/ui/dialog/objects.cpp:1693 msgid "" "Type: Layer, Group, or Object. Clicking on Layer or Group icon, toggles " "between the two types." msgstr "" +"類型:圖層ã€ç¾¤çµ„或物件。在圖層或圖群組圖示上點擊滑鼠左éµï¼Œå¯åœ¨å…©ç¨®é¡žåž‹ä¹‹é–“進" +"行切æ›ã€‚" #: ../src/ui/dialog/objects.cpp:1712 msgid "Is object clipped and/or masked?" -msgstr "" +msgstr "物件有套用è£å‰ªæˆ–é®ç½©å—Žï¼Ÿ" #: ../src/ui/dialog/objects.cpp:1723 msgid "" "Highlight color of outline in Node tool. Click to set. If alpha is zero, use " "inherited color." -msgstr "" +msgstr "節點工具中外框的高亮度顯示é¡è‰²ã€‚點擊å¯è¨­å®šã€‚å¦‚æžœé€æ˜Žå€¼ç‚ºé›¶ï¼Œä½¿ç”¨ç¹¼æ‰¿çš„é¡è‰²ã€‚" #: ../src/ui/dialog/objects.cpp:1734 msgid "" "Layer/Group/Object label (inkscape:label). Double-click to set. Default " "value is object 'id'." -msgstr "" +msgstr "圖層/群組/物件標籤 (inkscape:label)。點擊兩下å¯è¨­å®šã€‚é è¨­å€¼æ˜¯ç‰©ä»¶ã€Œè­˜åˆ¥ç¢¼ã€ã€‚" #: ../src/ui/dialog/objects.cpp:1831 msgid "Add layer..." @@ -20884,33 +20706,28 @@ msgid "Collapse All" msgstr "全部折疊" #: ../src/ui/dialog/objects.cpp:1892 -#, fuzzy msgid "Rename" -msgstr "釿–°å‘½å(_R)" +msgstr "釿–°å‘½å" #: ../src/ui/dialog/objects.cpp:1898 msgid "Solo" -msgstr "" +msgstr "å–®ç¨é¡¯ç¤º" #: ../src/ui/dialog/objects.cpp:1899 -#, fuzzy msgid "Show All" -msgstr "顯示:" +msgstr "顯示全部" #: ../src/ui/dialog/objects.cpp:1900 -#, fuzzy msgid "Hide All" -msgstr "å…¨éƒ¨å–æ¶ˆéš±è—" +msgstr "éš±è—全部" #: ../src/ui/dialog/objects.cpp:1904 -#, fuzzy msgid "Lock Others" -msgstr "鎖定其他圖層" +msgstr "鎖定其他" #: ../src/ui/dialog/objects.cpp:1905 -#, fuzzy msgid "Lock All" -msgstr "全部解除鎖定" +msgstr "鎖定全部" #. LockAndHide #: ../src/ui/dialog/objects.cpp:1906 ../src/verbs.cpp:3011 @@ -20918,26 +20735,22 @@ msgid "Unlock All" msgstr "全部解除鎖定" #: ../src/ui/dialog/objects.cpp:1910 -#, fuzzy msgid "Up" -msgstr "上一層" +msgstr "上移" #: ../src/ui/dialog/objects.cpp:1911 -#, fuzzy msgid "Down" -msgstr "左下" +msgstr "下移" #: ../src/ui/dialog/objects.cpp:1920 -#, fuzzy msgid "Set Clip" -msgstr "設定è£å‰ª(_I)" +msgstr "設定è£å‰ª" #. will never be implemented #. _watching.push_back( &_addPopupItem( targetDesktop, SP_VERB_OBJECT_SET_INVERSE_CLIPPATH, 0, "Set Inverse Clip", (int)BUTTON_SETINVCLIP ) ); #: ../src/ui/dialog/objects.cpp:1926 -#, fuzzy msgid "Unset Clip" -msgstr "設定è£å‰ª(_I)" +msgstr "å–æ¶ˆè¨­å®šè£å‰ª" #. Set mask #: ../src/ui/dialog/objects.cpp:1930 ../src/ui/interface.cpp:1754 @@ -20945,9 +20758,8 @@ msgid "Set Mask" msgstr "設定é®ç½©" #: ../src/ui/dialog/objects.cpp:1931 -#, fuzzy msgid "Unset Mask" -msgstr "設定é®ç½©" +msgstr "å–æ¶ˆè¨­å®šé®ç½©" #: ../src/ui/dialog/objects.cpp:1953 msgid "Select Highlight Color" @@ -21108,40 +20920,34 @@ msgid "Trace pixel art" msgstr "æç¹ªåƒç´ åœ–案" #: ../src/ui/dialog/polar-arrange-tab.cpp:41 -#, fuzzy msgctxt "Polar arrange tab" msgid "Y coordinate of the center" -msgstr "é¸å–節點的 Y 忍™" +msgstr "中心點的 Y 忍™" #: ../src/ui/dialog/polar-arrange-tab.cpp:42 -#, fuzzy msgctxt "Polar arrange tab" msgid "X coordinate of the center" -msgstr "é¸å–節點的 X 忍™" +msgstr "中心點的 X 忍™" #: ../src/ui/dialog/polar-arrange-tab.cpp:43 -#, fuzzy msgctxt "Polar arrange tab" msgid "Y coordinate of the radius" -msgstr "é¸å–節點的 Y 忍™" +msgstr "åŠå¾‘çš„ Y 忍™" #: ../src/ui/dialog/polar-arrange-tab.cpp:44 -#, fuzzy msgctxt "Polar arrange tab" msgid "X coordinate of the radius" -msgstr "é¸å–節點的 X 忍™" +msgstr "åŠå¾‘çš„ X 忍™" #: ../src/ui/dialog/polar-arrange-tab.cpp:45 -#, fuzzy msgctxt "Polar arrange tab" msgid "Starting angle" -msgstr "旋轉角度:" +msgstr "起始角度" #: ../src/ui/dialog/polar-arrange-tab.cpp:46 -#, fuzzy msgctxt "Polar arrange tab" msgid "End angle" -msgstr "圓éŒè§’" +msgstr "çµæŸè§’度" #: ../src/ui/dialog/polar-arrange-tab.cpp:48 msgctxt "Polar arrange tab" @@ -21179,13 +20985,11 @@ msgid "Parameterized:" msgstr "åƒæ•¸åŒ– :" #: ../src/ui/dialog/polar-arrange-tab.cpp:83 -#, fuzzy msgctxt "Polar arrange tab" msgid "Center X/Y:" msgstr "中心 X/Y:" #: ../src/ui/dialog/polar-arrange-tab.cpp:105 -#, fuzzy msgctxt "Polar arrange tab" msgid "Radius X/Y:" msgstr "åŠå¾‘ X/Y:" @@ -21445,7 +21249,7 @@ msgstr "å­—åž‹(_F)" #: ../src/ui/dialog/svg-fonts-dialog.cpp:921 msgid "_Global Settings" -msgstr "整體設定值(_G)" +msgstr "總體設定值(_G)" #: ../src/ui/dialog/svg-fonts-dialog.cpp:922 msgid "_Glyphs" @@ -21584,16 +21388,14 @@ msgid "By: " msgstr "便“šï¼š" #: ../src/ui/dialog/text-edit.cpp:72 -#, fuzzy msgid "_Variants" -msgstr "變化é‡" +msgstr "變化é‡(_V)" #: ../src/ui/dialog/text-edit.cpp:73 msgid "Set as _default" msgstr "設為é è¨­(_D)" #: ../src/ui/dialog/text-edit.cpp:87 -#, fuzzy msgid "AaBbCcIiPpQq12369$€¢?.;/()" msgstr "AaBbCcIiPpQq12369$€¢?.;/()" @@ -21627,9 +21429,8 @@ msgid "Vertical text" msgstr "直書" #: ../src/ui/dialog/text-edit.cpp:130 ../src/ui/dialog/text-edit.cpp:131 -#, fuzzy msgid "Spacing between baselines (percent of font size)" -msgstr "æ¯ä¸€è¡Œä¹‹é–“çš„è·é›¢ (字型大å°çš„百分比)" +msgstr "基準線之間的è·é›¢ (字型大å°çš„百分比)" #: ../src/ui/dialog/text-edit.cpp:147 msgid "Text path offset" @@ -22251,9 +22052,8 @@ msgstr "進入群組 #%1" #. Pop selection out of group #: ../src/ui/interface.cpp:1528 -#, fuzzy msgid "_Pop selection out of group" -msgstr "å°‡é¸å–å€è¦–為群組(_T):" +msgstr "å°‡é¸å–項目脫離群組(_P)" #. Item dialog #: ../src/ui/interface.cpp:1656 ../src/verbs.cpp:2940 @@ -22420,8 +22220,7 @@ msgstr "調整垂直圓角åŠå¾‘;按著 Ctrl å¯è®“æ°´å¹³åŠå¾‘ msgid "" "Adjust the width and height of the rectangle; with Ctrl to " "lock ratio or stretch in one dimension only" -msgstr "" -"調整矩形的寬度和高度;按著 Ctrl å¯éŽ–å®šæ¯”ä¾‹æˆ–åªä¼¸å±•單一尺寸" +msgstr "調整矩形的寬度和高度;按著 Ctrl å¯éŽ–å®šæ¯”ä¾‹æˆ–åªä¼¸å±•單一尺寸" #: ../src/ui/object-edit.cpp:712 ../src/ui/object-edit.cpp:716 #: ../src/ui/object-edit.cpp:720 ../src/ui/object-edit.cpp:724 @@ -22517,10 +22316,9 @@ msgid "Drag curve" msgstr "拖曳曲線" #: ../src/ui/tool/curve-drag-point.cpp:192 -#, fuzzy msgctxt "Path segment tip" msgid "Shift: drag to open or move BSpline handles" -msgstr "Shift:移動節點控柄" +msgstr "Shift:拖曳å¯é–‹å•Ÿæˆ–ç§»å‹•è²æ°é›²å½¢ç·šæŽ§åˆ¶æŸ„" #: ../src/ui/tool/curve-drag-point.cpp:196 msgctxt "Path segment tip" @@ -22533,14 +22331,13 @@ msgid "Ctrl+Alt: click to insert a node" msgstr "Ctrl+Altï¼šé»žæ“Šå¯æ’入節點" #: ../src/ui/tool/curve-drag-point.cpp:204 -#, fuzzy msgctxt "Path segment tip" msgid "" "BSpline segment: drag to shape the segment, doubleclick to insert " "node, click to select (more: Shift, Ctrl+Alt)" msgstr "" -"è²èŒ²æ›²ç·šç·šæ®µï¼šæ‹–æ›³å¯æ”¹è®Šç·šæ®µçš„å½¢ç‹€ï¼Œé»žæ“Šå…©ä¸‹å¯æ’入節點,點擊å¯é¸å– (æ›´" -"多:Shift, Ctrl+Alt)" +"è²æ°é›²å½¢ç·šç·šæ®µï¼šæ‹–æ›³å¯æ”¹è®Šç·šæ®µçš„å½¢ç‹€ï¼Œé»žæ“Šå…©ä¸‹å¯æ’入節點,點擊å¯é¸å– " +"(更多:Shift, Ctrl+Alt)" #: ../src/ui/tool/curve-drag-point.cpp:209 msgctxt "Path segment tip" @@ -22713,10 +22510,9 @@ msgid "" msgstr "Shift+Ctrl:貼齊旋轉角度為 %g° éžå¢žä¸¦åŒæ™‚旋轉控制柄" #: ../src/ui/tool/node.cpp:529 -#, fuzzy msgctxt "Path handle tip" msgid "Ctrl: Snap handle to steps defined in BSpline Live Path Effect" -msgstr "Ctrl: åœ¨è²æ°é›²å½¢ç·šå³æ™‚特效中ä¾ç…§æœ¬èº«å¯¦éš›çš„階數移動控制柄" +msgstr "Ctrl: ä»¥è²æ°é›²å½¢ç·šå³æ™‚特效中定義的階數貼齊控制柄" #: ../src/ui/tool/node.cpp:532 #, c-format @@ -22741,12 +22537,14 @@ msgid "Auto node handle: drag to convert to smooth node (%s)" msgstr "自動節點控制柄:拖曳å¯è½‰æ›æˆå¹³æ»‘節點 (%s)" #: ../src/ui/tool/node.cpp:554 -#, fuzzy, c-format +#, c-format msgctxt "Path handle tip" msgid "" "BSpline node handle: Shift to drag, double click to reset (%s). %g " "power" -msgstr "è²æ°ç¯€é»žæŽ§åˆ¶æŸ„:Shift éµå¯ä»¥æ‹–曳,滑鼠點擊兩下å¯ä»¥é‡è¨­ (%s)" +msgstr "" +"è²æ°é›²å½¢ç·šç¯€é»žæŽ§åˆ¶æŸ„:Shift éµå¯ä»¥æ‹–曳,滑鼠點擊兩下å¯ä»¥é‡è¨­ (%s)。%g" +"力é‡" #: ../src/ui/tool/node.cpp:574 #, c-format @@ -22786,13 +22584,14 @@ msgid "%s: drag to shape the path (more: Shift, Ctrl, Alt)" msgstr "%sï¼šæ‹–æ›³å¯æ”¹è®Šè·¯å¾‘的形狀 (更進一步:Shift, Ctrl, Alt)" #: ../src/ui/tool/node.cpp:1451 -#, fuzzy, c-format +#, c-format msgctxt "Path node tip" msgid "" "BSpline node: drag to shape the path (more: Shift, Ctrl, Alt). %g " "power" msgstr "" -"è²æ°é›²å½¢ç·šï¼š%g 權é‡ï¼Œæ‹–æ›³å¯æ”¹è®Šè·¯å¾‘的形狀 (更進一步:Shift, Ctrl, Alt)" +"è²æ°é›²å½¢ç·šï¼š%g 權é‡ï¼Œæ‹–æ›³å¯æ”¹è®Šè·¯å¾‘的形狀 (更進一步:Shift, Ctrl, " +"Alt)。%g力é‡" #: ../src/ui/tool/node.cpp:1454 #, c-format @@ -22815,14 +22614,14 @@ msgstr "" "Alt)" #: ../src/ui/tool/node.cpp:1461 -#, fuzzy, c-format +#, c-format msgctxt "Path node tip" msgid "" "BSpline node: drag to shape the path, click to select only this node " "(more: Shift, Ctrl, Alt). %g power" msgstr "" "è²æ°é›²å½¢ç·šç¯€é»žï¼šæ‹–æ›³å¯æ”¹è®Šè·¯å¾‘的形狀,點擊å¯ä»¥åªé¸å–該節點 (更進一步:" -"Shift, Ctrl, Alt)" +"Shift, Ctrl, Alt)。%g 力é‡" #: ../src/ui/tool/node.cpp:1474 #, c-format @@ -23003,8 +22802,7 @@ msgstr "拖曳ã€é»žæ“Šæˆ–滾動滑鼠滾輪來噴ç‘é¸å– msgid "" "Drag to create a rectangle. Drag controls to round corners and " "resize. Click to select." -msgstr "" -"拖曳å¯å»ºç«‹çŸ©å½¢ã€‚拖曳控制點å¯èª¿æ•´åœ“è§’åŠå¤§å°ã€‚點擊å¯é¸å–。" +msgstr "拖曳å¯å»ºç«‹çŸ©å½¢ã€‚拖曳控制點å¯èª¿æ•´åœ“è§’åŠå¤§å°ã€‚點擊å¯é¸å–。" #: ../src/ui/tools-switch.cpp:106 msgid "" @@ -23026,8 +22824,7 @@ msgstr "" msgid "" "Drag to create a star. Drag controls to edit the star shape. " "Click to select." -msgstr "" -"拖曳å¯å»ºç«‹æ˜Ÿå½¢ã€‚拖曳控制點å¯ç·¨è¼¯æ˜Ÿå½¢çš„形狀。點擊å¯é¸å–。" +msgstr "拖曳å¯å»ºç«‹æ˜Ÿå½¢ã€‚拖曳控制點å¯ç·¨è¼¯æ˜Ÿå½¢çš„形狀。點擊å¯é¸å–。" #: ../src/ui/tools-switch.cpp:109 msgid "" @@ -23103,7 +22900,7 @@ msgid "" "to copy the color under mouse to clipboard" msgstr "" "點擊å¯è¨­å®šå¡«å……,Shift+click å¯è¨­å®šé‚Šæ¡†ï¼›æ‹–曳å¯è¨­å®šå€åŸŸä¸­" -"的平å‡é¡è‰²ï¼›æŒ‰è‘— Alt 坿±²å–å相é¡è‰²ï¼›Ctrl+C å¯å°‡æ»‘鼠下方的é¡è‰²" +"的平å‡é¡è‰²ï¼›æŒ‰è‘— Alt 坿‹¾å–å相é¡è‰²ï¼›Ctrl+C å¯å°‡æ»‘鼠下方的é¡è‰²" "複製到剪貼簿" #: ../src/ui/tools-switch.cpp:119 @@ -23260,7 +23057,7 @@ msgstr "放開滑鼠éµä¾†è¨­å®šé¡è‰²ã€‚" #: ../src/ui/tools/dropper-tool.cpp:322 msgid "Set picked color" -msgstr "設定點å–çš„é¡è‰²" +msgstr "設定拾å–çš„é¡è‰²" #: ../src/ui/tools/eraser-tool.cpp:436 msgid "Drawing an eraser stroke" @@ -23449,41 +23246,40 @@ msgstr "å¾žé€™å·¥å…·åˆ—ä¸­é¸æ“‡ä¸€å€‹å»ºé€ å·¥å…·ã€‚" #. create the knots #: ../src/ui/tools/measure-tool.cpp:349 msgid "Measure start, Shift+Click for position dialog" -msgstr "" +msgstr "測é‡èµ·å§‹ï¼ŒShift+點擊滑鼠開啟ä½ç½®å°è©±çª—" #: ../src/ui/tools/measure-tool.cpp:355 msgid "Measure end, Shift+Click for position dialog" -msgstr "" +msgstr "測é‡çµæŸï¼ŒShift+點擊滑鼠開啟ä½ç½®å°è©±çª—" #: ../src/ui/tools/measure-tool.cpp:747 ../share/extensions/measure.inx.h:2 msgid "Measure" -msgstr "釿¸¬" +msgstr "測é‡" #: ../src/ui/tools/measure-tool.cpp:752 msgid "Base" -msgstr "" +msgstr "基本" #: ../src/ui/tools/measure-tool.cpp:761 msgid "Add guides from measure tool" -msgstr "" +msgstr "從測é‡å·¥å…·åŠ å…¥åƒè€ƒç·š" #: ../src/ui/tools/measure-tool.cpp:781 -msgid "Add Stored to measure tool" -msgstr "" +msgid "Keep last measure on the canvas, for reference" +msgstr "ä¿ç•™ç•«å¸ƒä¸Šæœ€å¾Œä¸€æ¬¡æ¸¬é‡ä½œç‚ºåƒè€ƒ" #: ../src/ui/tools/measure-tool.cpp:801 -#, fuzzy msgid "Convert measure to items" -msgstr "將邊框轉æˆè·¯å¾‘" +msgstr "將測é‡è½‰æˆè·¯å¾‘" #: ../src/ui/tools/measure-tool.cpp:839 msgid "Add global measure line" -msgstr "" +msgstr "加入總體測é‡å·¥å…·" #: ../src/ui/tools/measure-tool.cpp:1290 ../src/ui/tools/measure-tool.cpp:1292 -#, fuzzy, c-format +#, c-format msgid "Crossing %lu" -msgstr "交疊模糊" +msgstr "交å‰é»ž %lu" #. TRANSLATORS: Mind the space in front. This is part of a compound message #: ../src/ui/tools/mesh-tool.cpp:122 ../src/ui/tools/mesh-tool.cpp:133 @@ -23530,7 +23326,7 @@ msgstr "平滑網é¢é‚Šè§’é¡è‰²ã€‚" #: ../src/ui/tools/mesh-tool.cpp:413 msgid "Picked mesh corner color." -msgstr "æ±²å–ç¶²é¢é‚Šè§’é¡è‰²ã€‚" +msgstr "拾å–ç¶²é¢é‚Šè§’é¡è‰²ã€‚" #: ../src/ui/tools/mesh-tool.cpp:489 msgid "Create default mesh" @@ -23545,9 +23341,8 @@ msgid "FIXMEShift: draw mesh around the starting point" msgstr "按ä½Shift:於起始點周åœç¹ªè£½" #: ../src/ui/tools/mesh-tool.cpp:971 -#, fuzzy msgid "Create mesh" -msgstr "建立é è¨­ç¶²é¢" +msgstr "建立網é¢" #: ../src/ui/tools/node-tool.cpp:648 msgctxt "Node tool tip" @@ -23642,48 +23437,47 @@ msgstr "" "尖銳節點" #: ../src/ui/tools/pen-tool.cpp:1797 -#, fuzzy, c-format +#, c-format msgid "" "Curve segment: angle %3.2f°, distance %s; with Ctrl to " "snap angle, Enter or Shift+Enter to finish the path" msgstr "" "曲線線段:角度 %3.2f°ã€è·é›¢ %s; 按著 Ctrl å¯è²¼é½Šè§’度," -"Enter å¯çµæŸè·¯å¾‘" +"Enter 或 Shift+Enter å¯çµæŸè·¯å¾‘" #: ../src/ui/tools/pen-tool.cpp:1798 -#, fuzzy, c-format +#, c-format msgid "" "Line segment: angle %3.2f°, distance %s; with Ctrl to " "snap angle, Enter or Shift+Enter to finish the path" msgstr "" "直線線段:角度 %3.2f°ã€è·é›¢ %s; 按著 Ctrl å¯è²¼é½Šè§’度," -"Enter ä¾†çµæŸè·¯å¾‘" +"Enter 或 Shift+Enter ä¾†çµæŸè·¯å¾‘" #: ../src/ui/tools/pen-tool.cpp:1801 -#, fuzzy, c-format +#, c-format msgid "" "Curve segment: angle %3.2f°, distance %s; with Shift+Click make a cusp node, Enter or Shift+Enter to finish the path" msgstr "" -"曲線線段:角度 %3.2f°ã€è·é›¢ %s; 按著 Ctrl å¯è²¼é½Šè§’度; " -"Shift+滑鼠點擊å¯è®Šæˆå°–銳節點,Enter å¯çµæŸè·¯å¾‘" +"曲線線段:角度 %3.2f°ã€è·é›¢ %s; Shift+滑鼠點擊å¯è®Šæˆå°–銳節" +"點,Enter 或 Shift+Enterå¯çµæŸè·¯å¾‘" #: ../src/ui/tools/pen-tool.cpp:1802 -#, fuzzy, c-format +#, c-format msgid "" "Line segment: angle %3.2f°, distance %s; with Shift+Click " "make a cusp node, Enter or Shift+Enter to finish the path" msgstr "" -"直線線段:角度 %3.2f°ã€è·é›¢ %s; 按著 Ctrl å¯è²¼é½Šè§’度; " -"Shift+滑鼠點擊å¯è®“此節點變æˆå°–銳節點,Enter ä¾†çµæŸè·¯å¾‘" +"直線線段:角度 %3.2f°ã€è·é›¢ %s; Shift+滑鼠點擊å¯è®Šæˆå°–銳節" +"點,Enter 或 Shift+Enter ä¾†çµæŸè·¯å¾‘" #: ../src/ui/tools/pen-tool.cpp:1819 #, c-format msgid "" "Curve handle: angle %3.2f°, length %s; with Ctrl to snap " "angle" -msgstr "" -"曲線控制點:角度 %3.2f°ã€é•·åº¦ %s; 按著 Ctrl å¯è²¼é½Šè§’度" +msgstr "曲線控制點:角度 %3.2f°ã€é•·åº¦ %s; 按著 Ctrl å¯è²¼é½Šè§’度" #: ../src/ui/tools/pen-tool.cpp:1843 #, c-format @@ -24048,10 +23842,8 @@ msgid "" msgid_plural "" "Type or edit flowed text (%d characters%s); Enter to start new " "paragraph." -msgstr[0] "" -"輸入或編輯æµå‹•文字 (%d 個字元%s);按 Enter éµå¯é–‹å§‹æ–°çš„æ®µè½ã€‚" -msgstr[1] "" -"輸入或編輯æµå‹•文字 (%d 個字元%s);按 Enter éµå¯é–‹å§‹æ–°çš„æ®µè½ã€‚" +msgstr[0] "輸入或編輯æµå‹•文字 (%d 個字元%s);按 Enter éµå¯é–‹å§‹æ–°çš„æ®µè½ã€‚" +msgstr[1] "輸入或編輯æµå‹•文字 (%d 個字元%s);按 Enter éµå¯é–‹å§‹æ–°çš„æ®µè½ã€‚" #: ../src/ui/tools/text-tool.cpp:1575 #, c-format @@ -24307,7 +24099,7 @@ msgstr "太多墨水ï¼" #: ../src/ui/widget/color-notebook.cpp:207 ../src/verbs.cpp:2766 msgid "Pick colors from image" -msgstr "å¾žå½±åƒæ±²å–é¡è‰²" +msgstr "å¾žå½±åƒæ‹¾å–é¡è‰²" #. Create RGBA entry and color preview #: ../src/ui/widget/color-notebook.cpp:212 @@ -24337,299 +24129,272 @@ msgstr "模糊 (%)" #: ../src/ui/widget/font-variants.cpp:38 msgctxt "Font variant" msgid "Ligatures" -msgstr "" +msgstr "連字" #: ../src/ui/widget/font-variants.cpp:39 -#, fuzzy msgctxt "Font variant" msgid "Common" -msgstr "一般" +msgstr "普通" #: ../src/ui/widget/font-variants.cpp:40 -#, fuzzy msgctxt "Font variant" msgid "Discretionary" -msgstr "æ–¹å‘" +msgstr "自由連字" #: ../src/ui/widget/font-variants.cpp:41 -#, fuzzy msgctxt "Font variant" msgid "Historical" -msgstr "指導手冊" +msgstr "æ­·å²æ€§é€£å­—" #: ../src/ui/widget/font-variants.cpp:42 -#, fuzzy msgctxt "Font variant" msgid "Contextual" -msgstr "功能表" +msgstr "上下文連字" #: ../src/ui/widget/font-variants.cpp:44 -#, fuzzy msgctxt "Font variant" msgid "Position" msgstr "ä½ç½®" #: ../src/ui/widget/font-variants.cpp:45 ../src/ui/widget/font-variants.cpp:50 -#, fuzzy msgctxt "Font variant" msgid "Normal" -msgstr "標準" +msgstr "一般" #: ../src/ui/widget/font-variants.cpp:46 -#, fuzzy msgctxt "Font variant" msgid "Subscript" -msgstr "腳本" +msgstr "下標" #: ../src/ui/widget/font-variants.cpp:47 -#, fuzzy msgctxt "Font variant" msgid "Superscript" -msgstr "切æ›ä¸Šæ¨™" +msgstr "上標" #: ../src/ui/widget/font-variants.cpp:49 -#, fuzzy msgctxt "Font variant" msgid "Capitals" -msgstr "醫院" +msgstr "大寫" #: ../src/ui/widget/font-variants.cpp:51 -#, fuzzy msgctxt "Font variant" msgid "Small" -msgstr "å°" +msgstr "å°é«”大寫" #: ../src/ui/widget/font-variants.cpp:52 -#, fuzzy msgctxt "Font variant" msgid "All small" -msgstr "å°" +msgstr "全部å°é«”大寫" #: ../src/ui/widget/font-variants.cpp:53 -#, fuzzy msgctxt "Font variant" msgid "Petite" -msgstr "所有éžä½¿ç”¨ä¸­çš„工具" +msgstr "Petite 大寫" #: ../src/ui/widget/font-variants.cpp:54 -#, fuzzy msgctxt "Font variant" msgid "All petite" -msgstr "所有éžä½¿ç”¨ä¸­çš„工具" +msgstr "全部 Petite 大寫" #: ../src/ui/widget/font-variants.cpp:55 -#, fuzzy msgctxt "Font variant" msgid "Unicase" -msgstr "æ´¾å¡" +msgstr "䏿Œ‡å®šå¤§å°å¯«" #: ../src/ui/widget/font-variants.cpp:56 -#, fuzzy msgctxt "Font variant" msgid "Titling" -msgstr "航行" +msgstr "標題大寫" #: ../src/ui/widget/font-variants.cpp:58 msgctxt "Font variant" msgid "Numeric" -msgstr "" +msgstr "數字å¼" #: ../src/ui/widget/font-variants.cpp:59 -#, fuzzy msgctxt "Font variant" msgid "Lining" -msgstr "變細:" +msgstr "加襯å¼" #: ../src/ui/widget/font-variants.cpp:60 -#, fuzzy msgctxt "Font variant" msgid "Old Style" -msgstr "樣å¼" +msgstr "舊樣å¼" #: ../src/ui/widget/font-variants.cpp:61 -#, fuzzy msgctxt "Font variant" msgid "Default Style" -msgstr "é è¨­æ¨™é¡Œ" +msgstr "é è¨­æ¨£å¼" #: ../src/ui/widget/font-variants.cpp:62 -#, fuzzy msgctxt "Font variant" msgid "Proportional" -msgstr "åˆ†é æ¯”例:" +msgstr "比例å¼" #: ../src/ui/widget/font-variants.cpp:63 msgctxt "Font variant" msgid "Tabular" -msgstr "" +msgstr "表格å¼" #: ../src/ui/widget/font-variants.cpp:64 -#, fuzzy msgctxt "Font variant" msgid "Default Width" -msgstr "é è¨­æ¨™é¡Œ" +msgstr "é è¨­å¯¬åº¦" #: ../src/ui/widget/font-variants.cpp:65 -#, fuzzy msgctxt "Font variant" msgid "Diagonal" -msgstr "å°è§’åƒè€ƒç·š" +msgstr "å°è§’" #: ../src/ui/widget/font-variants.cpp:66 -#, fuzzy msgctxt "Font variant" msgid "Stacked" -msgstr "後端" +msgstr "堆疊" #: ../src/ui/widget/font-variants.cpp:67 -#, fuzzy msgctxt "Font variant" msgid "Default Fractions" -msgstr "é è¨­æ ¼ç·šè¨­å®šå€¼" +msgstr "é è¨­åˆ†çއ" #: ../src/ui/widget/font-variants.cpp:68 msgctxt "Font variant" msgid "Ordinal" -msgstr "" +msgstr "ä¾åº" #: ../src/ui/widget/font-variants.cpp:69 msgctxt "Font variant" msgid "Slashed Zero" -msgstr "" +msgstr "斜線零" #: ../src/ui/widget/font-variants.cpp:71 -#, fuzzy msgctxt "Font variant" msgid "Feature Settings" -msgstr "é é¢è¨­å®šå€¼" +msgstr "特性設定值" #: ../src/ui/widget/font-variants.cpp:72 msgctxt "Font variant" msgid "Selection has different Feature Settings!" -msgstr "" +msgstr "é¸å–項目有ä¸åŒçš„特性設定值ï¼" #: ../src/ui/widget/font-variants.cpp:85 msgid "Common ligatures. On by default. OpenType tables: 'liga', 'clig'" -msgstr "" +msgstr "一般連字。é è¨­é–‹å•Ÿã€‚OpenType 表格:'liga', 'clig'" #: ../src/ui/widget/font-variants.cpp:87 msgid "Discretionary ligatures. Off by default. OpenType table: 'dlig'" -msgstr "" +msgstr "自由連字。é è¨­é—œé–‰ã€‚OpenType 表格:'dlig'" #: ../src/ui/widget/font-variants.cpp:89 msgid "Historical ligatures. Off by default. OpenType table: 'hlig'" -msgstr "" +msgstr "æ­·å²æ€§é€£å­—。é è¨­é—œé–‰ã€‚OpenType 表格:'hlig'" #: ../src/ui/widget/font-variants.cpp:91 msgid "Contextual forms. On by default. OpenType table: 'calt'" -msgstr "" +msgstr "上下文格å¼ã€‚é è¨­é–‹å•Ÿã€‚OpenType 表格:'calt'" #. Position ---------------------------------- #. Add tooltips #: ../src/ui/widget/font-variants.cpp:112 -#, fuzzy msgid "Normal position." -msgstr "X ä½ç½®" +msgstr "一般ä½ç½®" #: ../src/ui/widget/font-variants.cpp:113 msgid "Subscript. OpenType table: 'subs'" -msgstr "" +msgstr "下標。OpenType 表格:'subs'" #: ../src/ui/widget/font-variants.cpp:114 msgid "Superscript. OpenType table: 'sups'" -msgstr "" +msgstr "上標。OpenType 表格:'sups'" #. Caps ---------------------------------- #. Add tooltips #: ../src/ui/widget/font-variants.cpp:138 -#, fuzzy msgid "Normal capitalization." -msgstr "語系" +msgstr "一般大寫" #: ../src/ui/widget/font-variants.cpp:139 msgid "Small-caps (lowercase). OpenType table: 'smcp'" -msgstr "" +msgstr "å°é«”大寫 (å°å¯«å­—æ¯)。OpenType 表格:'smcp'" #: ../src/ui/widget/font-variants.cpp:140 msgid "" "All small-caps (uppercase and lowercase). OpenType tables: 'c2sc' and 'smcp'" -msgstr "" +msgstr "全部å°é«”大寫 (大寫和å°å¯«å­—æ¯)。OpenType 表格:'c2sc' å’Œ 'smcp'" #: ../src/ui/widget/font-variants.cpp:141 msgid "Petite-caps (lowercase). OpenType table: 'pcap'" -msgstr "" +msgstr "Petie 大寫 (å°å¯«å­—æ¯)。OpenType 表格:'pcap'" #: ../src/ui/widget/font-variants.cpp:142 msgid "" "All petite-caps (uppercase and lowercase). OpenType tables: 'c2sc' and 'pcap'" -msgstr "" +msgstr "全部 Petie 大寫 (大寫和å°å¯«å­—æ¯)。OpenType 表格:'c2sc' å’Œ 'pcap'" #: ../src/ui/widget/font-variants.cpp:143 msgid "" "Unicase (small caps for uppercase, normal for lowercase). OpenType table: " "'unic'" msgstr "" +"䏿Œ‡å®šå¤§å°å¯« (大寫字æ¯ä½¿ç”¨å°é«”大寫,å°å¯«å­—æ¯ä½¿ç”¨ä¸€èˆ¬å¤§å¯«)。OpenType 表" +"格:'unic'" #: ../src/ui/widget/font-variants.cpp:144 msgid "" "Titling caps (lighter-weight uppercase for use in titles). OpenType table: " "'titl'" -msgstr "" +msgstr "標題大寫 (標題使用較輕比é‡çš„大寫字æ¯)。OpenType 表格:'titl'" #. Numeric ------------------------------ #. Add tooltips #: ../src/ui/widget/font-variants.cpp:180 -#, fuzzy msgid "Normal style." -msgstr "普通å移:" +msgstr "一般樣å¼ã€‚" #: ../src/ui/widget/font-variants.cpp:181 msgid "Lining numerals. OpenType table: 'lnum'" -msgstr "" +msgstr "åŠ è¥¯å¼æ•¸å­—。OpenType 表格:'lnum'" #: ../src/ui/widget/font-variants.cpp:182 msgid "Old style numerals. OpenType table: 'onum'" -msgstr "" +msgstr "舊風格數字。OpenType 表格:'onum'" #: ../src/ui/widget/font-variants.cpp:183 -#, fuzzy msgid "Normal widths." -msgstr "標準照明" +msgstr "一般寬度。" #: ../src/ui/widget/font-variants.cpp:184 msgid "Proportional width numerals. OpenType table: 'pnum'" -msgstr "" +msgstr "比例寬度數字。OpenType 表格:'pnum'" #: ../src/ui/widget/font-variants.cpp:185 msgid "Same width numerals. OpenType table: 'tnum'" -msgstr "" +msgstr "相åŒå¯¬åº¦æ•¸å­—。OpenType 表格:'tnum'" #: ../src/ui/widget/font-variants.cpp:186 -#, fuzzy msgid "Normal fractions." -msgstr "忽略圖片旋轉" +msgstr "一般分率。" #: ../src/ui/widget/font-variants.cpp:187 msgid "Diagonal fractions. OpenType table: 'frac'" -msgstr "" +msgstr "å°è§’分率。OpenType 表格:'frac'" #: ../src/ui/widget/font-variants.cpp:188 msgid "Stacked fractions. OpenType table: 'afrc'" -msgstr "" +msgstr "堆疊分率。OpenType 表格:'afrc'" #: ../src/ui/widget/font-variants.cpp:189 msgid "Ordinals (raised 'th', etc.). OpenType table: 'ordn'" -msgstr "" +msgstr "ä¾åº (æé«˜ 'th' 等等)。OpenType 表格:'ordn'" #: ../src/ui/widget/font-variants.cpp:190 msgid "Slashed zeros. OpenType table: 'zero'" -msgstr "" +msgstr "斜線零。OpenType 表格:'zero'" #. Feature settings --------------------- #. Add tooltips #: ../src/ui/widget/font-variants.cpp:240 msgid "Feature settings in CSS form. No sanity checking is performed." -msgstr "" +msgstr "CSS è¡¨å–®ä¸­çš„ç‰¹æ€§è¨­å®šå€¼ã€‚ä¸æœƒåŸ·è¡Œå®Œæ•´æ€§æª¢æŸ¥ã€‚" #: ../src/ui/widget/layer-selector.cpp:118 msgid "Toggle current layer visibility" @@ -24656,9 +24421,8 @@ msgid "MetadataLicence|Other" msgstr "å…¶ä»–" #: ../src/ui/widget/licensor.cpp:72 -#, fuzzy msgid "Document license updated" -msgstr "文件清ç†" +msgstr "文件授權更新" #: ../src/ui/widget/object-composite-settings.cpp:47 #: ../src/ui/widget/selected-style.cpp:1118 @@ -24721,24 +24485,20 @@ msgid "Bottom margin" msgstr "底端邊è·" #: ../src/ui/widget/page-sizer.cpp:244 -#, fuzzy msgid "Scale _x:" -msgstr "縮放 x" +msgstr "縮放 _x:" #: ../src/ui/widget/page-sizer.cpp:244 -#, fuzzy msgid "Scale X" -msgstr "縮放 x" +msgstr "縮放 X" #: ../src/ui/widget/page-sizer.cpp:245 -#, fuzzy msgid "Scale _y:" -msgstr "縮放 y" +msgstr "縮放 _y:" #: ../src/ui/widget/page-sizer.cpp:245 -#, fuzzy msgid "Scale Y" -msgstr "縮放 x" +msgstr "縮放 Y" #: ../src/ui/widget/page-sizer.cpp:323 msgid "Orientation:" @@ -24777,11 +24537,12 @@ msgid "" "scaling in Inkscape. To set a non-uniform scaling, set the 'viewBox' " "directly." msgstr "" +"ç•¶ SVG å…許éžç­‰æ¯”ä¾‹ç¸®æ”¾æ™‚ç¨‹å¼æœƒå»ºè­° Inkscape åªä½¿ç”¨ç­‰æ¯”例縮放。直接經由「檢視" +"框ã€è¨­å®šéžç­‰æ¯”例縮放。" #: ../src/ui/widget/page-sizer.cpp:483 -#, fuzzy msgid "_Viewbox..." -msgstr "檢視(_V)" +msgstr "檢視框(_V)..." #: ../src/ui/widget/page-sizer.cpp:590 msgid "Set page size" @@ -24789,16 +24550,15 @@ msgstr "設定é é¢å°ºå¯¸" #: ../src/ui/widget/page-sizer.cpp:836 msgid "User units per " -msgstr "" +msgstr "ä½¿ç”¨è€…å–®ä½æ¯" #: ../src/ui/widget/page-sizer.cpp:932 -#, fuzzy msgid "Set page scale" -msgstr "設定é é¢å°ºå¯¸" +msgstr "設定é é¢æ¯”例" #: ../src/ui/widget/page-sizer.cpp:958 msgid "Set 'viewBox'" -msgstr "" +msgstr "設定「顯示框ã€" #: ../src/ui/widget/panel.cpp:116 msgid "List" @@ -25381,8 +25141,7 @@ msgid_plural "" "shared by %d boxes; drag with Shift to separate selected " "box(es)" msgstr[0] "有 %d 個立方體共用;按著 Shift 拖曳å¯åˆ†é–‹é¸å–的立方體" -msgstr[1] "" -"有 %d 個立方體共用;按著 Shift 並拖曳å¯åˆ†é–‹é¸å–的立方體" +msgstr[1] "有 %d 個立方體共用;按著 Shift 並拖曳å¯åˆ†é–‹é¸å–的立方體" #: ../src/verbs.cpp:137 msgid "File" @@ -25508,9 +25267,9 @@ msgid "Flip vertically" msgstr "垂直翻轉" #: ../src/verbs.cpp:1590 -#, fuzzy, c-format +#, c-format msgid "Set %d" -msgstr "設定延é²" +msgstr "設定 %d" #: ../src/verbs.cpp:1599 ../src/verbs.cpp:2729 msgid "Create new selection set" @@ -25703,9 +25462,8 @@ msgid "Quit Inkscape" msgstr "離開 Inkscape" #: ../src/verbs.cpp:2456 -#, fuzzy msgid "New from _Template..." -msgstr "從範本新增" +msgstr "從範本新增(_T)..." #: ../src/verbs.cpp:2457 msgid "Create new project from template" @@ -26055,14 +25813,12 @@ msgid "Delete all the guides in the document" msgstr "刪除文件中所有的åƒè€ƒç·š" #: ../src/verbs.cpp:2546 -#, fuzzy msgid "Lock All Guides" -msgstr "全部解除鎖定" +msgstr "鎖定全部åƒè€ƒç·š" #: ../src/verbs.cpp:2546 ../src/widgets/desktop-widget.cpp:404 -#, fuzzy msgid "Toggle lock of all guides in the document" -msgstr "刪除文件中所有的åƒè€ƒç·š" +msgstr "開啟/關閉鎖定文件中所有的åƒè€ƒç·š" #: ../src/verbs.cpp:2547 msgid "Create _Guides Around the Page" @@ -26122,14 +25878,12 @@ msgid "Ungroup selected groups" msgstr "解散é¸å–的群組" #: ../src/verbs.cpp:2565 -#, fuzzy msgid "_Pop selected objects out of group" -msgstr "群組é¸å–的物件" +msgstr "å°‡é¸å–物件脫離群組(_P)" #: ../src/verbs.cpp:2566 -#, fuzzy msgid "Pop selected objects out of group" -msgstr "群組é¸å–的物件" +msgstr "å°‡é¸å–物件脫離群組" #: ../src/verbs.cpp:2568 msgid "_Put on Path" @@ -27629,9 +27383,8 @@ msgid "Fit the page to the drawing" msgstr "å°‡é é¢èª¿æ•´æˆç¹ªç•«éƒ¨ä»½å¤§å°" #: ../src/verbs.cpp:3008 -#, fuzzy msgid "_Resize Page to Selection" -msgstr "å°‡é é¢èª¿æ•´æˆé¸å–å€å¤§å°" +msgstr "å°‡é é¢èª¿æ•´æˆé¸å–å€å¤§å°(_R)" #: ../src/verbs.cpp:3009 msgid "" @@ -28287,14 +28040,12 @@ msgid "%s%s - Inkscape" msgstr "%s%s - Inkscape" #: ../src/widgets/desktop-widget.cpp:1111 -#, fuzzy msgid "Locked all guides" -msgstr "鎖定全部圖層" +msgstr "鎖定全部åƒè€ƒç·š" #: ../src/widgets/desktop-widget.cpp:1113 -#, fuzzy msgid "Unlocked all guides" -msgstr "解除鎖定全部圖層" +msgstr "解除鎖定全部åƒè€ƒç·š" #: ../src/widgets/desktop-widget.cpp:1130 msgid "Color-managed display is enabled in this window" @@ -28345,19 +28096,19 @@ msgstr "備註:" #: ../src/widgets/dropper-toolbar.cpp:90 msgid "Pick opacity" -msgstr "æ±²å–ä¸é€æ˜Žåº¦" +msgstr "拾å–ä¸é€æ˜Žåº¦" #: ../src/widgets/dropper-toolbar.cpp:91 msgid "" "Pick both the color and the alpha (transparency) under cursor; otherwise, " "pick only the visible color premultiplied by alpha" msgstr "" -"åŒæ™‚æ±²å–æ¸¸æ¨™åº•下的é¡è‰²å’Œé€æ˜Ž (alpha)ï¼›å¦å‰‡ï¼Œåªæœƒæ±²å–åˆ°ç”¨é€æ˜Ž (alpha) é å…ˆä¹˜ä»¥" +"åŒæ™‚æ‹¾å–æ¸¸æ¨™åº•下的é¡è‰²å’Œé€æ˜Ž (alpha)ï¼›å¦å‰‡ï¼Œåªæœƒæ‹¾å–åˆ°ç”¨é€æ˜Ž (alpha) é å…ˆä¹˜ä»¥" "å¯è¦‹é¡è‰²çš„æ•¸å€¼" #: ../src/widgets/dropper-toolbar.cpp:94 msgid "Pick" -msgstr "æ±²å–" +msgstr "拾å–" #: ../src/widgets/dropper-toolbar.cpp:103 msgid "Assign opacity" @@ -28366,7 +28117,7 @@ msgstr "指定ä¸é€æ˜Žåº¦" #: ../src/widgets/dropper-toolbar.cpp:104 msgid "" "If alpha was picked, assign it to selection as fill or stroke transparency" -msgstr "若點å–逿˜Ž (alpha),將數值指定給é¸å–å€ä½œç‚ºå¡«è‰²æˆ–é‚Šæ¡†é€æ˜Žåº¦" +msgstr "若拾å–逿˜Ž (alpha),將數值指定給é¸å–å€ä½œç‚ºå¡«è‰²æˆ–é‚Šæ¡†é€æ˜Žåº¦" #: ../src/widgets/dropper-toolbar.cpp:107 msgid "Assign" @@ -28390,28 +28141,24 @@ msgstr "從物件切掉" #. Width #: ../src/widgets/eraser-toolbar.cpp:151 -#, fuzzy msgid "(no width)" -msgstr "凹端" +msgstr "(無寬度)" #: ../src/widgets/eraser-toolbar.cpp:155 msgid "The width of the eraser pen (relative to the visible canvas area)" msgstr "橡皮擦的寬度 (ç›¸å°æ–¼å¯è¦‹ç•«å¸ƒå€åŸŸ)" #: ../src/widgets/eraser-toolbar.cpp:171 -#, fuzzy msgid "Eraser Mass" -msgstr "橡皮擦" +msgstr "橡皮擦質é‡" #: ../src/widgets/eraser-toolbar.cpp:172 -#, fuzzy msgid "Increase to make the eraser drag behind, as if slowed by inertia" -msgstr "增加這項數值å¯ä½¿ç­†ç•«æ‹–延,就åƒå› æ…£æ€§è€Œæ¸›æ…¢" +msgstr "增加這項數值å¯ä½¿ç­†ç•«æ‹–動延緩,就åƒå› æ…£æ€§è€Œæ¸›æ…¢" #: ../src/widgets/eraser-toolbar.cpp:186 ../src/widgets/eraser-toolbar.cpp:187 -#, fuzzy msgid "Break apart cut items" -msgstr "打散" +msgstr "打散項目" #: ../src/widgets/fill-style.cpp:356 msgid "Change fill rule" @@ -28690,31 +28437,28 @@ msgid "Change gradient stop color" msgstr "è®Šæ›´æ¼¸å±¤åœæ­¢é»žé¡è‰²" #: ../src/widgets/image-menu-item.c:151 -#, fuzzy msgid "Image widget" -msgstr "圖片檔" +msgstr "圖片介é¢å…ƒä»¶" #: ../src/widgets/image-menu-item.c:152 msgid "Child widget to appear next to the menu text" -msgstr "" +msgstr "å­ä»‹é¢å…ƒä»¶æœƒå‡ºç¾åœ¨é¸å–®æ–‡å­—的後é¢" #: ../src/widgets/image-menu-item.c:167 -#, fuzzy msgid "Use stock" -msgstr "貼上邊框" +msgstr "使用 stock" #: ../src/widgets/image-menu-item.c:168 msgid "Whether to use the label text to create a stock menu item" -msgstr "" +msgstr "是å¦è¦ç”¨æ¨™ç±¤æ–‡å­—建立 stock é¸å–®é …ç›®" #: ../src/widgets/image-menu-item.c:183 -#, fuzzy msgid "Accel Group" -msgstr "群組" +msgstr "加速群組" #: ../src/widgets/image-menu-item.c:184 msgid "The Accel Group to use for stock accelerator keys" -msgstr "" +msgstr "stock 加速器éµå€¼è¦ä½¿ç”¨çš„加速群組" #: ../src/widgets/lpe-toolbar.cpp:233 msgid "Closed" @@ -28788,39 +28532,35 @@ msgstr "é–‹å•Ÿå³æ™‚路徑特效å°è©±çª— (èª¿æ•´åƒæ•¸)" #: ../src/widgets/measure-toolbar.cpp:157 msgid "Start and end measures inactive." -msgstr "" +msgstr "èµ·å§‹å’ŒçµæŸæ¸¬é‡å·²åœæ­¢ã€‚" #: ../src/widgets/measure-toolbar.cpp:159 msgid "Start and end measures active." -msgstr "" +msgstr "èµ·å§‹å’ŒçµæŸæ¸¬é‡å•Ÿå‹•中。" #: ../src/widgets/measure-toolbar.cpp:175 -#, fuzzy msgid "Show all crossings." -msgstr "顯示全部圖層" +msgstr "顯示全部交å‰é»žã€‚" #: ../src/widgets/measure-toolbar.cpp:177 msgid "Show visible crossings." -msgstr "" +msgstr "顯示å¯è¦‹çš„交å‰é»žã€‚" #: ../src/widgets/measure-toolbar.cpp:193 msgid "Use all layers in the measure." -msgstr "" +msgstr "測é‡ä½¿ç”¨å…¨éƒ¨åœ–層。" #: ../src/widgets/measure-toolbar.cpp:195 -#, fuzzy msgid "Use current layer in the measure." -msgstr "æå‡ç›®å‰åœ–層到最上層" +msgstr "測é‡ä½¿ç”¨ç›®å‰åœ–層。" #: ../src/widgets/measure-toolbar.cpp:211 -#, fuzzy msgid "Compute all elements." -msgstr "tutorial-elements.zh_TW.svg" +msgstr "計算全部元件。" #: ../src/widgets/measure-toolbar.cpp:213 -#, fuzzy msgid "Compute max length." -msgstr "å°Žå…¥-導出路徑長度:" +msgstr "計算最大長度" #: ../src/widgets/measure-toolbar.cpp:274 ../src/widgets/text-toolbar.cpp:1609 msgid "Font Size" @@ -28845,84 +28585,72 @@ msgstr "精確度:" #: ../src/widgets/measure-toolbar.cpp:303 msgid "Decimal precision of measure" -msgstr "" +msgstr "測é‡çš„å進制精準度" #: ../src/widgets/measure-toolbar.cpp:315 -#, fuzzy msgid "Scale %" -msgstr "縮放 x" +msgstr "縮放 %" #: ../src/widgets/measure-toolbar.cpp:315 -#, fuzzy msgid "Scale %:" -msgstr "級別:" +msgstr "縮放 %:" #: ../src/widgets/measure-toolbar.cpp:316 msgid "Scale the results" -msgstr "" +msgstr "ç¸®æ”¾çµæžœ" #: ../src/widgets/measure-toolbar.cpp:329 -#, fuzzy msgid "The offset size" -msgstr "紅色åç§»" +msgstr "å移尺寸" #: ../src/widgets/measure-toolbar.cpp:341 #: ../src/widgets/measure-toolbar.cpp:342 -#, fuzzy msgid "Ignore first and last" msgstr "忽略第一個點和最後一個點" #: ../src/widgets/measure-toolbar.cpp:352 #: ../src/widgets/measure-toolbar.cpp:353 -#, fuzzy msgid "Show hidden intersections" -msgstr "åƒè€ƒç·šäº¤é»ž" +msgstr "顯示隱è—的交å‰é»ž" #: ../src/widgets/measure-toolbar.cpp:363 #: ../src/widgets/measure-toolbar.cpp:364 -#, fuzzy msgid "Show measures between items" -msgstr "顯示路徑之間的移動數" +msgstr "顯示項目之間的測é‡å€¼" #: ../src/widgets/measure-toolbar.cpp:374 #: ../src/widgets/measure-toolbar.cpp:375 -#, fuzzy msgid "Measure all layers" -msgstr "æœå°‹æ‰€æœ‰åœ–層" +msgstr "æ¸¬é‡æ‰€æœ‰åœ–層" #: ../src/widgets/measure-toolbar.cpp:385 #: ../src/widgets/measure-toolbar.cpp:386 -#, fuzzy msgid "Reverse measure" -msgstr "å轉路徑" +msgstr "å呿¸¬é‡" #: ../src/widgets/measure-toolbar.cpp:395 #: ../src/widgets/measure-toolbar.cpp:396 msgid "Phantom measure" -msgstr "" +msgstr "å‡é«”測é‡" #: ../src/widgets/measure-toolbar.cpp:405 #: ../src/widgets/measure-toolbar.cpp:406 -#, fuzzy msgid "To guides" -msgstr "顯示åƒè€ƒç·š(_G)" +msgstr "到åƒè€ƒç·š" #: ../src/widgets/measure-toolbar.cpp:415 #: ../src/widgets/measure-toolbar.cpp:416 -#, fuzzy msgid "Mark Dimension" -msgstr "尺寸標註線" +msgstr "標記尺寸標註" #: ../src/widgets/measure-toolbar.cpp:425 #: ../src/widgets/measure-toolbar.cpp:426 -#, fuzzy msgid "Convert to item" -msgstr "è½‰æ›æˆé»žå­—" +msgstr "è½‰æ›æˆé …ç›®" #: ../src/widgets/mesh-toolbar.cpp:318 -#, fuzzy msgid "Set mesh type" -msgstr "設定文字樣å¼" +msgstr "設定網é¢é¡žåž‹" #: ../src/widgets/mesh-toolbar.cpp:380 msgid "normal" @@ -28993,72 +28721,66 @@ msgstr "é¡¯ç¤ºé‚Šå’Œå¼µé‡æŽ§åˆ¶æŸ„" #: ../src/widgets/mesh-toolbar.cpp:509 msgid "WARNING: Mesh SVG Syntax Subject to Change" -msgstr "" +msgstr "è­¦å‘Šï¼šè®Šæ›´ç¶²é¢ SVG 語法主題" #: ../src/widgets/mesh-toolbar.cpp:519 msgctxt "Type" msgid "Coons" -msgstr "" +msgstr "孔斯" #: ../src/widgets/mesh-toolbar.cpp:522 msgid "Bicubic" -msgstr "" +msgstr "雙立方" #: ../src/widgets/mesh-toolbar.cpp:524 msgid "Coons" -msgstr "" +msgstr "孔斯" #: ../src/widgets/mesh-toolbar.cpp:525 msgid "Coons: no smoothing. Bicubic: smoothing across patch boundaries." -msgstr "" +msgstr "孔斯:無平滑化。雙立方:平滑路徑邊界相交部分。" #: ../src/widgets/mesh-toolbar.cpp:527 ../src/widgets/pencil-toolbar.cpp:375 msgid "Smoothing:" msgstr "平滑:" #: ../src/widgets/mesh-toolbar.cpp:537 -#, fuzzy msgid "Toggle Sides" -msgstr "切æ›ç²—é«”" +msgstr "切æ›é‚Š" #: ../src/widgets/mesh-toolbar.cpp:538 msgid "Toggle selected sides between Beziers and lines." -msgstr "" +msgstr "邊在è²èŒ²å’Œç·šæ¢ä¹‹é–“切æ›" #: ../src/widgets/mesh-toolbar.cpp:541 -#, fuzzy msgid "Toggle side:" -msgstr "切æ›ç²—é«”" +msgstr "切æ›é‚Šï¼š" #: ../src/widgets/mesh-toolbar.cpp:548 -#, fuzzy msgid "Make elliptical" -msgstr "使用斜體" +msgstr "橢圓化" #: ../src/widgets/mesh-toolbar.cpp:549 msgid "" "Make selected sides elliptical by changing length of handles. Works best if " "handles already approximate ellipse." -msgstr "" +msgstr "è®Šæ›´æŽ§åˆ¶æŸ„é•·åº¦ä»¥å°‡é¸æ“‡çš„邊橢圓化。若控制柄已經接近橢圓形的時候效果最好。" #: ../src/widgets/mesh-toolbar.cpp:552 -#, fuzzy msgid "Make elliptical:" -msgstr "使用斜體" +msgstr "橢圓化:" #: ../src/widgets/mesh-toolbar.cpp:559 -#, fuzzy msgid "Pick colors:" -msgstr "網點é¡è‰²ï¼š" +msgstr "拾å–é¡è‰²ï¼š" #: ../src/widgets/mesh-toolbar.cpp:560 msgid "Pick colors for selected corner nodes from underneath mesh." -msgstr "" +msgstr "è®“é¸æ“‡çš„邊角頂點拾å–ç¶²é¢ä¸‹é¢çš„é¡è‰²ã€‚" #: ../src/widgets/mesh-toolbar.cpp:563 -#, fuzzy msgid "Pick Color" -msgstr "å¡«å……é¡è‰²" +msgstr "拾å–é¡è‰²" #: ../src/widgets/node-toolbar.cpp:341 msgid "Insert node" @@ -29274,7 +28996,7 @@ msgstr "ç¶²é¢æ¼¸å±¤" #: ../src/widgets/paint-selector.cpp:235 msgid "Unset paint (make it undefined so it can be inherited)" -msgstr "å–æ¶ˆå¡—繪設定 (將值設為「未定義ã€ä½¿é‹ªæŽ’仿製物件的é¡è‰²è¨­å®šå¯è¢«ç¹¼æ‰¿ä½¿ç”¨)" +msgstr "未設定塗繪 (將值設為「未定義ã€ä½¿é‹ªæŽ’仿製物件的é¡è‰²è¨­å®šå¯è¢«ç¹¼æ‰¿ä½¿ç”¨)" #. TRANSLATORS: for info, see http://www.w3.org/TR/2000/CR-SVG-20000802/painting.html#FillRuleProperty #: ../src/widgets/paint-selector.cpp:252 @@ -29444,9 +29166,8 @@ msgid "From clipboard" msgstr "從剪貼簿" #: ../src/widgets/pencil-toolbar.cpp:181 -#, fuzzy msgid "Bend from clipboard" -msgstr "從剪貼簿" +msgstr "從剪貼簿套用彎曲" #: ../src/widgets/pencil-toolbar.cpp:182 msgid "Last applied" @@ -29484,11 +29205,11 @@ msgstr "å°‡é‰›ç­†åƒæ•¸é‡è¨­ç‚ºé è¨­å€¼ (å¯åœ¨ Inkscape å好設定 > 工具 #: ../src/widgets/pencil-toolbar.cpp:407 ../src/widgets/pencil-toolbar.cpp:408 msgid "LPE based interactive simplify" -msgstr "" +msgstr "互動å¼ç°¡åŒ–çš„å³æ™‚路徑特效 (LPE)" #: ../src/widgets/pencil-toolbar.cpp:418 ../src/widgets/pencil-toolbar.cpp:419 msgid "LPE simplify flatten" -msgstr "" +msgstr "LPE 簡化平å¦" #: ../src/widgets/rect-toolbar.cpp:125 msgid "Change rectangle" @@ -29644,7 +29365,6 @@ msgstr "X:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:443 -#, fuzzy msgctxt "Select toolbar" msgid "Horizontal coordinate of selection" msgstr "é¸å–å€çš„æ°´å¹³å標" @@ -29663,7 +29383,6 @@ msgstr "Y:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:462 -#, fuzzy msgctxt "Select toolbar" msgid "Vertical coordinate of selection" msgstr "é¸å–å€çš„åž‚ç›´åæ¨™" @@ -29682,10 +29401,9 @@ msgstr "寬:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:481 -#, fuzzy msgctxt "Select toolbar" msgid "Width of selection" -msgstr "é¸å–å€çš„寬度" +msgstr "é¸å–å€å¯¬åº¦" #: ../src/widgets/select-toolbar.cpp:499 msgid "Lock width and height" @@ -29709,10 +29427,9 @@ msgstr "高:" #. shortLabel #: ../src/widgets/select-toolbar.cpp:513 -#, fuzzy msgctxt "Select toolbar" msgid "Height of selection" -msgstr "é¸å–å€çš„高度" +msgstr "é¸å–å€é«˜åº¦" #: ../src/widgets/select-toolbar.cpp:575 msgid "Scale rounded corners" @@ -29846,9 +29563,8 @@ msgid "The width of the spray area (relative to the visible canvas area)" msgstr "å™´ç‘範åœçš„寬度 (ç›¸å°æ–¼å¯è¦‹ç•«å¸ƒå€åŸŸ)" #: ../src/widgets/spray-toolbar.cpp:312 -#, fuzzy msgid "Use the pressure of the input device to alter the width of spray area" -msgstr "利用輸入è£ç½®çš„壓力來改變筆尖寬度" +msgstr "利用輸入è£ç½®çš„壓力來改變噴ç‘å€åŸŸçš„寬度" #: ../src/widgets/spray-toolbar.cpp:323 msgid "(maximum mean)" @@ -29906,14 +29622,12 @@ msgid "Spray objects in a single path" msgstr "用單一路徑噴ç‘物件" #: ../src/widgets/spray-toolbar.cpp:383 -#, fuzzy msgid "Delete sprayed items" -msgstr "åˆªé™¤æ¼¸å±¤åœæ­¢é»ž" +msgstr "刪除噴ç‘的項目" #: ../src/widgets/spray-toolbar.cpp:384 -#, fuzzy msgid "Delete sprayed items from selection" -msgstr "從é¸å–å€å–得曲線..." +msgstr "從é¸å–å€åˆªé™¤å™´ç‘的項目" #: ../src/widgets/spray-toolbar.cpp:388 ../src/widgets/tweak-toolbar.cpp:253 msgid "Mode" @@ -29982,74 +29696,68 @@ msgid "" msgstr "å™´ç‘物件的縮放變化é‡ï¼›0% 代表除了原始物件外縮放é‡éƒ½ç›¸åŒ" #: ../src/widgets/spray-toolbar.cpp:477 -#, fuzzy msgid "Use the pressure of the input device to alter the scale of new items" -msgstr "利用輸入è£ç½®çš„壓力來改變筆尖寬度" +msgstr "利用輸入è£ç½®çš„壓力來改變新項目的尺寸" #: ../src/widgets/spray-toolbar.cpp:489 ../src/widgets/spray-toolbar.cpp:490 msgid "" "Pick color from the drawing. You can use clonetiler trace dialog for " "advanced effects. In clone mode original fill or stroke colors must be unset." msgstr "" +"從圖畫中拾å–é¡è‰²ã€‚你能使用鋪排彷製æç¹ªå°è©±æ¡†çš„進階特效。在仿製模å¼ä¸­åŽŸå§‹å¡«å……" +"或邊框必須是「未設定ã€ç‹€æ…‹ã€‚" #: ../src/widgets/spray-toolbar.cpp:502 ../src/widgets/spray-toolbar.cpp:503 msgid "Pick from center instead average area." -msgstr "" +msgstr "從中心點拾å–ï¼Œè€Œä¸æ˜¯å¹³å‡ç¯„åœã€‚" #: ../src/widgets/spray-toolbar.cpp:515 ../src/widgets/spray-toolbar.cpp:516 msgid "Inverted pick value, retaining color in advanced trace mode" -msgstr "" +msgstr "åè½‰æ‹¾å–æ•¸å€¼ï¼Œåœ¨é€²éšŽæç¹ªæ¨¡å¼ä¸­ä¿ç•™é¡è‰²" #: ../src/widgets/spray-toolbar.cpp:528 ../src/widgets/spray-toolbar.cpp:529 -#, fuzzy msgid "Apply picked color to fill" -msgstr "å¥—ç”¨æœ€å¾Œé¸æ“‡çš„é¡è‰²åˆ°å¡«å……" +msgstr "套用拾å–é¡è‰²åˆ°å¡«å……" #: ../src/widgets/spray-toolbar.cpp:541 ../src/widgets/spray-toolbar.cpp:542 -#, fuzzy msgid "Apply picked color to stroke" -msgstr "å¥—ç”¨æœ€å¾Œé¸æ“‡çš„é¡è‰²åˆ°é‚Šæ¡†" +msgstr "套用拾å–é¡è‰²åˆ°é‚Šæ¡†" #: ../src/widgets/spray-toolbar.cpp:554 ../src/widgets/spray-toolbar.cpp:555 msgid "No overlap between colors" -msgstr "" +msgstr "é¡è‰²ä¹‹é–“ä¸é‡ç–Š" #: ../src/widgets/spray-toolbar.cpp:567 ../src/widgets/spray-toolbar.cpp:568 msgid "Apply over transparent areas" -msgstr "" +msgstr "å¥—ç”¨æ¶µè“‹é€æ˜Žå€åŸŸ" #: ../src/widgets/spray-toolbar.cpp:580 ../src/widgets/spray-toolbar.cpp:581 msgid "Apply over no transparent areas" -msgstr "" +msgstr "套用ä¸å«é€æ˜Žå€åŸŸ" #: ../src/widgets/spray-toolbar.cpp:593 ../src/widgets/spray-toolbar.cpp:594 -#, fuzzy msgid "Prevent overlapping objects" -msgstr "è«‹é¸å–一個物件" +msgstr "é¿å…é‡ç–Šç‰©ä»¶" #: ../src/widgets/spray-toolbar.cpp:605 -#, fuzzy msgid "(minimum offset)" -msgstr "(最å°åŠ›é“)" +msgstr "(最å°åç§»)" #: ../src/widgets/spray-toolbar.cpp:605 -#, fuzzy msgid "(maximum offset)" -msgstr "(最大力é“)" +msgstr "(最大åç§»)" #: ../src/widgets/spray-toolbar.cpp:608 -#, fuzzy msgid "Offset %" -msgstr "åç§» x" +msgstr "åç§» %" #: ../src/widgets/spray-toolbar.cpp:608 -#, fuzzy msgid "Offset %:" -msgstr "å移:" +msgstr "åç§» %:" #: ../src/widgets/spray-toolbar.cpp:609 msgid "Increase to segregate objects more (value in percent)" -msgstr "" +msgstr "分離物件增加更多åç§» (數值單ä½ç‚ºç™¾åˆ†æ¯”)" #: ../src/widgets/star-toolbar.cpp:103 msgid "Star: Change number of corners" @@ -30308,33 +30016,28 @@ msgid "Square cap" msgstr "方端點" #: ../src/widgets/stroke-style.cpp:392 -#, fuzzy msgid "Fill, Stroke, Markers" -msgstr "é‚Šæ¡†æ¨£å¼æ¨™è¨˜" +msgstr "å¡«å……ã€é‚Šæ¡†ã€æ¨™è¨˜" #: ../src/widgets/stroke-style.cpp:396 -#, fuzzy msgid "Stroke, Fill, Markers" -msgstr "é‚Šæ¡†æ¨£å¼æ¨™è¨˜" +msgstr "邊框ã€å¡«å……ã€æ¨™è¨˜" #: ../src/widgets/stroke-style.cpp:400 -#, fuzzy msgid "Fill, Markers, Stroke" -msgstr "填充和邊框" +msgstr "å¡«å……ã€æ¨™è¨˜ã€é‚Šæ¡†" #: ../src/widgets/stroke-style.cpp:408 -#, fuzzy msgid "Markers, Fill, Stroke" -msgstr "填充和邊框" +msgstr "標記ã€å¡«å……ã€é‚Šæ¡†" #: ../src/widgets/stroke-style.cpp:412 -#, fuzzy msgid "Stroke, Markers, Fill" -msgstr "é‚Šæ¡†æ¨£å¼æ¨™è¨˜" +msgstr "é‚Šæ¡†ã€æ¨™è¨˜ã€å¡«å……" #: ../src/widgets/stroke-style.cpp:416 msgid "Markers, Stroke, Fill" -msgstr "" +msgstr "標記ã€é‚Šæ¡†ã€å¡«å……" #: ../src/widgets/stroke-style.cpp:534 msgid "Set markers" @@ -30374,12 +30077,11 @@ msgstr "文字:變更å°é½Š" #: ../src/widgets/text-toolbar.cpp:573 msgid "Text: Change line-height" -msgstr "文字:變更行高" +msgstr "文字:變更列高" #: ../src/widgets/text-toolbar.cpp:728 -#, fuzzy msgid "Text: Change line-height unit" -msgstr "文字:變更行高" +msgstr "文字:變更列高單ä½" #: ../src/widgets/text-toolbar.cpp:777 msgid "Text: Change word-spacing" @@ -30402,9 +30104,8 @@ msgid "Text: Change rotate" msgstr "文字:變更旋轉" #: ../src/widgets/text-toolbar.cpp:977 -#, fuzzy msgid "Text: Change writing mode" -msgstr "文字:變更方å‘" +msgstr "文字:變更書寫模å¼" #: ../src/widgets/text-toolbar.cpp:1031 msgid "Text: Change orientation" @@ -30475,57 +30176,50 @@ msgid "Horizontal" msgstr "æ©«å‘" #: ../src/widgets/text-toolbar.cpp:1746 -#, fuzzy msgid "Vertical — RL" -msgstr "ç›´å‘" +msgstr "ç›´å‘ â€” å³åˆ°å·¦" #: ../src/widgets/text-toolbar.cpp:1747 msgid "Vertical text — lines: right to left" -msgstr "" +msgstr "ç›´å‘æ–‡å­— — 文字列:從å³åˆ°å·¦" #: ../src/widgets/text-toolbar.cpp:1753 -#, fuzzy msgid "Vertical — LR" -msgstr "ç›´å‘" +msgstr "ç›´å‘ â€” 左到å³" #: ../src/widgets/text-toolbar.cpp:1754 msgid "Vertical text — lines: left to right" -msgstr "" +msgstr "ç›´å‘æ–‡å­— — 文字列:從左到å³" #. Name #: ../src/widgets/text-toolbar.cpp:1759 -#, fuzzy msgid "Writing mode" -msgstr "繪製模å¼" +msgstr "書寫模å¼" #. Label #: ../src/widgets/text-toolbar.cpp:1760 msgid "Block progression" -msgstr "" +msgstr "文字å€å¡Š" #: ../src/widgets/text-toolbar.cpp:1789 -#, fuzzy msgid "Auto glyph orientation" -msgstr "沿著路徑方å‘" +msgstr "自動文字方å‘" #: ../src/widgets/text-toolbar.cpp:1796 -#, fuzzy msgid "Upright" -msgstr "增亮" +msgstr "å³ä¸Š" #: ../src/widgets/text-toolbar.cpp:1797 -#, fuzzy msgid "Upright glyph orientation" -msgstr "文字方å‘" +msgstr "å³ä¸Šæ–‡å­—æ–¹å‘" #: ../src/widgets/text-toolbar.cpp:1804 msgid "Sideways" -msgstr "" +msgstr "å´é¢" #: ../src/widgets/text-toolbar.cpp:1805 -#, fuzzy msgid "Sideways glyph orientation" -msgstr "沿著路徑方å‘" +msgstr "å´é¢æ–‡å­—æ–¹å‘" #. Name #: ../src/widgets/text-toolbar.cpp:1811 @@ -30535,7 +30229,7 @@ msgstr "文字方å‘" #. Label #: ../src/widgets/text-toolbar.cpp:1812 msgid "Text (glyph) orientation in vertical text." -msgstr "" +msgstr "ç›´å‘æ–‡å­—的文字 (å­—) æ–¹å‘。" #. Drop down menu #: ../src/widgets/text-toolbar.cpp:1845 @@ -30564,9 +30258,8 @@ msgstr "行:" #. short label #: ../src/widgets/text-toolbar.cpp:1852 -#, fuzzy msgid "Spacing between baselines (times font size)" -msgstr "æ¯ä¸€è¡Œçš„é–“éš”è·é›¢ (字型大å°çš„倿•¸)" +msgstr "基本線的間隔è·é›¢ (字型大å°çš„倿•¸)" #. Drop down menu #: ../src/widgets/text-toolbar.cpp:1884 ../src/widgets/text-toolbar.cpp:1915 @@ -30972,7 +30665,6 @@ msgstr "在é¡è‰²æ¨¡å¼è£¡ï¼Œå½±éŸ¿ç‰©ä»¶çš„色相" #. TRANSLATORS: "H" here stands for hue #: ../src/widgets/tweak-toolbar.cpp:291 -#, fuzzy msgctxt "Hue" msgid "H" msgstr "色相" @@ -30983,7 +30675,6 @@ msgstr "在é¡è‰²æ¨¡å¼è£¡ï¼Œå½±éŸ¿ç‰©ä»¶çš„飽和度" #. TRANSLATORS: "S" here stands for Saturation #: ../src/widgets/tweak-toolbar.cpp:307 -#, fuzzy msgctxt "Saturation" msgid "S" msgstr "飽和度" @@ -30994,7 +30685,6 @@ msgstr "在é¡è‰²æ¨¡å¼ï¼Œå½±éŸ¿ç‰©ä»¶çš„亮度" #. TRANSLATORS: "L" here stands for Lightness #: ../src/widgets/tweak-toolbar.cpp:323 -#, fuzzy msgctxt "Lightness" msgid "L" msgstr "明度" @@ -31005,7 +30695,6 @@ msgstr "在é¡è‰²æ¨¡å¼ï¼Œå½±éŸ¿ç‰©ä»¶çš„ä¸é€æ˜Žåº¦" #. TRANSLATORS: "O" here stands for Opacity #: ../src/widgets/tweak-toolbar.cpp:339 -#, fuzzy msgctxt "Opacity" msgid "O" msgstr "ä¸é€æ˜Žåº¦" @@ -31039,7 +30728,7 @@ msgstr "使用輸入è£ç½®çš„壓力來改變微調動作的力é“" #: ../share/extensions/convert2dashes.py:56 msgid "Total number of objects not converted: {}\n" -msgstr "" +msgstr "ä¸è½‰æ›çš„物件總數é‡ï¼š{}\n" #: ../share/extensions/dimension.py:108 msgid "Please select an object." @@ -31152,17 +30841,15 @@ msgid "Need at least 2 paths selected" msgstr "至少需è¦é¸å– 2 個路徑" #: ../share/extensions/funcplot.py:46 -#, fuzzy msgid "" "x-interval cannot be zero. Please modify 'Start X value' or 'End X value'" -msgstr "x é–“è·ä¸èƒ½ç‚ºé›¶ã€‚請修改「起始 Xã€æˆ–ã€ŒçµæŸ Xã€" +msgstr "x é–“è·ä¸èƒ½ç‚ºé›¶ã€‚請修改「起始 X æ•¸å€¼ã€æˆ–ã€ŒçµæŸ X 數值ã€" #: ../share/extensions/funcplot.py:58 -#, fuzzy msgid "" "y-interval cannot be zero. Please modify 'Y value of rectangle's top' or 'Y " "value of rectangle's bottom'" -msgstr "y é–“è·ä¸èƒ½ç‚ºé›¶ã€‚請修改「Y é ‚ç«¯ã€æˆ–「Y 底端ã€" +msgstr "y é–“è·ä¸èƒ½ç‚ºé›¶ã€‚請修改「矩形頂端 Y æ•¸å€¼ã€æˆ–「矩形底端 Y 數值ã€" #: ../share/extensions/funcplot.py:313 msgid "Please select a rectangle" @@ -31266,8 +30953,7 @@ msgstr "" msgid "" "Warning! Tool's and default tool's parameter's (%s) types are not the same " "( type('%s') != type('%s') )." -msgstr "" -"警告ï¼åˆ€å…·å’Œé è¨­åˆ€å…·çš„åƒæ•¸ (%s) 類型ä¸ç›¸åŒ ( 類型('%s') != 類型('%s'))。" +msgstr "警告ï¼åˆ€å…·å’Œé è¨­åˆ€å…·çš„åƒæ•¸ (%s) 類型ä¸ç›¸åŒ ( 類型('%s') != 類型('%s'))。" #: ../share/extensions/gcodetools.py:4372 #, python-format @@ -31414,9 +31100,8 @@ msgid "Please select an object" msgstr "è«‹é¸å–一個物件" #: ../share/extensions/gimp_xcf.py:37 -#, fuzzy msgid "Inkscape must be installed and set in your path variable." -msgstr "å¿…é ˆå·²ç¶“å®‰è£ GIMP 並且設定正確的路徑。" +msgstr "å¿…é ˆå·²ç¶“å®‰è£ Inkscape 並且設定正確的路徑。" #: ../share/extensions/gimp_xcf.py:41 msgid "Gimp must be installed and set in your path variable." @@ -31439,9 +31124,8 @@ msgid "Movements" msgstr "移動" #: ../share/extensions/hpgl_decoder.py:43 -#, fuzzy msgid "Pen " -msgstr "ç­† #" +msgstr "ç­†" #. issue error if no hpgl data found #: ../share/extensions/hpgl_input.py:56 @@ -31461,7 +31145,7 @@ msgid "" msgstr "找ä¸åˆ°è·¯å¾‘。請將è¦å„²å­˜çš„ç‰©ä»¶å…¨éƒ¨è½‰æ›æˆè·¯å¾‘。" #: ../share/extensions/inkex.py:116 -#, fuzzy, python-format +#, python-format msgid "" "The fantastic lxml wrapper for libxml2 is required by inkex.py and therefore " "this extension.Please download and install the latest version from http://" @@ -31473,7 +31157,7 @@ msgid "" msgstr "" "libxml2 çš„å‡æƒ³ lxml åŒ…è¦†å™¨ç›¸ä¾æ–¼ inkex.py è€Œé€™å€‹æ“´å……åŠŸèƒ½éœ€è¦ libxml2。請從 " "http://cheeseshop.python.org/pypi/lxml/ ä¸‹è¼‰ä¸¦å®‰è£æœ€æ–°ç‰ˆæœ¬ï¼Œæˆ–者經由你的套件" -"管ç†ç¨‹å¼ç”¨å‘½ä»¤ (例如:sudo apt-get install python-lxml) 來安è£\n" +"管ç†ç¨‹å¼ç”¨æŒ‡ä»¤ (例如:sudo apt-get install python-lxml) 來安è£\n" "\n" "技術詳細資訊:\n" "%s" @@ -31495,7 +31179,7 @@ msgstr "沒有符åˆè¡¨ç¤ºå¼çš„節點:%s" #: ../share/extensions/inkex.py:358 msgid "SVG Width not set correctly! Assuming width = 100" -msgstr "" +msgstr "SVG å¯¬åº¦è¨­å®šä¸æ­£ç¢ºï¼å‡è¨­å¯¬åº¦ = 100" #: ../share/extensions/interp_att_g.py:175 msgid "There is no selection to interpolate" @@ -31802,28 +31486,29 @@ msgid "" msgstr "該處找ä¸åˆ°è·¯å¾‘。請將你想è¦ç¹ªè£½çš„ç‰©ä»¶å…¨éƒ¨è½‰æ›æˆè·¯å¾‘。" #: ../share/extensions/plotter.py:146 -#, fuzzy msgid "pySerial is not installed. Please follow these steps:" -msgstr "å°šæœªå®‰è£ pySerial。" +msgstr "å°šæœªå®‰è£ pySerial。請ä¾ç…§é€™äº›æ­¥é©Ÿå®‰è£ï¼š" #: ../share/extensions/plotter.py:147 msgid "1. Download and extract (unzip) this file to your local harddisk:" -msgstr "" +msgstr "1. 下載並解壓縮 (unzip) 該檔案到你的本機硬碟:" #: ../share/extensions/plotter.py:149 msgid "" "2. Copy the \"serial\" folder (Can be found inside the just extracted folder)" -msgstr "" +msgstr "2. 複製「serialã€è³‡æ–™å¤¾ (能夠在解壓縮後的資料夾中找到)" #: ../share/extensions/plotter.py:150 msgid "" " into the following Inkscape folder: C:\\[Program files]\\inkscape\\python" "\\Lib\\" msgstr "" +" 到下列 Inkscape 資料夾:C:\\[Program files]\\inkscape\\python" +"\\Lib\\" #: ../share/extensions/plotter.py:151 msgid "3. Close and restart Inkscape." -msgstr "" +msgstr "3. é—œé–‰ä¸¦é‡æ–°å•Ÿå‹• Inkscape。" #: ../share/extensions/plotter.py:200 msgid "" @@ -31941,9 +31626,8 @@ msgid "Please enter a replacement font in the replace all box." msgstr "請在全部å–代欄ä½ä¸­è¼¸å…¥å–代字型。" #: ../share/extensions/restack.py:75 -#, fuzzy msgid "There is no selection to restack." -msgstr "沒有é¸å–物件進行內æ’" +msgstr "沒有é¸å–物件å¯é‡æ–°å †ç–Šã€‚" #: ../share/extensions/summersnight.py:41 msgid "" @@ -31972,6 +31656,11 @@ msgid "" "http://sk1project.org/modules.php?name=Products&product=uniconvertor\n" "and install into your Inkscape's Python location\n" msgstr "" +"你需è¦å®‰è£ UniConvertor 軟體。\n" +"GNU/Linux 系統:安è£å¥—ä»¶ python-uniconverto。\n" +"Windows:從 http://sk1project.org/modules.php?" +"name=Products&product=uniconvertor\n" +"下載並安è£åˆ° Inkscape çš„ Python ä½ç½®\n" #: ../share/extensions/voronoi2svg.py:205 msgid "Please select objects!" @@ -32017,9 +31706,8 @@ msgid "The directory \"%s\" does not exists." msgstr "目錄「%sã€ä¸å­˜åœ¨ã€‚" #: ../share/extensions/webslicer_export.py:76 -#, fuzzy msgid "No slicer layer found." -msgstr "ç„¡ç›®å‰åœ–層。" +msgstr "找ä¸åˆ°åˆ‡ç‰‡åœ–層。" #: ../share/extensions/webslicer_export.py:106 #, python-format @@ -32305,24 +31993,24 @@ msgid "Randomize" msgstr "隨機化" #: ../share/extensions/color_randomize.inx.h:4 -#, fuzzy, no-c-format +#, no-c-format msgid "Hue range (%)" -msgstr "色相旋轉 (°)" +msgstr "è‰²ç›¸ç¯„åœ (°)" #: ../share/extensions/color_randomize.inx.h:6 -#, fuzzy, no-c-format +#, no-c-format msgid "Saturation range (%)" -msgstr "飽和度 (%)" +msgstr "é£½å’Œåº¦ç¯„åœ (%)" #: ../share/extensions/color_randomize.inx.h:8 -#, fuzzy, no-c-format +#, no-c-format msgid "Lightness range (%)" -msgstr "亮度 (%)" +msgstr "äº®åº¦ç¯„åœ (%)" #: ../share/extensions/color_randomize.inx.h:10 -#, fuzzy, no-c-format +#, no-c-format msgid "Opacity range (%)" -msgstr "ä¸é€æ˜Žåº¦ (%0" +msgstr "ä¸é€æ˜Žåº¦ç¯„åœ (%)" #: ../share/extensions/color_randomize.inx.h:12 msgid "" @@ -32330,6 +32018,8 @@ msgid "" "only for objects and groups). Change the range values to limit the distance " "between the original color and the randomized one." msgstr "" +"隨機變化色相ã€é£½å’Œåº¦ã€äº®åº¦å’Œ/或ä¸é€æ˜Žåº¦ (åªæœ‰éš¨æ©Ÿè®ŠåŒ–物件和群組的ä¸é€æ˜Žåº¦)。" +"變更原始é¡è‰²ä¹‹é–“è·é›¢é™åˆ¶çš„æ•¸å€¼ç¯„åœä¸¦éš¨æ©Ÿè®ŠåŒ–一個數值。" #: ../share/extensions/color_removeblue.inx.h:1 msgid "Remove Blue" @@ -32400,8 +32090,7 @@ msgstr "" msgid "" "In order to import Dia files, Dia itself must be installed. You can get Dia " "at http://live.gnome.org/Dia" -msgstr "" -"想è¦åŒ¯å…¥ Dia æª”æ¡ˆï¼Œå¿…é ˆå®‰è£ Dia。你å¯åœ¨ http://live.gnome.org/Dia å–得該程å¼" +msgstr "想è¦åŒ¯å…¥ Dia æª”æ¡ˆï¼Œå¿…é ˆå®‰è£ Dia。你å¯åœ¨ http://live.gnome.org/Dia å–得該程å¼" #: ../share/extensions/dia.inx.h:4 msgid "Dia Diagram (*.dia)" @@ -32466,7 +32155,7 @@ msgid "" "first node of the path.\n" " * Step: numbering step between two nodes." msgstr "" -"此擴充功能會根據下列é¸é …用數字點å–代é¸å–項目的節點:\n" +"此擴充功能會根據下列é¸é …用數字拾å–代é¸å–項目的節點:\n" " * å­—åž‹å°ºå¯¸ï¼šç¯€é»žæ•¸å­—æ¨™ç±¤çš„å¤§å° (20px, 12pt...)。\n" " * 點大å°ï¼šæ–¼è·¯å¾‘節點上放置的點直徑 (10px, 2mm...)。\n" " * 起始點數字:數列的起始數字,指定到此路徑的起始節點。\n" @@ -32672,12 +32361,11 @@ msgstr "DXF 輸入" #: ../share/extensions/dxf_input.inx.h:3 msgid "Method of Scaling:" -msgstr "" +msgstr "縮放方å¼ï¼š" #: ../share/extensions/dxf_input.inx.h:4 -#, fuzzy msgid "Manual scale factor:" -msgstr "或者,使用手動縮放係數:" +msgstr "手動縮放係數:" #: ../share/extensions/dxf_input.inx.h:5 msgid "Manual x-axis origin (mm):" @@ -32701,7 +32389,6 @@ msgid "Text Font:" msgstr "文字字型:" #: ../share/extensions/dxf_input.inx.h:11 -#, fuzzy msgid "" "- AutoCAD Release 13 and newer.\n" "- for manual scaling, assume dxf drawing is in mm.\n" @@ -32713,9 +32400,11 @@ msgid "" "- limited support for BLOCKS, use AutoCAD Explode Blocks instead, if needed." msgstr "" "- AutoCAD 版本 13 åŠæ›´æ–°ç‰ˆæœ¬ã€‚\n" -"- å‡è¨­ dxf 圖畫的單ä½ç‚º mm。\n" +"- 手動縮放,å‡è¨­ dxf 圖畫的單ä½ç‚º mm。\n" "- å‡è¨­ svg 圖畫單ä½ç‚ºã€åƒç´ ï¼Œè§£æžåº¦ç‚º 96 dpi。\n" "- 縮放係數和原點åªå¥—用到手動縮放。\n" +"- ã€Œè‡ªå‹•ç¸®æ”¾ã€æœƒç¬¦åˆ A4 é é¢å¯¬åº¦ã€‚\n" +"- 「從檔案讀å–ã€ä½¿ç”¨è®Šæ•¸ $MEASUREMENT。\n" "- 圖層åªä¿å­˜åœ¨ 檔案->開啟 上,而ä¸åŒ¯å…¥ã€‚\n" "- åƒ…é™æ”¯æ´åœ–å¡Šï¼Œéœ€è¦æ™‚改為使用 AutoCAD 分解圖塊。" @@ -32740,24 +32429,20 @@ msgid "use LWPOLYLINE type of line output" msgstr "使用多折線 (LWPOLYLINE) 類型的直線輸出" #: ../share/extensions/dxf_outlines.inx.h:5 -#, fuzzy msgid "Base unit:" -msgstr "基本單ä½" +msgstr "基本單ä½ï¼š" #: ../share/extensions/dxf_outlines.inx.h:6 -#, fuzzy msgid "Character Encoding:" -msgstr "字元編碼" +msgstr "字元編碼:" #: ../share/extensions/dxf_outlines.inx.h:7 -#, fuzzy msgid "Layer export selection:" -msgstr "圖層匯出é¸å–範åœ" +msgstr "圖層匯出é¸å–範åœï¼š" #: ../share/extensions/dxf_outlines.inx.h:8 -#, fuzzy msgid "Layer match name:" -msgstr "圖層符åˆå稱" +msgstr "圖層符åˆå稱:" #: ../share/extensions/dxf_outlines.inx.h:9 msgid "pt" @@ -34688,6 +34373,8 @@ msgid "" "each pen, name the layers \"Pen 1\", \"Pen 2\", etc., and put your drawings " "in the corresponding layers. This overrules the pen number option above." msgstr "" +"如果你想在筆畫機上使用多種畫筆,é‡å°æ¯ä¸€ç¨®ç•«ç­†å»ºç«‹åœ–層,圖層命å為「筆 1ã€ã€" +"「筆 2ã€ç­‰ç­‰ï¼Œä¸¦å°‡ä½ çš„圖畫放在åŒä¸€åœ–層。此畫筆編號會å–代上é¢çš„é¸é …。" #: ../share/extensions/hpgl_output.inx.h:23 #: ../share/extensions/plotter.inx.h:51 @@ -34710,23 +34397,20 @@ msgstr "" #: ../share/extensions/hpgl_output.inx.h:26 #: ../share/extensions/plotter.inx.h:54 -#, fuzzy msgid "Tool (Knife) offset correction (mm):" -msgstr "刀具åç§» (å…¬é‡):" +msgstr "刀具å移校正 (å…¬é‡):" #: ../share/extensions/hpgl_output.inx.h:27 #: ../share/extensions/plotter.inx.h:55 msgid "" "The offset from the tool tip to the tool axis in mm, set to 0.0 to omit " "command (Default: 0.25)" -msgstr "" -"刀具尖端到刀具軸的å移,單ä½ç‚ºå…¬é‡ï¼Œè¨­å®šç‚º 0 表示çœç•¥æŒ‡ä»¤ (é è¨­:「0.25ã€)" +msgstr "刀具尖端到刀具軸的å移,單ä½ç‚ºå…¬é‡ï¼Œè¨­å®šç‚º 0 表示çœç•¥æŒ‡ä»¤ (é è¨­:「0.25ã€)" #: ../share/extensions/hpgl_output.inx.h:28 #: ../share/extensions/plotter.inx.h:56 -#, fuzzy msgid "Precut" -msgstr "使用é åˆ‡" +msgstr "é åˆ‡" #: ../share/extensions/hpgl_output.inx.h:29 #: ../share/extensions/plotter.inx.h:57 @@ -34778,96 +34462,84 @@ msgid "Export an HP Graphics Language file" msgstr "匯出惠普圖形語言檔" #: ../share/extensions/image_attributes.inx.h:1 -#, fuzzy msgid "Set Image Attributes" -msgstr "設定屬性" +msgstr "設定圖片屬性" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:3 -#, fuzzy msgid "Basic" -msgstr "基本拉ä¸å­—æ¯" +msgstr "基本" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:5 msgid "Support non-uniform scaling" -msgstr "" +msgstr "支æ´éžç­‰æ¯”例縮放" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:7 msgid "Render images blocky" -msgstr "" +msgstr "塊狀繪算點陣圖" #. render images like in 0.48 #: ../share/extensions/image_attributes.inx.h:9 msgid "" "Render all bitmap images like in older Inskcape versions. Available options:" -msgstr "" +msgstr "全部的點陣圖用舊版 Inkscape æ–¹å¼ç¹ªç®—。å¯ç”¨çš„é¸é …:" #. image aspect ratio #: ../share/extensions/image_attributes.inx.h:11 -#, fuzzy msgid "Image Aspect Ratio" -msgstr "圖片簡化" +msgstr "圖片外觀比例" #. image aspect ratio #: ../share/extensions/image_attributes.inx.h:13 msgid "preserveAspectRatio attribute:" -msgstr "" +msgstr "ç¶­æŒå¤–觀比例屬性:" #. image aspect ratio #: ../share/extensions/image_attributes.inx.h:15 msgid "meetOrSlice:" -msgstr "" +msgstr "交切或切層:" #. image-rendering #: ../share/extensions/image_attributes.inx.h:17 -#, fuzzy msgid "Scope:" -msgstr "範åœ" +msgstr "範åœï¼š" #. image-rendering #: ../share/extensions/image_attributes.inx.h:19 -#, fuzzy msgid "Unset" -msgstr "內凹" +msgstr "未設定" #: ../share/extensions/image_attributes.inx.h:20 -#, fuzzy msgid "Change only selected image(s)" -msgstr "åªæ”¹è®Šé¸å–的節點" +msgstr "åªè®Šæ›´é¸æ“‡çš„圖片" #: ../share/extensions/image_attributes.inx.h:21 -#, fuzzy msgid "Change all images in selection" -msgstr "é¸å–範åœè£¡æ‰¾ä¸åˆ°æ©¢åœ“" +msgstr "變更é¸å–項目中的所有圖片" #: ../share/extensions/image_attributes.inx.h:22 -#, fuzzy msgid "Change all images in document" -msgstr "檢查文件的文字拼寫" +msgstr "變更é¸å–文件中的所有圖片" #. image-rendering #: ../share/extensions/image_attributes.inx.h:24 -#, fuzzy msgid "Image Rendering Quality" -msgstr "å½±åƒç¹ªç®—:" +msgstr "å½±åƒç¹ªç®—å“質" #. image-rendering #: ../share/extensions/image_attributes.inx.h:26 -#, fuzzy msgid "Image rendering attribute:" -msgstr "圖形繪算模å¼ï¼š" +msgstr "å½±åƒç¹ªç®—屬性:" #: ../share/extensions/image_attributes.inx.h:27 -#, fuzzy msgid "Apply attribute to parent group of selection" -msgstr "套用變形到é¸å–å€" +msgstr "套用屬性到é¸å–項目群組的上一層" #: ../share/extensions/image_attributes.inx.h:28 -#, fuzzy msgid "Apply attribute to SVG root" -msgstr "設定的屬性:" +msgstr "套用屬性到 SVG 根層" #: ../share/extensions/ink2canvas.inx.h:1 msgid "Convert to html5 canvas" @@ -34896,7 +34568,7 @@ msgstr "命令列é¸é …" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_commandline.inx.h:3 msgid "http://inkscape.org/doc/inkscape-man.html" -msgstr "http://inkscape.org/doc/inkscape-man.zh_TW.html" +msgstr "http://inkscape.org/doc/inkscape-man.html" #: ../share/extensions/inkscape_help_faq.inx.h:1 msgid "FAQ" @@ -34908,9 +34580,8 @@ msgstr "éµç›¤æ»‘é¼ å¿«æ·éµåƒè€ƒ" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_keys.inx.h:3 -#, fuzzy msgid "http://inkscape.org/doc/keys092.html" -msgstr "http://inkscape.org/doc/keys091.zh_TW.html" +msgstr "http://inkscape.org/doc/keys092.html" #: ../share/extensions/inkscape_help_manual.inx.h:1 msgid "Inkscape Manual" @@ -34927,9 +34598,8 @@ msgstr "本版新功能" #. i18n. Please don't translate it unless a page exists in your language #: ../share/extensions/inkscape_help_relnotes.inx.h:3 -#, fuzzy msgid "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92" -msgstr "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.91" +msgstr "http://wiki.inkscape.org/wiki/index.php/Release_notes/0.92" #: ../share/extensions/inkscape_help_reportabug.inx.h:1 msgid "Report a Bug" @@ -34960,13 +34630,12 @@ msgid "Interpolate style" msgstr "å…§æ’æ¨£å¼" #: ../share/extensions/interp.inx.h:7 ../share/extensions/interp_att_g.inx.h:10 -#, fuzzy msgid "Use Z-order" -msgstr "邊框隆起" +msgstr "使用排列順åº" #: ../share/extensions/interp.inx.h:8 ../share/extensions/interp_att_g.inx.h:11 msgid "Workaround for reversed selection order in Live Preview cycles" -msgstr "" +msgstr "åè½‰å³æ™‚é è¦½å¾ªç’°ä¸­çš„é¸å–項目順åºçš„è¦é¿éŒ¯èª¤æŽªæ–½" #: ../share/extensions/interp_att_g.inx.h:1 msgid "Interpolate Attribute in a group" @@ -35552,26 +35221,23 @@ msgstr "移動節點控柄" #: ../share/extensions/jitternodes.inx.h:7 msgid "Distribution of the displacements:" -msgstr "" +msgstr "ä½ç§»çš„分佈:" #: ../share/extensions/jitternodes.inx.h:8 -#, fuzzy msgid "Uniform" -msgstr "楔形文字" +msgstr "å‡å‹»" #: ../share/extensions/jitternodes.inx.h:9 msgid "Pareto" -msgstr "" +msgstr "æŸæ‹‰åœ–" #: ../share/extensions/jitternodes.inx.h:10 -#, fuzzy msgid "Gaussian" -msgstr "高斯模糊" +msgstr "高斯" #: ../share/extensions/jitternodes.inx.h:11 -#, fuzzy msgid "Log-normal" -msgstr "標準" +msgstr "å°æ•¸å¸¸æ…‹" #: ../share/extensions/jitternodes.inx.h:13 msgid "" @@ -35866,34 +35532,29 @@ msgid "Measurement Type: " msgstr "測é‡é¡žåž‹ï¼š" #: ../share/extensions/measure.inx.h:4 -#, fuzzy msgid "Text Presets" -msgstr "文字å好設定" +msgstr "文字å‰ç½®è¨­å®š" #: ../share/extensions/measure.inx.h:6 -#, fuzzy msgid "Text on Path" -msgstr "路徑文字" +msgstr "文字隨路徑變化" #: ../share/extensions/measure.inx.h:8 -#, fuzzy, no-c-format +#, no-c-format msgid "Offset (%)" -msgstr "åç§» (px):" +msgstr "åç§» (%)" #: ../share/extensions/measure.inx.h:9 -#, fuzzy msgid "Text anchor:" -msgstr "文字錨點" +msgstr "文字錨點:" #: ../share/extensions/measure.inx.h:10 -#, fuzzy msgid "Fixed Text" -msgstr "æµå‹•文字" +msgstr "固定文字" #: ../share/extensions/measure.inx.h:11 -#, fuzzy msgid "Angle (°):" -msgstr "X 角度:" +msgstr "角度 (°):" #: ../share/extensions/measure.inx.h:12 msgid "Font size (px):" @@ -35922,50 +35583,42 @@ msgid "Center of Mass" msgstr "質心" #: ../share/extensions/measure.inx.h:21 -#, fuzzy msgid "Text on Path, Start" -msgstr "路徑文字" +msgstr "文字隨路徑變化,起點" #: ../share/extensions/measure.inx.h:22 -#, fuzzy msgid "Text on Path, Middle" -msgstr "路徑文字" +msgstr "文字隨路徑變化,中間" #: ../share/extensions/measure.inx.h:23 -#, fuzzy msgid "Text on Path, End" -msgstr "路徑文字" +msgstr "文字隨路徑變化,終點" #: ../share/extensions/measure.inx.h:24 msgid "Fixed Text, Start of Path" -msgstr "" +msgstr "固定文字,路徑起點" #: ../share/extensions/measure.inx.h:25 msgid "Fixed Text, Center of BBox" -msgstr "" +msgstr "固定文字,邊界框中心" #: ../share/extensions/measure.inx.h:26 -#, fuzzy msgid "Fixed Text, Center of Mass" -msgstr "質心" +msgstr "固定文字,質心" #: ../share/extensions/measure.inx.h:28 -#, fuzzy msgid "Center" msgstr "中心點" #: ../share/extensions/measure.inx.h:30 -#, fuzzy msgid "Start of Path" -msgstr "起始路徑:" +msgstr "路徑起點" #: ../share/extensions/measure.inx.h:31 -#, fuzzy msgid "Center of BBox" -msgstr "質心" +msgstr "邊界框中心" #: ../share/extensions/measure.inx.h:32 -#, fuzzy msgid "Center of Mass" msgstr "質心" @@ -36043,174 +35696,151 @@ msgstr "檢視下一個字形" #: ../share/extensions/nicechart.inx.h:1 msgid "NiceCharts" -msgstr "" +msgstr "美觀圖表" #: ../share/extensions/nicechart.inx.h:2 -#, fuzzy msgid "Data" -msgstr "資料輸入 / 輸出" +msgstr "資料" #: ../share/extensions/nicechart.inx.h:3 -#, fuzzy msgid "Data from file" -msgstr "從檔案載入" +msgstr "檔案資料" #: ../share/extensions/nicechart.inx.h:5 -#, fuzzy msgid "Delimiter:" -msgstr "斜切é™åˆ¶ï¼š" +msgstr "欄ä½åˆ†éš”字元:" #: ../share/extensions/nicechart.inx.h:6 msgid "Column that contains the keys:" -msgstr "" +msgstr "åŒ…å«æ­¤éµå€¼çš„æ¬„ä½ï¼š" #: ../share/extensions/nicechart.inx.h:7 -#, fuzzy msgid "Column that contains the values:" -msgstr "一個常數投票值" +msgstr "åŒ…å«æ­¤æ•¸å€¼çš„æ¬„ä½ï¼š" #: ../share/extensions/nicechart.inx.h:8 msgid "File encoding (e.g. utf-8):" -msgstr "" +msgstr "檔案編碼 (例如 utf-8):" #: ../share/extensions/nicechart.inx.h:9 msgid "First line contains headings" -msgstr "" +msgstr "ç¬¬ä¸€è¡ŒåŒ…å«æª”é ­" #: ../share/extensions/nicechart.inx.h:10 -#, fuzzy msgid "Direct input" -msgstr "æ–¹å‘" +msgstr "直接輸入" #: ../share/extensions/nicechart.inx.h:11 -#, fuzzy msgid "Data:" -msgstr "資料輸入 / 輸出" +msgstr "資料:" #: ../share/extensions/nicechart.inx.h:12 -#, fuzzy msgid "Enter the full path to a CSV file:" -msgstr "日誌檔的完整路徑:" +msgstr "輸入 CSV 檔案的完整路徑:" #: ../share/extensions/nicechart.inx.h:13 msgid "Type in comma separated values:" -msgstr "" +msgstr "輸入以逗號分隔開的數值組:" #: ../share/extensions/nicechart.inx.h:14 msgid "(format like this: apples:3,bananas:5)" -msgstr "" +msgstr "(æ ¼å¼åƒé€™æ¨£ï¼šapples:3,bananas:5)" #: ../share/extensions/nicechart.inx.h:15 -#, fuzzy msgid "Labels" -msgstr "標籤:" +msgstr "標籤" #: ../share/extensions/nicechart.inx.h:16 -#, fuzzy msgid "Font:" -msgstr "å­—åž‹" +msgstr "字型:" #: ../share/extensions/nicechart.inx.h:18 -#, fuzzy msgid "Font color:" -msgstr "月份é¡è‰²ï¼š" +msgstr "å­—åž‹é¡è‰²ï¼š" #: ../share/extensions/nicechart.inx.h:19 msgid "Charts" -msgstr "" +msgstr "圖表" #: ../share/extensions/nicechart.inx.h:20 -#, fuzzy msgid "Draw horizontally" -msgstr "水平移動" +msgstr "水平繪製" #: ../share/extensions/nicechart.inx.h:21 -#, fuzzy msgid "Bar length:" -msgstr "主è¦é•·åº¦(_J):" +msgstr "é•·æ¢é•·åº¦ï¼š" #: ../share/extensions/nicechart.inx.h:22 -#, fuzzy msgid "Bar width:" -msgstr "模糊寬度:" +msgstr "é•·æ¢å¯¬åº¦ï¼š" #: ../share/extensions/nicechart.inx.h:23 -#, fuzzy msgid "Pie radius:" -msgstr "內徑:" +msgstr "圓餅åŠå¾‘:" #: ../share/extensions/nicechart.inx.h:24 -#, fuzzy msgid "Bar offset:" -msgstr "é–‹å§‹åç§»" +msgstr "é•·æ¢å移:" #: ../share/extensions/nicechart.inx.h:26 msgid "Offset between chart and labels:" -msgstr "" +msgstr "圖表和標籤之間的å移:" #: ../share/extensions/nicechart.inx.h:27 msgid "Offset between chart and chart title:" -msgstr "" +msgstr "圖表和圖表標題之間的å移:" #: ../share/extensions/nicechart.inx.h:28 msgid "Work around aliasing effects (creates overlapping segments)" -msgstr "" +msgstr "é¿é–‹åœ–形失真效果措施 (建立é‡ç–Šç·šæ®µ)" #: ../share/extensions/nicechart.inx.h:29 -#, fuzzy msgid "Color scheme:" -msgstr "é¡è‰²ï¼š" +msgstr "é…色:" #: ../share/extensions/nicechart.inx.h:30 -#, fuzzy msgid "Custom colors:" -msgstr "色彩凹凸" +msgstr "自訂é¡è‰²ï¼š" #: ../share/extensions/nicechart.inx.h:31 -#, fuzzy msgid "Reverse color scheme" -msgstr "移除邊框é¡è‰²" +msgstr "å轉é…色" #: ../share/extensions/nicechart.inx.h:32 -#, fuzzy msgid "Drop shadow" msgstr "下è½å¼é™°å½±" #: ../share/extensions/nicechart.inx.h:37 msgid "SAP" -msgstr "" +msgstr "SAP" #: ../share/extensions/nicechart.inx.h:38 -#, fuzzy msgid "Values" msgstr "數值" #: ../share/extensions/nicechart.inx.h:39 -#, fuzzy msgid "Show values" -msgstr "顯示控制柄" +msgstr "顯示數值" #: ../share/extensions/nicechart.inx.h:40 -#, fuzzy msgid "Chart type:" -msgstr "陰影類型:" +msgstr "圖表類型:" #: ../share/extensions/nicechart.inx.h:41 -#, fuzzy msgid "Bar chart" -msgstr "æ¢ç¢¼é«˜åº¦ï¼š" +msgstr "é•·æ¢åœ–" #: ../share/extensions/nicechart.inx.h:42 msgid "Pie chart" -msgstr "" +msgstr "圓餅圖" #: ../share/extensions/nicechart.inx.h:43 msgid "Pie chart (percentage)" -msgstr "" +msgstr "圓餅圖 (百分比)" #: ../share/extensions/nicechart.inx.h:44 msgid "Stacked bar chart" -msgstr "" +msgstr "堆疊長æ¢åœ–" #: ../share/extensions/param_curves.inx.h:1 msgid "Parametric Curves" @@ -36492,45 +36122,41 @@ msgid "The Baud rate of your serial connection (Default: 9600)" msgstr "ä½ çš„åºåˆ—連線鮑率 (é è¨­:「9600ã€)" #: ../share/extensions/plotter.inx.h:8 -#, fuzzy msgid "Serial byte size:" -msgstr "調色盤大å°ï¼š" +msgstr "åºåˆ—ä½å…ƒçµ„大å°ï¼š" #: ../share/extensions/plotter.inx.h:10 #, no-c-format msgid "" "The Byte size of your serial connection, 99% of all plotters use the default " "setting (Default: 8 Bits)" -msgstr "" +msgstr "ä½ çš„åºåˆ—連線ä½å…ƒçµ„大å°ï¼Œ99% 的繪圖機使用é è¨­è¨­å®šå€¼ (é è¨­ï¼š8 ä½å…ƒ)" #: ../share/extensions/plotter.inx.h:11 -#, fuzzy msgid "Serial stop bits:" -msgstr "åºåˆ—連接埠:" +msgstr "åºåˆ—åœæ­¢ä½å…ƒï¼š" #: ../share/extensions/plotter.inx.h:13 #, no-c-format msgid "" "The Stop bits of your serial connection, 99% of all plotters use the default " "setting (Default: 1 Bit)" -msgstr "" +msgstr "ä½ çš„åºåˆ—é€£ç·šåœæ­¢ä½å…ƒï¼Œ99% 的繪圖機使用é è¨­è¨­å®šå€¼ (é è¨­ï¼š1 ä½å…ƒ)" #: ../share/extensions/plotter.inx.h:14 -#, fuzzy msgid "Serial parity:" -msgstr "åºåˆ—連接埠:" +msgstr "åºåˆ—奇嶿€§ï¼š" #: ../share/extensions/plotter.inx.h:16 #, no-c-format msgid "" "The Parity of your serial connection, 99% of all plotters use the default " "setting (Default: None)" -msgstr "" +msgstr "ä½ çš„åºåˆ—é€£ç·šå¥‡å¶æ€§ï¼Œ99% 的繪圖機使用é è¨­è¨­å®šå€¼ (é è¨­ï¼šç„¡)" #: ../share/extensions/plotter.inx.h:17 -#, fuzzy msgid "Serial flow control:" -msgstr "錄放控制:" +msgstr "åºåˆ—ä¸²æµæŽ§åˆ¶ï¼š" #: ../share/extensions/plotter.inx.h:18 msgid "" @@ -36567,9 +36193,8 @@ msgid "DMPL" msgstr "DMPL" #: ../share/extensions/plotter.inx.h:27 -#, fuzzy msgid "KNK Plotter (HPGL variant)" -msgstr "KNK Zing (HPGL è¡ç”Ÿåž‹)" +msgstr "KNK 繪圖機 (HPGL è¡ç”Ÿåž‹)" #: ../share/extensions/plotter.inx.h:28 msgid "" @@ -37064,29 +36689,24 @@ msgid "Restack" msgstr "釿–°å †ç–Š" #: ../share/extensions/restack.inx.h:2 -#, fuzzy msgid "Based on Position" -msgstr "修改節點ä½ç½®" +msgstr "ä¾ç…§ä½ç½®" #: ../share/extensions/restack.inx.h:3 -#, fuzzy msgid "Presets" -msgstr "å‰ç½®è¨­å®šï¼š" +msgstr "å‰ç½®è¨­å®š" #: ../share/extensions/restack.inx.h:6 -#, fuzzy msgid "Horizontal:" -msgstr "æ°´å¹³(_H):" +msgstr "水平:" #: ../share/extensions/restack.inx.h:7 -#, fuzzy msgid "Vertical:" -msgstr "垂直(_V):" +msgstr "垂直:" #: ../share/extensions/restack.inx.h:8 -#, fuzzy msgid "Restack Direction" -msgstr "釿–°å †ç–Šæ–¹å‘:" +msgstr "釿–°å †ç–Šæ–¹å‘" #: ../share/extensions/restack.inx.h:9 msgid "Left to Right (0)" @@ -37113,9 +36733,8 @@ msgid "Radial Inward" msgstr "å‘心" #: ../share/extensions/restack.inx.h:15 -#, fuzzy msgid "Object Reference Point" -msgstr "å°Žå…¥-導出åƒè€ƒé»ž" +msgstr "物件åƒè€ƒé»ž" #: ../share/extensions/restack.inx.h:17 #: ../share/extensions/text_extract.inx.h:9 @@ -37136,23 +36755,20 @@ msgid "Bottom" msgstr "底端" #: ../share/extensions/restack.inx.h:21 -#, fuzzy msgid "Based on Z-Order" -msgstr "邊框隆起" +msgstr "便“šæŽ’åˆ—é †åº" #: ../share/extensions/restack.inx.h:22 -#, fuzzy msgid "Restack Mode" -msgstr "釿–°å †ç–Š" +msgstr "釿–°å †ç–Šæ¨¡å¼" #: ../share/extensions/restack.inx.h:23 -#, fuzzy msgid "Reverse Z-Order" -msgstr "å轉漸層" +msgstr "å轉排列順åº" #: ../share/extensions/restack.inx.h:24 msgid "Shuffle Z-Order" -msgstr "" +msgstr "隨機排列順åº" #: ../share/extensions/restack.inx.h:26 msgid "" @@ -37161,6 +36777,9 @@ msgid "" "objects inside a single selected group, or a selection of multiple objects " "on the current drawing level (layer or group)." msgstr "" +"此擴充功能會ä¾ç…§ç‰©ä»¶ç•«å¸ƒä¸Šçš„ä½ç½®æˆ–ç›®å‰çš„æŽ’列順åºè®Šæ›´ç‰©ä»¶çš„æŽ’列順åºã€‚é¸å–:此" +"æ“´å……åŠŸèƒ½æœƒé‡æ–°æŽ’列單一é¸å–群組內的物件,或目å‰åœ–畫層級上的多個物件é¸å–é …ç›® " +"(圖層或群組)。" #: ../share/extensions/restack.inx.h:27 #: ../share/extensions/ungroup_deep.inx.h:6 @@ -37180,13 +36799,12 @@ msgid "Minimum size:" msgstr "最å°å°ºå¯¸ï¼š" #: ../share/extensions/rtree.inx.h:4 -#, fuzzy msgid "Omit redundant segments" -msgstr "拉直線段" +msgstr "çœç•¥å¤šé¤˜ç·šæ®µ" #: ../share/extensions/rtree.inx.h:5 msgid "Lift pen for backward steps" -msgstr "" +msgstr "å‘後階段抬å‡ç•«ç­†" #: ../share/extensions/rubberstretch.inx.h:1 msgid "Rubber Stretch" @@ -37207,7 +36825,6 @@ msgid "Optimized SVG Output" msgstr "最佳化的 SVG 輸出" #: ../share/extensions/scour.inx.h:3 -#, fuzzy msgid "Number of significant digits for coordinates:" msgstr "忍™çš„æœ‰æ•ˆæ•¸å­—使•¸ï¼š" @@ -37219,6 +36836,9 @@ msgid "" "\"3\" is specified, the coordinate 3.14159 is output as 3.14 while the " "coordinate 123.675 is output as 124." msgstr "" +"æŒ‡å®šåæ¨™è¼¸å‡ºçš„æœ‰æ•ˆæ•¸å­—使•¸ã€‚æ³¨æ„æœ‰æ•ˆæ•¸å­—䏿˜¯å°æ•¸ä½æ•¸ï¼Œè€Œæ˜¯è¼¸å‡ºçš„æ•´é«”數字ä½" +"數。例如若指定為 \"3\"ï¼Œé‚£éº¼åæ¨™ 3.14159 會輸出為 3.14 è€Œåæ¨™ 123.675 則會輸" +"出為 124。" #: ../share/extensions/scour.inx.h:5 msgid "Shorten color values" @@ -37228,7 +36848,7 @@ msgstr "縮短色彩值" msgid "" "Convert all color specifications to #RRGGBB (or #RGB where applicable) " "format." -msgstr "" +msgstr "è½‰æ›æ‰€æœ‰é¡è‰²è¦æ ¼ç‚º #RRGGBB (或é©ç•¶çš„ #RGB) æ ¼å¼ã€‚" #: ../share/extensions/scour.inx.h:7 msgid "Convert CSS attributes to XML attributes" @@ -37238,18 +36858,17 @@ msgstr "å°‡ CSS å±¬æ€§è½‰æ›æˆ XML 屬性" msgid "" "Convert styles from style tags and inline style=\"\" declarations into XML " "attributes." -msgstr "" +msgstr "將樣å¼å¾žæ¨£å¼æ¨™ç±¤å’Œè¡Œå…§æ¨£å¼=\"\" å®£å‘Šè½‰æ›æˆ XML 屬性。" #: ../share/extensions/scour.inx.h:9 -#, fuzzy msgid "Collapse groups" -msgstr "全部折疊" +msgstr "折疊群組" #: ../share/extensions/scour.inx.h:10 msgid "" "Remove useless groups, promoting their contents up one level. Requires " "\"Remove unused IDs\" to be set." -msgstr "" +msgstr "移除無用的群組,並將其內容往上移一層。須è¦è¨­å®šã€Œç§»é™¤æ²’用到的識別碼ã€ã€‚" #: ../share/extensions/scour.inx.h:11 msgid "Create groups for similar attributes" @@ -37259,7 +36878,7 @@ msgstr "建立相似屬性的群組" msgid "" "Create groups for runs of elements having at least one attribute in common " "(e.g. fill-color, stroke-opacity, ...)." -msgstr "" +msgstr "為執行元件建立群組並至少有一æ¢å…±é€šå±¬æ€§ (例如填色ã€é‚Šæ¡†ä¸é€æ˜Žåº¦...)。" #: ../share/extensions/scour.inx.h:13 msgid "Keep editor data" @@ -37270,14 +36889,16 @@ msgid "" "Don't remove editor-specific elements and attributes. Currently supported: " "Inkscape, Sodipodi and Adobe Illustrator." msgstr "" +"ä¸è¦ç§»é™¤ç·¨è¼¯ç¨‹å¼å°ˆå±¬å…ƒä»¶å’Œå±¬æ€§ã€‚ç›®å‰æ”¯æ´ï¼šInkscapeã€Sodipodi å’Œ Adobe " +"Illustrator。" #: ../share/extensions/scour.inx.h:15 msgid "Keep unreferenced definitions" -msgstr "" +msgstr "ä¿ç•™æœªè¢«å¼•用的定義" #: ../share/extensions/scour.inx.h:16 msgid "Keep element definitions that are not currently used in the SVG" -msgstr "" +msgstr "ä¿ç•™ç›®å‰ SVG 中沒有用到的元件定義" #: ../share/extensions/scour.inx.h:17 msgid "Work around renderer bugs" @@ -37288,11 +36909,12 @@ msgid "" "Works around some common renderer bugs (mainly libRSVG) at the cost of a " "slightly larger SVG file." msgstr "" +"以ç¨å¾®è¼ƒå¤§çš„ SVG 檔案為代價é¿é–‹æŸäº›åœ–形繪算引擎共通的程å¼éŒ¯èª¤ (ä¸»è¦æ˜¯ " +"libRSVG)。" #: ../share/extensions/scour.inx.h:20 -#, fuzzy msgid "Remove the XML declaration" -msgstr "移除此 xml 宣告" +msgstr "移除 xml 宣告" #: ../share/extensions/scour.inx.h:21 msgid "" @@ -37300,6 +36922,8 @@ msgid "" "especially if special characters are used in the document) from the file " "header." msgstr "" +"從檔案表頭移除 XML 宣告 (此宣告是éžå¿…è¦çš„ï¼Œä½†æ‡‰è©²è¦æä¾›å®£å‘Šè³‡è¨Šï¼Œå°¤å…¶å¦‚æžœæ–‡ä»¶" +"有使用到特殊字元)。" #: ../share/extensions/scour.inx.h:22 msgid "Remove metadata" @@ -37311,6 +36935,8 @@ msgid "" "include license and author information, alternate versions for non-SVG-" "enabled browsers, etc." msgstr "" +"移除中繼資料標籤åŠå…¶åŒ…å«çš„資訊,該標籤å¯èƒ½æœ‰æŽˆæ¬Šå’Œä½œè€…資訊ã€ä¸æ”¯æ´ SVG ç€è¦½å™¨" +"的替代版本等等。" #: ../share/extensions/scour.inx.h:24 msgid "Remove comments" @@ -37318,10 +36944,9 @@ msgstr "移除註解" #: ../share/extensions/scour.inx.h:25 msgid "Remove all XML comments from output." -msgstr "" +msgstr "從輸出中移除全部 XML 註解。" #: ../share/extensions/scour.inx.h:26 -#, fuzzy msgid "Embed raster images" msgstr "嵌入點陣圖" @@ -37329,7 +36954,7 @@ msgstr "嵌入點陣圖" msgid "" "Resolve external references to raster images and embed them as Base64-" "encoded data URLs." -msgstr "" +msgstr "è§£æžå¤–部點陣圖引用並將圖片內嵌為 Base64 編碼資料網å€ã€‚" #: ../share/extensions/scour.inx.h:28 msgid "Enable viewboxing" @@ -37341,10 +36966,12 @@ msgid "" "Set page size to 100%/100% (full width and height of the display area) and " "introduce a viewBox specifying the drawings dimensions." msgstr "" +"å°‡é é¢å¤§å°è¨­å®šç‚º 100%/100% (顯示å€åŸŸçš„完整寬度和高度) 並引入檢視框指定的圖畫" +"尺寸。" #: ../share/extensions/scour.inx.h:31 msgid "Format output with line-breaks and indentation" -msgstr "" +msgstr "用斷行和縮排格å¼åŒ–輸出" #: ../share/extensions/scour.inx.h:32 msgid "" @@ -37352,11 +36979,12 @@ msgid "" "to hand-edit the SVG file you can disable this option to bring down the file " "size even more at the cost of clarity." msgstr "" +"ç”¢ç”Ÿç¾Žè§€çš„è¼¸å‡ºæ ¼å¼ (åŒ…å«æ–·è¡Œ)ã€‚å¦‚æžœä½ ä¸æ‰“算手動編輯 SVG 檔案,å¯ä»¥åœç”¨æ­¤é¸é …" +"ä»¥æ¸›å°æª”案大å°åŠé™ä½Žå¯è®€æ€§ã€‚" #: ../share/extensions/scour.inx.h:33 -#, fuzzy msgid "Indentation characters:" -msgstr "è¬åœ‹ç¢¼å­—元:" +msgstr "縮排字元:" #: ../share/extensions/scour.inx.h:34 msgid "" @@ -37364,21 +36992,24 @@ msgid "" "Specify \"None\" to disable indentation. This option has no effect if " "\"Format output with line-breaks and indentation\" is disabled." msgstr "" +"用於輸出中æ¯å±¤å·¢ç‹€çµæ§‹çš„ç¸®æŽ’é¡žåž‹ã€‚è¨­å®šã€Œç„¡ã€æœƒåœç”¨ç¸®æŽ’。如果「用斷行和縮排格" +"å¼åŒ–輸出ã€å·²åœç”¨å‰‡æ­¤é¸é …䏿œƒæœ‰ä»»ä½•作用。" #: ../share/extensions/scour.inx.h:35 -#, fuzzy msgid "Depth of indentation:" -msgstr "深度函數:" +msgstr "縮排深度:" #: ../share/extensions/scour.inx.h:36 msgid "" "The depth of the chosen type of indentation. E.g. if you choose \"2\" every " "nesting level in the output will be indented by two additional spaces/tabs." msgstr "" +"鏿“‡ç¸®æŽ’é¡žåž‹çš„æ·±åº¦ã€‚ä¾‹å¦‚ä½ è‹¥é¸æ“‡ \"2\" 則輸出中æ¯å±¤å·¢ç‹€çµæ§‹æœƒç”¨å…©å€‹é™„加空格/" +"定ä½å­—元進行縮排。" #: ../share/extensions/scour.inx.h:37 msgid "Strip the \"xml:space\" attribute from the root SVG element" -msgstr "" +msgstr "從根層 SVG 元件移除 \"xml:space\" 屬性" #: ../share/extensions/scour.inx.h:38 msgid "" @@ -37386,16 +37017,16 @@ msgid "" "root SVG element which instructs the SVG editor not to change whitespace in " "the document at all (and therefore overrides the options above)." msgstr "" +"若輸入檔案在根層 SVG 元件中給定 \"xml:space='preserve'\" 會éžå¸¸æœ‰ç”¨ï¼Œé€™æœƒæŒ‡" +"示 SVG 編輯程å¼ä¸è¦è®Šæ›´æ–‡ä»¶ä¸­çš„空白 (因此會覆蓋上é¢çš„é¸é …)。" #: ../share/extensions/scour.inx.h:39 -#, fuzzy msgid "Document options" -msgstr "文件屬性(_D)..." +msgstr "文件é¸é …" #: ../share/extensions/scour.inx.h:40 -#, fuzzy msgid "Pretty-printing" -msgstr "油畫" +msgstr "美觀列å°" #: ../share/extensions/scour.inx.h:41 msgid "Space" @@ -37411,20 +37042,18 @@ msgid "None" msgstr "ç„¡" #: ../share/extensions/scour.inx.h:44 -#, fuzzy msgid "IDs" -msgstr "ID" +msgstr "識別碼" #: ../share/extensions/scour.inx.h:45 -#, fuzzy msgid "Remove unused IDs" -msgstr "移除紅色" +msgstr "移除沒用到的識別碼" #: ../share/extensions/scour.inx.h:46 msgid "" "Remove all unreferenced IDs from elements. Those are not needed for " "rendering." -msgstr "" +msgstr "從元件中移除所有沒被引用的識別碼。圖形繪算時ä¸éœ€è¦é€™äº›è­˜åˆ¥ç¢¼ã€‚" #: ../share/extensions/scour.inx.h:47 msgid "Shorten IDs" @@ -37436,19 +37065,20 @@ msgid "" "shortest values to the most-referenced elements. For instance, " "\"linearGradient5621\" will become \"a\" if it is the most used element." msgstr "" +"åªä½¿ç”¨å°å¯«å­—æ¯è®“識別碼長度變短,且指定最短值給最多引用的元件。例" +"如,\"linearGradient5621\" è‹¥æ˜¯æœ€å¸¸è¢«ä½¿ç”¨çš„å…ƒä»¶æœƒè®Šæˆ \"a\"。" #: ../share/extensions/scour.inx.h:49 msgid "Prefix shortened IDs with:" -msgstr "" +msgstr "用此字首縮短識別碼:" #: ../share/extensions/scour.inx.h:50 msgid "Prepend shortened IDs with the specified prefix." -msgstr "" +msgstr "以指定的字首來縮短識別碼。" #: ../share/extensions/scour.inx.h:51 -#, fuzzy msgid "Preserve manually created IDs not ending with digits" -msgstr "ä¿ç•™æ‰‹å‹•å»ºç«‹éžæ•¸å­—çµå°¾çš„ ID å稱" +msgstr "ä¿ç•™æ‰‹å‹•å»ºç«‹ä¸”éžæ•¸å­—çµå°¾çš„識別碼" #: ../share/extensions/scour.inx.h:52 msgid "" @@ -37457,28 +37087,29 @@ msgid "" "preserved while numbered IDs (as they are generated by most SVG editors " "including Inkscape) will be removed/shortened." msgstr "" +"當移除或縮短數字å¼è­˜åˆ¥ç¢¼ (這些識別碼由多數的 SVG 編輯程å¼ç”¢ç”Ÿï¼ŒåŒ…括 " +"Inkscape) 時,手動建立åƒè€ƒã€æ¨™ç±¤ç‰¹å®šå…ƒä»¶æˆ–ç¾¤çµ„çš„å¯æè¿°è­˜åˆ¥ç¢¼ (例如 " +"#arrowStart, #arrowEnd or #textLabels) 會被ä¿ç•™ã€‚" #: ../share/extensions/scour.inx.h:53 -#, fuzzy msgid "Preserve the following IDs:" -msgstr "" -"找到下列字型:\n" -"%s" +msgstr "ä¿ç•™ä¸‹åˆ—識別碼:" #: ../share/extensions/scour.inx.h:54 msgid "A comma-separated list of IDs that are to be preserved." -msgstr "" +msgstr "è¦ä¿ç•™çš„識別碼,用逗號分隔開。" #: ../share/extensions/scour.inx.h:55 -#, fuzzy msgid "Preserve IDs starting with:" -msgstr "ä¿ç•™ä»¥æ­¤é–‹é ­çš„ ID å稱:" +msgstr "ä¿ç•™ä»¥æ­¤å­—首起始的識別碼:" #: ../share/extensions/scour.inx.h:56 msgid "" "Preserve all IDs that start with the specified prefix (e.g. specify \"flag\" " "to preserve \"flag-mx\", \"flag-pt\", etc.)." msgstr "" +"ä¿ç•™æ‰€æœ‰çµ¦å®šå­—首起始的識別碼 (例如指定「flagã€æœƒä¿ç•™ã€Œflag-mxã€ã€ã€Œflag-ptã€" +"等等)。" #: ../share/extensions/scour.inx.h:57 msgid "Optimized SVG (*.svg)" @@ -37494,18 +37125,15 @@ msgstr "無縫圖樣" #: ../share/extensions/seamless_pattern.inx.h:2 #: ../share/extensions/seamless_pattern_procedural.inx.h:2 -#, fuzzy msgid "Custom Width (px):" msgstr "自訂寬度 (px):" #: ../share/extensions/seamless_pattern.inx.h:3 #: ../share/extensions/seamless_pattern_procedural.inx.h:3 -#, fuzzy msgid "Custom Height (px):" msgstr "自訂高度 (px):" #: ../share/extensions/seamless_pattern.inx.h:4 -#, fuzzy msgid "This extension overwrites the current document" msgstr "此擴充功能會覆寫目å‰çš„æ–‡ä»¶" @@ -38004,28 +37632,24 @@ msgid "From Side c and Angles a, b" msgstr "從邊 c 和角 aã€b" #: ../share/extensions/ungroup_deep.inx.h:1 -#, fuzzy msgid "Deep Ungroup" -msgstr "解散群組" +msgstr "深層解散群組" #: ../share/extensions/ungroup_deep.inx.h:2 -#, fuzzy msgid "Ungroup all groups in the selected object." -msgstr "用é¸å–的務件作為基準建立è£å‰ªç¾¤çµ„" +msgstr "解散é¸å–物件中的所有群組。" #: ../share/extensions/ungroup_deep.inx.h:3 -#, fuzzy msgid "Starting Depth" -msgstr "起始路徑:" +msgstr "起始深度" #: ../share/extensions/ungroup_deep.inx.h:4 -#, fuzzy msgid "Stopping Depth (from top)" -msgstr "從é¸å–å€ç§»é™¤å‰ªè£è·¯å¾‘" +msgstr "åœæ­¢æ·±åº¦ (從頂部)" #: ../share/extensions/ungroup_deep.inx.h:5 msgid "Depth to Keep (from bottom)" -msgstr "" +msgstr "è¦ä¿ç•™çš„æ·±åº¦ (從底部)" #: ../share/extensions/voronoi2svg.inx.h:1 msgid "Voronoi Diagram" @@ -38044,9 +37668,8 @@ msgid "Show the bounding box" msgstr "顯示邊界框" #: ../share/extensions/voronoi2svg.inx.h:6 -#, fuzzy msgid "Triangles color" -msgstr "外三角" +msgstr "三角形é¡è‰²" #: ../share/extensions/voronoi2svg.inx.h:7 msgid "Delaunay Triangulation" @@ -38065,22 +37688,20 @@ msgid "Automatic from selected objects" msgstr "從é¸å–的物件自動化" #: ../share/extensions/voronoi2svg.inx.h:12 -#, fuzzy msgid "Options for Delaunay Triangulation" -msgstr "德洛涅三角剖分" +msgstr "德洛涅三角剖分é¸é …" #: ../share/extensions/voronoi2svg.inx.h:13 msgid "Default (Stroke black and no fill)" -msgstr "" +msgstr "é è¨­ (黑色邊框且無填色)" #: ../share/extensions/voronoi2svg.inx.h:14 -#, fuzzy msgid "Triangles with item color" -msgstr "變更色票é¡è‰²" +msgstr "é …ç›®é¡è‰²çš„三角形" #: ../share/extensions/voronoi2svg.inx.h:15 msgid "Triangles with item color (random on apply)" -msgstr "" +msgstr "é …ç›®é¡è‰²çš„三角形 (套用時隨機變化)" #: ../share/extensions/voronoi2svg.inx.h:17 msgid "" @@ -38195,8 +37816,7 @@ msgstr "åœ¨æ‰€æœ‰å…¶ä»–è£¡å°‡ç¬¬ä¸€æ¬¡é¸æ“‡è¨­å®šç‚ºå±¬æ€§" msgid "" "This effect adds a feature visible (or usable) only on a SVG enabled web " "browser (like Firefox)." -msgstr "" -"這個特效增加的功能åªå¯è¦‹ (或å¯ç”¨) æ–¼æ”¯æ´ SVG 的網é ç€è¦½å™¨ (如 firefox)。" +msgstr "這個特效增加的功能åªå¯è¦‹ (或å¯ç”¨) æ–¼æ”¯æ´ SVG 的網é ç€è¦½å™¨ (如 firefox)。" #: ../share/extensions/web-set-att.inx.h:27 msgid "" @@ -38248,8 +37868,7 @@ msgstr "ç¬¬ä¸€å€‹é¸æ“‡å‚³è¼¸åˆ°å…¨éƒ¨å…¶ä»–" msgid "" "This effect transmits one or more attributes from the first selected element " "to the second when an event occurs." -msgstr "" -"ç•¶ä¸€å€‹äº‹ä»¶ç™¼ç”Ÿæ™‚ï¼Œé€™å€‹ç‰¹æ•ˆå‚³è¼¸ä¸€å€‹æˆ–å¤šå€‹å±¬æ€§å¾žç¬¬ä¸€å€‹é¸æ“‡çš„元件到第二個。" +msgstr "ç•¶ä¸€å€‹äº‹ä»¶ç™¼ç”Ÿæ™‚ï¼Œé€™å€‹ç‰¹æ•ˆå‚³è¼¸ä¸€å€‹æˆ–å¤šå€‹å±¬æ€§å¾žç¬¬ä¸€å€‹é¸æ“‡çš„元件到第二個。" #: ../share/extensions/web-transmit-att.inx.h:26 msgid "" @@ -38505,30 +38124,262 @@ msgstr "用於美工圖形的æµè¡Œåœ–形檔案格å¼" msgid "XAML Input" msgstr "XAML 輸入" +#~ msgid "Vertical Page Center" +#~ msgstr "垂直é é¢ä¸­å¿ƒ" + +#~ msgid "Horizontal Page Center" +#~ msgstr "æ°´å¹³é é¢ä¸­å¿ƒ" + +#~ msgid "Free from reflection line" +#~ msgstr "從å射線起始的任æ„ä½ç½®" + +#~ msgid "X from middle knot" +#~ msgstr "從中間環çµèµ·å§‹çš„ X" + +#~ msgid "Y from middle knot" +#~ msgstr "從中間環çµèµ·å§‹çš„ Y" + +#~ msgid "Symmetry move mode" +#~ msgstr "å°ç¨±ç§»å‹•模å¼" + +#~ msgid "Discard original path?" +#~ msgstr "丟棄原本路徑?" + +#~ msgid "Check this to only keep the mirrored part of the path" +#~ msgstr "勾é¸é€™å€‹ä»¥åªä¿ç•™è·¯å¾‘çš„é¡åƒéƒ¨ä»½" + +#~ msgid "Fuse paths" +#~ msgstr "èžåˆè·¯å¾‘" + +#~ msgid "Fuse original and the reflection into a single path" +#~ msgstr "將原始和åå°„èžåˆæˆå–®ä¸€è·¯å¾‘" + +#~ msgid "Opposite fuse" +#~ msgstr "相åèžåˆ" + +#~ msgid "Picks the other side of the mirror as the original" +#~ msgstr "鏿“‡é¡åƒå¦ä¸€å´ä½œç‚ºåŽŸå§‹è·¯å¾‘" + +#~ msgid "Start mirror line" +#~ msgstr "èµ·å§‹é¡åƒç·š" + +#~ msgid "End mirror line" +#~ msgstr "çµæŸé¡åƒç·š" + +#~ msgid "Adjust the center" +#~ msgstr "調整中心" + +#~ msgid "Add Stored to measure tool" +#~ msgstr "加入儲存項目到測é‡å·¥å…·" + +#~ msgid "" +#~ "The selected object is not a path.\n" +#~ "Try using the procedure Path->Object to Path." +#~ msgstr "" +#~ "é¸å–çš„ç‰©ä»¶ä¸æ˜¯è·¯å¾‘。\n" +#~ "試著使用「路徑->物件轉æˆè·¯å¾‘ã€åŠŸèƒ½ã€‚" + +#~ msgid "" +#~ "pySerial is not installed.\n" +#~ "\n" +#~ "1. Download pySerial here (not the \".exe\"!): http://pypi.python.org/" +#~ "pypi/pyserial\n" +#~ "2. Extract the \"serial\" subfolder from the zip to the following folder: " +#~ "C:\\[Program files]\\inkscape\\python\\Lib\\\n" +#~ "3. Restart Inkscape." +#~ msgstr "" +#~ "æ²’æœ‰å®‰è£ pySerial。\n" +#~ "\n" +#~ "1. 從這裡 http://pypi.python.org/pypi/pyserial 下載 pySerial (並éžä¸‹è¼‰ã€Œ." +#~ "exe.ã€ï¼)\n" +#~ "2. 從 zip 檔案解壓縮 \"serial\" å­è³‡æ–™å¤¾åˆ°ï¼šC:\\[Program files]\\inkscape" +#~ "\\python\\Lib\\\n" +#~ "3. 釿–°å•Ÿå‹• Inkscape。" + +#~ msgid "Use normal distribution" +#~ msgstr "使用正常分布" + +#~ msgid "PS+LaTeX: Omit text in PS, and create LaTeX file" +#~ msgstr "PS+LaTeX:çœç•¥ PS 裡的文字,並建立 LaTeX 檔" + +#~ msgid "EPS+LaTeX: Omit text in EPS, and create LaTeX file" +#~ msgstr "EPS+LaTeX:çœç•¥ EPS 裡的文字,並建立 LaTeX 檔" + +#~ msgid "import via Poppler" +#~ msgstr "用 Poppler 匯入" + +#~ msgid "Text handling:" +#~ msgstr "文字處ç†ï¼š" + +#~ msgid "Import text as text" +#~ msgstr "å°‡æ–‡å­—åŒ¯å…¥æˆæ–‡å­—" + +#~ msgid "Boolops" +#~ msgstr "布林é‹ç®—" + +#~ msgid "Ignore cusp nodes" +#~ msgstr "忽略尖銳節點" + +#~ msgid "Change ignoring cusp nodes" +#~ msgstr "改變忽略的尖銳節點" + +#~ msgid "Show helper paths" +#~ msgstr "顯示輔助路徑" + +#~ msgid "Leaned" +#~ msgstr "傾斜" + +#~ msgid "Start path lean" +#~ msgstr "起始路徑傾斜" + +#~ msgid "End path lean" +#~ msgstr "çµæŸè·¯å¾‘傾斜" + +#~ msgid "Control handle 0 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 0 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 1 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 1 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 2 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 2 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 3 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 3 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 4 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 4 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 5 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 5 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 6 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 6 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 7 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 7 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 8x9 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 8x9 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 10x11 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 10x11 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 12 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 12 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 13 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 13 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 14 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 14 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 15 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 15 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 16 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 17 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 18 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 19 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 16 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 20x21 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 20x21 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 22x23 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 22x23 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 24x26 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 24x26 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 25x27 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 25x27 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 28x30 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 28x30 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Control handle 29x31 - Ctrl+Alt+Click to reset" +#~ msgstr "控制柄 29x31 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Top Left - Ctrl+Alt+Click to reset" +#~ msgstr "左上 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Top Right - Ctrl+Alt+Click to reset" +#~ msgstr "å³ä¸Š - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Down Left - Ctrl+Alt+Click to reset" +#~ msgstr "左下 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Down Right - Ctrl+Alt+Click to reset" +#~ msgstr "å³ä¸‹ - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" + +#~ msgid "Roughen unit" +#~ msgstr "粗糙化單ä½" + +#~ msgid "Helper nodes" +#~ msgstr "輔助標示節點" + +#~ msgid "Show helper nodes" +#~ msgstr "顯示輔助標示節點" + +#~ msgid "Helper handles" +#~ msgstr "輔助標示控制點" + +#~ msgid "Show helper handles" +#~ msgstr "顯示輔助標示控制點" + #~ msgid "" #~ "Select exactly 2 paths to perform difference, division, or path " #~ "cut." #~ msgstr "è«‹é¸æ“‡å‰›å¥½å…©æ¢è·¯å¾‘來執行差集﹑分割或剪切路徑。" +#~ msgid "Default _units:" +#~ msgstr "é è¨­å–®ä½(_U):" + #~ msgid "" #~ "The feTile filter primitive tiles a region with its input graphic" #~ msgstr "此鋪排 (feTile) 濾é¡åŸºå…ƒç”¨å…¶è¼¸å…¥çš„圖形鋪排æˆä¸€å€‹å€åŸŸ" +#~ msgid "" +#~ "Always convert the text size units above into pixels (px) before saving " +#~ "to file" +#~ msgstr "儲存檔案å‰éƒ½å°‡ä¸Šé¢çš„æ–‡å­—大å°å–®ä½è½‰æ›æˆåƒç´  (px)" + +#~ msgid "_Delay (in ms):" +#~ msgstr "å»¶é² (毫秒)(_D):" + +#~ msgid "Radius " +#~ msgstr "åŠå¾‘" + +#~ msgid "(" +#~ msgstr "(" + +#~ msgid "_Templates..." +#~ msgstr "範本(_T)..." + #~ msgid "Miter _limit:" #~ msgstr "斜切é™åˆ¶ï¼š" -#~ msgid "" -#~ "The selected object is not a path.\n" -#~ "Try using the procedure Path->Object to Path." -#~ msgstr "" -#~ "é¸å–çš„ç‰©ä»¶ä¸æ˜¯è·¯å¾‘。\n" -#~ "試著使用「路徑->物件轉æˆè·¯å¾‘ã€åŠŸèƒ½ã€‚" +#~ msgid "You need to install the UniConvertor software.\n" +#~ msgstr "ä½ å¿…é ˆå®‰è£ UniConvertor 軟體。\n" #~ msgid "" #~ "Converts to HSL, randomizes hue and/or saturation and/or lightness and " #~ "converts it back to RGB." #~ msgstr "è½‰æ›æˆ HSL,將色相ã€é£½å’Œåº¦å’Œ (或) 亮度隨機化並且轉æ›å›ž RGB。" +#~ msgid "Use automatic scaling to size A4" +#~ msgstr "自動縮放為 A4 尺寸" + +#~ msgid "http://wiki.inkscape.org/wiki/index.php/FAQ" +#~ msgstr "http://wiki.inkscape.org/wiki/index.php/FAQ" + #~ msgid "Text Orientation: " #~ msgstr "文字方å‘:" @@ -38543,9 +38394,6 @@ msgstr "XAML 輸入" #~ msgid "None" #~ msgstr "ç„¡" -#~ msgid "Use normal distribution" -#~ msgstr "使用正常分布" - #~ msgid "Arbitrary Angle" #~ msgstr "ä»»æ„角度" @@ -38661,104 +38509,6 @@ msgstr "XAML 輸入" #~ "用到的識別å稱,但如果想è¦ä¿ç•™çš„識別å稱都以相åŒå­—首開頭 (例如 #flag-mxã€" #~ "#flag-pt),å¯ä»¥ä½¿ç”¨æ­¤é¸é …。" -#~ msgid "import via Poppler" -#~ msgstr "用 Poppler 匯入" - -#~ msgid "Text handling:" -#~ msgstr "文字處ç†ï¼š" - -#~ msgid "Import text as text" -#~ msgstr "å°‡æ–‡å­—åŒ¯å…¥æˆæ–‡å­—" - -#~ msgid "Boolops" -#~ msgstr "布林é‹ç®—" - -#~ msgid "Ignore cusp nodes" -#~ msgstr "忽略尖銳節點" - -#~ msgid "Change ignoring cusp nodes" -#~ msgstr "改變忽略的尖銳節點" - -#~ msgid "Show helper paths" -#~ msgstr "顯示輔助路徑" - -#~ msgid "Leaned" -#~ msgstr "傾斜" - -#~ msgid "Start path lean" -#~ msgstr "起始路徑傾斜" - -#~ msgid "End path lean" -#~ msgstr "çµæŸè·¯å¾‘傾斜" - -#~ msgid "Roughen unit" -#~ msgstr "粗糙化單ä½" - -#~ msgid "Helper nodes" -#~ msgstr "輔助標示節點" - -#~ msgid "Show helper nodes" -#~ msgstr "顯示輔助標示節點" - -#~ msgid "Helper handles" -#~ msgstr "輔助標示控制點" - -#~ msgid "Show helper handles" -#~ msgstr "顯示輔助標示控制點" - -#~ msgid "_Delay (in ms):" -#~ msgstr "å»¶é² (毫秒)(_D):" - -#~ msgid "You need to install the UniConvertor software.\n" -#~ msgstr "ä½ å¿…é ˆå®‰è£ UniConvertor 軟體。\n" - -#~ msgid "http://wiki.inkscape.org/wiki/index.php/FAQ" -#~ msgstr "http://wiki.inkscape.org/wiki/index.php/FAQ" - -#~ msgid "PS+LaTeX: Omit text in PS, and create LaTeX file" -#~ msgstr "PS+LaTeX:çœç•¥ PS 裡的文字,並建立 LaTeX 檔" - -#~ msgid "EPS+LaTeX: Omit text in EPS, and create LaTeX file" -#~ msgstr "EPS+LaTeX:çœç•¥ EPS 裡的文字,並建立 LaTeX 檔" - -#~ msgid "Top Left - Ctrl+Alt+Click to reset" -#~ msgstr "左上 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" - -#~ msgid "Top Right - Ctrl+Alt+Click to reset" -#~ msgstr "å³ä¸Š - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" - -#~ msgid "Down Left - Ctrl+Alt+Click to reset" -#~ msgstr "左下 - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" - -#~ msgid "Down Right - Ctrl+Alt+Click to reset" -#~ msgstr "å³ä¸‹ - Ctrl+Alt+滑鼠點擊å¯é‡è¨­" - -#~ msgid "_Templates..." -#~ msgstr "範本(_T)..." - -#~ msgid "Custom Width (px.):" -#~ msgstr "自訂寬度 (px):" - -#~ msgid "Custom Height (px.):" -#~ msgstr "自訂高度 (px):" - -#~ msgid "Default _units:" -#~ msgstr "é è¨­å–®ä½(_U):" - -#~ msgid "" -#~ "Always convert the text size units above into pixels (px) before saving " -#~ "to file" -#~ msgstr "儲存檔案å‰éƒ½å°‡ä¸Šé¢çš„æ–‡å­—大å°å–®ä½è½‰æ›æˆåƒç´  (px)" - -#~ msgid "Radius " -#~ msgstr "åŠå¾‘" - -#~ msgid "(" -#~ msgstr "(" - -#~ msgid "Use automatic scaling to size A4" -#~ msgstr "自動縮放為 A4 尺寸" - #~ msgid "A4 Landscape Page" #~ msgstr "A4 æ©«é " @@ -39740,12 +39490,6 @@ msgstr "XAML 輸入" #~ msgid "Determines on which side the line or line segment is infinite." #~ msgstr "決定哪一邊的線或線段為無é™é•·ã€‚" -#~ msgid "Discard original path?" -#~ msgstr "丟棄原本路徑?" - -#~ msgid "Check this to only keep the mirrored part of the path" -#~ msgstr "勾é¸é€™å€‹ä»¥åªä¿ç•™è·¯å¾‘çš„é¡åƒéƒ¨ä»½" - #~ msgid "Reflection line:" #~ msgstr "å射線段:" @@ -39755,9 +39499,6 @@ msgstr "XAML 輸入" #~ msgid "Handle to control the distance of the offset from the curve" #~ msgstr "從曲線來æ“作控制å移的è·é›¢" -#~ msgid "Adjust the offset" -#~ msgstr "調整åç§»" - #~ msgid "Specifies the left end of the parallel" #~ msgstr "指定此平行線的左邊端點" @@ -40981,15 +40722,9 @@ msgstr "XAML 輸入" #~ msgid "Drop shadow under the cut-out of the shape" #~ msgstr "在形狀的é¤ç©ºéƒ¨ä½ä¸‹æ–¹åŠ ä¸Šä¸‹è½å¼é™°å½±" -#~ msgid "Horizontal edge detect" -#~ msgstr "嵿¸¬æ°´å¹³é‚Šç·£" - #~ msgid "Detect horizontal color edges in object" #~ msgstr "嵿¸¬ç‰©ä»¶çš„æ°´å¹³é¡è‰²é‚Šç·£" -#~ msgid "Vertical edge detect" -#~ msgstr "嵿¸¬åž‚直邊緣" - #~ msgid "Detect vertical color edges in object" #~ msgstr "嵿¸¬ç‰©ä»¶å…§çš„垂直é¡è‰²é‚Šç·£" -- cgit v1.2.3 From 3e82131b4b48ee13ee216ffd5b0649e1d70f1baa Mon Sep 17 00:00:00 2001 From: Ivan Mas??r Date: Wed, 3 Aug 2016 14:45:36 +0200 Subject: * [INTL:zh_TW] Traditional Chinese translation update (fix) (bzr r15033) --- po/zh_TW.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/po/zh_TW.po b/po/zh_TW.po index 0b4406253..3bc1b96d7 100755 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -12907,7 +12907,7 @@ msgstr "å‹•æ…‹åç§»" #: ../src/sp-offset.cpp:339 #, c-format msgid "%s by %f pt" -msgstr "以 %f pt %s" +msgstr "%s åç§» %f pt" #: ../src/sp-offset.cpp:340 msgid "outset" @@ -22590,8 +22590,8 @@ msgid "" "BSpline node: drag to shape the path (more: Shift, Ctrl, Alt). %g " "power" msgstr "" -"è²æ°é›²å½¢ç·šï¼š%g 權é‡ï¼Œæ‹–æ›³å¯æ”¹è®Šè·¯å¾‘的形狀 (更進一步:Shift, Ctrl, " -"Alt)。%g力é‡" +"è²æ°é›²å½¢ç·šç¯€é»žï¼šæ‹–æ›³å¯æ”¹è®Šè·¯å¾‘的形狀 (更進一步:Shift, Ctrl, Alt)。%g " +"力é‡" #: ../src/ui/tool/node.cpp:1454 #, c-format -- cgit v1.2.3 From 35830f456cadaecf8b8e3944e3031a1a93f6cb41 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Wed, 3 Aug 2016 15:29:38 +0200 Subject: Removed unused includes, decreased compilation time. Once again (bzr r15034) --- src/attribute-rel-css.cpp | 1 - src/attribute-rel-svg.cpp | 1 - src/attribute-rel-util.cpp | 1 - src/attribute-sort-util.cpp | 2 -- src/attributes.cpp | 1 - src/box3d-side.cpp | 2 -- src/box3d.cpp | 6 ------ src/color-profile.cpp | 15 +++++---------- src/conn-avoid-ref.cpp | 6 ------ src/context-fns.cpp | 1 - src/desktop-style.cpp | 7 ------- src/desktop.cpp | 14 +------------- src/device-manager.cpp | 4 +--- src/dir-util.h | 2 +- src/document-subset.cpp | 11 ----------- src/document-undo.cpp | 1 - src/document.cpp | 9 +-------- src/ege-color-prof-tracker.cpp | 1 - src/event-log.cpp | 4 ---- src/extension/db.cpp | 2 +- src/extension/dependency.cpp | 4 +--- src/extension/effect.cpp | 1 - src/extension/error-file.cpp | 2 +- src/extension/execution-env.cpp | 5 +---- src/extension/extension.cpp | 2 +- src/extension/implementation/implementation.cpp | 3 +-- src/extension/implementation/xslt.cpp | 4 +--- src/extension/input.cpp | 2 -- src/extension/loader.cpp | 1 - src/extension/loader.h | 3 ++- src/extension/patheffect.cpp | 1 - src/extension/system.cpp | 5 ++--- src/file.cpp | 13 +------------ src/filter-chemistry.cpp | 5 ----- src/filters/blend.cpp | 4 ---- src/filters/colormatrix.cpp | 1 - src/filters/componenttransfer-funcnode.cpp | 2 -- src/filters/componenttransfer.cpp | 4 ---- src/filters/convolvematrix.cpp | 2 -- src/filters/distantlight.cpp | 1 - src/filters/flood.cpp | 1 - src/filters/gaussian-blur.cpp | 4 +--- src/filters/image.cpp | 3 --- src/filters/morphology.cpp | 1 - src/filters/pointlight.cpp | 2 -- src/filters/pointlight.h | 9 ++++++++- src/filters/spotlight.cpp | 1 - src/filters/turbulence.cpp | 2 -- src/gc-anchored.cpp | 1 - src/gc-finalized.cpp | 1 - src/gradient-chemistry.cpp | 4 ---- src/gradient-drag.cpp | 7 +------ src/graphlayout.cpp | 10 ---------- src/helper/action-context.cpp | 1 - src/helper/action.cpp | 2 -- src/helper/geom-nodetype.cpp | 2 -- src/helper/geom-pathstroke.cpp | 4 ---- src/helper/geom.cpp | 7 ------- src/helper/pixbuf-ops.cpp | 6 +----- src/helper/png-write.cpp | 4 +--- src/id-clash.cpp | 2 -- src/inkscape.cpp | 11 +---------- src/inkview.cpp | 3 --- src/knot-holder-entity.cpp | 2 -- src/knot.cpp | 2 -- src/knotholder.cpp | 4 ---- src/layer-manager.cpp | 6 ------ src/layer-model.cpp | 6 +----- src/line-geometry.cpp | 1 - src/line-snapper.cpp | 2 -- src/live_effects/effect.cpp | 19 +------------------ src/live_effects/lpe-angle_bisector.cpp | 1 - src/live_effects/lpe-attach-path.cpp | 7 ------- src/live_effects/lpe-bendpath.cpp | 16 ---------------- src/live_effects/lpe-bounding-box.cpp | 4 ---- src/live_effects/lpe-circle_3pts.cpp | 1 - src/live_effects/lpe-circle_with_radius.cpp | 1 - src/live_effects/lpe-constructgrid.cpp | 3 --- src/live_effects/lpe-copy_rotate.cpp | 4 ---- src/live_effects/lpe-curvestitch.cpp | 8 -------- src/live_effects/lpe-dynastroke.cpp | 6 ------ src/live_effects/lpe-ellipse_5pts.cpp | 1 - src/live_effects/lpe-envelope.cpp | 14 -------------- src/live_effects/lpe-extrude.cpp | 5 ----- src/live_effects/lpe-fill-between-many.cpp | 3 --- src/live_effects/lpe-fill-between-strokes.cpp | 3 --- src/live_effects/lpe-fillet-chamfer.cpp | 5 ----- src/live_effects/lpe-gears.cpp | 5 ----- src/live_effects/lpe-interpolate.cpp | 3 --- src/live_effects/lpe-interpolate_points.cpp | 2 -- src/live_effects/lpe-jointype.cpp | 4 ---- src/live_effects/lpe-knot.cpp | 7 ------- src/live_effects/lpe-lattice.cpp | 14 +------------- src/live_effects/lpe-lattice2.cpp | 15 +-------------- src/live_effects/lpe-line_segment.cpp | 4 ---- src/live_effects/lpe-mirror_symmetry.cpp | 7 ------- src/live_effects/lpe-offset.cpp | 4 ---- src/live_effects/lpe-parallel.cpp | 4 ---- src/live_effects/lpe-path_length.cpp | 2 -- src/live_effects/lpe-patternalongpath.cpp | 10 ---------- src/live_effects/lpe-perp_bisector.cpp | 3 --- src/live_effects/lpe-perspective-envelope.cpp | 1 - src/live_effects/lpe-perspective_path.cpp | 5 ----- src/live_effects/lpe-powerstroke.cpp | 15 --------------- src/live_effects/lpe-recursiveskeleton.cpp | 6 ------ src/live_effects/lpe-rough-hatches.cpp | 8 -------- src/live_effects/lpe-roughen.cpp | 5 ----- src/live_effects/lpe-ruler.cpp | 4 ---- src/live_effects/lpe-show_handles.cpp | 1 - src/live_effects/lpe-simplify.cpp | 9 --------- src/live_effects/lpe-skeleton.cpp | 4 ---- src/live_effects/lpe-sketch.cpp | 8 -------- src/live_effects/lpe-spiro.cpp | 3 --- src/live_effects/lpe-tangent_to_curve.cpp | 4 ---- src/live_effects/lpe-taperstroke.cpp | 8 -------- src/live_effects/lpe-test-doEffect-stack.cpp | 3 --- src/live_effects/lpe-transform_2pts.cpp | 3 --- src/live_effects/lpe-vonkoch.cpp | 2 -- src/live_effects/lpegroupbbox.cpp | 2 -- src/live_effects/lpeobject-reference.cpp | 1 - src/live_effects/lpeobject.cpp | 3 --- src/live_effects/spiro.cpp | 1 - src/main-cmdlineact.cpp | 1 - src/main.cpp | 16 +--------------- src/message-stack.cpp | 1 - src/object-hierarchy.cpp | 3 --- src/object-snapper.cpp | 6 ------ src/path-chemistry.cpp | 5 +---- src/persp3d-reference.cpp | 1 - src/persp3d.cpp | 2 -- src/perspective-line.cpp | 1 - src/preferences.cpp | 1 - src/prefix.cpp | 3 +-- src/resource-manager.cpp | 6 ++---- src/rubberband.cpp | 1 - src/satisfied-guide-cns.cpp | 1 - src/selcue.cpp | 3 --- src/selection-chemistry.cpp | 25 +------------------------ src/selection-describer.cpp | 11 +---------- src/selection.cpp | 10 ++-------- src/selection.h | 2 -- src/seltrans.cpp | 8 +------- src/shortcuts.cpp | 4 +--- src/snap-preferences.cpp | 2 -- src/snap.cpp | 6 ------ src/snap.h | 1 - src/snapped-curve.cpp | 1 - src/snapped-line.cpp | 3 +-- src/snapper.cpp | 1 - src/sp-clippath.cpp | 1 - src/sp-conn-end-pair.cpp | 2 -- src/sp-conn-end.cpp | 2 -- src/sp-ellipse.cpp | 3 --- src/sp-factory.cpp | 5 ----- src/sp-filter-primitive.cpp | 6 +----- src/sp-filter.cpp | 6 +----- src/sp-flowregion.cpp | 4 +--- src/sp-flowtext.cpp | 7 +------ src/sp-font-face.cpp | 2 +- src/sp-font.cpp | 4 +--- src/sp-glyph-kerning.cpp | 1 - src/sp-glyph.cpp | 2 -- src/sp-gradient.cpp | 7 ------- src/sp-guide.cpp | 6 +----- src/sp-hatch-path.cpp | 5 ----- src/sp-hatch.cpp | 3 --- src/sp-image.cpp | 3 --- src/sp-item-group.cpp | 7 +------ src/sp-item-rm-unsatisfied-cns.cpp | 2 -- src/sp-item-update-cns.cpp | 4 +--- src/sp-item.cpp | 12 +----------- src/sp-line.cpp | 1 - src/sp-line.h | 3 ++- src/sp-lpe-item.cpp | 9 --------- src/sp-marker.cpp | 1 - src/sp-mask.cpp | 1 - src/sp-mesh-patch.cpp | 1 - src/sp-mesh-row.cpp | 2 -- src/sp-mesh.cpp | 1 - src/sp-metadata.cpp | 2 +- src/sp-missing-glyph.cpp | 2 +- src/sp-namedview.cpp | 2 -- src/sp-object.cpp | 2 -- src/sp-offset.cpp | 7 +------ src/sp-paint-server.cpp | 1 - src/sp-path.cpp | 4 +--- src/sp-pattern.cpp | 6 +----- src/sp-polygon.cpp | 1 - src/sp-polyline.cpp | 2 -- src/sp-rect.cpp | 5 +---- src/sp-script.cpp | 2 -- src/sp-shape.cpp | 9 +-------- src/sp-solid-color.cpp | 4 ---- src/sp-spiral.cpp | 2 -- src/sp-star.cpp | 4 +--- src/sp-stop.cpp | 1 - src/sp-string.cpp | 4 ---- src/sp-switch.cpp | 1 - src/sp-symbol.cpp | 3 +-- src/sp-tag-use-reference.cpp | 3 --- src/sp-text.cpp | 5 ----- src/sp-tref-reference.cpp | 2 -- src/sp-tref.cpp | 5 ----- src/sp-tspan.cpp | 4 +--- src/sp-use-reference.cpp | 3 --- src/sp-use.cpp | 1 - src/splivarot.cpp | 9 --------- src/style-internal.cpp | 7 +------ src/style.cpp | 16 +--------------- src/svg/css-ostringstream.cpp | 1 - src/svg/path-string.cpp | 1 - src/svg/svg-affine.cpp | 3 +-- src/svg/svg-angle.cpp | 5 +---- src/svg/svg-color.cpp | 1 - src/svg/svg-path.cpp | 4 ---- src/text-chemistry.cpp | 3 +-- src/text-editing.cpp | 2 -- src/ui/clipboard.cpp | 12 ------------ src/ui/control-manager.cpp | 1 - src/ui/dialog-events.cpp | 5 +---- src/ui/dialog/align-and-distribute.cpp | 5 +---- src/ui/dialog/clonetiler.cpp | 14 +------------- src/ui/dialog/color-item.cpp | 10 +--------- src/ui/dialog/debug.cpp | 3 +-- src/ui/dialog/desktop-tracker.cpp | 1 - src/ui/dialog/dialog-manager.cpp | 5 +---- src/ui/dialog/dialog.cpp | 5 +---- src/ui/dialog/dock-behavior.cpp | 6 +----- src/ui/dialog/document-metadata.cpp | 3 +-- src/ui/dialog/document-properties.cpp | 14 +------------- src/ui/dialog/export.cpp | 15 +-------------- src/ui/dialog/extension-editor.cpp | 4 +--- src/ui/dialog/filedialog.cpp | 5 ----- src/ui/dialog/fill-and-stroke.cpp | 4 ---- src/ui/dialog/filter-effects-dialog.cpp | 25 ++++--------------------- src/ui/dialog/find.cpp | 9 +-------- src/ui/dialog/floating-behavior.cpp | 4 +--- src/ui/dialog/font-substitution.cpp | 7 +------ src/ui/dialog/glyphs.cpp | 5 ----- src/ui/dialog/grid-arrange-tab.cpp | 4 ---- src/ui/dialog/guides.cpp | 6 +----- src/ui/dialog/icon-preview.cpp | 7 ++----- src/ui/dialog/inkscape-preferences.cpp | 10 +--------- src/ui/dialog/input.cpp | 9 --------- src/ui/dialog/knot-properties.cpp | 11 +---------- src/ui/dialog/layer-properties.cpp | 6 ++---- src/ui/dialog/layers.cpp | 10 +--------- src/ui/dialog/livepatheffect-add.cpp | 3 +-- src/ui/dialog/livepatheffect-editor.cpp | 11 +---------- src/ui/dialog/lpe-fillet-chamfer-properties.cpp | 12 +----------- src/ui/dialog/lpe-powerstroke-properties.cpp | 13 +------------ src/ui/dialog/memory.cpp | 5 +++-- src/ui/dialog/messages.cpp | 2 +- src/ui/dialog/new-from-template.cpp | 3 +-- src/ui/dialog/object-attributes.cpp | 3 --- src/ui/dialog/object-properties.cpp | 3 --- src/ui/dialog/objects.cpp | 14 ++------------ src/ui/dialog/ocaldialogs.cpp | 13 ++++--------- src/ui/dialog/pixelartdialog.cpp | 6 ------ src/ui/dialog/polar-arrange-tab.cpp | 2 -- src/ui/dialog/print.cpp | 3 +-- src/ui/dialog/spellcheck.cpp | 9 +-------- src/ui/dialog/svg-fonts-dialog.cpp | 6 ++---- src/ui/dialog/swatches.cpp | 9 --------- src/ui/dialog/symbols.cpp | 5 ----- src/ui/dialog/tags.cpp | 15 +-------------- src/ui/dialog/template-load-tab.cpp | 14 +++----------- src/ui/dialog/template-widget.cpp | 7 +------ src/ui/dialog/text-edit.cpp | 7 ------- src/ui/dialog/tracedialog.cpp | 5 ++--- src/ui/dialog/transformation.cpp | 6 +----- src/ui/dialog/undo-history.cpp | 6 +----- src/ui/dialog/xml-tree.cpp | 5 ----- src/ui/interface.cpp | 14 ++------------ src/ui/object-edit.cpp | 7 +------ src/ui/previewholder.cpp | 1 - src/ui/selected-color.cpp | 2 +- src/ui/shape-editor.cpp | 5 +---- src/ui/tool-factory.cpp | 2 -- src/ui/tool/control-point-selection.cpp | 1 - src/ui/tool/control-point.cpp | 2 -- src/ui/tool/curve-drag-point.cpp | 3 --- src/ui/tool/manipulator.cpp | 4 ++-- src/ui/tool/modifier-tracker.cpp | 1 - src/ui/tool/multi-path-manipulator.cpp | 2 -- src/ui/tool/node.cpp | 5 ----- src/ui/tool/path-manipulator.cpp | 13 ------------- src/ui/tool/selector.cpp | 1 - src/ui/tool/transform-handle-set.cpp | 4 ---- src/ui/tools-switch.cpp | 6 ------ src/ui/tools/arc-tool.cpp | 3 +-- src/ui/tools/box3d-tool.cpp | 9 --------- src/ui/tools/calligraphic-tool.cpp | 9 --------- src/ui/tools/connector-tool.cpp | 7 ------- src/ui/tools/dropper-tool.cpp | 5 +---- src/ui/tools/dynamic-base.cpp | 6 ------ src/ui/tools/eraser-tool.cpp | 11 ----------- src/ui/tools/flood-tool.cpp | 12 +----------- src/ui/tools/freehand-base.cpp | 16 +--------------- src/ui/tools/gradient-tool.cpp | 9 +-------- src/ui/tools/lpe-tool.cpp | 5 +---- src/ui/tools/measure-tool.cpp | 18 +----------------- src/ui/tools/mesh-tool.cpp | 3 +-- src/ui/tools/node-tool.cpp | 6 ------ src/ui/tools/pen-tool.cpp | 12 ------------ src/ui/tools/pencil-tool.cpp | 5 ----- src/ui/tools/rect-tool.cpp | 5 ----- src/ui/tools/select-tool.cpp | 4 +--- src/ui/tools/spiral-tool.cpp | 5 ----- src/ui/tools/spray-tool.cpp | 14 -------------- src/ui/tools/star-tool.cpp | 5 +---- src/ui/tools/text-tool.cpp | 6 +----- src/ui/tools/tool-base.cpp | 10 +--------- src/ui/tools/tweak-tool.cpp | 12 ------------ src/ui/tools/zoom-tool.cpp | 1 - src/ui/uxmanager.cpp | 5 +---- src/ui/widget/addtoicon.cpp | 4 +--- src/ui/widget/anchor-selector.cpp | 1 - src/ui/widget/clipmaskicon.cpp | 2 +- src/ui/widget/color-icc-selector.cpp | 3 --- src/ui/widget/color-notebook.cpp | 4 ---- src/ui/widget/color-scales.cpp | 4 +--- src/ui/widget/color-slider.cpp | 3 +-- src/ui/widget/color-wheel-selector.cpp | 6 +----- src/ui/widget/dock-item.cpp | 2 -- src/ui/widget/entity-entry.cpp | 3 +-- src/ui/widget/entry.cpp | 2 +- src/ui/widget/filter-effect-chooser.cpp | 4 ---- src/ui/widget/font-variants.cpp | 10 +--------- src/ui/widget/frame.cpp | 2 +- src/ui/widget/highlight-picker.cpp | 3 --- src/ui/widget/imageicon.cpp | 7 +------ src/ui/widget/layer-selector.cpp | 4 +--- src/ui/widget/layertypeicon.cpp | 3 +-- src/ui/widget/licensor.cpp | 4 ++-- src/ui/widget/object-composite-settings.cpp | 7 ------- src/ui/widget/page-sizer.cpp | 19 +------------------ src/ui/widget/panel.cpp | 6 ++---- src/ui/widget/point.cpp | 5 +---- src/ui/widget/preferences-widget.cpp | 8 ++------ src/ui/widget/random.cpp | 2 +- src/ui/widget/registered-widget.cpp | 18 +++--------------- src/ui/widget/rendering-options.cpp | 2 +- src/ui/widget/rotateable.cpp | 3 +-- src/ui/widget/selected-style.cpp | 11 +++-------- src/ui/widget/spin-scale.cpp | 1 - src/ui/widget/spinbutton.cpp | 2 +- src/ui/widget/style-subject.cpp | 1 - src/ui/widget/style-swatch.cpp | 6 ------ src/ui/widget/tolerance-slider.cpp | 2 +- src/uri-references.cpp | 2 -- src/uri.cpp | 1 - src/vanishing-point.cpp | 2 -- src/verbs.cpp | 8 +------- src/viewbox.cpp | 1 - src/widgets/arc-toolbar.cpp | 4 +--- src/widgets/box3d-toolbar.cpp | 3 +-- src/widgets/button.cpp | 2 -- src/widgets/calligraphy-toolbar.cpp | 3 +-- src/widgets/connector-toolbar.cpp | 6 +----- src/widgets/dash-selector.cpp | 4 +--- src/widgets/desktop-widget.cpp | 8 -------- src/widgets/dropper-toolbar.cpp | 2 +- src/widgets/eraser-toolbar.cpp | 3 +-- src/widgets/fill-style.cpp | 6 +----- src/widgets/font-selector.cpp | 7 +------ src/widgets/gradient-selector.cpp | 5 +---- src/widgets/gradient-toolbar.cpp | 3 +-- src/widgets/gradient-vector.cpp | 6 +----- src/widgets/icon.cpp | 7 ++----- src/widgets/ink-action.cpp | 5 ----- src/widgets/lpe-toolbar.cpp | 10 +--------- src/widgets/measure-toolbar.cpp | 3 +-- src/widgets/mesh-toolbar.cpp | 13 +------------ src/widgets/node-toolbar.cpp | 5 +---- src/widgets/paint-selector.cpp | 3 --- src/widgets/paintbucket-toolbar.cpp | 4 +--- src/widgets/pencil-toolbar.cpp | 7 +------ src/widgets/rect-toolbar.cpp | 6 +----- src/widgets/ruler.cpp | 1 - src/widgets/select-toolbar.cpp | 6 +----- src/widgets/sp-attribute-widget.cpp | 4 ---- src/widgets/sp-color-selector.cpp | 4 +--- src/widgets/sp-widget.cpp | 1 - src/widgets/sp-xmlview-attr-list.cpp | 2 +- src/widgets/sp-xmlview-tree.cpp | 1 - src/widgets/spinbutton-events.cpp | 3 +-- src/widgets/spiral-toolbar.cpp | 5 +---- src/widgets/spray-toolbar.cpp | 3 +-- src/widgets/spw-utilities.cpp | 4 +--- src/widgets/star-toolbar.cpp | 5 +---- src/widgets/stroke-marker-selector.cpp | 6 ------ src/widgets/stroke-style.cpp | 3 --- src/widgets/text-toolbar.cpp | 7 +------ src/widgets/toolbox.cpp | 9 +-------- src/widgets/tweak-toolbar.cpp | 3 +-- src/widgets/zoom-toolbar.cpp | 2 +- src/xml/node-fns.cpp | 1 - src/xml/rebase-hrefs.cpp | 3 --- src/xml/repr-css.cpp | 2 -- src/xml/repr-io.cpp | 3 +-- src/xml/repr-util.cpp | 2 -- src/xml/repr.cpp | 2 +- src/xml/simple-node.cpp | 3 --- 404 files changed, 219 insertions(+), 1782 deletions(-) diff --git a/src/attribute-rel-css.cpp b/src/attribute-rel-css.cpp index b904cd5f4..f8483d538 100644 --- a/src/attribute-rel-css.cpp +++ b/src/attribute-rel-css.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include "attribute-rel-css.h" diff --git a/src/attribute-rel-svg.cpp b/src/attribute-rel-svg.cpp index 0064f4c62..afa578061 100644 --- a/src/attribute-rel-svg.cpp +++ b/src/attribute-rel-svg.cpp @@ -18,7 +18,6 @@ #include #include -#include #include "attribute-rel-svg.h" diff --git a/src/attribute-rel-util.cpp b/src/attribute-rel-util.cpp index 15c71daa7..cf1140219 100644 --- a/src/attribute-rel-util.cpp +++ b/src/attribute-rel-util.cpp @@ -11,7 +11,6 @@ #include #include -#include #include #include "preferences.h" diff --git a/src/attribute-sort-util.cpp b/src/attribute-sort-util.cpp index 5c01f7914..7aa8d8357 100644 --- a/src/attribute-sort-util.cpp +++ b/src/attribute-sort-util.cpp @@ -11,7 +11,6 @@ #include #include -#include #include #include #include // std::pair @@ -21,7 +20,6 @@ #include "xml/repr.h" #include "xml/attribute-record.h" -#include "xml/sp-css-attr.h" #include "attributes.h" diff --git a/src/attributes.cpp b/src/attributes.cpp index e281dad65..b06ff6048 100644 --- a/src/attributes.cpp +++ b/src/attributes.cpp @@ -14,7 +14,6 @@ #include // g_assert() #include "attributes.h" -#include typedef struct { gint code; diff --git a/src/box3d-side.cpp b/src/box3d-side.cpp index 93d55232e..14b457ea6 100644 --- a/src/box3d-side.cpp +++ b/src/box3d-side.cpp @@ -22,9 +22,7 @@ #include "persp3d.h" #include "persp3d-reference.h" #include "ui/tools/box3d-tool.h" -#include "preferences.h" #include "desktop-style.h" -#include "box3d.h" static void box3d_side_compute_corner_ids(Box3DSide *side, unsigned int corners[4]); diff --git a/src/box3d.cpp b/src/box3d.cpp index c4c2728e4..e50cc4afb 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -23,18 +23,12 @@ #include "box3d.h" #include "box3d-side.h" #include "ui/tools/box3d-tool.h" -#include "proj_pt.h" -#include "transf_mat_3x4.h" #include "perspective-line.h" -#include "inkscape.h" -#include "persp3d.h" -#include "line-geometry.h" #include "persp3d-reference.h" #include "uri.h" #include <2geom/line.h> #include "sp-guide.h" #include "sp-namedview.h" -#include "preferences.h" #include "desktop.h" diff --git a/src/color-profile.cpp b/src/color-profile.cpp index aea9ccab0..e60fa8440 100644 --- a/src/color-profile.cpp +++ b/src/color-profile.cpp @@ -10,7 +10,6 @@ # include #endif -#include #include #include #include @@ -21,7 +20,6 @@ #include #include -#include #include #ifdef WIN32 @@ -46,15 +44,14 @@ #include "inkscape.h" #include "document.h" #include "preferences.h" - +#include +#include #include "uri.h" #ifdef WIN32 #include #endif // WIN32 -#include - using Inkscape::ColorProfile; using Inkscape::ColorProfileImpl; @@ -589,9 +586,9 @@ bool ColorProfile::GamutCheck(SPColor color) static_cast(SP_RGBA32_B_U(val)), 255}; - cmsHTRANSFORM gamutCheck = ColorProfile::getTransfGamutCheck(); - if (gamutCheck) { - cmsDoTransform(gamutCheck, &check_color, &outofgamut, 1); + cmsHTRANSFORM gamutCheck = ColorProfile::getTransfGamutCheck(); + if (gamutCheck) { + cmsDoTransform(gamutCheck, &check_color, &outofgamut, 1); } #if HAVE_LIBLCMS1 @@ -620,8 +617,6 @@ private: cmsProfileClassSignature _profileClass; }; -#include - ProfileInfo::ProfileInfo( cmsHPROFILE prof, Glib::ustring const & path ) : _path( path ), _name( getNameFromProfile(prof) ), diff --git a/src/conn-avoid-ref.cpp b/src/conn-avoid-ref.cpp index 9190fe633..e4c8ce7b5 100644 --- a/src/conn-avoid-ref.cpp +++ b/src/conn-avoid-ref.cpp @@ -18,17 +18,12 @@ #include "sp-item.h" #include "display/curve.h" #include "2geom/line.h" -#include "2geom/crossing.h" #include "2geom/convex-hull.h" -#include "helper/geom-curves.h" #include "svg/stringstream.h" #include "conn-avoid-ref.h" #include "sp-conn-end.h" #include "sp-path.h" #include "libavoid/router.h" -#include "libavoid/connector.h" -#include "libavoid/geomtypes.h" -#include "libavoid/shape.h" #include "xml/node.h" #include "document.h" #include "desktop.h" @@ -38,7 +33,6 @@ #include "sp-item-group.h" #include "inkscape.h" #include "verbs.h" -#include using Inkscape::DocumentUndo; diff --git a/src/context-fns.cpp b/src/context-fns.cpp index e1df53d98..46bd19cb3 100644 --- a/src/context-fns.cpp +++ b/src/context-fns.cpp @@ -6,7 +6,6 @@ #include "message-context.h" #include "message-stack.h" #include "snap.h" -#include "sp-item.h" #include "sp-namedview.h" #include "ui/tools/tool-base.h" diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp index 7f9b46c7d..393e0caa7 100644 --- a/src/desktop-style.cpp +++ b/src/desktop-style.cpp @@ -24,11 +24,7 @@ #include "selection.h" #include "inkscape.h" #include "style.h" -#include "preferences.h" -#include "sp-use.h" #include "filters/blend.h" -#include "sp-filter.h" -#include "sp-filter-reference.h" #include "filters/gaussian-blur.h" #include "sp-flowtext.h" #include "sp-flowregion.h" @@ -39,15 +35,12 @@ #include "sp-textpath.h" #include "sp-tref.h" #include "sp-tspan.h" -#include "xml/repr.h" #include "xml/sp-css-attr.h" #include "sp-path.h" #include "ui/tools/tool-base.h" #include "desktop-style.h" -#include "svg/svg-icc-color.h" #include "box3d-side.h" -#include <2geom/math-utils.h> namespace { diff --git a/src/desktop.cpp b/src/desktop.cpp index d482d0d7f..7e0953d4d 100644 --- a/src/desktop.cpp +++ b/src/desktop.cpp @@ -23,12 +23,11 @@ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "ui/dialog/dialog-manager.h" #include -#include #include <2geom/transforms.h> #include <2geom/rect.h> @@ -45,35 +44,24 @@ #include "display/canvas-temporary-item-list.h" #include "display/drawing-group.h" #include "display/gnome-canvas-acetate.h" -#include "display/drawing.h" #include "display/snap-indicator.h" #include "display/sodipodi-ctrlrect.h" #include "display/sp-canvas-group.h" -#include "display/sp-canvas.h" #include "display/sp-canvas-util.h" -#include "document.h" #include "document-undo.h" #include "event-log.h" #include "helper/action-context.h" #include "ui/interface.h" #include "layer-fns.h" #include "layer-manager.h" -#include "layer-model.h" -#include "macros.h" #include "message-context.h" #include "message-stack.h" -#include "preferences.h" #include "resource-manager.h" #include "ui/tools/select-tool.h" -#include "selection.h" -#include "sp-item-group.h" -#include "sp-item-group.h" #include "sp-namedview.h" #include "sp-root.h" -#include "sp-defs.h" #include "ui/tool-factory.h" #include "widgets/desktop-widget.h" -#include "xml/repr.h" #include "helper/action.h" //sp_action_perform // TODO those includes are only for node tool quick zoom. Remove them after fixing it. diff --git a/src/device-manager.cpp b/src/device-manager.cpp index aa3874da8..cfb8291a0 100644 --- a/src/device-manager.cpp +++ b/src/device-manager.cpp @@ -8,19 +8,17 @@ */ #include "device-manager.h" -#include #include #include "preferences.h" #include #include +#include #if WITH_GTKMM_3_0 # include #endif -#include - #include #define noDEBUG_VERBOSE 1 diff --git a/src/dir-util.h b/src/dir-util.h index 327e1ad5f..90d7b3a54 100644 --- a/src/dir-util.h +++ b/src/dir-util.h @@ -1,4 +1,4 @@ -#ifndef SEEN_DIR_UTIL_H +#ifndef SEEN_DIR_UTIL_H#include #define SEEN_DIR_UTIL_H /* diff --git a/src/document-subset.cpp b/src/document-subset.cpp index 7fad73d9e..649b1a406 100644 --- a/src/document-subset.cpp +++ b/src/document-subset.cpp @@ -13,18 +13,7 @@ #include "document.h" #include "sp-object.h" -#include - -#include -#include - -#include "util/list.h" -#include "util/reverse-list.h" - -#include #include -#include -#include namespace Inkscape { diff --git a/src/document-undo.cpp b/src/document-undo.cpp index c27904ea8..113d09d66 100644 --- a/src/document-undo.cpp +++ b/src/document-undo.cpp @@ -45,7 +45,6 @@ */ #include -#include #include "xml/repr.h" #include "document-private.h" #include "inkscape.h" diff --git a/src/document.cpp b/src/document.cpp index 9f408788b..0ff01b587 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -37,7 +37,7 @@ #define noSP_DOCUMENT_DEBUG_UNDO #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include @@ -47,7 +47,6 @@ #include "desktop.h" #include "dir-util.h" #include "display/drawing.h" -#include "display/drawing-item.h" #include "document-private.h" #include "document-undo.h" #include "id-clash.h" @@ -55,18 +54,12 @@ #include "inkscape-version.h" #include "libavoid/router.h" #include "persp3d.h" -#include "preferences.h" #include "profile-manager.h" #include "rdf.h" #include "sp-factory.h" -#include "sp-item-group.h" #include "sp-namedview.h" #include "sp-symbol.h" -#include "transf_mat_3x4.h" -#include "util/units.h" -#include "xml/repr.h" #include "xml/rebase-hrefs.h" -#include "libcroco/cr-cascade.h" using Inkscape::DocumentUndo; using Inkscape::Util::unit_table; diff --git a/src/ege-color-prof-tracker.cpp b/src/ege-color-prof-tracker.cpp index 78ee6b8b5..332a16d3c 100644 --- a/src/ege-color-prof-tracker.cpp +++ b/src/ege-color-prof-tracker.cpp @@ -45,7 +45,6 @@ #ifdef GDK_WINDOWING_X11 #include -#include #include #endif /* GDK_WINDOWING_X11 */ diff --git a/src/event-log.cpp b/src/event-log.cpp index db680d6d2..5a73b649e 100644 --- a/src/event-log.cpp +++ b/src/event-log.cpp @@ -12,17 +12,13 @@ #include "event-log.h" #include -#include #include #include #include "desktop.h" #include "inkscape.h" -#include "util/signal-blocker.h" #include "util/ucompose.hpp" #include "document.h" -#include "xml/repr.h" -#include "sp-object.h" namespace { diff --git a/src/extension/db.cpp b/src/extension/db.cpp index a3c54915d..f17b784a9 100644 --- a/src/extension/db.cpp +++ b/src/extension/db.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "db.h" #include "input.h" diff --git a/src/extension/dependency.cpp b/src/extension/dependency.cpp index 624be12f9..837520381 100644 --- a/src/extension/dependency.cpp +++ b/src/extension/dependency.cpp @@ -9,14 +9,12 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include #include #include -#include "config.h" -#include "path-prefix.h" #include "dependency.h" #include "db.h" #include "extension.h" diff --git a/src/extension/effect.cpp b/src/extension/effect.cpp index e7299ba51..ef254f623 100644 --- a/src/extension/effect.cpp +++ b/src/extension/effect.cpp @@ -13,7 +13,6 @@ #include "helper/action.h" #include "ui/view/view.h" -#include "selection.h" #include "sp-namedview.h" #include "desktop.h" #include "implementation/implementation.h" diff --git a/src/extension/error-file.cpp b/src/extension/error-file.cpp index db354c0ce..9ec643759 100644 --- a/src/extension/error-file.cpp +++ b/src/extension/error-file.cpp @@ -9,7 +9,7 @@ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include "ui/dialog/extensions.h" diff --git a/src/extension/execution-env.cpp b/src/extension/execution-env.cpp index d5c80f26e..569e2c762 100644 --- a/src/extension/execution-env.cpp +++ b/src/extension/execution-env.cpp @@ -8,10 +8,8 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include - #ifdef HAVE_CONFIG_H -# include +#include #endif #include "gtkmm/messagedialog.h" @@ -25,7 +23,6 @@ #include "document.h" #include "document-undo.h" #include "desktop.h" -#include "ui/view/view.h" #include "sp-namedview.h" #include "display/sp-canvas.h" diff --git a/src/extension/extension.cpp b/src/extension/extension.cpp index 6f7539360..56ff0a5f4 100644 --- a/src/extension/extension.cpp +++ b/src/extension/extension.cpp @@ -16,7 +16,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include diff --git a/src/extension/implementation/implementation.cpp b/src/extension/implementation/implementation.cpp index 92a8a2833..995d3d9ad 100644 --- a/src/extension/implementation/implementation.cpp +++ b/src/extension/implementation/implementation.cpp @@ -11,7 +11,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "implementation.h" @@ -22,7 +22,6 @@ #include "selection.h" #include "desktop.h" -#include "ui/view/view.h" namespace Inkscape { namespace Extension { diff --git a/src/extension/implementation/xslt.cpp b/src/extension/implementation/xslt.cpp index 85ae9efde..373378d97 100644 --- a/src/extension/implementation/xslt.cpp +++ b/src/extension/implementation/xslt.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "file.h" @@ -22,13 +22,11 @@ #include "../output.h" #include "extension/input.h" -#include "xml/repr.h" #include "io/sys.h" #include #include #include "document.h" -#include #include #include diff --git a/src/extension/input.cpp b/src/extension/input.cpp index 5cef38009..2ba48ffda 100644 --- a/src/extension/input.cpp +++ b/src/extension/input.cpp @@ -8,14 +8,12 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" #endif #include "prefdialog.h" #include "implementation/implementation.h" #include "timer.h" #include "input.h" -#include "io/sys.h" /* Inkscape::Extension::Input */ diff --git a/src/extension/loader.cpp b/src/extension/loader.cpp index 863a176ca..3bea0e1e6 100644 --- a/src/extension/loader.cpp +++ b/src/extension/loader.cpp @@ -11,7 +11,6 @@ #include "loader.h" #include "system.h" -#include #include #include "dependency.h" #include "inkscape-version.h" diff --git a/src/extension/loader.h b/src/extension/loader.h index 0d3a69061..cd362f87b 100644 --- a/src/extension/loader.h +++ b/src/extension/loader.h @@ -1,4 +1,5 @@ -/** @file +/** @file#include + * Loader for external plug-ins. *//* * diff --git a/src/extension/patheffect.cpp b/src/extension/patheffect.cpp index bedab7fd8..e30ec97df 100644 --- a/src/extension/patheffect.cpp +++ b/src/extension/patheffect.cpp @@ -8,7 +8,6 @@ */ #include "document-private.h" -#include "sp-object.h" #include "patheffect.h" #include "db.h" diff --git a/src/extension/system.cpp b/src/extension/system.cpp index 3c623455a..afa8346df 100644 --- a/src/extension/system.cpp +++ b/src/extension/system.cpp @@ -17,12 +17,10 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "ui/interface.h" -#include -#include #include "system.h" #include "preferences.h" @@ -41,6 +39,7 @@ #include "document-undo.h" #include "loader.h" +#include namespace Inkscape { namespace Extension { diff --git a/src/file.cpp b/src/file.cpp index 650ce5d0f..56fdffb3c 100644 --- a/src/file.cpp +++ b/src/file.cpp @@ -33,14 +33,12 @@ #include "ui/dialog/ocaldialogs.h" #include "desktop.h" -#include "dir-util.h" #include "document-private.h" #include "document-undo.h" #include "ui/tools/tool-base.h" #include "extension/db.h" #include "extension/input.h" #include "extension/output.h" -#include "extension/system.h" #include "file.h" #include "helper/png-write.h" #include "id-clash.h" @@ -48,33 +46,24 @@ #include "inkscape-version.h" #include "ui/interface.h" #include "io/sys.h" -#include "message.h" #include "message-stack.h" #include "path-prefix.h" -#include "preferences.h" #include "print.h" #include "resource-manager.h" #include "rdf.h" #include "selection-chemistry.h" -#include "selection.h" #include "sp-namedview.h" #include "style.h" #include "ui/view/view-widget.h" -#include "uri.h" #include "xml/rebase-hrefs.h" #include "xml/sp-css-attr.h" #include "verbs.h" #include "event-log.h" #include "ui/dialog/font-substitution.h" -#include #include - -#include -#include #include - -#include +#include using Inkscape::DocumentUndo; diff --git a/src/filter-chemistry.cpp b/src/filter-chemistry.cpp index 9298a1ffc..3618b2642 100644 --- a/src/filter-chemistry.cpp +++ b/src/filter-chemistry.cpp @@ -26,11 +26,6 @@ #include "filters/blend.h" #include "filters/gaussian-blur.h" -#include "sp-filter.h" -#include "sp-filter-reference.h" -#include "svg/css-ostringstream.h" - -#include "xml/repr.h" /** * Count how many times the filter is used by the styles of o and its diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp index 6e92ef50f..b3767632f 100644 --- a/src/filters/blend.cpp +++ b/src/filters/blend.cpp @@ -18,13 +18,9 @@ #include "sp-filter.h" #include "filters/blend.h" #include "attributes.h" -#include "svg/svg.h" #include "xml/repr.h" #include "display/nr-filter.h" -#include "display/nr-filter-primitive.h" -#include "display/nr-filter-blend.h" -#include "display/nr-filter-types.h" SPFeBlend::SPFeBlend() : SPFilterPrimitive(), blend_mode(Inkscape::Filters::BLEND_NORMAL), diff --git a/src/filters/colormatrix.cpp b/src/filters/colormatrix.cpp index a7f0296c2..0e8398ace 100644 --- a/src/filters/colormatrix.cpp +++ b/src/filters/colormatrix.cpp @@ -23,7 +23,6 @@ #include "helper-fns.h" #include "display/nr-filter.h" -#include "display/nr-filter-colormatrix.h" SPFeColorMatrix::SPFeColorMatrix() : SPFilterPrimitive(), type(Inkscape::Filters::COLORMATRIX_MATRIX), value(0) diff --git a/src/filters/componenttransfer-funcnode.cpp b/src/filters/componenttransfer-funcnode.cpp index 76e99a648..23c8dbd96 100644 --- a/src/filters/componenttransfer-funcnode.cpp +++ b/src/filters/componenttransfer-funcnode.cpp @@ -19,12 +19,10 @@ #include "document.h" #include "componenttransfer.h" #include "componenttransfer-funcnode.h" -#include "display/nr-filter-component-transfer.h" #include "xml/repr.h" #include "helper-fns.h" #define SP_MACROS_SILENT -#include "macros.h" /* FeFuncNode class */ diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp index 3d0264390..47e570fa4 100644 --- a/src/filters/componenttransfer.cpp +++ b/src/filters/componenttransfer.cpp @@ -12,16 +12,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include - #include "document.h" #include "attributes.h" -#include "svg/svg.h" #include "filters/componenttransfer.h" #include "filters/componenttransfer-funcnode.h" #include "xml/repr.h" #include "display/nr-filter.h" -#include "display/nr-filter-component-transfer.h" SPFeComponentTransfer::SPFeComponentTransfer() : SPFilterPrimitive(), renderer(NULL) diff --git a/src/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp index 3a443bebc..1b1e58407 100644 --- a/src/filters/convolvematrix.cpp +++ b/src/filters/convolvematrix.cpp @@ -17,12 +17,10 @@ #include #include #include "attributes.h" -#include "svg/svg.h" #include "filters/convolvematrix.h" #include "helper-fns.h" #include "xml/repr.h" #include "display/nr-filter.h" -#include "display/nr-filter-convolve-matrix.h" SPFeConvolveMatrix::SPFeConvolveMatrix() : SPFilterPrimitive() { this->bias = 0; diff --git a/src/filters/distantlight.cpp b/src/filters/distantlight.cpp index fb7380174..617f53121 100644 --- a/src/filters/distantlight.cpp +++ b/src/filters/distantlight.cpp @@ -23,7 +23,6 @@ #include "xml/repr.h" #define SP_MACROS_SILENT -#include "macros.h" SPFeDistantLight::SPFeDistantLight() diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp index 94ca61b98..cbcaa83eb 100644 --- a/src/filters/flood.cpp +++ b/src/filters/flood.cpp @@ -19,7 +19,6 @@ #include "svg/svg-color.h" #include "filters/flood.h" #include "xml/repr.h" -#include "helper-fns.h" #include "display/nr-filter.h" #include "display/nr-filter-flood.h" diff --git a/src/filters/gaussian-blur.cpp b/src/filters/gaussian-blur.cpp index 43a1f6dfb..814224ab1 100644 --- a/src/filters/gaussian-blur.cpp +++ b/src/filters/gaussian-blur.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "attributes.h" @@ -23,9 +23,7 @@ #include "xml/repr.h" #include "display/nr-filter.h" -#include "display/nr-filter-primitive.h" #include "display/nr-filter-gaussian.h" -#include "display/nr-filter-types.h" SPGaussianBlur::SPGaussianBlur() : SPFilterPrimitive() { } diff --git a/src/filters/image.cpp b/src/filters/image.cpp index 62e8b76b9..887201eb3 100644 --- a/src/filters/image.cpp +++ b/src/filters/image.cpp @@ -18,12 +18,9 @@ #include "display/nr-filter-image.h" #include "uri.h" #include "uri-references.h" -#include "enums.h" #include "attributes.h" -#include "svg/svg.h" #include "image.h" #include "xml/repr.h" -#include #include "display/nr-filter.h" diff --git a/src/filters/morphology.cpp b/src/filters/morphology.cpp index 326c9b7a6..b3cfa0697 100644 --- a/src/filters/morphology.cpp +++ b/src/filters/morphology.cpp @@ -20,7 +20,6 @@ #include "morphology.h" #include "xml/repr.h" #include "display/nr-filter.h" -#include "display/nr-filter-morphology.h" SPFeMorphology::SPFeMorphology() : SPFilterPrimitive() { this->Operator = Inkscape::Filters::MORPHOLOGY_OPERATOR_ERODE; diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp index dd3a78f4c..39c4a700a 100644 --- a/src/filters/pointlight.cpp +++ b/src/filters/pointlight.cpp @@ -20,10 +20,8 @@ #include "filters/pointlight.h" #include "filters/diffuselighting.h" #include "filters/specularlighting.h" -#include "xml/repr.h" #define SP_MACROS_SILENT -#include "macros.h" SPFePointLight::SPFePointLight() : SPObject(), x(0), x_set(FALSE), y(0), y_set(FALSE), z(0), z_set(FALSE) { diff --git a/src/filters/pointlight.h b/src/filters/pointlight.h index 1e26d45e7..8df6c0c7c 100644 --- a/src/filters/pointlight.h +++ b/src/filters/pointlight.h @@ -1,4 +1,11 @@ -#ifndef SP_FEPOINTLIGHT_H_SEEN +#ifndef SP_FEPOI"attributes.h" +#include "svg/svg.h" +#include "xml/repr.h" + +#include "merge.h" +#include "mergenode.h" +#include "display/nr-filter.h" +#include "display/nr-filter-merge.h"NTLIGHT_H_SEEN #define SP_FEPOINTLIGHT_H_SEEN /** \file diff --git a/src/filters/spotlight.cpp b/src/filters/spotlight.cpp index 2e55d39d0..a1e7207f3 100644 --- a/src/filters/spotlight.cpp +++ b/src/filters/spotlight.cpp @@ -23,7 +23,6 @@ #include "xml/repr.h" #define SP_MACROS_SILENT -#include "macros.h" SPFeSpotLight::SPFeSpotLight() : SPObject(), x(0), x_set(FALSE), y(0), y_set(FALSE), z(0), z_set(FALSE), pointsAtX(0), pointsAtX_set(FALSE), diff --git a/src/filters/turbulence.cpp b/src/filters/turbulence.cpp index 7541175ed..9af51892e 100644 --- a/src/filters/turbulence.cpp +++ b/src/filters/turbulence.cpp @@ -19,10 +19,8 @@ #include "turbulence.h" #include "helper-fns.h" #include "xml/repr.h" -#include #include "display/nr-filter.h" -#include "display/nr-filter-turbulence.h" SPFeTurbulence::SPFeTurbulence() : SPFilterPrimitive() { this->stitchTiles = 0; diff --git a/src/gc-anchored.cpp b/src/gc-anchored.cpp index 0350e6bdd..4abd44b57 100644 --- a/src/gc-anchored.cpp +++ b/src/gc-anchored.cpp @@ -14,7 +14,6 @@ #include "debug/event-tracker.h" #include "debug/simple-event.h" #include "debug/demangle.h" -#include "util/share.h" #include "util/format.h" namespace Inkscape { diff --git a/src/gc-finalized.cpp b/src/gc-finalized.cpp index 88685ae52..1deadcb1f 100644 --- a/src/gc-finalized.cpp +++ b/src/gc-finalized.cpp @@ -17,7 +17,6 @@ #include "debug/simple-event.h" #include "debug/event-tracker.h" #include "util/format.h" -#include "util/share.h" #include "gc-finalized.h" namespace Inkscape { diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index edeb523d7..ae82499de 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -24,7 +24,6 @@ #include <2geom/bezier-curve.h> #include <2geom/crossing.h> #include <2geom/line.h> -#include <2geom/angle.h> #include "style.h" #include "document-private.h" @@ -38,7 +37,6 @@ #include #include "sp-gradient-reference.h" -#include "sp-gradient-vector.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" #include "sp-mesh.h" @@ -48,11 +46,9 @@ #include "sp-text.h" #include "sp-tspan.h" -#include "xml/repr.h" #include "svg/svg.h" #include "svg/svg-color.h" #include "svg/css-ostringstream.h" -#include "preferences.h" #define noSP_GR_VERBOSE diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 613dc2fc1..aa4da7fcc 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include @@ -32,20 +32,15 @@ #include "display/sp-ctrlline.h" #include "display/sp-ctrlcurve.h" #include "display/sp-canvas-util.h" -#include "xml/repr.h" #include "xml/sp-css-attr.h" #include "svg/css-ostringstream.h" #include "svg/svg.h" -#include "preferences.h" #include "inkscape.h" -#include "sp-item.h" #include "style.h" #include "knot.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" #include "sp-mesh.h" -#include "sp-mesh-row.h" -#include "sp-mesh-patch.h" #include "gradient-chemistry.h" #include "gradient-drag.h" #include "sp-stop.h" diff --git a/src/graphlayout.cpp b/src/graphlayout.cpp index 3956b39fe..52bb6b6a2 100644 --- a/src/graphlayout.cpp +++ b/src/graphlayout.cpp @@ -13,31 +13,21 @@ */ #include -#include #include #include #include #include -#include -#include #include <2geom/transforms.h> #include "desktop.h" #include "inkscape.h" #include "sp-namedview.h" #include "graphlayout.h" -#include "sp-path.h" -#include "sp-item.h" #include "sp-item-transform.h" -#include "sp-conn-end-pair.h" #include "style.h" #include "conn-avoid-ref.h" -#include "libavoid/connector.h" #include "libavoid/router.h" -#include "libavoid/geomtypes.h" #include "libcola/cola.h" -#include "libvpsc/generate-constraints.h" -#include "preferences.h" using namespace std; using namespace cola; diff --git a/src/helper/action-context.cpp b/src/helper/action-context.cpp index d52e43d96..1ea12776b 100644 --- a/src/helper/action-context.cpp +++ b/src/helper/action-context.cpp @@ -14,7 +14,6 @@ #include "layer-model.h" #include "selection.h" #include "helper/action-context.h" -#include "ui/view/view.h" namespace Inkscape { diff --git a/src/helper/action.cpp b/src/helper/action.cpp index 060bf317c..e37575a9c 100644 --- a/src/helper/action.cpp +++ b/src/helper/action.cpp @@ -9,8 +9,6 @@ * This code is in public domain */ -#include - #include "debug/logger.h" #include "debug/timestamp.h" #include "debug/simple-event.h" diff --git a/src/helper/geom-nodetype.cpp b/src/helper/geom-nodetype.cpp index fe8e8af0e..da620b3fd 100644 --- a/src/helper/geom-nodetype.cpp +++ b/src/helper/geom-nodetype.cpp @@ -12,8 +12,6 @@ #include "helper/geom-nodetype.h" #include <2geom/curve.h> -#include <2geom/point.h> -#include namespace Geom { diff --git a/src/helper/geom-pathstroke.cpp b/src/helper/geom-pathstroke.cpp index d2e9f9a1b..10641692d 100644 --- a/src/helper/geom-pathstroke.cpp +++ b/src/helper/geom-pathstroke.cpp @@ -9,13 +9,9 @@ #include #include <2geom/path-sink.h> -#include <2geom/point.h> -#include <2geom/bezier-curve.h> -#include <2geom/elliptical-arc.h> #include <2geom/sbasis-to-bezier.h> // cubicbezierpath_from_sbasis #include <2geom/path-intersection.h> #include <2geom/circle.h> -#include #include "helper/geom-pathstroke.h" diff --git a/src/helper/geom.cpp b/src/helper/geom.cpp index ecb330b01..42c494c00 100644 --- a/src/helper/geom.cpp +++ b/src/helper/geom.cpp @@ -12,15 +12,8 @@ #include #include "helper/geom.h" #include "helper/geom-curves.h" -#include -#include <2geom/pathvector.h> -#include <2geom/path.h> #include <2geom/curves.h> -#include <2geom/transforms.h> -#include <2geom/rect.h> -#include <2geom/coord.h> #include <2geom/sbasis-to-bezier.h> -#include // for M_PI using Geom::X; using Geom::Y; diff --git a/src/helper/pixbuf-ops.cpp b/src/helper/pixbuf-ops.cpp index 9639096fb..8a363d736 100644 --- a/src/helper/pixbuf-ops.cpp +++ b/src/helper/pixbuf-ops.cpp @@ -12,10 +12,9 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif -#include #include #include <2geom/transforms.h> @@ -24,11 +23,8 @@ #include "display/cairo-utils.h" #include "display/drawing.h" #include "display/drawing-context.h" -#include "display/drawing-item.h" #include "document.h" -#include "sp-item.h" #include "sp-root.h" -#include "sp-use.h" #include "sp-defs.h" #include "util/units.h" diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index 9430feeff..e2b7e5b8c 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -14,19 +14,17 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include "ui/interface.h" #include <2geom/rect.h> #include <2geom/transforms.h> -#include #include "png-write.h" #include "io/sys.h" #include "display/drawing.h" #include "display/drawing-context.h" -#include "display/drawing-item.h" #include "document.h" #include "sp-item.h" #include "sp-root.h" diff --git a/src/id-clash.cpp b/src/id-clash.cpp index 4bd66e858..b14526e79 100644 --- a/src/id-clash.cpp +++ b/src/id-clash.cpp @@ -23,8 +23,6 @@ #include "sp-object.h" #include "style.h" #include "sp-paint-server.h" -#include "xml/node.h" -#include "xml/repr.h" #include "sp-root.h" #include "sp-gradient.h" diff --git a/src/inkscape.cpp b/src/inkscape.cpp index 888a64430..a88ef5947 100644 --- a/src/inkscape.cpp +++ b/src/inkscape.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -40,14 +40,10 @@ # include #endif -#include #include #include #include #include -#include -#include -#include #include "desktop.h" @@ -58,17 +54,12 @@ #include "extension/output.h" #include "extension/system.h" #include "helper/action-context.h" -#include "helper/sp-marshal.h" #include "inkscape.h" #include "io/sys.h" -#include "layer-model.h" #include "message-stack.h" -#include "preferences.h" #include "resource-manager.h" -#include "selection.h" #include "ui/tools/tool-base.h" #include "ui/dialog/debug.h" -#include "xml/repr.h" /* Backbones of configuration xml data */ #include "menus-skeleton.h" diff --git a/src/inkview.cpp b/src/inkview.cpp index db4b1aeb0..b377a3bd0 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -35,7 +35,6 @@ #include #include -#include // #include @@ -58,8 +57,6 @@ #include "inkscape.h" -#include - #ifndef HAVE_BIND_TEXTDOMAIN_CODESET #define bind_textdomain_codeset(p,c) #endif diff --git a/src/knot-holder-entity.cpp b/src/knot-holder-entity.cpp index 173025920..95b135be0 100644 --- a/src/knot-holder-entity.cpp +++ b/src/knot-holder-entity.cpp @@ -25,8 +25,6 @@ #include "snap.h" #include "desktop.h" #include "sp-namedview.h" -#include <2geom/affine.h> -#include <2geom/transforms.h> int KnotHolderEntity::counter = 0; diff --git a/src/knot.cpp b/src/knot.cpp index bfc0c4f0b..c914315ec 100644 --- a/src/knot.cpp +++ b/src/knot.cpp @@ -13,7 +13,6 @@ */ #ifdef HAVE_CONFIG_H -# include #endif #include #include @@ -24,7 +23,6 @@ #include "knot-ptr.h" #include "document.h" #include "document-undo.h" -#include "preferences.h" #include "message-stack.h" #include "message-context.h" #include "ui/tools-switch.h" diff --git a/src/knotholder.cpp b/src/knotholder.cpp index a2d1cf017..98348a59f 100644 --- a/src/knotholder.cpp +++ b/src/knotholder.cpp @@ -22,7 +22,6 @@ #include "knotholder.h" #include "knot-holder-entity.h" #include "ui/tools/rect-tool.h" -#include "sp-rect.h" #include "ui/tools/arc-tool.h" #include "sp-ellipse.h" #include "ui/tools/tweak-tool.h" @@ -37,12 +36,9 @@ #include "live_effects/effect.h" #include "desktop.h" #include "display/sp-canvas.h" -#include "display/sp-canvas-item.h" #include "verbs.h" #include "ui/control-manager.h" -#include "xml/repr.h" // for debugging only - using Inkscape::ControlManager; using Inkscape::DocumentUndo; diff --git a/src/layer-manager.cpp b/src/layer-manager.cpp index 19c4b890c..3a6cce99c 100644 --- a/src/layer-manager.cpp +++ b/src/layer-manager.cpp @@ -17,16 +17,10 @@ #include "desktop.h" #include "layer-manager.h" -#include "preferences.h" -#include "ui/view/view.h" #include "selection.h" -#include "sp-object.h" #include "sp-item-group.h" -#include "xml/node.h" #include "xml/node-observer.h" #include "util/format.h" -// #include "debug/event-tracker.h" -// #include "debug/simple-event.h" namespace Inkscape { diff --git a/src/layer-model.cpp b/src/layer-model.cpp index 6833852ad..b941e43b1 100644 --- a/src/layer-model.cpp +++ b/src/layer-model.cpp @@ -22,7 +22,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "document.h" @@ -32,11 +32,7 @@ #include "sp-defs.h" #include "sp-item.h" #include "sp-item-group.h" -#include "sp-object.h" #include "sp-root.h" -#include -#include -#include // Callbacks static void _layer_activated(SPObject *layer, Inkscape::LayerModel *layer_model); diff --git a/src/line-geometry.cpp b/src/line-geometry.cpp index c5357e213..6e0f82d45 100644 --- a/src/line-geometry.cpp +++ b/src/line-geometry.cpp @@ -10,7 +10,6 @@ */ #include "line-geometry.h" -#include "inkscape.h" #include "desktop.h" #include "desktop-style.h" diff --git a/src/line-snapper.cpp b/src/line-snapper.cpp index 6122b133a..6be447a4f 100644 --- a/src/line-snapper.cpp +++ b/src/line-snapper.cpp @@ -11,10 +11,8 @@ */ #include <2geom/line.h> -#include #include "line-snapper.h" -#include "snapped-line.h" #include "snap.h" Inkscape::LineSnapper::LineSnapper(SnapManager *sm, Geom::Coord const d) : Snapper(sm, d) diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index 1868ca43b..ef807d586 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -8,12 +8,11 @@ //#define LPE_ENABLE_TEST_EFFECTS //uncomment for toy effects #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif // include effects: #include "live_effects/lpe-patternalongpath.h" -#include "live_effects/effect.h" #include "live_effects/lpe-angle_bisector.h" #include "live_effects/lpe-attach-path.h" #include "live_effects/lpe-bendpath.h" @@ -64,30 +63,14 @@ #include "live_effects/lpe-vonkoch.h" #include "xml/node-event-vector.h" -#include "sp-object.h" -#include "attributes.h" #include "message-stack.h" -#include "desktop.h" -#include "inkscape.h" -#include "document.h" #include "document-private.h" -#include "xml/document.h" -#include #include "ui/tools/pen-tool.h" #include "ui/tools-switch.h" #include "knotholder.h" -#include "sp-lpe-item.h" #include "live_effects/lpeobject.h" -#include "live_effects/parameter/parameter.h" -#include #include "display/curve.h" -#include - -#include <2geom/sbasis-to-bezier.h> -#include <2geom/affine.h> -#include <2geom/pathvector.h> - namespace Inkscape { diff --git a/src/live_effects/lpe-angle_bisector.cpp b/src/live_effects/lpe-angle_bisector.cpp index 900d29e3a..9bfbf4ca8 100644 --- a/src/live_effects/lpe-angle_bisector.cpp +++ b/src/live_effects/lpe-angle_bisector.cpp @@ -12,7 +12,6 @@ #include "live_effects/lpe-angle_bisector.h" -#include <2geom/path.h> #include <2geom/sbasis-to-bezier.h> #include "sp-lpe-item.h" diff --git a/src/live_effects/lpe-attach-path.cpp b/src/live_effects/lpe-attach-path.cpp index 21459f322..d2b44dd4e 100644 --- a/src/live_effects/lpe-attach-path.cpp +++ b/src/live_effects/lpe-attach-path.cpp @@ -10,16 +10,9 @@ #include "live_effects/lpe-attach-path.h" #include "display/curve.h" -#include "sp-item.h" -#include "2geom/path.h" #include "sp-shape.h" #include "sp-text.h" -#include "2geom/bezier-curve.h" #include "2geom/path-sink.h" -#include "parameter/parameter.h" -#include "live_effects/parameter/point.h" -#include "parameter/originalpath.h" -#include "2geom/affine.h" namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp index bc112285f..c24d38d7b 100644 --- a/src/live_effects/lpe-bendpath.cpp +++ b/src/live_effects/lpe-bendpath.cpp @@ -6,27 +6,11 @@ */ #include "live_effects/lpe-bendpath.h" -#include "sp-shape.h" -#include "sp-item.h" -#include "sp-path.h" #include "sp-item-group.h" -#include "svg/svg.h" -#include "ui/widget/scalar.h" - -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> -#include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/piecewise.h> #include "knot-holder-entity.h" #include "knotholder.h" -#include - -#include - using std::vector; diff --git a/src/live_effects/lpe-bounding-box.cpp b/src/live_effects/lpe-bounding-box.cpp index 43a60d482..cfe1f5165 100644 --- a/src/live_effects/lpe-bounding-box.cpp +++ b/src/live_effects/lpe-bounding-box.cpp @@ -9,12 +9,8 @@ #include "live_effects/lpe-bounding-box.h" #include "display/curve.h" -#include "sp-item.h" -#include "2geom/path.h" #include "sp-shape.h" #include "sp-text.h" -#include "2geom/bezier-curve.h" -#include "lpe-bounding-box.h" namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-circle_3pts.cpp b/src/live_effects/lpe-circle_3pts.cpp index dbb1f4b6b..18252f6a0 100644 --- a/src/live_effects/lpe-circle_3pts.cpp +++ b/src/live_effects/lpe-circle_3pts.cpp @@ -15,7 +15,6 @@ #include "live_effects/lpe-circle_3pts.h" // You might need to include other 2geom files. You can add them here: -#include <2geom/path.h> #include <2geom/circle.h> #include <2geom/path-sink.h> diff --git a/src/live_effects/lpe-circle_with_radius.cpp b/src/live_effects/lpe-circle_with_radius.cpp index 8f2156044..6e03cb1ce 100644 --- a/src/live_effects/lpe-circle_with_radius.cpp +++ b/src/live_effects/lpe-circle_with_radius.cpp @@ -15,7 +15,6 @@ #include "display/curve.h" // You might need to include other 2geom files. You can add them here: -#include <2geom/pathvector.h> #include <2geom/circle.h> #include <2geom/path-sink.h> diff --git a/src/live_effects/lpe-constructgrid.cpp b/src/live_effects/lpe-constructgrid.cpp index b1e0edaac..4af8891e8 100644 --- a/src/live_effects/lpe-constructgrid.cpp +++ b/src/live_effects/lpe-constructgrid.cpp @@ -14,9 +14,6 @@ #include "live_effects/lpe-constructgrid.h" -#include <2geom/path.h> -#include <2geom/transforms.h> - namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-copy_rotate.cpp b/src/live_effects/lpe-copy_rotate.cpp index 80f5bdafd..f28ab4b31 100644 --- a/src/live_effects/lpe-copy_rotate.cpp +++ b/src/live_effects/lpe-copy_rotate.cpp @@ -15,11 +15,7 @@ #include <2geom/path-intersection.h> #include <2geom/sbasis-to-bezier.h> #include "live_effects/lpe-copy_rotate.h" -#include <2geom/path.h> -#include <2geom/transforms.h> -#include <2geom/angle.h> -#include "knot-holder-entity.h" #include "knotholder.h" // TODO due to internal breakage in glibmm headers, this must be last: #include diff --git a/src/live_effects/lpe-curvestitch.cpp b/src/live_effects/lpe-curvestitch.cpp index 609447f26..3beedaf57 100644 --- a/src/live_effects/lpe-curvestitch.cpp +++ b/src/live_effects/lpe-curvestitch.cpp @@ -17,19 +17,11 @@ #include "live_effects/lpe-curvestitch.h" -#include "sp-item.h" #include "sp-path.h" #include "svg/svg.h" #include "xml/repr.h" -#include <2geom/path.h> -#include <2geom/piecewise.h> -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/affine.h> namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-dynastroke.cpp b/src/live_effects/lpe-dynastroke.cpp index aeecd5d5c..7e22f6e51 100644 --- a/src/live_effects/lpe-dynastroke.cpp +++ b/src/live_effects/lpe-dynastroke.cpp @@ -14,14 +14,8 @@ #include "display/curve.h" //# include -#include <2geom/path.h> -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> #include <2geom/sbasis-math.h> -#include <2geom/piecewise.h> namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-ellipse_5pts.cpp b/src/live_effects/lpe-ellipse_5pts.cpp index 4c953bcda..8f0f8e18a 100644 --- a/src/live_effects/lpe-ellipse_5pts.cpp +++ b/src/live_effects/lpe-ellipse_5pts.cpp @@ -15,7 +15,6 @@ // You might need to include other 2geom files. You can add them here: #include -#include <2geom/path.h> #include <2geom/circle.h> #include <2geom/ellipse.h> #include <2geom/path-sink.h> diff --git a/src/live_effects/lpe-envelope.cpp b/src/live_effects/lpe-envelope.cpp index e873c0b15..0ce784877 100644 --- a/src/live_effects/lpe-envelope.cpp +++ b/src/live_effects/lpe-envelope.cpp @@ -5,22 +5,8 @@ */ #include "live_effects/lpe-envelope.h" -#include "sp-shape.h" -#include "sp-item.h" -#include "sp-path.h" -#include "sp-item-group.h" #include "display/curve.h" -#include "svg/svg.h" -#include "ui/widget/scalar.h" -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> -#include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/piecewise.h> - -#include using std::vector; namespace Inkscape { diff --git a/src/live_effects/lpe-extrude.cpp b/src/live_effects/lpe-extrude.cpp index 8b3f4714a..22cdf3c3e 100644 --- a/src/live_effects/lpe-extrude.cpp +++ b/src/live_effects/lpe-extrude.cpp @@ -15,11 +15,6 @@ #include -#include <2geom/path.h> -#include <2geom/piecewise.h> -#include <2geom/transforms.h> -#include - #include "sp-item.h" namespace Inkscape { diff --git a/src/live_effects/lpe-fill-between-many.cpp b/src/live_effects/lpe-fill-between-many.cpp index 574ec3580..ccb9cf56d 100644 --- a/src/live_effects/lpe-fill-between-many.cpp +++ b/src/live_effects/lpe-fill-between-many.cpp @@ -9,11 +9,8 @@ #include "live_effects/lpe-fill-between-many.h" #include "display/curve.h" -#include "sp-item.h" -#include "2geom/path.h" #include "sp-shape.h" #include "sp-text.h" -#include "2geom/bezier-curve.h" #include diff --git a/src/live_effects/lpe-fill-between-strokes.cpp b/src/live_effects/lpe-fill-between-strokes.cpp index 89ea80545..b1e328d18 100644 --- a/src/live_effects/lpe-fill-between-strokes.cpp +++ b/src/live_effects/lpe-fill-between-strokes.cpp @@ -9,11 +9,8 @@ #include "live_effects/lpe-fill-between-strokes.h" #include "display/curve.h" -#include "sp-item.h" -#include "2geom/path.h" #include "sp-shape.h" #include "sp-text.h" -#include "2geom/bezier-curve.h" namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-fillet-chamfer.cpp b/src/live_effects/lpe-fillet-chamfer.cpp index 07760b172..24ee2ccc3 100644 --- a/src/live_effects/lpe-fillet-chamfer.cpp +++ b/src/live_effects/lpe-fillet-chamfer.cpp @@ -17,21 +17,16 @@ #include <2geom/sbasis-to-bezier.h> #include <2geom/elliptical-arc.h> -#include <2geom/line.h> -#include "desktop.h" #include "display/curve.h" #include "helper/geom-nodetype.h" #include "helper/geom-curves.h" #include "helper/geom.h" -#include "live_effects/parameter/filletchamferpointarray.h" - // for programmatically updating knots #include "ui/tools-switch.h" // TODO due to internal breakage in glibmm headers, this must be last: -#include using namespace Geom; namespace Inkscape { diff --git a/src/live_effects/lpe-gears.cpp b/src/live_effects/lpe-gears.cpp index d4d695542..307fab6fd 100644 --- a/src/live_effects/lpe-gears.cpp +++ b/src/live_effects/lpe-gears.cpp @@ -8,14 +8,9 @@ #include "live_effects/lpe-gears.h" -#include - #include -#include <2geom/d2.h> -#include <2geom/sbasis.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/path.h> using std::vector; using namespace Geom; diff --git a/src/live_effects/lpe-interpolate.cpp b/src/live_effects/lpe-interpolate.cpp index 74c7efd90..43da4d105 100644 --- a/src/live_effects/lpe-interpolate.cpp +++ b/src/live_effects/lpe-interpolate.cpp @@ -14,10 +14,7 @@ #include "live_effects/lpe-interpolate.h" -#include <2geom/path.h> #include <2geom/sbasis-to-bezier.h> -#include <2geom/piecewise.h> -#include <2geom/sbasis-geometric.h> #include "sp-path.h" #include "display/curve.h" diff --git a/src/live_effects/lpe-interpolate_points.cpp b/src/live_effects/lpe-interpolate_points.cpp index cf70832ee..ab0576174 100644 --- a/src/live_effects/lpe-interpolate_points.cpp +++ b/src/live_effects/lpe-interpolate_points.cpp @@ -13,8 +13,6 @@ #include "live_effects/lpe-interpolate_points.h" -#include <2geom/path.h> - #include "live_effects/lpe-powerstroke-interpolators.h" namespace Inkscape { diff --git a/src/live_effects/lpe-jointype.cpp b/src/live_effects/lpe-jointype.cpp index fe42932be..3bfbd6288 100644 --- a/src/live_effects/lpe-jointype.cpp +++ b/src/live_effects/lpe-jointype.cpp @@ -10,16 +10,12 @@ #include "live_effects/parameter/enum.h" #include "helper/geom-pathstroke.h" -#include "sp-shape.h" #include "style.h" -#include "xml/repr.h" -#include "sp-paint-server.h" #include "svg/svg-color.h" #include "desktop-style.h" #include "svg/css-ostringstream.h" #include "display/curve.h" -#include <2geom/path.h> #include <2geom/elliptical-arc.h> #include "lpe-jointype.h" diff --git a/src/live_effects/lpe-knot.cpp b/src/live_effects/lpe-knot.cpp index a033a6c4a..221d03ebf 100644 --- a/src/live_effects/lpe-knot.cpp +++ b/src/live_effects/lpe-knot.cpp @@ -16,7 +16,6 @@ #include "sp-path.h" #include "display/curve.h" #include "live_effects/lpe-knot.h" -#include "svg/svg.h" #include "style.h" #include "knot-holder-entity.h" #include "knotholder.h" @@ -25,20 +24,14 @@ #include #include <2geom/sbasis-to-bezier.h> -#include <2geom/sbasis.h> -#include <2geom/d2.h> -#include <2geom/path.h> #include <2geom/bezier-to-sbasis.h> #include <2geom/basic-intersection.h> -#include <2geom/exception.h> // for change crossing undo #include "verbs.h" #include "document.h" #include "document-undo.h" -#include - namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-lattice.cpp b/src/live_effects/lpe-lattice.cpp index 3c23e349e..091b6ddca 100644 --- a/src/live_effects/lpe-lattice.cpp +++ b/src/live_effects/lpe-lattice.cpp @@ -6,7 +6,7 @@ * Authors: * Johan Engelen * Steren Giannini - * Noé Falzon + * No� Falzon * Victor Navez * * Copyright (C) 2007-2008 Authors @@ -16,22 +16,10 @@ #include "live_effects/lpe-lattice.h" -#include "sp-shape.h" -#include "sp-item.h" -#include "sp-path.h" #include "display/curve.h" -#include "svg/svg.h" -#include <2geom/sbasis.h> #include <2geom/sbasis-2d.h> -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/piecewise.h> -#include <2geom/transforms.h> - -#include "desktop.h" // TODO: should be factored out (see below) using namespace Geom; diff --git a/src/live_effects/lpe-lattice2.cpp b/src/live_effects/lpe-lattice2.cpp index bacbe5fa7..9e9fc153a 100644 --- a/src/live_effects/lpe-lattice2.cpp +++ b/src/live_effects/lpe-lattice2.cpp @@ -6,7 +6,7 @@ * Authors: * Johan Engelen * Steren Giannini - * Noé Falzon + * No� Falzon * Victor Navez * ~suv * Jabiertxo Arraiza @@ -17,24 +17,11 @@ */ #include "live_effects/lpe-lattice2.h" -#include "sp-shape.h" -#include "sp-item.h" -#include "sp-path.h" #include "display/curve.h" -#include "svg/svg.h" #include "helper/geom.h" -#include <2geom/path.h> -#include <2geom/sbasis.h> #include <2geom/sbasis-2d.h> -#include "helper/geom-curves.h" -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/piecewise.h> -#include <2geom/transforms.h> // TODO due to internal breakage in glibmm headers, this must be last: -#include using namespace Geom; diff --git a/src/live_effects/lpe-line_segment.cpp b/src/live_effects/lpe-line_segment.cpp index dfd8aea8f..4c9edabd4 100644 --- a/src/live_effects/lpe-line_segment.cpp +++ b/src/live_effects/lpe-line_segment.cpp @@ -14,10 +14,6 @@ #include "live_effects/lpe-line_segment.h" #include "ui/tools/lpe-tool.h" -#include <2geom/pathvector.h> -#include <2geom/geom.h> -#include <2geom/bezier-curve.h> - namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index cf866ad6a..a7459faed 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -14,19 +14,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #include "live_effects/lpe-mirror_symmetry.h" -#include #include #include #include "helper/geom.h" -#include <2geom/path.h> #include <2geom/path-intersection.h> -#include <2geom/transforms.h> -#include <2geom/affine.h> -#include "knot-holder-entity.h" #include "knotholder.h" -#include "inkscape.h" // TODO due to internal breakage in glibmm headers, this must be last: -#include namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-offset.cpp b/src/live_effects/lpe-offset.cpp index d611b88a1..a0fa46c3f 100644 --- a/src/live_effects/lpe-offset.cpp +++ b/src/live_effects/lpe-offset.cpp @@ -17,11 +17,7 @@ #include "sp-shape.h" #include "display/curve.h" -#include <2geom/path.h> -#include <2geom/piecewise.h> -#include <2geom/sbasis-geometric.h> #include <2geom/elliptical-arc.h> -#include <2geom/transforms.h> namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-parallel.cpp b/src/live_effects/lpe-parallel.cpp index 23cd5e2e7..9cd8ecf46 100644 --- a/src/live_effects/lpe-parallel.cpp +++ b/src/live_effects/lpe-parallel.cpp @@ -17,10 +17,6 @@ #include "sp-shape.h" #include "display/curve.h" -#include <2geom/path.h> -#include <2geom/transforms.h> - -#include "knot-holder-entity.h" #include "knotholder.h" namespace Inkscape { diff --git a/src/live_effects/lpe-path_length.cpp b/src/live_effects/lpe-path_length.cpp index 4ca380c15..8fbf9d420 100644 --- a/src/live_effects/lpe-path_length.cpp +++ b/src/live_effects/lpe-path_length.cpp @@ -16,8 +16,6 @@ #include "live_effects/lpe-path_length.h" #include "util/units.h" -#include "2geom/sbasis-geometric.h" - namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-patternalongpath.cpp b/src/live_effects/lpe-patternalongpath.cpp index 911c410f9..7d6ac10ac 100644 --- a/src/live_effects/lpe-patternalongpath.cpp +++ b/src/live_effects/lpe-patternalongpath.cpp @@ -6,22 +6,12 @@ #include "live_effects/lpe-patternalongpath.h" #include "live_effects/lpeobject.h" -#include "sp-shape.h" #include "display/curve.h" -#include "svg/svg.h" -#include "ui/widget/scalar.h" -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/piecewise.h> -#include "knot-holder-entity.h" #include "knotholder.h" -#include using std::vector; diff --git a/src/live_effects/lpe-perp_bisector.cpp b/src/live_effects/lpe-perp_bisector.cpp index 660318c57..f69dae6a1 100644 --- a/src/live_effects/lpe-perp_bisector.cpp +++ b/src/live_effects/lpe-perp_bisector.cpp @@ -18,10 +18,7 @@ #include "display/curve.h" #include "sp-path.h" #include "line-geometry.h" -#include "sp-lpe-item.h" -#include <2geom/path.h> -#include "knot-holder-entity.h" #include "knotholder.h" namespace Inkscape { diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index ae951dfc9..8a6a95f2e 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -18,7 +18,6 @@ #include "live_effects/lpe-perspective-envelope.h" #include "helper/geom.h" #include "display/curve.h" -#include "svg/svg.h" #include using namespace Geom; diff --git a/src/live_effects/lpe-perspective_path.cpp b/src/live_effects/lpe-perspective_path.cpp index c8cdd7912..6857d4363 100644 --- a/src/live_effects/lpe-perspective_path.cpp +++ b/src/live_effects/lpe-perspective_path.cpp @@ -15,18 +15,13 @@ #include "persp3d.h" //#include "transf_mat_3x4.h" -#include "document.h" #include "document-private.h" #include "live_effects/lpe-perspective_path.h" #include "live_effects/lpeobject.h" -#include "sp-item-group.h" #include "knot-holder-entity.h" #include "knotholder.h" #include "desktop.h" #include -#include "inkscape.h" - -#include <2geom/path.h> namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-powerstroke.cpp b/src/live_effects/lpe-powerstroke.cpp index 66c8776b5..0de668847 100644 --- a/src/live_effects/lpe-powerstroke.cpp +++ b/src/live_effects/lpe-powerstroke.cpp @@ -13,32 +13,17 @@ #include "live_effects/lpe-powerstroke.h" #include "live_effects/lpe-powerstroke-interpolators.h" -#include "sp-shape.h" #include "style.h" -#include "xml/repr.h" -#include "sp-paint-server.h" #include "svg/svg-color.h" #include "desktop-style.h" #include "svg/css-ostringstream.h" #include "display/curve.h" -#include <2geom/path.h> -#include <2geom/piecewise.h> -#include <2geom/sbasis-geometric.h> -#include <2geom/transforms.h> -#include <2geom/bezier-utils.h> #include <2geom/elliptical-arc.h> -#include <2geom/sbasis-to-bezier.h> #include <2geom/path-sink.h> #include <2geom/path-intersection.h> -#include <2geom/crossing.h> -#include <2geom/ellipse.h> #include <2geom/circle.h> -#include <2geom/math-utils.h> #include "helper/geom.h" -#include - -#include "spiro.h" namespace Geom { // should all be moved to 2geom at some point diff --git a/src/live_effects/lpe-recursiveskeleton.cpp b/src/live_effects/lpe-recursiveskeleton.cpp index ac571d963..ed0c915ce 100644 --- a/src/live_effects/lpe-recursiveskeleton.cpp +++ b/src/live_effects/lpe-recursiveskeleton.cpp @@ -14,13 +14,7 @@ #include "live_effects/lpe-recursiveskeleton.h" -#include <2geom/path.h> -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/piecewise.h> namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-rough-hatches.cpp b/src/live_effects/lpe-rough-hatches.cpp index 76421e0f0..2fb65b349 100644 --- a/src/live_effects/lpe-rough-hatches.cpp +++ b/src/live_effects/lpe-rough-hatches.cpp @@ -18,18 +18,10 @@ #include "sp-item.h" #include "sp-path.h" -#include "svg/svg.h" #include "xml/repr.h" -#include <2geom/path.h> -#include <2geom/piecewise.h> -#include <2geom/sbasis.h> #include <2geom/sbasis-math.h> -#include <2geom/sbasis-geometric.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/affine.h> namespace Inkscape { diff --git a/src/live_effects/lpe-roughen.cpp b/src/live_effects/lpe-roughen.cpp index 13f2b7b51..3a486ff10 100644 --- a/src/live_effects/lpe-roughen.cpp +++ b/src/live_effects/lpe-roughen.cpp @@ -14,15 +14,10 @@ */ #include "live_effects/lpe-roughen.h" -#include "desktop.h" #include "display/curve.h" -#include "live_effects/parameter/parameter.h" #include #include "helper/geom.h" -#include "sp-item-group.h" -#include // TODO due to internal breakage in glibmm headers, this must be last: -#include namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-ruler.cpp b/src/live_effects/lpe-ruler.cpp index 49b5faa2e..3a2d78b2c 100644 --- a/src/live_effects/lpe-ruler.cpp +++ b/src/live_effects/lpe-ruler.cpp @@ -12,10 +12,6 @@ */ #include "live_effects/lpe-ruler.h" -#include <2geom/piecewise.h> -#include <2geom/sbasis-geometric.h> -#include "inkscape.h" -#include "desktop.h" namespace Inkscape { diff --git a/src/live_effects/lpe-show_handles.cpp b/src/live_effects/lpe-show_handles.cpp index 2d4666fe4..388ea176f 100644 --- a/src/live_effects/lpe-show_handles.cpp +++ b/src/live_effects/lpe-show_handles.cpp @@ -7,7 +7,6 @@ */ #include "live_effects/lpe-show_handles.h" -#include "live_effects/parameter/parameter.h" #include <2geom/sbasis-to-bezier.h> #include <2geom/svg-path-parser.h> #include "helper/geom.h" diff --git a/src/live_effects/lpe-simplify.cpp b/src/live_effects/lpe-simplify.cpp index b0c1fbc23..ec21e10d2 100644 --- a/src/live_effects/lpe-simplify.cpp +++ b/src/live_effects/lpe-simplify.cpp @@ -4,20 +4,11 @@ #include "live_effects/lpe-simplify.h" #include "display/curve.h" -#include "live_effects/parameter/parameter.h" #include "helper/geom.h" -#include "livarot/Path.h" -#include "splivarot.h" #include <2geom/svg-path-parser.h> -#include "desktop.h" -#include "inkscape.h" #include "svg/svg.h" #include "ui/tools/node-tool.h" -#include <2geom/d2.h> -#include <2geom/generic-rect.h> -#include <2geom/interval.h> #include "ui/icon-names.h" -#include "util/units.h" // TODO due to internal breakage in glibmm headers, this must be last: #include diff --git a/src/live_effects/lpe-skeleton.cpp b/src/live_effects/lpe-skeleton.cpp index 6e4afbe9b..7d34db699 100644 --- a/src/live_effects/lpe-skeleton.cpp +++ b/src/live_effects/lpe-skeleton.cpp @@ -21,13 +21,9 @@ #include "live_effects/lpe-skeleton.h" // You might need to include other 2geom files. You can add them here: -#include <2geom/path.h> #include -//#include "knot-holder-entity.h" -//#include "knotholder.h" - namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpe-sketch.cpp b/src/live_effects/lpe-sketch.cpp index 82d343f6e..95e2f6f0d 100644 --- a/src/live_effects/lpe-sketch.cpp +++ b/src/live_effects/lpe-sketch.cpp @@ -16,16 +16,8 @@ #include // You might need to include other 2geom files. You can add them here: -#include <2geom/path.h> -#include <2geom/sbasis.h> -#include <2geom/sbasis-geometric.h> #include <2geom/sbasis-math.h> #include <2geom/bezier-to-sbasis.h> -#include <2geom/sbasis-to-bezier.h> -#include <2geom/d2.h> -#include <2geom/sbasis-math.h> -#include <2geom/piecewise.h> -#include <2geom/crossing.h> #include <2geom/path-intersection.h> namespace Inkscape { diff --git a/src/live_effects/lpe-spiro.cpp b/src/live_effects/lpe-spiro.cpp index 0d42596b2..4a41dc5a0 100644 --- a/src/live_effects/lpe-spiro.cpp +++ b/src/live_effects/lpe-spiro.cpp @@ -7,9 +7,6 @@ #include "live_effects/lpe-spiro.h" #include "display/curve.h" -#include -#include <2geom/pathvector.h> -#include <2geom/affine.h> #include <2geom/curves.h> #include "helper/geom-nodetype.h" #include "helper/geom-curves.h" diff --git a/src/live_effects/lpe-tangent_to_curve.cpp b/src/live_effects/lpe-tangent_to_curve.cpp index 978ab57fb..b308ef8d7 100644 --- a/src/live_effects/lpe-tangent_to_curve.cpp +++ b/src/live_effects/lpe-tangent_to_curve.cpp @@ -19,10 +19,6 @@ #include "sp-path.h" #include "display/curve.h" -#include <2geom/path.h> -#include <2geom/transforms.h> - -#include "knot-holder-entity.h" #include "knotholder.h" namespace Inkscape { diff --git a/src/live_effects/lpe-taperstroke.cpp b/src/live_effects/lpe-taperstroke.cpp index f2ddd4929..f6f6b33dc 100644 --- a/src/live_effects/lpe-taperstroke.cpp +++ b/src/live_effects/lpe-taperstroke.cpp @@ -13,28 +13,20 @@ #include "live_effects/lpe-taperstroke.h" -#include <2geom/path.h> -#include <2geom/path.h> #include <2geom/circle.h> #include <2geom/sbasis-to-bezier.h> #include "helper/geom-nodetype.h" #include "helper/geom-pathstroke.h" #include "display/curve.h" -#include "sp-shape.h" #include "style.h" -#include "xml/repr.h" -#include "sp-paint-server.h" #include "svg/svg-color.h" #include "desktop-style.h" #include "svg/css-ostringstream.h" #include "svg/svg.h" -#include "knot-holder-entity.h" #include "knotholder.h" -#include - template inline bool withinRange(T value, T low, T high) { return (value > low && value < high); diff --git a/src/live_effects/lpe-test-doEffect-stack.cpp b/src/live_effects/lpe-test-doEffect-stack.cpp index 2bcd4c136..c7ecf6481 100644 --- a/src/live_effects/lpe-test-doEffect-stack.cpp +++ b/src/live_effects/lpe-test-doEffect-stack.cpp @@ -8,9 +8,6 @@ #include "live_effects/lpe-test-doEffect-stack.h" -#include <2geom/piecewise.h> -#include -#include using std::memcpy; namespace Inkscape { diff --git a/src/live_effects/lpe-transform_2pts.cpp b/src/live_effects/lpe-transform_2pts.cpp index 3c4ce0708..2b03a4bb2 100644 --- a/src/live_effects/lpe-transform_2pts.cpp +++ b/src/live_effects/lpe-transform_2pts.cpp @@ -14,9 +14,6 @@ #include "live_effects/lpe-transform_2pts.h" #include "display/curve.h" -#include <2geom/transforms.h> -#include <2geom/pathvector.h> -#include "sp-path.h" #include "ui/icon-names.h" #include "svg/svg.h" #include "verbs.h" diff --git a/src/live_effects/lpe-vonkoch.cpp b/src/live_effects/lpe-vonkoch.cpp index 7eda7446e..2486f3366 100644 --- a/src/live_effects/lpe-vonkoch.cpp +++ b/src/live_effects/lpe-vonkoch.cpp @@ -8,8 +8,6 @@ #include -#include <2geom/transforms.h> - //using std::vector; namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpegroupbbox.cpp b/src/live_effects/lpegroupbbox.cpp index 2a1b70a6a..3862ebcc8 100644 --- a/src/live_effects/lpegroupbbox.cpp +++ b/src/live_effects/lpegroupbbox.cpp @@ -7,8 +7,6 @@ #include "live_effects/lpegroupbbox.h" -#include "sp-item.h" - namespace Inkscape { namespace LivePathEffect { diff --git a/src/live_effects/lpeobject-reference.cpp b/src/live_effects/lpeobject-reference.cpp index d9de6e77f..1940806bd 100644 --- a/src/live_effects/lpeobject-reference.cpp +++ b/src/live_effects/lpeobject-reference.cpp @@ -8,7 +8,6 @@ #include -#include "enums.h" #include "live_effects/lpeobject-reference.h" #include "live_effects/lpeobject.h" #include "uri.h" diff --git a/src/live_effects/lpeobject.cpp b/src/live_effects/lpeobject.cpp index 8e5ae568f..b5b27c984 100644 --- a/src/live_effects/lpeobject.cpp +++ b/src/live_effects/lpeobject.cpp @@ -11,13 +11,10 @@ #include "xml/repr.h" #include "xml/node-event-vector.h" -#include "sp-object.h" #include "attributes.h" #include "document.h" #include "document-private.h" -#include - //#define LIVEPATHEFFECT_VERBOSE static void livepatheffect_on_repr_attr_changed (Inkscape::XML::Node * repr, const gchar *key, const gchar *oldval, const gchar *newval, bool is_interactive, void * data); diff --git a/src/live_effects/spiro.cpp b/src/live_effects/spiro.cpp index 0ac2815bf..a2ff4813e 100644 --- a/src/live_effects/spiro.cpp +++ b/src/live_effects/spiro.cpp @@ -29,7 +29,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA #include #include "display/curve.h" -#include <2geom/math-utils.h> #define SPIRO_SHOW_INFINITE_COORDINATE_CALLS diff --git a/src/main-cmdlineact.cpp b/src/main-cmdlineact.cpp index 496c16d5d..d22b513d6 100644 --- a/src/main-cmdlineact.cpp +++ b/src/main-cmdlineact.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include diff --git a/src/main.cpp b/src/main.cpp index 8cf52127b..cd93f2ed3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,9 +38,6 @@ #include #endif #include -#include -#include -#include #include #ifndef POPT_TABLEEND @@ -48,9 +45,6 @@ #endif /* Not def: POPT_TABLEEND */ #include -#include -#include -#include #if GTK_CHECK_VERSION(3,0,0) #include @@ -63,16 +57,13 @@ #undef AND #endif -#include "macros.h" #include "file.h" #include "document.h" #include "layer-model.h" #include "selection.h" -#include "sp-object.h" #include "ui/interface.h" #include "print.h" #include "color.h" -#include "sp-item.h" #include "sp-root.h" #include "svg/svg.h" @@ -93,10 +84,8 @@ #include "helper/action-context.h" #include "helper/png-write.h" -#include "helper/geom.h" #include -#include #include #include #include @@ -114,9 +103,8 @@ #endif // WITH_DBUS #include -#include #include - +#include #include #ifndef HAVE_BIND_TEXTDOMAIN_CODESET @@ -129,8 +117,6 @@ #include #include "verbs.h" -#include - #include "path-chemistry.h" #include "sp-text.h" #include "sp-flowtext.h" diff --git a/src/message-stack.cpp b/src/message-stack.cpp index bc89520b7..70b2fb42d 100644 --- a/src/message-stack.cpp +++ b/src/message-stack.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include "message-stack.h" namespace Inkscape { diff --git a/src/object-hierarchy.cpp b/src/object-hierarchy.cpp index f241da83d..87b7ac570 100644 --- a/src/object-hierarchy.cpp +++ b/src/object-hierarchy.cpp @@ -10,13 +10,10 @@ */ #include -#include #include "sp-object.h" #include "object-hierarchy.h" -#include - namespace Inkscape { ObjectHierarchy::ObjectHierarchy(SPObject *top) { diff --git a/src/object-snapper.cpp b/src/object-snapper.cpp index 3e559ee7a..af33415a1 100644 --- a/src/object-snapper.cpp +++ b/src/object-snapper.cpp @@ -14,9 +14,6 @@ #include "svg/svg.h" #include <2geom/path-intersection.h> -#include <2geom/pathvector.h> -#include <2geom/point.h> -#include <2geom/rect.h> #include <2geom/line.h> #include <2geom/circle.h> #include <2geom/path-sink.h> @@ -24,9 +21,7 @@ #include "sp-namedview.h" #include "sp-image.h" #include "sp-item-group.h" -#include "sp-item.h" #include "sp-use.h" -#include "display/curve.h" #include "inkscape.h" #include "preferences.h" #include "sp-text.h" @@ -34,7 +29,6 @@ #include "text-editing.h" #include "sp-clippath.h" #include "sp-mask.h" -#include "helper/geom-curves.h" #include "desktop.h" #include "sp-root.h" diff --git a/src/path-chemistry.cpp b/src/path-chemistry.cpp index 1a345b565..79a15f509 100644 --- a/src/path-chemistry.cpp +++ b/src/path-chemistry.cpp @@ -15,15 +15,13 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include #include #include "xml/repr.h" #include "svg/svg.h" #include "display/curve.h" -#include "color.h" -#include #include #include "sp-path.h" #include "sp-text.h" @@ -37,7 +35,6 @@ #include "selection.h" #include "box3d.h" -#include <2geom/pathvector.h> #include "selection-chemistry.h" #include "path-chemistry.h" #include "verbs.h" diff --git a/src/persp3d-reference.cpp b/src/persp3d-reference.cpp index 4526a8d8f..49510764e 100644 --- a/src/persp3d-reference.cpp +++ b/src/persp3d-reference.cpp @@ -8,7 +8,6 @@ */ #include "persp3d-reference.h" -#include "persp3d.h" #include "uri.h" static void persp3dreference_href_changed(SPObject *old_ref, SPObject *ref, Persp3DReference *persp3dref); diff --git a/src/persp3d.cpp b/src/persp3d.cpp index a48481145..809242ed8 100644 --- a/src/persp3d.cpp +++ b/src/persp3d.cpp @@ -18,9 +18,7 @@ #include "document-undo.h" #include "vanishing-point.h" #include "ui/tools/box3d-tool.h" -#include "box3d.h" #include "svg/stringstream.h" -#include "xml/document.h" #include "xml/node-event-vector.h" #include "desktop.h" diff --git a/src/perspective-line.cpp b/src/perspective-line.cpp index e6c78403b..cf40e4c60 100644 --- a/src/perspective-line.cpp +++ b/src/perspective-line.cpp @@ -10,7 +10,6 @@ */ #include "perspective-line.h" -#include "persp3d.h" namespace Box3D { diff --git a/src/preferences.cpp b/src/preferences.cpp index e5a5fe7f0..988604a14 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include "preferences.h" diff --git a/src/prefix.cpp b/src/prefix.cpp index 6bf5cb2cf..4e2204cff 100644 --- a/src/prefix.cpp +++ b/src/prefix.cpp @@ -27,7 +27,7 @@ #define _PREFIX_C_ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif @@ -35,7 +35,6 @@ #include #include #include -#include #include "prefix.h" diff --git a/src/resource-manager.cpp b/src/resource-manager.cpp index 09b9364c6..188b7d9c8 100644 --- a/src/resource-manager.cpp +++ b/src/resource-manager.cpp @@ -11,10 +11,10 @@ #include #include #include -#include -#include #include +#include #include +#include #include "resource-manager.h" @@ -24,8 +24,6 @@ #include "document-undo.h" #include "verbs.h" -#include - namespace Inkscape { static std::vector splitPath( std::string const &path ) diff --git a/src/rubberband.cpp b/src/rubberband.cpp index 4a171f4a1..47fdffb28 100644 --- a/src/rubberband.cpp +++ b/src/rubberband.cpp @@ -15,7 +15,6 @@ #include "rubberband.h" #include "display/sp-canvas.h" -#include "display/sp-canvas-item.h" #include "display/canvas-bpath.h" #include "display/curve.h" diff --git a/src/satisfied-guide-cns.cpp b/src/satisfied-guide-cns.cpp index a83417865..83b8b555c 100644 --- a/src/satisfied-guide-cns.cpp +++ b/src/satisfied-guide-cns.cpp @@ -1,7 +1,6 @@ #include <2geom/coord.h> #include "desktop.h" #include "sp-guide.h" -#include "sp-guide-constraint.h" #include "sp-namedview.h" #include "satisfied-guide-cns.h" diff --git a/src/selcue.cpp b/src/selcue.cpp index 297b9fffc..3d9f3c619 100644 --- a/src/selcue.cpp +++ b/src/selcue.cpp @@ -11,8 +11,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include - #include "desktop.h" #include "selection.h" @@ -23,7 +21,6 @@ #include "text-editing.h" #include "sp-text.h" #include "sp-flowtext.h" -#include "preferences.h" #include "selcue.h" Inkscape::SelCue::BoundingBoxPrefsObserver::BoundingBoxPrefsObserver(SelCue &sel_cue) : diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 7d32477a1..f6923d1ea 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -20,7 +20,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -34,7 +34,6 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "svg/svg.h" #include "desktop.h" #include "desktop-style.h" -#include "dir-util.h" #include "layer-model.h" #include "selection.h" #include "ui/tools-switch.h" @@ -42,7 +41,6 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "message-stack.h" #include "sp-item-transform.h" #include "sp-marker.h" -#include "sp-use.h" #include "sp-textpath.h" #include "sp-tspan.h" #include "sp-tref.h" @@ -53,7 +51,6 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "sp-ellipse.h" #include "sp-star.h" #include "sp-spiral.h" -#include "sp-switch.h" #include "sp-polyline.h" #include "sp-line.h" #include "text-editing.h" @@ -64,13 +61,10 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "sp-conn-end.h" #include "ui/tools/dropper-tool.h" #include -#include <2geom/transforms.h> -#include "xml/repr.h" #include "xml/rebase-hrefs.h" #include "style.h" #include "document-private.h" #include "document-undo.h" -#include "sp-gradient.h" #include "sp-gradient-reference.h" #include "sp-linear-gradient.h" #include "sp-pattern.h" @@ -78,42 +72,25 @@ SPCycleType SP_CYCLING = SP_CYCLE_FOCUS; #include "sp-radial-gradient.h" #include "ui/tools/gradient-tool.h" #include "sp-namedview.h" -#include "preferences.h" #include "sp-offset.h" #include "sp-clippath.h" #include "sp-mask.h" #include "helper/png-write.h" #include "layer-fns.h" #include "context-fns.h" -#include -#include -#include -#include "sp-item.h" #include "box3d.h" #include "persp3d.h" -#include "util/units.h" #include "xml/simple-document.h" -#include "sp-filter-reference.h" #include "gradient-drag.h" -#include "uri-references.h" -#include "display/curve.h" -#include "display/canvas-bpath.h" #include "display/cairo-utils.h" -#include "inkscape.h" #include "path-chemistry.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/multi-path-manipulator.h" -#include "sp-lpe-item.h" #include "live_effects/effect.h" -#include "live_effects/effect-enum.h" #include "live_effects/parameter/originalpath.h" #include "layer-manager.h" -#include "enums.h" -#include "sp-item-group.h" - // For clippath editing -#include "ui/tools-switch.h" #include "ui/tools/node-tool.h" #include "ui/clipboard.h" diff --git a/src/selection-describer.cpp b/src/selection-describer.cpp index ddc7a0d10..584510756 100644 --- a/src/selection-describer.cpp +++ b/src/selection-describer.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -27,17 +27,8 @@ #include "sp-flowtext.h" #include "sp-use.h" #include "sp-symbol.h" -#include "sp-rect.h" -#include "box3d.h" -#include "sp-ellipse.h" -#include "sp-star.h" -#include "sp-anchor.h" #include "sp-image.h" #include "sp-path.h" -#include "sp-line.h" -#include "sp-use.h" -#include "sp-polyline.h" -#include "sp-spiral.h" // Returns a list of terms for the items to be used in the statusbar char* collect_terms (const std::vector &items) diff --git a/src/selection.cpp b/src/selection.cpp index 6fc426be7..05ab68550 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -17,14 +17,11 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif -#include "macros.h" + #include "inkscape.h" #include "document.h" -#include "layer-model.h" -#include "selection.h" -#include <2geom/rect.h> #include "xml/repr.h" #include "preferences.h" @@ -32,11 +29,8 @@ #include "sp-path.h" #include "sp-item-group.h" #include "box3d.h" -#include "box3d.h" #include "persp3d.h" -#include - #define SP_SELECTION_UPDATE_PRIORITY (G_PRIORITY_HIGH_IDLE + 1) namespace Inkscape { diff --git a/src/selection.h b/src/selection.h index 952dde51d..04bcca402 100644 --- a/src/selection.h +++ b/src/selection.h @@ -26,8 +26,6 @@ #include "inkgc/gc-soft-ptr.h" #include "sp-item.h" - - class SPDesktop; class SPItem; class SPBox3D; diff --git a/src/seltrans.cpp b/src/seltrans.cpp index b54525610..c1fb652be 100644 --- a/src/seltrans.cpp +++ b/src/seltrans.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include #include @@ -30,11 +30,9 @@ #include "desktop-style.h" #include "knot.h" #include "message-stack.h" -#include "snap.h" #include "pure-transform.h" #include "selection.h" #include "ui/tools/select-tool.h" -#include "sp-item.h" #include "sp-item-transform.h" #include "sp-root.h" #include "seltrans-handles.h" @@ -44,13 +42,9 @@ #include #include "display/sp-ctrlline.h" #include "display/sodipodi-ctrl.h" -#include "preferences.h" -#include "xml/repr.h" #include "mod360.h" -#include <2geom/angle.h> #include "display/snap-indicator.h" #include "ui/control-manager.h" -#include "seltrans-handles.h" using Inkscape::ControlManager; using Inkscape::DocumentUndo; diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index 194d4d2a4..e74d60abc 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -26,16 +26,14 @@ #include #include "shortcuts.h" -#include #include #include -#include #include +#include #include #include "helper/action.h" -#include "helper/action-context.h" #include "io/sys.h" #include "io/resource.h" #include "verbs.h" diff --git a/src/snap-preferences.cpp b/src/snap-preferences.cpp index 79e47ca83..9985b0185 100644 --- a/src/snap-preferences.cpp +++ b/src/snap-preferences.cpp @@ -10,8 +10,6 @@ */ #include "inkscape.h" -#include "snap-preferences.h" -#include // g_assert() Inkscape::SnapPreferences::SnapPreferences() : _snap_enabled_globally(true), diff --git a/src/snap.cpp b/src/snap.cpp index 7f0e8d9dc..50f40a9a1 100644 --- a/src/snap.cpp +++ b/src/snap.cpp @@ -19,10 +19,6 @@ #include <2geom/transforms.h> #include "sp-namedview.h" -#include "snap.h" -#include "snap-enums.h" -#include "snapped-line.h" -#include "snapped-curve.h" #include "pure-transform.h" #include "display/canvas-grid.h" @@ -30,9 +26,7 @@ #include "inkscape.h" #include "desktop.h" -#include "selection.h" #include "sp-guide.h" -#include "preferences.h" #include "ui/tools/tool-base.h" #include "helper/mathfns.h" using std::vector; diff --git a/src/snap.h b/src/snap.h index 41d21b1b2..12fba05ff 100644 --- a/src/snap.h +++ b/src/snap.h @@ -21,7 +21,6 @@ #include "guide-snapper.h" #include "object-snapper.h" #include "snap-preferences.h" -//#include "pure-transform.h" // Guides diff --git a/src/snapped-curve.cpp b/src/snapped-curve.cpp index b332fa8c1..1f6165813 100644 --- a/src/snapped-curve.cpp +++ b/src/snapped-curve.cpp @@ -9,7 +9,6 @@ */ #include "snapped-curve.h" -#include <2geom/crossing.h> #include <2geom/path-intersection.h> Inkscape::SnappedCurve::SnappedCurve(Geom::Point const &snapped_point, Geom::Point const &tangent, int num_path, int num_segm, Geom::Coord const &snapped_distance, Geom::Coord const &snapped_tolerance, bool const &always_snap, bool const &fully_constrained, Geom::Curve const *curve, SnapSourceType source, long source_num, SnapTargetType target, Geom::OptRect target_bbox) diff --git a/src/snapped-line.cpp b/src/snapped-line.cpp index fa333d6f1..8a307783a 100644 --- a/src/snapped-line.cpp +++ b/src/snapped-line.cpp @@ -1,4 +1,4 @@ -/** +/**#include * \file src/snapped-line.cpp * SnappedLine class. * @@ -9,7 +9,6 @@ */ #include "snapped-line.h" -#include <2geom/line.h> Inkscape::SnappedLineSegment::SnappedLineSegment(Geom::Point const &snapped_point, Geom::Coord const &snapped_distance, SnapSourceType const &source, long source_num, SnapTargetType const &target, Geom::Coord const &snapped_tolerance, bool const &always_snap, Geom::Point const &start_point_of_line, Geom::Point const &end_point_of_line) : _start_point_of_line(start_point_of_line), _end_point_of_line(end_point_of_line) diff --git a/src/snapper.cpp b/src/snapper.cpp index 8c985b732..78493746f 100644 --- a/src/snapper.cpp +++ b/src/snapper.cpp @@ -10,7 +10,6 @@ */ #include "sp-namedview.h" -#include "inkscape.h" #include "desktop.h" /** diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp index 0c07d1b3d..915c57e45 100644 --- a/src/sp-clippath.cpp +++ b/src/sp-clippath.cpp @@ -23,7 +23,6 @@ #include "attributes.h" #include "document.h" #include "document-private.h" -#include "sp-item.h" #include "style.h" #include <2geom/transforms.h> diff --git a/src/sp-conn-end-pair.cpp b/src/sp-conn-end-pair.cpp index dbd4f2e94..937163f45 100644 --- a/src/sp-conn-end-pair.cpp +++ b/src/sp-conn-end-pair.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include "attributes.h" @@ -22,7 +21,6 @@ #include "display/curve.h" #include "xml/repr.h" #include "sp-path.h" -#include "libavoid/vertices.h" #include "libavoid/router.h" #include "document.h" #include "sp-item-group.h" diff --git a/src/sp-conn-end.cpp b/src/sp-conn-end.cpp index 75cce4374..9ce1a3b56 100644 --- a/src/sp-conn-end.cpp +++ b/src/sp-conn-end.cpp @@ -10,8 +10,6 @@ #include "uri.h" #include "document.h" #include "sp-item-group.h" -#include "2geom/path.h" -#include "2geom/pathvector.h" #include "2geom/path-intersection.h" diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp index 0675b7781..995f880c2 100644 --- a/src/sp-ellipse.cpp +++ b/src/sp-ellipse.cpp @@ -21,8 +21,6 @@ #include <2geom/circle.h> #include <2geom/ellipse.h> #include <2geom/path-sink.h> -#include <2geom/pathvector.h> -#include <2geom/transforms.h> #include "attributes.h" #include "display/curve.h" @@ -33,7 +31,6 @@ #include "style.h" #include "svg/svg.h" #include "svg/path-string.h" -#include "xml/repr.h" #ifndef M_PI diff --git a/src/sp-factory.cpp b/src/sp-factory.cpp index 20472d425..62af684a2 100644 --- a/src/sp-factory.cpp +++ b/src/sp-factory.cpp @@ -32,7 +32,6 @@ #include "sp-hatch.h" #include "sp-hatch-path.h" #include "sp-image.h" -#include "sp-item-group.h" #include "sp-line.h" #include "sp-linear-gradient.h" #include "sp-marker.h" @@ -43,11 +42,8 @@ #include "sp-metadata.h" #include "sp-missing-glyph.h" #include "sp-namedview.h" -#include "sp-object.h" #include "sp-offset.h" -#include "sp-path.h" #include "sp-pattern.h" -#include "sp-polygon.h" #include "sp-polyline.h" #include "sp-radial-gradient.h" #include "sp-rect.h" @@ -68,7 +64,6 @@ #include "sp-title.h" #include "sp-tref.h" #include "sp-tspan.h" -#include "sp-use.h" #include "live_effects/lpeobject.h" // filters diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp index b18850914..2e6e06caf 100644 --- a/src/sp-filter-primitive.cpp +++ b/src/sp-filter-primitive.cpp @@ -14,20 +14,16 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include "display/nr-filter-primitive.h" -#include "display/nr-filter-types.h" #include "attributes.h" #include "style.h" #include "sp-filter-primitive.h" -#include "xml/repr.h" -#include "sp-filter.h" -#include "sp-item.h" // CPPIFY: Make pure virtual. diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index c17c67fc5..64a972ff4 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -29,14 +29,10 @@ using std::pair; #include "sp-filter.h" #include "sp-filter-reference.h" #include "sp-filter-primitive.h" -#include "sp-item.h" #include "uri.h" #include "xml/repr.h" -#include -#include #define SP_MACROS_SILENT -#include "macros.h" static void filter_ref_changed(SPObject *old_ref, SPObject *ref, SPFilter *filter); static void filter_ref_modified(SPObject *href, guint flags, SPFilter *filter); diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp index 5715e5eb1..3dc02c3ca 100644 --- a/src/sp-flowregion.cpp +++ b/src/sp-flowregion.cpp @@ -2,7 +2,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -18,8 +18,6 @@ #include "sp-flowregion.h" -#include "display/canvas-bpath.h" - #include "livarot/Path.h" #include "livarot/Shape.h" diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp index 51fb3ae89..d89de33bf 100644 --- a/src/sp-flowtext.cpp +++ b/src/sp-flowtext.cpp @@ -2,7 +2,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include @@ -13,20 +13,15 @@ #include "style.h" #include "inkscape.h" #include "document.h" -#include "selection.h" #include "desktop.h" -#include "xml/repr.h" - #include "sp-flowdiv.h" #include "sp-flowregion.h" #include "sp-flowtext.h" #include "sp-string.h" -#include "sp-use.h" #include "sp-rect.h" #include "text-tag-attributes.h" -#include "text-chemistry.h" #include "text-editing.h" #include "sp-text.h" diff --git a/src/sp-font-face.cpp b/src/sp-font-face.cpp index afd2a9dee..52fc09ddd 100644 --- a/src/sp-font-face.cpp +++ b/src/sp-font-face.cpp @@ -1,5 +1,5 @@ #ifdef HAVE_CONFIG_H -# include +#include #endif /* diff --git a/src/sp-font.cpp b/src/sp-font.cpp index 341a6159f..2948dece4 100644 --- a/src/sp-font.cpp +++ b/src/sp-font.cpp @@ -1,5 +1,5 @@ #ifdef HAVE_CONFIG_H -# include +#include #endif /* @@ -17,8 +17,6 @@ #include "xml/repr.h" #include "attributes.h" #include "sp-font.h" -#include "sp-glyph.h" -#include "sp-missing-glyph.h" #include "document.h" #include "display/nr-svgfonts.h" diff --git a/src/sp-glyph-kerning.cpp b/src/sp-glyph-kerning.cpp index f33d3c509..66de5aed9 100644 --- a/src/sp-glyph-kerning.cpp +++ b/src/sp-glyph-kerning.cpp @@ -16,7 +16,6 @@ #include "sp-glyph-kerning.h" #include "document.h" -#include #include diff --git a/src/sp-glyph.cpp b/src/sp-glyph.cpp index 4829aae51..6284cbfa1 100644 --- a/src/sp-glyph.cpp +++ b/src/sp-glyph.cpp @@ -1,5 +1,4 @@ #ifdef HAVE_CONFIG_H -# include #endif /* @@ -18,7 +17,6 @@ #include "attributes.h" #include "sp-glyph.h" #include "document.h" -#include SPGlyph::SPGlyph() : SPObject() diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 854d53dc4..49143bda4 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -35,7 +35,6 @@ #include "display/cairo-utils.h" #include "svg/svg.h" -#include "svg/svg-color.h" #include "svg/css-ostringstream.h" #include "attributes.h" #include "document-private.h" @@ -46,13 +45,7 @@ #include "sp-radial-gradient.h" #include "sp-mesh.h" #include "sp-mesh-row.h" -#include "sp-mesh-patch.h" #include "sp-stop.h" -#include "streq.h" -#include "uri.h" -#include "xml/repr.h" -#include "style.h" -#include "display/grayscale.h" /// Has to be power of 2 Seems to be unused. //#define NCOLORS NR_GRADIENT_VECTOR_LENGTH diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp index 58a1a746e..ff0f6cadb 100644 --- a/src/sp-guide.cpp +++ b/src/sp-guide.cpp @@ -16,7 +16,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -31,8 +31,6 @@ #include "attributes.h" #include "sp-guide.h" #include -#include -#include #include #include #include @@ -40,8 +38,6 @@ #include "desktop.h" #include "sp-root.h" #include "sp-namedview.h" -#include <2geom/angle.h> -#include "document.h" #include "document-undo.h" #include "helper-fns.h" #include "verbs.h" diff --git a/src/sp-hatch-path.cpp b/src/sp-hatch-path.cpp index 32a514dcb..b40f66064 100644 --- a/src/sp-hatch-path.cpp +++ b/src/sp-hatch-path.cpp @@ -12,10 +12,8 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include #include #include <2geom/path.h> -#include <2geom/transforms.h> #include "svg/svg.h" #include "display/cairo-utils.h" @@ -27,11 +25,8 @@ #include "helper/geom.h" #include "attributes.h" #include "document-private.h" -#include "uri.h" -#include "style.h" #include "sp-hatch-path.h" #include "svg/css-ostringstream.h" -#include "xml/repr.h" SPHatchPath::SPHatchPath() : offset(), diff --git a/src/sp-hatch.cpp b/src/sp-hatch.cpp index 2d938618c..a17a555b8 100644 --- a/src/sp-hatch.cpp +++ b/src/sp-hatch.cpp @@ -25,11 +25,8 @@ #include "display/drawing-pattern.h" #include "attributes.h" #include "document-private.h" -#include "uri.h" -#include "style.h" #include "sp-hatch.h" #include "sp-hatch-path.h" -#include "xml/repr.h" SPHatch::SPHatch() : SPPaintServer(), diff --git a/src/sp-image.cpp b/src/sp-image.cpp index bf5b9ebcd..aa1dbfe20 100644 --- a/src/sp-image.cpp +++ b/src/sp-image.cpp @@ -30,7 +30,6 @@ #include "display/cairo-utils.h" #include "display/curve.h" //Added for preserveAspectRatio support -- EAF -#include "enums.h" #include "attributes.h" #include "print.h" #include "brokenimage.xpm" @@ -38,8 +37,6 @@ #include "sp-image.h" #include "sp-clippath.h" #include "xml/quote.h" -#include "xml/repr.h" -#include "snap-candidate.h" #include "preferences.h" #include "io/sys.h" diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 70d2bc732..f5c8f348e 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -32,16 +32,13 @@ #include "attributes.h" #include "sp-item-transform.h" #include "sp-root.h" -#include "sp-use.h" #include "sp-offset.h" #include "sp-clippath.h" #include "sp-mask.h" #include "sp-path.h" #include "box3d.h" #include "persp3d.h" -#include "inkscape.h" -#include "selection.h" #include "live_effects/effect.h" #include "live_effects/lpeobject.h" #include "live_effects/lpeobject-reference.h" @@ -50,10 +47,8 @@ #include "sp-switch.h" #include "sp-defs.h" #include "verbs.h" -#include "layer-model.h" #include "sp-textpath.h" #include "sp-flowtext.h" -#include "sp-tspan.h" #include "selection-chemistry.h" #include "xml/sp-css-attr.h" #include "svg/css-ostringstream.h" diff --git a/src/sp-item-rm-unsatisfied-cns.cpp b/src/sp-item-rm-unsatisfied-cns.cpp index 7a712b083..516c88672 100644 --- a/src/sp-item-rm-unsatisfied-cns.cpp +++ b/src/sp-item-rm-unsatisfied-cns.cpp @@ -4,8 +4,6 @@ #include "remove-last.h" #include "sp-guide.h" -#include "sp-guide-constraint.h" -#include "sp-item.h" #include "sp-item-rm-unsatisfied-cns.h" using std::vector; diff --git a/src/sp-item-update-cns.cpp b/src/sp-item-update-cns.cpp index 750f0d94f..9aef336c5 100644 --- a/src/sp-item-update-cns.cpp +++ b/src/sp-item-update-cns.cpp @@ -1,10 +1,8 @@ #include "satisfied-guide-cns.h" -#include "sp-guide-constraint.h" #include "sp-item-update-cns.h" #include "sp-guide.h" -#include "sp-item.h" -#include + using std::find; using std::vector; diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 9fd6e8ecc..01cb2d09f 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "sp-item.h" @@ -33,19 +33,14 @@ #include "sp-clippath.h" #include "sp-mask.h" #include "sp-rect.h" -#include "sp-use.h" #include "sp-text.h" #include "sp-textpath.h" #include "sp-item-rm-unsatisfied-cns.h" #include "sp-pattern.h" -#include "sp-paint-server.h" #include "sp-switch.h" -#include "sp-guide-constraint.h" #include "gradient-chemistry.h" -#include "preferences.h" #include "conn-avoid-ref.h" #include "conditions.h" -#include "sp-filter-reference.h" #include "filter-chemistry.h" #include "sp-guide.h" #include "sp-title.h" @@ -53,13 +48,8 @@ #include "util/find-last-if.h" #include "util/reverse-list.h" -#include <2geom/rect.h> -#include <2geom/affine.h> -#include <2geom/transforms.h> -#include "xml/repr.h" #include "extract-uri.h" -#include "helper/geom.h" #include "live_effects/lpeobject.h" #include "live_effects/effect.h" diff --git a/src/sp-line.cpp b/src/sp-line.cpp index cf21be912..09ffd1f17 100644 --- a/src/sp-line.cpp +++ b/src/sp-line.cpp @@ -17,7 +17,6 @@ #include "sp-guide.h" #include "display/curve.h" #include -#include "xml/repr.h" #include "document.h" #include "inkscape.h" diff --git a/src/sp-line.h b/src/sp-line.h index d6a075659..177555c77 100644 --- a/src/sp-line.h +++ b/src/sp-line.h @@ -1,4 +1,5 @@ -#ifndef SEEN_SP_LINE_H +#ifndef SEEN_SP_LINE_H * SPGradient, SPStop, SPLinearGradient, SPRadialGradient, + #define SEEN_SP_LINE_H /* diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp index fdc2949d5..d9e53fbc5 100644 --- a/src/sp-lpe-item.cpp +++ b/src/sp-lpe-item.cpp @@ -13,7 +13,6 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" #endif #include "ui/tool/multi-path-manipulator.h" @@ -27,11 +26,7 @@ #include "sp-path.h" #include "sp-item-group.h" -#include "streq.h" -#include "macros.h" #include "attributes.h" -#include "sp-lpe-item.h" -#include "xml/repr.h" #include "uri.h" #include "message-stack.h" #include "inkscape.h" @@ -40,14 +35,10 @@ #include "sp-ellipse.h" #include "display/curve.h" #include "svg/svg.h" -#include <2geom/pathvector.h> #include "sp-clippath.h" #include "sp-mask.h" #include "ui/tools-switch.h" #include "ui/tools/node-tool.h" -#include "ui/tools/tool-base.h" - -#include /* LPEItem base class */ static void sp_lpe_item_enable_path_effects(SPLPEItem *lpeitem, bool enable); diff --git a/src/sp-marker.cpp b/src/sp-marker.cpp index 3505e2fe8..43df8525d 100644 --- a/src/sp-marker.cpp +++ b/src/sp-marker.cpp @@ -16,7 +16,6 @@ #include #include -#include "config.h" #include <2geom/affine.h> #include <2geom/transforms.h> diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp index 3537c7bac..e860206a2 100644 --- a/src/sp-mask.cpp +++ b/src/sp-mask.cpp @@ -23,7 +23,6 @@ #include "attributes.h" #include "document.h" #include "document-private.h" -#include "sp-item.h" #include "sp-mask.h" diff --git a/src/sp-mesh-patch.cpp b/src/sp-mesh-patch.cpp index 834c09935..9727ffef6 100644 --- a/src/sp-mesh-patch.cpp +++ b/src/sp-mesh-patch.cpp @@ -18,7 +18,6 @@ #include "style.h" #include "attributes.h" -#include "xml/repr.h" SPMeshpatch* SPMeshpatch::getNextMeshpatch() { diff --git a/src/sp-mesh-row.cpp b/src/sp-mesh-row.cpp index dd7948bdf..90173da8c 100644 --- a/src/sp-mesh-row.cpp +++ b/src/sp-mesh-row.cpp @@ -17,8 +17,6 @@ #include "sp-mesh-row.h" #include "style.h" -#include "xml/repr.h" - SPMeshrow* SPMeshrow::getNextMeshrow() { SPMeshrow *result = 0; diff --git a/src/sp-mesh.cpp b/src/sp-mesh.cpp index e04c29e8e..5a6f2bd8e 100644 --- a/src/sp-mesh.cpp +++ b/src/sp-mesh.cpp @@ -2,7 +2,6 @@ #include "attributes.h" #include "display/cairo-utils.h" -#include "xml/repr.h" #include "sp-mesh.h" diff --git a/src/sp-metadata.cpp b/src/sp-metadata.cpp index 6bdc2f0b9..e7907e4f0 100644 --- a/src/sp-metadata.cpp +++ b/src/sp-metadata.cpp @@ -10,7 +10,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "sp-metadata.h" diff --git a/src/sp-missing-glyph.cpp b/src/sp-missing-glyph.cpp index 75de55693..f441b66d2 100644 --- a/src/sp-missing-glyph.cpp +++ b/src/sp-missing-glyph.cpp @@ -1,5 +1,5 @@ #ifdef HAVE_CONFIG_H -# include +#include #endif /* diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp index 616ec3921..45e3d4cf8 100644 --- a/src/sp-namedview.cpp +++ b/src/sp-namedview.cpp @@ -14,14 +14,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" #include #include #include "event-log.h" #include <2geom/transforms.h> #include "display/canvas-grid.h" -#include "display/guideline.h" #include "util/units.h" #include "svg/svg-color.h" #include "xml/repr.h" diff --git a/src/sp-object.cpp b/src/sp-object.cpp index d1659eedc..9cb386026 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -32,12 +32,10 @@ #include "sp-script.h" #include "streq.h" #include "strneq.h" -#include "xml/repr.h" #include "xml/node-fns.h" #include "debug/event-tracker.h" #include "debug/simple-event.h" #include "debug/demangle.h" -#include "util/share.h" #include "util/format.h" #include "util/longest-common-suffix.h" diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp index d84bdbdd3..9e2264d76 100644 --- a/src/sp-offset.cpp +++ b/src/sp-offset.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -36,11 +36,6 @@ #include "sp-use-reference.h" #include "uri.h" -#include <2geom/affine.h> -#include <2geom/pathvector.h> - -#include "xml/repr.h" - class SPDocument; #define noOFFSET_VERBOSE diff --git a/src/sp-paint-server.cpp b/src/sp-paint-server.cpp index d445ca0a7..958078012 100644 --- a/src/sp-paint-server.cpp +++ b/src/sp-paint-server.cpp @@ -13,7 +13,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include #include "sp-paint-server-reference.h" #include "sp-paint-server.h" diff --git a/src/sp-path.cpp b/src/sp-path.cpp index c4d24c503..a7119dd31 100644 --- a/src/sp-path.cpp +++ b/src/sp-path.cpp @@ -16,7 +16,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -27,7 +27,6 @@ #include "sp-lpe-item.h" #include "display/curve.h" -#include <2geom/pathvector.h> #include <2geom/curves.h> #include "helper/geom-curves.h" @@ -46,7 +45,6 @@ #include "inkscape.h" #include "style.h" #include "message-stack.h" -#include "selection.h" #define noPATH_VERBOSE diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 55110f3c5..a68bee721 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -13,14 +13,13 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include #include #include #include <2geom/transforms.h> -#include #include "svg/svg.h" #include "display/cairo-utils.h" @@ -30,10 +29,7 @@ #include "display/drawing-group.h" #include "attributes.h" #include "document-private.h" -#include "uri.h" -#include "style.h" #include "sp-pattern.h" -#include "xml/repr.h" #include "sp-factory.h" diff --git a/src/sp-polygon.cpp b/src/sp-polygon.cpp index ced485f12..14fd104b3 100644 --- a/src/sp-polygon.cpp +++ b/src/sp-polygon.cpp @@ -15,7 +15,6 @@ #include "sp-polygon.h" #include "display/curve.h" #include -#include <2geom/pathvector.h> #include <2geom/curves.h> #include "helper/geom-curves.h" #include "svg/stringstream.h" diff --git a/src/sp-polyline.cpp b/src/sp-polyline.cpp index a12f927b5..29054f934 100644 --- a/src/sp-polyline.cpp +++ b/src/sp-polyline.cpp @@ -11,8 +11,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" - #include "attributes.h" #include "sp-polyline.h" #include "display/curve.h" diff --git a/src/sp-rect.cpp b/src/sp-rect.cpp index 2ba9a7023..40107096f 100644 --- a/src/sp-rect.cpp +++ b/src/sp-rect.cpp @@ -12,12 +12,10 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif - #include "display/curve.h" -#include <2geom/rect.h> #include "inkscape.h" #include "document.h" @@ -25,7 +23,6 @@ #include "style.h" #include "sp-rect.h" #include -#include "xml/repr.h" #include "sp-guide.h" #include "preferences.h" diff --git a/src/sp-script.cpp b/src/sp-script.cpp index f1ea9c9bd..bd1ab512b 100644 --- a/src/sp-script.cpp +++ b/src/sp-script.cpp @@ -13,8 +13,6 @@ #include "sp-script.h" #include "attributes.h" -#include -#include "document.h" SPScript::SPScript() : SPObject() { this->xlinkhref = NULL; diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp index 78135d459..acec00024 100644 --- a/src/sp-shape.cpp +++ b/src/sp-shape.cpp @@ -15,21 +15,19 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include <2geom/rect.h> #include <2geom/transforms.h> #include <2geom/pathvector.h> #include <2geom/path-intersection.h> -#include <2geom/exception.h> #include "helper/geom.h" #include "helper/geom-nodetype.h" #include #include -#include "macros.h" #include "display/drawing-shape.h" #include "display/curve.h" #include "print.h" @@ -41,11 +39,6 @@ #include "attributes.h" #include "live_effects/lpeobject.h" -#include "uri.h" -#include "extract-uri.h" -#include "uri-references.h" -#include "bad-uri-exception.h" -#include "xml/repr.h" #include "helper/mathfns.h" // for triangle_area() diff --git a/src/sp-solid-color.cpp b/src/sp-solid-color.cpp index f319410b0..89858c18c 100644 --- a/src/sp-solid-color.cpp +++ b/src/sp-solid-color.cpp @@ -14,10 +14,6 @@ #include "attributes.h" #include "style.h" -#include "xml/repr.h" - -#include "sp-item.h" -#include "style-internal.h" /* diff --git a/src/sp-spiral.cpp b/src/sp-spiral.cpp index 5dbd7dfa0..57eb918fe 100644 --- a/src/sp-spiral.cpp +++ b/src/sp-spiral.cpp @@ -14,8 +14,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" - #include "svg/svg.h" #include "attributes.h" diff --git a/src/sp-star.cpp b/src/sp-star.cpp index 8a1956e3b..d112962a2 100644 --- a/src/sp-star.cpp +++ b/src/sp-star.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -28,8 +28,6 @@ #include "xml/repr.h" #include "document.h" -#include <2geom/pathvector.h> - #include "sp-star.h" SPStar::SPStar() : SPPolygon() , diff --git a/src/sp-stop.cpp b/src/sp-stop.cpp index 5e8fed86c..d31946b94 100644 --- a/src/sp-stop.cpp +++ b/src/sp-stop.cpp @@ -22,7 +22,6 @@ #include "svg/svg.h" #include "svg/svg-color.h" #include "svg/css-ostringstream.h" -#include "xml/repr.h" SPStop::SPStop() : SPObject() { this->path_string = NULL; diff --git a/src/sp-string.cpp b/src/sp-string.cpp index 26bb44006..0a959abea 100644 --- a/src/sp-string.cpp +++ b/src/sp-string.cpp @@ -25,10 +25,6 @@ #include "sp-string.h" #include "style.h" -#include "xml/repr.h" - -#include - /*##################################################### # SPSTRING #####################################################*/ diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp index d2dcde15d..1e0d81db9 100644 --- a/src/sp-switch.cpp +++ b/src/sp-switch.cpp @@ -18,7 +18,6 @@ #include "display/drawing-group.h" #include "conditions.h" -#include #include SPSwitch::SPSwitch() : SPGroup() { diff --git a/src/sp-symbol.cpp b/src/sp-symbol.cpp index 62fb232a3..55b5101af 100644 --- a/src/sp-symbol.cpp +++ b/src/sp-symbol.cpp @@ -12,10 +12,9 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif -#include #include #include <2geom/transforms.h> diff --git a/src/sp-tag-use-reference.cpp b/src/sp-tag-use-reference.cpp index 9fcb31fd1..cca24ed85 100644 --- a/src/sp-tag-use-reference.cpp +++ b/src/sp-tag-use-reference.cpp @@ -8,12 +8,9 @@ #include #include -#include -#include "enums.h" #include "sp-tag-use-reference.h" -#include "display/curve.h" #include "livarot/Path.h" #include "preferences.h" #include "sp-shape.h" diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 4afc38524..2e1d4993d 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -29,17 +29,14 @@ #include #include "svg/svg.h" -#include "svg/stringstream.h" #include "display/drawing-text.h" #include "attributes.h" #include "document.h" #include "preferences.h" #include "desktop.h" #include "sp-namedview.h" -#include "style.h" #include "inkscape.h" #include "xml/quote.h" -#include "xml/repr.h" #include "mod360.h" #include "sp-title.h" #include "sp-desc.h" @@ -52,9 +49,7 @@ #include "text-editing.h" // For SVG 2 text flow -#include "livarot/Path.h" #include "livarot/Shape.h" -#include "sp-shape.h" #include "display/curve.h" /*##################################################### diff --git a/src/sp-tref-reference.cpp b/src/sp-tref-reference.cpp index 7c6ff00e7..dfb8dd60b 100644 --- a/src/sp-tref-reference.cpp +++ b/src/sp-tref-reference.cpp @@ -13,8 +13,6 @@ #include "sp-text.h" #include "sp-tref.h" -#include "sp-tspan.h" - bool SPTRefReference::_acceptObject(SPObject * const obj) const diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp index ba592058b..20bfc8cd0 100644 --- a/src/sp-tref.cpp +++ b/src/sp-tref.cpp @@ -22,14 +22,9 @@ #include "document.h" #include "sp-factory.h" #include "sp-text.h" -#include "sp-tspan.h" #include "sp-tref.h" #include "style.h" #include "text-editing.h" -#include "uri.h" - -#include "xml/node.h" -#include "xml/repr.h" //#define DEBUG_TREF #ifdef DEBUG_TREF diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp index 05f8430ba..2b4ecf92b 100644 --- a/src/sp-tspan.cpp +++ b/src/sp-tspan.cpp @@ -24,7 +24,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -40,9 +40,7 @@ #include "sp-textpath.h" #include "text-editing.h" #include "style.h" -#include "xml/repr.h" #include "document.h" -#include "2geom/transforms.h" /*##################################################### # SPTSPAN diff --git a/src/sp-use-reference.cpp b/src/sp-use-reference.cpp index f0b2985d2..3dd63df40 100644 --- a/src/sp-use-reference.cpp +++ b/src/sp-use-reference.cpp @@ -9,7 +9,6 @@ #include #include -#include #include "enums.h" #include "sp-use-reference.h" @@ -21,8 +20,6 @@ #include "sp-text.h" #include "uri.h" - - bool SPUseReference::_acceptObject(SPObject * const obj) const { return URIReference::_acceptObject(obj); diff --git a/src/sp-use.cpp b/src/sp-use.cpp index c8a0830c1..59064ce21 100644 --- a/src/sp-use.cpp +++ b/src/sp-use.cpp @@ -34,7 +34,6 @@ #include "style.h" #include "sp-symbol.h" #include "sp-root.h" -#include "sp-use.h" #include "sp-use-reference.h" #include "sp-shape.h" #include "sp-text.h" diff --git a/src/splivarot.cpp b/src/splivarot.cpp index a8018f6c2..2edb52191 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -13,7 +13,6 @@ */ #ifdef HAVE_CONFIG_H -# include #endif #include @@ -23,14 +22,11 @@ #include "xml/repr.h" #include "svg/svg.h" #include "sp-path.h" -#include "sp-shape.h" #include "sp-image.h" #include "sp-marker.h" -#include "enums.h" #include "sp-text.h" #include "sp-flowtext.h" #include "text-editing.h" -#include "sp-item-group.h" #include "style.h" #include "document.h" #include "document-undo.h" @@ -39,14 +35,9 @@ #include "selection.h" #include "desktop.h" -#include "display/canvas-bpath.h" -#include "display/curve.h" #include -#include "preferences.h" -#include "xml/repr.h" #include "xml/repr-sorting.h" -#include <2geom/pathvector.h> #include <2geom/svg-path-writer.h> #include "helper/geom.h" diff --git a/src/style-internal.cpp b/src/style-internal.cpp index 62b0de52d..136a522f8 100644 --- a/src/style-internal.cpp +++ b/src/style-internal.cpp @@ -23,16 +23,14 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "style-internal.h" -#include "style-enums.h" #include "style.h" #include "svg/svg.h" #include "svg/svg-color.h" -#include "svg/svg-icc-color.h" #include "streq.h" #include "strneq.h" @@ -42,9 +40,6 @@ #include "svg/css-ostringstream.h" #include "util/units.h" -#include -#include - #include // TODO REMOVE OR MAKE MEMBER FUNCTIONS diff --git a/src/style.cpp b/src/style.cpp index c24818f2a..e51733cf0 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -20,7 +20,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -31,33 +31,19 @@ #include "xml/croco-node-iface.h" #include "svg/svg.h" -#include "svg/svg-color.h" -#include "svg/svg-icc-color.h" #include "display/canvas-bpath.h" #include "attributes.h" #include "document.h" -#include "extract-uri.h" #include "uri-references.h" #include "uri.h" #include "sp-paint-server.h" -#include "streq.h" -#include "strneq.h" #include "style.h" #include "svg/css-ostringstream.h" -#include "xml/repr.h" #include "xml/simple-document.h" #include "util/units.h" -#include "macros.h" #include "preferences.h" -#include "sp-filter-reference.h" - -#include -#include - -#include <2geom/math-utils.h> - #include using Inkscape::CSSOStringStream; diff --git a/src/svg/css-ostringstream.cpp b/src/svg/css-ostringstream.cpp index 33985443e..ef0413372 100644 --- a/src/svg/css-ostringstream.cpp +++ b/src/svg/css-ostringstream.cpp @@ -1,7 +1,6 @@ #include "svg/css-ostringstream.h" #include "svg/strip-trailing-zeros.h" #include "preferences.h" -#include Inkscape::CSSOStringStream::CSSOStringStream() { diff --git a/src/svg/path-string.cpp b/src/svg/path-string.cpp index 6dddeadff..7d0092dfa 100644 --- a/src/svg/path-string.cpp +++ b/src/svg/path-string.cpp @@ -17,7 +17,6 @@ #include "svg/stringstream.h" #include "svg/svg.h" #include "preferences.h" -#include // 1<=numericprecision<=16, doubles are only accurate upto (slightly less than) 16 digits (and less than one digit doesn't make sense) // Please note that these constants are used to allocate sufficient space to hold serialized numbers diff --git a/src/svg/svg-affine.cpp b/src/svg/svg-affine.cpp index d9d79bba5..21635c79b 100644 --- a/src/svg/svg-affine.cpp +++ b/src/svg/svg-affine.cpp @@ -12,7 +12,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include @@ -21,7 +21,6 @@ #include #include #include <2geom/transforms.h> -#include <2geom/angle.h> #include "svg.h" #include "preferences.h" diff --git a/src/svg/svg-angle.cpp b/src/svg/svg-angle.cpp index ed5ccd45e..9d4435a18 100644 --- a/src/svg/svg-angle.cpp +++ b/src/svg/svg-angle.cpp @@ -13,16 +13,13 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include #include -#include #include -#include "svg.h" -#include "stringstream.h" #include "svg/svg-angle.h" #include "util/units.h" diff --git a/src/svg/svg-color.cpp b/src/svg/svg-color.cpp index 693094048..89a5636a8 100644 --- a/src/svg/svg-color.cpp +++ b/src/svg/svg-color.cpp @@ -19,7 +19,6 @@ #include // sprintf #include #include -#include #include #include // g_assert #include diff --git a/src/svg/svg-path.cpp b/src/svg/svg-path.cpp index 7bb58fc9c..13795f2a3 100644 --- a/src/svg/svg-path.cpp +++ b/src/svg/svg-path.cpp @@ -17,17 +17,13 @@ #include #include -#include #include // g_assert() #include <2geom/pathvector.h> -#include <2geom/path.h> #include <2geom/curves.h> #include <2geom/sbasis-to-bezier.h> #include <2geom/path-sink.h> #include <2geom/svg-path-parser.h> -#include <2geom/exception.h> -#include <2geom/angle.h> #include "svg/svg.h" #include "svg/path-string.h" diff --git a/src/text-chemistry.cpp b/src/text-chemistry.cpp index fbbbe5807..ddadf8275 100644 --- a/src/text-chemistry.cpp +++ b/src/text-chemistry.cpp @@ -12,7 +12,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -27,7 +27,6 @@ #include "document.h" #include "document-undo.h" #include "message-stack.h" -#include "selection.h" #include "style.h" #include "text-editing.h" diff --git a/src/text-editing.cpp b/src/text-editing.cpp index 057523b1e..6669abcef 100644 --- a/src/text-editing.cpp +++ b/src/text-editing.cpp @@ -13,7 +13,6 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" #endif #include @@ -27,7 +26,6 @@ #include "util/units.h" #include "document.h" -#include "xml/repr.h" #include "xml/attribute-record.h" #include "xml/sp-css-attr.h" diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index d581dbf7e..09ba9a1a9 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -27,9 +27,6 @@ // TODO: reduce header bloat if possible #include "file.h" // for file_import, used in _pasteImage -#include -#include -#include #include #include // for g_file_set_contents etc., used in _onGet and paste #include "inkgc/gc-core.h" @@ -41,7 +38,6 @@ #include "desktop-style.h" // for sp_desktop_set_style, used in _pasteStyle #include "document.h" #include "document-private.h" -#include "selection.h" #include "message-stack.h" #include "context-fns.h" #include "ui/tools/dropper-tool.h" // used in copy() @@ -50,17 +46,13 @@ #include "extension/input.h" #include "extension/output.h" #include "selection-chemistry.h" -#include <2geom/rect.h> #include <2geom/transforms.h> #include "box3d.h" #include "gradient-drag.h" #include "sp-marker.h" -#include "sp-item.h" #include "sp-item-transform.h" // for sp_item_scale_rel, used in _pasteSize #include "sp-path.h" #include "sp-pattern.h" -#include "sp-shape.h" -#include "sp-gradient.h" #include "sp-gradient-reference.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" @@ -68,8 +60,6 @@ #include "sp-mask.h" #include "sp-textpath.h" #include "sp-rect.h" -#include "sp-use.h" -#include "sp-symbol.h" #include "live_effects/lpeobject.h" #include "live_effects/lpeobject-reference.h" #include "live_effects/parameter/path.h" @@ -83,9 +73,7 @@ #include "helper/png-write.h" #include "svg/svg-color.h" #include "sp-namedview.h" -#include "snap.h" #include "persp3d.h" -#include "preferences.h" /// Made up mimetype to represent Gdk::Pixbuf clipboard contents. #define CLIPBOARD_GDK_PIXBUF_TARGET "image/x-gdk-pixbuf" diff --git a/src/ui/control-manager.cpp b/src/ui/control-manager.cpp index a2c977533..973625574 100644 --- a/src/ui/control-manager.cpp +++ b/src/ui/control-manager.cpp @@ -17,7 +17,6 @@ #include #include "display/sodipodi-ctrl.h" // for SP_TYPE_CTRL -#include "display/sp-canvas-item.h" #include "display/sp-ctrlline.h" #include "display/sp-ctrlcurve.h" #include "preferences.h" diff --git a/src/ui/dialog-events.cpp b/src/ui/dialog-events.cpp index 8856631c0..d7d56fa50 100644 --- a/src/ui/dialog-events.cpp +++ b/src/ui/dialog-events.cpp @@ -12,17 +12,14 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include -#include #include "macros.h" -#include #include "desktop.h" #include "inkscape.h" -#include "preferences.h" #include "ui/tools/tool-base.h" #include "ui/dialog-events.h" diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index 8f87932b8..f269d1cb9 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -18,7 +18,7 @@ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "align-and-distribute.h" @@ -27,13 +27,10 @@ #include "unclump.h" #include "document.h" -#include "enums.h" #include "graphlayout.h" #include "inkscape.h" -#include "macros.h" #include "preferences.h" #include "removeoverlap.h" -#include "selection.h" #include "sp-flowtext.h" #include "sp-item-transform.h" #include "sp-text.h" diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp index b727c87ee..bdb826384 100644 --- a/src/ui/dialog/clonetiler.cpp +++ b/src/ui/dialog/clonetiler.cpp @@ -15,13 +15,11 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include "clonetiler.h" -#include - #include #include <2geom/transforms.h> #include @@ -31,23 +29,15 @@ #include "display/cairo-utils.h" #include "display/drawing.h" #include "display/drawing-context.h" -#include "display/drawing-item.h" #include "document.h" #include "document-undo.h" #include "filter-chemistry.h" #include "ui/widget/unit-menu.h" -#include "util/units.h" #include "helper/window.h" #include "inkscape.h" #include "ui/interface.h" -#include "macros.h" #include "message-stack.h" -#include "preferences.h" -#include "selection.h" -#include "sp-filter.h" #include "sp-namedview.h" -#include "sp-use.h" -#include "style.h" #include "svg/svg-color.h" #include "svg/svg.h" #include "ui/icon-names.h" @@ -55,8 +45,6 @@ #include "unclump.h" #include "verbs.h" #include "widgets/icon.h" -#include "xml/repr.h" -#include "sp-root.h" using Inkscape::DocumentUndo; using Inkscape::Util::unit_table; diff --git a/src/ui/dialog/color-item.cpp b/src/ui/dialog/color-item.cpp index 34cdb92e3..df4ab6485 100644 --- a/src/ui/dialog/color-item.cpp +++ b/src/ui/dialog/color-item.cpp @@ -12,15 +12,13 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include #include #include -#include -#include #include "color-item.h" @@ -34,16 +32,10 @@ #include "io/resource.h" #include "io/sys.h" #include "message-context.h" -#include "sp-gradient.h" -#include "sp-item.h" #include "svg/svg-color.h" -#include "xml/node.h" -#include "xml/repr.h" #include "verbs.h" #include "widgets/gradient-vector.h" -#include "color.h" // for SP_RGBA32_U_COMPOSE - namespace Inkscape { namespace UI { diff --git a/src/ui/dialog/debug.cpp b/src/ui/dialog/debug.cpp index d127261c0..d5ce6a160 100644 --- a/src/ui/dialog/debug.cpp +++ b/src/ui/dialog/debug.cpp @@ -10,13 +10,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include #include #include -#include #include #include #include diff --git a/src/ui/dialog/desktop-tracker.cpp b/src/ui/dialog/desktop-tracker.cpp index 0659de67b..c18711a55 100644 --- a/src/ui/dialog/desktop-tracker.cpp +++ b/src/ui/dialog/desktop-tracker.cpp @@ -6,7 +6,6 @@ */ #include "widgets/desktop-widget.h" -#include #include "desktop-tracker.h" diff --git a/src/ui/dialog/dialog-manager.cpp b/src/ui/dialog/dialog-manager.cpp index 49853277c..c53112656 100644 --- a/src/ui/dialog/dialog-manager.cpp +++ b/src/ui/dialog/dialog-manager.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "ui/dialog/dialog-manager.h" @@ -45,11 +45,8 @@ #include "ui/dialog/panel-dialog.h" #include "ui/dialog/layers.h" #include "ui/dialog/icon-preview.h" -#include "ui/dialog/floating-behavior.h" -#include "ui/dialog/dock-behavior.h" //#include "ui/dialog/print-colors-preview-dialog.h" #include "util/ege-appear-time-tracker.h" -#include "preferences.h" #include "ui/dialog/object-attributes.h" #include "ui/dialog/object-properties.h" #include "ui/dialog/text-edit.h" diff --git a/src/ui/dialog/dialog.cpp b/src/ui/dialog/dialog.cpp index 27d88bae7..d0b618c65 100644 --- a/src/ui/dialog/dialog.cpp +++ b/src/ui/dialog/dialog.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "dialog-manager.h" @@ -27,13 +27,10 @@ #include "desktop.h" #include "shortcuts.h" -#include "preferences.h" #include "ui/interface.h" #include "verbs.h" #include "ui/tool/event-utils.h" -#include - #define MIN_ONSCREEN_DISTANCE 50 diff --git a/src/ui/dialog/dock-behavior.cpp b/src/ui/dialog/dock-behavior.cpp index 50a6db208..ec630c08f 100644 --- a/src/ui/dialog/dock-behavior.cpp +++ b/src/ui/dialog/dock-behavior.cpp @@ -12,7 +12,7 @@ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "dock-behavior.h" @@ -23,15 +23,11 @@ #include "ui/widget/dock.h" #include "verbs.h" #include "dialog.h" -#include "preferences.h" #include "ui/dialog-events.h" #include -#include #include -#include - namespace Inkscape { namespace UI { namespace Dialog { diff --git a/src/ui/dialog/document-metadata.cpp b/src/ui/dialog/document-metadata.cpp index da1facc08..40495456b 100644 --- a/src/ui/dialog/document-metadata.cpp +++ b/src/ui/dialog/document-metadata.cpp @@ -15,13 +15,12 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "document-metadata.h" #include "desktop.h" -#include "inkscape.h" #include "rdf.h" #include "sp-namedview.h" #include "ui/widget/entity-entry.h" diff --git a/src/ui/dialog/document-properties.cpp b/src/ui/dialog/document-properties.cpp index 589973162..5b7887b35 100644 --- a/src/ui/dialog/document-properties.cpp +++ b/src/ui/dialog/document-properties.cpp @@ -25,27 +25,17 @@ #include "ui/widget/notebook-page.h" #include "document-properties.h" #include "display/canvas-grid.h" -#include "document.h" -#include "desktop.h" -#include "inkscape.h" #include "io/sys.h" -#include "preferences.h" #include "ui/shape-editor.h" -#include "sp-namedview.h" #include "sp-root.h" #include "sp-script.h" #include "style.h" -#include "svg/stringstream.h" #include "ui/tools-switch.h" -#include "ui/widget/color-picker.h" -#include "ui/widget/scalar-unit.h" #include "ui/dialog/filedialog.h" #include "verbs.h" #include "widgets/icon.h" #include "xml/node-event-vector.h" -#include "xml/repr.h" -#include // std::min #include "rdf.h" #include "ui/widget/entity-entry.h" @@ -54,11 +44,9 @@ #include "color-profile.h" #endif // defined(HAVE_LIBLCMS1) || defined(HAVE_LIBLCMS2) -#include #include -#include +#include -#include <2geom/transforms.h> #include "ui/icon-names.h" using std::pair; diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 2fb5f9e3b..28acfdfb5 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -24,18 +24,14 @@ #include #include #include -#include -#include #include #include -#include + #if WITH_GTKMM_3_0 # include #else # include #endif -#include -#include #ifdef WITH_GNOME_VFS # include // gnome_vfs_initialized @@ -45,16 +41,12 @@ #include #include "ui/widget/unit-menu.h" -#include "util/units.h" #include "helper/window.h" #include "inkscape.h" #include "document.h" #include "document-undo.h" -#include "sp-item.h" -#include "selection.h" #include "file.h" -#include "macros.h" #include "sp-namedview.h" #include "selection-chemistry.h" @@ -89,17 +81,12 @@ #include #endif -#include - #define SP_EXPORT_MIN_SIZE 1.0 #define DPI_BASE Inkscape::Util::Quantity::convert(1, "in", "px") #define EXPORT_COORD_PRECISION 3 -#include "../../document.h" -#include "../../document-undo.h" -#include "verbs.h" #include "export.h" using Inkscape::Util::unit_table; diff --git a/src/ui/dialog/extension-editor.cpp b/src/ui/dialog/extension-editor.cpp index 9bdddc0e0..84840f22d 100644 --- a/src/ui/dialog/extension-editor.cpp +++ b/src/ui/dialog/extension-editor.cpp @@ -12,14 +12,13 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "extension-editor.h" #include #include -#include #include #include @@ -27,7 +26,6 @@ #include "preferences.h" #include "ui/interface.h" -#include "extension/extension.h" #include "extension/db.h" namespace Inkscape { diff --git a/src/ui/dialog/filedialog.cpp b/src/ui/dialog/filedialog.cpp index 4e4b0278a..ee673aecf 100644 --- a/src/ui/dialog/filedialog.cpp +++ b/src/ui/dialog/filedialog.cpp @@ -17,14 +17,9 @@ #include "filedialogimpl-win32.h" #include "filedialogimpl-gtkmm.h" -#include "filedialog.h" -#include "inkgc/gc-core.h" #include "ui/dialog-events.h" #include "extension/output.h" -#include "preferences.h" - -#include namespace Inkscape { diff --git a/src/ui/dialog/fill-and-stroke.cpp b/src/ui/dialog/fill-and-stroke.cpp index 8141f7696..fa69851e4 100644 --- a/src/ui/dialog/fill-and-stroke.cpp +++ b/src/ui/dialog/fill-and-stroke.cpp @@ -22,7 +22,6 @@ #include "fill-and-stroke.h" #include "filter-chemistry.h" #include "inkscape.h" -#include "selection.h" #include "preferences.h" #include "style.h" #include "svg/css-ostringstream.h" @@ -32,12 +31,9 @@ #include "widgets/icon.h" #include "widgets/paint-selector.h" #include "widgets/stroke-style.h" -#include "xml/repr.h" #include "ui/view/view-widget.h" -#include - namespace Inkscape { namespace UI { namespace Dialog { diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp index d3ad5d1da..cbf6d3516 100644 --- a/src/ui/dialog/filter-effects-dialog.cpp +++ b/src/ui/dialog/filter-effects-dialog.cpp @@ -16,7 +16,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "dialog-manager.h" @@ -28,59 +28,42 @@ #include "ui/widget/spinbutton.h" -#include #include -#include #include +#include +#include #include "desktop.h" -#include "dir-util.h" #include "document.h" #include "document-undo.h" #include "filter-chemistry.h" #include "filter-effects-dialog.h" #include "filter-enums.h" #include "inkscape.h" -#include "path-prefix.h" -#include "preferences.h" -#include "selection.h" #include "filters/blend.h" #include "filters/colormatrix.h" #include "filters/componenttransfer.h" #include "filters/componenttransfer-funcnode.h" -#include "filters/composite.h" #include "filters/convolvematrix.h" -#include "filters/displacementmap.h" #include "filters/distantlight.h" -#include "filters/gaussian-blur.h" #include "filters/merge.h" #include "filters/mergenode.h" -#include "filters/offset.h" #include "filters/pointlight.h" #include "filters/spotlight.h" -#include "sp-filter-primitive.h" #include "style.h" #include "svg/svg-color.h" -#include "svg/stringstream.h" #include "ui/dialog/filedialog.h" #include "verbs.h" -#include "xml/node.h" -#include "xml/node-observer.h" -#include "xml/repr.h" -#include #include "io/sys.h" -#include #include "selection-chemistry.h" -#include #include -#include -#include #include #include +#include using namespace Inkscape::Filters; diff --git a/src/ui/dialog/find.cpp b/src/ui/dialog/find.cpp index 0f368c5ac..8b6067e82 100644 --- a/src/ui/dialog/find.cpp +++ b/src/ui/dialog/find.cpp @@ -11,30 +11,25 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "find.h" #include -#include #include "verbs.h" #include "message-stack.h" #include "helper/window.h" -#include "macros.h" #include "inkscape.h" #include "desktop.h" #include "document.h" #include "document-undo.h" -#include "selection.h" #include "ui/dialog-events.h" -#include "verbs.h" #include "ui/interface.h" -#include "preferences.h" #include "sp-text.h" #include "sp-flowtext.h" #include "sp-flowdiv.h" @@ -51,11 +46,9 @@ #include "sp-line.h" #include "sp-polyline.h" #include "sp-item-group.h" -#include "sp-use.h" #include "sp-image.h" #include "sp-offset.h" #include "sp-root.h" -#include "xml/repr.h" #include "xml/node-iterators.h" #include "xml/attribute-record.h" diff --git a/src/ui/dialog/floating-behavior.cpp b/src/ui/dialog/floating-behavior.cpp index 55ef0c5bb..5ac3a25ad 100644 --- a/src/ui/dialog/floating-behavior.cpp +++ b/src/ui/dialog/floating-behavior.cpp @@ -11,13 +11,12 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include #include #include -#include #include "floating-behavior.h" #include "dialog.h" @@ -26,7 +25,6 @@ #include "desktop.h" #include "ui/dialog-events.h" #include "ui/interface.h" -#include "preferences.h" #include "verbs.h" namespace Inkscape { diff --git a/src/ui/dialog/font-substitution.cpp b/src/ui/dialog/font-substitution.cpp index f219f3db6..0a88770b9 100644 --- a/src/ui/dialog/font-substitution.cpp +++ b/src/ui/dialog/font-substitution.cpp @@ -7,7 +7,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include @@ -21,16 +21,11 @@ #include "inkscape.h" #include "desktop.h" #include "document.h" -#include "selection.h" #include "ui/dialog-events.h" #include "selection-chemistry.h" -#include "preferences.h" -#include "xml/repr.h" - -#include "sp-defs.h" #include "sp-root.h" #include "sp-text.h" #include "sp-textpath.h" diff --git a/src/ui/dialog/glyphs.cpp b/src/ui/dialog/glyphs.cpp index 56b001291..7ce3eabfc 100644 --- a/src/ui/dialog/glyphs.cpp +++ b/src/ui/dialog/glyphs.cpp @@ -14,9 +14,7 @@ #include #include #include -#include #include -#include #include #include @@ -26,9 +24,6 @@ # include #endif -#include -#include - #include "desktop.h" #include "document.h" // for SPDocumentUndo::done() #include "document-undo.h" diff --git a/src/ui/dialog/grid-arrange-tab.cpp b/src/ui/dialog/grid-arrange-tab.cpp index 639e463ea..8d83814b4 100644 --- a/src/ui/dialog/grid-arrange-tab.cpp +++ b/src/ui/dialog/grid-arrange-tab.cpp @@ -16,14 +16,12 @@ //#define DEBUG_GRID_ARRANGE 1 #include "ui/dialog/grid-arrange-tab.h" -#include //for GTK_RESPONSE* types #include #include #if WITH_GTKMM_3_0 # include #else -# include #endif #include <2geom/transforms.h> @@ -32,10 +30,8 @@ #include "preferences.h" #include "inkscape.h" -#include "selection.h" #include "document.h" #include "document-undo.h" -#include "sp-item.h" #include "widgets/icon.h" #include "desktop.h" //#include "sp-item-transform.h" FIXME diff --git a/src/ui/dialog/guides.cpp b/src/ui/dialog/guides.cpp index 556d77a28..469bd5155 100644 --- a/src/ui/dialog/guides.cpp +++ b/src/ui/dialog/guides.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "guides.h" @@ -30,12 +30,8 @@ #include #include "ui/dialog-events.h" #include "message-context.h" -#include "xml/repr.h" #include "verbs.h" -#include <2geom/point.h> -#include <2geom/angle.h> - #include namespace Inkscape { diff --git a/src/ui/dialog/icon-preview.cpp b/src/ui/dialog/icon-preview.cpp index 83656a1f2..8dd0ae489 100644 --- a/src/ui/dialog/icon-preview.cpp +++ b/src/ui/dialog/icon-preview.cpp @@ -14,15 +14,15 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include #include #include -#include #include +#include #include #include @@ -35,10 +35,7 @@ #include "display/drawing.h" #include "document.h" #include "inkscape.h" -#include "preferences.h" -#include "selection.h" #include "sp-root.h" -#include "xml/repr.h" #include "verbs.h" #include "icon-preview.h" diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp index 6dd62d3bb..2f4ac8606 100644 --- a/src/ui/dialog/inkscape-preferences.cpp +++ b/src/ui/dialog/inkscape-preferences.cpp @@ -19,30 +19,22 @@ #include "inkscape-preferences.h" #include -#include #include +#include #include -#include -#include #include #include "preferences.h" #include "verbs.h" #include "selcue.h" -#include "util/units.h" -#include -#include "enums.h" #include "extension/internal/gdkpixbuf-input.h" #include "message-stack.h" #include "style.h" #include "selection.h" #include "selection-chemistry.h" -#include "xml/repr.h" #include "ui/widget/style-swatch.h" -#include "ui/widget/spinbutton.h" #include "display/nr-filter-gaussian.h" -#include "display/nr-filter-types.h" #include "cms-system.h" #include "color-profile.h" #include "display/canvas-grid.h" diff --git a/src/ui/dialog/input.cpp b/src/ui/dialog/input.cpp index 8343cd6fe..1bfb59ae5 100644 --- a/src/ui/dialog/input.cpp +++ b/src/ui/dialog/input.cpp @@ -15,18 +15,12 @@ #include "ui/widget/panel.h" #include "ui/widget/frame.h" -#include #include -#include #include #include #include #include -#include -#include -#include -#include #include #include #include @@ -40,10 +34,7 @@ # include #endif -#include -#include #include -#include #include "device-manager.h" #include "preferences.h" diff --git a/src/ui/dialog/knot-properties.cpp b/src/ui/dialog/knot-properties.cpp index a91a09a4f..133ed6f4c 100644 --- a/src/ui/dialog/knot-properties.cpp +++ b/src/ui/dialog/knot-properties.cpp @@ -14,12 +14,10 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "ui/dialog/knot-properties.h" #include -#include -#include #include #include "inkscape.h" #include "util/units.h" @@ -27,15 +25,8 @@ #include "document.h" #include "document-undo.h" #include "layer-manager.h" -#include "message-stack.h" -#include "sp-object.h" -#include "sp-item.h" -#include "verbs.h" -#include "selection.h" #include "selection-chemistry.h" -#include "ui/icon-names.h" -#include "ui/widget/imagetoggler.h" //#include "event-context.h" diff --git a/src/ui/dialog/layer-properties.cpp b/src/ui/dialog/layer-properties.cpp index 5d550ed48..9cfc21e18 100644 --- a/src/ui/dialog/layer-properties.cpp +++ b/src/ui/dialog/layer-properties.cpp @@ -15,8 +15,9 @@ #include "layer-properties.h" #include -#include #include +#include + #include "inkscape.h" #include "desktop.h" #include "document.h" @@ -24,10 +25,7 @@ #include "layer-manager.h" #include "message-stack.h" -#include "sp-object.h" -#include "sp-item.h" #include "verbs.h" -#include "selection.h" #include "selection-chemistry.h" #include "ui/icon-names.h" #include "ui/widget/imagetoggler.h" diff --git a/src/ui/dialog/layers.cpp b/src/ui/dialog/layers.cpp index 1c022ecad..c75c631d7 100644 --- a/src/ui/dialog/layers.cpp +++ b/src/ui/dialog/layers.cpp @@ -10,16 +10,13 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "layers.h" -#include #include #include #include - -#include #include #include "desktop.h" @@ -27,19 +24,14 @@ #include "document.h" #include "document-undo.h" #include "helper/action.h" -#include "helper/action-context.h" #include "inkscape.h" #include "layer-fns.h" #include "layer-manager.h" -#include "preferences.h" -#include "sp-item.h" -#include "sp-object.h" #include "svg/css-ostringstream.h" #include "ui/icon-names.h" #include "ui/widget/imagetoggler.h" #include "verbs.h" #include "widgets/icon.h" -#include "xml/repr.h" #include "sp-root.h" #include "ui/tools/tool-base.h" #include "selection-chemistry.h" diff --git a/src/ui/dialog/livepatheffect-add.cpp b/src/ui/dialog/livepatheffect-add.cpp index c558eddaf..3602b04df 100644 --- a/src/ui/dialog/livepatheffect-add.cpp +++ b/src/ui/dialog/livepatheffect-add.cpp @@ -9,7 +9,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "livepatheffect-add.h" @@ -17,7 +17,6 @@ #include #include "desktop.h" -#include "live_effects/effect-enum.h" namespace Inkscape { namespace UI { diff --git a/src/ui/dialog/livepatheffect-editor.cpp b/src/ui/dialog/livepatheffect-editor.cpp index 422ec10ae..ac64143f1 100644 --- a/src/ui/dialog/livepatheffect-editor.cpp +++ b/src/ui/dialog/livepatheffect-editor.cpp @@ -13,20 +13,16 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "livepatheffect-editor.h" -#include #include -#include -#include #include "desktop.h" #include "document.h" #include "document-undo.h" -#include "gtkmm/widget.h" #include "helper/action.h" #include "inkscape.h" #include "live_effects/effect.h" @@ -34,19 +30,14 @@ #include "live_effects/lpeobject-reference.h" #include "path-chemistry.h" #include "selection-chemistry.h" -#include "selection.h" #include "sp-item-group.h" -#include "sp-lpe-item.h" #include "sp-path.h" #include "sp-rect.h" -#include "sp-use.h" #include "sp-text.h" -#include "sp-shape.h" #include "ui/icon-names.h" #include "ui/widget/imagetoggler.h" #include "verbs.h" #include "widgets/icon.h" -#include "xml/node.h" #include "livepatheffect-add.h" namespace Inkscape { diff --git a/src/ui/dialog/lpe-fillet-chamfer-properties.cpp b/src/ui/dialog/lpe-fillet-chamfer-properties.cpp index b0cc91868..d33ee758d 100644 --- a/src/ui/dialog/lpe-fillet-chamfer-properties.cpp +++ b/src/ui/dialog/lpe-fillet-chamfer-properties.cpp @@ -5,30 +5,20 @@ */ #ifdef HAVE_CONFIG_H -#include +#include "config.h" #endif #include #include "lpe-fillet-chamfer-properties.h" #include -#include #include #include "inkscape.h" #include "desktop.h" -#include "document.h" #include "document-undo.h" #include "layer-manager.h" #include "message-stack.h" -#include "sp-object.h" -#include "sp-item.h" -#include "verbs.h" -#include "selection.h" #include "selection-chemistry.h" -#include "ui/icon-names.h" -#include "ui/widget/imagetoggler.h" -#include "live_effects/parameter/parameter.h" -#include //#include "event-context.h" diff --git a/src/ui/dialog/lpe-powerstroke-properties.cpp b/src/ui/dialog/lpe-powerstroke-properties.cpp index a6dcce907..d5b3bb30d 100644 --- a/src/ui/dialog/lpe-powerstroke-properties.cpp +++ b/src/ui/dialog/lpe-powerstroke-properties.cpp @@ -14,29 +14,18 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "lpe-powerstroke-properties.h" #include -#include -#include #include #include "inkscape.h" #include "desktop.h" -#include "document.h" #include "document-undo.h" #include "layer-manager.h" -#include "message-stack.h" -#include "sp-object.h" -#include "sp-item.h" -#include "verbs.h" -#include "selection.h" #include "selection-chemistry.h" -#include "ui/icon-names.h" -#include "ui/widget/imagetoggler.h" -#include "live_effects/parameter/parameter.h" //#include "event-context.h" namespace Inkscape { diff --git a/src/ui/dialog/memory.cpp b/src/ui/dialog/memory.cpp index c0bc884fa..f08089774 100644 --- a/src/ui/dialog/memory.cpp +++ b/src/ui/dialog/memory.cpp @@ -11,12 +11,13 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "ui/dialog/memory.h" -#include #include +#include + #include #include diff --git a/src/ui/dialog/messages.cpp b/src/ui/dialog/messages.cpp index df02215fe..3a8e7338d 100644 --- a/src/ui/dialog/messages.cpp +++ b/src/ui/dialog/messages.cpp @@ -11,7 +11,7 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "messages.h" diff --git a/src/ui/dialog/new-from-template.cpp b/src/ui/dialog/new-from-template.cpp index 74ec7111e..96fa72791 100644 --- a/src/ui/dialog/new-from-template.cpp +++ b/src/ui/dialog/new-from-template.cpp @@ -9,14 +9,13 @@ */ #if HAVE_CONFIG_H - #include "config.h" +#include "config.h" #endif #include "new-from-template.h" #include "file.h" #include -#include namespace Inkscape { diff --git a/src/ui/dialog/object-attributes.cpp b/src/ui/dialog/object-attributes.cpp index 1bc570f43..72520d3d0 100644 --- a/src/ui/dialog/object-attributes.cpp +++ b/src/ui/dialog/object-attributes.cpp @@ -23,15 +23,12 @@ #include "ui/dialog/dialog-manager.h" #include "desktop.h" -#include "macros.h" #include "sp-anchor.h" #include "sp-image.h" #include "verbs.h" -#include "xml/repr.h" #include "ui/dialog/object-attributes.h" #include "widgets/sp-attribute-widget.h" #include "inkscape.h" -#include "selection.h" #include namespace Inkscape { diff --git a/src/ui/dialog/object-properties.cpp b/src/ui/dialog/object-properties.cpp index be46129c4..545c240fc 100644 --- a/src/ui/dialog/object-properties.cpp +++ b/src/ui/dialog/object-properties.cpp @@ -33,11 +33,8 @@ #include "document-undo.h" #include "verbs.h" #include "inkscape.h" -#include "selection.h" #include "desktop.h" -#include "sp-item.h" #include "sp-image.h" -#include "xml/repr.h" #include #if WITH_GTKMM_3_0 diff --git a/src/ui/dialog/objects.cpp b/src/ui/dialog/objects.cpp index 27694a9ac..43aa663e2 100644 --- a/src/ui/dialog/objects.cpp +++ b/src/ui/dialog/objects.cpp @@ -10,17 +10,14 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "objects.h" -#include #include +#include #include #include -#include - -#include #include #include "desktop.h" @@ -34,12 +31,8 @@ #include "helper/action.h" #include "inkscape.h" #include "layer-manager.h" -#include "preferences.h" -#include "selection.h" #include "sp-clippath.h" #include "sp-mask.h" -#include "sp-item.h" -#include "sp-object.h" #include "sp-root.h" #include "sp-shape.h" #include "style.h" @@ -52,13 +45,10 @@ #include "ui/widget/clipmaskicon.h" #include "ui/widget/highlight-picker.h" #include "ui/tools/node-tool.h" -#include "ui/tools/tool-base.h" #include "verbs.h" #include "ui/widget/color-notebook.h" #include "widgets/icon.h" -#include "xml/node.h" #include "xml/node-observer.h" -#include "xml/repr.h" //#define DUMP_LAYERS 1 diff --git a/src/ui/dialog/ocaldialogs.cpp b/src/ui/dialog/ocaldialogs.cpp index f2ee79d06..3353d2878 100644 --- a/src/ui/dialog/ocaldialogs.cpp +++ b/src/ui/dialog/ocaldialogs.cpp @@ -18,16 +18,10 @@ #include "ocaldialogs.h" -#include // rename() -#include // close() -#include // errno -#include // strerror() - #include "path-prefix.h" #include "filedialogimpl-gtkmm.h" #include "ui/interface.h" #include "inkgc/gc-core.h" -#include "ui/dialog-events.h" #include "io/sys.h" #include "preferences.h" @@ -37,12 +31,13 @@ #include #include +#include +#include +#include #include #include -#include #include -#include -#include + #include "ui/icon-names.h" namespace Inkscape diff --git a/src/ui/dialog/pixelartdialog.cpp b/src/ui/dialog/pixelartdialog.cpp index f557ff0fc..62e6bf591 100644 --- a/src/ui/dialog/pixelartdialog.cpp +++ b/src/ui/dialog/pixelartdialog.cpp @@ -31,7 +31,6 @@ #include #include -#include //for GTK_RESPONSE* types #include #include "ui/widget/spinbutton.h" @@ -41,18 +40,13 @@ #include "desktop-tracker.h" #include "message-stack.h" #include "selection.h" -#include "preferences.h" #include "sp-image.h" #include "display/cairo-utils.h" #include "libdepixelize/kopftracer2011.h" -#include #include "document.h" -#include "xml/repr.h" -#include "xml/document.h" #include "svg/svg.h" #include "svg/svg-color.h" -#include "color.h" #include "svg/css-ostringstream.h" #include "document-undo.h" diff --git a/src/ui/dialog/polar-arrange-tab.cpp b/src/ui/dialog/polar-arrange-tab.cpp index 5ec1285c1..da914dcd4 100644 --- a/src/ui/dialog/polar-arrange-tab.cpp +++ b/src/ui/dialog/polar-arrange-tab.cpp @@ -17,10 +17,8 @@ #include "preferences.h" #include "inkscape.h" -#include "selection.h" #include "document.h" #include "document-undo.h" -#include "sp-item.h" #include "widgets/icon.h" #include "desktop.h" #include "sp-ellipse.h" diff --git a/src/ui/dialog/print.cpp b/src/ui/dialog/print.cpp index c44d645a5..9ebbf040c 100644 --- a/src/ui/dialog/print.cpp +++ b/src/ui/dialog/print.cpp @@ -11,7 +11,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include @@ -26,7 +26,6 @@ #include "extension/internal/cairo-render-context.h" #include "extension/internal/cairo-renderer.h" -#include "ui/widget/rendering-options.h" #include "document.h" #include "util/units.h" diff --git a/src/ui/dialog/spellcheck.cpp b/src/ui/dialog/spellcheck.cpp index 6da8acb20..61fa4c22b 100644 --- a/src/ui/dialog/spellcheck.cpp +++ b/src/ui/dialog/spellcheck.cpp @@ -17,25 +17,18 @@ #include "message-stack.h" #include "helper/window.h" -#include "macros.h" #include "inkscape.h" #include "document.h" -#include "selection.h" #include "desktop.h" #include "ui/tools-switch.h" #include "ui/tools/text-tool.h" #include "ui/interface.h" -#include "preferences.h" -#include "sp-text.h" #include "sp-flowtext.h" #include "text-editing.h" -#include "sp-tspan.h" #include "sp-tref.h" #include "sp-defs.h" #include "selection-chemistry.h" -#include -#include "display/canvas-bpath.h" #include "display/curve.h" #include "document-undo.h" #include "sp-root.h" @@ -47,7 +40,7 @@ #endif #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp index 08ebbcf14..9dd2342f8 100644 --- a/src/ui/dialog/svg-fonts-dialog.cpp +++ b/src/ui/dialog/svg-fonts-dialog.cpp @@ -12,21 +12,19 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "svg-fonts-dialog.h" #include "document-private.h" #include "document-undo.h" #include -#include #include #include +#include #include #include "selection.h" -#include #include "svg/svg.h" -#include "xml/node.h" #include "xml/repr.h" #include "sp-font-face.h" #include "desktop.h" diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 6577c8d4e..e7bf96e8b 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include "color-item.h" #include "desktop.h" @@ -35,28 +34,20 @@ #include "document-undo.h" #include "extension/db.h" #include "inkscape.h" -#include "inkscape.h" #include "io/sys.h" #include "io/resource.h" #include "message-context.h" #include "path-prefix.h" -#include "preferences.h" -#include "sp-item.h" -#include "sp-gradient.h" -#include "sp-gradient-vector.h" #include "style.h" #include "ui/previewholder.h" #include "widgets/desktop-widget.h" #include "widgets/gradient-vector.h" -#include "widgets/eek-preview.h" #include "display/cairo-utils.h" #include "sp-gradient-reference.h" #include "dialog-manager.h" -#include "selection.h" #include "verbs.h" #include "gradient-chemistry.h" #include "helper/action.h" -#include "helper/action-context.h" namespace Inkscape { namespace UI { diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp index 06c17611f..92bb5c605 100644 --- a/src/ui/dialog/symbols.cpp +++ b/src/ui/dialog/symbols.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -32,8 +31,6 @@ #include #include #include -#include -#include #include #include #include @@ -76,8 +73,6 @@ #include "verbs.h" #include "helper/action.h" -#include "helper/action-context.h" -#include "xml/repr.h" namespace Inkscape { namespace UI { diff --git a/src/ui/dialog/tags.cpp b/src/ui/dialog/tags.cpp index c99c1bff3..2ec710501 100644 --- a/src/ui/dialog/tags.cpp +++ b/src/ui/dialog/tags.cpp @@ -10,17 +10,13 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "tags.h" -#include #include #include -#include - #include -#include #include "desktop.h" #include "desktop-style.h" @@ -30,28 +26,19 @@ #include "inkscape.h" #include "layer-fns.h" #include "layer-manager.h" -#include "preferences.h" -#include "sp-item.h" -#include "sp-object.h" #include "sp-shape.h" #include "svg/css-ostringstream.h" -#include "ui/icon-names.h" #include "ui/widget/layertypeicon.h" #include "ui/widget/addtoicon.h" #include "verbs.h" #include "widgets/icon.h" -#include "xml/node.h" #include "xml/node-observer.h" -#include "xml/repr.h" #include "sp-root.h" #include "ui/tools/tool-base.h" //"event-context.h" -#include "selection.h" //#include "dialogs/dialog-events.h" #include "ui/widget/color-notebook.h" #include "style.h" #include "filter-chemistry.h" -#include "filters/blend.h" -#include "filters/gaussian-blur.h" #include "sp-clippath.h" #include "sp-mask.h" #include "sp-tag.h" diff --git a/src/ui/dialog/template-load-tab.cpp b/src/ui/dialog/template-load-tab.cpp index 7eb04ff79..7b96c2b97 100644 --- a/src/ui/dialog/template-load-tab.cpp +++ b/src/ui/dialog/template-load-tab.cpp @@ -9,28 +9,20 @@ */ #include "template-widget.h" -#include "template-load-tab.h" #include "new-from-template.h" -#include -#include -#include -#include #include #include +#include +#include +#include #include -#include #include "extension/db.h" -#include "extension/effect.h" #include "inkscape.h" #include "ui/interface.h" #include "file.h" #include "path-prefix.h" -#include "preferences.h" -#include "xml/repr.h" -#include "xml/document.h" -#include "xml/node.h" namespace Inkscape { namespace UI { diff --git a/src/ui/dialog/template-widget.cpp b/src/ui/dialog/template-widget.cpp index 0d110d853..3b7fbe88c 100644 --- a/src/ui/dialog/template-widget.cpp +++ b/src/ui/dialog/template-widget.cpp @@ -10,15 +10,10 @@ #include "template-widget.h" +#include #include -#include -#include #include -#include -#include - -#include "template-load-tab.h" #include "desktop.h" #include "document.h" diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index c01da8864..6ce377419 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -22,7 +22,6 @@ #include "text-edit.h" #include -#include #ifdef WITH_GTKSPELL extern "C" { @@ -31,11 +30,8 @@ extern "C" { #endif #include -#include #include -#include -#include "macros.h" #include "helper/window.h" #include "inkscape.h" #include "document.h" @@ -43,13 +39,10 @@ extern "C" { #include "desktop-style.h" #include "document-undo.h" -#include "selection.h" -#include "style.h" #include "sp-text.h" #include "sp-flowtext.h" #include "text-editing.h" #include "ui/icon-names.h" -#include "preferences.h" #include "verbs.h" #include "ui/interface.h" #include "svg/css-ostringstream.h" diff --git a/src/ui/dialog/tracedialog.cpp b/src/ui/dialog/tracedialog.cpp index 11e75391b..1c0cb5708 100644 --- a/src/ui/dialog/tracedialog.cpp +++ b/src/ui/dialog/tracedialog.cpp @@ -12,18 +12,17 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "tracedialog.h" #include #include +#include #include "ui/widget/spinbutton.h" #include "ui/widget/frame.h" -#include #include -#include //for GTK_RESPONSE* types #include #include "desktop.h" diff --git a/src/ui/dialog/transformation.cpp b/src/ui/dialog/transformation.cpp index b7638e8c1..031bc5ae1 100644 --- a/src/ui/dialog/transformation.cpp +++ b/src/ui/dialog/transformation.cpp @@ -12,7 +12,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include @@ -26,15 +26,11 @@ #include "transformation.h" #include "align-and-distribute.h" #include "inkscape.h" -#include "selection.h" #include "selection-chemistry.h" #include "message-stack.h" #include "verbs.h" -#include "preferences.h" #include "sp-namedview.h" #include "sp-item-transform.h" -#include "macros.h" -#include "sp-item.h" #include "ui/icon-names.h" #include "widgets/icon.h" diff --git a/src/ui/dialog/undo-history.cpp b/src/ui/dialog/undo-history.cpp index a50a169eb..38fab8f07 100644 --- a/src/ui/dialog/undo-history.cpp +++ b/src/ui/dialog/undo-history.cpp @@ -12,18 +12,14 @@ */ #ifdef HAVE_CONFIG_H -# include +#include "config.h" #endif #include "undo-history.h" -#include -#include -#include #include "document.h" #include "document-undo.h" #include "inkscape.h" -#include "verbs.h" #include "util/signal-blocker.h" diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index 99a4acc69..c2711bb02 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -18,7 +18,6 @@ #include "xml-tree.h" #include "widgets/icon.h" -#include #include #include @@ -31,18 +30,14 @@ #include "helper/window.h" #include "inkscape.h" #include "ui/interface.h" -#include "macros.h" #include "message-context.h" #include "message-stack.h" -#include "preferences.h" -#include "selection.h" #include "shortcuts.h" #include "sp-root.h" #include "sp-string.h" #include "sp-tspan.h" #include "ui/icon-names.h" #include "verbs.h" -#include "widgets/icon.h" #include "widgets/sp-xmlview-attr-list.h" #include "widgets/sp-xmlview-content.h" diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp index ab29471ed..a7048c402 100644 --- a/src/ui/interface.cpp +++ b/src/ui/interface.cpp @@ -20,12 +20,13 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "ui/dialog/dialog-manager.h" #include #include "file.h" +#include #include #include @@ -35,25 +36,20 @@ #include "extension/input.h" #include "widgets/icon.h" #include "preferences.h" -#include "path-prefix.h" #include "shortcuts.h" #include "document.h" #include "ui/interface.h" #include "desktop.h" -#include "selection.h" #include "selection-chemistry.h" #include "svg-view-widget.h" #include "widgets/desktop-widget.h" #include "sp-item-group.h" #include "sp-text.h" -#include "sp-gradient.h" #include "sp-flowtext.h" #include "sp-namedview.h" #include "sp-root.h" -#include "ui/view/view.h" #include "helper/action.h" -#include "helper/action-context.h" #include "helper/gnome-utils.h" #include "helper/window.h" #include "io/sys.h" @@ -63,7 +59,6 @@ #include "ui/clipboard.h" #include "display/sp-canvas.h" -#include "color.h" #include "svg/svg-color.h" #include "desktop-style.h" #include "style.h" @@ -74,7 +69,6 @@ #include "sp-anchor.h" #include "sp-clippath.h" #include "sp-image.h" -#include "sp-item.h" #include "sp-mask.h" #include "message-stack.h" #include "ui/dialog/layer-properties.h" @@ -83,10 +77,6 @@ #include "widgets/image-menu-item.h" #endif -#include - -#include - using Inkscape::DocumentUndo; /* Drag and Drop */ diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp index 459acf002..ddf770f59 100644 --- a/src/ui/object-edit.cpp +++ b/src/ui/object-edit.cpp @@ -12,11 +12,9 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif - - #include "sp-item.h" #include "sp-rect.h" #include "box3d.h" @@ -32,11 +30,8 @@ #include "sp-namedview.h" #include "live_effects/effect.h" #include "sp-pattern.h" -#include "sp-path.h" #include #include "ui/object-edit.h" -#include "xml/repr.h" -#include <2geom/math-utils.h> #include "knot-holder-entity.h" #define sp_round(v,m) (((v) < 0.0) ? ((ceil((v) / (m) - 0.5)) * (m)) : ((floor((v) / (m) + 0.5)) * (m))) diff --git a/src/ui/previewholder.cpp b/src/ui/previewholder.cpp index 5e75179a3..ac1369ced 100644 --- a/src/ui/previewholder.cpp +++ b/src/ui/previewholder.cpp @@ -12,7 +12,6 @@ #include "previewholder.h" -#include "preferences.h" #include #include diff --git a/src/ui/selected-color.cpp b/src/ui/selected-color.cpp index 846d50a5b..08f4bd979 100644 --- a/src/ui/selected-color.cpp +++ b/src/ui/selected-color.cpp @@ -11,7 +11,7 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include diff --git a/src/ui/shape-editor.cpp b/src/ui/shape-editor.cpp index aec5cde27..98320ed8c 100644 --- a/src/ui/shape-editor.cpp +++ b/src/ui/shape-editor.cpp @@ -8,7 +8,7 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include @@ -16,11 +16,8 @@ #include "desktop.h" #include "document.h" -#include "gc-anchored.h" #include "knotholder.h" #include "ui/object-edit.h" -#include "sp-item.h" -#include "sp-object.h" #include "ui/shape-editor.h" #include "xml/node-event-vector.h" diff --git a/src/ui/tool-factory.cpp b/src/ui/tool-factory.cpp index c6c579c9e..f101e5a24 100644 --- a/src/ui/tool-factory.cpp +++ b/src/ui/tool-factory.cpp @@ -27,14 +27,12 @@ #include "ui/tools/mesh-tool.h" #include "ui/tools/node-tool.h" #include "ui/tools/pencil-tool.h" -#include "ui/tools/pen-tool.h" #include "ui/tools/rect-tool.h" #include "ui/tools/select-tool.h" #include "ui/tools/spiral-tool.h" #include "ui/tools/spray-tool.h" #include "ui/tools/star-tool.h" #include "ui/tools/text-tool.h" -#include "ui/tools/tool-base.h" #include "ui/tools/tweak-tool.h" #include "ui/tools/zoom-tool.h" diff --git a/src/ui/tool/control-point-selection.cpp b/src/ui/tool/control-point-selection.cpp index f36ad7374..a5611addc 100644 --- a/src/ui/tool/control-point-selection.cpp +++ b/src/ui/tool/control-point-selection.cpp @@ -13,7 +13,6 @@ #include "ui/tool/selectable-control-point.h" #include <2geom/transforms.h> #include "desktop.h" -#include "preferences.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/event-utils.h" #include "ui/tool/transform-handle-set.h" diff --git a/src/ui/tool/control-point.cpp b/src/ui/tool/control-point.cpp index 636595016..d9374c790 100644 --- a/src/ui/tool/control-point.cpp +++ b/src/ui/tool/control-point.cpp @@ -16,8 +16,6 @@ #include "display/snap-indicator.h" #include "ui/tools/tool-base.h" #include "message-context.h" -#include "preferences.h" -#include "snap-preferences.h" #include "sp-namedview.h" #include "ui/control-manager.h" #include "ui/tool/control-point.h" diff --git a/src/ui/tool/curve-drag-point.cpp b/src/ui/tool/curve-drag-point.cpp index e460b0fb7..908e18474 100644 --- a/src/ui/tool/curve-drag-point.cpp +++ b/src/ui/tool/curve-drag-point.cpp @@ -8,15 +8,12 @@ #include "ui/tool/curve-drag-point.h" #include -#include <2geom/bezier-curve.h> #include "desktop.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/event-utils.h" #include "ui/tool/multi-path-manipulator.h" #include "ui/tool/path-manipulator.h" -#include "ui/tool/node.h" #include "sp-namedview.h" -#include "snap.h" namespace Inkscape { namespace UI { diff --git a/src/ui/tool/manipulator.cpp b/src/ui/tool/manipulator.cpp index 11dd220f4..82ff014e4 100644 --- a/src/ui/tool/manipulator.cpp +++ b/src/ui/tool/manipulator.cpp @@ -8,8 +8,8 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "ui/tool/node.h" -#include "ui/tool/manipulator.h" +//#include "ui/tool/node.h" +//#include "ui/tool/manipulator.h" namespace Inkscape { namespace UI { diff --git a/src/ui/tool/modifier-tracker.cpp b/src/ui/tool/modifier-tracker.cpp index cc4e4d0b2..f502acab2 100644 --- a/src/ui/tool/modifier-tracker.cpp +++ b/src/ui/tool/modifier-tracker.cpp @@ -12,7 +12,6 @@ #include #include "ui/tool/event-utils.h" #include "ui/tool/modifier-tracker.h" -#include namespace Inkscape { namespace UI { diff --git a/src/ui/tool/multi-path-manipulator.cpp b/src/ui/tool/multi-path-manipulator.cpp index 9ec6f733f..f30c7e349 100644 --- a/src/ui/tool/multi-path-manipulator.cpp +++ b/src/ui/tool/multi-path-manipulator.cpp @@ -19,13 +19,11 @@ #include "document-undo.h" #include "live_effects/lpeobject.h" #include "message-stack.h" -#include "preferences.h" #include "sp-path.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/event-utils.h" #include "ui/tool/multi-path-manipulator.h" #include "ui/tool/path-manipulator.h" -#include "util/unordered-containers.h" #include "verbs.h" #include diff --git a/src/ui/tool/node.cpp b/src/ui/tool/node.cpp index 9268d9730..0e5a9279d 100644 --- a/src/ui/tool/node.cpp +++ b/src/ui/tool/node.cpp @@ -12,25 +12,20 @@ #include "multi-path-manipulator.h" #include #include <2geom/bezier-utils.h> -#include <2geom/transforms.h> #include "display/sp-ctrlline.h" #include "display/sp-canvas.h" #include "display/sp-canvas-util.h" #include "desktop.h" -#include "preferences.h" #include "snap.h" -#include "snap-preferences.h" #include "sp-namedview.h" #include "ui/control-manager.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/event-utils.h" -#include "ui/tool/node.h" #include "ui/tool/path-manipulator.h" #include "ui/tools/node-tool.h" #include "ui/tools-switch.h" #include -#include namespace { diff --git a/src/ui/tool/path-manipulator.cpp b/src/ui/tool/path-manipulator.cpp index de071dad3..f316bea38 100644 --- a/src/ui/tool/path-manipulator.cpp +++ b/src/ui/tool/path-manipulator.cpp @@ -13,36 +13,23 @@ #include "live_effects/lpe-powerstroke.h" #include "live_effects/lpe-bspline.h" #include "live_effects/lpe-fillet-chamfer.h" -#include -#include -#include -#include -#include -#include <2geom/bezier-curve.h> #include <2geom/bezier-utils.h> #include <2geom/path-sink.h> -#include #include "ui/tool/path-manipulator.h" -#include "desktop.h" #include "display/sp-canvas.h" #include "display/sp-canvas-util.h" #include "display/curve.h" #include "display/canvas-bpath.h" -#include "document.h" -#include "live_effects/effect.h" #include "live_effects/lpeobject.h" #include "live_effects/lpeobject-reference.h" #include "live_effects/parameter/path.h" -#include "sp-path.h" #include "helper/geom.h" -#include "preferences.h" #include "style.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/curve-drag-point.h" #include "ui/tool/event-utils.h" #include "ui/tool/multi-path-manipulator.h" -#include "xml/node.h" #include "xml/node-observer.h" namespace Inkscape { diff --git a/src/ui/tool/selector.cpp b/src/ui/tool/selector.cpp index 9acf7de88..84e96173d 100644 --- a/src/ui/tool/selector.cpp +++ b/src/ui/tool/selector.cpp @@ -14,7 +14,6 @@ #include "display/sodipodi-ctrlrect.h" #include "ui/tools/tool-base.h" -#include "preferences.h" #include "ui/tool/event-utils.h" #include "ui/tool/selector.h" diff --git a/src/ui/tool/transform-handle-set.cpp b/src/ui/tool/transform-handle-set.cpp index 748b9d4cc..33015fe11 100644 --- a/src/ui/tool/transform-handle-set.cpp +++ b/src/ui/tool/transform-handle-set.cpp @@ -18,11 +18,7 @@ #include "sp-namedview.h" #include "display/sodipodi-ctrlrect.h" -#include "preferences.h" #include "pure-transform.h" -#include "snap.h" -#include "snap-candidate.h" -#include "sp-namedview.h" #include "ui/tool/commit-events.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/selectable-control-point.h" diff --git a/src/ui/tools-switch.cpp b/src/ui/tools-switch.cpp index ea0431b0a..d87bcc51d 100644 --- a/src/ui/tools-switch.cpp +++ b/src/ui/tools-switch.cpp @@ -13,16 +13,11 @@ #include // prevents deprecation warnings -#include -#include - #include "inkscape.h" #include "desktop.h" #include -#include - #include "ui/tools-switch.h" #include "box3d.h" @@ -52,7 +47,6 @@ #include "ui/tools/measure-tool.h" #include "ui/tools/mesh-tool.h" #include "ui/tools/node-tool.h" -#include "ui/tools/pen-tool.h" #include "ui/tools/pencil-tool.h" #include "ui/tools/rect-tool.h" #include "ui/tools/select-tool.h" diff --git a/src/ui/tools/arc-tool.cpp b/src/ui/tools/arc-tool.cpp index c6a9bb23a..6652f7ab5 100644 --- a/src/ui/tools/arc-tool.cpp +++ b/src/ui/tools/arc-tool.cpp @@ -17,7 +17,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -30,7 +30,6 @@ #include "sp-namedview.h" #include "selection.h" -#include "snap.h" #include "pixmaps/cursor-ellipse.xpm" #include "xml/repr.h" #include "xml/node-event-vector.h" diff --git a/src/ui/tools/box3d-tool.cpp b/src/ui/tools/box3d-tool.cpp index 27e755add..9b5b264bc 100644 --- a/src/ui/tools/box3d-tool.cpp +++ b/src/ui/tools/box3d-tool.cpp @@ -15,8 +15,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" - #include #include "macros.h" @@ -27,8 +25,6 @@ #include "selection.h" #include "selection-chemistry.h" -#include "snap.h" -#include "display/curve.h" #include "display/sp-canvas-item.h" #include "desktop.h" #include "message-context.h" @@ -36,17 +32,12 @@ #include "box3d.h" #include "ui/tools/box3d-tool.h" #include -#include "xml/repr.h" #include "xml/node-event-vector.h" -#include "preferences.h" #include "context-fns.h" #include "desktop-style.h" -#include "transf_mat_3x4.h" #include "perspective-line.h" -#include "persp3d.h" #include "box3d-side.h" #include "document-private.h" -#include "line-geometry.h" #include "ui/shape-editor.h" #include "verbs.h" diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp index 28195eb75..84c4adc89 100644 --- a/src/ui/tools/calligraphic-tool.cpp +++ b/src/ui/tools/calligraphic-tool.cpp @@ -23,8 +23,6 @@ #define noDYNA_DRAW_VERBOSE -#include "config.h" - #include #include #include @@ -35,12 +33,10 @@ #include "svg/svg.h" #include "display/canvas-bpath.h" #include "display/cairo-utils.h" -#include <2geom/math-utils.h> #include <2geom/pathvector.h> #include <2geom/bezier-utils.h> #include <2geom/circle.h> #include "display/curve.h" -#include #include "macros.h" #include "document.h" #include "document-undo.h" @@ -50,20 +46,15 @@ #include "desktop-style.h" #include "message-context.h" -#include "preferences.h" #include "pixmaps/cursor-calligraphy.xpm" -#include "xml/repr.h" #include "context-fns.h" -#include "sp-item.h" #include "inkscape.h" -#include "color.h" #include "splivarot.h" #include "sp-item-group.h" #include "sp-shape.h" #include "sp-path.h" #include "sp-text.h" #include "display/sp-canvas.h" -#include "display/canvas-bpath.h" #include "display/canvas-arena.h" #include "livarot/Shape.h" #include "verbs.h" diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index 74f2664fe..605b573d7 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -75,7 +75,6 @@ #include "ui/tools/connector-tool.h" #include "pixmaps/cursor-connector.xpm" #include "xml/node-event-vector.h" -#include "xml/repr.h" #include "svg/svg.h" #include "desktop.h" #include "desktop-style.h" @@ -86,19 +85,13 @@ #include "message-stack.h" #include "selection.h" #include "inkscape.h" -#include "preferences.h" #include "sp-path.h" #include "display/sp-canvas.h" #include "display/canvas-bpath.h" -#include "display/sodipodi-ctrl.h" #include #include #include "snap.h" -#include "knot.h" #include "sp-conn-end.h" -#include "sp-conn-end-pair.h" -#include "conn-avoid-ref.h" -#include "libavoid/vertices.h" #include "libavoid/router.h" #include "context-fns.h" #include "sp-namedview.h" diff --git a/src/ui/tools/dropper-tool.cpp b/src/ui/tools/dropper-tool.cpp index c838c27d5..4db720686 100644 --- a/src/ui/tools/dropper-tool.cpp +++ b/src/ui/tools/dropper-tool.cpp @@ -12,7 +12,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -27,7 +27,6 @@ #include "display/curve.h" #include "display/cairo-utils.h" #include "svg/svg-color.h" -#include "color.h" #include "color-rgba.h" #include "desktop-style.h" #include "preferences.h" @@ -36,7 +35,6 @@ #include "desktop.h" #include "selection.h" -#include "document.h" #include "document-undo.h" #include "pixmaps/cursor-dropper-f.xpm" @@ -45,7 +43,6 @@ #include "ui/tools/dropper-tool.h" #include "message-context.h" #include "verbs.h" -#include "ui/tools/tool-base.h" using Inkscape::DocumentUndo; diff --git a/src/ui/tools/dynamic-base.cpp b/src/ui/tools/dynamic-base.cpp index eb789d850..6627a470e 100644 --- a/src/ui/tools/dynamic-base.cpp +++ b/src/ui/tools/dynamic-base.cpp @@ -1,13 +1,7 @@ #include "ui/tools/dynamic-base.h" -#include - -#include "config.h" - #include "message-context.h" -#include "streq.h" -#include "preferences.h" #include "display/sp-canvas-item.h" #include "desktop.h" #include "display/curve.h" diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 6b32b5901..838522b34 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -24,8 +24,6 @@ #define noERASER_VERBOSE -#include "config.h" - #include #include #include @@ -38,7 +36,6 @@ #include "display/canvas-bpath.h" #include <2geom/bezier-utils.h> -#include #include "macros.h" #include "document.h" #include "selection.h" @@ -47,26 +44,18 @@ #include "desktop-style.h" #include "message-context.h" -#include "preferences.h" #include "pixmaps/cursor-eraser.xpm" -#include "xml/repr.h" #include "context-fns.h" -#include "sp-item.h" -#include "color.h" #include "rubberband.h" #include "splivarot.h" #include "sp-item-group.h" #include "sp-shape.h" #include "sp-path.h" #include "sp-text.h" -#include "display/canvas-bpath.h" #include "display/canvas-arena.h" -#include "livarot/Shape.h" #include "document-undo.h" #include "verbs.h" #include "style.h" -#include "style-enums.h" -#include <2geom/math-utils.h> #include <2geom/pathvector.h> #include "path-chemistry.h" #include "display/curve.h" diff --git a/src/ui/tools/flood-tool.cpp b/src/ui/tools/flood-tool.cpp index 748c82717..2f125e6ed 100644 --- a/src/ui/tools/flood-tool.cpp +++ b/src/ui/tools/flood-tool.cpp @@ -18,14 +18,13 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include "trace/potrace/inkscape-potrace.h" #include <2geom/pathvector.h> #include #include -#include #include #include "color.h" @@ -36,7 +35,6 @@ #include "display/cairo-utils.h" #include "display/drawing-context.h" #include "display/drawing-image.h" -#include "display/drawing-item.h" #include "display/drawing.h" #include "display/sp-canvas.h" #include "document.h" @@ -47,23 +45,15 @@ #include "macros.h" #include "message-context.h" #include "message-stack.h" -#include "preferences.h" #include "rubberband.h" #include "selection.h" #include "ui/shape-editor.h" -#include "sp-defs.h" -#include "sp-item.h" #include "splivarot.h" #include "sp-namedview.h" -#include "sp-object.h" -#include "sp-path.h" -#include "sp-rect.h" #include "sp-root.h" #include "svg/svg.h" #include "trace/imagemap.h" -#include "trace/trace.h" #include "xml/node-event-vector.h" -#include "xml/repr.h" #include "verbs.h" #include "pixmaps/cursor-paintbucket.xpm" diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 7697cd59c..eb29ed88d 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -17,43 +17,29 @@ #define DRAW_VERBOSE #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "live_effects/lpe-bendpath.h" #include "live_effects/lpe-patternalongpath.h" #include "live_effects/lpe-simplify.h" #include "display/canvas-bpath.h" -#include "xml/repr.h" #include "svg/svg.h" -#include #include "display/curve.h" -#include "desktop.h" #include "desktop-style.h" -#include "document.h" #include "ui/draw-anchor.h" #include "macros.h" #include "message-stack.h" #include "ui/tools/pen-tool.h" #include "ui/tools/lpe-tool.h" -#include "preferences.h" -#include "selection.h" #include "selection-chemistry.h" -#include "snap.h" -#include "sp-path.h" -#include "sp-use.h" #include "sp-item-group.h" -#include "sp-namedview.h" #include "live_effects/lpe-powerstroke.h" #include "style.h" #include "ui/control-manager.h" -#include "util/units.h" // clipboard support #include "ui/clipboard.h" -#include "ui/tools/freehand-base.h" - -#include using Inkscape::DocumentUndo; diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp index 9d8101cc4..e4814c3de 100644 --- a/src/ui/tools/gradient-tool.cpp +++ b/src/ui/tools/gradient-tool.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif @@ -31,17 +31,10 @@ #include "ui/tools/gradient-tool.h" #include "gradient-chemistry.h" #include -#include "preferences.h" #include "gradient-drag.h" -#include "gradient-chemistry.h" -#include "xml/repr.h" -#include "sp-item.h" #include "display/sp-ctrlline.h" -#include "sp-linear-gradient.h" -#include "sp-radial-gradient.h" #include "sp-stop.h" #include "svg/css-ostringstream.h" -#include "svg/svg-color.h" #include "snap.h" #include "sp-namedview.h" #include "rubberband.h" diff --git a/src/ui/tools/lpe-tool.cpp b/src/ui/tools/lpe-tool.cpp index 9bbc1ac20..ee85dd28c 100644 --- a/src/ui/tools/lpe-tool.cpp +++ b/src/ui/tools/lpe-tool.cpp @@ -15,19 +15,16 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include <2geom/sbasis-geometric.h> -#include #include -#include "macros.h" #include "pixmaps/cursor-crosshairs.xpm" #include #include "desktop.h" #include "message-context.h" -#include "preferences.h" #include "ui/shape-editor.h" #include "selection.h" diff --git a/src/ui/tools/measure-tool.cpp b/src/ui/tools/measure-tool.cpp index 63e2460ec..c941b9bee 100644 --- a/src/ui/tools/measure-tool.cpp +++ b/src/ui/tools/measure-tool.cpp @@ -11,11 +11,10 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include -#include #include #include "util/units.h" #include "display/curve.h" @@ -23,7 +22,6 @@ #include "display/sp-ctrlline.h" #include "display/sp-ctrlcurve.h" #include "display/sp-canvas.h" -#include "display/sp-canvas-item.h" #include "display/sp-canvas-util.h" #include "svg/svg.h" #include "svg/svg-color.h" @@ -31,34 +29,20 @@ #include "ui/tools/freehand-base.h" #include <2geom/line.h> #include <2geom/path-intersection.h> -#include <2geom/pathvector.h> -#include <2geom/crossing.h> -#include <2geom/angle.h> -#include <2geom/transforms.h> #include "ui/dialog/knot-properties.h" #include "sp-namedview.h" -#include "sp-shape.h" #include "sp-text.h" #include "sp-flowtext.h" #include "sp-defs.h" -#include "sp-item.h" #include "sp-root.h" -#include "macros.h" #include "svg/stringstream.h" #include "rubberband.h" #include "path-chemistry.h" #include "desktop.h" -#include "document.h" #include "document-undo.h" -#include "viewbox.h" -#include "snap.h" -#include "knot.h" #include "text-editing.h" #include "pixmaps/cursor-measure.xpm" -#include "preferences.h" #include "inkscape.h" -#include "enums.h" -#include "knot-enums.h" #include "desktop-style.h" #include "verbs.h" #include diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index 47927667c..32e70bc19 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif //#define DEBUG_MESH @@ -33,7 +33,6 @@ #include "macros.h" #include "message-context.h" #include "message-stack.h" -#include "preferences.h" #include "rubberband.h" #include "selection.h" #include "snap.h" diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 23aaf6bb1..bf18d4a2e 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -24,25 +24,19 @@ #include "message-context.h" #include "selection.h" #include "ui/shape-editor.h" // temporary! -#include "live_effects/effect.h" -#include "display/curve.h" #include "snap.h" #include "sp-namedview.h" #include "sp-clippath.h" #include "sp-item-group.h" #include "sp-mask.h" -#include "sp-object-group.h" -#include "sp-path.h" #include "sp-text.h" #include "ui/control-manager.h" #include "ui/tools/node-tool.h" #include "ui/tool/control-point-selection.h" #include "ui/tool/event-utils.h" -#include "ui/tool/manipulator.h" #include "ui/tool/multi-path-manipulator.h" #include "ui/tool/path-manipulator.h" #include "ui/tool/selector.h" -#include "ui/tool/shape-record.h" #include "pixmaps/cursor-node.xpm" #include "pixmaps/cursor-node-d.xpm" diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index 18af8e105..49f28ad2c 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -32,8 +32,6 @@ #include "ui/draw-anchor.h" #include "message-stack.h" #include "message-context.h" -#include "preferences.h" -#include "sp-path.h" #include "display/sp-canvas.h" #include "display/curve.h" #include "pixmaps/cursor-pen.xpm" @@ -46,7 +44,6 @@ #include "ui/tools-switch.h" #include "ui/control-manager.h" // we include the necessary files for BSpline & Spiro -#include "live_effects/effect.h" #include "live_effects/lpeobject.h" #include "live_effects/lpeobject-reference.h" #include "live_effects/parameter/path.h" @@ -54,25 +51,16 @@ #include "live_effects/lpe-spiro.h" -#include -#include <2geom/pathvector.h> -#include <2geom/affine.h> #include <2geom/curves.h> #include "helper/geom-nodetype.h" -#include "helper/geom-curves.h" // For handling un-continuous paths: -#include "message-stack.h" #include "inkscape.h" -#include "desktop.h" #include "live_effects/spiro.h" #define INKSCAPE_LPE_BSPLINE_C #include "live_effects/lpe-bspline.h" -#include <2geom/nearest-time.h> - -#include "live_effects/effect.h" using Inkscape::ControlManager; diff --git a/src/ui/tools/pencil-tool.cpp b/src/ui/tools/pencil-tool.cpp index b029ca613..7cc695040 100644 --- a/src/ui/tools/pencil-tool.cpp +++ b/src/ui/tools/pencil-tool.cpp @@ -27,7 +27,6 @@ #include "message-stack.h" #include "message-context.h" #include "sp-path.h" -#include "preferences.h" #include "snap.h" #include "pixmaps/cursor-pencil.xpm" #include <2geom/sbasis-to-bezier.h> @@ -36,13 +35,9 @@ #include #include "context-fns.h" #include "sp-namedview.h" -#include "xml/repr.h" -#include "document.h" #include "desktop-style.h" -#include "macros.h" #include "display/sp-canvas.h" #include "display/curve.h" -#include "livarot/Path.h" #include "ui/tool/event-utils.h" namespace Inkscape { diff --git a/src/ui/tools/rect-tool.cpp b/src/ui/tools/rect-tool.cpp index 844965c4d..00330ef57 100644 --- a/src/ui/tools/rect-tool.cpp +++ b/src/ui/tools/rect-tool.cpp @@ -14,8 +14,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" - #include #include #include @@ -29,16 +27,13 @@ #include "selection.h" #include "selection-chemistry.h" -#include "snap.h" #include "desktop.h" #include "desktop-style.h" #include "message-context.h" #include "pixmaps/cursor-rect.xpm" #include "ui/tools/rect-tool.h" #include -#include "xml/repr.h" #include "xml/node-event-vector.h" -#include "preferences.h" #include "context-fns.h" #include "ui/shape-editor.h" #include "verbs.h" diff --git a/src/ui/tools/select-tool.cpp b/src/ui/tools/select-tool.cpp index b5ec3d88e..5d802d4da 100644 --- a/src/ui/tools/select-tool.cpp +++ b/src/ui/tools/select-tool.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include @@ -40,14 +40,12 @@ #include "desktop.h" #include "sp-root.h" -#include "preferences.h" #include "ui/tools-switch.h" #include "message-stack.h" #include "selection-describer.h" #include "seltrans.h" #include "box3d.h" #include "display/sp-canvas.h" -#include "display/sp-canvas-item.h" #include "display/drawing-item.h" using Inkscape::DocumentUndo; diff --git a/src/ui/tools/spiral-tool.cpp b/src/ui/tools/spiral-tool.cpp index 833fef18d..0ba08853e 100644 --- a/src/ui/tools/spiral-tool.cpp +++ b/src/ui/tools/spiral-tool.cpp @@ -14,8 +14,6 @@ * Released under GNU GPL */ -#include "config.h" - #include #include #include @@ -28,16 +26,13 @@ #include "sp-namedview.h" #include "selection.h" -#include "snap.h" #include "desktop.h" #include "desktop-style.h" #include "message-context.h" #include "pixmaps/cursor-spiral.xpm" #include "ui/tools/spiral-tool.h" #include -#include "xml/repr.h" #include "xml/node-event-vector.h" -#include "preferences.h" #include "context-fns.h" #include "ui/shape-editor.h" #include "verbs.h" diff --git a/src/ui/tools/spray-tool.cpp b/src/ui/tools/spray-tool.cpp index 9adaf3879..3fafac2a7 100644 --- a/src/ui/tools/spray-tool.cpp +++ b/src/ui/tools/spray-tool.cpp @@ -19,15 +19,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" - #include #include "ui/dialog/dialog-manager.h" #include "svg/svg.h" -#include #include "macros.h" #include "document.h" #include "document-undo.h" @@ -37,10 +34,7 @@ #include "message-context.h" #include "pixmaps/cursor-spray.xpm" -#include -#include "xml/repr.h" #include "context-fns.h" -#include "sp-item.h" #include "inkscape.h" #include "splivarot.h" @@ -57,17 +51,12 @@ #include "svg/svg-color.h" #include "sp-text.h" -#include "sp-root.h" #include "sp-flowtext.h" #include "display/sp-canvas.h" -#include "display/canvas-bpath.h" #include "display/canvas-arena.h" #include "display/curve.h" #include "livarot/Shape.h" #include <2geom/circle.h> -#include <2geom/transforms.h> -#include "preferences.h" -#include "style.h" #include "box3d.h" #include "sp-item-transform.h" #include "filter-chemistry.h" @@ -76,9 +65,6 @@ #include "helper/action.h" #include "verbs.h" -#include - -#include #include #include diff --git a/src/ui/tools/star-tool.cpp b/src/ui/tools/star-tool.cpp index 9190ae57b..ddee08189 100644 --- a/src/ui/tools/star-tool.cpp +++ b/src/ui/tools/star-tool.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -31,14 +31,11 @@ #include "sp-namedview.h" #include "selection.h" -#include "snap.h" #include "desktop.h" #include "desktop-style.h" #include "message-context.h" #include "pixmaps/cursor-star.xpm" #include -#include "preferences.h" -#include "xml/repr.h" #include "xml/node-event-vector.h" #include "context-fns.h" #include "ui/shape-editor.h" diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp index 1888551cf..559187764 100644 --- a/src/ui/tools/text-tool.cpp +++ b/src/ui/tools/text-tool.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -23,7 +23,6 @@ #include #include #include -#include #include "context-fns.h" @@ -36,7 +35,6 @@ #include "message-stack.h" #include "pixmaps/cursor-text-insert.xpm" #include "pixmaps/cursor-text.xpm" -#include "preferences.h" #include "rubberband.h" #include "selection-chemistry.h" #include "selection.h" @@ -50,8 +48,6 @@ #include "ui/control-manager.h" #include "verbs.h" #include "xml/node-event-vector.h" -#include "xml/repr.h" -#include using Inkscape::ControlManager; using Inkscape::DocumentUndo; diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 72ba499de..735f5bd42 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "widgets/desktop-widget.h" @@ -24,12 +24,8 @@ #include "file.h" #include "ui/tools/tool-base.h" -#include #include -#include #include -#include -#include #include "display/sp-canvas.h" #include "xml/node-event-vector.h" @@ -43,18 +39,14 @@ #include "ui/interface.h" #include "macros.h" #include "ui/tools-switch.h" -#include "preferences.h" #include "message-context.h" #include "gradient-drag.h" -#include "attributes.h" #include "rubberband.h" #include "selcue.h" #include "ui/tools/lpe-tool.h" #include "ui/tool/control-point.h" #include "ui/shape-editor.h" #include "sp-guide.h" -#include "color.h" -#include "knot.h" #include "knot-ptr.h" // globals for temporary switching to selector by space diff --git a/src/ui/tools/tweak-tool.cpp b/src/ui/tools/tweak-tool.cpp index 39a7a3f0b..fbf1b2a0b 100644 --- a/src/ui/tools/tweak-tool.cpp +++ b/src/ui/tools/tweak-tool.cpp @@ -11,8 +11,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "config.h" - #include #include #include @@ -21,7 +19,6 @@ #include "svg/svg.h" -#include #include "macros.h" #include "document.h" #include "document-undo.h" @@ -48,19 +45,13 @@ #include "pixmaps/cursor-push.xpm" #include "pixmaps/cursor-roughen.xpm" #include "pixmaps/cursor-color.xpm" -#include -#include "xml/repr.h" #include "context-fns.h" -#include "sp-item.h" #include "inkscape.h" -#include "color.h" -#include "svg/svg-color.h" #include "splivarot.h" #include "sp-item-group.h" #include "sp-shape.h" #include "sp-path.h" #include "path-chemistry.h" -#include "sp-gradient.h" #include "sp-stop.h" #include "sp-gradient-reference.h" #include "sp-linear-gradient.h" @@ -69,13 +60,10 @@ #include "sp-text.h" #include "sp-flowtext.h" #include "display/sp-canvas.h" -#include "display/canvas-bpath.h" #include "display/canvas-arena.h" #include "display/curve.h" #include "livarot/Shape.h" -#include <2geom/transforms.h> #include <2geom/circle.h> -#include "preferences.h" #include "style.h" #include "box3d.h" #include "sp-item-transform.h" diff --git a/src/ui/tools/zoom-tool.cpp b/src/ui/tools/zoom-tool.cpp index 13e097c18..ca42d2d6f 100644 --- a/src/ui/tools/zoom-tool.cpp +++ b/src/ui/tools/zoom-tool.cpp @@ -21,7 +21,6 @@ #include "desktop.h" #include "pixmaps/cursor-zoom.xpm" #include "pixmaps/cursor-zoom-out.xpm" -#include "preferences.h" #include "selection-chemistry.h" #include "ui/tools/zoom-tool.h" diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index 036659661..cbce86cdb 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -10,18 +10,15 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "widgets/desktop-widget.h" -#include #include "uxmanager.h" #include "desktop.h" #include "util/ege-tags.h" #include "widgets/toolbox.h" -#include "preferences.h" -#include "gdkmm/screen.h" #ifdef GDK_WINDOWING_X11 #include diff --git a/src/ui/widget/addtoicon.cpp b/src/ui/widget/addtoicon.cpp index 10294125d..465423fc2 100644 --- a/src/ui/widget/addtoicon.cpp +++ b/src/ui/widget/addtoicon.cpp @@ -9,7 +9,7 @@ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "ui/widget/addtoicon.h" @@ -19,9 +19,7 @@ #include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" -#include "preferences.h" #include "layertypeicon.h" -#include "addtoicon.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/anchor-selector.cpp b/src/ui/widget/anchor-selector.cpp index df00b786a..acf8aff79 100644 --- a/src/ui/widget/anchor-selector.cpp +++ b/src/ui/widget/anchor-selector.cpp @@ -8,7 +8,6 @@ */ #include "ui/widget/anchor-selector.h" -#include #include "widgets/icon.h" #include "ui/icon-names.h" diff --git a/src/ui/widget/clipmaskicon.cpp b/src/ui/widget/clipmaskicon.cpp index 421f1df1e..8715fdede 100644 --- a/src/ui/widget/clipmaskicon.cpp +++ b/src/ui/widget/clipmaskicon.cpp @@ -8,7 +8,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "ui/widget/clipmaskicon.h" diff --git a/src/ui/widget/color-icc-selector.cpp b/src/ui/widget/color-icc-selector.cpp index e4f58fe8a..52c6ed2e3 100644 --- a/src/ui/widget/color-icc-selector.cpp +++ b/src/ui/widget/color-icc-selector.cpp @@ -2,14 +2,11 @@ #include "config.h" #endif -#include #include #include #include -#include #include -#include #include "ui/dialog-events.h" #include "ui/widget/color-icc-selector.h" diff --git a/src/ui/widget/color-notebook.cpp b/src/ui/widget/color-notebook.cpp index 6d7ada734..6634d8dad 100644 --- a/src/ui/widget/color-notebook.cpp +++ b/src/ui/widget/color-notebook.cpp @@ -20,10 +20,6 @@ #endif #include "widgets/icon.h" -#include -#include -#include -#include #include #include #include diff --git a/src/ui/widget/color-scales.cpp b/src/ui/widget/color-scales.cpp index 48a2693bc..832bc3a62 100644 --- a/src/ui/widget/color-scales.cpp +++ b/src/ui/widget/color-scales.cpp @@ -3,15 +3,13 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif -#include #include #include #include -#include "svg/svg-icc-color.h" #include "ui/dialog-events.h" #include "ui/widget/color-scales.h" #include "ui/widget/color-slider.h" diff --git a/src/ui/widget/color-slider.cpp b/src/ui/widget/color-slider.cpp index 0c9586a67..bf2156628 100644 --- a/src/ui/widget/color-slider.cpp +++ b/src/ui/widget/color-slider.cpp @@ -12,11 +12,10 @@ */ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include -#include #include #include #if WITH_GTKMM_3_0 diff --git a/src/ui/widget/color-wheel-selector.cpp b/src/ui/widget/color-wheel-selector.cpp index 22c616325..decb02b4f 100644 --- a/src/ui/widget/color-wheel-selector.cpp +++ b/src/ui/widget/color-wheel-selector.cpp @@ -1,18 +1,14 @@ #ifdef HAVE_CONFIG_H -#include "config.h" +#include #endif #include "color-wheel-selector.h" -#include -#include #include #include #include #include -#include "svg/svg-icc-color.h" #include "ui/dialog-events.h" -#include "ui/selected-color.h" #include "ui/widget/color-scales.h" #include "ui/widget/color-slider.h" #include "ui/widget/gimpcolorwheel.h" diff --git a/src/ui/widget/dock-item.cpp b/src/ui/widget/dock-item.cpp index 8d960ddc3..1b3490ffe 100644 --- a/src/ui/widget/dock-item.cpp +++ b/src/ui/widget/dock-item.cpp @@ -9,10 +9,8 @@ #include "ui/widget/dock.h" -#include "dock-item.h" #include "desktop.h" #include "inkscape.h" -#include "preferences.h" #include "ui/icon-names.h" #include "widgets/icon.h" diff --git a/src/ui/widget/entity-entry.cpp b/src/ui/widget/entity-entry.cpp index a8de2f384..381f0a2e1 100644 --- a/src/ui/widget/entity-entry.cpp +++ b/src/ui/widget/entity-entry.cpp @@ -14,14 +14,13 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include #include #include "inkscape.h" -#include "sp-object.h" #include "rdf.h" #include "ui/widget/registry.h" #include "sp-root.h" diff --git a/src/ui/widget/entry.cpp b/src/ui/widget/entry.cpp index 64d28119a..b1dd9ae8e 100644 --- a/src/ui/widget/entry.cpp +++ b/src/ui/widget/entry.cpp @@ -8,7 +8,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "entry.h" diff --git a/src/ui/widget/filter-effect-chooser.cpp b/src/ui/widget/filter-effect-chooser.cpp index 242a99073..ae2f3e7c2 100644 --- a/src/ui/widget/filter-effect-chooser.cpp +++ b/src/ui/widget/filter-effect-chooser.cpp @@ -10,12 +10,8 @@ */ #include "filter-effect-chooser.h" -#include - -#include "desktop.h" #include "document.h" -#include "inkscape.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/font-variants.cpp b/src/ui/widget/font-variants.cpp index 62598dead..aca85f246 100644 --- a/src/ui/widget/font-variants.cpp +++ b/src/ui/widget/font-variants.cpp @@ -8,26 +8,18 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include #include #include -#include #include "font-variants.h" // For updating from selection #include "desktop.h" -#include "selection.h" -#include "style.h" #include "sp-text.h" -#include "sp-tspan.h" -#include "sp-tref.h" -#include "sp-textpath.h" -#include "sp-item-group.h" -#include "xml/repr.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/frame.cpp b/src/ui/widget/frame.cpp index eaa4336bb..65d10dcc4 100644 --- a/src/ui/widget/frame.cpp +++ b/src/ui/widget/frame.cpp @@ -8,7 +8,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "frame.h" diff --git a/src/ui/widget/highlight-picker.cpp b/src/ui/widget/highlight-picker.cpp index 09999b52d..c1068c9b2 100644 --- a/src/ui/widget/highlight-picker.cpp +++ b/src/ui/widget/highlight-picker.cpp @@ -14,9 +14,6 @@ #include "highlight-picker.h" #include "widgets/icon.h" -#include "widgets/toolbox.h" -#include "ui/icon-names.h" -#include namespace Inkscape { namespace UI { diff --git a/src/ui/widget/imageicon.cpp b/src/ui/widget/imageicon.cpp index df261b69a..8e7df7a68 100644 --- a/src/ui/widget/imageicon.cpp +++ b/src/ui/widget/imageicon.cpp @@ -11,17 +11,12 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ - - - #include "imageicon.h" -#include #include "svg-view-widget.h" #include "document.h" #include "inkscape.h" -#include #include - +#include namespace Inkscape { diff --git a/src/ui/widget/layer-selector.cpp b/src/ui/widget/layer-selector.cpp index 1a9ce617f..7ee34f3b3 100644 --- a/src/ui/widget/layer-selector.cpp +++ b/src/ui/widget/layer-selector.cpp @@ -11,7 +11,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -25,9 +25,7 @@ #include "document.h" #include "document-undo.h" #include "layer-manager.h" -#include "sp-item.h" #include "ui/icon-names.h" -#include "ui/widget/layer-selector.h" #include "util/filter-list.h" #include "util/reverse-list.h" #include "verbs.h" diff --git a/src/ui/widget/layertypeicon.cpp b/src/ui/widget/layertypeicon.cpp index 672c607e5..e281d982a 100644 --- a/src/ui/widget/layertypeicon.cpp +++ b/src/ui/widget/layertypeicon.cpp @@ -8,7 +8,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "ui/widget/layertypeicon.h" @@ -18,7 +18,6 @@ #include "widgets/icon.h" #include "widgets/toolbox.h" #include "ui/icon-names.h" -#include "layertypeicon.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/licensor.cpp b/src/ui/widget/licensor.cpp index d21e848f2..09f3fac8d 100644 --- a/src/ui/widget/licensor.cpp +++ b/src/ui/widget/licensor.cpp @@ -13,12 +13,13 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "licensor.h" #include +#include #include "ui/widget/entity-entry.h" #include "ui/widget/registry.h" @@ -27,7 +28,6 @@ #include "document-undo.h" #include "document-private.h" #include "verbs.h" -#include namespace Inkscape { diff --git a/src/ui/widget/object-composite-settings.cpp b/src/ui/widget/object-composite-settings.cpp index 8acf083d0..c8ac20c54 100644 --- a/src/ui/widget/object-composite-settings.cpp +++ b/src/ui/widget/object-composite-settings.cpp @@ -14,8 +14,6 @@ #include "ui/widget/object-composite-settings.h" -#include - #include "desktop.h" #include "desktop-style.h" @@ -23,17 +21,12 @@ #include "document-undo.h" #include "filter-chemistry.h" #include "inkscape.h" -#include "selection.h" #include "style.h" -#include "sp-item.h" #include "svg/css-ostringstream.h" #include "verbs.h" -#include "xml/repr.h" #include "widgets/icon.h" -#include "ui/icon-names.h" #include "display/sp-canvas.h" #include "ui/widget/style-subject.h" -#include "ui/widget/gimpspinscale.h" namespace Inkscape { namespace UI { diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp index 19ab1a280..4a1fe9ac6 100644 --- a/src/ui/widget/page-sizer.cpp +++ b/src/ui/widget/page-sizer.cpp @@ -18,35 +18,18 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "page-sizer.h" -#include -#include -#include -#include -#include - #include -#include <2geom/transforms.h> - -#include "document.h" -#include "desktop.h" #include "helper/action.h" -#include "helper/action-context.h" -#include "util/units.h" -#include "inkscape.h" -#include "sp-namedview.h" #include "sp-root.h" #include "ui/widget/button.h" -#include "ui/widget/scalar-unit.h" #include "verbs.h" -#include "xml/node.h" -#include "xml/repr.h" using std::pair; using Inkscape::Util::unit_table; diff --git a/src/ui/widget/panel.cpp b/src/ui/widget/panel.cpp index ab13577d7..98d9d41f3 100644 --- a/src/ui/widget/panel.cpp +++ b/src/ui/widget/panel.cpp @@ -12,20 +12,18 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include // for Gtk::RESPONSE_* #include #include -#include +#include #include #include #include -#include - #include "panel.h" #include "icon-size.h" #include "preferences.h" diff --git a/src/ui/widget/point.cpp b/src/ui/widget/point.cpp index 6aa6196bb..2c2eb5e8a 100644 --- a/src/ui/widget/point.cpp +++ b/src/ui/widget/point.cpp @@ -12,14 +12,11 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "ui/widget/point.h" -#include "ui/widget/labelled.h" -#include "ui/widget/scalar.h" -#include namespace Inkscape { namespace UI { diff --git a/src/ui/widget/preferences-widget.cpp b/src/ui/widget/preferences-widget.cpp index d56506d62..e0eba3934 100644 --- a/src/ui/widget/preferences-widget.cpp +++ b/src/ui/widget/preferences-widget.cpp @@ -11,7 +11,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -26,20 +26,16 @@ #include "verbs.h" #include "selcue.h" #include "io/sys.h" -#include #include "desktop.h" -#include "enums.h" #include "inkscape.h" #include "message-stack.h" #include "style.h" -#include "selection.h" #include "selection-chemistry.h" #include "ui/dialog/filedialog.h" -#include "xml/repr.h" -#include #include +#include #ifdef WIN32 #include diff --git a/src/ui/widget/random.cpp b/src/ui/widget/random.cpp index 0a646b6fb..b6ea16b89 100644 --- a/src/ui/widget/random.cpp +++ b/src/ui/widget/random.cpp @@ -10,7 +10,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif diff --git a/src/ui/widget/registered-widget.cpp b/src/ui/widget/registered-widget.cpp index 572845668..7dc5abc75 100644 --- a/src/ui/widget/registered-widget.cpp +++ b/src/ui/widget/registered-widget.cpp @@ -14,33 +14,21 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "registered-widget.h" -#include -#include "ui/widget/color-picker.h" -#include "ui/widget/registry.h" -#include "ui/widget/scalar-unit.h" -#include "ui/widget/point.h" -#include "ui/widget/random.h" #include "widgets/spinbutton-events.h" -#include "xml/repr.h" #include "svg/svg-color.h" #include "svg/stringstream.h" #include "verbs.h" - -// for interruptability bug: -#include "display/sp-canvas.h" - -#include "desktop.h" - - #include "sp-root.h" +#include + namespace Inkscape { namespace UI { namespace Widget { diff --git a/src/ui/widget/rendering-options.cpp b/src/ui/widget/rendering-options.cpp index 837387f7b..220731b7e 100644 --- a/src/ui/widget/rendering-options.cpp +++ b/src/ui/widget/rendering-options.cpp @@ -9,7 +9,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include diff --git a/src/ui/widget/rotateable.cpp b/src/ui/widget/rotateable.cpp index 5e938dee6..e0de22335 100644 --- a/src/ui/widget/rotateable.cpp +++ b/src/ui/widget/rotateable.cpp @@ -8,12 +8,11 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include -#include #include <2geom/point.h> #include "ui/tools/tool-base.h" #include "rotateable.h" diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index f7fd63f51..7bbfa08db 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -10,11 +10,10 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "selected-style.h" -#include #include "widgets/spw-utilities.h" #include "ui/widget/color-preview.h" @@ -31,19 +30,14 @@ #include "ui/dialog/dialog-manager.h" #include "ui/dialog/fill-and-stroke.h" #include "ui/dialog/panel-dialog.h" -#include "xml/repr.h" -#include "document.h" #include "document-undo.h" #include "widgets/widget-sizes.h" #include "widgets/spinbutton-events.h" #include "widgets/gradient-image.h" -#include "sp-gradient.h" #include "svg/svg-color.h" #include "svg/css-ostringstream.h" #include "ui/tools/tool-base.h" #include "message-context.h" -#include "verbs.h" -#include "color.h" #include #include "pixmaps/cursor-adj-h.xpm" #include "pixmaps/cursor-adj-s.xpm" @@ -51,7 +45,8 @@ #include "pixmaps/cursor-adj-a.xpm" #include "sp-cursor.h" #include "gradient-chemistry.h" -#include "util/units.h" + +#include using Inkscape::Util::unit_table; diff --git a/src/ui/widget/spin-scale.cpp b/src/ui/widget/spin-scale.cpp index bb08d67df..d6b34a5b4 100644 --- a/src/ui/widget/spin-scale.cpp +++ b/src/ui/widget/spin-scale.cpp @@ -8,7 +8,6 @@ #include "spin-scale.h" -#include #include #include diff --git a/src/ui/widget/spinbutton.cpp b/src/ui/widget/spinbutton.cpp index d7669d4e5..d1776e630 100644 --- a/src/ui/widget/spinbutton.cpp +++ b/src/ui/widget/spinbutton.cpp @@ -8,7 +8,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include "spinbutton.h" diff --git a/src/ui/widget/style-subject.cpp b/src/ui/widget/style-subject.cpp index da3bbcd20..811ed2221 100644 --- a/src/ui/widget/style-subject.cpp +++ b/src/ui/widget/style-subject.cpp @@ -8,7 +8,6 @@ #include "ui/widget/style-subject.h" #include "desktop.h" -#include "sp-object.h" #include "xml/sp-css-attr.h" #include "desktop-style.h" diff --git a/src/ui/widget/style-swatch.cpp b/src/ui/widget/style-swatch.cpp index 188be705d..2952a3f97 100644 --- a/src/ui/widget/style-swatch.cpp +++ b/src/ui/widget/style-swatch.cpp @@ -13,9 +13,6 @@ #include "style-swatch.h" -#include -#include - #include "widgets/spw-utilities.h" #include "ui/widget/color-preview.h" @@ -23,13 +20,10 @@ #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" #include "sp-pattern.h" -#include "xml/repr.h" #include "xml/sp-css-attr.h" #include "widgets/widget-sizes.h" #include "util/units.h" #include "helper/action.h" -#include "helper/action-context.h" -#include "preferences.h" #include "inkscape.h" #include "verbs.h" #include diff --git a/src/ui/widget/tolerance-slider.cpp b/src/ui/widget/tolerance-slider.cpp index ced811c57..e904666cc 100644 --- a/src/ui/widget/tolerance-slider.cpp +++ b/src/ui/widget/tolerance-slider.cpp @@ -9,7 +9,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include diff --git a/src/uri-references.cpp b/src/uri-references.cpp index db46a156f..d626d0e41 100644 --- a/src/uri-references.cpp +++ b/src/uri-references.cpp @@ -12,7 +12,6 @@ #include #include -#include #include "document.h" #include "sp-object.h" @@ -21,7 +20,6 @@ #include "extract-uri.h" #include "sp-tag-use.h" #include -#include namespace Inkscape { diff --git a/src/uri.cpp b/src/uri.cpp index 49bdab63c..f2578b989 100644 --- a/src/uri.cpp +++ b/src/uri.cpp @@ -10,7 +10,6 @@ #include #include "uri.h" -#include #include #include diff --git a/src/vanishing-point.cpp b/src/vanishing-point.cpp index 32ccbad93..987211edc 100644 --- a/src/vanishing-point.cpp +++ b/src/vanishing-point.cpp @@ -21,12 +21,10 @@ #include "display/sp-canvas-item.h" #include "display/sp-ctrlline.h" #include "ui/tools/tool-base.h" -#include "xml/repr.h" #include "perspective-line.h" #include "ui/shape-editor.h" #include "snap.h" #include "sp-namedview.h" -#include "ui/control-manager.h" #include "document-undo.h" #include "verbs.h" diff --git a/src/verbs.cpp b/src/verbs.cpp index 299cfe8e7..b6293b3a2 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -26,7 +26,7 @@ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -45,11 +45,9 @@ #include "document.h" #include "ui/tools/freehand-base.h" #include "extension/effect.h" -#include "ui/tools/tool-base.h" #include "file.h" #include "gradient-drag.h" #include "helper/action.h" -#include "helper/action-context.h" #include "help.h" #include "inkscape.h" #include "ui/interface.h" @@ -57,7 +55,6 @@ #include "layer-manager.h" #include "message-stack.h" #include "path-chemistry.h" -#include "preferences.h" #include "ui/tools/select-tool.h" #include "selection-chemistry.h" #include "seltrans.h" @@ -87,9 +84,6 @@ #include "ui/dialog/spellcheck.h" #include "ui/icon-names.h" #include "ui/tools/node-tool.h" -#include "selection.h" - -#include using Inkscape::DocumentUndo; using Inkscape::UI::Dialog::ActionAlign; diff --git a/src/viewbox.cpp b/src/viewbox.cpp index e1da23efa..1b50fe71c 100644 --- a/src/viewbox.cpp +++ b/src/viewbox.cpp @@ -15,7 +15,6 @@ #include <2geom/transforms.h> #include "viewbox.h" -#include "attributes.h" #include "enums.h" #include "sp-item.h" diff --git a/src/widgets/arc-toolbar.cpp b/src/widgets/arc-toolbar.cpp index 7b872e8b1..35c8c0308 100644 --- a/src/widgets/arc-toolbar.cpp +++ b/src/widgets/arc-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -39,7 +39,6 @@ #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" #include "mod360.h" -#include "preferences.h" #include "selection.h" #include "sp-ellipse.h" #include "toolbox.h" @@ -49,7 +48,6 @@ #include "verbs.h" #include "widgets/spinbutton-events.h" #include "xml/node-event-vector.h" -#include "xml/repr.h" using Inkscape::UI::UXManager; using Inkscape::DocumentUndo; diff --git a/src/widgets/box3d-toolbar.cpp b/src/widgets/box3d-toolbar.cpp index 31b897ced..b8c67ee76 100644 --- a/src/widgets/box3d-toolbar.cpp +++ b/src/widgets/box3d-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -40,7 +40,6 @@ #include "widgets/ink-action.h" #include "inkscape.h" #include "persp3d.h" -#include "selection.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tools/box3d-tool.h" diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp index 6ea8c1360..bc59d1a39 100644 --- a/src/widgets/button.cpp +++ b/src/widgets/button.cpp @@ -20,8 +20,6 @@ #include "shortcuts.h" #include "helper/action.h" -#include - static void sp_button_dispose(GObject *object); #if GTK_CHECK_VERSION(3, 0, 0) diff --git a/src/widgets/calligraphy-toolbar.cpp b/src/widgets/calligraphy-toolbar.cpp index 4ae6427ad..ba51499aa 100644 --- a/src/widgets/calligraphy-toolbar.cpp +++ b/src/widgets/calligraphy-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "ui/dialog/calligraphic-profile-rename.h" @@ -37,7 +37,6 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" -#include "preferences.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/uxmanager.h" diff --git a/src/widgets/connector-toolbar.cpp b/src/widgets/connector-toolbar.cpp index 733fb34e8..f80f49db7 100644 --- a/src/widgets/connector-toolbar.cpp +++ b/src/widgets/connector-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -40,10 +40,7 @@ #include "graphlayout.h" #include "widgets/ink-action.h" #include "inkscape.h" -#include "preferences.h" -#include "selection.h" #include "sp-namedview.h" -#include "sp-path.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tools/connector-tool.h" @@ -51,7 +48,6 @@ #include "verbs.h" #include "widgets/spinbutton-events.h" #include "xml/node-event-vector.h" -#include "xml/repr.h" using Inkscape::UI::UXManager; using Inkscape::DocumentUndo; diff --git a/src/widgets/dash-selector.cpp b/src/widgets/dash-selector.cpp index 9d591d33d..e1cb563a7 100644 --- a/src/widgets/dash-selector.cpp +++ b/src/widgets/dash-selector.cpp @@ -13,15 +13,13 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "dash-selector.h" #include -#include #include -#include #include <2geom/coord.h> #include "style.h" diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 164a06910..ec155ce4c 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -36,21 +36,15 @@ #include "desktop-widget.h" #include "display/sp-canvas.h" #include "display/canvas-arena.h" -#include "document.h" #include "ege-color-prof-tracker.h" #include "widgets/ege-select-one-action.h" #include #include "file.h" #include "helper/action.h" -#include "helper/action-context.h" #include "util/units.h" #include "ui/widget/unit-tracker.h" -#include "inkscape.h" #include "ui/interface.h" -#include "macros.h" -#include "preferences.h" #include "sp-image.h" -#include "sp-item.h" #include "sp-namedview.h" #include "ui/dialog/swatches.h" #include "ui/icon-names.h" @@ -76,8 +70,6 @@ #include #include -#include - #if defined (SOLARIS) && (SOLARIS == 8) #include "round.h" using Inkscape::round; diff --git a/src/widgets/dropper-toolbar.cpp b/src/widgets/dropper-toolbar.cpp index 45ed9ead4..f60955da5 100644 --- a/src/widgets/dropper-toolbar.cpp +++ b/src/widgets/dropper-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include diff --git a/src/widgets/eraser-toolbar.cpp b/src/widgets/eraser-toolbar.cpp index bb553f4e6..b30d542a6 100644 --- a/src/widgets/eraser-toolbar.cpp +++ b/src/widgets/eraser-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -38,7 +38,6 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" -#include "preferences.h" #include "toolbox.h" #include "ui/icon-names.h" diff --git a/src/widgets/fill-style.cpp b/src/widgets/fill-style.cpp index a96776894..aff88aca5 100644 --- a/src/widgets/fill-style.cpp +++ b/src/widgets/fill-style.cpp @@ -19,7 +19,7 @@ #define noSP_FS_VERBOSE #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -27,8 +27,6 @@ #include "verbs.h" -#include - #include "desktop.h" #include "selection.h" @@ -38,13 +36,11 @@ #include "document-undo.h" #include "gradient-chemistry.h" #include "inkscape.h" -#include "selection.h" #include "sp-linear-gradient.h" #include "sp-pattern.h" #include "sp-radial-gradient.h" #include "style.h" #include "widgets/paint-selector.h" -#include "xml/repr.h" #include "fill-style.h" #include "fill-n-stroke-factory.h" diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp index aefcb2e81..2ed6705d7 100644 --- a/src/widgets/font-selector.cpp +++ b/src/widgets/font-selector.cpp @@ -16,21 +16,16 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include -#include <2geom/transforms.h> - -#include - #include #include "desktop.h" #include "widgets/font-selector.h" -#include "preferences.h" /* SPFontSelector */ diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 604ecd108..425eb9cbc 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -14,7 +14,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -28,14 +28,11 @@ #include "inkscape.h" #include "verbs.h" #include "helper/action.h" -#include "helper/action-context.h" #include "preferences.h" #include "widgets/icon.h" #include -#include -#include "gradient-selector.h" #include "paint-selector.h" #include "style.h" #include "id-clash.h" diff --git a/src/widgets/gradient-toolbar.cpp b/src/widgets/gradient-toolbar.cpp index a44e9962e..7e9223770 100644 --- a/src/widgets/gradient-toolbar.cpp +++ b/src/widgets/gradient-toolbar.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "ui/widget/color-preview.h" @@ -29,7 +29,6 @@ #include "gradient-toolbar.h" #include "widgets/ink-action.h" #include "macros.h" -#include "preferences.h" #include "selection.h" #include "sp-defs.h" #include "sp-linear-gradient.h" diff --git a/src/widgets/gradient-vector.cpp b/src/widgets/gradient-vector.cpp index 97e65141f..6e7c8cdf8 100644 --- a/src/widgets/gradient-vector.cpp +++ b/src/widgets/gradient-vector.cpp @@ -20,14 +20,13 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include "gradient-vector.h" #include "ui/widget/color-preview.h" #include "verbs.h" -#include #include "macros.h" #include #include @@ -50,8 +49,6 @@ #include "desktop.h" #include "layer-manager.h" -#include -#include #include "document-undo.h" #include "ui/dialog-events.h" @@ -476,7 +473,6 @@ void SPGradientVectorSelector::setSwatched() #include "widgets/widget-sizes.h" #include "xml/node-event-vector.h" #include "svg/svg-color.h" -#include "ui/widget/color-notebook.h" #define PAD 4 diff --git a/src/widgets/icon.cpp b/src/widgets/icon.cpp index f2031fe51..515deb565 100644 --- a/src/widgets/icon.cpp +++ b/src/widgets/icon.cpp @@ -16,22 +16,19 @@ # include "config.h" #endif +#include +#include #include #include -#include #include #include #include -#include -#include -#include #include <2geom/transforms.h> #include "path-prefix.h" #include "preferences.h" #include "inkscape.h" #include "document.h" -#include "sp-item.h" #include "display/cairo-utils.h" #include "display/drawing-context.h" #include "display/drawing-item.h" diff --git a/src/widgets/ink-action.cpp b/src/widgets/ink-action.cpp index ace99d9aa..c0797b236 100644 --- a/src/widgets/ink-action.cpp +++ b/src/widgets/ink-action.cpp @@ -1,14 +1,9 @@ #include "widgets/icon.h" -#include "icon-size.h" -#include - #include "widgets/ink-action.h" #include "widgets/button.h" -#include - #if GTK_CHECK_VERSION(3,0,0) // Fork of gtk-imagemenuitem to continue support #include "widgets/image-menu-item.h" diff --git a/src/widgets/lpe-toolbar.cpp b/src/widgets/lpe-toolbar.cpp index 387bf6dee..d44983a15 100644 --- a/src/widgets/lpe-toolbar.cpp +++ b/src/widgets/lpe-toolbar.cpp @@ -25,27 +25,19 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "live_effects/lpe-line_segment.h" #include "lpe-toolbar.h" -#include "desktop.h" -#include "document-undo.h" #include "widgets/ege-select-one-action.h" #include "helper/action-context.h" #include "helper/action.h" #include "widgets/ink-action.h" -#include "live_effects/effect.h" -#include "preferences.h" -#include "selection.h" -#include "sp-namedview.h" #include "ui/tools-switch.h" #include "ui/tools/lpe-tool.h" #include "ui/widget/unit-tracker.h" -#include "util/units.h" -#include "verbs.h" using Inkscape::UI::Widget::UnitTracker; using Inkscape::Util::Unit; diff --git a/src/widgets/measure-toolbar.cpp b/src/widgets/measure-toolbar.cpp index 990989f4a..53790cfac 100644 --- a/src/widgets/measure-toolbar.cpp +++ b/src/widgets/measure-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -38,7 +38,6 @@ #include "document-undo.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-output-action.h" -#include "preferences.h" #include "toolbox.h" #include "widgets/ink-action.h" #include "ui/icon-names.h" diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp index 3643ce00c..1e5c12d41 100644 --- a/src/widgets/mesh-toolbar.cpp +++ b/src/widgets/mesh-toolbar.cpp @@ -15,7 +15,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif // REVIEW THESE AT END OF REWRITE @@ -25,17 +25,13 @@ #include "verbs.h" -#include "macros.h" #include "widgets/button.h" -#include "widgets/widget-sizes.h" -#include "widgets/spw-utilities.h" #include "widgets/spinbutton-events.h" #include "widgets/gradient-vector.h" #include "widgets/gradient-image.h" #include "style.h" #include "inkscape.h" -#include "preferences.h" #include "document-private.h" #include "document-undo.h" #include "desktop.h" @@ -47,23 +43,16 @@ #include "gradient-drag.h" #include "sp-mesh.h" #include "gradient-chemistry.h" -#include "gradient-selector.h" -#include "selection.h" #include "ui/icon-names.h" #include "widgets/ege-adjustment-action.h" -#include "widgets/ege-output-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" -#include "widgets/ink-comboboxentry-action.h" #include "sp-stop.h" #include "svg/css-ostringstream.h" -#include "svg/svg-color.h" #include "desktop-style.h" -#include "toolbox.h" - using Inkscape::DocumentUndo; using Inkscape::UI::ToolboxFactory; using Inkscape::UI::PrefPusher; diff --git a/src/widgets/node-toolbar.cpp b/src/widgets/node-toolbar.cpp index 113061519..ed3e33acc 100644 --- a/src/widgets/node-toolbar.cpp +++ b/src/widgets/node-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "ui/tool/multi-path-manipulator.h" @@ -37,16 +37,13 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ink-action.h" #include "inkscape.h" -#include "preferences.h" #include "selection-chemistry.h" -#include "selection.h" #include "sp-namedview.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tool/control-point-selection.h" #include "ui/tools/node-tool.h" #include "ui/widget/unit-tracker.h" -#include "util/units.h" #include "verbs.h" #include "widgets/widget-sizes.h" diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 58a178aec..a421ea7d3 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -41,7 +41,6 @@ #include #include #include -#include "svg/svg-color.h" #include "svg/css-ostringstream.h" #include "path-prefix.h" #include "io/sys.h" @@ -55,8 +54,6 @@ #include "svg/svg-icc-color.h" #endif // SP_PS_VERBOSE -#include - using Inkscape::Widgets::SwatchSelector; using Inkscape::UI::SelectedColor; diff --git a/src/widgets/paintbucket-toolbar.cpp b/src/widgets/paintbucket-toolbar.cpp index b717d74fa..3d1565924 100644 --- a/src/widgets/paintbucket-toolbar.cpp +++ b/src/widgets/paintbucket-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -35,13 +35,11 @@ #include "document-undo.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" -#include "preferences.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tools/flood-tool.h" #include "ui/uxmanager.h" #include "ui/widget/unit-tracker.h" -#include "util/units.h" #include "widgets/ink-action.h" using Inkscape::UI::Widget::UnitTracker; diff --git a/src/widgets/pencil-toolbar.cpp b/src/widgets/pencil-toolbar.cpp index 55127206c..d402cc714 100644 --- a/src/widgets/pencil-toolbar.cpp +++ b/src/widgets/pencil-toolbar.cpp @@ -25,19 +25,17 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include #include -#include #include "pencil-toolbar.h" #include "desktop.h" #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" -#include "preferences.h" #include "toolbox.h" #include "ui/tools-switch.h" #include "ui/icon-names.h" @@ -46,13 +44,10 @@ #include "widgets/spinbutton-events.h" #include #include "display/curve.h" -#include "live_effects/effect.h" #include "live_effects/lpe-simplify.h" #include "live_effects/lpe-powerstroke.h" -#include "live_effects/effect-enum.h" #include "live_effects/lpeobject.h" #include "live_effects/lpeobject-reference.h" -#include "sp-lpe-item.h" using Inkscape::UI::UXManager; using Inkscape::UI::ToolboxFactory; diff --git a/src/widgets/rect-toolbar.cpp b/src/widgets/rect-toolbar.cpp index bc27d003c..c9b75294b 100644 --- a/src/widgets/rect-toolbar.cpp +++ b/src/widgets/rect-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -38,8 +38,6 @@ #include "widgets/ege-output-action.h" #include "widgets/ink-action.h" #include "inkscape.h" -#include "preferences.h" -#include "selection.h" #include "sp-namedview.h" #include "sp-rect.h" #include "toolbox.h" @@ -47,11 +45,9 @@ #include "ui/tools/rect-tool.h" #include "ui/uxmanager.h" #include "ui/widget/unit-tracker.h" -#include "util/units.h" #include "verbs.h" #include "widgets/widget-sizes.h" #include "xml/node-event-vector.h" -#include "xml/repr.h" using Inkscape::UI::Widget::UnitTracker; using Inkscape::UI::UXManager; diff --git a/src/widgets/ruler.cpp b/src/widgets/ruler.cpp index deffd384a..1f6e4396c 100644 --- a/src/widgets/ruler.cpp +++ b/src/widgets/ruler.cpp @@ -31,7 +31,6 @@ #include #include -#include "widget-sizes.h" #include "ruler.h" #include "round.h" #include diff --git a/src/widgets/select-toolbar.cpp b/src/widgets/select-toolbar.cpp index 9851b0606..9a48b9a07 100644 --- a/src/widgets/select-toolbar.cpp +++ b/src/widgets/select-toolbar.cpp @@ -13,7 +13,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include <2geom/rect.h> @@ -32,19 +32,15 @@ #include "widgets/ink-action.h" #include "inkscape.h" #include "message-stack.h" -#include "preferences.h" #include "selection-chemistry.h" -#include "selection.h" #include "sp-item-transform.h" #include "sp-namedview.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/widget/unit-tracker.h" -#include "util/units.h" #include "verbs.h" #include "widgets/icon.h" #include "widgets/sp-widget.h" -#include "widgets/spw-utilities.h" #include "widgets/widget-sizes.h" using Inkscape::UI::Widget::UnitTracker; diff --git a/src/widgets/sp-attribute-widget.cpp b/src/widgets/sp-attribute-widget.cpp index fb7eb1420..de44cdbb4 100644 --- a/src/widgets/sp-attribute-widget.cpp +++ b/src/widgets/sp-attribute-widget.cpp @@ -16,7 +16,6 @@ #include #include -#include #if WITH_GTKMM_3_0 # include @@ -24,9 +23,6 @@ # include #endif -#include -#include - #include "sp-object.h" #include "xml/repr.h" #include "macros.h" diff --git a/src/widgets/sp-color-selector.cpp b/src/widgets/sp-color-selector.cpp index 93eaaee8b..932f074d2 100644 --- a/src/widgets/sp-color-selector.cpp +++ b/src/widgets/sp-color-selector.cpp @@ -4,7 +4,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -180,8 +180,6 @@ gfloat ColorSelector::getAlpha() const return _alpha; } -#include "svg/svg-icc-color.h" - /** Called from the outside to set the color; optionally emits signal (only when called from downstream, e.g. the RGBA value field, but not from the rest of the program) diff --git a/src/widgets/sp-widget.cpp b/src/widgets/sp-widget.cpp index 5ab6b1bb5..180704f59 100644 --- a/src/widgets/sp-widget.cpp +++ b/src/widgets/sp-widget.cpp @@ -13,7 +13,6 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "macros.h" #include "document.h" #include "inkscape.h" #include "sp-widget.h" diff --git a/src/widgets/sp-xmlview-attr-list.cpp b/src/widgets/sp-xmlview-attr-list.cpp index a4c00db7c..45dbae52a 100644 --- a/src/widgets/sp-xmlview-attr-list.cpp +++ b/src/widgets/sp-xmlview-attr-list.cpp @@ -10,7 +10,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include diff --git a/src/widgets/sp-xmlview-tree.cpp b/src/widgets/sp-xmlview-tree.cpp index 5dff9adf3..5af7c243d 100644 --- a/src/widgets/sp-xmlview-tree.cpp +++ b/src/widgets/sp-xmlview-tree.cpp @@ -10,7 +10,6 @@ */ #include -#include #include "xml/node-event-vector.h" #include "sp-xmlview-tree.h" diff --git a/src/widgets/spinbutton-events.cpp b/src/widgets/spinbutton-events.cpp index 0280694f6..fdf88ec85 100644 --- a/src/widgets/spinbutton-events.cpp +++ b/src/widgets/spinbutton-events.cpp @@ -12,7 +12,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -21,7 +21,6 @@ #include "ui/tools/tool-base.h" #include "sp-widget.h" -#include "widget-sizes.h" #include "spinbutton-events.h" gboolean spinbutton_focus_in(GtkWidget *w, GdkEventKey * /*event*/, gpointer /*data*/) diff --git a/src/widgets/spiral-toolbar.cpp b/src/widgets/spiral-toolbar.cpp index 7e7398091..7406be255 100644 --- a/src/widgets/spiral-toolbar.cpp +++ b/src/widgets/spiral-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -37,7 +37,6 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-output-action.h" #include "widgets/ink-action.h" -#include "preferences.h" #include "selection.h" #include "sp-spiral.h" #include "toolbox.h" @@ -46,8 +45,6 @@ #include "verbs.h" #include "widgets/spinbutton-events.h" #include "xml/node-event-vector.h" -#include "xml/node.h" -#include "xml/repr.h" using Inkscape::UI::UXManager; using Inkscape::DocumentUndo; diff --git a/src/widgets/spray-toolbar.cpp b/src/widgets/spray-toolbar.cpp index 9e142a8db..43d00c53e 100644 --- a/src/widgets/spray-toolbar.cpp +++ b/src/widgets/spray-toolbar.cpp @@ -26,7 +26,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -37,7 +37,6 @@ #include "widgets/ege-adjustment-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" -#include "preferences.h" #include "toolbox.h" #include "ui/dialog/clonetiler.h" #include "ui/dialog/dialog-manager.h" diff --git a/src/widgets/spw-utilities.cpp b/src/widgets/spw-utilities.cpp index 5500e1068..8bc472601 100644 --- a/src/widgets/spw-utilities.cpp +++ b/src/widgets/spw-utilities.cpp @@ -11,7 +11,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -30,8 +30,6 @@ #include "spw-utilities.h" -#include - /** * Creates a label widget with the given text, at the given col, row * position in the table. diff --git a/src/widgets/star-toolbar.cpp b/src/widgets/star-toolbar.cpp index 982a3c854..7f4293b62 100644 --- a/src/widgets/star-toolbar.cpp +++ b/src/widgets/star-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include @@ -45,10 +45,7 @@ #include "ui/tools/star-tool.h" #include "ui/uxmanager.h" #include "verbs.h" -#include "widgets/../preferences.h" #include "xml/node-event-vector.h" -#include "xml/node.h" -#include "xml/repr.h" using Inkscape::UI::UXManager; using Inkscape::DocumentUndo; diff --git a/src/widgets/stroke-marker-selector.cpp b/src/widgets/stroke-marker-selector.cpp index e273faad7..2a0a10efa 100644 --- a/src/widgets/stroke-marker-selector.cpp +++ b/src/widgets/stroke-marker-selector.cpp @@ -18,17 +18,13 @@ #include "stroke-marker-selector.h" -#include -#include #include -#include <2geom/coord.h> #include "style.h" #include "ui/dialog-events.h" #include "desktop-style.h" -#include "preferences.h" #include "path-prefix.h" #include "io/sys.h" #include "sp-marker.h" @@ -39,10 +35,8 @@ #include "gradient-vector.h" #include -#include #include "ui/widget/spinbutton.h" #include "stroke-style.h" -#include "gradient-chemistry.h" static Inkscape::UI::Cache::SvgPreview svg_preview_cache; diff --git a/src/widgets/stroke-style.cpp b/src/widgets/stroke-style.cpp index 84a6e77ad..b66d97c1d 100644 --- a/src/widgets/stroke-style.cpp +++ b/src/widgets/stroke-style.cpp @@ -18,11 +18,8 @@ #define noSP_SS_VERBOSE #include "stroke-style.h" -#include "gradient-chemistry.h" -#include "sp-gradient.h" #include "sp-stop.h" #include "svg/svg-color.h" -#include "util/units.h" #include "ui/widget/unit-menu.h" #include "desktop-widget.h" diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 23acb74af..3fa240a05 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include "libnrtype/font-lister.h" @@ -41,9 +41,7 @@ #include "widgets/ink-action.h" #include "widgets/ink-comboboxentry-action.h" #include "inkscape.h" -#include "preferences.h" #include "selection-chemistry.h" -#include "selection.h" #include "sp-flowtext.h" #include "sp-root.h" #include "sp-text.h" @@ -53,11 +51,8 @@ #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tools/text-tool.h" -#include "ui/tools/tool-base.h" #include "ui/widget/unit-tracker.h" -#include "util/units.h" #include "verbs.h" -#include "xml/repr.h" using Inkscape::DocumentUndo; using Inkscape::UI::ToolboxFactory; diff --git a/src/widgets/toolbox.cpp b/src/widgets/toolbox.cpp index 8113c9619..1e67cca8f 100644 --- a/src/widgets/toolbox.cpp +++ b/src/widgets/toolbox.cpp @@ -27,7 +27,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include @@ -40,14 +40,9 @@ #include "../desktop-style.h" #include "document-undo.h" #include "widgets/ege-adjustment-action.h" -#include "widgets/ege-output-action.h" -#include "widgets/ege-select-one-action.h" -#include "../graphlayout.h" #include "../helper/action.h" -#include "../helper/action-context.h" #include "icon.h" #include "ink-action.h" -#include "ink-comboboxentry-action.h" #include "../inkscape.h" #include "ui/interface.h" #include "../shortcuts.h" @@ -64,7 +59,6 @@ #include "../widgets/widget-sizes.h" #include "../xml/attribute-record.h" #include "../xml/node-event-vector.h" -#include "../xml/repr.h" #include "ui/uxmanager.h" @@ -95,7 +89,6 @@ #include "zoom-toolbar.h" #include "toolbox.h" -#include #include "ui/tools/tool-base.h" diff --git a/src/widgets/tweak-toolbar.cpp b/src/widgets/tweak-toolbar.cpp index a185ea956..9a021082c 100644 --- a/src/widgets/tweak-toolbar.cpp +++ b/src/widgets/tweak-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include "ui/widget/spinbutton.h" @@ -37,7 +37,6 @@ #include "widgets/ege-output-action.h" #include "widgets/ege-select-one-action.h" #include "widgets/ink-action.h" -#include "preferences.h" #include "toolbox.h" #include "ui/icon-names.h" #include "ui/tools/tweak-tool.h" diff --git a/src/widgets/zoom-toolbar.cpp b/src/widgets/zoom-toolbar.cpp index 79feef86d..a961c0061 100644 --- a/src/widgets/zoom-toolbar.cpp +++ b/src/widgets/zoom-toolbar.cpp @@ -25,7 +25,7 @@ */ #ifdef HAVE_CONFIG_H -# include "config.h" +#include "config.h" #endif #include "zoom-toolbar.h" diff --git a/src/xml/node-fns.cpp b/src/xml/node-fns.cpp index eb3870978..e1506e3f2 100644 --- a/src/xml/node-fns.cpp +++ b/src/xml/node-fns.cpp @@ -1,5 +1,4 @@ #ifdef HAVE_CONFIG_H -# include "config.h" #endif #include diff --git a/src/xml/rebase-hrefs.cpp b/src/xml/rebase-hrefs.cpp index a8ac3b4cc..7e3d4fa7e 100644 --- a/src/xml/rebase-hrefs.cpp +++ b/src/xml/rebase-hrefs.cpp @@ -4,10 +4,7 @@ #include "io/sys.h" #include "sp-object.h" #include "streq.h" -#include "util/share.h" -#include "xml/attribute-record.h" #include "xml/node.h" -#include #include #include #include diff --git a/src/xml/repr-css.cpp b/src/xml/repr-css.cpp index c043904a7..9590fa97f 100644 --- a/src/xml/repr-css.cpp +++ b/src/xml/repr-css.cpp @@ -26,10 +26,8 @@ #include "xml/repr.h" #include "xml/simple-document.h" -#include "xml/simple-node.h" #include "xml/sp-css-attr.h" #include "style.h" -#include "libcroco/cr-sel-eng.h" using Inkscape::Util::List; using Inkscape::XML::AttributeRecord; diff --git a/src/xml/repr-io.cpp b/src/xml/repr-io.cpp index 6977bc1e2..5f576d00f 100644 --- a/src/xml/repr-io.cpp +++ b/src/xml/repr-io.cpp @@ -11,7 +11,7 @@ */ #ifdef HAVE_CONFIG_H -# include +#include #endif #include @@ -39,7 +39,6 @@ #include "preferences.h" #include -#include using Inkscape::IO::Writer; using Inkscape::Util::List; diff --git a/src/xml/repr-util.cpp b/src/xml/repr-util.cpp index ce93bccab..4d093a4ea 100644 --- a/src/xml/repr-util.cpp +++ b/src/xml/repr-util.cpp @@ -17,8 +17,6 @@ #include "config.h" -#include - #if HAVE_STRING_H # include #endif diff --git a/src/xml/repr.cpp b/src/xml/repr.cpp index 0a384c9c1..8ad1ac06b 100644 --- a/src/xml/repr.cpp +++ b/src/xml/repr.cpp @@ -17,7 +17,7 @@ #define noREPR_VERBOSE #ifdef HAVE_CONFIG_H -# include "config.h" +#include #endif #include diff --git a/src/xml/simple-node.cpp b/src/xml/simple-node.cpp index 3cbedc80b..6bd47fd22 100644 --- a/src/xml/simple-node.cpp +++ b/src/xml/simple-node.cpp @@ -21,14 +21,11 @@ #include "preferences.h" -#include "xml/node.h" #include "xml/simple-node.h" #include "xml/node-event-vector.h" #include "xml/node-fns.h" -#include "xml/repr.h" #include "debug/event-tracker.h" #include "debug/simple-event.h" -#include "util/share.h" #include "util/format.h" #include "attribute-rel-util.h" -- cgit v1.2.3 From 4af5b7293e6b4ec6bb945aa4be6014060091c356 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Wed, 3 Aug 2016 16:12:14 +0100 Subject: Fix broken headers (bzr r15035) --- src/dir-util.h | 2 +- src/extension/loader.cpp | 3 +++ src/extension/loader.h | 5 +---- src/filters/pointlight.cpp | 5 ++++- src/filters/pointlight.h | 13 +++---------- src/sp-line.h | 3 +-- 6 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/dir-util.h b/src/dir-util.h index 90d7b3a54..327e1ad5f 100644 --- a/src/dir-util.h +++ b/src/dir-util.h @@ -1,4 +1,4 @@ -#ifndef SEEN_DIR_UTIL_H#include +#ifndef SEEN_DIR_UTIL_H #define SEEN_DIR_UTIL_H /* diff --git a/src/extension/loader.cpp b/src/extension/loader.cpp index 3bea0e1e6..164a5cecf 100644 --- a/src/extension/loader.cpp +++ b/src/extension/loader.cpp @@ -10,6 +10,9 @@ */ #include "loader.h" + +#include + #include "system.h" #include #include "dependency.h" diff --git a/src/extension/loader.h b/src/extension/loader.h index cd362f87b..0eecc02b9 100644 --- a/src/extension/loader.h +++ b/src/extension/loader.h @@ -1,5 +1,4 @@ -/** @file#include - +/** @file * Loader for external plug-ins. *//* * @@ -15,8 +14,6 @@ #define INKSCAPE_EXTENSION_LOADER_H_ #include "extension.h" -#include "implementation/implementation.h" -#include namespace Inkscape { diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp index 39c4a700a..e42d21999 100644 --- a/src/filters/pointlight.cpp +++ b/src/filters/pointlight.cpp @@ -13,13 +13,16 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ +#include "filters/pointlight.h" + #include #include "attributes.h" #include "document.h" -#include "filters/pointlight.h" #include "filters/diffuselighting.h" #include "filters/specularlighting.h" +#include "xml/node.h" +#include "xml/repr.h" #define SP_MACROS_SILENT diff --git a/src/filters/pointlight.h b/src/filters/pointlight.h index 8df6c0c7c..1d60895c4 100644 --- a/src/filters/pointlight.h +++ b/src/filters/pointlight.h @@ -1,16 +1,9 @@ -#ifndef SP_FEPOI"attributes.h" -#include "svg/svg.h" -#include "xml/repr.h" - -#include "merge.h" -#include "mergenode.h" -#include "display/nr-filter.h" -#include "display/nr-filter-merge.h"NTLIGHT_H_SEEN -#define SP_FEPOINTLIGHT_H_SEEN - /** \file * SVG implementation, see sp-filter.cpp. */ +#ifndef SP_FEPOINTLIGHT_H_SEEN +#define SP_FEPOINTLIGHT_H_SEEN + /* * Authors: * Hugo Rodrigues diff --git a/src/sp-line.h b/src/sp-line.h index 177555c77..6c720d403 100644 --- a/src/sp-line.h +++ b/src/sp-line.h @@ -1,5 +1,4 @@ -#ifndef SEEN_SP_LINE_H * SPGradient, SPStop, SPLinearGradient, SPRadialGradient, - +#ifndef SEEN_SP_LINE_H #define SEEN_SP_LINE_H /* -- cgit v1.2.3 From c95b03989b70f33ff3d54f2e644673ab518ac68b Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Wed, 3 Aug 2016 22:41:01 +0200 Subject: Add legacy verb SP_VERB_SELECTION_OUTLINE_LEGACY as pointed in bug 1556592#14 (bzr r15036) --- src/splivarot.cpp | 83 +++++++++++++++++++++++++++++++------------------------ src/splivarot.h | 4 +-- src/verbs.cpp | 5 ++++ src/verbs.h | 1 + 4 files changed, 55 insertions(+), 38 deletions(-) diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 2edb52191..c2e5a2f2e 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -841,7 +841,7 @@ static void sp_selected_path_outline_add_marker( SPObject *marker_object, Geom::Affine marker_transform, Geom::Scale stroke_scale, Geom::Affine transform, Inkscape::XML::Node *g_repr, Inkscape::XML::Document *xml_doc, SPDocument * doc, - SPDesktop *desktop ) + SPDesktop *desktop , bool legacy) { SPMarker* marker = SP_MARKER (marker_object); SPItem* marker_item = sp_item_first_item_child(marker_object); @@ -865,7 +865,9 @@ void sp_selected_path_outline_add_marker( SPObject *marker_object, Geom::Affine m_repr->setPosition(0); SPItem *marker_item = (SPItem *) doc->getObjectByRepr(m_repr); marker_item->doWriteTransform(m_repr, tr); - sp_item_path_outline(marker_item, desktop); + if (!legacy) { + sp_item_path_outline(marker_item, desktop, legacy); + } } } @@ -1140,7 +1142,7 @@ Geom::PathVector* item_outline(SPItem const *item, bool bbox_only) } bool -sp_item_path_outline(SPItem *item, SPDesktop *desktop) +sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy) { bool did = false; Inkscape::Selection *selection = desktop->getSelection(); @@ -1150,10 +1152,13 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) } SPGroup *group = dynamic_cast(item); if (group) { + if (legacy) { + return false; + } std::vector const item_list = sp_item_group_item_list(group); for ( std::vector::const_iterator iter=item_list.begin();iter!=item_list.end();++iter) { SPItem *subitem = *iter; - sp_item_path_outline(subitem, desktop); + sp_item_path_outline(subitem, desktop, legacy); } } else { if (!SP_IS_SHAPE(item) && !SP_IS_TEXT(item)) @@ -1375,23 +1380,24 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) g_repr->setPosition(pos > 0 ? pos : 0); //The fill - Inkscape::XML::Node *fill = NULL; - gchar const *f_val = sp_repr_css_property(ncsf, "fill", NULL); - if (f_val) { - fill = xml_doc->createElement("svg:path"); - sp_repr_css_change(fill, ncsf, "style"); - - sp_repr_css_attr_unref(ncsf); - - gchar *str = sp_svg_write_path( pathv ); - fill->setAttribute("d", str); - g_free(str); - - if (mask) - fill->setAttribute("mask", mask); - if (clip_path) - fill->setAttribute("clip-path", clip_path); + if (!legacy) { + gchar const *f_val = sp_repr_css_property(ncsf, "fill", NULL); + if (f_val) { + fill = xml_doc->createElement("svg:path"); + sp_repr_css_change(fill, ncsf, "style"); + + sp_repr_css_attr_unref(ncsf); + + gchar *str = sp_svg_write_path( pathv ); + fill->setAttribute("d", str); + g_free(str); + + if (mask) + fill->setAttribute("mask", mask); + if (clip_path) + fill->setAttribute("clip-path", clip_path); + } } // restore title, description, id, transform g_repr->setAttribute("id", id); @@ -1403,22 +1409,25 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) if (desc) { newitem->setDesc(desc); } - SPShape *shape = SP_SHAPE(item); Geom::PathVector const & pathv = curve->get_pathvector(); Inkscape::XML::Node *markers = NULL; if(SP_SHAPE(item)->hasMarkers ()) { - markers = xml_doc->createElement("svg:g"); - g_repr->appendChild(markers); - markers->setPosition(pos > 0 ? pos : 0); + if (!legacy) { + markers = xml_doc->createElement("svg:g"); + g_repr->appendChild(markers); + markers->setPosition(pos > 0 ? pos : 0); + } else { + markers = g_repr; + } // START marker for (int i = 0; i < 2; i++) { // SP_MARKER_LOC and SP_MARKER_LOC_START if ( SPObject *marker_obj = shape->_marker[i] ) { Geom::Affine const m (sp_shape_marker_get_transform_at_start(pathv.front().front())); sp_selected_path_outline_add_marker( marker_obj, m, Geom::Scale(i_style->stroke_width.computed), transform, - markers, xml_doc, doc, desktop ); + markers, xml_doc, doc, desktop, legacy); } } // MID marker @@ -1433,7 +1442,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) Geom::Affine const m (sp_shape_marker_get_transform_at_start(path_it->front())); sp_selected_path_outline_add_marker( midmarker_obj, m, Geom::Scale(i_style->stroke_width.computed), transform, - markers, xml_doc, doc, desktop ); + markers, xml_doc, doc, desktop, legacy); } // MID position if (path_it->size_default() > 1) { @@ -1448,7 +1457,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) Geom::Affine const m (sp_shape_marker_get_transform(*curve_it1, *curve_it2)); sp_selected_path_outline_add_marker( midmarker_obj, m, Geom::Scale(i_style->stroke_width.computed), transform, - markers, xml_doc, doc, desktop ); + markers, xml_doc, doc, desktop, legacy); ++curve_it1; ++curve_it2; @@ -1460,7 +1469,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) Geom::Affine const m = sp_shape_marker_get_transform_at_end(lastcurve); sp_selected_path_outline_add_marker( midmarker_obj, m, Geom::Scale(i_style->stroke_width.computed), transform, - markers, xml_doc, doc, desktop ); + markers, xml_doc, doc, desktop, legacy); } } } @@ -1479,18 +1488,20 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) Geom::Affine const m = sp_shape_marker_get_transform_at_end(lastcurve); sp_selected_path_outline_add_marker( marker_obj, m, Geom::Scale(i_style->stroke_width.computed), transform, - markers, xml_doc, doc, desktop ); + markers, xml_doc, doc, desktop, legacy); } } - if (mask) - markers->setAttribute("mask", mask); - if (clip_path) - markers->setAttribute("clip-path", clip_path); + if (!legacy) { + if (mask) + markers->setAttribute("mask", mask); + if (clip_path) + markers->setAttribute("clip-path", clip_path); + } } gchar const *paint_order = sp_repr_css_property(ncss, "paint-order", NULL); SPIPaintOrder temp; temp.read( paint_order ); - if (temp.layer[0] != SP_CSS_PAINT_ORDER_NORMAL) { + if (temp.layer[0] != SP_CSS_PAINT_ORDER_NORMAL && !legacy) { if (temp.layer[0] == SP_CSS_PAINT_ORDER_FILL) { if (temp.layer[1] == SP_CSS_PAINT_ORDER_STROKE) { @@ -1615,7 +1626,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop) } void -sp_selected_path_outline(SPDesktop *desktop) +sp_selected_path_outline(SPDesktop *desktop, bool legacy) { Inkscape::Selection *selection = desktop->getSelection(); @@ -1630,7 +1641,7 @@ sp_selected_path_outline(SPDesktop *desktop) std::vector il(selection->itemList()); for (std::vector::const_iterator l = il.begin(); l != il.end(); l++){ SPItem *item = *l; - did = sp_item_path_outline(item, desktop); + did = sp_item_path_outline(item, desktop, legacy); } prefs->setBool("/options/transform/stroke", scale_stroke); diff --git a/src/splivarot.h b/src/splivarot.h index 3278956bf..665946f71 100644 --- a/src/splivarot.h +++ b/src/splivarot.h @@ -53,8 +53,8 @@ void sp_selected_path_create_updating_offset_object_zero (SPDesktop *desktop); // outline of a curve // uses the stroke-width -void sp_selected_path_outline (SPDesktop *desktop); -bool sp_item_path_outline(SPItem *item, SPDesktop *desktop); +void sp_selected_path_outline (SPDesktop *desktop, bool legacy = false); +bool sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy); Geom::PathVector* item_outline(SPItem const *item, bool bbox_only = false); // simplifies a path (removes small segments and the like) diff --git a/src/verbs.cpp b/src/verbs.cpp index b6293b3a2..d781442eb 100644 --- a/src/verbs.cpp +++ b/src/verbs.cpp @@ -1201,6 +1201,9 @@ void SelectionVerb::perform(SPAction *action, void *data) case SP_VERB_SELECTION_OUTLINE: sp_selected_path_outline(dt); break; + case SP_VERB_SELECTION_OUTLINE_LEGACY: + sp_selected_path_outline(dt, true); + break; case SP_VERB_SELECTION_SIMPLIFY: sp_selected_path_simplify(dt); break; @@ -2612,6 +2615,8 @@ Verb *Verb::_base_verbs[] = { INKSCAPE_ICON("path-offset-linked")), new SelectionVerb(SP_VERB_SELECTION_OUTLINE, "StrokeToPath", N_("_Stroke to Path"), N_("Convert selected object's stroke to paths"), INKSCAPE_ICON("stroke-to-path")), + new SelectionVerb(SP_VERB_SELECTION_OUTLINE_LEGACY, "StrokeToPathLegacy", N_("_Stroke to Path Legacy"), + N_("Convert selected object's stroke to paths legacy mode"), INKSCAPE_ICON("stroke-to-path")), new SelectionVerb(SP_VERB_SELECTION_SIMPLIFY, "SelectionSimplify", N_("Si_mplify"), N_("Simplify selected paths (remove extra nodes)"), INKSCAPE_ICON("path-simplify")), new SelectionVerb(SP_VERB_SELECTION_REVERSE, "SelectionReverse", N_("_Reverse"), diff --git a/src/verbs.h b/src/verbs.h index ffb9b23d8..16f88c408 100644 --- a/src/verbs.h +++ b/src/verbs.h @@ -135,6 +135,7 @@ enum { SP_VERB_SELECTION_DYNAMIC_OFFSET, SP_VERB_SELECTION_LINKED_OFFSET, SP_VERB_SELECTION_OUTLINE, + SP_VERB_SELECTION_OUTLINE_LEGACY, SP_VERB_SELECTION_SIMPLIFY, SP_VERB_SELECTION_REVERSE, -- cgit v1.2.3 From cc54d0bc9da8aafcb3d4a6529d829f76f218dc29 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 4 Aug 2016 10:22:20 +0100 Subject: Fix Win32 build Fixed bugs: - https://launchpad.net/bugs/1609572 (bzr r15037) --- src/ui/dialog/filedialog.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui/dialog/filedialog.cpp b/src/ui/dialog/filedialog.cpp index ee673aecf..0d4fa5c84 100644 --- a/src/ui/dialog/filedialog.cpp +++ b/src/ui/dialog/filedialog.cpp @@ -15,7 +15,11 @@ * Released under GNU GPL, read the file 'COPYING' for more information */ -#include "filedialogimpl-win32.h" +#ifdef WIN32 +# include "filedialogimpl-win32.h" +# include "preferences.h" +#endif + #include "filedialogimpl-gtkmm.h" #include "ui/dialog-events.h" -- cgit v1.2.3 From adf43740cc2fb739be3b4fc10a11c47d99bb3c57 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 4 Aug 2016 18:17:28 +0100 Subject: Require C++11 (bzr r15039) --- CMakeScripts/DefineDependsandFlags.cmake | 6 + configure.ac | 30 +- m4/ax_cxx_compile_stdcxx.m4 | 562 +++++++++++++++++++++++++++++++ m4/ax_cxx_compile_stdcxx_11.m4 | 39 +++ 4 files changed, 609 insertions(+), 28 deletions(-) create mode 100644 m4/ax_cxx_compile_stdcxx.m4 create mode 100644 m4/ax_cxx_compile_stdcxx_11.m4 diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index b56343eda..186daf33f 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -11,6 +11,12 @@ list(APPEND INKSCAPE_INCS ${PROJECT_SOURCE_DIR} ${CMAKE_BINARY_DIR}/include ) +# ---------------------------------------------------------------------------- +# Add C++11 standard compliance +# TODO: Add a proper check for compiler compliance here +# ---------------------------------------------------------------------------- +list(APPEND INKSCAPE_CXX_FLAGS "-std=c++11") + # ---------------------------------------------------------------------------- # Files we include # ---------------------------------------------------------------------------- diff --git a/configure.ac b/configure.ac index aea8b6474..603cd6ac1 100644 --- a/configure.ac +++ b/configure.ac @@ -38,6 +38,8 @@ AC_LANG(C++) AC_PROG_CXX AC_PROG_CC AM_PROG_AS +AX_CXX_COMPILE_STDCXX_11([], [mandatory]) + # Initialize libtool LT_PREREQ([2.2]) LT_INIT @@ -650,34 +652,6 @@ PKG_CHECK_MODULES(INKSCAPE, pangoft2 >= 1.24 ) -# test whether dependencies require C++11 -AC_MSG_CHECKING([whether C++11 mode is required]) -CXXFLAGS_SAVE="$CXXFLAGS" -CXXFLAGS="$INKSCAPE_CXX_DEPS_CFLAGS $CXXFLAGS" -cxx11_required=unknown -AC_COMPILE_IFELSE([AC_LANG_SOURCE([ -#include -int main() {} -])], [cxx11_required=no], [cxx11_required=unknown]) -if test "x$cxx11_required" = "xunknown"; then - CXXFLAGS="-std=c++11 $CXXFLAGS" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([ - #include - int main() {} - ])], [cxx11_required=yes], [cxx11_required=unknown]) -fi -CXXFLAGS="$CXXFLAGS_SAVE" -if test "x$cxx11_required" = "xunknown"; then - AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([cannot detect whether C++11 is required]) -fi -if test "x$cxx11_required" = "xyes"; then - AC_MSG_RESULT([yes]) - CXXFLAGS="-std=c++11 $CXXFLAGS" -else - AC_MSG_RESULT([no]) -fi - # Detect a working version of unordered containers. # First try looking for native support (C++11 feature) AC_MSG_CHECKING([native support for unordered_set]) diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4 new file mode 100644 index 000000000..2c18e49c5 --- /dev/null +++ b/m4/ax_cxx_compile_stdcxx.m4 @@ -0,0 +1,562 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the specified +# version of the C++ standard. If necessary, add switches to CXX and +# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) +# or '14' (for the C++14 standard). +# +# The second argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for an extended mode. +# +# The third argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline support for the specified C++ standard is +# required and that the macro should error out if no mode with that +# support is found. If specified 'optional', then configuration proceeds +# regardless, after defining HAVE_CXX${VERSION} if and only if a +# supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov +# Copyright (c) 2015 Paul Norman +# Copyright (c) 2015 Moritz Klammler +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 4 + +dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro +dnl (serial version number 13). + +AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl + m4_if([$1], [11], [], + [$1], [14], [], + [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], + [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$2], [], [], + [$2], [ext], [], + [$2], [noext], [], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], + [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], + [$3], [optional], [ax_cxx_compile_cxx$1_required=false], + [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi + + m4_if([$2], [noext], [], [dnl + if test x$ac_success = xno; then + for switch in -std=gnu++$1 -std=gnu++0x; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + fi]) + + m4_if([$2], [ext], [], [dnl + if test x$ac_success = xno; then + dnl HP's aCC needs +std=c++11 according to: + dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf + dnl Cray's crayCC needs "-h std=c++11" + for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx$1_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) + fi + fi + if test x$ac_success = xno; then + HAVE_CXX$1=0 + AC_MSG_NOTICE([No compiler with C++$1 support was found]) + else + HAVE_CXX$1=1 + AC_DEFINE(HAVE_CXX$1,1, + [define if the compiler supports basic C++$1 syntax]) + fi + AC_SUBST(HAVE_CXX$1) +]) + + +dnl Test body for checking C++11 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 +) + + +dnl Test body for checking C++14 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 +) + + +dnl Tests for new features in C++11 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual void f() {} + }; + + struct Derived : public Base + { + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check single_type; + typedef check> double_type; + typedef check>> triple_type; + typedef check>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == true, ""); + static_assert(is_same::value == false, ""); + static_assert(is_same::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template + struct sum; + + template + struct sum + { + static constexpr auto value = N0 + sum::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template + using member = typename T::member_type; + + template + void func(...) {} + + template + void func(member*) {} + + void test(); + + void test() { func(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + +]]) + + +dnl Tests for new features in C++14 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_seperators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same::value, ""); + static_assert(is_same::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + +]]) diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4 new file mode 100644 index 000000000..0aadeafe7 --- /dev/null +++ b/m4/ax_cxx_compile_stdcxx_11.m4 @@ -0,0 +1,39 @@ +# ============================================================================ +# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================ +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXX and CXXCPP to enable +# support. +# +# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX +# macro with the version set to C++11. The two optional arguments are +# forwarded literally as the second and third argument respectively. +# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for +# more information. If you want to use this macro, you also need to +# download the ax_cxx_compile_stdcxx.m4 file. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik +# Copyright (c) 2012 Zack Weinberg +# Copyright (c) 2013 Roy Stogner +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov +# Copyright (c) 2015 Paul Norman +# Copyright (c) 2015 Moritz Klammler +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 17 + +AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX]) +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])]) -- cgit v1.2.3 From fa70c0e286d268ef3e35f2d08a0404dcbf02caa3 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 4 Aug 2016 20:01:10 +0100 Subject: Use C++11 unordered containers (bzr r15040) --- configure.ac | 34 ------------------------------ src/util/unordered-containers.h | 46 +++++------------------------------------ 2 files changed, 5 insertions(+), 75 deletions(-) diff --git a/configure.ac b/configure.ac index 603cd6ac1..e57f63885 100644 --- a/configure.ac +++ b/configure.ac @@ -652,40 +652,6 @@ PKG_CHECK_MODULES(INKSCAPE, pangoft2 >= 1.24 ) -# Detect a working version of unordered containers. -# First try looking for native support (C++11 feature) -AC_MSG_CHECKING([native support for unordered_set]) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], -[[ - std::unordered_set i, j; - i = j; -]])], -[native_unordered_set_works=yes], [native_unordered_set_works=no]) - -if test "x$native_unordered_set_works" = "xyes"; then - AC_MSG_RESULT([ok]) - AC_DEFINE(HAVE_NATIVE_UNORDERED_SET, 1, [Has working native unordered_set]) -else - AC_MSG_RESULT([not working]) -fi - -AC_MSG_CHECKING([TR1 unordered_set usability]) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], -[[ - std::tr1::unordered_set i, j; - i = j; -]])], -[tr1_unordered_set_works=yes], [tr1_unordered_set_works=no]) - -if test "x$tr1_unordered_set_works" = "xyes"; then - AC_MSG_RESULT([ok]) - AC_DEFINE(HAVE_TR1_UNORDERED_SET, 1, [Has working standard TR1 unordered_set]) -else - AC_MSG_RESULT([not working]) -fi - -AC_CHECK_HEADER([boost/unordered_set.hpp], [AC_DEFINE(HAVE_BOOST_UNORDERED_SET, 1, [Boost unordered_set (Boost >= 1.36)])], []) - ink_spell_pkg= if pkg-config --exists gtkspell-3.0; then ink_spell_pkg=gtkspell-3.0 diff --git a/src/util/unordered-containers.h b/src/util/unordered-containers.h index b92f2e7ea..0bda8191f 100644 --- a/src/util/unordered-containers.h +++ b/src/util/unordered-containers.h @@ -20,12 +20,11 @@ #ifndef DOXYGEN_SHOULD_SKIP_THIS -#if defined(HAVE_NATIVE_UNORDERED_SET) -# include -# include -# define INK_UNORDERED_SET std::unordered_set -# define INK_UNORDERED_MAP std::unordered_map -# define INK_HASH std::hash +#include +#include +#define INK_UNORDERED_SET std::unordered_set +#define INK_UNORDERED_MAP std::unordered_map +#define INK_HASH std::hash namespace std { template <> @@ -36,41 +35,6 @@ struct hash : public std::unary_function -# include -# define INK_UNORDERED_SET std::tr1::unordered_set -# define INK_UNORDERED_MAP std::tr1::unordered_map -# define INK_HASH std::tr1::hash - -namespace std { -namespace tr1 { -template <> -struct hash : public std::unary_function { - std::size_t operator()(Glib::ustring const &s) const { - return hash()(s.raw()); - } -}; -} // namespace tr1 -} // namespace std - -#elif defined(HAVE_BOOST_UNORDERED_SET) -# include -# include -# define INK_UNORDERED_SET boost::unordered_set -# define INK_UNORDERED_MAP boost::unordered_map -# define INK_HASH boost::hash - -namespace boost { -template <> -struct hash : public std::unary_function { - std::size_t operator()(Glib::ustring const &s) const { - return hash()(s.raw()); - } -}; -} // namespace boost -#endif - #else /// Name (with namespace) of the unordered set template. #define INK_UNORDERED_SET -- cgit v1.2.3 From f9464efc86f5a9f232d90963ea7c1ff5f982cb9c Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 5 Aug 2016 15:24:45 +0100 Subject: btool: Fix for C++11 (bzr r15041) --- buildtool.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/buildtool.cpp b/buildtool.cpp index cb70a25c2..a64340e24 100644 --- a/buildtool.cpp +++ b/buildtool.cpp @@ -9966,7 +9966,8 @@ bool Make::parseFile() return false; } //more work than targets[tname]=target, but avoids default allocator - targets.insert(std::make_pair(tname, target)); + auto pair = std::make_pair(tname, target); + targets.insert(pair); } //######### none of the above else -- cgit v1.2.3 From 437d745d0770d842bdf6908b324e99b9e1a6275d Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Fri, 5 Aug 2016 15:27:47 +0100 Subject: build-x64.xml now uses GTK+ 3 (bzr r15042) --- build-x64-gtk3.xml | 950 ----------------------------------------------------- build-x64.xml | 97 +++--- 2 files changed, 60 insertions(+), 987 deletions(-) delete mode 100644 build-x64-gtk3.xml diff --git a/build-x64-gtk3.xml b/build-x64-gtk3.xml deleted file mode 100644 index b4fa4f1e7..000000000 --- a/build-x64-gtk3.xml +++ /dev/null @@ -1,950 +0,0 @@ - - - - - - - - Build file for the Inkscape SVG editor. This file - was written for GTK-3 on Win64. - - Note that the default target is 'dist-all'. You can execute other - targets instead, by "btool {target}", like "btool compile", if - you want to save time, or "dist-inkscape" if you don't want inkview. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - namespace Inkscape { - char const *version_string = "${version} ${bzr.revision}"; - } - - - #ifndef _CONFIG_H_ - #define _CONFIG_H_ - - #ifndef WIN32 - #define WIN32 - #endif - - /*###################################### - ## This is for require-config.h, whose - ## purpose I cannot fathom. - ######################################*/ - - #define PACKAGE_TARNAME - - /*###################################### - #### RESOURCE DIRECTORIES - ######################################*/ - - #define INKSCAPE_DATADIR "." - #define PACKAGE_LOCALE_DIR "locale" - - - /*###################################### - #### OTHER DEFINITIONS - ######################################*/ - - #define GETTEXT_PACKAGE "inkscape" - - #define PACKAGE_STRING VERSION - - #define HAVE_GETOPT_H 1 - #define HAVE_STRING_H 1 - #define HAVE_LIBINTL_H 1 - #define HAVE_MALLOC_H 1 - #define HAVE_STDLIB_H 1 - #define HAVE_SYS_STAT_H 1 - #define HAVE_INTTYPES_H 1 - #define HAVE_OPENMP 1 - #define HAVE_TR1_UNORDERED_SET 1 - #define HAVE_STDINT_H 1 - - #define HAVE_LIBLCMS2 1 - - #define WITH_GTKMM_3_10 1 - //#define WITH_GLIBMM_2_32 1 - #define HAVE_GLIBMM_THREADS_H 1 - #define WITH_GDL_3_6 1 - - #define ENABLE_NLS 1 - #define HAVE_BIND_TEXTDOMAIN_CODESET 1 - - /* keep binreloc off */ - #define BR_PTHREADS 0 - #undef ENABLE_BINRELOC - - /* CairoPDF options */ - #define HAVE_CAIRO_PDF 1 - #define PANGO_ENABLE_ENGINE 1 - #define RENDER_WITH_PANGO_CAIRO 1 - - #define HAVE_GTK_WINDOW_FULLSCREEN 1 - - /* internal interpreter */ - #define WITH_PYTHON 1 - - /* use poppler for pdf import? */ - #define HAVE_POPPLER 1 - #define HAVE_POPPLER_GLIB 1 - #define HAVE_POPPLER_CAIRO 1 - - /* do we want bitmap manipulation? */ - #define WITH_IMAGE_MAGICK 1 - - /* Exif and JPEG support for image resolution import */ - #define HAVE_EXIF 1 - #define HAVE_JPEG 1 - - /* WordPerfect import filter */ - #define WITH_LIBWPG 1 - #define WITH_LIBWPG03 1 - - /* Visio import filter */ - #define WITH_LIBVISIO 1 - #define WITH_LIBVISIO01 1 - - /* Corel Draw import filter */ - #define WITH_LIBCDR 1 - #define WITH_LIBCDR01 1 - - /* Do we support SVG Fonts? */ - #define ENABLE_SVG_FONTS 1 - - /* Do we want experimental, unsupported, unguaranteed, etc., LivePathEffects enabled? */ - //#define LPE_ENABLE_TEST_EFFECTS 1 - - /* Do we want experimental, unsupported, unguaranteed, etc., SVG2 features enabled? */ - //#define WITH_SVG2 1 - //#define WITH_CSSCOMPOSITE 1 - //#define WITH_CSSBLEND 1 - //#define WITH_MESH 1 - - #define HAVE_ASPELL 1 - - #define HAVE_POTRACE 1 - - #endif /* _CONFIG_H_ */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wall -Wformat -Werror=format-security -Wextra -Wpointer-arith -Wcast-align -Wsign-compare -Wswitch - -Werror=return-type - - - -Wno-error=pointer-sign - -Wno-error=unused-parameter -Wno-error=unused-but-set-variable -Wno-error=strict-overflow -Wno-error=write-strings - - -Wno-error=format -Wno-error=format-extra-args - -Wno-unused-local-typedefs - -O2 - -mms-bitfields - -fopenmp - - - -std=gnu++11 -DCPP11 - -Woverloaded-virtual - - -Wno-deprecated-declarations - - - -DVERSION=\"${version}\" - -DHAVE_CONFIG_H - -D_INTL_REDIRECT_INLINE - -DHAVE_SSL - -DRELAYTOOL_SSL="static const int libssl_is_present=1; static int __attribute__((unused)) libssl_symbol_is_present(char *s){ return 1; }" - -DPOPPLER_NEW_GFXFONT - -DPOPPLER_NEW_GFXPATCH - -DPOPPLER_NEW_ERRORAPI - -DPOPPLER_EVEN_NEWER_COLOR_SPACE_API - -DPOPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API - - -DGLIBMM_DISABLE_DEPRECATED - -DG_DISABLE_DEPRECATED - -DGTK_DISABLE_SINGLE_INCLUDES - - - -DGDKMM_DISABLE_DEPRECATED - -DGSEAL_ENABLE - - - -I${devlibs}/include - - ${pcc.gtkmm-3.0} - ${pcc.gdkmm-3.0} - ${pcc.gtk+-3.0} - ${pcc.gdk-3.0} - ${pcc.gdl-3.0} - ${pcc.glibmm-2.4} - - - ${pcc.pangomm-1.4} - ${pcc.cairomm-1.0} - - ${pcc.Magick++} - ${pcc.libxml-2.0} - ${pcc.freetype2} - ${pcc.cairo} - ${pcc.poppler} - -I${devlibs}/include/gc - -I${devlibs}/include/potracelib - ${pcc.libwpg-0.3} ${pcc.libvisio-0.1} ${pcc.libcdr-0.1} - -I${cxxtest} - - - - -I${devlibs}/python/include - - - - - - - - - - - - - - - - - - - - - - - - - --include-dir=${src} - - - - - -mwindows -m64 - -mthreads - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} - ${pcl.gtk+-3.0} ${pcl.gdk-3.0} - ${pcl.gdl-3.0} - ${devlibs}/bin/libxml2-2.dll - ${devlibs}/bin/libxslt-1.dll - ${devlibs}/bin/libexslt-0.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.glibmm-2.4} - - - ${pcl.pangomm-1.4} - ${pcl.cairomm-1.0} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lwinpthread - -laspell - -lmscms - - - - - - - - - - -mconsole - -mthreads - - - - - - - - - - - - - - --include-dir=${src} - - - - - -mwindows -m64 - -mthreads - - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} - ${pcl.gtk+-3.0} ${pcl.gdk-3.0} - ${pcl.gdl-3.0} - ${devlibs}/bin/libxml2-2.dll - ${devlibs}/bin/libxslt-1.dll - ${devlibs}/bin/libexslt-0.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.glibmm-2.4} - - - ${pcl.pangomm-1.4} - ${pcl.cairomm-1.0} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lwinpthread - -laspell - -lmscms - - - - - - - - - - - - -mconsole - -mthreads - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} - ${pcl.gtk+-3.0} ${pcl.gdk-3.0} - ${pcl.gdl-3.0} - ${devlibs}/bin/libxml2-2.dll - ${devlibs}/bin/libxslt-1.dll - ${devlibs}/bin/libexslt-0.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.glibmm-2.4} - - - ${pcl.pangomm-1.4} - ${pcl.cairomm-1.0} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lwinpthread - -laspell - -lmscms - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[Settings] -#gtk-font-name = Tahoma 8 -#gtk-theme-name = Adwaita -gtk-menu-images = true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build-x64.xml b/build-x64.xml index 682fd712e..e1134f841 100644 --- a/build-x64.xml +++ b/build-x64.xml @@ -34,15 +34,15 @@ Build file for the Inkscape SVG editor. This file - was written for GTK-2.10 on Win32, but it should work - well for other types of builds with only minor adjustments. + was written for GTK-3 on Win64. + Note that the default target is 'dist-all'. You can execute other targets instead, by "btool {target}", like "btool compile", if you want to save time, or "dist-inkscape" if you don't want inkview. - + @@ -159,6 +159,11 @@ #define HAVE_LIBLCMS2 1 + #define WITH_GTKMM_3_10 1 + //#define WITH_GLIBMM_2_32 1 + #define HAVE_GLIBMM_THREADS_H 1 + #define WITH_GDL_3_6 1 + #define ENABLE_NLS 1 #define HAVE_BIND_TEXTDOMAIN_CODESET 1 @@ -313,6 +318,7 @@ + @@ -323,7 +329,7 @@ - + @@ -338,7 +344,6 @@ - @@ -398,13 +403,16 @@ -I${devlibs}/include - ${pcc.gtkmm-2.4} + ${pcc.gtkmm-3.0} + ${pcc.gdkmm-3.0} + ${pcc.gtk+-3.0} + ${pcc.gdk-3.0} + ${pcc.gdl-3.0} ${pcc.glibmm-2.4} - ${pcc.gtk+-2.0} - ${pcc.gdkmm-2.4} + + ${pcc.pangomm-1.4} ${pcc.cairomm-1.0} - ${pcc.gmodule-2.0} ${pcc.Magick++} ${pcc.libxml-2.0} @@ -484,16 +492,18 @@ -L${devlibs}/lib ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.gtkmm-2.4} ${pcl.pangoft2} ${pcl.gthread-2.0} + ${pcl.pangoft2} ${pcl.gthread-2.0} + ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} + ${pcl.gtk+-3.0} ${pcl.gdk-3.0} + ${pcl.gdl-3.0} ${devlibs}/bin/libxml2-2.dll ${devlibs}/bin/libxslt-1.dll ${devlibs}/bin/libexslt-0.dll ${pcl.cairo} ${pcl.cairomm-1.0} ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.gmodule-2.0} ${pcl.glibmm-2.4} - ${pcl.gtk+-2.0} - ${pcl.gdkmm-2.4} + + ${pcl.pangomm-1.4} ${pcl.cairomm-1.0} -liconv @@ -573,16 +583,18 @@ -L${devlibs}/lib ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.gtkmm-2.4} ${pcl.pangoft2} ${pcl.gthread-2.0} + ${pcl.pangoft2} ${pcl.gthread-2.0} + ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} + ${pcl.gtk+-3.0} ${pcl.gdk-3.0} + ${pcl.gdl-3.0} ${devlibs}/bin/libxml2-2.dll ${devlibs}/bin/libxslt-1.dll ${devlibs}/bin/libexslt-0.dll ${pcl.cairo} ${pcl.cairomm-1.0} ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.gmodule-2.0} ${pcl.glibmm-2.4} - ${pcl.gtk+-2.0} - ${pcl.gdkmm-2.4} + + ${pcl.pangomm-1.4} ${pcl.cairomm-1.0} -liconv @@ -630,16 +642,18 @@ -L${devlibs}/lib ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.gtkmm-2.4} ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gmodule-2.0} + ${pcl.pangoft2} ${pcl.gthread-2.0} + ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} + ${pcl.gtk+-3.0} ${pcl.gdk-3.0} + ${pcl.gdl-3.0} ${devlibs}/bin/libxml2-2.dll ${devlibs}/bin/libxslt-1.dll ${devlibs}/bin/libexslt-0.dll ${pcl.cairo} ${pcl.cairomm-1.0} ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} ${pcl.glibmm-2.4} - ${pcl.gtk+-2.0} - ${pcl.gdkmm-2.4} + + ${pcl.pangomm-1.4} ${pcl.cairomm-1.0} -liconv @@ -678,10 +692,12 @@ - - + + + + @@ -694,12 +710,12 @@ - + - + @@ -715,6 +731,7 @@ + @@ -764,21 +781,16 @@ + - - - - - - - - + - + + @@ -786,10 +798,13 @@ + + + @@ -803,7 +818,7 @@ - + @@ -825,6 +840,14 @@ + + +[Settings] +#gtk-font-name = Tahoma 8 +#gtk-theme-name = Adwaita +gtk-menu-images = true + + @@ -864,8 +887,8 @@ --> - - + + - - - - - - - Build file for the Inkscape SVG editor. This version - is configured for Unix/Linux, but hopefully we can merge - in the future. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #define INKSCAPE_VERSION "${version}, revision ${svn.revision}" - - - #ifndef _CONFIG_H_ - #define _CONFIG_H_ - - /*###################################### - ## This is for require-config.h, whose - ## purpose I cannot fathom. - ######################################*/ - - #define PACKAGE_TARNAME - - /*###################################### - #### RESOURCE DIRECTORIES - ######################################*/ - - #define INKSCAPE_DATADIR "." - #define PACKAGE_LOCALE_DIR "locale" - - - /*###################################### - #### OTHER DEFINITIONS - ######################################*/ - - #define GETTEXT_PACKAGE "inkscape" - - #define PACKAGE_STRING VERSION - - #define HAVE_GETOPT_H 1 - #define HAVE_STRING_H 1 - #define HAVE_LIBINTL_H 1 - #define HAVE_MALLOC_H 1 - #define HAVE_STDLIB_H 1 - #define HAVE_SYS_STAT_H 1 - #define HAVE_INTTYPES_H 1 - #define HAVE_ZLIB_H 1 - - #define ENABLE_LCMS 1 - - #define WITH_GTKMM_2_24 1 - - #define ENABLE_NLS 1 - #define HAVE_BIND_TEXTDOMAIN_CODESET 1 - - /* make us relocatable */ - #define BR_PTHREADS 1 - #define ENABLE_BINRELOC 1 - - /* CairoPDF options */ - #define HAVE_CAIRO_PDF 1 - #define PANGO_ENABLE_ENGINE 1 - #define RENDER_WITH_PANGO_CAIRO 1 - - #define HAVE_GTK_WINDOW_FULLSCREEN 1 - - /* internal interpreter */ - #define WITH_PYTHON 1 - - /* use poppler for pdf import? */ - #define HAVE_POPPLER 1 - #define HAVE_POPPLER_CAIRO 1 - - /* do we want bitmap manipulation? */ - #define WITH_IMAGE_MAGICK 1 - - /* Allow reading WordPerfect? */ - #define WITH_LIBWPG 1 - - /* Default to libwpg 0.1.x */ - #define WITH_LIBWPG01 1 - - #endif /* _CONFIG_H_ */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wall -Wformat -Werror=format-security -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch - -O2 - - - -DVERSION=\"${version}\" - -DHAVE_CONFIG_H - -D_INTL_REDIRECT_INLINE - -DHAVE_SSL - -DRELAYTOOL_SSL="static const int libssl_is_present=1; static int __attribute__((unused)) libssl_symbol_is_present(char *s){ return 1; }" - - - -I${devlibs}/include - - ${pcc.gtkmm-2.4} - - ${pcc.libxslt} - ${pcc.freetype2} - ${pcc.cairo} - ${pcc.poppler} - -I${devlibs}/include/gc - ${pcc.libwpg-0.1} ${pcc.libwpg-stream-0.1} - - -I${devlibs}/python/include - - -I${src}/bind/javainc -I${src}/bind/javainc/linux - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler} ${pcl.poppler-cairo} ${pcl.poppler-glib} - ${pcl.gtkmm-2.4} - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.gthread-2.0} - ${pcl.libxslt} - ${pcl.libwpg-0.1} ${pcl.libwpg-stream-0.1} - ${pcl.ImageMagick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms} - ${pcl.gsl} - -lssl -lcrypto - -lpng -ljpeg -ltiff -lpopt -lz - -lgc -lm - - - - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler} - ${pcl.gtkmm-2.4} - ${pcl.cairo} ${pcl.cairomm-1.0} - - -L${devlibs}/perl/lib/CORE -lperl58 - - -L${devlibs}/python/libs -lpython25 - -lxml2 -lxslt - -lwpg-0.1 -lwpg-stream-0.1 - ${pcl.ImageMagick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms} - -lssl -lcrypto - -lpng -ljpeg -ltiff -lpopt -lz - -lgc - -lintl -liconv -lm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build-x64.xml b/build-x64.xml deleted file mode 100644 index e1134f841..000000000 --- a/build-x64.xml +++ /dev/null @@ -1,950 +0,0 @@ - - - - - - - - Build file for the Inkscape SVG editor. This file - was written for GTK-3 on Win64. - - Note that the default target is 'dist-all'. You can execute other - targets instead, by "btool {target}", like "btool compile", if - you want to save time, or "dist-inkscape" if you don't want inkview. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - namespace Inkscape { - char const *version_string = "${version} ${bzr.revision}"; - } - - - #ifndef _CONFIG_H_ - #define _CONFIG_H_ - - #ifndef WIN32 - #define WIN32 - #endif - - /*###################################### - ## This is for require-config.h, whose - ## purpose I cannot fathom. - ######################################*/ - - #define PACKAGE_TARNAME - - /*###################################### - #### RESOURCE DIRECTORIES - ######################################*/ - - #define INKSCAPE_DATADIR "." - #define PACKAGE_LOCALE_DIR "locale" - - - /*###################################### - #### OTHER DEFINITIONS - ######################################*/ - - #define GETTEXT_PACKAGE "inkscape" - - #define PACKAGE_STRING VERSION - - #define HAVE_GETOPT_H 1 - #define HAVE_STRING_H 1 - #define HAVE_LIBINTL_H 1 - #define HAVE_MALLOC_H 1 - #define HAVE_STDLIB_H 1 - #define HAVE_SYS_STAT_H 1 - #define HAVE_INTTYPES_H 1 - #define HAVE_OPENMP 1 - #define HAVE_TR1_UNORDERED_SET 1 - #define HAVE_STDINT_H 1 - - #define HAVE_LIBLCMS2 1 - - #define WITH_GTKMM_3_10 1 - //#define WITH_GLIBMM_2_32 1 - #define HAVE_GLIBMM_THREADS_H 1 - #define WITH_GDL_3_6 1 - - #define ENABLE_NLS 1 - #define HAVE_BIND_TEXTDOMAIN_CODESET 1 - - /* keep binreloc off */ - #define BR_PTHREADS 0 - #undef ENABLE_BINRELOC - - /* CairoPDF options */ - #define HAVE_CAIRO_PDF 1 - #define PANGO_ENABLE_ENGINE 1 - #define RENDER_WITH_PANGO_CAIRO 1 - - #define HAVE_GTK_WINDOW_FULLSCREEN 1 - - /* internal interpreter */ - #define WITH_PYTHON 1 - - /* use poppler for pdf import? */ - #define HAVE_POPPLER 1 - #define HAVE_POPPLER_GLIB 1 - #define HAVE_POPPLER_CAIRO 1 - - /* do we want bitmap manipulation? */ - #define WITH_IMAGE_MAGICK 1 - - /* Exif and JPEG support for image resolution import */ - #define HAVE_EXIF 1 - #define HAVE_JPEG 1 - - /* WordPerfect import filter */ - #define WITH_LIBWPG 1 - #define WITH_LIBWPG03 1 - - /* Visio import filter */ - #define WITH_LIBVISIO 1 - #define WITH_LIBVISIO01 1 - - /* Corel Draw import filter */ - #define WITH_LIBCDR 1 - #define WITH_LIBCDR01 1 - - /* Do we support SVG Fonts? */ - #define ENABLE_SVG_FONTS 1 - - /* Do we want experimental, unsupported, unguaranteed, etc., LivePathEffects enabled? */ - //#define LPE_ENABLE_TEST_EFFECTS 1 - - /* Do we want experimental, unsupported, unguaranteed, etc., SVG2 features enabled? */ - //#define WITH_SVG2 1 - //#define WITH_CSSCOMPOSITE 1 - //#define WITH_CSSBLEND 1 - //#define WITH_MESH 1 - - #define HAVE_ASPELL 1 - - #define HAVE_POTRACE 1 - - #endif /* _CONFIG_H_ */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wall -Wformat -Werror=format-security -Wextra -Wpointer-arith -Wcast-align -Wsign-compare -Wswitch - -Werror=return-type - - - -Wno-error=pointer-sign - -Wno-error=unused-parameter -Wno-error=unused-but-set-variable -Wno-error=strict-overflow -Wno-error=write-strings - - -Wno-error=format -Wno-error=format-extra-args - -Wno-unused-local-typedefs - -O2 - -mms-bitfields - -fopenmp - - - -std=gnu++11 -DCPP11 - -Woverloaded-virtual - - -Wno-deprecated-declarations - - - -DVERSION=\"${version}\" - -DHAVE_CONFIG_H - -D_INTL_REDIRECT_INLINE - -DHAVE_SSL - -DRELAYTOOL_SSL="static const int libssl_is_present=1; static int __attribute__((unused)) libssl_symbol_is_present(char *s){ return 1; }" - -DPOPPLER_NEW_GFXFONT - -DPOPPLER_NEW_GFXPATCH - -DPOPPLER_NEW_ERRORAPI - -DPOPPLER_EVEN_NEWER_COLOR_SPACE_API - -DPOPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API - - -DGLIBMM_DISABLE_DEPRECATED - -DG_DISABLE_DEPRECATED - -DGTK_DISABLE_SINGLE_INCLUDES - - - -DGDKMM_DISABLE_DEPRECATED - -DGSEAL_ENABLE - - - -I${devlibs}/include - - ${pcc.gtkmm-3.0} - ${pcc.gdkmm-3.0} - ${pcc.gtk+-3.0} - ${pcc.gdk-3.0} - ${pcc.gdl-3.0} - ${pcc.glibmm-2.4} - - - ${pcc.pangomm-1.4} - ${pcc.cairomm-1.0} - - ${pcc.Magick++} - ${pcc.libxml-2.0} - ${pcc.freetype2} - ${pcc.cairo} - ${pcc.poppler} - -I${devlibs}/include/gc - -I${devlibs}/include/potracelib - ${pcc.libwpg-0.3} ${pcc.libvisio-0.1} ${pcc.libcdr-0.1} - -I${cxxtest} - - - - -I${devlibs}/python/include - - - - - - - - - - - - - - - - - - - - - - - - - --include-dir=${src} - - - - - -mwindows -m64 - -mthreads - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} - ${pcl.gtk+-3.0} ${pcl.gdk-3.0} - ${pcl.gdl-3.0} - ${devlibs}/bin/libxml2-2.dll - ${devlibs}/bin/libxslt-1.dll - ${devlibs}/bin/libexslt-0.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.glibmm-2.4} - - - ${pcl.pangomm-1.4} - ${pcl.cairomm-1.0} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lwinpthread - -laspell - -lmscms - - - - - - - - - - -mconsole - -mthreads - - - - - - - - - - - - - - --include-dir=${src} - - - - - -mwindows -m64 - -mthreads - - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} - ${pcl.gtk+-3.0} ${pcl.gdk-3.0} - ${pcl.gdl-3.0} - ${devlibs}/bin/libxml2-2.dll - ${devlibs}/bin/libxslt-1.dll - ${devlibs}/bin/libexslt-0.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.glibmm-2.4} - - - ${pcl.pangomm-1.4} - ${pcl.cairomm-1.0} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lwinpthread - -laspell - -lmscms - - - - - - - - - - - - -mconsole - -mthreads - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gtkmm-3.0} ${pcl.gdkmm-3.0} - ${pcl.gtk+-3.0} ${pcl.gdk-3.0} - ${pcl.gdl-3.0} - ${devlibs}/bin/libxml2-2.dll - ${devlibs}/bin/libxslt-1.dll - ${devlibs}/bin/libexslt-0.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-stream-0.0} ${pcl.libwpg-0.3} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - ${pcl.glibmm-2.4} - - - ${pcl.pangomm-1.4} - ${pcl.cairomm-1.0} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lwinpthread - -laspell - -lmscms - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[Settings] -#gtk-font-name = Tahoma 8 -#gtk-theme-name = Adwaita -gtk-menu-images = true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build.xml b/build.xml deleted file mode 100644 index b782183ae..000000000 --- a/build.xml +++ /dev/null @@ -1,920 +0,0 @@ - - - - - - - - Build file for the Inkscape SVG editor. This file - was written for GTK-2.10 on Win32, but it should work - well for other types of builds with only minor adjustments. - Note that the default target is 'dist-all'. You can execute other - targets instead, by "btool {target}", like "btool compile", if - you want to save time, or "dist-inkscape" if you don't want inkview. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - namespace Inkscape { - char const *version_string = "${version} ${bzr.revision}"; - } - - - #ifndef _CONFIG_H_ - #define _CONFIG_H_ - - #ifndef WIN32 - #define WIN32 - #endif - - /*###################################### - ## This is for require-config.h, whose - ## purpose I cannot fathom. - ######################################*/ - - #define PACKAGE_TARNAME - - /*###################################### - #### RESOURCE DIRECTORIES - ######################################*/ - - #define INKSCAPE_DATADIR "." - #define PACKAGE_LOCALE_DIR "locale" - - - /*###################################### - #### OTHER DEFINITIONS - ######################################*/ - - #define GETTEXT_PACKAGE "inkscape" - - #define PACKAGE_STRING VERSION - - #define HAVE_GETOPT_H 1 - #define HAVE_STRING_H 1 - #define HAVE_LIBINTL_H 1 - #define HAVE_MALLOC_H 1 - #define HAVE_STDLIB_H 1 - #define HAVE_SYS_STAT_H 1 - #define HAVE_INTTYPES_H 1 - #define HAVE_OPENMP 1 - #define HAVE_TR1_UNORDERED_SET 1 - - #define HAVE_LIBLCMS2 1 - - #define ENABLE_NLS 1 - #define HAVE_BIND_TEXTDOMAIN_CODESET 1 - - /* keep binreloc off */ - #define BR_PTHREADS 0 - #undef ENABLE_BINRELOC - - /* CairoPDF options */ - #define HAVE_CAIRO_PDF 1 - #define PANGO_ENABLE_ENGINE 1 - #define RENDER_WITH_PANGO_CAIRO 1 - - #define HAVE_GTK_WINDOW_FULLSCREEN 1 - - /* internal interpreter */ - #define WITH_PYTHON 1 - - /* use poppler for pdf import? */ - #define HAVE_POPPLER 1 - #define HAVE_POPPLER_GLIB 1 - #define HAVE_POPPLER_CAIRO 1 - - /* do we want bitmap manipulation? */ - #define WITH_IMAGE_MAGICK 1 - - /* Exif and JPEG support for image resolution import */ - #define HAVE_EXIF 1 - #define HAVE_JPEG 1 - - /* Allow reading WordPerfect? */ - #define WITH_LIBWPG 1 - - /* Default to libwpg 0.2.x */ - #define WITH_LIBWPG02 1 - - /* Visio import filter */ - #define WITH_LIBVISIO 1 - /* Librevenge based filter */ - #define WITH_LIBVISIO01 1 - - /* Corel Draw import filter */ - #define WITH_LIBCDR 1 - /* Librevenge based filter */ - #define WITH_LIBCDR01 1 - - /* Do we support SVG Fonts? */ - #define ENABLE_SVG_FONTS 1 - - /* Do we want experimental, unsupported, unguaranteed, etc., LivePathEffects enabled? */ - //#define LPE_ENABLE_TEST_EFFECTS 1 - - /* Do we want experimental, unsupported, unguaranteed, etc., SVG2 features enabled? */ - //#define WITH_SVG2 1 - //#define WITH_CSSCOMPOSITE 1 - //#define WITH_CSSBLEND 1 - //#define WITH_MESH 1 - - #define HAVE_ASPELL 1 - - #define HAVE_POTRACE 1 - - #endif /* _CONFIG_H_ */ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Wall -Wformat -Werror=format-security -Wextra -Wpointer-arith -Wcast-align -Wsign-compare -Wswitch - -Werror=return-type - - - -Wno-error=pointer-sign - -Wno-error=unused-parameter -Wno-error=unused-but-set-variable -Wno-error=strict-overflow -Wno-error=write-strings - - -Wno-error=format -Wno-error=format-extra-args - -O2 - -mms-bitfields - -fopenmp - - - - -Woverloaded-virtual - - - -DVERSION=\"${version}\" - -DHAVE_CONFIG_H - -D_INTL_REDIRECT_INLINE - -DHAVE_SSL - -DRELAYTOOL_SSL="static const int libssl_is_present=1; static int __attribute__((unused)) libssl_symbol_is_present(char *s){ return 1; }" - -DPOPPLER_NEW_GFXFONT - -DPOPPLER_NEW_GFXPATCH - -DPOPPLER_NEW_ERRORAPI - -DPOPPLER_EVEN_NEWER_COLOR_SPACE_API - -DPOPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API - - -DGLIBMM_DISABLE_DEPRECATED - -DG_DISABLE_DEPRECATED - -DGTK_DISABLE_SINGLE_INCLUDES - - - -DGDKMM_DISABLE_DEPRECATED - -DGSEAL_ENABLE - - - -I${devlibs}/include - - ${pcc.gtkmm-2.4} - ${pcc.gmodule-2.0} - - ${pcc.Magick++} - ${pcc.libxml-2.0} - ${pcc.freetype2} - ${pcc.cairo} - ${pcc.poppler} - -I${devlibs}/include/gc - -I${devlibs}/include/potracelib - ${pcc.librevenge-0.0} ${pcc.librevenge-stream-0.0} - ${pcc.libwpg-0.2} ${pcc.libvisio-0.1} ${pcc.libcdr-0.1} - -I${cxxtest} - - - - -I${devlibs}/python/include - - - - - - - - - - - - - - - - - - - - - - - - - --include-dir=${src} - - - - - -mwindows - -mthreads - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.gmodule-2.0} - ${pcl.gtkmm-2.4} ${pcl.pangoft2} ${pcl.gthread-2.0} - ${devlibs}/bin/libxml2.dll - ${devlibs}/bin/libxslt.dll - ${devlibs}/bin/libexslt.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-0.0} ${pcl.librevenge-stream-0.0} - ${pcl.libwpg-0.2} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lpthreadGC2 -laspell - -lmscms - - - - - - - - - - -mconsole - -mthreads - - - - - - - - - - - - - - --include-dir=${src} - - - - - -mwindows - -mthreads - - - - - - - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.gtkmm-2.4} ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gmodule-2.0} - ${devlibs}/bin/libxml2.dll - ${devlibs}/bin/libxslt.dll - ${devlibs}/bin/libexslt.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-0.0} ${pcl.librevenge-stream-0.0} - ${pcl.libwpg-0.2} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lpthreadGC2 -laspell - -lmscms - - - - - - - - - - - - -mconsole - -mthreads - - - - - - - - - - - - -L${devlibs}/lib - ${pcl.poppler-cairo} ${pcl.poppler-glib} ${pcl.poppler} - ${pcl.gtkmm-2.4} ${pcl.pangoft2} ${pcl.gthread-2.0} - ${pcl.gmodule-2.0} - ${devlibs}/bin/libxml2.dll - ${devlibs}/bin/libxslt.dll - ${devlibs}/bin/libexslt.dll - ${pcl.cairo} ${pcl.cairomm-1.0} - ${pcl.librevenge-0.0} ${pcl.librevenge-stream-0.0} - ${pcl.libwpg-0.2} ${pcl.libvisio-0.1} ${pcl.libcdr-0.1} - -liconv - ${pcl.Magick++} - ${pcl.fontconfig} ${pcl.freetype2} - ${pcl.lcms2} - ${pcl.gsl} - -lpng -ljpeg -ltiff -lexif -lpopt -lz - -lgc -lpotrace - -lws2_32 -lintl -lgdi32 -lcomdlg32 -lm - -lgomp -lpthreadGC2 -laspell - -lmscms - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - gtk-icon-sizes = "gtk-menu=16,16:gtk-small-toolbar=16,16:gtk-large-toolbar=24,24:gtk-dnd=32,32:inkscape-decoration=16,16" - gtk-toolbar-icon-size = small-toolbar - - # disable images in buttons. i've only seen ugly delphi apps use this feature. - gtk-button-images = 0 - - # disable the annoying beep in editable controls - gtk-error-bell = 0 - - # enable/disable images in menus. most "stock" microsoft apps don't use these, except sparingly. - # the office apps use them heavily, though. - gtk-menu-images = 1 - - # use the win32 button ordering instead of the GNOME HIG one, where applicable - gtk-alternative-button-order = 1 - - style "msw-default" - { - GtkWidget::interior-focus = 1 - GtkOptionMenu::indicator-size = { 9, 5 } - GtkOptionMenu::indicator-spacing = { 7, 5, 2, 2 } - GtkSpinButton::shadow-type = in - - # Owen and I disagree that these should be themable - #GtkUIManager::add-tearoffs = 0 - #GtkComboBox::add-tearoffs = 0 - - GtkComboBox::appears-as-list = 1 - GtkComboBox::focus-on-click = 0 - - GOComboBox::add_tearoffs = 0 - - GtkTreeView::allow-rules = 0 - GtkTreeView::expander-size = 12 - - GtkExpander::expander-size = 12 - - GtkScrolledWindow::scrollbar_spacing = 1 - - GtkSeparatorMenuItem::horizontal-padding = 2 - - engine "wimp" - { - } - } - class "*" style "msw-default" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/buildtool.cpp b/buildtool.cpp deleted file mode 100644 index a64340e24..000000000 --- a/buildtool.cpp +++ /dev/null @@ -1,10334 +0,0 @@ -/** - * Simple build automation tool. - * - * Authors: - * Bob Jamison - * Jasper van de Gronde - * Johan Engelen - * - * Copyright (C) 2006-2008 Bob Jamison - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * To use this file, compile with: - *
- * g++ -O3 buildtool.cpp -o btool.exe -fopenmp
- * (or whatever your compiler might be)
- * Then
- * btool
- * or
- * btool {target}
- *
- * Note: if you are using MinGW, and a not very recent version of it,
- * gettimeofday() might be missing.  If so, just build this file with
- * this command:
- * g++ -O3 -DNEED_GETTIMEOFDAY buildtool.cpp -o btool.exe -fopenmp
- *
- */
-
-#define BUILDTOOL_VERSION  "BuildTool v0.9.9multi"
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-
-#ifdef __WIN32__
-#define WIN32_LEAN_AND_MEAN
-#define NOGDI
-#include 
-#endif
-
-#include 
-
-
-//########################################################################
-//# Definition of gettimeofday() for those who don't have it
-//########################################################################
-#ifdef NEED_GETTIMEOFDAY
-#include 
-
-struct timezone {
-      int tz_minuteswest; /* minutes west of Greenwich */
-      int tz_dsttime;     /* type of dst correction */
-    };
-
-static int gettimeofday (struct timeval *tv, struct timezone *tz)
-{
-   struct _timeb tb;
-
-   if (!tv)
-      return (-1);
-
-    _ftime (&tb);
-    tv->tv_sec  = tb.time;
-    tv->tv_usec = tb.millitm * 1000 + 500;
-    if (tz)
-        {
-        tz->tz_minuteswest = -60 * _timezone;
-        tz->tz_dsttime = _daylight;
-        }
-    return 0;
-}
-
-#endif
-
-
-
-
-
-
-
-namespace buildtool
-{
-
-
-
-
-//########################################################################
-//########################################################################
-//##  R E G E X P
-//########################################################################
-//########################################################################
-
-/**
- * This is the SLRE (Super Light Regular Expression library)
- * SLRE is an ISO C library that implements a subset of Perl
- * regular expression syntax.
- *
- * See https://github.com/cesanta/slre for details
- *
- * It's clean code and small size allow us to
- * embed it in BuildTool without adding a dependency
- *
- */    
-
-//begin slre.h
-
-/*
- * Copyright (c) 2004-2013 Sergey Lyubka 
- * Copyright (c) 2013 Cesanta Software Limited
- * All rights reserved
- *
- * This library is dual-licensed: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation. For the terms of this
- * license, see .
- *
- * You are free to use this library under the terms of the GNU General
- * Public License, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * Alternatively, you can license this library under a commercial
- * license, as set out in .
- */
-
-/*
- * This is a regular expression library that implements a subset of Perl RE.
- * Please refer to README.md for a detailed reference.
- */
-
-#ifndef SLRE_HEADER_DEFINED
-#define SLRE_HEADER_DEFINED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct slre_cap {
-  const char *ptr;
-  int len;
-};
-
-
-int slre_match(const char *regexp, const char *buf, int buf_len,
-               struct slre_cap *caps, int num_caps, int flags);
-
-/* Possible flags for slre_match() */
-enum { SLRE_IGNORE_CASE = 1 };
-
-
-/* slre_match() failure codes */
-#define SLRE_NO_MATCH               -1
-#define SLRE_UNEXPECTED_QUANTIFIER  -2
-#define SLRE_UNBALANCED_BRACKETS    -3
-#define SLRE_INTERNAL_ERROR         -4
-#define SLRE_INVALID_CHARACTER_SET  -5
-#define SLRE_INVALID_METACHARACTER  -6
-#define SLRE_CAPS_ARRAY_TOO_SMALL   -7
-#define SLRE_TOO_MANY_BRANCHES      -8
-#define SLRE_TOO_MANY_BRACKETS      -9
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* SLRE_HEADER_DEFINED */
-
-//end slre.h
-
-//start slre.c
-
-/*
- * Copyright (c) 2004-2013 Sergey Lyubka 
- * Copyright (c) 2013 Cesanta Software Limited
- * All rights reserved
- *
- * This library is dual-licensed: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation. For the terms of this
- * license, see .
- *
- * You are free to use this library under the terms of the GNU General
- * Public License, but WITHOUT ANY WARRANTY; without even the implied
- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * Alternatively, you can license this library under a commercial
- * license, as set out in .
- */
-
-#include 
-#include 
-#include 
-
-//#include "slre.h"
-
-#define MAX_BRANCHES 100
-#define MAX_BRACKETS 100
-#define FAIL_IF(condition, error_code) if (condition) return (error_code)
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(ar) (sizeof(ar) / sizeof((ar)[0]))
-#endif
-
-#ifdef SLRE_DEBUG
-#define DBG(x) printf x
-#else
-#define DBG(x)
-#endif
-
-struct bracket_pair {
-  const char *ptr;  /* Points to the first char after '(' in regex  */
-  int len;          /* Length of the text between '(' and ')'       */
-  int branches;     /* Index in the branches array for this pair    */
-  int num_branches; /* Number of '|' in this bracket pair           */
-};
-
-struct branch {
-  int bracket_index;    /* index for 'struct bracket_pair brackets' */
-                        /* array defined below                      */
-  const char *schlong;  /* points to the '|' character in the regex */
-};
-
-struct regex_info {
-  /*
-   * Describes all bracket pairs in the regular expression.
-   * First entry is always present, and grabs the whole regex.
-   */
-  struct bracket_pair brackets[MAX_BRACKETS];
-  int num_brackets;
-
-  /*
-   * Describes alternations ('|' operators) in the regular expression.
-   * Each branch falls into a specific branch pair.
-   */
-  struct branch branches[MAX_BRANCHES];
-  int num_branches;
-
-  /* Array of captures provided by the user */
-  struct slre_cap *caps;
-  int num_caps;
-
-  /* E.g. SLRE_IGNORE_CASE. See enum below */
-  int flags;
-};
-
-static int is_metacharacter(const unsigned char *s) {
-  static const char *metacharacters = "^$().[]*+?|\\Ssdbfnrtv";
-  return strchr(metacharacters, *s) != NULL;
-}
-
-static int op_len(const char *re) {
-  return re[0] == '\\' && re[1] == 'x' ? 4 : re[0] == '\\' ? 2 : 1;
-}
-
-static int set_len(const char *re, int re_len) {
-  int len = 0;
-
-  while (len < re_len && re[len] != ']') {
-    len += op_len(re + len);
-  }
-
-  return len <= re_len ? len + 1 : -1;
-}
-
-static int get_op_len(const char *re, int re_len) {
-  return re[0] == '[' ? set_len(re + 1, re_len - 1) + 1 : op_len(re);
-}
-
-static int is_quantifier(const char *re) {
-  return re[0] == '*' || re[0] == '+' || re[0] == '?';
-}
-
-static int toi(int x) {
-  return isdigit(x) ? x - '0' : x - 'W';
-}
-
-static int hextoi(const unsigned char *s) {
-  return (toi(tolower(s[0])) << 4) | toi(tolower(s[1]));
-}
-
-static int match_op(const unsigned char *re, const unsigned char *s,
-                    struct regex_info *info) {
-  int result = 0;
-  switch (*re) {
-    case '\\':
-      /* Metacharacters */
-      switch (re[1]) {
-        case 'S': FAIL_IF(isspace(*s), SLRE_NO_MATCH); result++; break;
-        case 's': FAIL_IF(!isspace(*s), SLRE_NO_MATCH); result++; break;
-        case 'd': FAIL_IF(!isdigit(*s), SLRE_NO_MATCH); result++; break;
-        case 'b': FAIL_IF(*s != '\b', SLRE_NO_MATCH); result++; break;
-        case 'f': FAIL_IF(*s != '\f', SLRE_NO_MATCH); result++; break;
-        case 'n': FAIL_IF(*s != '\n', SLRE_NO_MATCH); result++; break;
-        case 'r': FAIL_IF(*s != '\r', SLRE_NO_MATCH); result++; break;
-        case 't': FAIL_IF(*s != '\t', SLRE_NO_MATCH); result++; break;
-        case 'v': FAIL_IF(*s != '\v', SLRE_NO_MATCH); result++; break;
-
-        case 'x':
-          /* Match byte, \xHH where HH is hexadecimal byte representaion */
-          FAIL_IF(hextoi(re + 2) != *s, SLRE_NO_MATCH);
-          result++;
-          break;
-
-        default:
-          /* Valid metacharacter check is done in bar() */
-          FAIL_IF(re[1] != s[0], SLRE_NO_MATCH);
-          result++;
-          break;
-      }
-      break;
-
-    case '|': FAIL_IF(1, SLRE_INTERNAL_ERROR); break;
-    case '$': FAIL_IF(1, SLRE_NO_MATCH); break;
-    case '.': result++; break;
-
-    default:
-      if (info->flags & SLRE_IGNORE_CASE) {
-        FAIL_IF(tolower(*re) != tolower(*s), SLRE_NO_MATCH);
-      } else {
-        FAIL_IF(*re != *s, SLRE_NO_MATCH);
-      }
-      result++;
-      break;
-  }
-
-  return result;
-}
-
-static int match_set(const char *re, int re_len, const char *s,
-                     struct regex_info *info) {
-  int len = 0, result = -1, invert = re[0] == '^';
-
-  if (invert) re++, re_len--;
-
-  while (len <= re_len && re[len] != ']' && result <= 0) {
-    /* Support character range */
-    if (re[len] != '-' && re[len + 1] == '-' && re[len + 2] != ']' &&
-        re[len + 2] != '\0') {
-      result = info->flags &  SLRE_IGNORE_CASE ?
-        tolower(*s) >= tolower(re[len]) && tolower(*s) <= tolower(re[len + 2]) :
-        *s >= re[len] && *s <= re[len + 2];
-      len += 3;
-    } else {
-      result = match_op((unsigned char *) re + len, (unsigned char *) s, info);
-      len += op_len(re + len);
-    }
-  }
-  return (!invert && result > 0) || (invert && result <= 0) ? 1 : -1;
-}
-
-static int doh(const char *s, int s_len, struct regex_info *info, int bi);
-
-static int bar(const char *re, int re_len, const char *s, int s_len,
-               struct regex_info *info, int bi) {
-  /* i is offset in re, j is offset in s, bi is brackets index */
-  int i, j, n, step;
-
-  for (i = j = 0; i < re_len && j <= s_len; i += step) {
-
-    /* Handle quantifiers. Get the length of the chunk. */
-    step = re[i] == '(' ? info->brackets[bi + 1].len + 2 :
-      get_op_len(re + i, re_len - i);
-
-    DBG(("%s [%.*s] [%.*s] re_len=%d step=%d i=%d j=%d\n", __func__,
-         re_len - i, re + i, s_len - j, s + j, re_len, step, i, j));
-
-    FAIL_IF(is_quantifier(&re[i]), SLRE_UNEXPECTED_QUANTIFIER);
-    FAIL_IF(step <= 0, SLRE_INVALID_CHARACTER_SET);
-
-    if (i + step < re_len && is_quantifier(re + i + step)) {
-      DBG(("QUANTIFIER: [%.*s]%c [%.*s]\n", step, re + i,
-           re[i + step], s_len - j, s + j));
-      if (re[i + step] == '?') {
-        int result = bar(re + i, step, s + j, s_len - j, info, bi);
-        j += result > 0 ? result : 0;
-        i++;
-      } else if (re[i + step] == '+' || re[i + step] == '*') {
-        int j2 = j, nj = j, n1, n2 = -1, ni, non_greedy = 0;
-
-        /* Points to the regexp code after the quantifier */
-        ni = i + step + 1;
-        if (ni < re_len && re[ni] == '?') {
-          non_greedy = 1;
-          ni++;
-        }
-
-        do {
-          if ((n1 = bar(re + i, step, s + j2, s_len - j2, info, bi)) > 0) {
-            j2 += n1;
-          }
-          if (re[i + step] == '+' && n1 < 0) break;
-
-          if (ni >= re_len) {
-            /* After quantifier, there is nothing */
-            nj = j2;
-          } else if ((n2 = bar(re + ni, re_len - ni, s + j2,
-                               s_len - j2, info, bi)) >= 0) {
-            /* Regex after quantifier matched */
-            nj = j2 + n2;
-          }
-          if (nj > j && non_greedy) break;
-        } while (n1 > 0);
-
-        /*
-         * Even if we found one or more pattern, this branch will be executed,
-         * changing the next captures.
-         */
-        if (n1 < 0 && n2 < 0 && re[i + step] == '*' &&
-            (n2 = bar(re + ni, re_len - ni, s + j, s_len - j, info, bi)) > 0) {
-          nj = j + n2;
-        }
-
-        DBG(("STAR/PLUS END: %d %d %d %d %d\n", j, nj, re_len - ni, n1, n2));
-        FAIL_IF(re[i + step] == '+' && nj == j, SLRE_NO_MATCH);
-
-        /* If while loop body above was not executed for the * quantifier,  */
-        /* make sure the rest of the regex matches                          */
-        FAIL_IF(nj == j && ni < re_len && n2 < 0, SLRE_NO_MATCH);
-
-        /* Returning here cause we've matched the rest of RE already */
-        return nj;
-      }
-      continue;
-    }
-
-    if (re[i] == '[') {
-      n = match_set(re + i + 1, re_len - (i + 2), s + j, info);
-      DBG(("SET %.*s [%.*s] -> %d\n", step, re + i, s_len - j, s + j, n));
-      FAIL_IF(n <= 0, SLRE_NO_MATCH);
-      j += n;
-    } else if (re[i] == '(') {
-      n = SLRE_NO_MATCH;
-      bi++;
-      FAIL_IF(bi >= info->num_brackets, SLRE_INTERNAL_ERROR);
-      DBG(("CAPTURING [%.*s] [%.*s] [%s]\n",
-           step, re + i, s_len - j, s + j, re + i + step));
-
-      if (re_len - (i + step) <= 0) {
-        /* Nothing follows brackets */
-        n = doh(s + j, s_len - j, info, bi);
-      } else {
-        int j2;
-        for (j2 = 0; j2 <= s_len - j; j2++) {
-          if ((n = doh(s + j, s_len - (j + j2), info, bi)) >= 0 &&
-              bar(re + i + step, re_len - (i + step),
-                  s + j + n, s_len - (j + n), info, bi) >= 0) break;
-        }
-      }
-
-      DBG(("CAPTURED [%.*s] [%.*s]:%d\n", step, re + i, s_len - j, s + j, n));
-      FAIL_IF(n < 0, n);
-      if (info->caps != NULL && n > 0) {
-        info->caps[bi - 1].ptr = s + j;
-        info->caps[bi - 1].len = n;
-      }
-      j += n;
-    } else if (re[i] == '^') {
-      FAIL_IF(j != 0, SLRE_NO_MATCH);
-    } else if (re[i] == '$') {
-      FAIL_IF(j != s_len, SLRE_NO_MATCH);
-    } else {
-      FAIL_IF(j >= s_len, SLRE_NO_MATCH);
-      n = match_op((unsigned char *) (re + i), (unsigned char *) (s + j), info);
-      FAIL_IF(n <= 0, n);
-      j += n;
-    }
-  }
-
-  return j;
-}
-
-/* Process branch points */
-static int doh(const char *s, int s_len, struct regex_info *info, int bi) {
-  const struct bracket_pair *b = &info->brackets[bi];
-  int i = 0, len, result;
-  const char *p;
-
-  do {
-    p = i == 0 ? b->ptr : info->branches[b->branches + i - 1].schlong + 1;
-    len = b->num_branches == 0 ? b->len :
-      i == b->num_branches ? (int) (b->ptr + b->len - p) :
-      (int) (info->branches[b->branches + i].schlong - p);
-    DBG(("%s %d %d [%.*s] [%.*s]\n", __func__, bi, i, len, p, s_len, s));
-    result = bar(p, len, s, s_len, info, bi);
-    DBG(("%s <- %d\n", __func__, result));
-  } while (result <= 0 && i++ < b->num_branches);  /* At least 1 iteration */
-
-  return result;
-}
-
-static int baz(const char *s, int s_len, struct regex_info *info) {
-  int i, result = -1, is_anchored = info->brackets[0].ptr[0] == '^';
-
-  for (i = 0; i <= s_len; i++) {
-    result = doh(s + i, s_len - i, info, 0);
-    if (result >= 0) {
-      result += i;
-      break;
-    }
-    if (is_anchored) break;
-  }
-
-  return result;
-}
-
-static void setup_branch_points(struct regex_info *info) {
-  int i, j;
-  struct branch tmp;
-
-  /* First, sort branches. Must be stable, no qsort. Use bubble algo. */
-  for (i = 0; i < info->num_branches; i++) {
-    for (j = i + 1; j < info->num_branches; j++) {
-      if (info->branches[i].bracket_index > info->branches[j].bracket_index) {
-        tmp = info->branches[i];
-        info->branches[i] = info->branches[j];
-        info->branches[j] = tmp;
-      }
-    }
-  }
-
-  /*
-   * For each bracket, set their branch points. This way, for every bracket
-   * (i.e. every chunk of regex) we know all branch points before matching.
-   */
-  for (i = j = 0; i < info->num_brackets; i++) {
-    info->brackets[i].num_branches = 0;
-    info->brackets[i].branches = j;
-    while (j < info->num_branches && info->branches[j].bracket_index == i) {
-      info->brackets[i].num_branches++;
-      j++;
-    }
-  }
-}
-
-static int foo(const char *re, int re_len, const char *s, int s_len,
-               struct regex_info *info) {
-  int i, step, depth = 0;
-
-  /* First bracket captures everything */
-  info->brackets[0].ptr = re;
-  info->brackets[0].len = re_len;
-  info->num_brackets = 1;
-
-  /* Make a single pass over regex string, memorize brackets and branches */
-  for (i = 0; i < re_len; i += step) {
-    step = get_op_len(re + i, re_len - i);
-
-    if (re[i] == '|') {
-      FAIL_IF(info->num_branches >= (int) ARRAY_SIZE(info->branches),
-              SLRE_TOO_MANY_BRANCHES);
-      info->branches[info->num_branches].bracket_index =
-        info->brackets[info->num_brackets - 1].len == -1 ?
-        info->num_brackets - 1 : depth;
-      info->branches[info->num_branches].schlong = &re[i];
-      info->num_branches++;
-    } else if (re[i] == '\\') {
-      FAIL_IF(i >= re_len - 1, SLRE_INVALID_METACHARACTER);
-      if (re[i + 1] == 'x') {
-        /* Hex digit specification must follow */
-        FAIL_IF(re[i + 1] == 'x' && i >= re_len - 3,
-                SLRE_INVALID_METACHARACTER);
-        FAIL_IF(re[i + 1] ==  'x' && !(isxdigit(re[i + 2]) &&
-                isxdigit(re[i + 3])), SLRE_INVALID_METACHARACTER);
-      } else {
-        FAIL_IF(!is_metacharacter((unsigned char *) re + i + 1),
-                SLRE_INVALID_METACHARACTER);
-      }
-    } else if (re[i] == '(') {
-      FAIL_IF(info->num_brackets >= (int) ARRAY_SIZE(info->brackets),
-              SLRE_TOO_MANY_BRACKETS);
-      depth++;  /* Order is important here. Depth increments first. */
-      info->brackets[info->num_brackets].ptr = re + i + 1;
-      info->brackets[info->num_brackets].len = -1;
-      info->num_brackets++;
-      FAIL_IF(info->num_caps > 0 && info->num_brackets - 1 > info->num_caps,
-              SLRE_CAPS_ARRAY_TOO_SMALL);
-    } else if (re[i] == ')') {
-      int ind = info->brackets[info->num_brackets - 1].len == -1 ?
-        info->num_brackets - 1 : depth;
-      info->brackets[ind].len = (int) (&re[i] - info->brackets[ind].ptr);
-      DBG(("SETTING BRACKET %d [%.*s]\n",
-           ind, info->brackets[ind].len, info->brackets[ind].ptr));
-      depth--;
-      FAIL_IF(depth < 0, SLRE_UNBALANCED_BRACKETS);
-      FAIL_IF(i > 0 && re[i - 1] == '(', SLRE_NO_MATCH);
-    }
-  }
-
-  FAIL_IF(depth != 0, SLRE_UNBALANCED_BRACKETS);
-  setup_branch_points(info);
-
-  return baz(s, s_len, info);
-}
-
-int slre_match(const char *regexp, const char *s, int s_len,
-               struct slre_cap *caps, int num_caps, int flags) {
-  struct regex_info info;
-
-  /* Initialize info structure */
-  info.flags = flags;
-  info.num_brackets = info.num_branches = 0;
-  info.num_caps = num_caps;
-  info.caps = caps;
-
-  DBG(("========================> [%s] [%.*s]\n", regexp, s_len, s));
-  return foo(regexp, (int) strlen(regexp), s, s_len, &info);
-}
-
-//end slre.c
-
-//########################################################################
-//########################################################################
-//##  E N D    R E G E X P
-//########################################################################
-//########################################################################
-
-
-
-
-
-//########################################################################
-//########################################################################
-//##  X M L
-//########################################################################
-//########################################################################
-
-// Note:  This mini-dom library comes from Pedro, another little project
-// of mine.
-
-typedef std::string String;
-typedef unsigned int XMLCh;
-
-
-class Namespace
-{
-public:
-    Namespace()
-        {}
-
-    Namespace(const String &prefixArg, const String &namespaceURIArg)
-        {
-        prefix       = prefixArg;
-        namespaceURI = namespaceURIArg;
-        }
-
-    Namespace(const Namespace &other)
-        {
-        assign(other);
-        }
-
-    Namespace &operator=(const Namespace &other)
-        {
-        assign(other);
-        return *this;
-        }
-
-    virtual ~Namespace()
-        {}
-
-    virtual String getPrefix()
-        { return prefix; }
-
-    virtual String getNamespaceURI()
-        { return namespaceURI; }
-
-protected:
-
-    void assign(const Namespace &other)
-        {
-        prefix       = other.prefix;
-        namespaceURI = other.namespaceURI;
-        }
-
-    String prefix;
-    String namespaceURI;
-
-};
-
-class Attribute
-{
-public:
-    Attribute()
-        {}
-
-    Attribute(const String &nameArg, const String &valueArg)
-        {
-        name  = nameArg;
-        value = valueArg;
-        }
-
-    Attribute(const Attribute &other)
-        {
-        assign(other);
-        }
-
-    Attribute &operator=(const Attribute &other)
-        {
-        assign(other);
-        return *this;
-        }
-
-    virtual ~Attribute()
-        {}
-
-    virtual String getName()
-        { return name; }
-
-    virtual String getValue()
-        { return value; }
-
-protected:
-
-    void assign(const Attribute &other)
-        {
-        name  = other.name;
-        value = other.value;
-        }
-
-    String name;
-    String value;
-
-};
-
-
-class Element
-{
-friend class Parser;
-
-public:
-    Element()
-        {
-        init();
-        }
-
-    Element(const String &nameArg)
-        {
-        init();
-        name   = nameArg;
-        }
-
-    Element(const String &nameArg, const String &valueArg)
-        {
-        init();
-        name   = nameArg;
-        value  = valueArg;
-        }
-
-    Element(const Element &other)
-        {
-        assign(other);
-        }
-
-    Element &operator=(const Element &other)
-        {
-        assign(other);
-        return *this;
-        }
-
-    virtual Element *clone();
-
-    virtual ~Element()
-        {
-        for (std::size_t i=0 ; i getChildren()
-        { return children; }
-
-    std::vector findElements(const String &name);
-
-    String getAttribute(const String &name);
-
-    std::vector &getAttributes()
-        { return attributes; } 
-
-    String getTagAttribute(const String &tagName, const String &attrName);
-
-    String getTagValue(const String &tagName);
-
-    void addChild(Element *child);
-
-    void addAttribute(const String &name, const String &value);
-
-    void addNamespace(const String &prefix, const String &namespaceURI);
-
-
-    /**
-     * Prettyprint an XML tree to an output stream.  Elements are indented
-     * according to element hierarchy.
-     * @param f a stream to receive the output
-     * @param elem the element to output
-     */
-    void writeIndented(FILE *f);
-
-    /**
-     * Prettyprint an XML tree to standard output.  This is the equivalent of
-     * writeIndented(stdout).
-     * @param elem the element to output
-     */
-    void print();
-    
-    int getLine()
-        { return line; }
-
-protected:
-
-    void init()
-        {
-        parent = NULL;
-        line   = 0;
-        }
-
-    void assign(const Element &other)
-        {
-        parent     = other.parent;
-        children   = other.children;
-        attributes = other.attributes;
-        namespaces = other.namespaces;
-        name       = other.name;
-        value      = other.value;
-        line       = other.line;
-        }
-
-    void findElementsRecursive(std::vector&res, const String &name);
-
-    void writeIndentedRecursive(FILE *f, int indent);
-
-    Element *parent;
-
-    std::vectorchildren;
-
-    std::vector attributes;
-    std::vector namespaces;
-
-    String name;
-    String value;
-    
-    int line;
-};
-
-
-
-
-
-class Parser
-{
-public:
-    /**
-     * Constructor
-     */
-    Parser()
-        { init(); }
-
-    virtual ~Parser()
-        {}
-
-    /**
-     * Parse XML in a char buffer.
-     * @param buf a character buffer to parse
-     * @param pos position to start parsing
-     * @param len number of chars, from pos, to parse.
-     * @return a pointer to the root of the XML document;
-     */
-    Element *parse(const char *buf,int pos,int len);
-
-    /**
-     * Parse XML in a char buffer.
-     * @param buf a character buffer to parse
-     * @param pos position to start parsing
-     * @param len number of chars, from pos, to parse.
-     * @return a pointer to the root of the XML document;
-     */
-    Element *parse(const String &buf);
-
-    /**
-     * Parse a named XML file.  The file is loaded like a data file;
-     * the original format is not preserved.
-     * @param fileName the name of the file to read
-     * @return a pointer to the root of the XML document;
-     */
-    Element *parseFile(const String &fileName);
-
-    /**
-     * Utility method to preprocess a string for XML
-     * output, escaping its entities.
-     * @param str the string to encode
-     */
-    static String encode(const String &str);
-
-    /**
-     *  Removes whitespace from beginning and end of a string
-     */
-    String trim(const String &s);
-
-private:
-
-    void init()
-        {
-        keepGoing       = true;
-        currentNode     = NULL;
-        parselen        = 0;
-        parsebuf        = NULL;
-        currentPosition = 0;
-        }
-
-    int countLines(int begin, int end);
-
-    void getLineAndColumn(int pos, int *lineNr, int *colNr);
-
-    void error(const char *fmt, ...);
-
-    int peek(int pos);
-
-    int match(int pos, const char *text);
-
-    int skipwhite(int p);
-
-    int getWord(int p0, String &buf);
-
-    int getQuoted(int p0, String &buf, int do_i_parse);
-
-    int parseVersion(int p0);
-
-    int parseDoctype(int p0);
-
-    int parseElement(int p0, Element *par,int depth);
-
-    Element *parse(XMLCh *buf,int pos,int len);
-
-    bool       keepGoing;
-    Element    *currentNode;
-    int        parselen;
-    XMLCh      *parsebuf;
-    String     cdatabuf;
-    int        currentPosition;
-};
-
-
-
-
-//########################################################################
-//# E L E M E N T
-//########################################################################
-
-Element *Element::clone()
-{
-    Element *elem = new Element(name, value);
-    elem->parent     = parent;
-    elem->attributes = attributes;
-    elem->namespaces = namespaces;
-    elem->line       = line;
-
-    std::vector::iterator iter;
-    for (iter = children.begin(); iter != children.end() ; iter++)
-        {
-        elem->addChild((*iter)->clone());
-        }
-    return elem;
-}
-
-
-void Element::findElementsRecursive(std::vector&res, const String &name)
-{
-    if (getName() == name)
-        {
-        res.push_back(this);
-        }
-    for (std::size_t i=0; ifindElementsRecursive(res, name);
-}
-
-std::vector Element::findElements(const String &name)
-{
-    std::vector res;
-    findElementsRecursive(res, name);
-    return res;
-}
-
-String Element::getAttribute(const String &name)
-{
-    for (std::size_t i=0 ; ielems = findElements(tagName);
-    if (elems.size() <1)
-        return "";
-    String res = elems[0]->getAttribute(attrName);
-    return res;
-}
-
-String Element::getTagValue(const String &tagName)
-{
-    std::vectorelems = findElements(tagName);
-    if (elems.size() <1)
-        return "";
-    String res = elems[0]->getValue();
-    return res;
-}
-
-void Element::addChild(Element *child)
-{
-    if (!child)
-        return;
-    child->parent = this;
-    children.push_back(child);
-}
-
-
-void Element::addAttribute(const String &name, const String &value)
-{
-    Attribute attr(name, value);
-    attributes.push_back(attr);
-}
-
-void Element::addNamespace(const String &prefix, const String &namespaceURI)
-{
-    Namespace ns(prefix, namespaceURI);
-    namespaces.push_back(ns);
-}
-
-void Element::writeIndentedRecursive(FILE *f, int indent)
-{
-    int i;
-    if (!f)
-        return;
-    //Opening tag, and attributes
-    for (i=0;i\n");
-
-    //Between the tags
-    if (value.size() > 0)
-        {
-        for (int i=0;iwriteIndentedRecursive(f, indent+2);
-
-    //Closing tag
-    for (int i=0; i\n", name.c_str());
-}
-
-void Element::writeIndented(FILE *f)
-{
-    writeIndentedRecursive(f, 0);
-}
-
-void Element::print()
-{
-    writeIndented(stdout);
-}
-
-
-//########################################################################
-//# P A R S E R
-//########################################################################
-
-
-
-typedef struct
-    {
-    const char *escaped;
-    char value;
-    } EntityEntry;
-
-static EntityEntry entities[] =
-{
-    { "&" , '&'  },
-    { "<"  , '<'  },
-    { ">"  , '>'  },
-    { "'", '\'' },
-    { """, '"'  },
-    { NULL    , '\0' }
-};
-
-
-
-/**
- *  Removes whitespace from beginning and end of a string
- */
-String Parser::trim(const String &s)
-{
-    if (s.size() < 1)
-        return s;
-    
-    //Find first non-ws char
-    std::size_t begin = 0;
-    for ( ; begin < s.size() ; begin++)
-        {
-        if (!isspace(s[begin]))
-            break;
-        }
-
-    //Find first non-ws char, going in reverse
-    std::size_t end = s.size() - 1;
-    for ( ; end > begin ; end--)
-        {
-        if (!isspace(s[end]))
-            break;
-        }
-    //trace("begin:%d  end:%d", begin, end);
-
-    String res = s.substr(begin, end-begin+1);
-    return res;
-}
-
-
-int Parser::countLines(int begin, int end)
-{
-    int count = 0;
-    for (int i=begin ; i= parselen)
-        return -1;
-    currentPosition = pos;
-    int ch = parsebuf[pos];
-    //printf("ch:%c\n", ch);
-    return ch;
-}
-
-
-
-String Parser::encode(const String &str)
-{
-    String ret;
-    for (std::size_t i=0 ; i')
-            ret.append(">");
-        else if (ch == '\'')
-            ret.append("'");
-        else if (ch == '"')
-            ret.append(""");
-        else
-            ret.push_back(ch);
-
-        }
-    return ret;
-}
-
-
-int Parser::match(int p0, const char *text)
-{
-    int p = p0;
-    while (*text)
-        {
-        if (peek(p) != *text)
-            return p0;
-        p++; text++;
-        }
-    return p;
-}
-
-
-
-int Parser::skipwhite(int p)
-{
-
-    while (p p)
-            {
-            p = p2;
-            while (p");
-              if (p2 > p)
-                  {
-                  p = p2;
-                  break;
-                  }
-              p++;
-              }
-          }
-      XMLCh b = peek(p);
-      if (!isspace(b))
-          break;
-      p++;
-      }
-  return p;
-}
-
-/* modify this to allow all chars for an element or attribute name*/
-int Parser::getWord(int p0, String &buf)
-{
-    int p = p0;
-    while (p' || b=='=')
-            break;
-        buf.push_back(b);
-        p++;
-        }
-    return p;
-}
-
-int Parser::getQuoted(int p0, String &buf, int do_i_parse)
-{
-
-    int p = p0;
-    if (peek(p) != '"' && peek(p) != '\'')
-        return p0;
-    p++;
-
-    while ( pvalue ; ee++)
-                {
-                int p2 = match(p, ee->escaped);
-                if (p2>p)
-                    {
-                    buf.push_back(ee->value);
-                    p = p2;
-                    found = true;
-                    break;
-                    }
-                }
-            if (!found)
-                {
-                error("unterminated entity");
-                return false;
-                }
-            }
-        else
-            {
-            buf.push_back(b);
-            p++;
-            }
-        }
-    return p;
-}
-
-int Parser::parseVersion(int p0)
-{
-    //printf("### parseVersion: %d\n", p0);
-
-    int p = p0;
-
-    p = skipwhite(p0);
-
-    if (peek(p) != '<')
-        return p0;
-
-    p++;
-    if (p>=parselen || peek(p)!='?')
-        return p0;
-
-    p++;
-
-    String buf;
-
-    while (p=parselen || peek(p)!='<')
-        return p0;
-
-    p++;
-
-    if (peek(p)!='!' || peek(p+1)=='-')
-        return p0;
-    p++;
-
-    String buf;
-    while (p')
-            {
-            p++;
-            break;
-            }
-        buf.push_back(ch);
-        p++;
-        }
-
-    //printf("Got doctype:%s\n",buf.c_str());
-    return p;
-}
-
-
-
-int Parser::parseElement(int p0, Element *par,int lineNr)
-{
-
-    int p = p0;
-
-    int p2 = p;
-
-    p = skipwhite(p);
-
-    //## Get open tag
-    XMLCh ch = peek(p);
-    if (ch!='<')
-        return p0;
-
-    //int line, col;
-    //getLineAndColumn(p, &line, &col);
-
-    p++;
-
-    String openTagName;
-    p = skipwhite(p);
-    p = getWord(p, openTagName);
-    //printf("####tag :%s\n", openTagName.c_str());
-    p = skipwhite(p);
-
-    //Add element to tree
-    Element *n = new Element(openTagName);
-    n->line = lineNr + countLines(p0, p);
-    n->parent = par;
-    par->addChild(n);
-
-    // Get attributes
-    if (peek(p) != '>')
-        {
-        while (p')
-                break;
-            else if (ch=='/' && p')
-                    {
-                    p++;
-                    //printf("quick close\n");
-                    return p;
-                    }
-                }
-            String attrName;
-            p2 = getWord(p, attrName);
-            if (p2==p)
-                break;
-            //printf("name:%s",buf);
-            p=p2;
-            p = skipwhite(p);
-            ch = peek(p);
-            //printf("ch:%c\n",ch);
-            if (ch!='=')
-                break;
-            p++;
-            p = skipwhite(p);
-            // ch = parsebuf[p];
-            // printf("ch:%c\n",ch);
-            String attrVal;
-            p2 = getQuoted(p, attrVal, true);
-            p=p2+1;
-            //printf("name:'%s'   value:'%s'\n",attrName.c_str(),attrVal.c_str());
-            char *namestr = (char *)attrName.c_str();
-            if (strncmp(namestr, "xmlns:", 6)==0)
-                n->addNamespace(attrName, attrVal);
-            else
-                n->addAttribute(attrName, attrVal);
-            }
-        }
-
-    bool cdata = false;
-
-    p++;
-    // ### Get intervening data ### */
-    String data;
-    while (pp)
-            {
-            p = p2;
-            while (p");
-                if (p2 > p)
-                    {
-                    p = p2;
-                    break;
-                    }
-                p++;
-                }
-            }
-
-        ch = peek(p);
-        //# END TAG
-        if (ch=='<' && !cdata && peek(p+1)=='/')
-            {
-            break;
-            }
-        //# CDATA
-        p2 = match(p, " p)
-            {
-            cdata = true;
-            p = p2;
-            continue;
-            }
-
-        //# CHILD ELEMENT
-        if (ch == '<')
-            {
-            p2 = parseElement(p, n, lineNr + countLines(p0, p));
-            if (p2 == p)
-                {
-                /*
-                printf("problem on element:%s.  p2:%d p:%d\n",
-                      openTagName.c_str(), p2, p);
-                */
-                return p0;
-                }
-            p = p2;
-            continue;
-            }
-        //# ENTITY
-        if (ch=='&' && !cdata)
-            {
-            bool found = false;
-            for (EntityEntry *ee = entities ; ee->value ; ee++)
-                {
-                int p2 = match(p, ee->escaped);
-                if (p2>p)
-                    {
-                    data.push_back(ee->value);
-                    p = p2;
-                    found = true;
-                    break;
-                    }
-                }
-            if (!found)
-                {
-                error("unterminated entity");
-                return -1;
-                }
-            continue;
-            }
-
-        //# NONE OF THE ABOVE
-        data.push_back(ch);
-        p++;
-        }/*while*/
-
-
-    n->value = data;
-    //printf("%d : data:%s\n",p,data.c_str());
-
-    //## Get close tag
-    p = skipwhite(p);
-    ch = peek(p);
-    if (ch != '<')
-        {
-        error("no < for end tag\n");
-        return p0;
-        }
-    p++;
-    ch = peek(p);
-    if (ch != '/')
-        {
-        error("no / on end tag");
-        return p0;
-        }
-    p++;
-    ch = peek(p);
-    p = skipwhite(p);
-    String closeTagName;
-    p = getWord(p, closeTagName);
-    if (openTagName != closeTagName)
-        {
-        error("Mismatched closing tag.  Expected . Got '%S'.",
-                openTagName.c_str(), closeTagName.c_str());
-        return p0;
-        }
-    p = skipwhite(p);
-    if (peek(p) != '>')
-        {
-        error("no > on end tag for '%s'", closeTagName.c_str());
-        return p0;
-        }
-    p++;
-    // printf("close element:%s\n",closeTagName.c_str());
-    p = skipwhite(p);
-    return p;
-}
-
-
-
-
-Element *Parser::parse(XMLCh *buf,int pos,int len)
-{
-    parselen = len;
-    parsebuf = buf;
-    Element *rootNode = new Element("root");
-    pos = parseVersion(pos);
-    pos = parseDoctype(pos);
-    pos = parseElement(pos, rootNode, 1);
-    return rootNode;
-}
-
-
-Element *Parser::parse(const char *buf, int pos, int len)
-{
-    XMLCh *charbuf = new XMLCh[len + 1];
-    long i = 0;
-    for ( ; i < len ; i++)
-        charbuf[i] = (XMLCh)buf[i];
-    charbuf[i] = '\0';
-
-    Element *n = parse(charbuf, pos, len);
-    delete[] charbuf;
-    return n;
-}
-
-Element *Parser::parse(const String &buf)
-{
-    long len = (long)buf.size();
-    XMLCh *charbuf = new XMLCh[len + 1];
-    long i = 0;
-    for ( ; i < len ; i++)
-        charbuf[i] = (XMLCh)buf[i];
-    charbuf[i] = '\0';
-
-    Element *n = parse(charbuf, 0, len);
-    delete[] charbuf;
-    return n;
-}
-
-Element *Parser::parseFile(const String &fileName)
-{
-
-    //##### LOAD INTO A CHAR BUF, THEN CONVERT TO XMLCh
-    FILE *f = fopen(fileName.c_str(), "rb");
-    if (!f)
-        return NULL;
-
-    struct stat  statBuf;
-    if (fstat(fileno(f),&statBuf)<0)
-        {
-        fclose(f);
-        return NULL;
-        }
-    long filelen = statBuf.st_size;
-
-    //printf("length:%d\n",filelen);
-    XMLCh *charbuf = new XMLCh[filelen + 1];
-    for (XMLCh *p=charbuf ; !feof(f) ; p++)
-        {
-        *p = (XMLCh)fgetc(f);
-        }
-    fclose(f);
-    charbuf[filelen] = '\0';
-
-
-    /*
-    printf("nrbytes:%d\n",wc_count);
-    printf("buf:%ls\n======\n",charbuf);
-    */
-    Element *n = parse(charbuf, 0, filelen);
-    delete[] charbuf;
-    return n;
-}
-
-//########################################################################
-//########################################################################
-//##  E N D    X M L
-//########################################################################
-//########################################################################
-
-
-
-
-
-
-//########################################################################
-//########################################################################
-//##  U R I
-//########################################################################
-//########################################################################
-
-//This would normally be a call to a UNICODE function
-#define isLetter(x) isalpha(x)
-
-/**
- *  A class that implements the W3C URI resource reference.
- */
-class URI
-{
-public:
-
-    typedef enum
-        {
-        SCHEME_NONE =0,
-        SCHEME_DATA,
-        SCHEME_HTTP,
-        SCHEME_HTTPS,
-        SCHEME_FTP,
-        SCHEME_FILE,
-        SCHEME_LDAP,
-        SCHEME_MAILTO,
-        SCHEME_NEWS,
-        SCHEME_TELNET
-        } SchemeTypes;
-
-    /**
-     *
-     */
-    URI()
-        {
-        init();
-        }
-
-    /**
-     *
-     */
-    URI(const String &str)
-        {
-        init();
-        parse(str);
-        }
-
-
-    /**
-     *
-     */
-    URI(const char *str)
-        {
-        init();
-        String domStr = str;
-        parse(domStr);
-        }
-
-
-    /**
-     *
-     */
-    URI(const URI &other)
-        {
-        init();
-        assign(other);
-        }
-
-
-    /**
-     *
-     */
-    URI &operator=(const URI &other)
-        {
-        init();
-        assign(other);
-        return *this;
-        }
-
-
-    /**
-     *
-     */
-    virtual ~URI()
-        {}
-
-
-
-    /**
-     *
-     */
-    virtual bool parse(const String &str);
-
-    /**
-     *
-     */
-    virtual String toString() const;
-
-    /**
-     *
-     */
-    virtual int getScheme() const;
-
-    /**
-     *
-     */
-    virtual String getSchemeStr() const;
-
-    /**
-     *
-     */
-    virtual String getAuthority() const;
-
-    /**
-     *  Same as getAuthority, but if the port has been specified
-     *  as host:port , the port will not be included
-     */
-    virtual String getHost() const;
-
-    /**
-     *
-     */
-    virtual int getPort() const;
-
-    /**
-     *
-     */
-    virtual String getPath() const;
-
-    /**
-     *
-     */
-    virtual String getNativePath() const;
-
-    /**
-     *
-     */
-    virtual bool isAbsolute() const;
-
-    /**
-     *
-     */
-    virtual bool isOpaque() const;
-
-    /**
-     *
-     */
-    virtual String getQuery() const;
-
-    /**
-     *
-     */
-    virtual String getFragment() const;
-
-    /**
-     *
-     */
-    virtual URI resolve(const URI &other) const;
-
-    /**
-     *
-     */
-    virtual void normalize();
-
-private:
-
-    /**
-     *
-     */
-    void init()
-        {
-        parsebuf  = NULL;
-        parselen  = 0;
-        scheme    = SCHEME_NONE;
-        schemeStr = "";
-        port      = 0;
-        authority = "";
-        path      = "";
-        absolute  = false;
-        opaque    = false;
-        query     = "";
-        fragment  = "";
-        }
-
-
-    /**
-     *
-     */
-    void assign(const URI &other)
-        {
-        scheme    = other.scheme;
-        schemeStr = other.schemeStr;
-        authority = other.authority;
-        port      = other.port;
-        path      = other.path;
-        absolute  = other.absolute;
-        opaque    = other.opaque;
-        query     = other.query;
-        fragment  = other.fragment;
-        }
-
-    int scheme;
-
-    String schemeStr;
-
-    String authority;
-
-    bool portSpecified;
-
-    int port;
-
-    String path;
-
-    bool absolute;
-
-    bool opaque;
-
-    String query;
-
-    String fragment;
-
-    void error(const char *fmt, ...);
-
-    void trace(const char *fmt, ...);
-
-
-    int peek(int p);
-
-    int match(int p, const char *key);
-
-    int parseScheme(int p);
-
-    int parseHierarchicalPart(int p0);
-
-    int parseQuery(int p0);
-
-    int parseFragment(int p0);
-
-    int parse(int p);
-
-    char *parsebuf;
-
-    int parselen;
-
-};
-
-
-
-typedef struct
-{
-    int         ival;
-    const char *sval;
-    int         port;
-} LookupEntry;
-
-LookupEntry schemes[] =
-{
-    { URI::SCHEME_DATA,   "data:",    0 },
-    { URI::SCHEME_HTTP,   "http:",   80 },
-    { URI::SCHEME_HTTPS,  "https:", 443 },
-    { URI::SCHEME_FTP,    "ftp",     12 },
-    { URI::SCHEME_FILE,   "file:",    0 },
-    { URI::SCHEME_LDAP,   "ldap:",  123 },
-    { URI::SCHEME_MAILTO, "mailto:", 25 },
-    { URI::SCHEME_NEWS,   "news:",  117 },
-    { URI::SCHEME_TELNET, "telnet:", 23 },
-    { 0,                  NULL,       0 }
-};
-
-
-String URI::toString() const
-{
-    String str = schemeStr;
-    if (authority.size() > 0)
-        {
-        str.append("//");
-        str.append(authority);
-        }
-    str.append(path);
-    if (query.size() > 0)
-        {
-        str.append("?");
-        str.append(query);
-        }
-    if (fragment.size() > 0)
-        {
-        str.append("#");
-        str.append(fragment);
-        }
-    return str;
-}
-
-
-int URI::getScheme() const
-{
-    return scheme;
-}
-
-String URI::getSchemeStr() const
-{
-    return schemeStr;
-}
-
-
-String URI::getAuthority() const
-{
-    String ret = authority;
-    if (portSpecified && port>=0)
-        {
-        char buf[7];
-        snprintf(buf, 6, ":%6d", port);
-        ret.append(buf);
-        }
-    return ret;
-}
-
-String URI::getHost() const
-{
-    return authority;
-}
-
-int URI::getPort() const
-{
-    return port;
-}
-
-
-String URI::getPath() const
-{
-    return path;
-}
-
-String URI::getNativePath() const
-{
-    String npath;
-#ifdef __WIN32__
-    std::size_t firstChar = 0;
-    if (path.size() >= 3)
-        {
-        if (path[0] == '/' &&
-            isLetter(path[1]) &&
-            path[2] == ':')
-            firstChar++;
-         }
-    for (std::size_t i=firstChar ; i  0 &&
-        other.path.size()      == 0 &&
-        other.scheme           == SCHEME_NONE &&
-        other.authority.size() == 0 &&
-        other.query.size()     == 0 )
-        {
-        URI fragUri = *this;
-        fragUri.fragment = other.fragment;
-        return fragUri;
-        }
-
-    //## 3 http://www.ietf.org/rfc/rfc2396.txt, section 5.2
-    URI newUri;
-    //# 3.1
-    newUri.scheme    = scheme;
-    newUri.schemeStr = schemeStr;
-    newUri.query     = other.query;
-    newUri.fragment  = other.fragment;
-    if (other.authority.size() > 0)
-        {
-        //# 3.2
-        if (absolute || other.absolute)
-            newUri.absolute = true;
-        newUri.authority = other.authority;
-        newUri.port      = other.port;//part of authority
-        newUri.path      = other.path;
-        }
-    else
-        {
-        //# 3.3
-        if (other.absolute)
-            {
-            newUri.absolute = true;
-            newUri.path     = other.path;
-            }
-        else
-            {
-            std::size_t pos = path.find_last_of('/');
-            if (pos != path.npos)
-                {
-                String tpath = path.substr(0, pos+1);
-                tpath.append(other.path);
-                newUri.path = tpath;
-                }
-            else
-                newUri.path = other.path;
-            }
-        }
-
-    newUri.normalize();
-    return newUri;
-}
-
-
-
-/**
- *  This follows the Java URI algorithm:
- *   1. All "." segments are removed.
- *   2. If a ".." segment is preceded by a non-".." segment
- *          then both of these segments are removed. This step
- *          is repeated until it is no longer applicable.
- *   3. If the path is relative, and if its first segment
- *          contains a colon character (':'), then a "." segment
- *          is prepended. This prevents a relative URI with a path
- *          such as "a:b/c/d" from later being re-parsed as an
- *          opaque URI with a scheme of "a" and a scheme-specific
- *          part of "b/c/d". (Deviation from RFC 2396)
- */
-void URI::normalize()
-{
-    std::vector segments;
-
-    //## Collect segments
-    if (path.size()<2)
-        return;
-    bool abs = false;
-    std::size_t pos=0;
-    if (path[0]=='/')
-        {
-        abs = true;
-        pos++;
-        }
-    while (pos < path.size())
-        {
-        std::size_t pos2 = path.find('/', pos);
-        if (pos2==path.npos)
-            {
-            String seg = path.substr(pos);
-            //printf("last segment:%s\n", seg.c_str());
-            segments.push_back(seg);
-            break;
-            }
-        if (pos2>pos)
-            {
-            String seg = path.substr(pos, pos2-pos);
-            //printf("segment:%s\n", seg.c_str());
-            segments.push_back(seg);
-            }
-        pos = pos2;
-        pos++;
-        }
-
-    //## Clean up (normalize) segments
-    bool edited = false;
-    std::vector::iterator iter;
-    for (iter=segments.begin() ; iter!=segments.end() ; )
-        {
-        String s = *iter;
-        if (s == ".")
-            {
-            iter = segments.erase(iter);
-            edited = true;
-            }
-        else if (s == ".." &&
-                 iter != segments.begin() &&
-                 *(iter-1) != "..")
-            {
-            iter--; //back up, then erase two entries
-            iter = segments.erase(iter);
-            iter = segments.erase(iter);
-            edited = true;
-            }
-        else
-            iter++;
-        }
-
-    //## Rebuild path, if necessary
-    if (edited)
-        {
-        path.clear();
-        if (abs)
-            {
-            path.append("/");
-            }
-        std::vector::iterator iter;
-        for (iter=segments.begin() ; iter!=segments.end() ; iter++)
-            {
-            if (iter != segments.begin())
-                path.append("/");
-            path.append(*iter);
-            }
-        }
-
-}
-
-
-
-//#########################################################################
-//# M E S S A G E S
-//#########################################################################
-
-void URI::error(const char *fmt, ...)
-{
-    va_list args;
-    fprintf(stderr, "URI error: ");
-    va_start(args, fmt);
-    vfprintf(stderr, fmt, args);
-    va_end(args);
-    fprintf(stderr, "\n");
-}
-
-void URI::trace(const char *fmt, ...)
-{
-    va_list args;
-    fprintf(stdout, "URI: ");
-    va_start(args, fmt);
-    vfprintf(stdout, fmt, args);
-    va_end(args);
-    fprintf(stdout, "\n");
-}
-
-
-
-
-//#########################################################################
-//# P A R S I N G
-//#########################################################################
-
-
-
-int URI::peek(int p)
-{
-    if (p<0 || p>=parselen)
-        return -1;
-    return parsebuf[p];
-}
-
-
-
-int URI::match(int p0, const char *key)
-{
-    int p = p0;
-    while (p < parselen)
-        {
-        if (*key == '\0')
-            return p;
-        else if (*key != parsebuf[p])
-            break;
-        p++; key++;
-        }
-    return p0;
-}
-
-//#########################################################################
-//#  Parsing is performed according to:
-//#  http://www.gbiv.com/protocols/uri/rfc/rfc3986.html#components
-//#########################################################################
-
-int URI::parseScheme(int p0)
-{
-    int p = p0;
-    for (LookupEntry *entry = schemes; entry->sval ; entry++)
-        {
-        int p2 = match(p, entry->sval);
-        if (p2 > p)
-            {
-            schemeStr = entry->sval;
-            scheme    = entry->ival;
-            port      = entry->port;
-            p = p2;
-            return p;
-            }
-        }
-
-    return p;
-}
-
-
-int URI::parseHierarchicalPart(int p0)
-{
-    int p = p0;
-    int ch;
-
-    //# Authority field (host and port, for example)
-    int p2 = match(p, "//");
-    if (p2 > p)
-        {
-        p = p2;
-        portSpecified = false;
-        String portStr;
-        while (p < parselen)
-            {
-            ch = peek(p);
-            if (ch == '/')
-                break;
-            else if (ch == ':')
-                portSpecified = true;
-            else if (portSpecified)
-                portStr.push_back((XMLCh)ch);
-            else
-                authority.push_back((XMLCh)ch);
-            p++;
-            }
-        if (portStr.size() > 0)
-            {
-            char *pstr = (char *)portStr.c_str();
-            char *endStr;
-            long val = strtol(pstr, &endStr, 10);
-            if (endStr > pstr) //successful parse?
-                port = val;
-            }
-        }
-
-    //# Are we absolute?
-    ch = peek(p);
-    if (isLetter(ch) && peek(p+1)==':')
-        {
-        absolute = true;
-        path.push_back((XMLCh)'/');
-        }
-    else if (ch == '/')
-        {
-        absolute = true;
-        if (p>p0) //in other words, if '/' is not the first char
-            opaque = true;
-        path.push_back((XMLCh)ch);
-        p++;
-        }
-
-    while (p < parselen)
-        {
-        ch = peek(p);
-        if (ch == '?' || ch == '#')
-            break;
-        path.push_back((XMLCh)ch);
-        p++;
-        }
-
-    return p;
-}
-
-int URI::parseQuery(int p0)
-{
-    int p = p0;
-    int ch = peek(p);
-    if (ch != '?')
-        return p0;
-
-    p++;
-    while (p < parselen)
-        {
-        ch = peek(p);
-        if (ch == '#')
-            break;
-        query.push_back((XMLCh)ch);
-        p++;
-        }
-
-
-    return p;
-}
-
-int URI::parseFragment(int p0)
-{
-
-    int p = p0;
-    int ch = peek(p);
-    if (ch != '#')
-        return p0;
-
-    p++;
-    while (p < parselen)
-        {
-        ch = peek(p);
-        if (ch == '?')
-            break;
-        fragment.push_back((XMLCh)ch);
-        p++;
-        }
-
-
-    return p;
-}
-
-
-int URI::parse(int p0)
-{
-
-    int p = p0;
-
-    int p2 = parseScheme(p);
-    if (p2 < 0)
-        {
-        error("Scheme");
-        return -1;
-        }
-    p = p2;
-
-
-    p2 = parseHierarchicalPart(p);
-    if (p2 < 0)
-        {
-        error("Hierarchical part");
-        return -1;
-        }
-    p = p2;
-
-    p2 = parseQuery(p);
-    if (p2 < 0)
-        {
-        error("Query");
-        return -1;
-        }
-    p = p2;
-
-
-    p2 = parseFragment(p);
-    if (p2 < 0)
-        {
-        error("Fragment");
-        return -1;
-        }
-    p = p2;
-
-    return p;
-
-}
-
-
-
-bool URI::parse(const String &str)
-{
-    init();
-    
-    parselen = str.size();
-
-    String tmp;
-    for (std::size_t i=0 ; i statCacheType;
-static statCacheType statCache;
-static int cachedStat(const String &f, struct stat *s) {
-    //printf("Stat path: %s\n", f.c_str());
-    std::pair result = statCache.insert(statCacheType::value_type(f, StatResult()));
-    if (result.second) {
-        result.first->second.result = stat(f.c_str(), &(result.first->second.statInfo));
-    }
-    *s = result.first->second.statInfo;
-    return result.first->second.result;
-}
-static void removeFromStatCache(const String f) {
-    //printf("Removing from cache: %s\n", f.c_str());
-    statCache.erase(f);
-}
-
-//########################################################################
-//# Dir cache to speed up dir requests
-//########################################################################
-/*struct DirListing {
-    bool available;
-    std::vector files;
-    std::vector dirs;
-};
-typedef std::map dirCacheType;
-static dirCacheType dirCache;
-static const DirListing &cachedDir(String fullDir)
-{
-    String dirNative = getNativePath(fullDir);
-    std::pair result = dirCache.insert(dirCacheType::value_type(dirNative, DirListing()));
-    if (result.second) {
-        DIR *dir = opendir(dirNative.c_str());
-        if (!dir)
-            {
-            error("Could not open directory %s : %s",
-                dirNative.c_str(), strerror(errno));
-            result.first->second.available = false;
-            }
-        else
-            {
-            result.first->second.available = true;
-            while (true)
-                {
-                struct dirent *de = readdir(dir);
-                if (!de)
-                    break;
-
-                //Get the directory member name
-                String s = de->d_name;
-                if (s.size() == 0 || s[0] == '.')
-                    continue;
-                String childName;
-                if (dirName.size()>0)
-                    {
-                    childName.append(dirName);
-                    childName.append("/");
-                    }
-                childName.append(s);
-                String fullChild = baseDir;
-                fullChild.append("/");
-                fullChild.append(childName);
-                
-                if (isDirectory(fullChild))
-                    {
-                    //trace("directory: %s", childName.c_str());
-                    if (!listFiles(baseDir, childName, res))
-                        return false;
-                    continue;
-                    }
-                else if (!isRegularFile(fullChild))
-                    {
-                    error("unknown file:%s", childName.c_str());
-                    return false;
-                    }
-
-            //all done!
-                res.push_back(childName);
-
-                }
-            closedir(dir);
-            }
-    }
-    return result.first->second;
-}*/
-
-//########################################################################
-//# F I L E S E T
-//########################################################################
-/**
- * This is the descriptor for a  item
- */
-class FileSet
-{
-public:
-
-    /**
-     *
-     */
-    FileSet()
-        {}
-
-    /**
-     *
-     */
-    FileSet(const FileSet &other)
-        { assign(other); }
-
-    /**
-     *
-     */
-    FileSet &operator=(const FileSet &other)
-        { assign(other); return *this; }
-
-    /**
-     *
-     */
-    virtual ~FileSet()
-        {}
-
-    /**
-     *
-     */
-    String getDirectory() const
-        { return directory; }
-        
-    /**
-     *
-     */
-    void setDirectory(const String &val)
-        { directory = val; }
-
-    /**
-     *
-     */
-    void setFiles(const std::vector &val)
-        { files = val; }
-
-    /**
-     *
-     */
-    std::vector getFiles() const
-        { return files; }
-        
-    /**
-     *
-     */
-    void setIncludes(const std::vector &val)
-        { includes = val; }
-
-    /**
-     *
-     */
-    std::vector getIncludes() const
-        { return includes; }
-        
-    /**
-     *
-     */
-    void setExcludes(const std::vector &val)
-        { excludes = val; }
-
-    /**
-     *
-     */
-    std::vector getExcludes() const
-        { return excludes; }
-        
-    /**
-     *
-     */
-    std::size_t size() const
-        { return files.size(); }
-        
-    /**
-     *
-     */
-    String operator[](int index) const
-        { return files[index]; }
-        
-    /**
-     *
-     */
-    void clear()
-        {
-        directory = "";
-        files.clear();
-        includes.clear();
-        excludes.clear();
-        }
-        
-
-private:
-
-    void assign(const FileSet &other)
-        {
-        directory = other.directory;
-        files     = other.files;
-        includes  = other.includes;
-        excludes  = other.excludes;
-        }
-
-    String directory;
-    std::vector files;
-    std::vector includes;
-    std::vector excludes;
-};
-
-
-//########################################################################
-//# F I L E L I S T
-//########################################################################
-/**
- * This is a simpler, explicitly-named list of files
- */
-class FileList
-{
-public:
-
-    /**
-     *
-     */
-    FileList()
-        {}
-
-    /**
-     *
-     */
-    FileList(const FileList &other)
-        { assign(other); }
-
-    /**
-     *
-     */
-    FileList &operator=(const FileList &other)
-        { assign(other); return *this; }
-
-    /**
-     *
-     */
-    virtual ~FileList()
-        {}
-
-    /**
-     *
-     */
-    String getDirectory()
-        { return directory; }
-        
-    /**
-     *
-     */
-    void setDirectory(const String &val)
-        { directory = val; }
-
-    /**
-     *
-     */
-    void setFiles(const std::vector &val)
-        { files = val; }
-
-    /**
-     *
-     */
-    std::vector getFiles()
-        { return files; }
-        
-    /**
-     *
-     */
-    std::size_t size()
-        { return files.size(); }
-        
-    /**
-     *
-     */
-    String operator[](int index)
-        { return files[index]; }
-        
-    /**
-     *
-     */
-    void clear()
-        {
-        directory = "";
-        files.clear();
-        }
-        
-
-private:
-
-    void assign(const FileList &other)
-        {
-        directory = other.directory;
-        files     = other.files;
-        }
-
-    String directory;
-    std::vector files;
-};
-
-
-
-
-//########################################################################
-//# M A K E    B A S E
-//########################################################################
-/**
- * Base class for all classes in this file
- */
-class MakeBase
-{
-public:
-
-    MakeBase()
-        { line = 0; }
-    virtual ~MakeBase()
-        {}
-
-    /**
-     *     Return the URI of the file associated with this object 
-     */     
-    URI getURI()
-        { return uri; }
-
-    /**
-     * Set the uri to the given string
-     */
-    void setURI(const String &uristr)
-        { uri.parse(uristr); }
-
-    /**
-     * Set the number of threads that can be used
-     */
-    void setNumThreads(const int num)
-        { numThreads = num; }
-
-    /**
-     *  Resolve another path relative to this one
-     */
-    String resolve(const String &otherPath);
-
-    /**
-     * replace variable refs like ${a} with their values
-     * Assume that the string has already been syntax validated
-     */
-    String eval(const String &s, const String &defaultVal);
-
-    /**
-     * replace variable refs like ${a} with their values
-     * return true or false
-     * Assume that the string has already been syntax validated
-     */
-    bool evalBool(const String &s, bool defaultVal);
-
-    /**
-     * replace variable refs like ${a} with their values
-     * return the value parsed as an integer
-     * Assume that the string has already been syntax validated
-     */
-    int evalInt(const String &s, int defaultVal);
-
-    /**
-     *  Get an element attribute, performing substitutions if necessary
-     */
-    bool getAttribute(Element *elem, const String &name, String &result);
-
-    /**
-     * Get an element value, performing substitutions if necessary
-     */
-    bool getValue(Element *elem, String &result);
-    
-    /**
-     * Set the current line number in the file
-     */         
-    void setLine(int val)
-        { line = val; }
-        
-    /**
-     * Get the current line number in the file
-     */         
-    int getLine()
-        { return line; }
-
-
-    /**
-     * Set a property to a given value
-     */
-    virtual void setProperty(const String &name, const String &val)
-        {
-        properties[name] = val;
-        }
-
-    /**
-     * Return a named property is found, else a null string
-     */
-    virtual String getProperty(const String &name)
-        {
-        String val;
-        std::map::iterator iter = properties.find(name);
-        if (iter != properties.end())
-            val = iter->second;
-        String sval;
-        if (!getSubstitutions(val, sval))
-            return String();
-        return sval;
-        }
-
-    /**
-     * Return true if a named property is found, else false
-     */
-    virtual bool hasProperty(const String &name)
-        {
-        std::map::iterator iter = properties.find(name);
-        if (iter == properties.end())
-            return false;
-        return true;
-        }
-
-
-protected:
-
-    /**
-     *    The path to the file associated with this object
-     */     
-    URI uri;
-
-    /**
-     *    The number of threads that can be used
-     */     
-    static int numThreads;
-
-    /**
-     *    If this prefix is seen in a substitution, use an environment
-     *    variable.
-     *             example:  
-     *             ${env.JAVA_HOME}
-     */
-    String envPrefix;
-
-    /**
-     *    If this prefix is seen in a substitution, use as a
-     *    pkg-config 'all' query
-     *             example:  
-     *             ${pc.gtkmm}
-     */
-    String pcPrefix;
-
-    /**
-     *    If this prefix is seen in a substitution, use as a
-     *    pkg-config 'cflags' query
-     *             example:  
-     *             ${pcc.gtkmm}
-     */
-    String pccPrefix;
-
-    /**
-     *    If this prefix is seen in a substitution, use as a
-     *    pkg-config 'libs' query
-     *             example:  
-     *             ${pcl.gtkmm}
-     */
-    String pclPrefix;
-
-    /**
-     *    If this prefix is seen in a substitution, use as a
-     *    Bazaar "bzr revno" query
-     *             example:   ???
-     *             ${bzr.Revision}
-     */
-    String bzrPrefix;
-
-
-
-
-
-    /**
-     *  Print a printf()-like formatted error message
-     */
-    void error(const char *fmt, ...);
-
-    /**
-     *  Print a printf()-like formatted trace message
-     */
-    void status(const char *fmt, ...);
-
-    /**
-     *  Show target status
-     */
-    void targetstatus(const char *fmt, ...);
-
-    /**
-     *  Print a printf()-like formatted trace message
-     */
-    void trace(const char *fmt, ...);
-
-    /**
-     *  Check if a given string matches a given regex pattern
-     */
-    bool regexMatch(const String &str, const String &pattern);
-
-    /**
-     *
-     */
-    String getSuffix(const String &fname);
-
-    /**
-     * Break up a string into substrings delimited the characters
-     * in delimiters.  Null-length substrings are ignored
-     */  
-    std::vector tokenize(const String &val,
-                          const String &delimiters);
-
-    /**
-     *  replace runs of whitespace with a space
-     */
-    String strip(const String &s);
-
-    /**
-     *  remove leading whitespace from each line
-     */
-    String leftJustify(const String &s);
-
-    /**
-     *  remove leading and trailing whitespace from string
-     */
-    String trim(const String &s);
-
-    /**
-     *  Return a lower case version of the given string
-     */
-    String toLower(const String &s);
-
-    /**
-     * Return the native format of the canonical
-     * path which we store
-     */
-    String getNativePath(const String &path);
-
-    /**
-     * Execute a shell command.  Outbuf is a ref to a string
-     * to catch the result.     
-     */         
-    bool executeCommand(const String &call,
-                        const String &inbuf,
-                        String &outbuf,
-                        String &errbuf);
-    /**
-     * List all directories in a given base and starting directory
-     * It is usually called like:
-     *        bool ret = listDirectories("src", "", result);    
-     */         
-    bool listDirectories(const String &baseName,
-                         const String &dirname,
-                         std::vector &res);
-
-    /**
-     * Find all files in the named directory 
-     */         
-    bool listFiles(const String &baseName,
-                   const String &dirname,
-                   std::vector &result);
-
-    /**
-     * Perform a listing for a fileset 
-     */         
-    bool listFiles(MakeBase &propRef, FileSet &fileSet);
-
-    /**
-     * Parse a 
-     */  
-    bool parsePatternSet(Element *elem,
-                       MakeBase &propRef,
-                       std::vector &includes,
-                       std::vector &excludes);
-
-    /**
-     * Parse a  entry, and determine which files
-     * should be included
-     */  
-    bool parseFileSet(Element *elem,
-                    MakeBase &propRef,
-                    FileSet &fileSet);
-    /**
-     * Parse a  entry
-     */  
-    bool parseFileList(Element *elem,
-                    MakeBase &propRef,
-                    FileList &fileList);
-
-    /**
-     * Return this object's property list
-     */
-    virtual std::map &getProperties()
-        { return properties; }
-
-
-    std::map properties;
-
-    /**
-     * Create a directory, making intermediate dirs
-     * if necessary
-     */                  
-    bool createDirectory(const String &dirname);
-
-    /**
-     * Delete a directory and its children if desired
-     */
-    bool removeDirectory(const String &dirName);
-
-    /**
-     * Copy a file from one name to another. Perform only if needed
-     */ 
-    bool copyFile(const String &srcFile, const String &destFile);
-
-    /**
-     * Delete a file
-     */ 
-    bool removeFile(const String &file);
-
-    /**
-     * Tests if the file exists
-     */ 
-    bool fileExists(const String &fileName);
-
-    /**
-     * Tests if the file exists and is a regular file
-     */ 
-    bool isRegularFile(const String &fileName);
-
-    /**
-     * Tests if the file exists and is a directory
-     */ 
-    bool isDirectory(const String &fileName);
-
-    /**
-     * Tests is the modification date of fileA is newer than fileB
-     */ 
-    bool isNewerThan(const String &fileA, const String &fileB);
-
-private:
-
-    bool pkgConfigRecursive(const String packageName,
-                            const String &path, 
-                            const String &prefix, 
-                            int query,
-                            String &result,
-                            std::set &deplist);
-
-    /**
-     * utility method to query for "all", "cflags", or "libs" for this package and its
-     * dependencies.  0, 1, 2
-     */          
-    bool pkgConfigQuery(const String &packageName, int query, String &result);
-
-    /**
-     * replace a variable ref like ${a} with a value
-     */
-    bool lookupProperty(const String &s, String &result);
-    
-    /**
-     * called by getSubstitutions().  This is in case a looked-up string
-     * has substitutions also.     
-     */
-    bool getSubstitutionsRecursive(const String &s, String &result, int depth);
-
-    /**
-     * replace variable refs in a string like ${a} with their values
-     */
-    bool getSubstitutions(const String &s, String &result);
-
-    int line;
-
-
-};
-
-int MakeBase::numThreads = 1;
-
-/**
- * Define the pkg-config class here, since it will be used in MakeBase method
- * implementations. 
- */
-class PkgConfig : public MakeBase
-{
-
-public:
-
-    /**
-     *
-     */
-    PkgConfig()
-        {
-         path   = ".";
-         prefix = "/target";
-         init();
-         }
-
-    /**
-     *
-     */
-    PkgConfig(const PkgConfig &other)
-        { assign(other); }
-
-    /**
-     *
-     */
-    PkgConfig &operator=(const PkgConfig &other)
-        { assign(other); return *this; }
-
-    /**
-     *
-     */
-    virtual ~PkgConfig()
-        { }
-
-    /**
-     *
-     */
-    virtual String getName()
-        { return name; }
-
-    /**
-     *
-     */
-    virtual String getPath()
-        { return path; }
-
-    /**
-     *
-     */
-    virtual void setPath(const String &val)
-        { path = val; }
-
-    /**
-     *
-     */
-    virtual String getPrefix()
-        { return prefix; }
-
-    /**
-     *  Allow the user to override the prefix in the file
-     */
-    virtual void setPrefix(const String &val)
-        { prefix = val; }
-
-    /**
-     *
-     */
-    virtual String getDescription()
-        { return description; }
-
-    /**
-     *
-     */
-    virtual String getCflags()
-        { return cflags; }
-
-    /**
-     *
-     */
-    virtual String getLibs()
-        { return libs; }
-
-    /**
-     *
-     */
-    virtual String getAll()
-        {
-         String ret = cflags;
-         ret.append(" ");
-         ret.append(libs);
-         return ret;
-        }
-
-    /**
-     *
-     */
-    virtual String getVersion()
-        { return version; }
-
-    /**
-     *
-     */
-    virtual int getMajorVersion()
-        { return majorVersion; }
-
-    /**
-     *
-     */
-    virtual int getMinorVersion()
-        { return minorVersion; }
-
-    /**
-     *
-     */
-    virtual int getMicroVersion()
-        { return microVersion; }
-
-    /**
-     *
-     */
-    virtual std::map &getAttributes()
-        { return attrs; }
-
-    /**
-     *
-     */
-    virtual std::vector &getRequireList()
-        { return requireList; }
-
-    /**
-     *  Read a file for its details
-     */         
-    virtual bool readFile(const String &fileName);
-
-    /**
-     *  Read a file for its details
-     */         
-    virtual bool query(const String &name);
-
-private:
-
-    void init()
-        {
-        //do not set path and prefix here
-        name         = "";
-        description  = "";
-        cflags       = "";
-        libs         = "";
-        requires     = "";
-        version      = "";
-        majorVersion = 0;
-        minorVersion = 0;
-        microVersion = 0;
-        fileName     = "";
-        attrs.clear();
-        requireList.clear();
-        }
-
-    void assign(const PkgConfig &other)
-        {
-        name         = other.name;
-        path         = other.path;
-        prefix       = other.prefix;
-        description  = other.description;
-        cflags       = other.cflags;
-        libs         = other.libs;
-        requires     = other.requires;
-        version      = other.version;
-        majorVersion = other.majorVersion;
-        minorVersion = other.minorVersion;
-        microVersion = other.microVersion;
-        fileName     = other.fileName;
-        attrs        = other.attrs;
-        requireList  = other.requireList;
-        }
-
-
-
-    int get(int pos);
-
-    int skipwhite(int pos);
-
-    int getword(int pos, String &ret);
-
-    /**
-     * Very important
-     */         
-    bool parseRequires();
-
-    void parseVersion();
-
-    bool parseLine(const String &lineBuf);
-
-    bool parse(const String &buf);
-
-    void dumpAttrs();
-
-    String name;
-
-    String path;
-
-    String prefix;
-
-    String description;
-
-    String cflags;
-
-    String libs;
-
-    String requires;
-
-    String version;
-
-    int majorVersion;
-
-    int minorVersion;
-
-    int microVersion;
-
-    String fileName;
-
-    std::map attrs;
-
-    std::vector requireList;
-
-    char *parsebuf;
-    int parselen;
-};
-
-/**
- * Execute the "bzr revno" command and return the result.
- * This is a simple, small class.
- */
-class BzrRevno : public MakeBase
-{
-public:
-
-    /**
-     * Safe way. Execute "bzr revno" and return the result.
-     * Safe from changes in format.
-     */
-    bool query(String &res)
-    {
-        String cmd = "bzr revno";
-
-        String outString, errString;
-        bool ret = executeCommand(cmd.c_str(), "", outString, errString);
-        if (!ret)
-            {
-            error("error executing '%s': %s", cmd.c_str(), errString.c_str());
-            return false;
-            }
-        res = outString;
-        return true;
-    } 
-};
-
-/**
- * Execute the "svn info" command and parse the result.
- * This is a simple, small class. Define here, because it
- * is used by MakeBase implementation methods. 
- */
-class SvnInfo : public MakeBase
-{
-public:
-
-#if 0
-    /**
-     * Safe way. Execute "svn info --xml" and parse the result.  Search for
-     * elements/attributes.  Safe from changes in format.
-     */
-    bool query(const String &name, String &res)
-    {
-        String cmd = "svn info --xml";
-    
-        String outString, errString;
-        bool ret = executeCommand(cmd.c_str(), "", outString, errString);
-        if (!ret)
-            {
-            error("error executing '%s': %s", cmd.c_str(), errString.c_str());
-            return false;
-            }
-        Parser parser;
-        Element *elem = parser.parse(outString); 
-        if (!elem)
-            {
-            error("error parsing 'svn info' xml result: %s", outString.c_str());
-            return false;
-            }
-        
-        res = elem->getTagValue(name);
-        if (res.size()==0)
-            {
-            res = elem->getTagAttribute("entry", name);
-            }
-        return true;
-    } 
-#else
-
-
-    /**
-     * Universal way.  Parse the file directly.  Not so safe from
-     * changes in format.
-     */
-    bool query(const String &name, String &res)
-    {
-        String fileName = resolve(".svn/entries");
-        String nFileName = getNativePath(fileName);
-        
-        std::map properties;
-        
-        FILE *f = fopen(nFileName.c_str(), "r");
-        if (!f)
-            {
-            error("could not open SVN 'entries' file");
-            return false;
-            }
-
-        const char *fieldNames[] =
-            {
-            "format-nbr",
-            "name",
-            "kind",
-            "revision",
-            "url",
-            "repos",
-            "schedule",
-            "text-time",
-            "checksum",
-            "committed-date",
-            "committed-rev",
-            "last-author",
-            "has-props",
-            "has-prop-mods",
-            "cachable-props",
-            };
-
-        for (int i=0 ; i<15 ; i++)
-            {
-            inbuf[0] = '\0';
-            if (feof(f) || !fgets(inbuf, 255, f))
-                break;
-            properties[fieldNames[i]] = trim(inbuf);
-            }
-        fclose(f);
-        
-        res = properties[name];
-        
-        return true;
-    } 
-    
-private:
-
-    char inbuf[256];
-
-#endif
-
-};
-
-
-
-
-
-
-/**
- *  Print a printf()-like formatted error message
- */
-void MakeBase::error(const char *fmt, ...)
-{
-    va_list args;
-    va_start(args,fmt);
-    fprintf(stderr, "Make error line %d: ", line);
-    vfprintf(stderr, fmt, args);
-    fprintf(stderr, "\n");
-    va_end(args) ;
-}
-
-
-
-/**
- *  Print a printf()-like formatted trace message
- */
-void MakeBase::status(const char *fmt, ...)
-{
-    va_list args;
-    //fprintf(stdout, " ");
-    va_start(args,fmt);
-    vfprintf(stdout, fmt, args);
-    va_end(args);
-    fprintf(stdout, "\n");
-    fflush(stdout);
-}
-
-
-/**
- *  Print a printf()-like formatted trace message
- */
-void MakeBase::trace(const char *fmt, ...)
-{
-    va_list args;
-    fprintf(stdout, "Make: ");
-    va_start(args,fmt);
-    vfprintf(stdout, fmt, args);
-    va_end(args) ;
-    fprintf(stdout, "\n");
-    fflush(stdout);
-}
-
-
-
-/**
- *  Resolve another path relative to this one
- */
-String MakeBase::resolve(const String &otherPath)
-{
-    URI otherURI(otherPath);
-    URI fullURI = uri.resolve(otherURI);
-    String ret = fullURI.toString();
-    return ret;
-}
-
-
-
-/**
- *  Check if a given string matches a given regex pattern
- */
-bool MakeBase::regexMatch(const String &str, const String &pattern)
-{
-    int res = slre_match(pattern.c_str(), str.c_str(), str.length(), NULL, 0, SLRE_IGNORE_CASE);
-    
-    bool ret = true;
-    if (res < 0)
-        {
-        ret = false;
-        
-        // error cases
-        if (res < -1)
-            {
-            String err;
-            switch(res)
-                {
-                    case SLRE_UNEXPECTED_QUANTIFIER:
-                        err = "unexpected quantifier"; break;
-                    case SLRE_UNBALANCED_BRACKETS:
-                        err = "unbalanced brackets"; break;
-                    case SLRE_INTERNAL_ERROR:
-                        err = "internal error"; break;
-                    case SLRE_INVALID_CHARACTER_SET:
-                        err = "invald character set"; break;
-                    case SLRE_INVALID_METACHARACTER:
-                        err = "invalid meta character"; break;
-                    default:
-                        err = "unknown error"; break;
-                }
-            error("regex failure (%s) while parsing [%s]!\n", err.c_str(), pattern.c_str());
-            }
-        }
-
-    return ret;
-}
-
-/**
- *  Return the suffix, if any, of a file name
- */
-String MakeBase::getSuffix(const String &fname)
-{
-    if (fname.size() < 2)
-        return "";
-    std::size_t pos = fname.find_last_of('.');
-    if (pos == fname.npos)
-        return "";
-    pos++;
-    String res = fname.substr(pos, fname.size()-pos);
-    //trace("suffix:%s", res.c_str()); 
-    return res;
-}
-
-
-
-/**
- * Break up a string into substrings delimited the characters
- * in delimiters.  Null-length substrings are ignored
- */  
-std::vector MakeBase::tokenize(const String &str,
-                                const String &delimiters)
-{
-
-    std::vector res;
-    char *del = (char *)delimiters.c_str();
-    String dmp;
-    for (std::size_t i=0 ; i 0)
-                {
-                res.push_back(dmp);
-                dmp.clear();
-                }
-            }
-        else
-            {
-            dmp.push_back(ch);
-            }
-        }
-    //Add tail
-    if (dmp.size() > 0)
-        {
-        res.push_back(dmp);
-        dmp.clear();
-        }
-
-    return res;
-}
-
-
-
-/**
- *  replace runs of whitespace with a single space
- */
-String MakeBase::strip(const String &s)
-{
-    int len = s.size();
-    String stripped;
-    for (int i = 0 ; i begin ; end--)
-        {
-        if (!isspace(s[end]))
-            break;
-        }
-    //trace("begin:%d  end:%d", begin, end);
-
-    String res = s.substr(begin, end-begin+1);
-    return res;
-}
-
-
-/**
- *  Return a lower case version of the given string
- */
-String MakeBase::toLower(const String &s)
-{
-    if (s.size()==0)
-        return s;
-
-    String ret;
-    for(std::size_t i=0; i= 3)
-        {
-        if (path[0] == '/' &&
-            isalpha(path[1]) &&
-            path[2] == ':')
-            firstChar++;
-        }
-    for (std::size_t i=firstChar ; i
-
-static String win32LastError()
-{
-
-    DWORD dw = GetLastError(); 
-
-    LPVOID str;
-    FormatMessage(
-        FORMAT_MESSAGE_ALLOCATE_BUFFER | 
-        FORMAT_MESSAGE_FROM_SYSTEM,
-        NULL,
-        dw,
-        0,
-        (LPTSTR) &str,
-        0, NULL );
-    LPTSTR p = _tcschr((const char *)str, _T('\r'));
-    if(p != NULL)
-        { // lose CRLF
-        *p = _T('\0');
-        }
-    String ret = (char *)str;
-    LocalFree(str);
-
-    return ret;
-}
-#endif
-
-
-
-
-#ifdef __WIN32__
-
-/**
- * Execute a system call, using pipes to send data to the
- * program's stdin,  and reading stdout and stderr.
- */
-bool MakeBase::executeCommand(const String &command,
-                              const String &inbuf,
-                              String &outbuf,
-                              String &errbuf)
-{
-
-//    status("============ cmd ============\n%s\n=============================",
-//                command.c_str());
-
-    outbuf.clear();
-    errbuf.clear();
-    
-
-    /*
-    I really hate having win32 code in this program, but the
-    read buffer in command.com and cmd.exe are just too small
-    for the large commands we need for compiling and linking.
-    */
-
-    bool ret = true;
-
-    //# Allocate a separate buffer for safety
-    char *paramBuf = new char[command.size() + 1];
-    if (!paramBuf)
-       {
-       error("executeCommand cannot allocate command buffer");
-       return false;
-       }
-    strcpy(paramBuf, (char *)command.c_str());
-   
-    //# Go to http://msdn2.microsoft.com/en-us/library/ms682499.aspx
-    //# to see how Win32 pipes work
-
-    //# Create pipes
-    SECURITY_ATTRIBUTES saAttr; 
-    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); 
-    saAttr.bInheritHandle = TRUE; 
-    saAttr.lpSecurityDescriptor = NULL; 
-    HANDLE stdinRead,  stdinWrite;
-    HANDLE stdoutRead, stdoutWrite;
-    HANDLE stderrRead, stderrWrite;
-    if (!CreatePipe(&stdinRead, &stdinWrite, &saAttr, 0))
-        {
-        error("executeProgram: could not create pipe");
-        delete[] paramBuf;
-        return false;
-        } 
-    SetHandleInformation(stdinWrite, HANDLE_FLAG_INHERIT, 0);
-    if (!CreatePipe(&stdoutRead, &stdoutWrite, &saAttr, 0))
-        {
-        error("executeProgram: could not create pipe");
-        delete[] paramBuf;
-        return false;
-        } 
-    SetHandleInformation(stdoutRead, HANDLE_FLAG_INHERIT, 0);
-    if (&outbuf != &errbuf) {
-        if (!CreatePipe(&stderrRead, &stderrWrite, &saAttr, 0))
-            {
-            error("executeProgram: could not create pipe");
-            delete[] paramBuf;
-            return false;
-            } 
-        SetHandleInformation(stderrRead, HANDLE_FLAG_INHERIT, 0);
-    } else {
-        stderrRead = stdoutRead;
-        stderrWrite = stdoutWrite;
-    }
-
-    // Create the process
-    STARTUPINFO siStartupInfo;
-    PROCESS_INFORMATION piProcessInfo;
-    memset(&siStartupInfo, 0, sizeof(siStartupInfo));
-    memset(&piProcessInfo, 0, sizeof(piProcessInfo));
-    siStartupInfo.cb = sizeof(siStartupInfo);
-    siStartupInfo.hStdError   =  stderrWrite;
-    siStartupInfo.hStdOutput  =  stdoutWrite;
-    siStartupInfo.hStdInput   =  stdinRead;
-    siStartupInfo.dwFlags    |=  STARTF_USESTDHANDLES;
-   
-    if (!CreateProcess(NULL, paramBuf, NULL, NULL, true,
-                0, NULL, NULL, &siStartupInfo,
-                &piProcessInfo))
-        {
-        error("executeCommand : could not create process : %s",
-                    win32LastError().c_str());
-        ret = false;
-        }
-
-    delete[] paramBuf;
-
-    DWORD bytesWritten;
-    if (inbuf.size()>0 &&
-        !WriteFile(stdinWrite, inbuf.c_str(), inbuf.size(), 
-               &bytesWritten, NULL))
-        {
-        error("executeCommand: could not write to pipe");
-        return false;
-        }    
-    if (!CloseHandle(stdinWrite))
-        {          
-        error("executeCommand: could not close write pipe");
-        return false;
-        }
-    if (!CloseHandle(stdoutWrite))
-        {
-        error("executeCommand: could not close read pipe");
-        return false;
-        }
-    if (stdoutWrite != stderrWrite && !CloseHandle(stderrWrite))
-        {
-        error("executeCommand: could not close read pipe");
-        return false;
-        }
-
-    bool lastLoop = false;
-    while (true)
-        {
-        DWORD avail;
-        DWORD bytesRead;
-        char readBuf[4096];
-
-        //trace("## stderr");
-        PeekNamedPipe(stderrRead, NULL, 0, NULL, &avail, NULL);
-        if (avail > 0)
-            {
-            bytesRead = 0;
-            if (avail>4096) avail = 4096;
-            ReadFile(stderrRead, readBuf, avail, &bytesRead, NULL);
-            if (bytesRead > 0)
-                {
-                for (unsigned int i=0 ; i 0)
-            {
-            bytesRead = 0;
-            if (avail>4096) avail = 4096;
-            ReadFile(stdoutRead, readBuf, avail, &bytesRead, NULL);
-            if (bytesRead > 0)
-                {
-                for (unsigned int i=0 ; i
-
-
-
-/**
- * Execute a system call, using pipes to send data to the
- * program's stdin,  and reading stdout and stderr.
- */
-bool MakeBase::executeCommand(const String &command,
-                              const String &inbuf,
-                              String &outbuf,
-                              String &errbuf)
-{
-
-    status("============ cmd ============\n%s\n=============================",
-                command.c_str());
-
-    outbuf.clear();
-    errbuf.clear();
-    
-
-    int outfds[2];
-    if (pipe(outfds) < 0)
-        return false;
-    int errfds[2];
-    if (pipe(errfds) < 0)
-        return false;
-    int pid = fork();
-    if (pid < 0)
-        {
-        close(outfds[0]);
-        close(outfds[1]);
-        close(errfds[0]);
-        close(errfds[1]);
-        error("launch of command '%s' failed : %s",
-             command.c_str(), strerror(errno));
-        return false;
-        }
-    else if (pid > 0) // parent
-        {
-        close(outfds[1]);
-        close(errfds[1]);
-        }
-    else // == 0, child
-        {
-        close(outfds[0]);
-        dup2(outfds[1], STDOUT_FILENO);
-        close(outfds[1]);
-        close(errfds[0]);
-        dup2(errfds[1], STDERR_FILENO);
-        close(errfds[1]);
-
-        char *args[4];
-        args[0] = (char *)"sh";
-        args[1] = (char *)"-c";
-        args[2] = (char *)command.c_str();
-        args[3] = NULL;
-        execv("/bin/sh", args);
-        exit(EXIT_FAILURE);
-        }
-
-    String outb;
-    String errb;
-
-    int outRead = outfds[0];
-    int errRead = errfds[0];
-    int max = outRead;
-    if (errRead > max)
-        max = errRead;
-
-    bool outOpen = true;
-    bool errOpen = true;
-
-    while (outOpen || errOpen)
-        {
-        char ch;
-        fd_set fdset;
-        FD_ZERO(&fdset);
-        if (outOpen)
-            FD_SET(outRead, &fdset);
-        if (errOpen)
-            FD_SET(errRead, &fdset);
-        int ret = select(max+1, &fdset, NULL, NULL, NULL);
-        if (ret < 0)
-            break;
-        if (FD_ISSET(outRead, &fdset))
-            {
-            if (read(outRead, &ch, 1) <= 0)
-                { outOpen = false; }
-            else if (ch <= 0)
-                { /* outOpen = false; */ }
-            else
-                { outb.push_back(ch); }
-            }
-        if (FD_ISSET(errRead, &fdset))
-            {
-            if (read(errRead, &ch, 1) <= 0)
-                { errOpen = false; }
-            else if (ch <= 0)
-                { /* errOpen = false; */ }
-            else
-                { errb.push_back(ch); }
-            }
-        }
-
-    int childReturnValue;
-    wait(&childReturnValue);
-
-    close(outRead);
-    close(errRead);
-
-    outbuf = outb;
-    errbuf = errb;
-
-    if (childReturnValue != 0)
-        {
-        error("exec of command '%s' failed : %s",
-             command.c_str(), strerror(childReturnValue));
-        return false;
-        }
-
-    return true;
-} 
-
-#endif
-
-
-
-
-bool MakeBase::listDirectories(const String &baseName,
-                              const String &dirName,
-                              std::vector &res)
-{
-    res.push_back(dirName);
-    String fullPath = baseName;
-    if (dirName.size()>0)
-        {
-        if (dirName[0]!='/') fullPath.append("/");
-        fullPath.append(dirName);
-        }
-    DIR *dir = opendir(fullPath.c_str());
-    while (true)
-        {
-        struct dirent *de = readdir(dir);
-        if (!de)
-            break;
-
-        //Get the directory member name
-        String s = de->d_name;
-        if (s.size() == 0 || s[0] == '.')
-            continue;
-        String childName = dirName;
-        childName.append("/");
-        childName.append(s);
-
-        String fullChildPath = baseName;
-        fullChildPath.append("/");
-        fullChildPath.append(childName);
-        struct stat finfo;
-        String childNative = getNativePath(fullChildPath);
-        if (cachedStat(childNative, &finfo)<0)
-            {
-            error("cannot stat file:%s", childNative.c_str());
-            }
-        else if (S_ISDIR(finfo.st_mode))
-            {
-            //trace("directory: %s", childName.c_str());
-            if (!listDirectories(baseName, childName, res))
-                return false;
-            }
-        }
-    closedir(dir);
-
-    return true;
-}
-
-
-bool MakeBase::listFiles(const String &baseDir,
-                         const String &dirName,
-                         std::vector &res)
-{
-    String fullDir = baseDir;
-    if (dirName.size()>0)
-        {
-        fullDir.append("/");
-        fullDir.append(dirName);
-        }
-    String dirNative = getNativePath(fullDir);
-
-    std::vector subdirs;
-    DIR *dir = opendir(dirNative.c_str());
-    if (!dir)
-        {
-        error("Could not open directory %s : %s",
-              dirNative.c_str(), strerror(errno));
-        return false;
-        }
-    while (true)
-        {
-        struct dirent *de = readdir(dir);
-        if (!de)
-            break;
-
-        //Get the directory member name
-        String s = de->d_name;
-        if (s.size() == 0 || s[0] == '.')
-            continue;
-        String childName;
-        if (dirName.size()>0)
-            {
-            childName.append(dirName);
-            childName.append("/");
-            }
-        childName.append(s);
-        String fullChild = baseDir;
-        fullChild.append("/");
-        fullChild.append(childName);
-        
-        if (isDirectory(fullChild))
-            {
-            //trace("directory: %s", childName.c_str());
-            if (!listFiles(baseDir, childName, res))
-                return false;
-            continue;
-            }
-        else if (!isRegularFile(fullChild))
-            {
-            error("unknown file:%s", childName.c_str());
-            return false;
-            }
-
-       //all done!
-        res.push_back(childName);
-
-        }
-    closedir(dir);
-
-    return true;
-}
-
-
-/**
- * Several different classes extend MakeBase.  By "propRef", we mean
- * the one holding the properties.  Likely "Make" itself
- */
-bool MakeBase::listFiles(MakeBase &propRef, FileSet &fileSet)
-{
-    //before doing the list,  resolve any property references
-    //that might have been specified in the directory name, such as ${src}
-    String fsDir = fileSet.getDirectory();
-    String dir;
-    if (!propRef.getSubstitutions(fsDir, dir))
-        return false;
-    String baseDir = propRef.resolve(dir);
-    std::vector fileList;
-    if (!listFiles(baseDir, "", fileList))
-        return false;
-
-    std::vector includes = fileSet.getIncludes();
-    std::vector excludes = fileSet.getExcludes();
-
-    std::vector incs;
-    std::vector::iterator iter;
-
-    std::sort(fileList.begin(), fileList.end());
-
-    //If there are , then add files to the output
-    //in the order of the include list
-    if (includes.size()==0)
-        incs = fileList;
-    else
-        {
-        for (iter = includes.begin() ; iter != includes.end() ; iter++)
-            {
-            String &pattern = *iter;
-            std::vector::iterator siter;
-            for (siter = fileList.begin() ; siter != fileList.end() ; siter++)
-                {
-                String s = *siter;
-                if (regexMatch(s, pattern))
-                    {
-                    //trace("INCLUDED:%s", s.c_str());
-                    incs.push_back(s);
-                    }
-                }
-            }
-        }
-
-    //Now trim off the 
-    std::vector res;
-    for (iter = incs.begin() ; iter != incs.end() ; iter++)
-        {
-        String s = *iter;
-        bool skipme = false;
-        std::vector::iterator siter;
-        for (siter = excludes.begin() ; siter != excludes.end() ; siter++)
-            {
-            String &pattern = *siter;
-            if (regexMatch(s, pattern))
-                {
-                //trace("EXCLUDED:%s", s.c_str());
-                skipme = true;
-                break;
-                }
-            }
-        if (!skipme)
-            res.push_back(s);
-        }
-        
-    fileSet.setFiles(res);
-
-    return true;
-}
-
-
-/**
- * 0 == all, 1 = cflags, 2 = libs
- */ 
-bool MakeBase::pkgConfigRecursive(const String packageName,
-                                  const String &path, 
-                                  const String &prefix, 
-                                  int query,
-                                  String &result,
-                                  std::set &deplist) 
-{
-    PkgConfig pkgConfig;
-    if (path.size() > 0)
-        pkgConfig.setPath(path);
-    if (prefix.size() > 0)
-        pkgConfig.setPrefix(prefix);
-    if (!pkgConfig.query(packageName))
-        return false;
-    if (query == 0)
-        result = pkgConfig.getAll();
-    else if (query == 1)
-        result = pkgConfig.getCflags();
-    else
-        result = pkgConfig.getLibs();
-    deplist.insert(packageName);
-    std::vector list = pkgConfig.getRequireList();
-    for (std::size_t i = 0 ; i deplist;
-    String path = getProperty("pkg-config-path");
-    if (path.size()>0)
-        path = resolve(path);
-    String prefix = getProperty("pkg-config-prefix");
-    String val;
-    if (!pkgConfigRecursive(packageName, path, prefix, query, val, deplist))
-        return false;
-    result = val;
-    return true;
-}
-
-
-
-/**
- * replace a variable ref like ${a} with a value
- */
-bool MakeBase::lookupProperty(const String &propertyName, String &result)
-{
-    String varname = propertyName;
-    if (envPrefix.size() > 0 &&
-        varname.compare(0, envPrefix.size(), envPrefix) == 0)
-        {
-        varname = varname.substr(envPrefix.size());
-        char *envstr = getenv(varname.c_str());
-        if (!envstr)
-            {
-            error("environment variable '%s' not defined", varname.c_str());
-            return false;
-            }
-        result = envstr;
-        }
-    else if (pcPrefix.size() > 0 &&
-        varname.compare(0, pcPrefix.size(), pcPrefix) == 0)
-        {
-        varname = varname.substr(pcPrefix.size());
-        String val;
-        if (!pkgConfigQuery(varname, 0, val))
-            return false;
-        result = val;
-        }
-    else if (pccPrefix.size() > 0 &&
-        varname.compare(0, pccPrefix.size(), pccPrefix) == 0)
-        {
-        varname = varname.substr(pccPrefix.size());
-        String val;
-        if (!pkgConfigQuery(varname, 1, val))
-            return false;
-        result = val;
-        }
-    else if (pclPrefix.size() > 0 &&
-        varname.compare(0, pclPrefix.size(), pclPrefix) == 0)
-        {
-        varname = varname.substr(pclPrefix.size());
-        String val;
-        if (!pkgConfigQuery(varname, 2, val))
-            return false;
-        result = val;
-        }
-    else if (bzrPrefix.size() > 0 &&
-        varname.compare(0, bzrPrefix.size(), bzrPrefix) == 0)
-        {
-        varname = varname.substr(bzrPrefix.size());
-        String val;
-        //SvnInfo svnInfo;
-        BzrRevno bzrRevno;
-        if (varname == "revision")
-	    {
-            if (!bzrRevno.query(val))
-                return "";
-            result = "r"+val;
-        }
-        /*if (!svnInfo.query(varname, val))
-            return false;
-        result = val;*/
-        }
-    else
-        {
-        std::map::iterator iter;
-        iter = properties.find(varname);
-        if (iter != properties.end())
-            {
-            result = iter->second;
-            }
-        else
-            {
-            error("property '%s' not found", varname.c_str());
-            return false;
-            }
-        }
-    return true;
-}
-
-
-
-
-/**
- * Analyse a string, looking for any substitutions or other
- * things that need resolution 
- */
-bool MakeBase::getSubstitutionsRecursive(const String &str,
-                                         String &result, int depth)
-{
-    if (depth > 10)
-        {
-        error("nesting of substitutions too deep (>10) for '%s'",
-                        str.c_str());
-        return false;
-        }
-    String s = trim(str);
-    int len = (int)s.size();
-    String val;
-    for (int i=0 ; igetAttribute(name);
-    String tmp;
-    bool ret = getSubstitutions(s, tmp);
-    if (ret)
-        result = s;  //assign -if- ok
-    return ret;
-}
-
-
-/**
- * Get a string value, testing it for proper syntax and
- * property names.
- */
-bool MakeBase::getValue(Element *elem, String &result)
-{
-    String s = elem->getValue();
-    String tmp;
-    bool ret = getSubstitutions(s, tmp);
-    if (ret)
-        result = s;  //assign -if- ok
-    return ret;
-}
-
-
-
-
-/**
- * Parse a  entry
- */  
-bool MakeBase::parsePatternSet(Element *elem,
-                          MakeBase &propRef,
-                          std::vector &includes,
-                          std::vector &excludes
-                          )
-{
-    std::vector children  = elem->getChildren();
-    for (std::size_t i=0 ; igetName();
-        if (tagName == "exclude")
-            {
-            String fname;
-            if (!propRef.getAttribute(child, "name", fname))
-                return false;
-            //trace("EXCLUDE: %s", fname.c_str());
-            excludes.push_back(fname);
-            }
-        else if (tagName == "include")
-            {
-            String fname;
-            if (!propRef.getAttribute(child, "name", fname))
-                return false;
-            //trace("INCLUDE: %s", fname.c_str());
-            includes.push_back(fname);
-            }
-        }
-
-    return true;
-}
-
-
-
-
-/**
- * Parse a  entry, and determine which files
- * should be included
- */  
-bool MakeBase::parseFileSet(Element *elem,
-                          MakeBase &propRef,
-                          FileSet &fileSet)
-{
-    String name = elem->getName();
-    if (name != "fileset")
-        {
-        error("expected ");
-        return false;
-        }
-
-
-    std::vector includes;
-    std::vector excludes;
-
-    //A fileset has one implied patternset
-    if (!parsePatternSet(elem, propRef, includes, excludes))
-        {
-        return false;
-        }
-    //Look for child tags, including more patternsets
-    std::vector children  = elem->getChildren();
-    for (std::size_t i=0 ; igetName();
-        if (tagName == "patternset")
-            {
-            if (!parsePatternSet(child, propRef, includes, excludes))
-                {
-                return false;
-                }
-            }
-        }
-
-    String dir;
-    //Now do the stuff
-    //Get the base directory for reading file names
-    if (!propRef.getAttribute(elem, "dir", dir))
-        return false;
-
-    fileSet.setDirectory(dir);
-    fileSet.setIncludes(includes);
-    fileSet.setExcludes(excludes);
-    
-    /*
-    std::vector fileList;
-    if (dir.size() > 0)
-        {
-        String baseDir = propRef.resolve(dir);
-        if (!listFiles(baseDir, "", includes, excludes, fileList))
-            return false;
-        }
-    std::sort(fileList.begin(), fileList.end());
-    result = fileList;
-    */
-
-    
-    /*
-    for (std::size_t i=0 ; i entry.  This is far simpler than FileSet,
- * since no directory scanning is needed.  The file names are listed
- * explicitly.
- */  
-bool MakeBase::parseFileList(Element *elem,
-                          MakeBase &propRef,
-                          FileList &fileList)
-{
-    std::vector fnames;
-    //Look for child tags, namely "file"
-    std::vector children  = elem->getChildren();
-    for (std::size_t i=0 ; igetName();
-        if (tagName == "file")
-            {
-            String fname = child->getAttribute("name");
-            if (fname.size()==0)
-                {
-                error(" element requires name="" attribute");
-                return false;
-                }
-            fnames.push_back(fname);
-            }
-        else
-            {
-            error("tag <%s> not allowed in ", tagName.c_str());
-            return false;
-            }
-        }
-
-    String dir;
-    //Get the base directory for reading file names
-    if (!propRef.getAttribute(elem, "dir", dir))
-        return false;
-    fileList.setDirectory(dir);
-    fileList.setFiles(fnames);
-
-    return true;
-}
-
-
-
-/**
- * Create a directory, making intermediate dirs
- * if necessary
- */                  
-bool MakeBase::createDirectory(const String &dirname)
-{
-    //trace("## createDirectory: %s", dirname.c_str());
-    //## first check if it exists
-    struct stat finfo;
-    String nativeDir = getNativePath(dirname);
-    char *cnative = (char *) nativeDir.c_str();
-#ifdef __WIN32__
-    if (strlen(cnative)==2 && cnative[1]==':')
-        return true;
-#endif
-    if (cachedStat(nativeDir, &finfo)==0)
-        {
-        if (!S_ISDIR(finfo.st_mode))
-            {
-            error("mkdir: file %s exists but is not a directory",
-                  cnative);
-            return false;
-            }
-        else //exists
-            {
-            return true;
-            }
-        }
-
-    //## 2: pull off the last path segment, if any,
-    //## to make the dir 'above' this one, if necessary
-    std::size_t pos = dirname.find_last_of('/');
-    if (pos>0 && pos != dirname.npos)
-        {
-        String subpath = dirname.substr(0, pos);
-        //A letter root (c:) ?
-        if (!createDirectory(subpath))
-            return false;
-        }
-        
-    //## 3: now make
-#ifdef __WIN32__
-    if (mkdir(cnative)<0)
-#else
-    if (mkdir(cnative, S_IRWXU | S_IRWXG | S_IRWXO)<0)
-#endif
-        {
-        error("cannot make directory '%s' : %s",
-                 cnative, strerror(errno));
-        return false;
-        }
-
-    removeFromStatCache(nativeDir);
-        
-    return true;
-}
-
-
-/**
- * Remove a directory recursively
- */ 
-bool MakeBase::removeDirectory(const String &dirName)
-{
-    char *dname = (char *)dirName.c_str();
-
-    DIR *dir = opendir(dname);
-    if (!dir)
-        {
-        //# Let this fail nicely.
-        return true;
-        //error("error opening directory %s : %s", dname, strerror(errno));
-        //return false;
-        }
-    
-    while (true)
-        {
-        struct dirent *de = readdir(dir);
-        if (!de)
-            break;
-
-        //Get the directory member name
-        String s = de->d_name;
-        if (s.size() == 0 || s[0] == '.')
-            continue;
-        String childName;
-        if (dirName.size() > 0)
-            {
-            childName.append(dirName);
-            childName.append("/");
-            }
-        childName.append(s);
-
-
-        struct stat finfo;
-        String childNative = getNativePath(childName);
-        char *cnative = (char *)childNative.c_str();
-        if (cachedStat(childNative, &finfo)<0)
-            {
-            error("cannot stat file:%s", cnative);
-            }
-        else if (S_ISDIR(finfo.st_mode))
-            {
-            //trace("DEL dir: %s", childName.c_str());
-            if (!removeDirectory(childName))
-                {
-                return false;
-                }
-            }
-        else if (!S_ISREG(finfo.st_mode))
-            {
-            //trace("not regular: %s", cnative);
-            }
-        else
-            {
-            //trace("DEL file: %s", childName.c_str());
-            if (!removeFile(childName))
-                {
-                return false;
-                }
-            }
-        }
-    closedir(dir);
-
-    //Now delete the directory
-    String native = getNativePath(dirName);
-    if (rmdir(native.c_str())<0)
-        {
-        error("could not delete directory %s : %s",
-            native.c_str() , strerror(errno));
-        return false;
-        }
-
-    removeFromStatCache(native);
-
-    return true;
-    
-}
-
-
-/**
- * Copy a file from one name to another. Perform only if needed
- */ 
-bool MakeBase::copyFile(const String &srcFile, const String &destFile)
-{
-    //# 1 Check up-to-date times
-    String srcNative = getNativePath(srcFile);
-    struct stat srcinfo;
-    if (cachedStat(srcNative, &srcinfo)<0)
-        {
-        error("source file %s for copy does not exist",
-                 srcNative.c_str());
-        return false;
-        }
-
-    String destNative = getNativePath(destFile);
-    struct stat destinfo;
-    if (cachedStat(destNative, &destinfo)==0)
-        {
-        if (destinfo.st_mtime >= srcinfo.st_mtime)
-            return true;
-        }
-        
-    //# 2 prepare a destination directory if necessary
-    std::size_t pos = destFile.find_last_of('/');
-    if (pos != destFile.npos)
-        {
-        String subpath = destFile.substr(0, pos);
-        if (!createDirectory(subpath))
-            return false;
-        }
-
-    //# 3 do the data copy
-#ifndef __WIN32__
-
-    FILE *srcf = fopen(srcNative.c_str(), "rb");
-    if (!srcf)
-        {
-        error("copyFile cannot open '%s' for reading", srcNative.c_str());
-        return false;
-        }
-    FILE *destf = fopen(destNative.c_str(), "wb");
-    if (!destf)
-        {
-        fclose(srcf);
-        error("copyFile cannot open %s for writing", srcNative.c_str());
-        return false;
-        }
-
-    while (!feof(srcf))
-        {
-        int ch = fgetc(srcf);
-        if (ch<0)
-            break;
-        fputc(ch, destf);
-        }
-
-    fclose(destf);
-    fclose(srcf);
-
-#else
-    
-    if (!CopyFile(srcNative.c_str(), destNative.c_str(), false))
-        {
-        error("copyFile from %s to %s failed",
-             srcNative.c_str(), destNative.c_str());
-        return false;
-        }
-        
-#endif /* __WIN32__ */
-
-    removeFromStatCache(destNative);
-
-    return true;
-}
-
-
-/**
- * Delete a file
- */ 
-bool MakeBase::removeFile(const String &file)
-{
-    String native = getNativePath(file);
-
-    if (!fileExists(native))
-        {
-        return true;
-        }
-
-#ifdef WIN32
-    // On Windows 'remove' will only delete files
-
-    if (remove(native.c_str())<0)
-        {
-        if (errno==EACCES)
-            {
-            error("File %s is read-only", native.c_str());
-            }
-        else if (errno==ENOENT)
-            {
-            error("File %s does not exist or is a directory", native.c_str());
-            }
-        else
-            {
-            error("Failed to delete file %s: %s", native.c_str(), strerror(errno));
-            }
-        return false;
-        }
-
-#else
-
-    if (!isRegularFile(native))
-        {
-        error("File %s does not exist or is not a regular file", native.c_str());
-        return false;
-        }
-
-    if (remove(native.c_str())<0)
-        {
-        if (errno==EACCES)
-            {
-            error("File %s is read-only", native.c_str());
-            }
-        else
-            {
-            error(
-                errno==EACCES ? "File %s is read-only" :
-                errno==ENOENT ? "File %s does not exist or is a directory" :
-                "Failed to delete file %s: %s", native.c_str());
-            }
-        return false;
-        }
-
-#endif
-
-    removeFromStatCache(native);
-
-    return true;
-}
-
-
-/**
- * Tests if the file exists
- */ 
-bool MakeBase::fileExists(const String &fileName)
-{
-    String native = getNativePath(fileName);
-    struct stat finfo;
-    
-    //Exists?
-    if (cachedStat(native, &finfo)<0)
-        return false;
-
-    return true;
-}
-
-
-/**
- * Tests if the file exists and is a regular file
- */ 
-bool MakeBase::isRegularFile(const String &fileName)
-{
-    String native = getNativePath(fileName);
-    struct stat finfo;
-    
-    //Exists?
-    if (cachedStat(native, &finfo)<0)
-        return false;
-
-
-    //check the file mode
-    if (!S_ISREG(finfo.st_mode))
-        return false;
-
-    return true;
-}
-
-/**
- * Tests if the file exists and is a directory
- */ 
-bool MakeBase::isDirectory(const String &fileName)
-{
-    String native = getNativePath(fileName);
-    struct stat finfo;
-    
-    //Exists?
-    if (cachedStat(native, &finfo)<0)
-        return false;
-
-
-    //check the file mode
-    if (!S_ISDIR(finfo.st_mode))
-        return false;
-
-    return true;
-}
-
-
-
-/**
- * Tests is the modification of fileA is newer than fileB
- */ 
-bool MakeBase::isNewerThan(const String &fileA, const String &fileB)
-{
-    //trace("isNewerThan:'%s' , '%s'", fileA.c_str(), fileB.c_str());
-    String nativeA = getNativePath(fileA);
-    struct stat infoA;
-    //IF source does not exist, NOT newer
-    if (cachedStat(nativeA, &infoA)<0)
-        {
-        return false;
-        }
-
-    String nativeB = getNativePath(fileB);
-    struct stat infoB;
-    //IF dest does not exist, YES, newer
-    if (cachedStat(nativeB, &infoB)<0)
-        {
-        return true;
-        }
-
-    //check the actual times
-    if (infoA.st_mtime > infoB.st_mtime)
-        {
-        return true;
-        }
-
-    return false;
-}
-
-
-//########################################################################
-//# P K G    C O N F I G
-//########################################################################
-
-
-/**
- * Get a character from the buffer at pos.  If out of range,
- * return -1 for safety
- */
-int PkgConfig::get(int pos)
-{
-    if (pos>parselen)
-        return -1;
-    return parsebuf[pos];
-}
-
-
-
-/**
- *  Skip over all whitespace characters beginning at pos.  Return
- *  the position of the first non-whitespace character.
- *  Pkg-config is line-oriented, so check for newline
- */
-int PkgConfig::skipwhite(int pos)
-{
-    while (pos < parselen)
-        {
-        int ch = get(pos);
-        if (ch < 0)
-            break;
-        if (!isspace(ch))
-            break;
-        pos++;
-        }
-    return pos;
-}
-
-
-/**
- *  Parse the buffer beginning at pos, for a word.  Fill
- *  'ret' with the result.  Return the position after the
- *  word.
- */
-int PkgConfig::getword(int pos, String &ret)
-{
-    while (pos < parselen)
-        {
-        int ch = get(pos);
-        if (ch < 0)
-            break;
-        if (!isalnum(ch) && ch != '_' && ch != '-' && ch != '+' && ch != '.')
-            break;
-        ret.push_back((char)ch);
-        pos++;
-        }
-    return pos;
-}
-
-bool PkgConfig::parseRequires()
-{
-    if (requires.size() == 0)
-        return true;
-    parsebuf = (char *)requires.c_str();
-    parselen = requires.size();
-    int pos = 0;
-    while (pos < parselen)
-        {
-        pos = skipwhite(pos);
-        String val;
-        int pos2 = getword(pos, val);
-        if (pos2 == pos)
-            break;
-        pos = pos2;
-        //trace("val %s", val.c_str());
-        requireList.push_back(val);
-        }
-    return true;
-}
-
-
-static int getint(const String str)
-{
-    char *s = (char *)str.c_str();
-    char *ends = NULL;
-    long val = strtol(s, &ends, 10);
-    if (ends == s)
-        return 0L;
-    else
-        return val;
-}
-
-void PkgConfig::parseVersion()
-{
-    if (version.size() == 0)
-        return;
-    String s1, s2, s3;
-    std::size_t pos = 0;
-    std::size_t pos2 = version.find('.', pos);
-    if (pos2 == version.npos)
-        {
-        s1 = version;
-        }
-    else
-        {
-        s1 = version.substr(pos, pos2-pos);
-        pos = pos2;
-        pos++;
-        if (pos < version.size())
-            {
-            pos2 = version.find('.', pos);
-            if (pos2 == version.npos)
-                {
-                s2 = version.substr(pos, version.size()-pos);
-                }
-            else
-                {
-                s2 = version.substr(pos, pos2-pos);
-                pos = pos2;
-                pos++;
-                if (pos < version.size())
-                    s3 = version.substr(pos, pos2-pos);
-                }
-            }
-        }
-
-    majorVersion = getint(s1);
-    minorVersion = getint(s2);
-    microVersion = getint(s3);
-    //trace("version:%d.%d.%d", majorVersion,
-    //          minorVersion, microVersion );
-}
-
-
-bool PkgConfig::parseLine(const String &lineBuf)
-{
-    parsebuf = (char *)lineBuf.c_str();
-    parselen = lineBuf.size();
-    int pos = 0;
-    
-    while (pos < parselen)
-        {
-        String attrName;
-        pos = skipwhite(pos);
-        int ch = get(pos);
-        if (ch == '#')
-            {
-            //comment.  eat the rest of the line
-            while (pos < parselen)
-                {
-                ch = get(pos);
-                if (ch == '\n' || ch < 0)
-                    break;
-                pos++;
-                }
-            continue;
-            }
-        pos = getword(pos, attrName);
-        if (attrName.size() == 0)
-            continue;
-        
-        pos = skipwhite(pos);
-        ch = get(pos);
-        if (ch != ':' && ch != '=')
-            {
-            error("expected ':' or '='");
-            return false;
-            }
-        pos++;
-        pos = skipwhite(pos);
-        String attrVal;
-        while (pos < parselen)
-            {
-            ch = get(pos);
-            if (ch == '\n' || ch < 0)
-                break;
-            else if (ch == '$' && get(pos+1) == '{')
-                {
-                //#  this is a ${substitution}
-                pos += 2;
-                String subName;
-                while (pos < parselen)
-                    {
-                    ch = get(pos);
-                    if (ch < 0)
-                        {
-                        error("unterminated substitution");
-                        return false;
-                        }
-                    else if (ch == '}')
-                        break;
-                    else
-                        subName.push_back((char)ch);
-                    pos++;
-                    }
-                //trace("subName:%s %s", subName.c_str(), prefix.c_str());
-                if (subName == "prefix" && prefix.size()>0)
-                    {
-                    attrVal.append(prefix);
-                    //trace("prefix override:%s", prefix.c_str());
-                    }
-                else
-                    {
-                    String subVal = attrs[subName];
-                    //trace("subVal:%s", subVal.c_str());
-                    attrVal.append(subVal);
-                    }
-                }
-            else
-                attrVal.push_back((char)ch);
-            pos++;
-            }
-
-        attrVal = trim(attrVal);
-        attrs[attrName] = attrVal;
-
-        String attrNameL = toLower(attrName);
-
-        if (attrNameL == "name")
-            name = attrVal;
-        else if (attrNameL == "description")
-            description = attrVal;
-        else if (attrNameL == "cflags")
-            cflags = attrVal;
-        else if (attrNameL == "libs")
-            libs = attrVal;
-        else if (attrNameL == "requires")
-            requires = attrVal;
-        else if (attrNameL == "version")
-            version = attrVal;
-
-        //trace("name:'%s'  value:'%s'",
-        //      attrName.c_str(), attrVal.c_str());
-        }
-
-    return true;
-}
-
-
-bool PkgConfig::parse(const String &buf)
-{
-    init();
-
-    String line;
-    int lineNr = 0;
-    for (std::size_t p=0 ; p0)
-        {
-        if (!parseLine(line))
-            return false;
-        }
-
-    parseRequires();
-    parseVersion();
-
-    return true;
-}
-
-
-
-
-void PkgConfig::dumpAttrs()
-{
-    //trace("### PkgConfig attributes for %s", fileName.c_str());
-    std::map::iterator iter;
-    for (iter=attrs.begin() ; iter!=attrs.end() ; iter++)
-        {
-        trace("   %s = %s", iter->first.c_str(), iter->second.c_str());
-        }
-}
-
-
-bool PkgConfig::readFile(const String &fname)
-{
-    fileName = getNativePath(fname);
-
-    FILE *f = fopen(fileName.c_str(), "r");
-    if (!f)
-        {
-        error("cannot open file '%s' for reading", fileName.c_str());
-        return false;
-        }
-    String buf;
-    while (true)
-        {
-        int ch = fgetc(f);
-        if (ch < 0)
-            break;
-        buf.push_back((char)ch);
-        }
-    fclose(f);
-
-    //trace("####### File:\n%s", buf.c_str());
-    if (!parse(buf))
-        {
-        return false;
-        }
-
-    //dumpAttrs();
-
-    return true;
-}
-
-
-
-bool PkgConfig::query(const String &pkgName)
-{
-    name = pkgName;
-
-    String fname = path;
-    fname.append("/");
-    fname.append(name);
-    fname.append(".pc");
-
-    if (!readFile(fname))
-        {
-        error("Cannot find package '%s'. Do you have it installed?",
-                       pkgName.c_str());
-        return false;
-        }
-    
-    return true;
-}
-
-
-//########################################################################
-//# D E P T O O L
-//########################################################################
-
-
-
-/**
- *  Class which holds information for each file.
- */
-class FileRec
-{
-public:
-
-    typedef enum
-        {
-        UNKNOWN,
-        CFILE,
-        HFILE,
-        OFILE
-        } FileType;
-
-    /**
-     *  Constructor
-     */
-    FileRec()
-        { init(); type = UNKNOWN; }
-
-    /**
-     *  Copy constructor
-     */
-    FileRec(const FileRec &other)
-        { init(); assign(other); }
-    /**
-     *  Constructor
-     */
-    FileRec(int typeVal)
-        { init(); type = typeVal; }
-    /**
-     *  Assignment operator
-     */
-    FileRec &operator=(const FileRec &other)
-        { init(); assign(other); return *this; }
-
-
-    /**
-     *  Destructor
-     */
-    ~FileRec()
-        {}
-
-    /**
-     *  Directory part of the file name
-     */
-    String path;
-
-    /**
-     *  Base name, sans directory and suffix
-     */
-    String baseName;
-
-    /**
-     *  File extension, such as cpp or h
-     */
-    String suffix;
-
-    /**
-     *  Type of file: CFILE, HFILE, OFILE
-     */
-    int type;
-
-    /**
-     * Used to list files ref'd by this one
-     */
-    std::map files;
-
-
-private:
-
-    void init()
-        {
-        }
-
-    void assign(const FileRec &other)
-        {
-        type     = other.type;
-        baseName = other.baseName;
-        suffix   = other.suffix;
-        files    = other.files;
-        }
-
-};
-
-
-
-/**
- *  Simpler dependency record
- */
-class DepRec
-{
-public:
-
-    /**
-     *  Constructor
-     */
-    DepRec()
-        {init();}
-
-    /**
-     *  Copy constructor
-     */
-    DepRec(const DepRec &other)
-        {init(); assign(other);}
-    /**
-     *  Constructor
-     */
-    DepRec(const String &fname)
-        {init(); name = fname; }
-    /**
-     *  Assignment operator
-     */
-    DepRec &operator=(const DepRec &other)
-        {init(); assign(other); return *this;}
-
-
-    /**
-     *  Destructor
-     */
-    ~DepRec()
-        {}
-
-    /**
-     *  Directory part of the file name
-     */
-    String path;
-
-    /**
-     *  Base name, without the path and suffix
-     */
-    String name;
-
-    /**
-     *  Suffix of the source
-     */
-    String suffix;
-
-
-    /**
-     * Used to list files ref'd by this one
-     */
-    std::vector files;
-
-
-private:
-
-    void init()
-        {
-        }
-
-    void assign(const DepRec &other)
-        {
-        path     = other.path;
-        name     = other.name;
-        suffix   = other.suffix;
-        files    = other.files; //avoid recursion
-        }
-
-};
-
-
-class DepTool : public MakeBase
-{
-public:
-
-    /**
-     *  Constructor
-     */
-    DepTool()
-        { init(); }
-
-    /**
-     *  Copy constructor
-     */
-    DepTool(const DepTool &other)
-        { init(); assign(other); }
-
-    /**
-     *  Assignment operator
-     */
-    DepTool &operator=(const DepTool &other)
-        { init(); assign(other); return *this; }
-
-
-    /**
-     *  Destructor
-     */
-    ~DepTool()
-        {}
-
-
-    /**
-     *  Reset this section of code
-     */
-    virtual void init();
-    
-    /**
-     *  Reset this section of code
-     */
-    virtual void assign(const DepTool &other)
-        {
-        }
-    
-    /**
-     *  Sets the source directory which will be scanned
-     */
-    virtual void setSourceDirectory(const String &val)
-        { sourceDir = val; }
-
-    /**
-     *  Returns the source directory which will be scanned
-     */
-    virtual String getSourceDirectory()
-        { return sourceDir; }
-
-    /**
-     *  Sets the list of files within the directory to analyze
-     */
-    virtual void setFileList(const std::vector &list)
-        { fileList = list; }
-
-    /**
-     * Creates the list of all file names which will be
-     * candidates for further processing.  Reads make.exclude
-     * to see which files for directories to leave out.
-     */
-    virtual bool createFileList();
-
-
-    /**
-     *  Generates the forward dependency list
-     */
-    virtual bool generateDependencies();
-
-
-    /**
-     *  Generates the forward dependency list, saving the file
-     */
-    virtual bool generateDependencies(const String &);
-
-
-    /**
-     *  Load a dependency file
-     */
-    std::vector loadDepFile(const String &fileName);
-
-    /**
-     *  Load a dependency file, generating one if necessary
-     */
-    std::vector getDepFile(const String &fileName,
-              bool forceRefresh);
-
-    /**
-     *  Save a dependency file
-     */
-    bool saveDepFile(const String &fileName);
-
-
-private:
-
-
-    /**
-     *
-     */
-    void parseName(const String &fullname,
-                   String &path,
-                   String &basename,
-                   String &suffix);
-
-    /**
-     *
-     */
-    int get(int pos);
-
-    /**
-     *
-     */
-    int skipwhite(int pos);
-
-    /**
-     *
-     */
-    int getword(int pos, String &ret);
-
-    /**
-     *
-     */
-    bool sequ(int pos, const char *key);
-
-    /**
-     *
-     */
-    bool addIncludeFile(FileRec *frec, const String &fname);
-
-    /**
-     *
-     */
-    bool scanFile(const String &fname, FileRec *frec);
-
-    /**
-     *
-     */
-    bool processDependency(FileRec *ofile, FileRec *include);
-
-    /**
-     *
-     */
-    String sourceDir;
-
-    /**
-     *
-     */
-    std::vector fileList;
-
-    /**
-     *
-     */
-    std::vector directories;
-
-    /**
-     * A list of all files which will be processed for
-     * dependencies.
-     */
-    std::map allFiles;
-
-    /**
-     * The list of .o files, and the
-     * dependencies upon them.
-     */
-    std::map oFiles;
-
-    int depFileSize;
-    char *depFileBuf;
-
-    static const int readBufSize = 8192;
-    char readBuf[8193];//byte larger
-
-};
-
-
-
-
-
-/**
- *  Clean up after processing.  Called by the destructor, but should
- *  also be called before the object is reused.
- */
-void DepTool::init()
-{
-    sourceDir = ".";
-
-    fileList.clear();
-    directories.clear();
-    
-    //clear output file list
-    std::map::iterator iter;
-    for (iter=oFiles.begin(); iter!=oFiles.end() ; iter++)
-        delete iter->second;
-    oFiles.clear();
-
-    //allFiles actually contains the master copies. delete them
-    for (iter= allFiles.begin(); iter!=allFiles.end() ; iter++)
-        delete iter->second;
-    allFiles.clear(); 
-
-}
-
-
-
-
-/**
- *  Parse a full path name into path, base name, and suffix
- */
-void DepTool::parseName(const String &fullname,
-                        String &path,
-                        String &basename,
-                        String &suffix)
-{
-    if (fullname.size() < 2)
-        return;
-
-    std::size_t pos = fullname.find_last_of('/');
-    if (pos != fullname.npos && pospath            = path;
-            fe->baseName        = basename;
-            fe->suffix          = sfx;
-            allFiles[fileName]  = fe;
-            }
-        else if (sfx == "h"   ||  sfx == "hh"  ||
-                 sfx == "hpp" ||  sfx == "hxx")
-            {
-            FileRec *fe         = new FileRec(FileRec::HFILE);
-            fe->path            = path;
-            fe->baseName        = basename;
-            fe->suffix          = sfx;
-            allFiles[fileName]  = fe;
-            }
-        }
-
-    if (!listDirectories(sourceDir, "", directories))
-        return false;
-        
-    return true;
-}
-
-
-
-
-
-/**
- * Get a character from the buffer at pos.  If out of range,
- * return -1 for safety
- */
-int DepTool::get(int pos)
-{
-    if (pos>depFileSize)
-        return -1;
-    return depFileBuf[pos];
-}
-
-
-
-/**
- *  Skip over all whitespace characters beginning at pos.  Return
- *  the position of the first non-whitespace character.
- */
-int DepTool::skipwhite(int pos)
-{
-    while (pos < depFileSize)
-        {
-        int ch = get(pos);
-        if (ch < 0)
-            break;
-        if (!isspace(ch))
-            break;
-        pos++;
-        }
-    return pos;
-}
-
-
-/**
- *  Parse the buffer beginning at pos, for a word.  Fill
- *  'ret' with the result.  Return the position after the
- *  word.
- */
-int DepTool::getword(int pos, String &ret)
-{
-    while (pos < depFileSize)
-        {
-        int ch = get(pos);
-        if (ch < 0)
-            break;
-        if (isspace(ch))
-            break;
-        ret.push_back((char)ch);
-        pos++;
-        }
-    return pos;
-}
-
-/**
- * Return whether the sequence of characters in the buffer
- * beginning at pos match the key,  for the length of the key
- */
-bool DepTool::sequ(int pos, const char *key)
-{
-    while (*key)
-        {
-        if (*key != get(pos))
-            return false;
-        key++; pos++;
-        }
-    return true;
-}
-
-
-
-/**
- *  Add an include file name to a file record.  If the name
- *  is not found in allFiles explicitly, try prepending include
- *  directory names to it and try again.
- */
-bool DepTool::addIncludeFile(FileRec *frec, const String &iname)
-{
-    //# if the name is an exact match to a path name
-    //# in allFiles, like "myinc.h"
-    std::map::iterator iter =
-           allFiles.find(iname);
-    if (iter != allFiles.end()) //already exists
-        {
-         //h file in same dir
-        FileRec *other = iter->second;
-        //trace("local: '%s'", iname.c_str());
-        frec->files[iname] = other;
-        return true;
-        }
-    else 
-        {
-        //## Ok, it was not found directly
-        //look in other dirs
-        std::vector::iterator diter;
-        for (diter=directories.begin() ;
-             diter!=directories.end() ; diter++)
-            {
-            String dfname = *diter;
-            dfname.append("/");
-            dfname.append(iname);
-            URI fullPathURI(dfname);  //normalize path name
-            String fullPath = fullPathURI.getPath();
-            if (fullPath[0] == '/')
-                fullPath = fullPath.substr(1);
-            //trace("Normalized %s to %s", dfname.c_str(), fullPath.c_str());
-            iter = allFiles.find(fullPath);
-            if (iter != allFiles.end())
-                {
-                FileRec *other = iter->second;
-                //trace("other: '%s'", iname.c_str());
-                frec->files[fullPath] = other;
-                return true;
-                }
-            }
-        }
-    return true;
-}
-
-
-
-/**
- *  Lightly parse a file to find the #include directives.  Do
- *  a bit of state machine stuff to make sure that the directive
- *  is valid.  (Like not in a comment).
- */
-bool DepTool::scanFile(const String &fname, FileRec *frec)
-{
-    String fileName;
-    if (sourceDir.size() > 0)
-        {
-        fileName.append(sourceDir);
-        fileName.append("/");
-        }
-    fileName.append(fname);
-    String nativeName = getNativePath(fileName);
-    FILE *f = fopen(nativeName.c_str(), "r");
-    if (!f)
-        {
-        error("Could not open '%s' for reading", fname.c_str());
-        return false;
-        }
-    String buf;
-    while (!feof(f))
-        {
-        int nrbytes = fread(readBuf, 1, readBufSize, f);
-        readBuf[nrbytes] = '\0';
-        buf.append(readBuf);
-        }
-    fclose(f);
-
-    depFileSize = buf.size();
-    depFileBuf  = (char *)buf.c_str();
-    int pos = 0;
-
-
-    while (pos < depFileSize)
-        {
-        //trace("p:%c", get(pos));
-
-        //# Block comment
-        if (get(pos) == '/' && get(pos+1) == '*')
-            {
-            pos += 2;
-            while (pos < depFileSize)
-                {
-                if (get(pos) == '*' && get(pos+1) == '/')
-                    {
-                    pos += 2;
-                    break;
-                    }
-                else
-                    pos++;
-                }
-            }
-        //# Line comment
-        else if (get(pos) == '/' && get(pos+1) == '/')
-            {
-            pos += 2;
-            while (pos < depFileSize)
-                {
-                if (get(pos) == '\n')
-                    {
-                    pos++;
-                    break;
-                    }
-                else
-                    pos++;
-                }
-            }
-        //# #include! yaay
-        else if (sequ(pos, "#include"))
-            {
-            pos += 8;
-            pos = skipwhite(pos);
-            String iname;
-            pos = getword(pos, iname);
-            if (iname.size()>2)
-                {
-                iname = iname.substr(1, iname.size()-2);
-                addIncludeFile(frec, iname);
-                }
-            }
-        else
-            {
-            pos++;
-            }
-        }
-
-    return true;
-}
-
-
-
-/**
- *  Recursively check include lists to find all files in allFiles to which
- *  a given file is dependent.
- */
-bool DepTool::processDependency(FileRec *ofile, FileRec *include)
-{
-    std::map::iterator iter;
-    for (iter=include->files.begin() ; iter!=include->files.end() ; iter++)
-        {
-        String fname  = iter->first;
-        if (ofile->files.find(fname) != ofile->files.end())
-            {
-            //trace("file '%s' already seen", fname.c_str());
-            continue;
-            }
-        FileRec *child  = iter->second;
-        ofile->files[fname] = child;
-      
-        processDependency(ofile, child);
-        }
-
-
-    return true;
-}
-
-
-
-
-
-/**
- *  Generate the file dependency list.
- */
-bool DepTool::generateDependencies()
-{
-    std::map::iterator iter;
-    //# First pass.  Scan for all includes
-    for (iter=allFiles.begin() ; iter!=allFiles.end() ; iter++)
-        {
-        FileRec *frec = iter->second;
-        if (!scanFile(iter->first, frec))
-            {
-            //quit?
-            }
-        }
-
-    //# Second pass.  Scan for all includes
-    for (iter=allFiles.begin() ; iter!=allFiles.end() ; iter++)
-        {
-        FileRec *include = iter->second;
-        if (include->type == FileRec::CFILE)
-            {
-            //String cFileName   = iter->first;
-            FileRec *ofile     = new FileRec(FileRec::OFILE);
-            ofile->path        = include->path;
-            ofile->baseName    = include->baseName;
-            ofile->suffix      = include->suffix;
-            String fname       = include->path;
-            if (fname.size()>0)
-                fname.append("/");
-            fname.append(include->baseName);
-            fname.append(".o");
-            oFiles[fname]    = ofile;
-            //add the .c file first?   no, don't
-            //ofile->files[cFileName] = include;
-            
-            //trace("ofile:%s", fname.c_str());
-
-            processDependency(ofile, include);
-            }
-        }
-
-      
-    return true;
-}
-
-
-
-/**
- *  High-level call to generate deps and optionally save them
- */
-bool DepTool::generateDependencies(const String &fileName)
-{
-    if (!createFileList())
-        return false;
-    if (!generateDependencies())
-        return false;
-    if (!saveDepFile(fileName))
-        return false;
-    return true;
-}
-
-
-/**
- *   This saves the dependency cache.
- */
-bool DepTool::saveDepFile(const String &fileName)
-{
-    time_t tim;
-    time(&tim);
-
-    FILE *f = fopen(fileName.c_str(), "w");
-    if (!f)
-        {
-        trace("cannot open '%s' for writing", fileName.c_str());
-        }
-    fprintf(f, "\n");
-    fprintf(f, "\n");
-
-    fprintf(f, "\n\n", sourceDir.c_str());
-    std::map::iterator iter;
-    for (iter=oFiles.begin() ; iter!=oFiles.end() ; iter++)
-        {
-        FileRec *frec = iter->second;
-        if (frec->type == FileRec::OFILE)
-            {
-            fprintf(f, "\n",
-                 frec->path.c_str(), frec->baseName.c_str(), frec->suffix.c_str());
-            std::map::iterator citer;
-            for (citer=frec->files.begin() ; citer!=frec->files.end() ; citer++)
-                {
-                String cfname = citer->first;
-                fprintf(f, "    \n", cfname.c_str());
-                }
-            fprintf(f, "\n\n");
-            }
-        }
-
-    fprintf(f, "\n");
-    fprintf(f, "\n");
-    fprintf(f, "\n");
-
-    fclose(f);
-
-    return true;
-}
-
-
-
-
-/**
- *   This loads the dependency cache.
- */
-std::vector DepTool::loadDepFile(const String &depFile)
-{
-    std::vector result;
-    
-    Parser parser;
-    Element *root = parser.parseFile(depFile.c_str());
-    if (!root)
-        {
-        //error("Could not open %s for reading", depFile.c_str());
-        return result;
-        }
-
-    if (root->getChildren().size()==0 ||
-        root->getChildren()[0]->getName()!="dependencies")
-        {
-        error("loadDepFile: main xml element should be ");
-        delete root;
-        return result;
-        }
-
-    //########## Start parsing
-    Element *depList = root->getChildren()[0];
-
-    std::vector objects = depList->getChildren();
-    for (std::size_t i=0 ; igetName();
-        if (tagName != "object")
-            {
-            error("loadDepFile:  should have only  children");
-            return result;
-            }
-
-        String objName   = objectElem->getAttribute("name");
-         //trace("object:%s", objName.c_str());
-        DepRec depObject(objName);
-        depObject.path   = objectElem->getAttribute("path");
-        depObject.suffix = objectElem->getAttribute("suffix");
-        //########## DESCRIPTION
-        std::vector depElems = objectElem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName != "dep")
-                {
-                error("loadDepFile:  should have only  children");
-                return result;
-                }
-            String depName = depElem->getAttribute("name");
-            //trace("    dep:%s", depName.c_str());
-            depObject.files.push_back(depName);
-            }
-
-        //Insert into the result list, in a sorted manner
-        bool inserted = false;
-        std::vector::iterator iter;
-        for (iter = result.begin() ; iter != result.end() ; iter++)
-            {
-            String vpath = iter->path;
-            vpath.append("/");
-            vpath.append(iter->name);
-            String opath = depObject.path;
-            opath.append("/");
-            opath.append(depObject.name);
-            if (vpath > opath)
-                {
-                inserted = true;
-                iter = result.insert(iter, depObject);
-                break;
-                }
-            }
-        if (!inserted)
-            result.push_back(depObject);
-        }
-
-    delete root;
-
-    return result;
-}
-
-
-/**
- *   This loads the dependency cache.
- */
-std::vector DepTool::getDepFile(const String &depFile,
-                   bool forceRefresh)
-{
-    std::vector result;
-    if (forceRefresh)
-        {
-        generateDependencies(depFile);
-        result = loadDepFile(depFile);
-        }
-    else
-        {
-        //try once
-        result = loadDepFile(depFile);
-        if (result.size() == 0)
-            {
-            //fail? try again
-            generateDependencies(depFile);
-            result = loadDepFile(depFile);
-            }
-        }
-    return result;
-}
-
-
-
-
-//########################################################################
-//# T A S K
-//########################################################################
-//forward decl
-class Target;
-class Make;
-
-/**
- *
- */
-class Task : public MakeBase
-{
-
-public:
-
-    typedef enum
-        {
-        TASK_NONE,
-        TASK_CC,
-        TASK_COPY,
-        TASK_CXXTEST_PART,
-        TASK_CXXTEST_ROOT,
-        TASK_CXXTEST_RUN,
-        TASK_DELETE,
-        TASK_ECHO,
-        TASK_JAR,
-        TASK_JAVAC,
-        TASK_LINK,
-        TASK_MAKEFILE,
-        TASK_MKDIR,
-        TASK_MSGFMT,
-        TASK_PKG_CONFIG,
-        TASK_RANLIB,
-        TASK_RC,
-        TASK_SHAREDLIB,
-        TASK_STATICLIB,
-        TASK_STRIP,
-        TASK_TOUCH,
-        TASK_TSTAMP
-        } TaskType;
-        
-
-    /**
-     *
-     */
-    Task(MakeBase &par) : parent(par)
-        { init(); }
-
-    /**
-     *
-     */
-    Task(const Task &other) : parent(other.parent)
-        { init(); assign(other); }
-
-    /**
-     *
-     */
-    Task &operator=(const Task &other)
-        { assign(other); return *this; }
-
-    /**
-     *
-     */
-    virtual ~Task()
-        { }
-
-
-    /**
-     *
-     */
-    virtual MakeBase &getParent()
-        { return parent; }
-
-     /**
-     *
-     */
-    virtual int  getType()
-        { return type; }
-
-    /**
-     *
-     */
-    virtual void setType(int val)
-        { type = val; }
-
-    /**
-     *
-     */
-    virtual String getName()
-        { return name; }
-
-    /**
-     *
-     */
-    virtual bool execute()
-        { return true; }
-
-    /**
-     *
-     */
-    virtual bool parse(Element *elem)
-        { return true; }
-
-    /**
-     *
-     */
-    Task *createTask(Element *elem, int lineNr);
-
-
-protected:
-
-    void init()
-        {
-        type = TASK_NONE;
-        name = "none";
-        }
-
-    void assign(const Task &other)
-        {
-        type = other.type;
-        name = other.name;
-        }
-        
-    /**
-     *  Show task status
-     */
-    void taskstatus(const char *fmt, ...)
-        {
-        va_list args;
-        va_start(args,fmt);
-        fprintf(stdout, "    %s : ", name.c_str());
-        vfprintf(stdout, fmt, args);
-        fprintf(stdout, "\n");
-        va_end(args) ;
-        }
-
-    String getAttribute(Element *elem, const String &attrName)
-        {
-        String str;
-        return str;
-        }
-
-    MakeBase &parent;
-
-    int type;
-
-    String name;
-};
-
-
-
-/**
- * This task runs the C/C++ compiler.  The compiler is invoked
- * for all .c or .cpp files which are newer than their correcsponding
- * .o files.  
- */
-class TaskCC : public Task
-{
-public:
-
-    TaskCC(MakeBase &par) : Task(par)
-        {
-        type = TASK_CC;
-        name = "cc";
-        }
-
-    virtual ~TaskCC()
-        {}
-        
-    virtual bool isExcludedInc(const String &dirname)
-        {
-        for (std::size_t i=0 ; i deps =
-             depTool.getDepFile("build.dep", refreshCache);
-        
-        String incs;
-        incs.append("-I");
-        incs.append(parent.resolve("."));
-        incs.append(" ");
-        if (includes.size()>0)
-            {
-            incs.append(includes);
-            incs.append(" ");
-            }
-        std::set paths;
-        std::vector::iterator viter;
-        for (viter=deps.begin() ; viter!=deps.end() ; viter++)
-            {
-            DepRec dep = *viter;
-            if (dep.path.size()>0)
-                paths.insert(dep.path);
-            }
-        if (source.size()>0)
-            {
-            incs.append(" -I");
-            incs.append(parent.resolve(source));
-            incs.append(" ");
-            }
-        std::set::iterator setIter;
-        for (setIter=paths.begin() ; setIter!=paths.end() ; setIter++)
-            {
-            String dirName = *setIter;
-            //check excludeInc to see if we dont want to include this dir
-            if (isExcludedInc(dirName))
-                continue;
-            incs.append(" -I");
-            String dname;
-            if (source.size()>0)
-                {
-                dname.append(source);
-                dname.append("/");
-                }
-            dname.append(dirName);
-            incs.append(parent.resolve(dname));
-            }
-
-// First create all directories, fails if done in OpenMP parallel loop below... goes superfast anyway, so don't optimize
-        for (std::size_t fi = 0; fi < deps.size() ; ++fi)
-        {
-            DepRec dep = deps[fi];
- 
-            //## Make paths
-            String destPath = dest;
-            if (dep.path.size()>0)
-            {
-                destPath.append("/");
-                destPath.append(dep.path);
-            }
-            //## Make sure destination directory exists
-            if (!createDirectory(destPath))
-            {
-                taskstatus("problem creating folder: %s", destPath.c_str());
-                if (f) {
-                    fclose(f);
-                }
-                return false;
-            }
-        }
-
-        /**
-         * Compile each of the C files that need it
-         */
-        bool errorOccurred = false;
-
-#ifdef _OPENMP 
-        taskstatus("compile with %d threads in parallel", numThreads);
-#       pragma omp parallel for num_threads(numThreads)
-#endif
-
-        for (std::size_t fi = 0; fi < deps.size() ; ++fi)
-        {
-            DepRec dep = deps[fi];
-
-            //## Select command
-            String sfx = dep.suffix;
-            String command = ccCommand;
-            String flags = ccflags;
-            if (sfx == "cpp" || sfx == "cxx" || sfx == "c++" ||
-                 sfx == "cc" || sfx == "CC")
-            {
-                command = cxxCommand;
-                flags += " " + cxxflags;
-            }
- 
-            //## Make paths
-            String destPath = dest;
-            String srcPath  = source;
-            if (dep.path.size()>0)
-            {
-                destPath.append("/");
-                destPath.append(dep.path);
-                srcPath.append("/");
-                srcPath.append(dep.path);
-            }
-
-            //## Check whether it needs to be done
-            String destName;
-            if (destPath.size()>0)
-                {
-                destName.append(destPath);
-                destName.append("/");
-                }
-            destName.append(dep.name);
-            destName.append(".o");
-            String destFullName = parent.resolve(destName);
-            String srcName;
-            if (srcPath.size()>0)
-                {
-                srcName.append(srcPath);
-                srcName.append("/");
-                }
-            srcName.append(dep.name);
-            srcName.append(".");
-            srcName.append(dep.suffix);
-            String srcFullName = parent.resolve(srcName);
-            bool compileMe = false;
-            //# First we check if the source is newer than the .o
-            if (isNewerThan(srcFullName, destFullName))
-                {
-//                taskstatus("compile of %s (req. by: %s)",
-//                        destFullName.c_str(), srcFullName.c_str());
-                fprintf(stdout, "compile %s\n", srcFullName.c_str());
-                compileMe = true;
-                }
-            else
-                {
-                //# secondly, we check if any of the included dependencies
-                //# of the .c/.cpp is newer than the .o
-                for (std::size_t i=0 ; i0)
-                        {
-                        depName.append(source);
-                        depName.append("/");
-                        }
-                    depName.append(dep.files[i]);
-                    String depFullName = parent.resolve(depName);
-                    bool depRequires = isNewerThan(depFullName, destFullName);
-                    //trace("%d %s %s\n", depRequires,
-                    //        destFullName.c_str(), depFullName.c_str());
-                    if (depRequires)
-                        {
-                        taskstatus("compile %s (%s modified)",
-                                srcFullName.c_str(), depFullName.c_str());
-                        compileMe = true;
-                        break;
-                        }
-                    }
-                }
-            if (!compileMe)
-                {
-                continue;
-                }
-
-            //## Assemble the command
-            String cmd = command;
-            cmd.append(" -c ");
-            cmd.append(flags);
-            cmd.append(" ");
-            cmd.append(defines);
-            cmd.append(" ");
-            cmd.append(incs);
-            cmd.append(" ");
-            cmd.append(srcFullName);
-            cmd.append(" -o ");
-            cmd.append(destFullName);
-
-            //## Execute the command
-
-            String outString, errString;
-            bool ret = executeCommand(cmd.c_str(), "", outString, errString);
-
-            if (f)
-                {
-                fprintf(f, "########################### File : %s\n",
-                             srcFullName.c_str());
-                fprintf(f, "#### COMMAND ###\n");
-                int col = 0;
-                for (std::size_t i = 0 ; i < cmd.size() ; i++)
-                    {
-                    char ch = cmd[i];
-                    if (isspace(ch)  && col > 63)
-                        {
-                        fputc('\n', f);
-                        col = 0;
-                        }
-                    else
-                        {
-                        fputc(ch, f);
-                        col++;
-                        }
-                    if (col > 76)
-                        {
-                        fputc('\n', f);
-                        col = 0;
-                        }
-                    }
-                fprintf(f, "\n");
-                fprintf(f, "#### STDOUT ###\n%s\n", outString.c_str());
-                fprintf(f, "#### STDERR ###\n%s\n\n", errString.c_str());
-                fflush(f);
-                }
-            if (!ret) {
-                error("problem compiling: %s", errString.c_str());
-                errorOccurred = true;
-            } else if (!errString.empty()) {
-                fprintf(stdout, "STDERR: \n%s\n", errString.c_str());
-            }
-
-
-            if (errorOccurred && !continueOnError) {
-#ifndef _OPENMP // figure out a way to break the loop here with OpenMP
-                break;
-#endif
-            }
-
-            removeFromStatCache(getNativePath(destFullName));
-        }
-
-        if (f)
-            {
-            fclose(f);
-            }
-        
-        return !errorOccurred;
-        }
-
-
-    virtual bool parse(Element *elem)
-        {
-        String s;
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (commandOpt.size()>0)
-            { cxxCommandOpt = ccCommandOpt = commandOpt; }
-        if (!parent.getAttribute(elem, "cc", ccCommandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "cxx", cxxCommandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "destdir", destOpt))
-            return false;
-        if (!parent.getAttribute(elem, "continueOnError", continueOnErrorOpt))
-            return false;
-        if (!parent.getAttribute(elem, "refreshCache", refreshCacheOpt))
-            return false;
-
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "flags")
-                {
-                if (!parent.getValue(child, flagsOpt))
-                    return false;
-                flagsOpt = strip(flagsOpt);
-                }
-            else if (tagName == "cxxflags")
-                {
-                if (!parent.getValue(child, cxxflagsOpt))
-                    return false;
-                cxxflagsOpt = strip(cxxflagsOpt);
-                }
-            else if (tagName == "includes")
-                {
-                if (!parent.getValue(child, includesOpt))
-                    return false;
-                includesOpt = strip(includesOpt);
-                }
-            else if (tagName == "defines")
-                {
-                if (!parent.getValue(child, definesOpt))
-                    return false;
-                definesOpt = strip(definesOpt);
-                }
-            else if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                sourceOpt = fileSet.getDirectory();
-                }
-            else if (tagName == "excludeinc")
-                {
-                if (!parseFileList(child, parent, excludeInc))
-                    return false;
-                }
-            }
-
-        return true;
-        }
-        
-protected:
-
-    String   commandOpt;
-    String   ccCommandOpt;
-    String   cxxCommandOpt;
-    String   sourceOpt;
-    String   destOpt;
-    String   flagsOpt;
-    String   cxxflagsOpt;
-    String   definesOpt;
-    String   includesOpt;
-    String   continueOnErrorOpt;
-    String   refreshCacheOpt;
-    FileSet  fileSet;
-    FileList excludeInc;
-    
-};
-
-
-
-/**
- *
- */
-class TaskCopy : public Task
-{
-public:
-
-    typedef enum
-        {
-        CP_NONE,
-        CP_TOFILE,
-        CP_TODIR
-        } CopyType;
-
-    TaskCopy(MakeBase &par) : Task(par)
-        {
-        type        = TASK_COPY;
-        name        = "copy";
-        cptype      = CP_NONE;
-        haveFileSet = false;
-        }
-
-    virtual ~TaskCopy()
-        {}
-
-    virtual bool execute()
-        {
-        String fileName   = parent.eval(fileNameOpt   , ".");
-        String toFileName = parent.eval(toFileNameOpt , ".");
-        String toDirName  = parent.eval(toDirNameOpt  , ".");
-        bool   verbose    = parent.evalBool(verboseOpt, false);
-        switch (cptype)
-           {
-           case CP_TOFILE:
-               {
-               if (fileName.size()>0)
-                   {
-                   taskstatus("%s to %s",
-                        fileName.c_str(), toFileName.c_str());
-                   String fullSource = parent.resolve(fileName);
-                   String fullDest = parent.resolve(toFileName);
-                   if (verbose)
-                       taskstatus("copy %s to file %s", fullSource.c_str(),
-                                          fullDest.c_str());
-                   if (!isRegularFile(fullSource))
-                       {
-                       error("copy : file %s does not exist", fullSource.c_str());
-                       return false;
-                       }
-                   if (!isNewerThan(fullSource, fullDest))
-                       {
-                       taskstatus("skipped");
-                       return true;
-                       }
-                   if (!copyFile(fullSource, fullDest))
-                       return false;
-                   taskstatus("1 file copied");
-                   }
-               return true;
-               }
-           case CP_TODIR:
-               {
-               if (haveFileSet)
-                   {
-                   if (!listFiles(parent, fileSet))
-                       return false;
-                   String fileSetDir = parent.eval(fileSet.getDirectory(), ".");
-
-                   taskstatus("%s to %s",
-                       fileSetDir.c_str(), toDirName.c_str());
-
-                   int nrFiles = 0;
-                   for (std::size_t i=0 ; i0)
-                           {
-                           sourcePath.append(fileSetDir);
-                           sourcePath.append("/");
-                           }
-                       sourcePath.append(fileName);
-                       String fullSource = parent.resolve(sourcePath);
-                       
-                       //Get the immediate parent directory's base name
-                       String baseFileSetDir = fileSetDir;
-                       std::size_t pos = baseFileSetDir.find_last_of('/');
-                       if (pos!=baseFileSetDir.npos &&
-                                  pos < baseFileSetDir.size()-1)
-                           baseFileSetDir =
-                              baseFileSetDir.substr(pos+1,
-                                   baseFileSetDir.size());
-                       //Now make the new path
-                       String destPath;
-                       if (toDirName.size()>0)
-                           {
-                           destPath.append(toDirName);
-                           destPath.append("/");
-                           }
-                       if (baseFileSetDir.size()>0)
-                           {
-                           destPath.append(baseFileSetDir);
-                           destPath.append("/");
-                           }
-                       destPath.append(fileName);
-                       String fullDest = parent.resolve(destPath);
-                       //trace("fileName:%s", fileName.c_str());
-                       if (verbose)
-                           taskstatus("copy %s to new dir : %s",
-                                 fullSource.c_str(), fullDest.c_str());
-                       if (!isNewerThan(fullSource, fullDest))
-                           {
-                           if (verbose)
-                               taskstatus("copy skipping %s", fullSource.c_str());
-                           continue;
-                           }
-                       if (!copyFile(fullSource, fullDest))
-                           return false;
-                       nrFiles++;
-                       }
-                   taskstatus("%d file(s) copied", nrFiles);
-                   }
-               else //file source
-                   {
-                   //For file->dir we want only the basename of
-                   //the source appended to the dest dir
-                   taskstatus("%s to %s", 
-                       fileName.c_str(), toDirName.c_str());
-                   String baseName = fileName;
-                   std::size_t pos = baseName.find_last_of('/');
-                   if (pos!=baseName.npos && pos0)
-                       {
-                       destPath.append(toDirName);
-                       destPath.append("/");
-                       }
-                   destPath.append(baseName);
-                   String fullDest = parent.resolve(destPath);
-                   if (verbose)
-                       taskstatus("file %s to new dir : %s", fullSource.c_str(),
-                                          fullDest.c_str());
-                   if (!isRegularFile(fullSource))
-                       {
-                       error("copy : file %s does not exist", fullSource.c_str());
-                       return false;
-                       }
-                   if (!isNewerThan(fullSource, fullDest))
-                       {
-                       taskstatus("skipped");
-                       return true;
-                       }
-                   if (!copyFile(fullSource, fullDest))
-                       return false;
-                   taskstatus("1 file copied");
-                   }
-               return true;
-               }
-           }
-        return true;
-        }
-
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "tofile", toFileNameOpt))
-            return false;
-        if (toFileNameOpt.size() > 0)
-            cptype = CP_TOFILE;
-        if (!parent.getAttribute(elem, "todir", toDirNameOpt))
-            return false;
-        if (toDirNameOpt.size() > 0)
-            cptype = CP_TODIR;
-        if (!parent.getAttribute(elem, "verbose", verboseOpt))
-            return false;
-            
-        haveFileSet = false;
-        
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    {
-                    error("problem getting fileset");
-                    return false;
-                    }
-                haveFileSet = true;
-                }
-            }
-
-        //Perform validity checks
-        if (fileNameOpt.size()>0 && fileSet.size()>0)
-            {
-            error(" can only have one of : file= and ");
-            return false;
-            }
-        if (toFileNameOpt.size()>0 && toDirNameOpt.size()>0)
-            {
-            error(" can only have one of : tofile= or todir=");
-            return false;
-            }
-        if (haveFileSet && toDirNameOpt.size()==0)
-            {
-            error("a  task with a  must have : todir=");
-            return false;
-            }
-        if (cptype == CP_TOFILE && fileNameOpt.size()==0)
-            {
-            error(" tofile= must be associated with : file=");
-            return false;
-            }
-        if (cptype == CP_TODIR && fileNameOpt.size()==0 && !haveFileSet)
-            {
-            error(" todir= must be associated with : file= or ");
-            return false;
-            }
-
-        return true;
-        }
-        
-private:
-
-    int cptype;
-    bool haveFileSet;
-
-    FileSet fileSet;
-    String  fileNameOpt;
-    String  toFileNameOpt;
-    String  toDirNameOpt;
-    String  verboseOpt;
-};
-
-
-/**
- * Generate CxxTest files
- */
-class TaskCxxTestPart: public Task
-{
-public:
-
-    TaskCxxTestPart(MakeBase &par) : Task(par)
-         {
-         type    = TASK_CXXTEST_PART;
-         name    = "cxxtestpart";
-         }
-
-    virtual ~TaskCxxTestPart()
-        {}
-
-    virtual bool execute()
-        {
-        if (!listFiles(parent, fileSet))
-            return false;
-        String fileSetDir = parent.eval(fileSet.getDirectory(), ".");
-                
-        String fullDest = parent.resolve(parent.eval(destPathOpt, "."));
-        String cmd = parent.eval(commandOpt, "cxxtestgen.py");
-        cmd.append(" --part -o ");
-        cmd.append(fullDest);
-
-        unsigned int newFiles = 0;
-        for (std::size_t i=0 ; i0)
-                {
-                sourcePath.append(fileSetDir);
-                sourcePath.append("/");
-                }
-            sourcePath.append(fileName);
-            String fullSource = parent.resolve(sourcePath);
-
-            cmd.append(" ");
-            cmd.append(fullSource);
-            if (isNewerThan(fullSource, fullDest)) newFiles++;
-            }
-        
-        if (newFiles>0) {
-            size_t const lastSlash = fullDest.find_last_of('/');
-            if (lastSlash != fullDest.npos) {
-                String directory(fullDest, 0, lastSlash);
-                if (!createDirectory(directory))
-                    return false;
-            }
-
-            String outString, errString;
-            if (!executeCommand(cmd.c_str(), "", outString, errString))
-                {
-                error(" problem: %s", errString.c_str());
-                return false;
-                }
-            removeFromStatCache(getNativePath(fullDest));
-        }
-
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "out", destPathOpt))
-            return false;
-            
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                }
-            }
-        return true;
-        }
-
-private:
-
-    String  commandOpt;
-    String  destPathOpt;
-    FileSet fileSet;
-
-};
-
-
-/**
- * Generate the CxxTest root file
- */
-class TaskCxxTestRoot: public Task
-{
-public:
-
-    TaskCxxTestRoot(MakeBase &par) : Task(par)
-         {
-         type    = TASK_CXXTEST_ROOT;
-         name    = "cxxtestroot";
-         }
-
-    virtual ~TaskCxxTestRoot()
-        {}
-
-    virtual bool execute()
-        {
-        if (!listFiles(parent, fileSet))
-            return false;
-        String fileSetDir = parent.eval(fileSet.getDirectory(), ".");
-        unsigned int newFiles = 0;
-                
-        String fullDest = parent.resolve(parent.eval(destPathOpt, "."));
-        String cmd = parent.eval(commandOpt, "cxxtestgen.py");
-        cmd.append(" --root -o ");
-        cmd.append(fullDest);
-        String templateFile = parent.eval(templateFileOpt, "");
-        if (templateFile.size()>0) {
-            String fullTemplate = parent.resolve(templateFile);
-            cmd.append(" --template=");
-            cmd.append(fullTemplate);
-            if (isNewerThan(fullTemplate, fullDest)) newFiles++;
-        }
-
-        for (std::size_t i=0 ; i0)
-                {
-                sourcePath.append(fileSetDir);
-                sourcePath.append("/");
-                }
-            sourcePath.append(fileName);
-            String fullSource = parent.resolve(sourcePath);
-
-            cmd.append(" ");
-            cmd.append(fullSource);
-            if (isNewerThan(fullSource, fullDest)) newFiles++;
-            }
-        
-        if (newFiles>0) {
-            size_t const lastSlash = fullDest.find_last_of('/');
-            if (lastSlash != fullDest.npos) {
-                String directory(fullDest, 0, lastSlash);
-                if (!createDirectory(directory))
-                    return false;
-            }
-
-            String outString, errString;
-            if (!executeCommand(cmd.c_str(), "", outString, errString))
-                {
-                error(" problem: %s", errString.c_str());
-                return false;
-                }
-            removeFromStatCache(getNativePath(fullDest));
-        }
-
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "template", templateFileOpt))
-            return false;
-        if (!parent.getAttribute(elem, "out", destPathOpt))
-            return false;
-            
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                }
-            }
-        return true;
-        }
-
-private:
-
-    String  commandOpt;
-    String  templateFileOpt;
-    String  destPathOpt;
-    FileSet fileSet;
-
-};
-
-
-/**
- * Execute the CxxTest test executable
- */
-class TaskCxxTestRun: public Task
-{
-public:
-
-    TaskCxxTestRun(MakeBase &par) : Task(par)
-         {
-         type    = TASK_CXXTEST_RUN;
-         name    = "cxxtestrun";
-         }
-
-    virtual ~TaskCxxTestRun()
-        {}
-
-    virtual bool execute()
-        {
-        unsigned int newFiles = 0;
-                
-        String workingDir = parent.resolve(parent.eval(workingDirOpt, "inkscape"));
-        String rawCmd = parent.eval(commandOpt, "build/cxxtests");
-
-        String cmdExe;
-        if (fileExists(rawCmd)) {
-            cmdExe = rawCmd;
-        } else if (fileExists(rawCmd + ".exe")) {
-            cmdExe = rawCmd + ".exe";
-        } else {
-            error(" problem: cxxtests executable not found! (command=\"%s\")", rawCmd.c_str());
-        }
-        // Note that the log file names are based on the exact name used to call cxxtests (it uses argv[0] + ".log"/".xml")
-        if (isNewerThan(cmdExe, rawCmd + ".log") || isNewerThan(cmdExe, rawCmd + ".xml")) newFiles++;
-
-        // Prepend the necessary ../'s
-        String cmd = rawCmd;
-        unsigned int workingDirDepth = 0;
-        bool wasSlash = true;
-        for(size_t i=0; i0) {
-            char olddir[1024];
-            if (workingDir.size()>0) {
-                // TODO: Double-check usage of getcwd and handle chdir errors
-                getcwd(olddir, 1024);
-                chdir(workingDir.c_str());
-            }
-
-            String outString;
-            if (!executeCommand(cmd.c_str(), "", outString, outString))
-                {
-                error(" problem: %s", outString.c_str());
-                return false;
-                }
-
-            if (workingDir.size()>0) {
-                // TODO: Handle errors?
-                chdir(olddir);
-            }
-
-            removeFromStatCache(getNativePath(cmd + ".log"));
-            removeFromStatCache(getNativePath(cmd + ".xml"));
-        }
-
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "workingdir", workingDirOpt))
-            return false;
-        return true;
-        }
-
-private:
-
-    String  commandOpt;
-    String  workingDirOpt;
-
-};
-
-
-/**
- *
- */
-class TaskDelete : public Task
-{
-public:
-
-    typedef enum
-        {
-        DEL_FILE,
-        DEL_DIR,
-        DEL_FILESET
-        } DeleteType;
-
-    TaskDelete(MakeBase &par) : Task(par)
-        { 
-        type        = TASK_DELETE;
-        name        = "delete";
-        delType     = DEL_FILE;
-        }
-
-    virtual ~TaskDelete()
-        {}
-
-    virtual bool execute()
-        {
-        String dirName   = parent.eval(dirNameOpt, ".");
-        String fileName  = parent.eval(fileNameOpt, ".");
-        bool verbose     = parent.evalBool(verboseOpt, false);
-        bool quiet       = parent.evalBool(quietOpt, false);
-        bool failOnError = parent.evalBool(failOnErrorOpt, true);
-        switch (delType)
-            {
-            case DEL_FILE:
-                {
-                taskstatus("file: %s", fileName.c_str());
-                String fullName = parent.resolve(fileName);
-                char *fname = (char *)fullName.c_str();
-                if (!quiet && verbose)
-                    taskstatus("path: %s", fname);
-                if (failOnError && !removeFile(fullName))
-                    {
-                    //error("Could not delete file '%s'", fullName.c_str());
-                    return false;
-                    }
-                return true;
-                }
-            case DEL_DIR:
-                {
-                taskstatus("dir: %s", dirName.c_str());
-                String fullDir = parent.resolve(dirName);
-                if (!quiet && verbose)
-                    taskstatus("path: %s", fullDir.c_str());
-                if (failOnError && !removeDirectory(fullDir))
-                    {
-                    //error("Could not delete directory '%s'", fullDir.c_str());
-                    return false;
-                    }
-                return true;
-                }
-            }
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (fileNameOpt.size() > 0)
-            delType = DEL_FILE;
-        if (!parent.getAttribute(elem, "dir", dirNameOpt))
-            return false;
-        if (dirNameOpt.size() > 0)
-            delType = DEL_DIR;
-        if (fileNameOpt.size()>0 && dirNameOpt.size()>0)
-            {
-            error(" can have one attribute of file= or dir=");
-            return false;
-            }
-        if (fileNameOpt.size()==0 && dirNameOpt.size()==0)
-            {
-            error(" must have one attribute of file= or dir=");
-            return false;
-            }
-        if (!parent.getAttribute(elem, "verbose", verboseOpt))
-            return false;
-        if (!parent.getAttribute(elem, "quiet", quietOpt))
-            return false;
-        if (!parent.getAttribute(elem, "failonerror", failOnErrorOpt))
-            return false;
-        return true;
-        }
-
-private:
-
-    int delType;
-    String dirNameOpt;
-    String fileNameOpt;
-    String verboseOpt;
-    String quietOpt;
-    String failOnErrorOpt;
-};
-
-
-/**
- * Send a message to stdout
- */
-class TaskEcho : public Task
-{
-public:
-
-    TaskEcho(MakeBase &par) : Task(par)
-        { type = TASK_ECHO; name = "echo"; }
-
-    virtual ~TaskEcho()
-        {}
-
-    virtual bool execute()
-        {
-        //let message have priority over text
-        String message = parent.eval(messageOpt, "");
-        String text    = parent.eval(textOpt, "");
-        if (message.size() > 0)
-            {
-            fprintf(stdout, "%s\n", message.c_str());
-            }
-        else if (text.size() > 0)
-            {
-            fprintf(stdout, "%s\n", text.c_str());
-            }
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getValue(elem, textOpt))
-            return false;
-        textOpt    = leftJustify(textOpt);
-        if (!parent.getAttribute(elem, "message", messageOpt))
-            return false;
-        return true;
-        }
-
-private:
-
-    String messageOpt;
-    String textOpt;
-};
-
-
-
-/**
- *
- */
-class TaskJar : public Task
-{
-public:
-
-    TaskJar(MakeBase &par) : Task(par)
-        { type = TASK_JAR; name = "jar"; }
-
-    virtual ~TaskJar()
-        {}
-
-    virtual bool execute()
-        {
-        String command  = parent.eval(commandOpt, "jar");
-        String basedir  = parent.eval(basedirOpt, ".");
-        String destfile = parent.eval(destfileOpt, ".");
-
-        String cmd = command;
-        cmd.append(" -cf ");
-        cmd.append(destfile);
-        cmd.append(" -C ");
-        cmd.append(basedir);
-        cmd.append(" .");
-
-        String execCmd = cmd;
-
-        String outString, errString;
-        bool ret = executeCommand(execCmd.c_str(), "", outString, errString);
-        if (!ret)
-            {
-            error(" command '%s' failed :\n %s",
-                                      execCmd.c_str(), errString.c_str());
-            return false;
-            }
-        removeFromStatCache(getNativePath(destfile));
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "basedir", basedirOpt))
-            return false;
-        if (!parent.getAttribute(elem, "destfile", destfileOpt))
-            return false;
-        if (basedirOpt.size() == 0 || destfileOpt.size() == 0)
-            {
-            error(" required both basedir and destfile attributes to be set");
-            return false;
-            }
-        return true;
-        }
-
-private:
-
-    String commandOpt;
-    String basedirOpt;
-    String destfileOpt;
-};
-
-
-/**
- *
- */
-class TaskJavac : public Task
-{
-public:
-
-    TaskJavac(MakeBase &par) : Task(par)
-        { 
-        type = TASK_JAVAC; name = "javac";
-        }
-
-    virtual ~TaskJavac()
-        {}
-
-    virtual bool execute()
-        {
-        String command  = parent.eval(commandOpt, "javac");
-        String srcdir   = parent.eval(srcdirOpt, ".");
-        String destdir  = parent.eval(destdirOpt, ".");
-        String target   = parent.eval(targetOpt, "");
-
-        std::vector fileList;
-        if (!listFiles(srcdir, "", fileList))
-            {
-            return false;
-            }
-        String cmd = command;
-        cmd.append(" -d ");
-        cmd.append(destdir);
-        cmd.append(" -classpath ");
-        cmd.append(destdir);
-        cmd.append(" -sourcepath ");
-        cmd.append(srcdir);
-        cmd.append(" ");
-        if (target.size()>0)
-            {
-            cmd.append(" -target ");
-            cmd.append(target);
-            cmd.append(" ");
-            }
-        String fname = "javalist.btool";
-        FILE *f = fopen(fname.c_str(), "w");
-        int count = 0;
-        for (std::size_t i=0 ; i command '%s' failed :\n %s",
-                                      execCmd.c_str(), errString.c_str());
-            return false;
-            }
-        // TODO: 
-        //removeFromStatCache(getNativePath(........));
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "srcdir", srcdirOpt))
-            return false;
-        if (!parent.getAttribute(elem, "destdir", destdirOpt))
-            return false;
-        if (srcdirOpt.size() == 0 || destdirOpt.size() == 0)
-            {
-            error(" required both srcdir and destdir attributes to be set");
-            return false;
-            }
-        if (!parent.getAttribute(elem, "target", targetOpt))
-            return false;
-        return true;
-        }
-
-private:
-
-    String commandOpt;
-    String srcdirOpt;
-    String destdirOpt;
-    String targetOpt;
-
-};
-
-
-/**
- *
- */
-class TaskLink : public Task
-{
-public:
-
-    TaskLink(MakeBase &par) : Task(par)
-        {
-        type = TASK_LINK; name = "link";
-        }
-
-    virtual ~TaskLink()
-        {}
-
-    virtual void UniqueParams(std::string& source) {
-        size_t prev = 0;
-        size_t next = 0;
-        std::list thelist;
-        std::list::iterator it;
-        std::string tstring=" ";
-        source +=std::string(" "); // else the last token may be lost
-	while ((next = source.find_first_of(" ", prev)) != std::string::npos){
-	   if (next - prev != 0){
-	      thelist.push_back(source.substr(prev, next - prev));
-	   }
-	   prev = next + 1;
-	}
-        thelist.sort();
-        source.clear();
-        source +=std::string(" ");
-        for(it=thelist.begin(); it!=thelist.end();it++){
-        	if(*it != tstring){
-        		tstring = *it;
-        		source +=tstring;
-        		source +=std::string(" ");
-        	}
-        }
-     }
-
-    virtual bool execute()
-        {
-        String  command        = parent.eval(commandOpt, "g++");
-        String  fileName       = parent.eval(fileNameOpt, "");
-        String  flags          = parent.eval(flagsOpt, "");
-        String  libs           = parent.eval(libsOpt, "");
-        bool    doStrip        = parent.evalBool(doStripOpt, false);
-        String  symFileName    = parent.eval(symFileNameOpt, "");
-        String  stripCommand   = parent.eval(stripCommandOpt, "strip");
-        String  objcopyCommand = parent.eval(objcopyCommandOpt, "objcopy");
-
-        if (!listFiles(parent, fileSet))
-            return false;
-        String fileSetDir = parent.eval(fileSet.getDirectory(), ".");
-        //trace("%d files in %s", fileSet.size(), fileSetDir.c_str());
-        bool doit = false;
-        String fullTarget = parent.resolve(fileName);
-        String cmd = command;
-        cmd.append(" -o ");
-        cmd.append(fullTarget);
-        cmd.append(" ");
-        cmd.append(flags);
-        for (std::size_t i=0 ; i0)
-                {
-                obj.append(fileSetDir);
-                obj.append("/");
-                }
-            obj.append(fileSet[i]);
-            String fullObj = parent.resolve(obj);
-            String nativeFullObj = getNativePath(fullObj);
-            cmd.append(nativeFullObj);
-            //trace("link: tgt:%s obj:%s", fullTarget.c_str(),
-            //          fullObj.c_str());
-            if (isNewerThan(fullObj, fullTarget))
-                doit = true;
-            }
-        cmd.append(" ");
-        // trim it down to unique elements, reduce command line size
-        UniqueParams(libs);
-        cmd.append(libs);
-        if (!doit)
-            {
-            //trace("link not needed");
-            return true;
-            }
-        //trace("LINK cmd:%s", cmd.c_str());
-
-
-        String outbuf, errbuf;
-        // std::cout << "DEBUG command = " << cmd << std::endl;
-        if (!executeCommand(cmd.c_str(), "", outbuf, errbuf))
-            {
-            error("LINK problem: %s", errbuf.c_str());
-            return false;
-            }
-        removeFromStatCache(getNativePath(fullTarget));
-
-        if (symFileName.size()>0)
-            {
-            String symFullName = parent.resolve(symFileName);
-            cmd = objcopyCommand;
-            cmd.append(" --only-keep-debug ");
-            cmd.append(getNativePath(fullTarget));
-            cmd.append(" ");
-            cmd.append(getNativePath(symFullName));
-            if (!executeCommand(cmd, "", outbuf, errbuf))
-                {
-                error(" symbol file failed : %s", errbuf.c_str());
-                return false;
-                }
-            removeFromStatCache(getNativePath(symFullName));
-            }
-            
-        if (doStrip)
-            {
-            cmd = stripCommand;
-            cmd.append(" ");
-            cmd.append(getNativePath(fullTarget));
-            if (!executeCommand(cmd, "", outbuf, errbuf))
-               {
-               error(" failed : %s", errbuf.c_str());
-               return false;
-               }
-            removeFromStatCache(getNativePath(fullTarget));
-            }
-
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "objcopycommand", objcopyCommandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "stripcommand", stripCommandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "out", fileNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "strip", doStripOpt))
-            return false;
-        if (!parent.getAttribute(elem, "symfile", symFileNameOpt))
-            return false;
-            
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                }
-            else if (tagName == "flags")
-                {
-                if (!parent.getValue(child, flagsOpt))
-                    return false;
-                flagsOpt = strip(flagsOpt);
-                }
-            else if (tagName == "libs")
-                {
-                if (!parent.getValue(child, libsOpt))
-                    return false;
-                libsOpt = strip(libsOpt);
-                }
-            }
-        return true;
-        }
-
-private:
-
-    FileSet fileSet;
-
-    String  commandOpt;
-    String  fileNameOpt;
-    String  flagsOpt;
-    String  libsOpt;
-    String  doStripOpt;
-    String  symFileNameOpt;
-    String  stripCommandOpt;
-    String  objcopyCommandOpt;
-
-};
-
-
-
-/**
- * Create a named file
- */
-class TaskMakeFile : public Task
-{
-public:
-
-    TaskMakeFile(MakeBase &par) : Task(par)
-        { type = TASK_MAKEFILE; name = "makefile"; }
-
-    virtual ~TaskMakeFile()
-        {}
-
-    virtual bool execute()
-        {
-        String fileName = parent.eval(fileNameOpt, "");
-        bool force      = parent.evalBool(forceOpt, false);
-        String text     = parent.eval(textOpt, "");
-
-        taskstatus("%s", fileName.c_str());
-        String fullName = parent.resolve(fileName);
-        if (!force && !isNewerThan(parent.getURI().getPath(), fullName))
-            {
-            taskstatus("skipped");
-            return true;
-            }
-        String fullNative = getNativePath(fullName);
-        //trace("fullName:%s", fullName.c_str());
-        FILE *f = fopen(fullNative.c_str(), "w");
-        if (!f)
-            {
-            error(" could not open %s for writing : %s",
-                fullName.c_str(), strerror(errno));
-            return false;
-            }
-        for (std::size_t i=0 ; i requires 'file=\"filename\"' attribute");
-            return false;
-            }
-        if (!parent.getValue(elem, textOpt))
-            return false;
-        textOpt = leftJustify(textOpt);
-        //trace("dirname:%s", dirName.c_str());
-        return true;
-        }
-
-private:
-
-    String fileNameOpt;
-    String forceOpt;
-    String textOpt;
-};
-
-
-
-/**
- * Create a named directory
- */
-class TaskMkDir : public Task
-{
-public:
-
-    TaskMkDir(MakeBase &par) : Task(par)
-        { type = TASK_MKDIR; name = "mkdir"; }
-
-    virtual ~TaskMkDir()
-        {}
-
-    virtual bool execute()
-        {
-        String dirName = parent.eval(dirNameOpt, ".");
-        
-        taskstatus("%s", dirName.c_str());
-        String fullDir = parent.resolve(dirName);
-        //trace("fullDir:%s", fullDir.c_str());
-        if (!createDirectory(fullDir))
-            return false;
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "dir", dirNameOpt))
-            return false;
-        if (dirNameOpt.size() == 0)
-            {
-            error(" requires 'dir=\"dirname\"' attribute");
-            return false;
-            }
-        return true;
-        }
-
-private:
-
-    String dirNameOpt;
-};
-
-
-
-/**
- * Create a named directory
- */
-class TaskMsgFmt: public Task
-{
-public:
-
-    TaskMsgFmt(MakeBase &par) : Task(par)
-         { type = TASK_MSGFMT;  name = "msgfmt"; }
-
-    virtual ~TaskMsgFmt()
-        {}
-
-    virtual bool execute()
-        {
-        String  command   = parent.eval(commandOpt, "msgfmt");
-        String  toDirName = parent.eval(toDirNameOpt, ".");
-        String  outName   = parent.eval(outNameOpt, "");
-        bool    owndir    = parent.evalBool(owndirOpt, false);
-
-        if (!listFiles(parent, fileSet))
-            return false;
-        String fileSetDir = fileSet.getDirectory();
-
-        //trace("msgfmt: %d", fileSet.size());
-        for (std::size_t i=0 ; i0)
-                {
-                sourcePath.append(fileSetDir);
-                sourcePath.append("/");
-                }
-            sourcePath.append(fileName);
-            String fullSource = parent.resolve(sourcePath);
-
-            String destPath;
-            if (toDirName.size()>0)
-                {
-                destPath.append(toDirName);
-                destPath.append("/");
-                }
-            if (owndir)
-                {
-                String subdir = fileName;
-                std::size_t pos = subdir.find_last_of('.');
-                if (pos != subdir.npos)
-                    subdir = subdir.substr(0, pos);
-                destPath.append(subdir);
-                destPath.append("/");
-                }
-            //Pick the output file name
-            if (outName.size() > 0)
-                {
-                destPath.append(outName);
-                }
-            else
-                {
-                destPath.append(fileName);
-                destPath[destPath.size()-2] = 'm';
-                }
-
-            String fullDest = parent.resolve(destPath);
-
-            if (!isNewerThan(fullSource, fullDest))
-                {
-                //trace("skip %s", fullSource.c_str());
-                continue;
-                }
-                
-            String cmd = command;
-            cmd.append(" ");
-            cmd.append(fullSource);
-            cmd.append(" -o ");
-            cmd.append(fullDest);
-            
-            int pos = fullDest.find_last_of('/');
-            if (pos>0)
-                {
-                String fullDestPath = fullDest.substr(0, pos);
-                if (!createDirectory(fullDestPath))
-                    return false;
-                }
-
-
-
-            String outString, errString;
-           if (!executeCommand(cmd.c_str(), "", outString, errString))
-                {
-                error(" problem: %s", errString.c_str());
-                return false;
-                }
-            removeFromStatCache(getNativePath(fullDest));
-            }
-
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "todir", toDirNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "out", outNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "owndir", owndirOpt))
-            return false;
-            
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                }
-            }
-        return true;
-        }
-
-private:
-
-    FileSet fileSet;
-
-    String  commandOpt;
-    String  toDirNameOpt;
-    String  outNameOpt;
-    String  owndirOpt;
-
-};
-
-
-
-/**
- *  Perform a Package-Config query similar to pkg-config
- */
-class TaskPkgConfig : public Task
-{
-public:
-
-    typedef enum
-        {
-        PKG_CONFIG_QUERY_CFLAGS,
-        PKG_CONFIG_QUERY_LIBS,
-        PKG_CONFIG_QUERY_ALL
-        } QueryTypes;
-
-    TaskPkgConfig(MakeBase &par) : Task(par)
-        {
-        type = TASK_PKG_CONFIG;
-        name = "pkg-config";
-        }
-
-    virtual ~TaskPkgConfig()
-        {}
-
-    virtual bool execute()
-        {
-        String pkgName       = parent.eval(pkgNameOpt,      "");
-        String prefix        = parent.eval(prefixOpt,       "");
-        String propName      = parent.eval(propNameOpt,     "");
-        String pkgConfigPath = parent.eval(pkgConfigPathOpt,"");
-        String query         = parent.eval(queryOpt,        "all");
-
-        String path = parent.resolve(pkgConfigPath);
-        PkgConfig pkgconfig;
-        pkgconfig.setPath(path);
-        pkgconfig.setPrefix(prefix);
-        if (!pkgconfig.query(pkgName))
-            {
-            error(" query failed for '%s", name.c_str());
-            return false;
-            }
-            
-        String val = "";
-        if (query == "cflags")
-            val = pkgconfig.getCflags();
-        else if (query == "libs")
-            val =pkgconfig.getLibs();
-        else if (query == "all")
-            val = pkgconfig.getAll();
-        else
-            {
-            error(" unhandled query : %s", query.c_str());
-            return false;
-            }
-        taskstatus("property %s = '%s'", propName.c_str(), val.c_str());
-        parent.setProperty(propName, val);
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        //# NAME
-        if (!parent.getAttribute(elem, "name", pkgNameOpt))
-            return false;
-        if (pkgNameOpt.size()==0)
-            {
-            error(" requires 'name=\"package\"' attribute");
-            return false;
-            }
-
-        //# PROPERTY
-        if (!parent.getAttribute(elem, "property", propNameOpt))
-            return false;
-        if (propNameOpt.size()==0)
-            {
-            error(" requires 'property=\"name\"' attribute");
-            return false;
-            }
-        //# PATH
-        if (!parent.getAttribute(elem, "path", pkgConfigPathOpt))
-            return false;
-        //# PREFIX
-        if (!parent.getAttribute(elem, "prefix", prefixOpt))
-            return false;
-        //# QUERY
-        if (!parent.getAttribute(elem, "query", queryOpt))
-            return false;
-
-        return true;
-        }
-
-private:
-
-    String queryOpt;
-    String pkgNameOpt;
-    String prefixOpt;
-    String propNameOpt;
-    String pkgConfigPathOpt;
-
-};
-
-
-
-
-
-
-/**
- *  Process an archive to allow random access
- */
-class TaskRanlib : public Task
-{
-public:
-
-    TaskRanlib(MakeBase &par) : Task(par)
-        { type = TASK_RANLIB; name = "ranlib"; }
-
-    virtual ~TaskRanlib()
-        {}
-
-    virtual bool execute()
-        {
-        String fileName = parent.eval(fileNameOpt, "");
-        String command  = parent.eval(commandOpt, "ranlib");
-
-        String fullName = parent.resolve(fileName);
-        //trace("fullDir:%s", fullDir.c_str());
-        String cmd = command;
-        cmd.append(" ");
-        cmd.append(fullName);
-        String outbuf, errbuf;
-        if (!executeCommand(cmd, "", outbuf, errbuf))
-            return false;
-        // TODO:
-        //removeFromStatCache(getNativePath(fullDest));
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (fileNameOpt.size() == 0)
-            {
-            error(" requires 'file=\"fileNname\"' attribute");
-            return false;
-            }
-        return true;
-        }
-
-private:
-
-    String fileNameOpt;
-    String commandOpt;
-};
-
-
-
-/**
- * Compile a resource file into a binary object
- */
-class TaskRC : public Task
-{
-public:
-
-    TaskRC(MakeBase &par) : Task(par)
-        { type = TASK_RC; name = "rc"; }
-
-    virtual ~TaskRC()
-        {}
-
-    virtual bool execute()
-        {
-        String command  = parent.eval(commandOpt,  "windres");
-        String flags    = parent.eval(flagsOpt,    "");
-        String fileName = parent.eval(fileNameOpt, "");
-        String outName  = parent.eval(outNameOpt,  "");
-
-        String fullFile = parent.resolve(fileName);
-        String fullOut  = parent.resolve(outName);
-        if (!isNewerThan(fullFile, fullOut))
-            return true;
-        String cmd = command;
-        cmd.append(" -o ");
-        cmd.append(fullOut);
-        cmd.append(" ");
-        cmd.append(flags);
-        cmd.append(" ");
-        cmd.append(fullFile);
-
-        String outString, errString;
-        if (!executeCommand(cmd.c_str(), "", outString, errString))
-            {
-            error("RC problem: %s", errString.c_str());
-            return false;
-            }
-        removeFromStatCache(getNativePath(fullOut));
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "out", outNameOpt))
-            return false;
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "flags")
-                {
-                if (!parent.getValue(child, flagsOpt))
-                    return false;
-                }
-            }
-        return true;
-        }
-
-private:
-
-    String commandOpt;
-    String flagsOpt;
-    String fileNameOpt;
-    String outNameOpt;
-
-};
-
-
-
-/**
- *  Collect .o's into a .so or DLL
- */
-class TaskSharedLib : public Task
-{
-public:
-
-    TaskSharedLib(MakeBase &par) : Task(par)
-        { type = TASK_SHAREDLIB; name = "dll"; }
-
-    virtual ~TaskSharedLib()
-        {}
-
-    virtual bool execute()
-        {
-        String command     = parent.eval(commandOpt, "dllwrap");
-        String fileName    = parent.eval(fileNameOpt, "");
-        String defFileName = parent.eval(defFileNameOpt, "");
-        String impFileName = parent.eval(impFileNameOpt, "");
-        String libs        = parent.eval(libsOpt, "");
-
-        //trace("###########HERE %d", fileSet.size());
-        bool doit = false;
-        
-        String fullOut = parent.resolve(fileName);
-        //trace("ar fullout: %s", fullOut.c_str());
-        
-        if (!listFiles(parent, fileSet))
-            return false;
-        String fileSetDir = parent.eval(fileSet.getDirectory(), ".");
-
-        for (std::size_t i=0 ; i0)
-                {
-                fname.append(fileSetDir);
-                fname.append("/");
-                }
-            fname.append(fileSet[i]);
-            String fullName = parent.resolve(fname);
-            //trace("ar : %s/%s", fullOut.c_str(), fullName.c_str());
-            if (isNewerThan(fullName, fullOut))
-                doit = true;
-            }
-        //trace("Needs it:%d", doit);
-        if (!doit)
-            {
-            return true;
-            }
-
-        String cmd = "dllwrap";
-        cmd.append(" -o ");
-        cmd.append(fullOut);
-        if (defFileName.size()>0)
-            {
-            cmd.append(" --def ");
-            cmd.append(defFileName);
-            cmd.append(" ");
-            }
-        if (impFileName.size()>0)
-            {
-            cmd.append(" --implib ");
-            cmd.append(impFileName);
-            cmd.append(" ");
-            }
-        for (std::size_t i=0 ; i0)
-                {
-                fname.append(fileSetDir);
-                fname.append("/");
-                }
-            fname.append(fileSet[i]);
-            String fullName = parent.resolve(fname);
-
-            cmd.append(" ");
-            cmd.append(fullName);
-            }
-        cmd.append(" ");
-        cmd.append(libs);
-
-        String outString, errString;
-        if (!executeCommand(cmd.c_str(), "", outString, errString))
-            {
-            error(" problem: %s", errString.c_str());
-            return false;
-            }
-        removeFromStatCache(getNativePath(fullOut));
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "import", impFileNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "def", defFileNameOpt))
-            return false;
-            
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                }
-            else if (tagName == "libs")
-                {
-                if (!parent.getValue(child, libsOpt))
-                    return false;
-                libsOpt = strip(libsOpt);
-                }
-            }
-        return true;
-        }
-
-private:
-
-    FileSet fileSet;
-
-    String commandOpt;
-    String fileNameOpt;
-    String defFileNameOpt;
-    String impFileNameOpt;
-    String libsOpt;
-
-};
-
-
-
-/**
- * Run the "ar" command to archive .o's into a .a
- */
-class TaskStaticLib : public Task
-{
-public:
-
-    TaskStaticLib(MakeBase &par) : Task(par)
-        { type = TASK_STATICLIB; name = "staticlib"; }
-
-    virtual ~TaskStaticLib()
-        {}
-
-    virtual bool execute()
-        {
-        String command = parent.eval(commandOpt, "ar crv");
-        String fileName = parent.eval(fileNameOpt, "");
-
-        bool doit = false;
-        
-        String fullOut = parent.resolve(fileName);
-        //trace("ar fullout: %s", fullOut.c_str());
-        
-        if (!listFiles(parent, fileSet))
-            return false;
-        String fileSetDir = parent.eval(fileSet.getDirectory(), ".");
-        //trace("###########HERE %s", fileSetDir.c_str());
-
-        for (std::size_t i=0 ; i0)
-                {
-                fname.append(fileSetDir);
-                fname.append("/");
-                }
-            fname.append(fileSet[i]);
-            String fullName = parent.resolve(fname);
-            //trace("ar : %s/%s", fullOut.c_str(), fullName.c_str());
-            if (isNewerThan(fullName, fullOut))
-                doit = true;
-            }
-        //trace("Needs it:%d", doit);
-        if (!doit)
-            {
-            return true;
-            }
-
-        String cmd = command;
-        cmd.append(" ");
-        cmd.append(fullOut);
-        for (std::size_t i=0 ; i0)
-                {
-                fname.append(fileSetDir);
-                fname.append("/");
-                }
-            fname.append(fileSet[i]);
-            String fullName = parent.resolve(fname);
-
-            cmd.append(" ");
-            cmd.append(fullName);
-            }
-
-        String outString, errString;
-        if (!executeCommand(cmd.c_str(), "", outString, errString))
-            {
-            error(" problem: %s", errString.c_str());
-            return false;
-            }
-        removeFromStatCache(getNativePath(fullOut));
-        return true;
-        }
-
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-            
-        std::vector children = elem->getChildren();
-        for (std::size_t i=0 ; igetName();
-            if (tagName == "fileset")
-                {
-                if (!parseFileSet(child, parent, fileSet))
-                    return false;
-                }
-            }
-        return true;
-        }
-
-private:
-
-    FileSet fileSet;
-
-    String commandOpt;
-    String fileNameOpt;
-
-};
-
-
-
-
-/**
- * Strip an executable
- */
-class TaskStrip : public Task
-{
-public:
-
-    TaskStrip(MakeBase &par) : Task(par)
-        { type = TASK_STRIP; name = "strip"; }
-
-    virtual ~TaskStrip()
-        {}
-
-    virtual bool execute()
-        {
-        String command     = parent.eval(commandOpt, "strip");
-        String fileName    = parent.eval(fileNameOpt, "");
-        String symFileName = parent.eval(symFileNameOpt, "");
-
-        String fullName = parent.resolve(fileName);
-        //trace("fullDir:%s", fullDir.c_str());
-        String cmd;
-        String outbuf, errbuf;
-
-        if (symFileName.size()>0)
-            {
-            String symFullName = parent.resolve(symFileName);
-            cmd = "objcopy --only-keep-debug ";
-            cmd.append(getNativePath(fullName));
-            cmd.append(" ");
-            cmd.append(getNativePath(symFullName));
-            if (!executeCommand(cmd, "", outbuf, errbuf))
-                {
-                error(" symbol file failed : %s", errbuf.c_str());
-                return false;
-                }
-            }
-            
-        cmd = command;
-        cmd.append(getNativePath(fullName));
-       if (!executeCommand(cmd, "", outbuf, errbuf))
-            {
-            error(" failed : %s", errbuf.c_str());
-            return false;
-            }
-        removeFromStatCache(getNativePath(fullName));
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        if (!parent.getAttribute(elem, "command", commandOpt))
-            return false;
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (!parent.getAttribute(elem, "symfile", symFileNameOpt))
-            return false;
-        if (fileNameOpt.size() == 0)
-            {
-            error(" requires 'file=\"fileName\"' attribute");
-            return false;
-            }
-        return true;
-        }
-
-private:
-
-    String commandOpt;
-    String fileNameOpt;
-    String symFileNameOpt;
-};
-
-
-/**
- *
- */
-class TaskTouch : public Task
-{
-public:
-
-    TaskTouch(MakeBase &par) : Task(par)
-        { type = TASK_TOUCH; name = "touch"; }
-
-    virtual ~TaskTouch()
-        {}
-
-    virtual bool execute()
-        {
-        String fileName = parent.eval(fileNameOpt, "");
-
-        String fullName = parent.resolve(fileName);
-        String nativeFile = getNativePath(fullName);
-        if (!isRegularFile(fullName) && !isDirectory(fullName))
-            {            
-            // S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH
-            int ret = creat(nativeFile.c_str(), 0666);
-            if (ret != 0) 
-                {
-                error(" could not create '%s' : %s",
-                    nativeFile.c_str(), strerror(ret));
-                return false;
-                }
-            return true;
-            }
-        int ret = utime(nativeFile.c_str(), (struct utimbuf *)0);
-        if (ret != 0)
-            {
-            error(" could not update the modification time for '%s' : %s",
-                nativeFile.c_str(), strerror(ret));
-            return false;
-            }
-        removeFromStatCache(nativeFile);
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        //trace("touch parse");
-        if (!parent.getAttribute(elem, "file", fileNameOpt))
-            return false;
-        if (fileNameOpt.size() == 0)
-            {
-            error(" requires 'file=\"fileName\"' attribute");
-            return false;
-            }
-        return true;
-        }
-
-    String fileNameOpt;
-};
-
-
-/**
- *
- */
-class TaskTstamp : public Task
-{
-public:
-
-    TaskTstamp(MakeBase &par) : Task(par)
-        { type = TASK_TSTAMP; name = "tstamp"; }
-
-    virtual ~TaskTstamp()
-        {}
-
-    virtual bool execute()
-        {
-        return true;
-        }
-
-    virtual bool parse(Element *elem)
-        {
-        //trace("tstamp parse");
-        return true;
-        }
-};
-
-
-
-/**
- *
- */
-Task *Task::createTask(Element *elem, int lineNr)
-{
-    String tagName = elem->getName();
-    //trace("task:%s", tagName.c_str());
-    Task *task = NULL;
-    if (tagName == "cc")
-        task = new TaskCC(parent);
-    else if (tagName == "copy")
-        task = new TaskCopy(parent);
-    else if (tagName == "cxxtestpart")
-        task = new TaskCxxTestPart(parent);
-    else if (tagName == "cxxtestroot")
-        task = new TaskCxxTestRoot(parent);
-    else if (tagName == "cxxtestrun")
-        task = new TaskCxxTestRun(parent);
-    else if (tagName == "delete")
-        task = new TaskDelete(parent);
-    else if (tagName == "echo")
-        task = new TaskEcho(parent);
-    else if (tagName == "jar")
-        task = new TaskJar(parent);
-    else if (tagName == "javac")
-        task = new TaskJavac(parent);
-    else if (tagName == "link")
-        task = new TaskLink(parent);
-    else if (tagName == "makefile")
-        task = new TaskMakeFile(parent);
-    else if (tagName == "mkdir")
-        task = new TaskMkDir(parent);
-    else if (tagName == "msgfmt")
-        task = new TaskMsgFmt(parent);
-    else if (tagName == "pkg-config")
-        task = new TaskPkgConfig(parent);
-    else if (tagName == "ranlib")
-        task = new TaskRanlib(parent);
-    else if (tagName == "rc")
-        task = new TaskRC(parent);
-    else if (tagName == "sharedlib")
-        task = new TaskSharedLib(parent);
-    else if (tagName == "staticlib")
-        task = new TaskStaticLib(parent);
-    else if (tagName == "strip")
-        task = new TaskStrip(parent);
-    else if (tagName == "touch")
-        task = new TaskTouch(parent);
-    else if (tagName == "tstamp")
-        task = new TaskTstamp(parent);
-    else
-        {
-        error("Unknown task '%s'", tagName.c_str());
-        return NULL;
-        }
-
-    task->setLine(lineNr);
-
-    if (!task->parse(elem))
-        {
-        delete task;
-        return NULL;
-        }
-    return task;
-}
-
-
-
-//########################################################################
-//# T A R G E T
-//########################################################################
-
-/**
- *
- */
-class Target : public MakeBase
-{
-
-public:
-
-    /**
-     *
-     */
-    Target(Make &par) : parent(par)
-        { init(); }
-
-    /**
-     *
-     */
-    Target(const Target &other) : parent(other.parent)
-        { init(); assign(other); }
-
-    /**
-     *
-     */
-    Target &operator=(const Target &other)
-        { init(); assign(other); return *this; }
-
-    /**
-     *
-     */
-    virtual ~Target()
-        { cleanup() ; }
-
-
-    /**
-     *
-     */
-    virtual Make &getParent()
-        { return parent; }
-
-    /**
-     *
-     */
-    virtual String getName()
-        { return name; }
-
-    /**
-     *
-     */
-    virtual void setName(const String &val)
-        { name = val; }
-
-    /**
-     *
-     */
-    virtual String getDescription()
-        { return description; }
-
-    /**
-     *
-     */
-    virtual void setDescription(const String &val)
-        { description = val; }
-
-    /**
-     *
-     */
-    virtual void addDependency(const String &val)
-        { deps.push_back(val); }
-
-    /**
-     *
-     */
-    virtual void parseDependencies(const String &val)
-        { deps = tokenize(val, ", "); }
-
-    /**
-     *
-     */
-    virtual std::vector &getDependencies()
-        { return deps; }
-
-    /**
-     *
-     */
-    virtual String getIf()
-        { return ifVar; }
-
-    /**
-     *
-     */
-    virtual void setIf(const String &val)
-        { ifVar = val; }
-
-    /**
-     *
-     */
-    virtual String getUnless()
-        { return unlessVar; }
-
-    /**
-     *
-     */
-    virtual void setUnless(const String &val)
-        { unlessVar = val; }
-
-    /**
-     *
-     */
-    virtual void addTask(Task *val)
-        { tasks.push_back(val); }
-
-    /**
-     *
-     */
-    virtual std::vector &getTasks()
-        { return tasks; }
-
-private:
-
-    void init()
-        {
-        }
-
-    void cleanup()
-        {
-        tasks.clear();
-        }
-
-    void assign(const Target &other)
-        {
-        //parent      = other.parent;
-        name        = other.name;
-        description = other.description;
-        ifVar       = other.ifVar;
-        unlessVar   = other.unlessVar;
-        deps        = other.deps;
-        tasks       = other.tasks;
-        }
-
-    Make &parent;
-
-    String name;
-
-    String description;
-
-    String ifVar;
-
-    String unlessVar;
-
-    std::vector deps;
-
-    std::vector tasks;
-
-};
-
-
-
-
-
-
-
-
-//########################################################################
-//# M A K E
-//########################################################################
-
-
-/**
- *
- */
-class Make : public MakeBase
-{
-
-public:
-
-    /**
-     *
-     */
-    Make()
-        { init(); }
-
-    /**
-     *
-     */
-    Make(const Make &other)
-        { assign(other); }
-
-    /**
-     *
-     */
-    Make &operator=(const Make &other)
-        { assign(other); return *this; }
-
-    /**
-     *
-     */
-    virtual ~Make()
-        { cleanup(); }
-
-    /**
-     *
-     */
-    virtual std::map &getTargets()
-        { return targets; }
-
-
-    /**
-     *
-     */
-    virtual String version()
-        { return BUILDTOOL_VERSION; }
-
-    /**
-     * Overload a 
-     */
-    virtual bool specifyProperty(const String &name,
-                                 const String &value);
-
-    /**
-     *
-     */
-    virtual bool run();
-
-    /**
-     *
-     */
-    virtual bool run(const String &target);
-
-
-
-private:
-
-    /**
-     *
-     */
-    void init();
-
-    /**
-     *
-     */
-    void cleanup();
-
-    /**
-     *
-     */
-    void assign(const Make &other);
-
-    /**
-     *
-     */
-    bool executeTask(Task &task);
-
-
-    /**
-     *
-     */
-    bool executeTarget(Target &target,
-             std::set &targetsCompleted);
-
-
-    /**
-     *
-     */
-    bool execute();
-
-    /**
-     *
-     */
-    bool checkTargetDependencies(Target &prop,
-                    std::vector &depList);
-
-    /**
-     *
-     */
-    bool parsePropertyFile(const String &fileName,
-                           const String &prefix);
-
-    /**
-     *
-     */
-    bool parseProperty(Element *elem);
-
-    /**
-     *
-     */
-    bool parseFile();
-
-    /**
-     *
-     */
-    std::vector glob(const String &pattern);
-
-
-    //###############
-    //# Fields
-    //###############
-
-    String projectName;
-
-    String currentTarget;
-
-    String defaultTarget;
-
-    String specifiedTarget;
-
-    String baseDir;
-
-    String description;
-    
-    //std::vector properties;
-    
-    std::map targets;
-
-    std::vector allTasks;
-    
-    std::map specifiedProperties;
-
-};
-
-
-//########################################################################
-//# C L A S S  M A I N T E N A N C E
-//########################################################################
-
-/**
- *
- */
-void Make::init()
-{
-    uri             = "build.xml";
-    projectName     = "";
-    currentTarget   = "";
-    defaultTarget   = "";
-    specifiedTarget = "";
-    baseDir         = "";
-    description     = "";
-    envPrefix       = "env.";
-    pcPrefix        = "pc.";
-    pccPrefix       = "pcc.";
-    pclPrefix       = "pcl.";
-    bzrPrefix       = "bzr.";
-    properties.clear();
-    for (std::size_t i = 0 ; i < allTasks.size() ; i++)
-        delete allTasks[i];
-    allTasks.clear();
-}
-
-
-
-/**
- *
- */
-void Make::cleanup()
-{
-    for (std::size_t i = 0 ; i < allTasks.size() ; i++)
-        delete allTasks[i];
-    allTasks.clear();
-}
-
-
-
-/**
- *
- */
-void Make::assign(const Make &other)
-{
-    uri              = other.uri;
-    projectName      = other.projectName;
-    currentTarget    = other.currentTarget;
-    defaultTarget    = other.defaultTarget;
-    specifiedTarget  = other.specifiedTarget;
-    baseDir          = other.baseDir;
-    description      = other.description;
-    properties       = other.properties;
-}
-
-
-
-//########################################################################
-//# U T I L I T Y    T A S K S
-//########################################################################
-
-/**
- *  Perform a file globbing
- */
-std::vector Make::glob(const String &pattern)
-{
-    std::vector res;
-    return res;
-}
-
-
-//########################################################################
-//# P U B L I C    A P I
-//########################################################################
-
-
-
-/**
- *
- */
-bool Make::executeTarget(Target &target,
-             std::set &targetsCompleted)
-{
-
-    String name = target.getName();
-
-    //First get any dependencies for this target
-    std::vector deps = target.getDependencies();
-    for (std::size_t i=0 ; i &tgts =
-               target.getParent().getTargets();
-        std::map::iterator iter =
-               tgts.find(dep);
-        if (iter == tgts.end())
-            {
-            error("Target '%s' dependency '%s' not found",
-                      name.c_str(),  dep.c_str());
-            return false;
-            }
-        Target depTarget = iter->second;
-        if (!executeTarget(depTarget, targetsCompleted))
-            {
-            return false;
-            }
-        }
-
-    status("##### Target : %s\n##### %s", name.c_str(),
-            target.getDescription().c_str());
-
-    //Now let's do the tasks
-    std::vector &tasks = target.getTasks();
-    for (std::size_t i=0 ; igetName().c_str());
-        if (!task->execute())
-            {
-            return false;
-            }
-        }
-        
-    targetsCompleted.insert(name);
-    
-    return true;
-}
-
-
-
-/**
- *  Main execute() method.  Start here and work
- *  up the dependency tree 
- */
-bool Make::execute()
-{
-    status("######## EXECUTE");
-
-    //Determine initial target
-    if (specifiedTarget.size()>0)
-        {
-        currentTarget = specifiedTarget;
-        }
-    else if (defaultTarget.size()>0)
-        {
-        currentTarget = defaultTarget;
-        }
-    else
-        {
-        error("execute: no specified or default target requested");
-        return false;
-        }
-
-    std::map::iterator iter =
-               targets.find(currentTarget);
-    if (iter == targets.end())
-        {
-        error("Initial target '%s' not found",
-                 currentTarget.c_str());
-        return false;
-        }
-        
-    //Now run
-    Target target = iter->second;
-    std::set targetsCompleted;
-    if (!executeTarget(target, targetsCompleted))
-        {
-        return false;
-        }
-
-    status("######## EXECUTE COMPLETE");
-    return true;
-}
-
-
-
-
-/**
- *
- */
-bool Make::checkTargetDependencies(Target &target, 
-                            std::vector &depList)
-{
-    String tgtName = target.getName().c_str();
-    depList.push_back(tgtName);
-
-    std::vector deps = target.getDependencies();
-    for (std::size_t i=0 ; i::iterator diter;
-            for (diter=depList.begin() ; diter!=depList.end() ; diter++)
-                {
-                error("  %s", diter->c_str());
-                }
-            return false;
-            }
-
-        std::map &tgts =
-                  target.getParent().getTargets();
-        std::map::iterator titer = tgts.find(dep);
-        if (titer == tgts.end())
-            {
-            error("Target '%s' dependency '%s' not found",
-                      tgtName.c_str(), dep.c_str());
-            return false;
-            }
-        if (!checkTargetDependencies(titer->second, depList))
-            {
-            return false;
-            }
-        }
-    return true;
-}
-
-
-
-
-
-static int getword(int pos, const String &inbuf, String &result)
-{
-    int p = pos;
-    int len = (int)inbuf.size();
-    String val;
-    while (p < len)
-        {
-        char ch = inbuf[p];
-        if (!isalnum(ch) && ch!='.' && ch!='_')
-            break;
-        val.push_back(ch);
-        p++;
-        }
-    result = val;
-    return p;
-}
-
-
-
-
-/**
- *
- */
-bool Make::parsePropertyFile(const String &fileName,
-                             const String &prefix)
-{
-    FILE *f = fopen(fileName.c_str(), "r");
-    if (!f)
-        {
-        error("could not open property file %s", fileName.c_str());
-        return false;
-        }
-    int linenr = 0;
-    while (!feof(f))
-        {
-        char buf[256];
-        if (!fgets(buf, 255, f))
-            break;
-        linenr++;
-        String s = buf;
-        s = trim(s);
-        int len = s.size();
-        if (len == 0)
-            continue;
-        if (s[0] == '#')
-            continue;
-        String key;
-        String val;
-        int p = 0;
-        int p2 = getword(p, s, key);
-        if (p2 <= p)
-            {
-            error("property file %s, line %d: expected keyword",
-                    fileName.c_str(), linenr);
-            fclose(f);
-			return false;
-            }
-        if (prefix.size() > 0)
-            {
-            key.insert(0, prefix);
-            }
-
-        //skip whitespace
-        for (p=p2 ; p=len || s[p]!='=')
-            {
-            error("property file %s, line %d: expected '='",
-                    fileName.c_str(), linenr);
-            return false;
-            }
-        p++;
-
-        //skip whitespace
-        for ( ; p=len)
-            {
-            error("property file %s, line %d: expected value",
-                    fileName.c_str(), linenr);
-            return false;
-            }
-        val = s.substr(p);
-        if (key.size()==0)
-            continue;
-        //allow property to be set, even if val=""
-
-        //trace("key:'%s' val:'%s'", key.c_str(), val.c_str());
-        //See if we wanted to overload this property
-        std::map::iterator iter =
-            specifiedProperties.find(key);
-        if (iter!=specifiedProperties.end())
-            {
-            val = iter->second;
-            status("overloading property '%s' = '%s'",
-                   key.c_str(), val.c_str());
-            }
-        properties[key] = val;
-        }
-    fclose(f);
-    return true;
-}
-
-
-
-
-/**
- *
- */
-bool Make::parseProperty(Element *elem)
-{
-    std::vector &attrs = elem->getAttributes();
-    for (std::size_t i=0 ; i 0)
-                {
-                properties[attrVal] = val;
-                }
-            else
-                {
-                if (!getAttribute(elem, "location", val))
-                    return false;
-                //let the property exist, even if not defined
-                properties[attrVal] = val;
-                }
-            //See if we wanted to overload this property
-            std::map::iterator iter =
-                specifiedProperties.find(attrVal);
-            if (iter != specifiedProperties.end())
-                {
-                val = iter->second;
-                status("overloading property '%s' = '%s'",
-                    attrVal.c_str(), val.c_str());
-                properties[attrVal] = val;
-                }
-            }
-        else if (attrName == "file")
-            {
-            String prefix;
-            if (!getAttribute(elem, "prefix", prefix))
-                return false;
-            if (prefix.size() > 0)
-                {
-                if (prefix[prefix.size()-1] != '.')
-                    prefix.push_back('.');
-                }
-            if (!parsePropertyFile(attrName, prefix))
-                return false;
-            }
-        else if (attrName == "environment")
-            {
-            if (attrVal.find('.') != attrVal.npos)
-                {
-                error("environment prefix cannot have a '.' in it");
-                return false;
-                }
-            envPrefix = attrVal;
-            envPrefix.push_back('.');
-            }
-        else if (attrName == "pkg-config")
-            {
-            if (attrVal.find('.') != attrVal.npos)
-                {
-                error("pkg-config prefix cannot have a '.' in it");
-                return false;
-                }
-            pcPrefix = attrVal;
-            pcPrefix.push_back('.');
-            }
-        else if (attrName == "pkg-config-cflags")
-            {
-            if (attrVal.find('.') != attrVal.npos)
-                {
-                error("pkg-config-cflags prefix cannot have a '.' in it");
-                return false;
-                }
-            pccPrefix = attrVal;
-            pccPrefix.push_back('.');
-            }
-        else if (attrName == "pkg-config-libs")
-            {
-            if (attrVal.find('.') != attrVal.npos)
-                {
-                error("pkg-config-libs prefix cannot have a '.' in it");
-                return false;
-                }
-            pclPrefix = attrVal;
-            pclPrefix.push_back('.');
-            }
-        else if (attrName == "subversion")
-            {
-            if (attrVal.find('.') != attrVal.npos)
-                {
-                error("bzr prefix cannot have a '.' in it");
-                return false;
-                }
-            bzrPrefix = attrVal;
-            bzrPrefix.push_back('.');
-            }
-        }
-
-    return true;
-}
-
-
-
-
-/**
- *
- */
-bool Make::parseFile()
-{
-    status("######## PARSE : %s", uri.getPath().c_str());
-
-    setLine(0);
-
-    Parser parser;
-    Element *root = parser.parseFile(uri.getNativePath());
-    if (!root)
-        {
-        error("Could not open %s for reading",
-              uri.getNativePath().c_str());
-        return false;
-        }
-    
-    setLine(root->getLine());
-
-    if (root->getChildren().size()==0 ||
-        root->getChildren()[0]->getName()!="project")
-        {
-        error("Main xml element should be ");
-        delete root;
-        return false;
-        }
-
-    //########## Project attributes
-    Element *project = root->getChildren()[0];
-    String s = project->getAttribute("name");
-    if (s.size() > 0)
-        projectName = s;
-    s = project->getAttribute("default");
-    if (s.size() > 0)
-        defaultTarget = s;
-    s = project->getAttribute("basedir");
-    if (s.size() > 0)
-        baseDir = s;
-
-    //######### PARSE MEMBERS
-    std::vector children = project->getChildren();
-    for (std::size_t i=0 ; igetLine());
-        String tagName = elem->getName();
-
-        //########## DESCRIPTION
-        if (tagName == "description")
-            {
-            description = parser.trim(elem->getValue());
-            }
-
-        //######### PROPERTY
-        else if (tagName == "property")
-            {
-            if (!parseProperty(elem))
-                return false;
-            }
-
-        //######### TARGET
-        else if (tagName == "target")
-            {
-            String tname   = elem->getAttribute("name");
-            String tdesc   = elem->getAttribute("description");
-            String tdeps   = elem->getAttribute("depends");
-            String tif     = elem->getAttribute("if");
-            String tunless = elem->getAttribute("unless");
-            Target target(*this);
-            target.setName(tname);
-            target.setDescription(tdesc);
-            target.parseDependencies(tdeps);
-            target.setIf(tif);
-            target.setUnless(tunless);
-            std::vector telems = elem->getChildren();
-            for (std::size_t i=0 ; igetLine());
-                if (!task)
-                    return false;
-                allTasks.push_back(task);
-                target.addTask(task);
-                }
-
-            //Check name
-            if (tname.size() == 0)
-                {
-                error("no name for target");
-                return false;
-                }
-            //Check for duplicate name
-            if (targets.find(tname) != targets.end())
-                {
-                error("target '%s' already defined", tname.c_str());
-                return false;
-                }
-            //more work than targets[tname]=target, but avoids default allocator
-            auto pair = std::make_pair(tname, target); 
-            targets.insert(pair);
-            }
-        //######### none of the above
-        else
-            {
-            error("unknown toplevel tag: <%s>", tagName.c_str());
-            return false;
-            }
-
-        }
-
-    std::map::iterator iter;
-    for (iter = targets.begin() ; iter!= targets.end() ; iter++)
-        {
-        Target tgt = iter->second;
-        std::vector depList;
-        if (!checkTargetDependencies(tgt, depList))
-            {
-            return false;
-            }
-        }
-
-
-    delete root;
-    status("######## PARSE COMPLETE");
-    return true;
-}
-
-
-/**
- * Overload a 
- */
-bool Make::specifyProperty(const String &name, const String &value)
-{
-    if (specifiedProperties.find(name) != specifiedProperties.end())
-        {
-        error("Property %s already specified", name.c_str());
-        return false;
-        }
-    specifiedProperties[name] = value;
-    return true;
-}
-
-
-
-/**
- *
- */
-bool Make::run()
-{
-    if (!parseFile())
-        return false;
-        
-    if (!execute())
-        return false;
-
-    return true;
-}
-
-
-
-
-/**
- * Get a formatted MM:SS.sss time elapsed string
- */ 
-static String
-timeDiffString(struct timeval &x, struct timeval &y)
-{
-    long microsX  = x.tv_usec;
-    long secondsX = x.tv_sec;
-    long microsY  = y.tv_usec;
-    long secondsY = y.tv_sec;
-    if (microsX < microsY)
-        {
-        microsX += 1000000;
-        secondsX -= 1;
-        }
-
-    int seconds = (int)(secondsX - secondsY);
-    int millis  = (int)((microsX - microsY)/1000);
-
-    int minutes = seconds/60;
-    seconds -= minutes*60;
-    char buf[80];
-    snprintf(buf, 79, "%dm %d.%03ds", minutes, seconds, millis);
-    String ret = buf;
-    return ret;
-    
-}
-
-/**
- *
- */
-bool Make::run(const String &target)
-{
-    status("####################################################");
-    status("#   %s", version().c_str());
-    status("####################################################");
-    struct timeval timeStart, timeEnd;
-    ::gettimeofday(&timeStart, NULL);
-    specifiedTarget = target;
-    if (!run())
-        return false;
-    ::gettimeofday(&timeEnd, NULL);
-    String timeStr = timeDiffString(timeEnd, timeStart);
-    status("####################################################");
-    status("#   BuildTool Completed : %s", timeStr.c_str());
-    status("####################################################");
-    return true;
-}
-
-
-
-
-
-
-
-}// namespace buildtool
-//########################################################################
-//# M A I N
-//########################################################################
-
-typedef buildtool::String String;
-
-/**
- *  Format an error message in printf() style
- */
-static void error(const char *fmt, ...)
-{
-    va_list ap;
-    va_start(ap, fmt);
-    fprintf(stderr, "BuildTool error: ");
-    vfprintf(stderr, fmt, ap);
-    fprintf(stderr, "\n");
-    va_end(ap);
-}
-
-
-static bool parseProperty(const String &s, String &name, String &val)
-{
-    int len = s.size();
-    int i;
-    for (i=0 ; i           use given buildfile\n");
-    printf("  -f                  ''\n");
-    printf("  -D=   use value for given property\n");
-    printf("  -j [N]                 build using N threads or infinite number of threads if no argument\n");
-}
-
-
-
-
-/**
- * Parse the command-line args, get our options,
- * and run this thing
- */   
-static bool parseOptions(int argc, char **argv)
-{
-    if (argc < 1)
-        {
-        error("Cannot parse arguments");
-        return false;
-        }
-
-    buildtool::Make make;
-
-    String target;
-
-    //char *progName = argv[0];
-    for (int i=1 ; i1 && arg[0]=='-')
-            {
-            if (arg == "-h" || arg == "-help")
-                {
-                usage(argc,argv);
-                return true;
-                }
-            else if (arg == "-version")
-                {
-                printf("%s", make.version().c_str());
-                return true;
-                }
-            else if (arg == "-f" || arg == "-file")
-                {
-                if (i>=argc-1)
-                   {
-                   usage(argc, argv);
-                   return false;
-                   }
-                i++; //eat option
-                make.setURI(argv[i]);
-                }
-            else if (arg == "-j")
-            {
-                if (i>=argc-1) {  // if -j is given as last argument
-                    make.setNumThreads(20); // default to some high value
-                } else {
-                    i++; //eat option
-                    if (argv[i] && (*argv[i] == '-')) { // if -j is followed by another '-...' option
-                        make.setNumThreads(20); // default to some high value
-                    } else {
-                        make.setNumThreads(atoi(argv[i]));
-                    }
-                }
-            }
-            else if (arg.size()>2 && sequ(arg, "-D"))
-                {
-                String s = arg.substr(2, arg.size());
-                String name, value;
-                if (!parseProperty(s, name, value))
-                   {
-                   usage(argc, argv);
-                   return false;
-                   }
-                if (!make.specifyProperty(name, value))
-                    return false;
-                }
-            else
-                {
-                error("Unknown option:%s", arg.c_str());
-                return false;
-                }
-            }
-        else
-            {
-            if (target.size()>0)
-                {
-                error("only one initial target");
-                usage(argc, argv);
-                return false;
-                }
-            target = arg;
-            }
-        }
-
-    //We have the options.  Now execute them
-    if (!make.run(target))
-        return false;
-
-    return true;
-}
-
-
-
-
-/*
-static bool runMake()
-{
-    buildtool::Make make;
-    if (!make.run())
-        return false;
-    return true;
-}
-
-
-static bool pkgConfigTest()
-{
-    buildtool::PkgConfig pkgConfig;
-    if (!pkgConfig.readFile("gtk+-2.0.pc"))
-        return false;
-    return true;
-}
-
-
-
-static bool depTest()
-{
-    buildtool::DepTool deptool;
-    deptool.setSourceDirectory("/dev/ink/inkscape/src");
-    if (!deptool.generateDependencies("build.dep"))
-        return false;
-    std::vector res =
-           deptool.loadDepFile("build.dep");
-    if (res.size() == 0)
-        return false;
-    return true;
-}
-
-static bool popenTest()
-{
-    buildtool::Make make;
-    buildtool::String out, err;
-    bool ret = make.executeCommand("gcc xx.cpp", "", out, err);
-    printf("Popen test:%d '%s' '%s'\n", ret, out.c_str(), err.c_str());
-    return true;
-}
-
-
-static bool propFileTest()
-{
-    buildtool::Make make;
-    make.parsePropertyFile("test.prop", "test.");
-    return true;
-}
-*/
-
-int main(int argc, char **argv)
-{
-
-    if (!parseOptions(argc, argv))
-        return 1;
-    /*
-    if (!popenTest())
-        return 1;
-
-    if (!depTest())
-        return 1;
-    if (!propFileTest())
-        return 1;
-    if (runMake())
-        return 1;
-    */
-    return 0;
-}
-
-
-//########################################################################
-//# E N D 
-//########################################################################
-
-
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index e57f63885..000000000
--- a/configure.ac
+++ /dev/null
@@ -1,1057 +0,0 @@
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ([2.64])
-
-# Always use 0.xx+devel instead of 0.xxdevel for the version, e.g. 0.46+devel.
-# Rationale: (i) placate simple version comparison software such as
-# `dpkg --compare-versions'.  (ii) We don't always know what the next
-# version is going to be called until about the time we release it
-# (whereas we always know what the previous version was called).
-#
-# Pre-releases are named "M.NNpreX" where X starts at 0 for the first alpha.
-AC_INIT([inkscape], [0.92pre1],
-        [http://bugs.launchpad.net/inkscape/+filebug],
-        [inkscape],
-        [http://inkscape.org/])
-
-AC_CONFIG_HEADERS([config.h])
-AC_CONFIG_SRCDIR([src/main.cpp])
-AC_CONFIG_MACRO_DIR([m4])
-AC_CONFIG_AUX_DIR([build-aux])
-AC_CANONICAL_HOST
-
-# We need version 1.9 of Automake or higher since we no longer distribute the
-# obsolete mkinstalldirs script
-AM_INIT_AUTOMAKE([-Wall dist-zip dist-bzip2 tar-pax 1.9])
-
-m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) dnl Workaround for Automake 1.12
-
-AC_ARG_ENABLE([lsb], AS_HELP_STRING([--enable-lsb], [LSB-compatible build configuration]), [
-  prefix=/opt/inkscape
-  PATH="/opt/lsb/bin:$PATH"
-  CC=lsbcc
-  CXX=lsbc++
-  export CC CXX
-])
-
-AC_LANG(C++)
-AC_PROG_CXX
-AC_PROG_CC
-AM_PROG_AS
-AX_CXX_COMPILE_STDCXX_11([], [mandatory])
-
-# Initialize libtool
-LT_PREREQ([2.2])
-LT_INIT
-AC_HEADER_STDC
-INK_BZR_SNAPSHOT_BUILD
-
-dnl If automake 1.11 shave the output to look nice
-m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
-
-dnl *********************************************************
-dnl Configure a strict set of build rules to prevent usage of 
-dnl deprecated features in external libraries and code that
-dnl triggers compiler warnings.
-dnl *********************************************************
-AC_ARG_ENABLE(strict-build,
-	      [AS_HELP_STRING([--enable-strict-build], [Enable strict build configuration [[default=yes]].  Usage of most deprecated symbols is forbidden by default.  Set the argument to "high" to introduce very strict checking that will cause the build to fail on many systems.])],
-	      [enable_strict_build=$enableval],
-	      [enable_strict_build=yes])
-
-if test "x$enable_strict_build" = "xno"; then
-	AC_MSG_WARN([Strict build options disabled])
-elif test "x$enable_strict_build" = "xhigh"; then
-	AC_MSG_WARN([Strictest build options enabled.  This will cause build failure on most systems])
-else
-	AC_MSG_RESULT([Strict build options enabled])
-fi
-
-dnl These next few lines are needed only while libcroco is in our source tree.
-AM_PROG_CC_C_O
-if test "$GCC" = "yes"; then
-  # Enable some warnings from gcc.
-  AC_LANG_PUSH(C)
-
-  ####
-  # Generic cpp flags...
-
-  # What is just plain "-W" ?
-  # Fortify source requires -O2 or higher, which is handled with newer autoconf
-  CPPFLAGS="-W -D_FORTIFY_SOURCE=2 $CPPFLAGS"
-  # Enable format and format security warnings
-  CPPFLAGS="-Wformat -Wformat-security $CPPFLAGS"
-  # Enable all default warnings
-  CPPFLAGS="-Wall $CPPFLAGS"
-
-  # Permit only top-level Glib headers to be used.
-  # 
-  # TODO: This is already used in Glib >= 2.32 so this flag can be 
-  #       dropped when all targeted distros use higher Glib versions.
-  CPPFLAGS="-DG_DISABLE_SINGLE_INCLUDES $CPPFLAGS"
-
-  # Ensure that private GTK+ fields are not accessible. This strictly
-  # enforced in Gtk+ 3, so it is important to check this in Gtk+ 2 builds
-  CPPFLAGS="-DGSEAL_ENABLE $CPPFLAGS"
-
-  # Unfortunately, we cannot (yet) build with -Werror, so we have to manually
-  # change a ton of warnings into errors.
-  # After some more work on fixing warning-inducing code, we can change this set into
-  # it's complement and use -Wno-error=...
-  # Test for -Werror=... (introduced some time post-4.0)
-  AC_MSG_CHECKING([compiler support for -Werror=...])
-  ink_svd_CPPFLAGS="$CPPFLAGS"
-  CPPFLAGS="-Werror=format-security -Wswitch -Werror=return-type $CPPFLAGS"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [ink_opt_ok=yes], [ink_opt_ok=no])
-  AC_MSG_RESULT([$ink_opt_ok])
-  if test "x$ink_opt_ok" != "xyes"; then
-    CPPFLAGS="$ink_svd_CPPFLAGS"
-  fi
-
-  # Uncomment for SVG2 stuff
-  CPPFLAGS="-DWITH_MESH -DWITH_CSSBLEND -DWITH_CSSCOMPOSITE -DWITH_SVG2 $CPPFLAGS"
-
-  # Uncomment for LPE Tool and All LPEs
-  CPPFLAGS="-DWITH_LPETOOL -DLPE_ENABLE_TEST_EFFECTS $CPPFLAGS"
-
-  ####
-  # C-specific flags...
-
-  # -Wno-pointer-sign is probably new in gcc 4.0; certainly it isn't accepted
-  # by gcc 2.95.
-  AC_MSG_CHECKING([compiler support for -Wno-pointer-sign])
-  ink_svd_CFLAGS="$CFLAGS"
-  CFLAGS="-Wno-pointer-sign $CFLAGS"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [ink_opt_ok=yes], [ink_opt_ok=no])
-  AC_MSG_RESULT([$ink_opt_ok])
-  if test "x$ink_opt_ok" != "xyes"; then
-    CFLAGS="$ink_svd_CFLAGS"
-  fi
-
-  
-  # This Automake variable is only used to suppress warnings in our internal
-  # fork of GDL.  Once we get rid of our GDL fork, we can delete this test
-  AC_MSG_CHECKING([compiler support for -Wno-unused-but-set-variable])
-  ink_svd_CFLAGS="$CFLAGS"
-  CFLAGS="-Wno-unused-but-set-variable $CFLAGS"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [ink_opt_ok=yes], [ink_opt_ok=no])
-  AC_MSG_RESULT([$ink_opt_ok])
-  CFLAGS="$ink_svd_CFLAGS"
-  AM_CONDITIONAL(CC_WNO_UNUSED_BUT_SET_VARIABLE_SUPPORTED, test "$ink_opt_ok" = "yes")
-  
-
-  ####
-  # Linker flags...
-
-  # Have linker produce read-only relocations, if it knows how
-  AC_MSG_CHECKING([linker tolerates -z relro])
-  ink_svd_LDFLAGS="$LDFLAGS"
-  LDFLAGS="-Wl,-z,relro $LDFLAGS"
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([])], [ink_opt_ok=yes], [ink_opt_ok=no])
-  AC_MSG_RESULT([$ink_opt_ok])
-  if test "x$ink_opt_ok" != "xyes"; then
-    LDFLAGS="$ink_svd_LDFLAGS"
-  fi
-
-  AC_LANG_POP
-
-  # C++-specific flags are defined further below.  Look for CXXFLAGS...
-fi
-
-# Test whether GCC emits a spurious warning when using boost::optional
-# If yes, turn off strict aliasing warnings to reduce noise
-# and allow the legitimate warnings to stand out
-AC_MSG_CHECKING([for overzealous strict aliasing warnings])
-ignore_strict_aliasing=no
-CXXFLAGS_SAVE=$CXXFLAGS
-CXXFLAGS="$CXXFLAGS -Werror=strict-aliasing"
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([
-#include 
-boost::optional x;
-int func() {
-  return *x;
-}
-])], [ignore_strict_aliasing=no], [ignore_strict_aliasing=yes])
-AC_MSG_RESULT($ignore_strict_aliasing)
-CXXFLAGS=$CXXFLAGS_SAVE
-if test "x$ignore_strict_aliasing" = "xyes"; then
-  CXXFLAGS="$CXXFLAGS -Wno-strict-aliasing"
-fi
-
-dnl ******************************
-dnl Gettext stuff
-dnl ******************************
-IT_PROG_INTLTOOL([0.40.0])
-
-AM_GNU_GETTEXT_VERSION([0.17])
-AM_GNU_GETTEXT([external])
-
-GETTEXT_PACKAGE="AC_PACKAGE_NAME"
-AC_SUBST(GETTEXT_PACKAGE)
-AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Translation domain used])
-
-AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-if test "x$PKG_CONFIG" = "xno"; then
-	AC_MSG_ERROR(You have to install pkg-config to compile inkscape.)
-fi
-
-dnl Find msgfmt.  Without this, po/Makefile fails to set MSGFMT on some platforms.
-AC_PATH_PROG(MSGFMT, msgfmt, msgfmt)
-AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-
-dnl ******************************
-dnl Check for OpenMP 
-dnl ******************************
-AC_OPENMP
-if test "x$ac_cv_prog_cxx_openmp" != "xunsupported"; then
-	openmp_ok=yes
-	dnl We have it, now set up the flags
-	CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
-	AC_DEFINE(HAVE_OPENMP, 1, [Use OpenMP])
-fi
-
-dnl ********************
-dnl Check for libpotrace
-dnl ********************
-AC_CHECK_LIB(potrace, potrace_trace, [AC_CHECK_HEADER(potracelib.h, potrace_ok=yes, potrace_ok=no)], potrace_ok=no)
-if test "x$potrace_ok" = "xyes"; then
-   LIBS="-lpotrace $LIBS"
-   AC_DEFINE(HAVE_POTRACE, 1, [Use Potrace])
-fi
-
-AM_CONDITIONAL(HAVE_POTRACE, test "x$potrace_ok" = "xyes")
-
-dnl ******************************
-dnl Check for libexif
-dnl ******************************
-PKG_CHECK_MODULES(EXIF, libexif, exif_ok=yes, exif_ok=no)
-if test "x$exif_ok" = "xyes"; then
-   AC_DEFINE(HAVE_EXIF, 1, [Use libexif])
-fi
-AC_SUBST(EXIF_LIBS)
-AC_SUBST(EXIF_CFLAGS)
-
-dnl ******************************
-dnl Check for libjpeg
-dnl ******************************
-AC_CHECK_LIB(jpeg, jpeg_CreateDecompress, [AC_CHECK_HEADER(jpeglib.h, jpeg_ok=yes, jpeg_ok=no)], jpeg_ok=no)
-if test "x$jpeg_ok" = "xyes"; then
-   LIBS="-ljpeg $LIBS"
-   AC_DEFINE(HAVE_JPEG, 1, [Use libjpeg])
-fi
-
-dnl This check is to get a FIONREAD definition on Solaris 8
-AC_CHECK_HEADERS([sys/filio.h])
-
-
-AC_CHECK_HEADERS([malloc.h])
-AC_CHECK_FUNCS([mallinfo], [
-	AC_CHECK_MEMBERS([struct mallinfo.usmblks,
-			  struct mallinfo.fsmblks,
-			  struct mallinfo.uordblks,
-			  struct mallinfo.fordblks,
-			  struct mallinfo.hblkhd],,,
-			 [#include ])
-])
-
-AC_PATH_PROG(FREETYPE_CONFIG, freetype-config, no)
-if test "x$FREETYPE_CONFIG" = "xno"; then
-	AC_MSG_ERROR([Cannot find freetype-config])
-fi
-FREETYPE_CFLAGS=`$FREETYPE_CONFIG --cflags`
-FREETYPE_LIBS=`$FREETYPE_CONFIG --libs`
-AC_SUBST(FREETYPE_CFLAGS)
-AC_SUBST(FREETYPE_LIBS)
-
-dnl ******************************
-dnl Win32
-dnl ******************************
-AC_MSG_CHECKING([for Win32 platform])
-case "$host" in
-  *-*-mingw*)
-    platform_win32=yes
-    WIN32_CFLAGS="-mms-bitfields -DLIBXML_STATIC"
-    ;;
-  *)
-    platform_win32=no
-    ;;
-esac
-AC_MSG_RESULT([$platform_win32])
-AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes")
-AC_SUBST(WIN32_CFLAGS)
-
-dnl TODO - switch to a linker/libtool/feature check, not OS check:
-dnl ******************************
-dnl MacOS X
-dnl ******************************
-AC_MSG_CHECKING([for OSX platform])
-if test "x$build_vendor" = "xapple" ; then
-  platform_osx=yes
-else
-  platform_osx=no
-fi
-AC_MSG_RESULT([$platform_osx])
-	
-AC_MSG_CHECKING([for Solaris platform])
-case "$host" in
-  *-solaris2.*)
-    platform_solaris=yes
-    solaris_version=`echo $host|sed -e 's/^.*-solaris2\.//' -e s'/\..*$//'`
-    CFLAGS="$CFLAGS -DSOLARIS=$solaris_version"
-    CXXFLAGS="$CXXFLAGS -DSOLARIS=$solaris_version"
-    ;;
-  *)
-    platform_solaris=no
-    ;;
-esac
-AC_MSG_RESULT([$platform_solaris])
-AM_CONDITIONAL(PLATFORM_SOLARIS, test "$platform_solaris" = "yes")
-
-dnl ******************************
-dnl gnome vfs checking
-dnl ******************************
-
-AC_ARG_WITH(gnome-vfs,
-	AS_HELP_STRING([--with-gnome-vfs],[use gnome vfs for loading files]),
-	[with_gnome_vfs=$withval], [with_gnome_vfs=auto])
-
-if test "x$with_gnome_vfs" = "xno"; then
-	dnl Asked to ignore gnome-vfs
-	gnome_vfs=no
-else
-        dnl Have to test gnome-vfs presence
-	PKG_CHECK_MODULES(GNOME_VFS, gnome-vfs-2.0 >= 2.0, gnome_vfs=yes, gnome_vfs=no)
-	if test "x$gnome_vfs" != "xyes"; then
-	        dnl No gnome-vfs found
-		if test "x$with_gnome_vfs" = "xyes"; then
-		        dnl Gnome-VFS was explicitly asked for, so stop
-			AC_MSG_ERROR([--with-gnome-vfs was specified, but appropriate libgnomevfs development packages could not be found])
-		else
-			# gnome-vfs is no, tell us for the log file
-			AC_MSG_RESULT($gnome_vfs)
-		fi
-	fi
-fi
-
-AM_CONDITIONAL(USE_GNOME_VFS, test "x$gnome_vfs" = "xyes")
-if test "x$gnome_vfs" = "xyes"; then
-	AC_DEFINE(WITH_GNOME_VFS, 1, [Use gnome vfs file load functionality])
-fi
-
-AC_SUBST(GNOME_VFS_CFLAGS)
-AC_SUBST(GNOME_VFS_LIBS)
-
-dnl ******************************
-dnl libinkjar checking
-dnl ******************************
-
-AC_ARG_WITH(inkjar,
-	AS_HELP_STRING([--without-inkjar],[disable openoffice files (SVG jars)]),[with_ij=$withval], [with_ij=yes])
-
-if test "x$with_ij" = "xyes"; then
-	AC_DEFINE(WITH_INKJAR, 1, [enable openoffice files (SVG jars)])
-	AC_C_BIGENDIAN
-	AC_CHECK_HEADERS(zlib.h)
-	ij=yes
-else
-	ij=no
-fi
-AM_CONDITIONAL(INKJAR, test "$with_ij" = "yes")
-
-dnl ******************************
-dnl LittleCms checking
-dnl ******************************
-
-AC_ARG_ENABLE(lcms,
-	AS_HELP_STRING([--enable-lcms],[enable LittleCms for color management]),
-	[enable_lcms=$enableval], [enable_lcms=yes])
-
-if test "x$enable_lcms" = "xno"; then
-    # Asked to ignore LittleCms
-    lcms=no
-    have_lcms2=no
-else
-    # Have to test LittleCms presence
-    PKG_CHECK_MODULES(LCMS2, lcms2, have_lcms2="yes", have_lcms2="no")
-
-    if test "x${have_lcms2}" = "xyes"; then
-        LIBS="$LIBS $LCMS2_LIBS"
-        AC_DEFINE(HAVE_LIBLCMS2, 1, [define to 1 if you have lcms version 2.x])
-	AC_SUBST(LCMS2_CFLAGS)
-	AC_SUBST(LCMS2_LIBS)
-    else
-        PKG_CHECK_MODULES(LCMS, lcms >= 1.13, lcms=yes, lcms=no)
-        if test "x$lcms" = "xyes"; then
-            LIBS="$LIBS $LCMS_LIBS"
-            AC_DEFINE(HAVE_LIBLCMS1, 1, [define to 1 if you have lcms version 1.x])
-	    AC_SUBST(LCMS_CFLAGS)
-	    AC_SUBST(LCMS_LIBS)
-        else
-            # No lcms found. LittleCms was explicitly asked for, so stop
-            AC_MSG_ERROR([--enable-lcms was specified, but appropriate LittleCms development packages could not be found])
-        fi
-    fi
-fi
-
-dnl ******************************
-dnl Libpoppler checking
-dnl ******************************
-
-AC_ARG_ENABLE(poppler-cairo,
-	AS_HELP_STRING([--enable-poppler-cairo],[Enable libpoppler-cairo for rendering PDF preview]),
-	[enable_poppler_cairo=$enableval], [enable_poppler_cairo=yes])
-
-POPPLER_CFLAGS=""
-PKG_CHECK_MODULES(POPPLER, poppler >= 0.20.0, poppler=yes, poppler=no)
-
-if test "x$poppler" = "xyes"; then
-	dnl Working libpoppler
-	dnl Have to test libpoppler-glib presence
-	PKG_CHECK_MODULES(POPPLER_GLIB, poppler-glib >= 0.20.0, poppler_glib=yes, poppler_glib=no)
-	if test "x$poppler_glib" = "xyes"; then
-		dnl Working libpoppler-glib found
-		dnl Check whether the Cairo SVG backend is available
-		PKG_CHECK_MODULES(CAIRO_SVG, cairo-svg, cairo_svg=yes, cairo_svg=no)
-		if test "x$cairo_svg" = "xyes"; then
-			POPPLER_LIBS="$POPPLER_LIBS $POPPLER_GLIB_LIBS "
-		fi
-	fi
-	if test "x$enable_poppler_cairo" = "xyes"; then
-		dnl Have to test libpoppler-cairo presence for PDF preview
-		dnl AC_CHECK_HEADER(Magick++.h, magick_ok=yes, magick_ok=no)
-		PKG_CHECK_MODULES(POPPLER_CAIRO, poppler-cairo >= 0.20.0, poppler_cairo=yes, poppler_cairo=no)
-		if test "x$poppler_glib" = "xyes" -a "x$poppler_cairo" = "xyes" -a \
-			"x$cairo_svg" = "xno"
-		then
-			POPPLER_LIBS="$POPPLER_LIBS $POPPLER_CAIRO_LIBS "
-		fi
-	fi
-fi
-
-if test "x$poppler" = "xyes"; then
-	LIBS="$LIBS $POPPLER_LIBS"
-	AC_DEFINE(HAVE_POPPLER, 1, [Use libpoppler for direct PDF import])
-fi
-if test "x$poppler_cairo" = "xyes" -a "x$poppler_glib" = "xyes"; then
-	AC_DEFINE(HAVE_POPPLER_CAIRO, 1, [Use libpoppler-cairo for rendering PDF preview])
-fi
-if test "x$poppler_glib" = "xyes" -a "x$cairo_svg" = "xyes"; then
-	AC_DEFINE(HAVE_POPPLER_GLIB, 1, [Use libpoppler-glib and Cairo-SVG for PDF import])
-fi
-AC_SUBST(POPPLER_CFLAGS)
-AC_SUBST(POPPLER_LIBS)
-
-ink_svd_CPPFLAGS=$CPPFLAGS
-ink_svd_LIBS=$LIBS
-CPPFLAGS="$CPPFLAGS $POPPLER_CFLAGS"
-LIBS="$LIBS $POPPLER_LIBS"
-
-PKG_CHECK_MODULES(POPPLER_EVEN_NEWER_COLOR_SPACE_API, poppler >= 0.26.0, popplernewercolorspaceapi=yes, popplernewercolorspaceapi=no)
-if test "x$popplernewercolorspaceapi" = "xyes"; then
-	AC_DEFINE(POPPLER_EVEN_NEWER_COLOR_SPACE_API, 1, [Use even newer color space API from Poppler >= 0.26.0])
-fi
-
-PKG_CHECK_MODULES(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API, poppler >= 0.29.0, popplernewernewcolorspaceapi=yes, popplernewernewcolorspaceapi=no)
-if test "x$popplernewernewcolorspaceapi" = "xyes"; then
-	AC_DEFINE(POPPLER_EVEN_NEWER_NEW_COLOR_SPACE_API, 1, [Use even newer new color space API from Poppler >= 0.29.0])
-fi
-
-CPPFLAGS=$ink_svd_CPPFLAGS
-LIBS=$ink_svd_LIBS
-
-dnl ******************************
-dnl Check for libwpg for extension
-dnl ******************************
-
-AC_ARG_ENABLE(wpg,
-       AS_HELP_STRING([--disable-wpg], [compile without support for WordPerfect Graphics]),
-       enable_wpg=$enableval,enable_wpg=yes)
-
-with_libwpg=no
-
-if test "x$enable_wpg" = "xyes"; then
-        dnl **************************************************************
-        dnl Try using librevenge framework first. Fall back to old libs
-        dnl if unavailable.
-        dnl TODO: Drop subsequent tests once this is widespread in distros
-        dnl **************************************************************
-	PKG_CHECK_MODULES(LIBWPG03, libwpg-0.3 librevenge-0.0 librevenge-stream-0.0, with_libwpg03=yes, with_libwpg03=no)
-	if test "x$with_libwpg03" = "xyes"; then
-		AC_DEFINE(WITH_LIBWPG03,1,[Build using libwpg 0.3.x])
-		with_libwpg=yes
-		AC_SUBST(LIBWPG_LIBS, $LIBWPG03_LIBS)
-		AC_SUBST(LIBWPG_CFLAGS, $LIBWPG03_CFLAGS)
-	else
-		PKG_CHECK_MODULES(LIBWPG02, libwpg-0.2 libwpd-0.9 libwpd-stream-0.9, with_libwpg02=yes, with_libwpg02=no)
-		if test "x$with_libwpg02" = "xyes"; then
-			AC_DEFINE(WITH_LIBWPG02,1,[Build using libwpg 0.2.x])
-			with_libwpg=yes
-			AC_SUBST(LIBWPG_LIBS, $LIBWPG02_LIBS)
-			AC_SUBST(LIBWPG_CFLAGS, $LIBWPG02_CFLAGS)
-		fi
-	fi
-
-	if test "x$with_libwpg" = "xyes"; then
-		AC_DEFINE(WITH_LIBWPG,1,[Build in libwpg])
-	fi
-fi
-AM_CONDITIONAL(WITH_LIBWPG03, test "x$with_libwpg03" = "xyes")
-AM_CONDITIONAL(WITH_LIBWPG02, test "x$with_libwpg02" = "xyes")
-AM_CONDITIONAL(WITH_LIBWPG, test "x$with_libwpg" = "xyes")
-
-dnl ********************************
-dnl Check for libvisio for extension
-dnl ********************************
-
-AC_ARG_ENABLE(visio,
-       AS_HELP_STRING([--disable-visio], [compile without support for Microsoft Visio Diagrams]),
-       enable_visio=$enableval,enable_visio=yes)
-
-with_libvisio=no
-
-if test "x$enable_visio" = "xyes"; then
-        dnl **************************************************************
-        dnl Try using librevenge framework first. Fall back to old libs
-        dnl if unavailable.
-        dnl TODO: Drop subsequent tests once this is widespread in distros
-        dnl **************************************************************
-	PKG_CHECK_MODULES(LIBVISIO01, libvisio-0.1 librevenge-0.0 librevenge-stream-0.0, with_libvisio01=yes, with_libvisio01=no)
-	if test "x$with_libvisio01" = "xyes"; then
-		AC_DEFINE(WITH_LIBVISIO01,1,[Build using libvisio 0.1.x])
-		with_libvisio=yes
-		AC_SUBST(LIBVISIO_LIBS, $LIBVISIO01_LIBS)
-		AC_SUBST(LIBVISIO_CFLAGS, $LIBVISIO01_CFLAGS)
-	else
-		PKG_CHECK_MODULES(LIBVISIO00, libvisio-0.0 >= 0.0.20 libwpd-0.9 libwpd-stream-0.9 libwpg-0.2, with_libvisio00=yes, with_libvisio00=no)
-		if test "x$with_libvisio00" = "xyes"; then
-			AC_DEFINE(WITH_LIBVISIO00,1,[Build using libvisio 0.0.x])
-			with_libvisio=yes
-			AC_SUBST(LIBVISIO_LIBS, $LIBVISIO00_LIBS)
-			AC_SUBST(LIBVISIO_CFLAGS, $LIBVISIO00_CFLAGS)
-		fi
-	fi
-
-	if test "x$with_libvisio" = "xyes"; then
-		AC_DEFINE(WITH_LIBVISIO,1,[Build in libvisio])
-	fi
-fi
-AM_CONDITIONAL(WITH_LIBVISIO01, test "x$with_libvisio01" = "xyes")
-AM_CONDITIONAL(WITH_LIBVISIO00, test "x$with_libvisio00" = "xyes")
-AM_CONDITIONAL(WITH_LIBVISIO, test "x$with_libvisio" = "xyes")
-
-dnl ********************************
-dnl Check for libcdr for extension
-dnl ********************************
-
-AC_ARG_ENABLE(cdr,
-       AS_HELP_STRING([--disable-cdr], [compile without support for CorelDRAW Diagrams]),
-       enable_cdr=$enableval,enable_cdr=yes)
-
-with_libcdr=no
-
-if test "x$enable_cdr" = "xyes"; then
-        dnl **************************************************************
-        dnl Try using librevenge framework first. Fall back to old libs
-        dnl if unavailable.
-        dnl TODO: Drop subsequent tests once this is widespread in distros
-        dnl **************************************************************
-	PKG_CHECK_MODULES(LIBCDR01, libcdr-0.1 librevenge-0.0 librevenge-stream-0.0, with_libcdr01=yes, with_libcdr01=no)
-	if test "x$with_libcdr01" = "xyes"; then
-		AC_DEFINE(WITH_LIBCDR01,1,[Build using libcdr 0.1.x])
-		with_libcdr=yes
-		AC_SUBST(LIBCDR_LIBS, $LIBCDR01_LIBS)
-		AC_SUBST(LIBCDR_CFLAGS, $LIBCDR01_CFLAGS)
-	else
-		PKG_CHECK_MODULES(LIBCDR00, libcdr-0.0 >= 0.0.3 libwpd-0.9 libwpd-stream-0.9 libwpg-0.2, with_libcdr00=yes, with_libcdr00=no)
-		if test "x$with_libcdr00" = "xyes"; then
-			AC_DEFINE(WITH_LIBCDR00,1,[Build using libcdr 0.0.x])
-			with_libcdr=yes
-			AC_SUBST(LIBCDR_LIBS, $LIBCDR00_LIBS)
-			AC_SUBST(LIBCDR_CFLAGS, $LIBCDR00_CFLAGS)
-		fi
-	fi
-
-	if test "x$with_libcdr" = "xyes"; then
-		AC_DEFINE(WITH_LIBCDR,1,[Build in libcdr])
-	fi
-fi
-AM_CONDITIONAL(WITH_LIBCDR01, test "x$with_libcdr01" = "xyes")
-AM_CONDITIONAL(WITH_LIBCDR00, test "x$with_libcdr00" = "xyes")
-AM_CONDITIONAL(WITH_LIBCDR, test "x$with_libcdr" = "xyes")
-
-dnl ******************************
-dnl Support doing a local install
-dnl   (mostly for distcheck)
-dnl ******************************
-
-with_localinstall="no"
-AC_ARG_ENABLE(localinstall, AS_HELP_STRING([--enable-localinstall], [install system files in the local path (for distcheck)]), with_localinstall=$enableval, with_localinstall=no)
-
-dnl ******************************
-dnl Check for dbus functionality
-dnl ******************************
-
-AC_ARG_ENABLE(dbusapi,
-       AS_HELP_STRING([--enable-dbusapi], [compile with support for DBus interface]),
-       enable_dbusapi=$enableval,enable_dbusapi=no)
-
-with_dbus="no"
-if test "x$enable_dbusapi" = "xyes"; then
-	PKG_CHECK_MODULES(DBUS, dbus-glib-1, with_dbus=yes, with_dbus=no)
-	if test "x$with_dbus" = "xyes"; then
-		if test "x$with_localinstall" = "xyes"; then
-			DBUSSERVICEDIR="${datadir}/dbus-1/services/"
-		else
-			DBUSSERVICEDIR=`$PKG_CONFIG --variable=session_bus_services_dir dbus-1`
-		fi
-		AC_SUBST(DBUSSERVICEDIR)
-		AC_DEFINE(WITH_DBUS,1,[Build in dbus])
-	fi
-fi
-AC_SUBST(DBUS_LIBS)
-AC_SUBST(DBUS_CFLAGS)
-AM_CONDITIONAL(WITH_DBUS, test "x$with_dbus" = "xyes")
-
-dnl ******************************
-dnl Check for ImageMagick Magick++ 
-dnl ******************************
-
-PKG_CHECK_MODULES(IMAGEMAGICK, ImageMagick++, magick_ok=yes, magick_ok=no)
-if test "x$magick_ok" = "xyes"; then
-      AC_DEFINE(WITH_IMAGE_MAGICK,1,[Image Magick++ support for bitmap effects])
-fi
-AM_CONDITIONAL(USE_IMAGE_MAGICK, test "x$magick_ok" = "xyes")
-
-AC_SUBST(IMAGEMAGICK_LIBS)
-AC_SUBST(IMAGEMAGICK_CFLAGS)
-
-dnl ******************************
-dnl   Unconditional dependencies
-dnl ******************************
-
-dnl Separate out dependencies that are known to introduce
-dnl C++-specific compiler flags
-PKG_CHECK_MODULES(INKSCAPE_CXX_DEPS,
-		  cairomm-1.0 >= 1.9.8
-		  glibmm-2.4  >= 2.28
-		  giomm-2.4
-		  sigc++-2.0  >= 2.0.12
-		  )
-
-PKG_CHECK_MODULES(INKSCAPE,
-		  bdw-gc      >= 7.2
-		  cairo       >= 1.10
-		  glib-2.0    >= 2.28
-		  gmodule-2.0
-		  gsl
-		  gthread-2.0 >= 2.0
-		  libpng      >= 1.2
-		  libxml-2.0  >= 2.6.11
-		  libxslt     >= 1.0.15
-		  pango       >= 1.24
-		  pangoft2    >= 1.24
-		  )
-
-ink_spell_pkg=
-if pkg-config --exists gtkspell-3.0; then
-	ink_spell_pkg=gtkspell-3.0
-	AC_DEFINE(WITH_GTKSPELL, 1, [enable gtk spelling widget])
-fi
-
-PKG_CHECK_MODULES(GTK,
-                  gtk+-3.0  >= 3.8
-		  gdk-3.0   >= 3.8
-		  gdl-3.0   > 3.4
-		  $ink_spell_pkg)
-
-dnl Separate out dependencies that are known to introduce
-dnl C++-specific compiler flags
-PKG_CHECK_MODULES(GTKMM,
-		  gtkmm-3.0 >= 3.8
-		  gdkmm-3.0 >= 3.8)
-
-# Check whether we can use new features in Gtkmm 3.10
-# TODO: Drop this test and bump the version number in the GTK test above
-#       as soon as all supported distributions provide Gtkmm >= 3.10
-PKG_CHECK_MODULES(GTKMM_3_10,
-		  gtkmm-3.0 >= 3.10,
-		  with_gtkmm_3_10=yes,
-		  with_gtkmm_3_10=no)
-
-if test "x$with_gtkmm_3_10" = "xyes"; then
-	AC_MSG_RESULT([Using Gtkmm 3.10 build])
-	AC_DEFINE(WITH_GTKMM_3_10,1,[Build with Gtkmm 3.10.x or higher])
-fi
-
-# Check whether we are using Gdl >= 3.6.  This version introduced an API/ABI change.
-# TODO: We should drop support for older versions of Gdl once all supported distros
-#       provide Gdl 3.6 or higher
-PKG_CHECK_MODULES(GDL_3_6, gdl-3.0 >= 3.6, with_gdl_3_6=yes, with_gdl_3_6=no)
-
-if test "x$with_gdl_3_6" = "xyes"; then
-	AC_MSG_RESULT([Using Gdl 3.6 or higher])
-	AC_DEFINE(WITH_GDL_3_6,1,[Build with Gdl 3.6 or higher])
-fi
-
-# Check whether we are using the X11 backend target for Gtk+ 3.
-GTK_CHECK_BACKEND([x11], , [have_x11=yes], [have_x11=no])
-
-# Enable strict build options that should work on most systems unless
-# the build has been configured not to do so
-if test "x$enable_strict_build" != "xno"; then
-	# Add build flags here as soon as Inkscape trunk can build
-	# against Gtk+ 3 with the option enabled
-	echo ""
-fi
-
-# Enable strict build options that are known to cause failure in
-# Gtk+ 3 builds
-if test "x$enable_strict_build" = "xhigh"; then
-	# Disable deprecated Gtk+ symbols that have been removed since
-	# Gtk+ 3.
-	CPPFLAGS="-DGTKMM_DISABLE_DEPRECATED $CPPFLAGS"
-	CPPFLAGS="-DGTK_DISABLE_DEPRECATED $CPPFLAGS"
-	CPPFLAGS="-DGDK_DISABLE_DEPRECATED $CPPFLAGS"
-fi
-
-INKSCAPE_CFLAGS="$GTK_CFLAGS $INKSCAPE_CFLAGS"
-INKSCAPE_CXX_DEPS_CFLAGS="$GTKMM_CFLAGS $INKSCAPE_CXX_DEPS_CFLAGS"
-INKSCAPE_LIBS="$GTK_LIBS $INKSCAPE_LIBS"
-INKSCAPE_CXX_DEPS_LIBS="$GTKMM_LIBS $INKSCAPE_CXX_DEPS_LIBS"
-
-dnl Configure x11 library if Gtk+ uses it as a backend.
-dnl Note that this is only here because we directly use X11 functionality.  We
-dnl wouldn't need this check if we were only using X as the Gtk+ backend.
-if test "x$have_x11" = "xyes"; then
-	PKG_CHECK_MODULES(X11, x11)
-fi
-AC_SUBST(X11_CFLAGS)
-AC_SUBST(X11_LIBS)
-
-# Prevent usage of deprecated library symbols unless strict build
-# checking has been disabled
-if test "x$enable_strict_build" != "xno"; then
-	CPPFLAGS="-DGDKMM_DISABLE_DEPRECATED $CPPFLAGS"
-	
-	# Ensure that no deprecated glibmm symbols are introduced.
-	# lp:inkscape builds cleanly with this option at r10957
-	CPPFLAGS="-DGLIBMM_DISABLE_DEPRECATED $CPPFLAGS"
-	
-	dnl Pango 1.32.4 uses a deprecated Glib symbol:
-	dnl   https://bugzilla.gnome.org/show_bug.cgi?id=689843
-	dnl 
-	dnl TODO: Get rid of this check once we are sure that all targeted
-	dnl       platforms have got rid of this Pango version.  Apply the
-	dnl       G_DISABLE_DEPRECATED flag to all builds.
-	pango_uses_deprecated_glib_symbols=no
-
-	PKG_CHECK_MODULES(PANGO_USES_DEPRECATED_GLIB_SYMBOLS,
-			  pango = 1.32.4,
-			  pango_uses_deprecated_glib_symbols=yes,
-			  pango_uses_deprecated_glib_symbols=no)
-
-	# Don't disable deprecated Glib symbols if it will break stuff in an
-	# external library header that we use
-	if test "x$pango_uses_deprecated_glib_symbols" = "xyes"; then
-		AC_MSG_WARN([The available version of Pango uses deprecated Glib symbols.  Deprecated Glib symbol usage will be allowed])
-	else
-		CPPFLAGS="-DG_DISABLE_DEPRECATED $CPPFLAGS"
-	fi
-fi
-
-# Disable all deprecated symbols if very strict build is requested.
-# TODO: Make this a default option for Gtk+ 2 or 3 builds as soon as
-#       possible.
-if test "x$enable_strict_build" = "xhigh"; then
-        CPPFLAGS="-Werror=deprecated-declarations $CPPFLAGS"
-fi
-
-# Check for some boost header files
-AC_CHECK_HEADERS([boost/concept_check.hpp], [], AC_MSG_ERROR([You need the boost package (e.g. libboost-dev)]))
-
-PKG_CHECK_MODULES(CAIRO_PDF, cairo-pdf, cairo_pdf=yes, cairo_pdf=no)
-if test "x$cairo_pdf" = "xyes"; then
-  AC_DEFINE(HAVE_CAIRO_PDF, 1, [Whether the Cairo PDF backend is available])
-fi
-
-dnl Shouldn't we test for libz?
-INKSCAPE_LIBS="$INKSCAPE_LIBS -lz"
-if test "x$openmp_ok" = "xyes"; then
-	INKSCAPE_LIBS="$INKSCAPE_LIBS -lgomp"
-fi
-
-AC_CHECK_HEADER(popt.h,
-		[INKSCAPE_LIBS="$INKSCAPE_LIBS -lpopt"],
-		AC_MSG_ERROR([libpopt is required]))
-
-dnl **************************
-dnl Check for aspell 
-dnl ******************************
-AC_CHECK_LIB(aspell, new_aspell_config, [AC_CHECK_HEADER(aspell.h, aspell_ok=yes, aspell_ok=no)], aspell_ok=no, -lz -lm)
-if test "x$aspell_ok" = "xyes"; then
-	AC_DEFINE(HAVE_ASPELL, 1, [Use aspell for built-in spellchecker])
-  INKSCAPE_LIBS="$INKSCAPE_LIBS -laspell"
-else
-	AC_MSG_CHECKING([Aspell not found, spell checker will be disabled])
-fi
-
-dnl Check for bind_textdomain_codeset, including -lintl if GLib brings it in.
-sp_save_LIBS=$LIBS
-LIBS="$LIBS $INKSCAPE_LIBS"
-AC_CHECK_FUNCS(bind_textdomain_codeset)
-LIBS=$sp_save_LIBS
-
-
-dnl Check for binary relocation support
-dnl Hongli Lai 
-
-AC_ARG_ENABLE(binreloc,
-       AS_HELP_STRING([--enable-binreloc], [compile with binary relocation support]),
-       enable_binreloc=$enableval,enable_binreloc=no)
-
-AC_MSG_CHECKING(whether binary relocation support should be enabled)
-if test "$enable_binreloc" = "yes"; then
-       AC_MSG_RESULT(yes)
-       AC_MSG_CHECKING(for linker mappings at /proc/self/maps)
-       if test -e /proc/self/maps; then
-               AC_MSG_RESULT(yes)
-       else
-               AC_MSG_RESULT(no)
-               AC_MSG_ERROR(/proc/self/maps is not available. Binary relocation cannot be enabled.)
-               enable_binreloc="no"
-       fi
-
-elif test "$enable_binreloc" = "auto"; then
-       AC_MSG_RESULT(yes when available)
-       AC_MSG_CHECKING(for linker mappings at /proc/self/maps)
-       if test -e /proc/self/maps; then
-               AC_MSG_RESULT(yes)
-               enable_binreloc=yes
-
-               AC_MSG_CHECKING(whether everything is installed to the same prefix)
-               if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \
-                       "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \
-                       "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc'
-               then
-                       AC_MSG_RESULT(yes)
-               else
-                       AC_MSG_RESULT(no)
-                       AC_MSG_NOTICE(Binary relocation support will be disabled.)
-                       enable_binreloc=no
-               fi
-
-       else
-               AC_MSG_RESULT(no)
-               enable_binreloc=no
-       fi
-
-elif test "$enable_binreloc" = "no"; then
-       AC_MSG_RESULT(no)
-else
-       AC_MSG_RESULT([no (unknown value "$enable_binreloc")])
-       enable_binreloc=no
-fi
-AC_DEFINE(BR_PTHREADS,[0],[Use binreloc thread support?])
-if test "$enable_binreloc" = "yes"; then
-   AC_DEFINE(ENABLE_BINRELOC,,[Use AutoPackage?])
-fi
-
-AC_ARG_ENABLE(osxapp,
-       AS_HELP_STRING([--enable-osxapp], [compile with OSX .app data dir paths]),
-       enable_osxapp=$enableval,enable_osxapp=no)
-if test "$enable_osxapp" = "yes"; then
-   AC_DEFINE(ENABLE_OSX_APP_LOCATIONS,,[Build with OSX .app data dir paths?])
-   LDFLAGS="$LDFLAGS -headerpad_max_install_names"
-fi
-
-dnl ******************************
-dnl   Reported by autoscan
-dnl ******************************
-AC_CHECK_FUNCS(pow)
-# if we did not find pow(), see if it's in libm.
-if test x"$ac_cv_func_pow" = x"no" ; then
-	AC_CHECK_LIB(m,pow)
-fi
-AC_CHECK_FUNCS(sqrt)
-AC_CHECK_FUNCS(floor)
-AC_CHECK_FUNCS(gettimeofday)
-AC_CHECK_FUNCS(memmove)
-AC_CHECK_FUNCS(memset)
-AC_CHECK_FUNCS(mkdir)
-AC_CHECK_FUNCS(strncasecmp)
-AC_CHECK_FUNCS(strpbrk)
-AC_CHECK_FUNCS(strrchr)
-AC_CHECK_FUNCS(strspn)
-AC_CHECK_FUNCS(strstr)
-AC_CHECK_FUNCS(strtoul)
-AC_CHECK_FUNCS(fpsetmask)
-AC_CHECK_FUNCS(ecvt)
-AC_CHECK_HEADERS(ieeefp.h)
-AC_CHECK_HEADERS(fcntl.h)
-AC_CHECK_HEADERS(libintl.h)
-AC_CHECK_HEADERS(stddef.h)
-AC_CHECK_HEADERS(sys/time.h)
-AC_FUNC_STAT
-AC_FUNC_STRFTIME
-AC_FUNC_STRTOD
-AC_HEADER_STAT
-AC_HEADER_TIME
-AC_STRUCT_TM
-AC_TYPE_MODE_T
-
-dnl Work around broken gcc 3.3 (seen on OSX) where "ENABLE_NLS" isn't
-dnl set correctly because the gettext function isn't noticed.
-if test "$ac_cv_header_libintl_h" = "yes" &&
-   test "$ac_cv_func_bind_textdomain_codeset" = "yes"  &&
-   test "$gt_cv_func_have_gettext" != "yes"; then
-    AC_DEFINE([ENABLE_NLS], [], [Description])
-fi
-
-dnl ******************************
-dnl   Compilation warnings
-dnl ******************************
-if test "$GXX" = "yes"; then
-  # Enable some warnings from g++.
-
-  # Rationale: a number of bugs in inkscape have been fixed by enabling g++
-  # warnings and addressing the produced warnings.  Usually the committing
-  # developer is the best person to address the warnings.
-
-  ink_svd_CXXFLAGS="$CXXFLAGS"
-  CXXFLAGS="-Wno-unused-parameter $CXXFLAGS"
-  # -Wno-unused-parameter isn't accepted by gcc 2.95.
-  AC_COMPILE_IFELSE([AC_LANG_SOURCE([int dummy;])
-], , CXXFLAGS="-Wno-unused $ink_svd_CXXFLAGS",)
-  # Note: At least one bug has been caught from unused parameter warnings,
-  # so it might be worth trying not to disable it.
-  # One way of selectively disabling the warnings (i.e. only where the
-  # programmer deliberately isn't using the parameter, e.g. for a callback)
-  # is to remove the parameter name (leaving just its type), as is done
-  # in src/seltrans.cpp:sp_seltrans_handle_event; this indicates that the
-  # programmer deliberately has an unused parameter (e.g. because it's used
-  # as a callback or similar function pointer use).
-
-  # Add even more stuff
-  CXXFLAGS="-Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch $CXXFLAGS"
-
-fi
-
-dnl ******************************
-dnl   libinkscape
-dnl ******************************
-dnl
-dnl AC_ARG_ENABLE(libinkscape, AS_HELP_STRING([--enable-libinkscape],[Compile dynamic library (experimental)]), [splib=$enableval], [splib=no])
-dnl
-dnl AM_CONDITIONAL(ENABLE_LIBINKSCAPE, test "x$splib" != "xno")
-dnl
-
-AC_SUBST(INKSCAPE_CFLAGS)
-AC_SUBST(INKSCAPE_LIBS)
-AC_SUBST(INKSCAPE_CXX_DEPS_CFLAGS)
-AC_SUBST(INKSCAPE_CXX_DEPS_LIBS)
-
-dnl Define our data paths for config.h
-AC_DEFINE_DIR([INKSCAPE_DATADIR], [datadir], [Base data directory])
-AC_DEFINE_DIR([PACKAGE_LOCALE_DIR], [localedir], [Locatization directory])
-
-AC_CONFIG_FILES([
-Makefile
-src/Makefile
-src/check-header-compile
-src/debug/makefile
-src/display/makefile
-src/extension/implementation/makefile
-src/extension/internal/makefile
-src/extension/makefile
-src/extension/dbus/wrapper/inkdbus.pc
-src/filters/makefile
-src/helper/makefile
-src/io/makefile
-src/libcroco/makefile
-src/libnrtype/makefile
-src/libavoid/makefile
-src/libuemf/makefile
-src/livarot/makefile
-src/live_effects/makefile
-src/live_effects/parameter/makefile
-src/svg/makefile
-src/trace/makefile
-src/ui/cache/makefile
-src/ui/dialog/makefile
-src/ui/makefile
-src/ui/view/makefile
-src/ui/widget/makefile
-src/util/makefile
-src/widgets/makefile
-src/xml/makefile
-src/2geom/makefile
-doc/Makefile
-po/Makefile.in
-share/Makefile
-share/attributes/Makefile
-share/branding/Makefile
-share/examples/Makefile
-share/extensions/Makefile
-share/extensions/alphabet_soup/Makefile
-share/extensions/Barcode/Makefile
-share/extensions/Poly3DObjects/Makefile
-share/extensions/test/Makefile
-share/extensions/xaml2svg/Makefile
-share/extensions/ink2canvas/Makefile
-share/filters/Makefile
-share/fonts/Makefile
-share/gradients/Makefile
-share/icons/Makefile
-share/icons/application/Makefile
-share/icons/application/16x16/Makefile
-share/icons/application/22x22/Makefile
-share/icons/application/24x24/Makefile
-share/icons/application/32x32/Makefile
-share/icons/application/48x48/Makefile
-share/icons/application/256x256/Makefile
-share/keys/Makefile
-share/markers/Makefile
-share/palettes/Makefile
-share/patterns/Makefile
-share/screens/Makefile
-share/symbols/Makefile
-share/templates/Makefile
-share/tutorials/Makefile
-share/ui/Makefile
-packaging/autopackage/default.apspec
-inkscape.spec
-Info.plist
-inkview.1
-])
-
-AH_BOTTOM([
-
-
-])
-
-AC_OUTPUT
-
-echo "
-Configuration:
-
-        Source code location:     ${srcdir}
-        Destination path prefix:  ${prefix}
-        Compiler:                 ${CXX}
-        CPPFLAGS:                 ${CPPFLAGS}
-        CXXFLAGS:                 ${CXXFLAGS}
-        CFLAGS:                   ${CFLAGS}
-        LDFLAGS:                  ${LDFLAGS}
-
-        Use gnome-vfs:            ${gnome_vfs}
-        Use openoffice files:     ${ij}
-        Use relocation support:   ${enable_binreloc}
-        Enable LittleCms:         ${enable_lcms}
-        Enable DBUS:              ${with_dbus} 
-        Enable Poppler-Cairo:     ${enable_poppler_cairo}
-	Enable Potrace:           ${potrace_ok}
-        ImageMagick Magick++:     ${magick_ok}
-        Libwpg:                   ${with_libwpg}
-        Libvisio:                 ${with_libvisio}
-        Libcdr:                   ${with_libcdr}
-        Doing Local Install:      ${with_localinstall}
-"
diff --git a/delautogen.sh b/delautogen.sh
deleted file mode 100755
index bc955a913..000000000
--- a/delautogen.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /bin/sh
-# delautogen.sh: Remove files created by autogen.sh, and files created by make
-# if compiling in the source directory.
-#
-# Requires gnu find, gnu xargs.
-
-set -e
-mydir=`dirname "$0"`
-cd "$mydir"
-rm -rf autom4te.cache
-rm -rf src/.libs
-for d in `find -name .cvsignore -printf '%h '`; do
-	(cd "$d" && rm -f *~ && rm -rf .deps && rm -f $(grep '^[][a-zA-Z0-9_.*?-]*$' .cvsignore) )
-done
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100644
index dd22e7710..000000000
--- a/doc/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-EXTRA_DIST = README.document \
-	architecture.svg \
-	architecture.txt \
-	class-hierarchy.dia \
-	coordinates.txt \
-	HACKING.de.txt \
-	HACKING.fr.txt \
-	HACKING.it.txt \
-	HACKING.pt_BR.txt \
-	HACKING.txt \
-	keys.css \
-	keys.README \
-	keys.be.html\
-	keys.de.html \
-	keys.el.html \
-	keys.en.html \
-	keys.fr.html \
-	keys.ja.html \
-	keys.zh_TW.html \
-	refcounting.txt
diff --git a/m4/Makefile.am b/m4/Makefile.am
deleted file mode 100644
index e1b0207fe..000000000
--- a/m4/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-EXTRA_DIST = \
-	ac_define_dir.m4 \
-	codeset.m4 \
-	gettext.m4 \
-	glibc21.m4 \
-	iconv.m4 \
-	isc-posix.m4 \
-	lcmessage.m4 \
-	progtest.m4 \
-	relaytool.m4
-
diff --git a/m4/ac_define_dir.m4 b/m4/ac_define_dir.m4
deleted file mode 100644
index db42d3eb0..000000000
--- a/m4/ac_define_dir.m4
+++ /dev/null
@@ -1,49 +0,0 @@
-# ===========================================================================
-#             http://autoconf-archive.cryp.to/ac_define_dir.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION])
-#
-# DESCRIPTION
-#
-#   This macro sets VARNAME to the expansion of the DIR variable, taking
-#   care of fixing up ${prefix} and such.
-#
-#   VARNAME is then offered as both an output variable and a C preprocessor
-#   symbol.
-#
-#   Example:
-#
-#      AC_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.])
-#
-# LAST MODIFICATION
-#
-#   2008-04-12
-#
-# COPYLEFT
-#
-#   Copyright (c) 2008 Stepan Kasal 
-#   Copyright (c) 2008 Andreas Schwab 
-#   Copyright (c) 2008 Guido U. Draheim 
-#   Copyright (c) 2008 Alexandre Oliva
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved.
-
-AC_DEFUN([AC_DEFINE_DIR], [
-  prefix_NONE=
-  exec_prefix_NONE=
-  test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix
-  test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix
-dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn
-dnl refers to ${prefix}.  Thus we have to use `eval' twice.
-  eval ac_define_dir="\"[$]$2\""
-  eval ac_define_dir="\"$ac_define_dir\""
-  AC_SUBST($1, "$ac_define_dir")
-  AC_DEFINE_UNQUOTED($1, "$ac_define_dir", [$3])
-  test "$prefix_NONE" && prefix=NONE
-  test "$exec_prefix_NONE" && exec_prefix=NONE
-])
diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4
deleted file mode 100644
index 2c18e49c5..000000000
--- a/m4/ax_cxx_compile_stdcxx.m4
+++ /dev/null
@@ -1,562 +0,0 @@
-# ===========================================================================
-#   http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
-#
-# DESCRIPTION
-#
-#   Check for baseline language coverage in the compiler for the specified
-#   version of the C++ standard.  If necessary, add switches to CXX and
-#   CXXCPP to enable support.  VERSION may be '11' (for the C++11 standard)
-#   or '14' (for the C++14 standard).
-#
-#   The second argument, if specified, indicates whether you insist on an
-#   extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
-#   -std=c++11).  If neither is specified, you get whatever works, with
-#   preference for an extended mode.
-#
-#   The third argument, if specified 'mandatory' or if left unspecified,
-#   indicates that baseline support for the specified C++ standard is
-#   required and that the macro should error out if no mode with that
-#   support is found.  If specified 'optional', then configuration proceeds
-#   regardless, after defining HAVE_CXX${VERSION} if and only if a
-#   supporting mode is found.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Benjamin Kosnik 
-#   Copyright (c) 2012 Zack Weinberg 
-#   Copyright (c) 2013 Roy Stogner 
-#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov 
-#   Copyright (c) 2015 Paul Norman 
-#   Copyright (c) 2015 Moritz Klammler 
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved.  This file is offered as-is, without any
-#   warranty.
-
-#serial 4
-
-dnl  This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
-dnl  (serial version number 13).
-
-AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
-  m4_if([$1], [11], [],
-        [$1], [14], [],
-        [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])],
-        [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
-  m4_if([$2], [], [],
-        [$2], [ext], [],
-        [$2], [noext], [],
-        [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
-  m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
-        [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
-        [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
-        [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
-  AC_LANG_PUSH([C++])dnl
-  ac_success=no
-  AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
-  ax_cv_cxx_compile_cxx$1,
-  [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
-    [ax_cv_cxx_compile_cxx$1=yes],
-    [ax_cv_cxx_compile_cxx$1=no])])
-  if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
-    ac_success=yes
-  fi
-
-  m4_if([$2], [noext], [], [dnl
-  if test x$ac_success = xno; then
-    for switch in -std=gnu++$1 -std=gnu++0x; do
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
-      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
-                     $cachevar,
-        [ac_save_CXX="$CXX"
-         CXX="$CXX $switch"
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
-          [eval $cachevar=yes],
-          [eval $cachevar=no])
-         CXX="$ac_save_CXX"])
-      if eval test x\$$cachevar = xyes; then
-        CXX="$CXX $switch"
-        if test -n "$CXXCPP" ; then
-          CXXCPP="$CXXCPP $switch"
-        fi
-        ac_success=yes
-        break
-      fi
-    done
-  fi])
-
-  m4_if([$2], [ext], [], [dnl
-  if test x$ac_success = xno; then
-    dnl HP's aCC needs +std=c++11 according to:
-    dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
-    dnl Cray's crayCC needs "-h std=c++11"
-    for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do
-      cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
-      AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
-                     $cachevar,
-        [ac_save_CXX="$CXX"
-         CXX="$CXX $switch"
-         AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
-          [eval $cachevar=yes],
-          [eval $cachevar=no])
-         CXX="$ac_save_CXX"])
-      if eval test x\$$cachevar = xyes; then
-        CXX="$CXX $switch"
-        if test -n "$CXXCPP" ; then
-          CXXCPP="$CXXCPP $switch"
-        fi
-        ac_success=yes
-        break
-      fi
-    done
-  fi])
-  AC_LANG_POP([C++])
-  if test x$ax_cxx_compile_cxx$1_required = xtrue; then
-    if test x$ac_success = xno; then
-      AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
-    fi
-  fi
-  if test x$ac_success = xno; then
-    HAVE_CXX$1=0
-    AC_MSG_NOTICE([No compiler with C++$1 support was found])
-  else
-    HAVE_CXX$1=1
-    AC_DEFINE(HAVE_CXX$1,1,
-              [define if the compiler supports basic C++$1 syntax])
-  fi
-  AC_SUBST(HAVE_CXX$1)
-])
-
-
-dnl  Test body for checking C++11 support
-
-m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
-  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
-)
-
-
-dnl  Test body for checking C++14 support
-
-m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
-  _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
-  _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
-)
-
-
-dnl  Tests for new features in C++11
-
-m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
-
-// If the compiler admits that it is not ready for C++11, why torture it?
-// Hopefully, this will speed up the test.
-
-#ifndef __cplusplus
-
-#error "This is not a C++ compiler"
-
-#elif __cplusplus < 201103L
-
-#error "This is not a C++11 compiler"
-
-#else
-
-namespace cxx11
-{
-
-  namespace test_static_assert
-  {
-
-    template 
-    struct check
-    {
-      static_assert(sizeof(int) <= sizeof(T), "not big enough");
-    };
-
-  }
-
-  namespace test_final_override
-  {
-
-    struct Base
-    {
-      virtual void f() {}
-    };
-
-    struct Derived : public Base
-    {
-      virtual void f() override {}
-    };
-
-  }
-
-  namespace test_double_right_angle_brackets
-  {
-
-    template < typename T >
-    struct check {};
-
-    typedef check single_type;
-    typedef check> double_type;
-    typedef check>> triple_type;
-    typedef check>>> quadruple_type;
-
-  }
-
-  namespace test_decltype
-  {
-
-    int
-    f()
-    {
-      int a = 1;
-      decltype(a) b = 2;
-      return a + b;
-    }
-
-  }
-
-  namespace test_type_deduction
-  {
-
-    template < typename T1, typename T2 >
-    struct is_same
-    {
-      static const bool value = false;
-    };
-
-    template < typename T >
-    struct is_same
-    {
-      static const bool value = true;
-    };
-
-    template < typename T1, typename T2 >
-    auto
-    add(T1 a1, T2 a2) -> decltype(a1 + a2)
-    {
-      return a1 + a2;
-    }
-
-    int
-    test(const int c, volatile int v)
-    {
-      static_assert(is_same::value == true, "");
-      static_assert(is_same::value == false, "");
-      static_assert(is_same::value == false, "");
-      auto ac = c;
-      auto av = v;
-      auto sumi = ac + av + 'x';
-      auto sumf = ac + av + 1.0;
-      static_assert(is_same::value == true, "");
-      static_assert(is_same::value == true, "");
-      static_assert(is_same::value == true, "");
-      static_assert(is_same::value == false, "");
-      static_assert(is_same::value == true, "");
-      return (sumf > 0.0) ? sumi : add(c, v);
-    }
-
-  }
-
-  namespace test_noexcept
-  {
-
-    int f() { return 0; }
-    int g() noexcept { return 0; }
-
-    static_assert(noexcept(f()) == false, "");
-    static_assert(noexcept(g()) == true, "");
-
-  }
-
-  namespace test_constexpr
-  {
-
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
-    {
-      return *s ? strlen_c_r(s + 1, acc + 1) : acc;
-    }
-
-    template < typename CharT >
-    unsigned long constexpr
-    strlen_c(const CharT *const s) noexcept
-    {
-      return strlen_c_r(s, 0UL);
-    }
-
-    static_assert(strlen_c("") == 0UL, "");
-    static_assert(strlen_c("1") == 1UL, "");
-    static_assert(strlen_c("example") == 7UL, "");
-    static_assert(strlen_c("another\0example") == 7UL, "");
-
-  }
-
-  namespace test_rvalue_references
-  {
-
-    template < int N >
-    struct answer
-    {
-      static constexpr int value = N;
-    };
-
-    answer<1> f(int&)       { return answer<1>(); }
-    answer<2> f(const int&) { return answer<2>(); }
-    answer<3> f(int&&)      { return answer<3>(); }
-
-    void
-    test()
-    {
-      int i = 0;
-      const int c = 0;
-      static_assert(decltype(f(i))::value == 1, "");
-      static_assert(decltype(f(c))::value == 2, "");
-      static_assert(decltype(f(0))::value == 3, "");
-    }
-
-  }
-
-  namespace test_uniform_initialization
-  {
-
-    struct test
-    {
-      static const int zero {};
-      static const int one {1};
-    };
-
-    static_assert(test::zero == 0, "");
-    static_assert(test::one == 1, "");
-
-  }
-
-  namespace test_lambdas
-  {
-
-    void
-    test1()
-    {
-      auto lambda1 = [](){};
-      auto lambda2 = lambda1;
-      lambda1();
-      lambda2();
-    }
-
-    int
-    test2()
-    {
-      auto a = [](int i, int j){ return i + j; }(1, 2);
-      auto b = []() -> int { return '0'; }();
-      auto c = [=](){ return a + b; }();
-      auto d = [&](){ return c; }();
-      auto e = [a, &b](int x) mutable {
-        const auto identity = [](int y){ return y; };
-        for (auto i = 0; i < a; ++i)
-          a += b--;
-        return x + identity(a + b);
-      }(0);
-      return a + b + c + d + e;
-    }
-
-    int
-    test3()
-    {
-      const auto nullary = [](){ return 0; };
-      const auto unary = [](int x){ return x; };
-      using nullary_t = decltype(nullary);
-      using unary_t = decltype(unary);
-      const auto higher1st = [](nullary_t f){ return f(); };
-      const auto higher2nd = [unary](nullary_t f1){
-        return [unary, f1](unary_t f2){ return f2(unary(f1())); };
-      };
-      return higher1st(nullary) + higher2nd(nullary)(unary);
-    }
-
-  }
-
-  namespace test_variadic_templates
-  {
-
-    template 
-    struct sum;
-
-    template 
-    struct sum
-    {
-      static constexpr auto value = N0 + sum::value;
-    };
-
-    template <>
-    struct sum<>
-    {
-      static constexpr auto value = 0;
-    };
-
-    static_assert(sum<>::value == 0, "");
-    static_assert(sum<1>::value == 1, "");
-    static_assert(sum<23>::value == 23, "");
-    static_assert(sum<1, 2>::value == 3, "");
-    static_assert(sum<5, 5, 11>::value == 21, "");
-    static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
-
-  }
-
-  // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
-  // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
-  // because of this.
-  namespace test_template_alias_sfinae
-  {
-
-    struct foo {};
-
-    template
-    using member = typename T::member_type;
-
-    template
-    void func(...) {}
-
-    template
-    void func(member*) {}
-
-    void test();
-
-    void test() { func(0); }
-
-  }
-
-}  // namespace cxx11
-
-#endif  // __cplusplus >= 201103L
-
-]])
-
-
-dnl  Tests for new features in C++14
-
-m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
-
-// If the compiler admits that it is not ready for C++14, why torture it?
-// Hopefully, this will speed up the test.
-
-#ifndef __cplusplus
-
-#error "This is not a C++ compiler"
-
-#elif __cplusplus < 201402L
-
-#error "This is not a C++14 compiler"
-
-#else
-
-namespace cxx14
-{
-
-  namespace test_polymorphic_lambdas
-  {
-
-    int
-    test()
-    {
-      const auto lambda = [](auto&&... args){
-        const auto istiny = [](auto x){
-          return (sizeof(x) == 1UL) ? 1 : 0;
-        };
-        const int aretiny[] = { istiny(args)... };
-        return aretiny[0];
-      };
-      return lambda(1, 1L, 1.0f, '1');
-    }
-
-  }
-
-  namespace test_binary_literals
-  {
-
-    constexpr auto ivii = 0b0000000000101010;
-    static_assert(ivii == 42, "wrong value");
-
-  }
-
-  namespace test_generalized_constexpr
-  {
-
-    template < typename CharT >
-    constexpr unsigned long
-    strlen_c(const CharT *const s) noexcept
-    {
-      auto length = 0UL;
-      for (auto p = s; *p; ++p)
-        ++length;
-      return length;
-    }
-
-    static_assert(strlen_c("") == 0UL, "");
-    static_assert(strlen_c("x") == 1UL, "");
-    static_assert(strlen_c("test") == 4UL, "");
-    static_assert(strlen_c("another\0test") == 7UL, "");
-
-  }
-
-  namespace test_lambda_init_capture
-  {
-
-    int
-    test()
-    {
-      auto x = 0;
-      const auto lambda1 = [a = x](int b){ return a + b; };
-      const auto lambda2 = [a = lambda1(x)](){ return a; };
-      return lambda2();
-    }
-
-  }
-
-  namespace test_digit_seperators
-  {
-
-    constexpr auto ten_million = 100'000'000;
-    static_assert(ten_million == 100000000, "");
-
-  }
-
-  namespace test_return_type_deduction
-  {
-
-    auto f(int& x) { return x; }
-    decltype(auto) g(int& x) { return x; }
-
-    template < typename T1, typename T2 >
-    struct is_same
-    {
-      static constexpr auto value = false;
-    };
-
-    template < typename T >
-    struct is_same
-    {
-      static constexpr auto value = true;
-    };
-
-    int
-    test()
-    {
-      auto x = 0;
-      static_assert(is_same::value, "");
-      static_assert(is_same::value, "");
-      return x;
-    }
-
-  }
-
-}  // namespace cxx14
-
-#endif  // __cplusplus >= 201402L
-
-]])
diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4
deleted file mode 100644
index 0aadeafe7..000000000
--- a/m4/ax_cxx_compile_stdcxx_11.m4
+++ /dev/null
@@ -1,39 +0,0 @@
-# ============================================================================
-#  http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
-# ============================================================================
-#
-# SYNOPSIS
-#
-#   AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional])
-#
-# DESCRIPTION
-#
-#   Check for baseline language coverage in the compiler for the C++11
-#   standard; if necessary, add switches to CXX and CXXCPP to enable
-#   support.
-#
-#   This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX
-#   macro with the version set to C++11.  The two optional arguments are
-#   forwarded literally as the second and third argument respectively.
-#   Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for
-#   more information.  If you want to use this macro, you also need to
-#   download the ax_cxx_compile_stdcxx.m4 file.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Benjamin Kosnik 
-#   Copyright (c) 2012 Zack Weinberg 
-#   Copyright (c) 2013 Roy Stogner 
-#   Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov 
-#   Copyright (c) 2015 Paul Norman 
-#   Copyright (c) 2015 Moritz Klammler 
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved. This file is offered as-is, without any
-#   warranty.
-
-#serial 17
-
-AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX])
-AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])])
diff --git a/m4/ink_bzr_snapshot_build.m4 b/m4/ink_bzr_snapshot_build.m4
deleted file mode 100644
index 4dc2df54f..000000000
--- a/m4/ink_bzr_snapshot_build.m4
+++ /dev/null
@@ -1,14 +0,0 @@
-# Check for BZR snapshot build
-# (c) 2009 Krzysztof Kosiński
-# Released under GNU GPL; see the file COPYING for more information
-
-AC_DEFUN([INK_BZR_SNAPSHOT_BUILD],
-[
-  AC_CACHE_CHECK([for BZR snapshot build], ink_cv_bzr_snapshot_build,
-                 [ink_cv_bzr_snapshot_build=no
-                  if which bzr > /dev/null && test -e $srcdir/.bzr/branch/last-revision; then
-                    ink_cv_bzr_snapshot_build=yes
-                  fi
-  ])
-  AM_CONDITIONAL([USE_BZR_VERSION], [test "x$ink_cv_bzr_snapshot_build" = "xyes"])
-])
diff --git a/m4/relaytool.m4 b/m4/relaytool.m4
deleted file mode 100644
index 5cd65aea0..000000000
--- a/m4/relaytool.m4
+++ /dev/null
@@ -1,30 +0,0 @@
-dnl  Usage: RELAYTOOL(LIBRARY_NAME, LIBS, CFLAGS, ACTION-IF-WEAK-LINK-IS-POSSIBLE)
-
-dnl  Example:
-dnl  RELAYTOOL("gtkspell", GTKSPELL_LIBS, GTKSPELL_CFLAGS, gtkspell_weak=yes)
-dnl  Will modify GTKSPELL_LIBS to include a call to relaytool if available
-dnl  or if not, will modify GTKSPELL_CFLAGS to include -D switches to define
-dnl  libgtkspell_is_present=1 and libgtkspell_symbol_is_present=1
-
-AC_DEFUN([RELAYTOOL], [
-    if test -z "$RELAYTOOL_PROG"; then
-        AC_PATH_PROG(RELAYTOOL_PROG, relaytool, no)
-    fi
-
-    AC_MSG_CHECKING(whether we can weak link $1)
-
-    _RELAYTOOL_PROCESSED_NAME=`echo "$1" | sed 's/-/_/g;s/\./_/g;'`
-    _RELAYTOOL_UPPER_NAME=`echo $_RELAYTOOL_PROCESSED_NAME | tr '[[:lower:]]' '[[:upper:]]'`
-
-    if test "$RELAYTOOL_PROG" = "no"; then
-        AC_MSG_RESULT(no)
-        $3="-DRELAYTOOL_${_RELAYTOOL_UPPER_NAME}='static const int lib${_RELAYTOOL_PROCESSED_NAME}_is_present = 1; static int __attribute__((unused)) lib${_RELAYTOOL_PROCESSED_NAME}_symbol_is_present(char *m) { return 1; }' $$3"
-    else
-        AC_MSG_RESULT(yes)
-        $2=`echo $$2|sed 's/\`/\\\\\`/g;'`
-        $2="-Wl,--gc-sections \`relaytool --relay $1 $$2\`"
-	$3="-DRELAYTOOL_${_RELAYTOOL_UPPER_NAME}='extern int lib${_RELAYTOOL_PROCESSED_NAME}_is_present; extern int lib${_RELAYTOOL_PROCESSED_NAME}_symbol_is_present(char *s);' $$3"
-        $4
-    fi
-])
-
diff --git a/share/Makefile.am b/share/Makefile.am
deleted file mode 100644
index fa778b031..000000000
--- a/share/Makefile.am
+++ /dev/null
@@ -1,25 +0,0 @@
-SUBDIRS = attributes \
-          branding \
-          examples \
-          extensions \
-          filters \
-          fonts \
-          gradients \
-          icons \
-          keys \
-          markers \
-          palettes \
-          patterns \
-          screens \
-          symbols \
-          templates \
-          tutorials \
-          ui
-
-## COPY THE REST OF THE FOLDERS TO THE PROPER LOCATION
-
-## dist-hook:
-##	mkdir $(distdir)/samples
-##	cp $(datadir)/samples/*svg $(distdir)/samples
-##	cp $(datadir)/samples/*png $(distdir)/samples
-
diff --git a/share/attributes/Makefile.am b/share/attributes/Makefile.am
deleted file mode 100644
index 9834c5b14..000000000
--- a/share/attributes/Makefile.am
+++ /dev/null
@@ -1,10 +0,0 @@
-
-attributesdir = $(datadir)/inkscape/attributes
-
-attributes_DATA = \
-	svgprops \
-	cssprops \
-	css_defaults \
-	README
-
-EXTRA_DIST = $(attributes_DATA)
diff --git a/share/branding/Makefile.am b/share/branding/Makefile.am
deleted file mode 100644
index 1561dbf2c..000000000
--- a/share/branding/Makefile.am
+++ /dev/null
@@ -1,18 +0,0 @@
-
-brandingdir = $(datadir)/inkscape/branding
-iconsdir = $(datadir)/inkscape/icons
-
-branding_DATA =  \
-	README \
-	inkscape.svg \
-	inkscape-flat.svg \
-	inkscape-text.svg \
-	sodipodi.svg \
-	LinLibertine_DR.otf \
-	EuphoriaScript-Regular.otf \
-	tux.svg 
-
-icons_DATA = \
-	inkscape.svg
-
-EXTRA_DIST = $(branding_DATA) $(icons_DATA)
diff --git a/share/examples/Makefile.am b/share/examples/Makefile.am
deleted file mode 100644
index a89246048..000000000
--- a/share/examples/Makefile.am
+++ /dev/null
@@ -1,37 +0,0 @@
-
-exampledir = $(datadir)/inkscape/examples
-
-example_DATA = \
-	README \
-	istest.pov \
-	gradient.svg \
-	tiger.svgz \
-	markers.svg \
-	i18n.svg \
-	stars.svgz \
-	text-on-path.svg \
-	flowsample.svg \
-	data_uri.svg \
-	tesselation-P3.svg \
-	art-nouveau-P3.svg \
-	eastern-motive-P4G.svg \
-	l-systems.svgz \
-	glass.svg \
-	car.svgz \
-	gallardo.svgz \
-	gradient-mesh-experimental.svgz \
-	rope-3D.svg \
-	animated-clock.svg \
-	blend_modes.svg \
-	flow-go.svg \
-	lighting_filters.svg \
-	turbulence_filters.svg \
-	live-path-effects-curvestitch.svg \
-	live-path-effects-gears.svg \
-	live-path-effects-pathalongpath.svg \
-	filters.svg \
-	svgfont.svg \
-	tref.svg \
-	replace-hue.svg
-
-EXTRA_DIST = $(example_DATA)
diff --git a/share/extensions/Barcode/Makefile.am b/share/extensions/Barcode/Makefile.am
deleted file mode 100644
index 08e2f58b4..000000000
--- a/share/extensions/Barcode/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-
-barcodedir = $(datadir)/inkscape/extensions/Barcode
-
-barcode_DATA = \
-	Base.py \
-    BaseEan.py \
-	Code128.py \
-	Code39Ext.py \
-	Code39.py \
-    Code25i.py \
-	Code93.py \
-	Ean13.py \
-	Ean8.py \
-	Ean5.py \
-	Ean2.py \
-	__init__.py \
-	Rm4scc.py \
-	Upca.py \
-	Upce.py
-
-EXTRA_DIST = \
-	$(barcode_DATA)
-
diff --git a/share/extensions/Makefile.am b/share/extensions/Makefile.am
deleted file mode 100644
index f247cd8bb..000000000
--- a/share/extensions/Makefile.am
+++ /dev/null
@@ -1,42 +0,0 @@
-
-SUBDIRS = \
-	alphabet_soup \
-	Barcode \
-	ink2canvas \
-	Poly3DObjects \
-	test \
-	xaml2svg
-
-extensiondir = $(datadir)/inkscape/extensions
-
-otherstuffdir = $(datadir)/inkscape/extensions
-
-moduledir = $(datadir)/inkscape/extensions
-
-extension_SCRIPTS = \
-	$(wildcard $(srcdir)/*.py) \
-	$(wildcard $(srcdir)/*.pl) \
-	$(wildcard $(srcdir)/*.sh) \
-	$(wildcard $(srcdir)/*.rb)
-
-otherstuff_DATA = \
-	fontfix.conf \
-	inkweb.js \
-	jessyInk.js \
-	jessyInk_core_mouseHandler_noclick.js \
-	jessyInk_core_mouseHandler_zoomControl.js \
-	aisvg.xslt \
-	colors.xml \
-	jessyInk_video.svg \
-	seamless_pattern.svg \
-	svg2fxg.xsl \
-	svg2xaml.xsl \
-	xaml2svg.xsl \
-	inkscape.extension.rng
-
-module_DATA = $(wildcard $(srcdir)/*.inx)
-
-EXTRA_DIST = \
-	$(extension_SCRIPTS) $(otherstuff_DATA) $(module_DATA)
-
-
diff --git a/share/extensions/Poly3DObjects/Makefile.am b/share/extensions/Poly3DObjects/Makefile.am
deleted file mode 100644
index 82a81af42..000000000
--- a/share/extensions/Poly3DObjects/Makefile.am
+++ /dev/null
@@ -1,33 +0,0 @@
-
-Poly3DObjectsdir = $(datadir)/inkscape/extensions/Poly3DObjects
-
-Poly3DObjects_DATA = \
-	cube.obj \
-	cuboct.obj \
-	dodec.obj \
-	great_dodec.obj \
-	great_rhombicosidodec.obj \
-	great_rhombicuboct.obj \
-	great_stel_dodec.obj \
-	icos.obj \
-	icosidodec.obj \
-	jessens_orthog_icos.obj \
-	methane.obj \
-	oct.obj \
-	rhomb_dodec.obj \
-	rhomb_triacont.obj \
-	rh_axes.obj \
-	small_rhombicosidodec.obj \
-	small_rhombicuboct.obj \
-	small_triam_icos.obj \
-	snub_cube.obj \
-	snub_dodec.obj \
-	szilassi.obj \
-	tet.obj \
-	trunc_cube.obj \
-	trunc_dodec.obj \
-	trunc_icos.obj \
-	trunc_oct.obj \
-	trunc_tet.obj
-
-EXTRA_DIST = $(Poly3DObjects_DATA)
diff --git a/share/extensions/alphabet_soup/Makefile.am b/share/extensions/alphabet_soup/Makefile.am
deleted file mode 100644
index 004da4e8c..000000000
--- a/share/extensions/alphabet_soup/Makefile.am
+++ /dev/null
@@ -1,78 +0,0 @@
-
-alphabet_soupdir = $(datadir)/inkscape/extensions/alphabet_soup
-
-alphabet_soup_DATA = \
-	2.svg \
-	3.svg \
-	6.svg \
-	7.svg \
-	abase.svg \
-	a.svg \
-	acap.svg \
-	bar2.svg \
-	barcap.svg \
-	bar.svg \
-	b.svg \
-	Cblob.svg \
-	Chook.svg \
-	cross.svg \
-	cserif.svg \
-	c.svg \
-	Ctail.svg \
-	Delta.svg \
-	Eb.svg \
-	epsilon.svg \
-	Eserif.svg \
-	e.svg \
-	Et.svg \
-	f.svg \
-	gamma.svg \
-	G.svg \
-	h2.svg \
-	hcap.svg \
-	h.svg \
-	IBSerif.svg \
-	idot.svg \
-	ITSerif.svg \
-	j.svg \
-	k.svg \
-	Lb.svg \
-	lserif.svg \
-	l.svg \
-	Lt.svg \
-	mcap.svg \
-	m.svg \
-	n.svg \
-	ocap.svg \
-	Ocross.svg \
-	o.svg \
-	Oterm.svg \
-	P.svg \
-	Q.svg \
-	question.svg \
-	Rblock.svg \
-	rcap.svg \
-	r.svg \
-	serif.svg \
-	s.svg \
-	Tb.svg \
-	tserif.svg \
-	t.svg \
-	Tt.svg \
-	U.svg \
-	vcap.svg \
-	vserl.svg \
-	vserr.svg \
-	Vser.svg \
-	v.svg \
-	Xh.svg \
-	Xne.svg \
-	Xnw.svg \
-	x.svg \
-	Xvb.svg \
-	Xvt.svg \
-	yogh.svg \
-	y.svg \
-	z.svg
-
-EXTRA_DIST = $(alphabet_soup_DATA)	
diff --git a/share/extensions/ink2canvas/Makefile.am b/share/extensions/ink2canvas/Makefile.am
deleted file mode 100644
index ab6e7661d..000000000
--- a/share/extensions/ink2canvas/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-
-ink2canvasdir = $(datadir)/inkscape/extensions/ink2canvas
-
-ink2canvas_DATA = \
-  __init__.py \
-	canvas.py \
-  svg.py
-
-EXTRA_DIST = $(ink2canvas_DATA)
diff --git a/share/extensions/test/Makefile.am b/share/extensions/test/Makefile.am
deleted file mode 100644
index cd1929a7f..000000000
--- a/share/extensions/test/Makefile.am
+++ /dev/null
@@ -1,60 +0,0 @@
-
-# List of all tests to be run.
-#TESTS = svgcalendar.test.py
-# that is not working :-/
-
-EXTRA_DIST = \
-		addnodes.test.py \
-		chardataeffect.test.py \
-		color_randomize_test.py \
-		coloreffect.test.py \
-		create_test_from_template.sh \
-		dots.test.py \
-		draw_from_triangle.test.py \
-		dxf_outlines.test.py \
-		edge3d.test.py \
-		embedimage.test.py \
-		eqtexsvg.test.py \
-		extractimage.test.py \
-		extrude.test.py \
-		flatten.test.py \
-		foldablebox.test.py \
-		fractalize.test.py \
-		funcplot.test.py \
-		gimp_xcf.test.py \
-		grid_cartesian.test.py \
-		grid_polar.test.py \
-		guides_creator.test.py \
-		handles.test.py \
-		hpgl_output.test.py \
-		inkweb-debug.js \
-		inkwebeffect.test.py \
-		inkwebjs-move.test.svg \
-		interp_att_g.test.py \
-		interp.test.py \
-		lindenmayer.test.py \
-		lorem_ipsum.test.py \
-		markers_strokepaint.test.py \
-		measure.test.py \
-		minimal-blank.svg \
-		motion.test.py \
-		pathmodifier.test.py \
-		perfectboundcover.test.py \
-		perspective.test.py \
-		polyhedron_3d.test.py \
-		radiusrand.test.py \
-		render_alphabetsoup.test.py \
-		render_barcode.test.py \
-		render_barcode.data \
-		render_gears.test.py \
-		restack.test.py \
-		rtree.test.py \
-		run-all-extension-tests \
-		spirograph.test.py \
-		straightseg.test.py \
-		summersnight.test.py \
-		svg_and_media_zip_output.test.py \
-		svgcalendar.test.py \
-		test_template.py.txt \
-		triangle.test.py \
-		whirl.test.py
diff --git a/share/extensions/xaml2svg/Makefile.am b/share/extensions/xaml2svg/Makefile.am
deleted file mode 100644
index 89a901fde..000000000
--- a/share/extensions/xaml2svg/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-
-xaml2svg_otherstuffdir = $(datadir)/inkscape/extensions/xaml2svg
-
-xaml2svg_otherstuff = \
-	animation.xsl \
-	brushes.xsl \
-	canvas.xsl \
-	geometry.xsl \
-	Makefile.am \
-	properties.xsl \
-	shapes.xsl \
-	transform.xsl
-
-xaml2svg_otherstuff_DATA = \
-	$(xaml2svg_otherstuff)
-
-EXTRA_DIST = \
-	$(xaml2svg_otherstuff_DATA)
-
diff --git a/share/filters/Makefile.am b/share/filters/Makefile.am
deleted file mode 100644
index 1a871a992..000000000
--- a/share/filters/Makefile.am
+++ /dev/null
@@ -1,13 +0,0 @@
-
-filtersdir = $(datadir)/inkscape/filters
-
-filters_DATA =  \
-	README \
-	filters.svg \
-	filters.svg.h
-
-filters.svg.h: filters.svg i18n.py
-	$(srcdir)/i18n.py $(srcdir)/filters.svg > $(srcdir)/filters.svg.h
-
-EXTRA_DIST = $(filters_DATA) \
-             i18n.py
diff --git a/share/fonts/Makefile.am b/share/fonts/Makefile.am
deleted file mode 100644
index 30a2f6997..000000000
--- a/share/fonts/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-
-fontsdir = $(datadir)/inkscape/fonts
-
-fonts_DATA = \
-	README
-
-EXTRA_DIST = $(fonts_DATA)
diff --git a/share/gradients/Makefile.am b/share/gradients/Makefile.am
deleted file mode 100644
index 9eadc5e57..000000000
--- a/share/gradients/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-
-gradientsdir = $(datadir)/inkscape/gradients
-
-gradients_DATA = \
-	README
-
-EXTRA_DIST = $(gradients_DATA)
diff --git a/share/icons/Makefile.am b/share/icons/Makefile.am
deleted file mode 100644
index 5830f1254..000000000
--- a/share/icons/Makefile.am
+++ /dev/null
@@ -1,58 +0,0 @@
-SUBDIRS = application
-
-iconsdir = $(datadir)/inkscape/icons
-
-pixmaps = \
-	too-much-ink-icon.png \
-	too-much-ink-icon.svg \
-	out-of-gamut-icon.png \
-	out-of-gamut-icon.svg \
-	color-management-icon.png \
-	remove-color.png \
-	remove-color.svg \
-    ticotico.jpg \
-	feBlend-icon.png \
-    feBlend-icon.svg \
-	feColorMatrix-icon.png \
-    feColorMatrix-icon.svg \
-	feComposite-icon.png \
-    feComposite-icon.svg \
-	feConvolveMatrix-icon.png \
-    feConvolveMatrix-icon.svg \
-	feDiffuseLighting-icon.png \
-    feDiffuseLighting-icon.svg \
-	feDisplacementMap-icon.png \
-    feDisplacementMap-icon.svg \
-	feFlood-icon.png \
-    feFlood-icon.svg \
-	feGaussianBlur-icon.png \
-    feGaussianBlur-icon.svg \
-    feImage-icon.png \
-    feImage-icon.svg \
-	feMerge-icon.png \
-    feMerge-icon.svg \
-	feMorphology-icon.png \
-    feMorphology-icon.svg \
-	feOffset-icon.png \
-    feOffset-icon.svg \
-	feSpecularLighting-icon.png \
-    feSpecularLighting-icon.svg \
-	feTurbulence-icon.png \
-    feTurbulence-icon.svg \
-	OCAL.png
-
-icons_DATA = \
-	$(pixmaps) \
-	\
-	icons.svg \
-	tango_icons.svg \
-	symbolic_icons.svg \
-	\
-	inkscape.file.svg \
-	inkscape.file.png \
-	README
-
-EXTRA_DIST = \
-	$(icons_DATA) \
-	hicolor/index.theme
-
diff --git a/share/icons/application/16x16/Makefile.am b/share/icons/application/16x16/Makefile.am
deleted file mode 100644
index a87c2cbfa..000000000
--- a/share/icons/application/16x16/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-icondir = $(datadir)/icons/hicolor/16x16/apps
-icon_DATA = inkscape.png
-
-EXTRA_DIST = $(icon_DATA)
-
diff --git a/share/icons/application/22x22/Makefile.am b/share/icons/application/22x22/Makefile.am
deleted file mode 100644
index 8beeed331..000000000
--- a/share/icons/application/22x22/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-icondir = $(datadir)/icons/hicolor/22x22/apps
-icon_DATA = inkscape.png
-
-EXTRA_DIST = $(icon_DATA)
-
diff --git a/share/icons/application/24x24/Makefile.am b/share/icons/application/24x24/Makefile.am
deleted file mode 100644
index 8fc9b59aa..000000000
--- a/share/icons/application/24x24/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-icondir = $(datadir)/icons/hicolor/24x24/apps
-icon_DATA = inkscape.png
-
-EXTRA_DIST = $(icon_DATA)
-
diff --git a/share/icons/application/256x256/Makefile.am b/share/icons/application/256x256/Makefile.am
deleted file mode 100644
index 34969a4a9..000000000
--- a/share/icons/application/256x256/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-icondir = $(datadir)/icons/hicolor/256x256/apps
-icon_DATA = inkscape.png
-
-EXTRA_DIST = $(icon_DATA)
-
diff --git a/share/icons/application/32x32/Makefile.am b/share/icons/application/32x32/Makefile.am
deleted file mode 100644
index cdccebd02..000000000
--- a/share/icons/application/32x32/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-icondir = $(datadir)/icons/hicolor/32x32/apps
-icon_DATA = inkscape.png
-
-EXTRA_DIST = $(icon_DATA)
-
diff --git a/share/icons/application/48x48/Makefile.am b/share/icons/application/48x48/Makefile.am
deleted file mode 100644
index ffa5c1a55..000000000
--- a/share/icons/application/48x48/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-icondir = $(datadir)/icons/hicolor/48x48/apps
-icon_DATA = inkscape.png
-
-EXTRA_DIST = $(icon_DATA)
-
diff --git a/share/icons/application/Makefile.am b/share/icons/application/Makefile.am
deleted file mode 100644
index 0e9bb7d7d..000000000
--- a/share/icons/application/Makefile.am
+++ /dev/null
@@ -1,15 +0,0 @@
-SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256
-
-gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
-
-install-data-hook: update-icon-cache
-uninstall-hook: update-icon-cache
-
-update-icon-cache:
-	@-if test -z "$(DESTDIR)"; then \
-	echo "Updating Gtk icon cache."; \
-	$(gtk_update_icon_cache); \
-	else \
-	echo "*** Icon cache not updated. After (un)install, run this:"; \
-	echo "*** $(gtk_update_icon_cache)"; \
-	fi 
diff --git a/share/keys/Makefile.am b/share/keys/Makefile.am
deleted file mode 100644
index 98b720c2b..000000000
--- a/share/keys/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-
-keysdir = $(datadir)/inkscape/keys
-
-keys_DATA = \
-	default.xml \
-	inkscape.xml \
-	xara.xml \
-	macromedia-freehand-mx.xml \
-	adobe-illustrator-cs2.xml \
-	right-handed-illustration.xml \
-	corel-draw-x4.xml \
-	corel-draw-x8.xml \
-	zoner-draw.xml \
-	acd-canvas.xml
-
-EXTRA_DIST = $(keys_DATA)
-
diff --git a/share/markers/Makefile.am b/share/markers/Makefile.am
deleted file mode 100644
index 5db048146..000000000
--- a/share/markers/Makefile.am
+++ /dev/null
@@ -1,9 +0,0 @@
-
-markersdir = $(datadir)/inkscape/markers
-
-markers_DATA = \
-	markers.svg
-
-
-EXTRA_DIST = $(markers_DATA)
-
diff --git a/share/palettes/Makefile.am b/share/palettes/Makefile.am
deleted file mode 100644
index b25b35a06..000000000
--- a/share/palettes/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-
-palettesdir = $(datadir)/inkscape/palettes
-
-palettes_DATA = \
-    README \
-    Android-icon-palette.gpl \
-    Blues.gpl \
-    echo-palette.gpl \
-    Gold.gpl \
-    Greens.gpl \
-    Gray.gpl \
-    Hilite.gpl \
-    inkscape.gpl \
-    LaTeX-Beamer.gpl \
-    Khaki.gpl \
-    MATLAB-Jet-72.gpl \
-    Reds.gpl \
-    Royal.gpl \
-    svg.gpl \
-    Tango-Palette.gpl \
-    Topographic.gpl \
-    Ubuntu.gpl \
-    webhex.gpl \
-    websafe22.gpl \
-    windowsXP.gpl \
-    palettes.h
-
-palettes_i18n = \
-    inkscape.gpl \
-    svg.gpl \
-    Tango-Palette.gpl
-
-palettes.h: i18n.py $(palettes_i18n)
-	$(srcdir)/i18n.py $(foreach i,$(palettes_i18n),$(srcdir)/$(i)) > $(srcdir)/palettes.h
-
-EXTRA_DIST = $(palettes_DATA) \
-             i18n.py
-             
diff --git a/share/patterns/Makefile.am b/share/patterns/Makefile.am
deleted file mode 100644
index 8a0f02ba8..000000000
--- a/share/patterns/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-
-patternsdir = $(datadir)/inkscape/patterns
-
-patterns_DATA = \
-	README \
-	patterns.svg \
-	patterns.svg.h
-
-patterns.svg.h: patterns.svg i18n.py
-	$(srcdir)/i18n.py $(srcdir)/patterns.svg > $(srcdir)/patterns.svg.h
-
-EXTRA_DIST = $(patterns_DATA) i18n.py
diff --git a/share/screens/Makefile.am b/share/screens/Makefile.am
deleted file mode 100644
index f18982221..000000000
--- a/share/screens/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-
-screensdir = $(datadir)/inkscape/screens
-
-screens_DATA = \
-	about.svg
-
-EXTRA_DIST = $(screens_DATA)
-
diff --git a/share/symbols/Makefile.am b/share/symbols/Makefile.am
deleted file mode 100644
index a7d21d2a8..000000000
--- a/share/symbols/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-
-symbolsdir = $(datadir)/inkscape/symbols
-
-# Adding srcdir allows out-of-src builds to work
-symbols_DATA = \
-    README \
-    $(wildcard $(srcdir)/*.svg) \
-    symbols.h
-
-symbols_i18n = $(wildcard $(srcdir)/*.svg)
-
-symbols.h: i18n.py $(symbols_i18n)
-	$(srcdir)/i18n.py $(symbols_i18n) > $(srcdir)/symbols.h
-
-EXTRA_DIST = $(symbols_DATA) \
-             i18n.py
-
diff --git a/share/templates/Makefile.am b/share/templates/Makefile.am
deleted file mode 100644
index 9bd6a0ddc..000000000
--- a/share/templates/Makefile.am
+++ /dev/null
@@ -1,67 +0,0 @@
-
-templatesdir = $(datadir)/inkscape/templates
-
-templates_DATA = \
-	README \
-	CD_label_120x120.svg \
-	default.svg \
-	default.be.svg \
-	default.ca.svg \
-	default.cs.svg \
-	default.de.svg \
-	default.en_US.svg \
-	default.eo.svg \
-	default.eu.svg \
-	default.es.svg \
-	default.fi.svg \
-	default.fr.svg \
-	default.hu.svg \
-	default.is.svg \
-	default.it.svg \
-	default.ja.svg \
-	default.lt.svg \
-	default.nl.svg \
-	default.pl.svg \
-	default.pt_BR.svg \
-	default.sk.svg \
-	default_pt.svg \
-	default_px.svg \
-	no_layers.svg \
-	LaTeX_Beamer.svg \
-	Typography_Canvas.svg \
-	templates.h
-
-templates_i18n = \
-	CD_label_120x120.svg \
-	default.svg \
-	default.be.svg \
-	default.ca.svg \
-	default.cs.svg \
-	default.de.svg \
-	default.en_US.svg \
-	default.eo.svg \
-	default.eu.svg \
-	default.es.svg \
-	default.fi.svg \
-	default.fr.svg \
-	default.hu.svg \
-	default.is.svg \
-	default.it.svg \
-	default.ja.svg \
-	default.lt.svg \
-	default.nl.svg \
-	default.pl.svg \
-	default.pt_BR.svg \
-	default.sk.svg \
-	default_pt.svg \
-	default_px.svg \
-	no_layers.svg \
-	LaTeX_Beamer.svg \
-	Typography_Canvas.svg
-
-templates.h: i18n.py $(templates_i18n)
-	$(srcdir)/i18n.py $(foreach i,$(templates_i18n),$(srcdir)/$(i)) > $(srcdir)/templates.h
-
-EXTRA_DIST = $(templates_DATA) \
-			 i18n.py
-			 
diff --git a/share/tutorials/Makefile.am b/share/tutorials/Makefile.am
deleted file mode 100644
index d625826cb..000000000
--- a/share/tutorials/Makefile.am
+++ /dev/null
@@ -1,214 +0,0 @@
-
-tutorialdir = $(datadir)/inkscape/tutorials
-
-tutorial_DATA = \
-    README \
-    edge3d.svg \
-    gpl-2.svg \
-    making_markers.svg \
-    oldguitar.jpg \
-    potrace-be.png \
-    potrace-ca.png \
-    potrace-de.png \
-    potrace-el.png \
-    potrace-en.png \
-    potrace-es.png \
-    potrace-eu.png \
-    potrace-fr.png \
-    potrace-gl.png \
-    potrace-hu.png \
-    potrace-id.png \
-    potrace-ja.png \
-    potrace-nl.png \
-    potrace.png \
-    potrace-pl.png \
-    potrace-pt_BR.png \
-    potrace-ru.png \
-    potrace-sk.png \
-    potrace-sl.png \
-    potrace-vi.png \
-    potrace-zh_CN.png \
-    potrace-zh_TW.png \
-    tutorial-advanced.svg \
-    tutorial-advanced.be.svg \
-    tutorial-advanced.ca.svg \
-    tutorial-advanced.cs.svg \
-    tutorial-advanced.de.svg \
-    tutorial-advanced.el.svg \
-    tutorial-advanced.es.svg \
-    tutorial-advanced.eu.svg \
-    tutorial-advanced.fa.svg \
-    tutorial-advanced.fr.svg \
-    tutorial-advanced.hu.svg \
-    tutorial-advanced.id.svg \
-    tutorial-advanced.it.svg \
-    tutorial-advanced.ja.svg \
-    tutorial-advanced.nl.svg \
-    tutorial-advanced.pl.svg \
-    tutorial-advanced.pt_BR.svg \
-    tutorial-advanced.ru.svg \
-    tutorial-advanced.sk.svg \
-    tutorial-advanced.sl.svg \
-    tutorial-advanced.vi.svg \
-    tutorial-advanced.zh_CN.svg \
-    tutorial-advanced.zh_TW.svg \
-    tutorial-basic.svg \
-    tutorial-basic.be.svg \
-    tutorial-basic.bg.svg \
-    tutorial-basic.ca.svg \
-    tutorial-basic.cs.svg \
-    tutorial-basic.da.svg \
-    tutorial-basic.de.svg \
-    tutorial-basic.el.svg \
-    tutorial-basic.eo.svg \
-    tutorial-basic.es.svg \
-    tutorial-basic.eu.svg \
-    tutorial-basic.fa.svg \
-    tutorial-basic.fr.svg \
-    tutorial-basic.gl.svg \
-    tutorial-basic.hu.svg \
-    tutorial-basic.id.svg \
-    tutorial-basic.it.svg \
-    tutorial-basic.ja.svg \
-    tutorial-basic.nl.svg \
-    tutorial-basic.nn.svg \
-    tutorial-basic.pl.svg \
-    tutorial-basic.pt_BR.svg \
-    tutorial-basic.ru.svg \
-    tutorial-basic.sk.svg \
-    tutorial-basic.sl.svg \
-    tutorial-basic.tr.svg \
-    tutorial-basic.vi.svg \
-    tutorial-basic.zh_CN.svg \
-    tutorial-basic.zh_TW.svg \
-    tutorial-calligraphy.svg \
-    tutorial-calligraphy.be.svg \
-    tutorial-calligraphy.ca.svg \
-    tutorial-calligraphy.cs.svg \
-    tutorial-calligraphy.de.svg \
-    tutorial-calligraphy.el.svg \
-    tutorial-calligraphy.es.svg \
-    tutorial-calligraphy.eu.svg \
-    tutorial-calligraphy.fa.svg \
-    tutorial-calligraphy.fr.svg \
-    tutorial-calligraphy.hu.svg \
-    tutorial-calligraphy.id.svg \
-    tutorial-calligraphy.ja.svg \
-    tutorial-calligraphy.nl.svg \
-    tutorial-calligraphy.pl.svg \
-    tutorial-calligraphy.pt_BR.svg \
-    tutorial-calligraphy.ru.svg \
-    tutorial-calligraphy.sk.svg \
-    tutorial-calligraphy.sl.svg \
-    tutorial-calligraphy.vi.svg \
-    tutorial-calligraphy.zh_TW.svg \
-    tutorial-elements.svg \
-    tutorial-elements.be.svg \
-    tutorial-elements.ca.svg \
-    tutorial-elements.de.svg \
-    tutorial-elements.el.svg \
-    tutorial-elements.es.svg \
-    tutorial-elements.eu.svg \
-    tutorial-elements.fa.svg \
-    tutorial-elements.fr.svg \
-    tutorial-elements.hu.svg \
-    tutorial-elements.id.svg \
-    tutorial-elements.ja.svg \
-    tutorial-elements.nl.svg \
-    tutorial-elements.pl.svg \
-    tutorial-elements.pt_BR.svg \
-    tutorial-elements.ru.svg \
-    tutorial-elements.sk.svg \
-    tutorial-elements.sl.svg \
-    tutorial-elements.zh_TW.svg \
-    tutorial-interpolate.svg \
-    tutorial-interpolate.be.svg \
-    tutorial-interpolate.de.svg \
-    tutorial-interpolate.el.svg \
-    tutorial-interpolate.fr.svg \
-    tutorial-interpolate.hu.svg \
-    tutorial-interpolate.ja.svg \
-    tutorial-interpolate.nl.svg \
-    tutorial-interpolate.pl.svg \
-    tutorial-interpolate.pt_BR.svg \
-    tutorial-interpolate.ru.svg \
-    tutorial-interpolate.sk.svg \
-    tutorial-interpolate.sl.svg \
-    tutorial-interpolate.vi.svg \
-    tutorial-interpolate.zh_TW.svg \
-    tutorial-shapes.svg \
-    tutorial-shapes.be.svg \
-    tutorial-shapes.ca.svg \
-    tutorial-shapes.cs.svg \
-    tutorial-shapes.de.svg \
-    tutorial-shapes.el.svg \
-    tutorial-shapes.es.svg \
-    tutorial-shapes.eu.svg \
-    tutorial-shapes.fa.svg \
-    tutorial-shapes.fr.svg \
-    tutorial-shapes.hu.svg \
-    tutorial-shapes.id.svg \
-    tutorial-shapes.it.svg \
-    tutorial-shapes.ja.svg \
-    tutorial-shapes.nl.svg \
-    tutorial-shapes.pl.svg \
-    tutorial-shapes.pt_BR.svg \
-    tutorial-shapes.ru.svg \
-    tutorial-shapes.sk.svg \
-    tutorial-shapes.sl.svg \
-    tutorial-shapes.vi.svg \
-    tutorial-shapes.zh_CN.svg \
-    tutorial-shapes.zh_TW.svg \
-    tutorial-tips.svg \
-    tutorial-tips.be.svg \
-    tutorial-tips.ca.svg \
-    tutorial-tips.de.svg \
-    tutorial-tips.el.svg \
-    tutorial-tips.es.svg \
-    tutorial-tips.eu.svg \
-    tutorial-tips.fa.svg \
-    tutorial-tips.fr.svg \
-    tutorial-shapes.gl.svg \
-    tutorial-tips.hu.svg \
-    tutorial-tips.ja.svg \
-    tutorial-tips.id.svg \
-    tutorial-tips.it.svg \
-    tutorial-tips.nl.svg \
-    tutorial-tips.pl.svg \
-    tutorial-tips.pt_BR.svg \
-    tutorial-tips.ru.svg \
-    tutorial-tips.sk.svg \
-    tutorial-tips.sl.svg \
-    tutorial-tips.vi.svg \
-    tutorial-tips.zh_TW.svg \
-    tutorial-tracing.svg \
-    tutorial-tracing.be.svg \
-    tutorial-tracing.ca.svg \
-    tutorial-tracing.de.svg \
-    tutorial-tracing.el.svg \
-    tutorial-tracing.es.svg \
-    tutorial-tracing.eu.svg \
-    tutorial-tracing.fa.svg \
-    tutorial-tracing.fr.svg \
-    tutorial-tracing.gl.svg \
-    tutorial-tracing.hu.svg \
-    tutorial-tracing.id.svg \
-    tutorial-tracing.ja.svg \
-    tutorial-tracing.nl.svg \
-    tutorial-tracing.pl.svg \
-    tutorial-tracing.pt_BR.svg \
-    tutorial-tracing.ru.svg \
-    tutorial-tracing.sk.svg \
-    tutorial-tracing.sl.svg \
-    tutorial-tracing.vi.svg \
-    tutorial-tracing.zh_TW.svg \
-    tutorial-tracing-pixelart.svg \
-    tutorial-tracing-pixelart.el.svg \
-    tutorial-tracing-pixelart.fr.svg \
-    tutorial-tracing-pixelart.nl.svg \
-    tutorial-tracing-pixelart.zh_TW.svg \
-    tux.png
-
-
-EXTRA_DIST = $(tutorial_DATA)
-
diff --git a/share/ui/Makefile.am b/share/ui/Makefile.am
deleted file mode 100644
index 1e55ea58f..000000000
--- a/share/ui/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-
-uidir = $(datadir)/inkscape/ui
-
-ui_DATA =  \
-    keybindings.rc \
-    menus-bars.xml \
-    style.css \
-    toolbox.xml \
-    units.xml
-
-EXTRA_DIST = $(ui_DATA)
diff --git a/src/2geom/Makefile_insert b/src/2geom/Makefile_insert
deleted file mode 100644
index 4d41de297..000000000
--- a/src/2geom/Makefile_insert
+++ /dev/null
@@ -1,131 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-2geom/all: 2geom/lib2geom.a
-
-2geom/clean:
-	rm -f 2geom/lib2geom.a $(2geom_lib2geom_a_OBJECTS)
-
-2geom_lib2geom_a_SOURCES = \
-	2geom/2geom.h \
-	2geom/affine.cpp \
-	2geom/affine.h \
-	2geom/angle.h \
-	2geom/basic-intersection.cpp \
-	2geom/basic-intersection.h \
-	2geom/bezier-clipping.cpp \
-	2geom/bezier-curve.cpp \
-	2geom/bezier-curve.h \
-	2geom/bezier.cpp \
-	2geom/bezier.h \
-	2geom/bezier-to-sbasis.h \
-	2geom/bezier-utils.cpp \
-	2geom/bezier-utils.h \
-	2geom/cairo-path-sink.cpp \
-	2geom/cairo-path-sink.h \
-	2geom/choose.h \
-	2geom/circle.cpp \
-	2geom/circle.h \
-	2geom/circulator.h \
-	2geom/CMakeLists.txt \
-	2geom/concepts.h \
-	2geom/conicsec.cpp \
-	2geom/conicsec.h \
-	2geom/conic_section_clipper_cr.h \
-	2geom/conic_section_clipper.h \
-	2geom/conic_section_clipper_impl.cpp \
-	2geom/conic_section_clipper_impl.h \
-	2geom/convex-hull.cpp \
-	2geom/convex-hull.h \
-	2geom/coord.cpp \
-	2geom/coord.h \
-	2geom/crossing.cpp \
-	2geom/crossing.h \
-	2geom/curve.cpp \
-	2geom/curve.h \
-	2geom/curves.h \
-	2geom/d2.h \
-	2geom/d2-sbasis.cpp \
-	2geom/ellipse.cpp \
-	2geom/ellipse.h \
-	2geom/elliptical-arc.cpp \
-	2geom/elliptical-arc.h \
-	2geom/elliptical-arc-from-sbasis.cpp \
-	2geom/exception.h \
-	2geom/forward.h \
-	2geom/generic-interval.h \
-	2geom/generic-rect.h \
-	2geom/geom.cpp \
-	2geom/geom.h \
-	2geom/intersection.h \
-	2geom/intersection-graph.cpp \
-	2geom/intersection-graph.h \
-	2geom/interval.h \
-	2geom/int-interval.h \
-	2geom/int-point.h \
-	2geom/int-rect.h \
-	2geom/linear.h \
-	2geom/line.cpp \
-	2geom/line.h \
-	2geom/math-utils.h \
-	2geom/nearest-time.cpp \
-	2geom/nearest-time.h \
-	2geom/ord.h \
-	2geom/path.cpp \
-	2geom/path.h \
-	2geom/path-intersection.cpp \
-	2geom/path-intersection.h \
-	2geom/path-sink.cpp \
-	2geom/path-sink.h \
-	2geom/pathvector.cpp \
-	2geom/pathvector.h \
-	2geom/piecewise.cpp \
-	2geom/piecewise.h \
-	2geom/point.cpp \
-	2geom/point.h \
-	2geom/polynomial.cpp \
-	2geom/polynomial.h \
-	2geom/ray.h \
-	2geom/rect.cpp \
-	2geom/rect.h \
-	2geom/recursive-bezier-intersection.cpp \
-	2geom/sbasis-2d.cpp \
-	2geom/sbasis-2d.h \
-	2geom/sbasis.cpp \
-	2geom/sbasis-curve.h \
-	2geom/sbasis-geometric.cpp \
-	2geom/sbasis-geometric.h \
-	2geom/sbasis.h \
-	2geom/sbasis-math.cpp \
-	2geom/sbasis-math.h \
-	2geom/sbasis-poly.cpp \
-	2geom/sbasis-poly.h \
-	2geom/sbasis-roots.cpp \
-	2geom/sbasis-to-bezier.cpp \
-	2geom/sbasis-to-bezier.h \
-	2geom/solve-bezier.cpp \
-	2geom/solve-bezier-one-d.cpp \
-	2geom/solve-bezier-parametric.cpp \
-	2geom/solver.h \
-	2geom/svg-path-parser.cpp \
-	2geom/svg-path-parser.h \
-	2geom/svg-path-writer.cpp \
-	2geom/svg-path-writer.h \
-	2geom/sweep-bounds.cpp \
-	2geom/sweep-bounds.h \
-	2geom/sweeper.h \
-	2geom/toposweep.cpp \
-	2geom/toposweep.h \
-	2geom/transforms.cpp \
-	2geom/transforms.h \
-	2geom/utils.cpp \
-	2geom/utils.h \
-	2geom/numeric/fitting-model.h \
-	2geom/numeric/fitting-tool.h \
-	2geom/numeric/linear_system.h \
-	2geom/numeric/matrix.cpp \
-	2geom/numeric/matrix.h \
-	2geom/numeric/symmetric-matrix-fs.h \
-	2geom/numeric/symmetric-matrix-fs-operation.h \
-	2geom/numeric/symmetric-matrix-fs-trace.h \
-	2geom/numeric/vector.h
-
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index 9076aaac3..000000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,278 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# ################################################
-#  G L O B A L
-# ################################################
-
-# Should work in either automake1.7 or 1.8, but 1.6 doesn't
-# handle foo/libfoo_a_CPPFLAGS properly (if at all).
-# Update: We now avoid setting foo/libfoo_a_CPPFLAGS,
-# so perhaps 1.6 will work.
-AUTOMAKE_OPTIONS = 1.7 subdir-objects
-
-# Executables compiled by "make" and installed by "make install"
-bin_PROGRAMS = inkscape inkview
-
-# Libraries which should be compiled by "make" but not installed.
-# Use this only for libraries that are really standalone, rather than for
-# source tree subdirectories.
-noinst_LIBRARIES =	\
-	libcroco/libcroco.a		\
-	libavoid/libavoid.a		\
-	libuemf/libuemf.a   		\
-	libcola/libcola.a		\
-        inkgc/libinkgc.a		\
-	libvpsc/libvpsc.a		\
-	livarot/libvarot.a		\
-	2geom/lib2geom.a		\
-	libdepixelize/libdepixelize.a	\
-	util/libutil.a			\
-	libinkversion.a
-#       libinkscape.a
-
-all_libs =			\
-	$(noinst_LIBRARIES)	\
-	$(INKSCAPE_LIBS)	\
-	$(INKSCAPE_CXX_DEPS_LIBS) \
-	$(EXIF_LIBS)            \
-	$(GNOME_VFS_LIBS)	\
-	$(XFT_LIBS)		\
-	$(FREETYPE_LIBS)	\
-	$(kdeldadd)		\
-	$(win32ldflags)		\
-	$(LIBWPG_LIBS)		\
-	$(LIBVISIO_LIBS)	\
-	$(LIBCDR_LIBS)		\
-	$(DBUS_LIBS)		\
-	$(IMAGEMAGICK_LIBS)     \
-	$(X11_LIBS)
-
-# Add sources common for Inkscape and Inkview to this variable.
-ink_common_sources =
-# Add Inkscape-only sources here.
-inkscape_SOURCES =
-# Add Inkview-only sources here.
-inkview_SOURCES =
-# Add sources that are built from meta files
-BUILT_SOURCES =
-# Extra files to distribute
-EXTRA_DIST =
-
-# C++-specific flags defined here
-AM_CXXFLAGS = \
-	$(INKSCAPE_CXX_DEPS_CFLAGS)
-
-AM_CPPFLAGS =	\
-	-I$(top_srcdir)/cxxtest \
-	-I$(builddir)/extension/dbus   \
-	$(EXIF_CFLAGS) \
-	$(FREETYPE_CFLAGS)	\
-	$(GNOME_PRINT_CFLAGS)	\
-	$(GNOME_VFS_CFLAGS)	\
-	$(IMAGEMAGICK_CFLAGS) \
-	$(LIBWPG_CFLAGS) \
-	$(LIBVISIO_CFLAGS) \
-	$(LIBCDR_CFLAGS) \
-	$(DBUS_CFLAGS) \
-	$(XFT_CFLAGS)	\
-	$(LCMS_CFLAGS)	\
-	$(POPPLER_CFLAGS)	\
-	$(POPPLER_GLIB_CFLAGS)	\
-	-DPOTRACE=\"potrace\"	\
-	$(INKSCAPE_CFLAGS) \
-	$(WIN32_CFLAGS) \
-	$(X11_CFLAGS)
-
-CXXTEST_TEMPLATE = $(srcdir)/cxxtest-template.tpl
-CXXTESTGENFLAGS = --root --have-eh --template=$(CXXTEST_TEMPLATE)
-CXXTESTGEN = $(top_srcdir)/cxxtest/cxxtestgen.pl $(CXXTESTGENFLAGS)
-# Add test cases to this variable
-CXXTEST_TESTSUITES =
-
-# ################################################
-#
-#  E X T R A 
-#
-# ################################################
-
-if PLATFORM_WIN32
-win32_sources = winmain.cpp registrytool.cpp registrytool.h
-win32ldflags = -lcomdlg32 -lmscms
-mwindows = -mwindows
-endif 
-
-# Include all partial makefiles from subdirectories
-include Makefile_insert
-include display/Makefile_insert
-include extension/Makefile_insert
-include extension/dbus/Makefile_insert
-include extension/implementation/Makefile_insert
-include extension/internal/Makefile_insert
-include filters/Makefile_insert
-include helper/Makefile_insert
-include io/Makefile_insert
-include libcroco/Makefile_insert
-include inkgc/Makefile_insert
-include libnrtype/Makefile_insert
-include libavoid/Makefile_insert
-include livarot/Makefile_insert
-include live_effects/Makefile_insert
-include live_effects/parameter/Makefile_insert
-include libvpsc/Makefile_insert
-include libcola/Makefile_insert
-include libuemf/Makefile_insert
-include svg/Makefile_insert
-include widgets/Makefile_insert
-include debug/Makefile_insert
-include xml/Makefile_insert
-include ui/Makefile_insert
-include ui/cache/Makefile_insert
-include ui/dialog/Makefile_insert
-include ui/tool/Makefile_insert
-include ui/tools/Makefile_insert
-include ui/view/Makefile_insert
-include ui/widget/Makefile_insert
-include util/Makefile_insert
-include trace/Makefile_insert
-include 2geom/Makefile_insert
-include libdepixelize/Makefile_insert
-
-# Extra files not mentioned as sources to include in the source tarball
-EXTRA_DIST +=	\
-	2geom/makefile.in	\
-	debug/makefile.in	\
-	display/makefile.in	\
-	extension/implementation/makefile.in	\
-	extension/internal/makefile.in	\
-	extension/makefile.in	\
-	filters/makefile.in \
-	helper/makefile.in	\
-	io/makefile.in	\
-	libavoid/makefile.in	\
-	libcroco/makefile.in	\
-	libnrtype/makefile.in	\
-	libuemf/makefile.in \
-	livarot/makefile.in	\
-	live_effects/makefile.in	\
-	live_effects/parameter/makefile.in	\
-	svg/makefile.in		\
-	trace/makefile.in	\
-	ui/cache/makefile.in	\
-	ui/dialog/makefile.in	\
-	ui/makefile.in		\
-	ui/view/makefile.in	\
-	ui/widget/makefile.in	\
-	util/makefile.in	\
-	util/makefile.in	\
-	widgets/makefile.in	\
-	xml/makefile.in		\
-	\
-	$(top_srcdir)/Doxyfile \
-	extension/internal/emf-inout.cpp  \
-	extension/internal/emf-inout.h    \
-	extension/internal/emf-print.cpp  \
-	extension/internal/emf-print.h    \
-	helper/sp-marshal.list	\
-	io/crystalegg.xml	\
-	io/doc2html.xsl 	\
-	show-preview.bmp \
-	winconsole.cpp \
-	libdepixelize/makefile.in	\
-	$(CXXTEST_TEMPLATE)
-
-# Extra files to remove when doing "make distclean"
-DISTCLEANFILES =	\
-	helper/sp-marshal.cpp	\
-	helper/sp-marshal.h	\
-	inkscape-version.cpp
-
-# ################################################
-#  B I N A R I E S
-# ################################################
-
-# this should speed up the build
-#libinkscape_a_SOURCES = $(ink_common_sources)
-
-inkscape_SOURCES += main.cpp $(ink_common_sources) $(win32_sources)
-inkscape_LDADD = $(all_libs)
-inkscape_LDFLAGS = $(kdeldflags) $(mwindows)
-
-inkview_SOURCES += inkview.cpp $(ink_common_sources) $(win32_sources)
-inkview_LDADD = $(all_libs)
-inkview_LDFLAGS = $(mwindows)
-
-# ################################################
-#  VERSION REPORTING
-# ################################################
-
-libinkversion_a_SOURCES = inkscape-version.cpp inkscape-version.h
-
-if USE_BZR_VERSION
-inkscape_version_deps = $(top_srcdir)/.bzr/branch/last-revision
-endif
-
-# If this is an BZR snapshot build, regenerate this file every time
-# someone updates the BZR working directory.
-inkscape-version.cpp: $(inkscape_version_deps)
-	VER_PREFIX="$(VERSION)";\
-	VER_BZRREV=" r`bzr revno --tree $(top_srcdir)`"; \
-	if test ! -z "`bzr status -S -V $(srcdir)`"; then \
-	    VER_CUSTOM=" custom"; \
-	fi; \
-	VERSION="$$VER_PREFIX$$VER_BZRREV$$VER_CUSTOM"; \
-	echo "namespace Inkscape { " \
-	     "char const *version_string = \"$$VERSION\"; " \
-	     "}" > inkscape-version.new.cpp; \
-	if cmp -s inkscape-version.new.cpp inkscape-version.cpp; then \
-	     rm inkscape-version.new.cpp; \
-	else \
-	     mv inkscape-version.new.cpp inkscape-version.cpp; \
-	fi; \
-	echo $$VERSION
-
-# #################################
-# ## TESTING STUFF (make check) ###
-# #################################
-
-# List of all programs that should be built before testing. Note that this is
-# different from TESTS, because some tests can be scripts that don't
-# need to be built. There should be one test program per directory.
-# automake adds $(EXEEXT) to check_PROGRAMS items but not to TESTS items:
-# TESTS items can be scripts etc.
-check_PROGRAMS = cxxtests
-
-# streamtest is unfinished and can't handle the relocations done during
-# "make distcheck".
-
-# List of all tests to be run.
-TESTS = $(check_PROGRAMS)
-check-local:
-	$(top_srcdir)/share/extensions/test/run-all-extension-tests
-
-# FIXME: Currently, a number of cxxtest tests fail.  These should be fixed and
-#        the XFAIL_TESTS build target should be removed.
-#        See the following Launchpad bugs:
-#
-#          LP #1208013 
-#          LP #1208005 
-#          LP #1207502 
-
-XFAIL_TESTS = $(check_PROGRAMS)
-
-# including the testsuites here ensures that they get distributed
-cxxtests_SOURCES = cxxtests.cpp $(CXXTEST_TESTSUITES) $(ink_common_sources) $(win32_sources)
-cxxtests_LDADD = $(all_libs)
-
-cxxtests.cpp: $(CXXTEST_TESTSUITES) $(CXXTEST_TEMPLATE)
-	$(CXXTESTGEN) -o cxxtests.cpp $(CXXTEST_TESTSUITES)
-
-# ################################################
-#  D I S T
-# ################################################
-
-dist-hook:
-	mkdir $(distdir)/pixmaps
-	cp $(srcdir)/pixmaps/*xpm $(distdir)/pixmaps
-
-distclean-local:
-	rm -f cxxtests.xml cxxtests.log
diff --git a/src/Makefile_insert b/src/Makefile_insert
deleted file mode 100644
index 55fde4dd2..000000000
--- a/src/Makefile_insert
+++ /dev/null
@@ -1,251 +0,0 @@
-## Makefile.am fragment, included by src/Makefile.am.
-
-ink_common_sources +=	\
-	util/find-last-if.h					\
-	util/longest-common-suffix.h				\
-	remove-last.h					\
-	attributes.cpp attributes.h					\
-	attribute-rel-svg.cpp attribute-rel-svg.h			\
-	attribute-rel-css.cpp attribute-rel-css.h			\
-	attribute-rel-util.cpp attribute-rel-util.h			\
-	attribute-sort-util.cpp attribute-sort-util.h			\
-	axis-manip.cpp axis-manip.h					\
-	bad-uri-exception.h						\
-	box3d.cpp box3d.h						\
-	box3d-side.cpp box3d-side.h					\
-	brokenimage.xpm							\
-	cms-color-types.h						\
-	cms-system.h							\
-	color.cpp color.h						\
-	color-profile.cpp color-profile.h				\
-	color-profile-cms-fns.h						\
-	color-rgba.h							\
-	colorspace.h							\
-	composite-undo-stack-observer.cpp				\
-	composite-undo-stack-observer.h					\
-	conditions.cpp conditions.h					\
-	conn-avoid-ref.cpp conn-avoid-ref.h				\
-	console-output-undo-observer.h console-output-undo-observer.cpp \
-	context-fns.cpp context-fns.h					\
-	decimal-round.h							\
-	desktop.cpp desktop.h						\
-	desktop-events.cpp desktop-events.h				\
-	desktop-style.cpp desktop-style.h				\
-	device-manager.cpp device-manager.h				\
-	dir-util.cpp dir-util.h						\
-	document.cpp document.h document-private.h			\
-	document-subset.cpp document-subset.h				\
-	document-undo.cpp document-undo.h \
-	ege-color-prof-tracker.cpp ege-color-prof-tracker.h		\
-	enums.h								\
-	event-log.cpp event-log.h event.h				\
-	extract-uri.cpp extract-uri.h					\
-	file.cpp file.h							\
-	fill-or-stroke.h						\
-	filter-chemistry.cpp filter-chemistry.h				\
-	filter-enums.cpp filter-enums.h					\
-	gc-anchored.cpp	gc-anchored.h                                   \
-	gc-finalized.cpp gc-finalized.h                                 \
-	gradient-chemistry.cpp gradient-chemistry.h			\
-	gradient-drag.cpp gradient-drag.h				\
-	graphlayout.cpp graphlayout.h					\
-	guide-snapper.cpp guide-snapper.h				\
-	help.cpp help.h							\
-	helper-fns.h							\
-	helper/pixbuf-ops.cpp						\
-	helper/pixbuf-ops.h						\
-	icon-size.h							\
-	id-clash.cpp id-clash.h						\
-	inkscape.cpp inkscape.h						\
-	isinf.h								\
-	knot.cpp knot.h							\
-	knot-enums.h							\
-	knotholder.cpp knotholder.h					\
-	knot-holder-entity.h knot-holder-entity.cpp			\
-	knot-ptr.h knot-ptr.cpp						\
-	layer-fns.cpp layer-fns.h					\
-	layer-manager.cpp layer-manager.h				\
-  layer-model.cpp layer-model.h         \
-	line-geometry.cpp line-geometry.h				\
-	line-snapper.cpp line-snapper.h					\
-	macros.h							\
-	main-cmdlineact.cpp main-cmdlineact.h				\
-	media.cpp media.h						\
-	menus-skeleton.h						\
-	message-context.cpp message-context.h				\
-	message.h							\
-	message-stack.cpp message-stack.h				\
-	mod360.cpp mod360.h						\
-	object-hierarchy.cpp object-hierarchy.h				\
-	object-snapper.cpp object-snapper.h				\
-	path-chemistry.cpp path-chemistry.h				\
-	path-prefix.h							\
-	persp3d.cpp persp3d.h						\
-	persp3d-reference.cpp persp3d-reference.h			\
-	perspective-line.cpp perspective-line.h				\
-	preferences.cpp preferences.h					\
-	preferences-skeleton.h						\
-	prefix.cpp prefix.h						\
-	print.cpp print.h						\
-	profile-manager.cpp profile-manager.h				\
-	proj_pt.cpp proj_pt.h						\
-	pure-transform.cpp pure-transform.h				\
-	removeoverlap.cpp removeoverlap.h				\
-	rdf.cpp rdf.h							\
-	resource-manager.cpp resource-manager.h				\
-	require-config.h						\
-	round.h								\
-	rubberband.cpp rubberband.h					\
-	satisfied-guide-cns.cpp satisfied-guide-cns.h			\
-	selcue.cpp selcue.h						\
-	selection-chemistry.cpp selection-chemistry.h			\
-	selection.cpp selection.h					\
-	selection-describer.cpp selection-describer.h			\
-	seltrans.cpp seltrans.h						\
-	seltrans-handles.cpp seltrans-handles.h				\
-	shortcuts.cpp shortcuts.h					\
-	snap.cpp snap.h							\
-	snap-enums.h snap-candidate.h					\
-	snapped-curve.cpp snapped-curve.h				\
-	snapped-line.cpp snapped-line.h					\
-	snapped-point.cpp snapped-point.h				\
-	snapper.cpp snapper.h						\
-	snap-preferences.cpp snap-preferences.h				\
-	sp-anchor.cpp sp-anchor.h					\
-	sp-clippath.cpp sp-clippath.h					\
-	sp-conn-end.cpp sp-conn-end.h					\
-	sp-conn-end-pair.cpp sp-conn-end-pair.h				\
-	sp-cursor.cpp sp-cursor.h					\
-	sp-defs.cpp sp-defs.h						\
-	sp-desc.cpp sp-desc.h						\
-	sp-ellipse.cpp sp-ellipse.h					\
-	sp-factory.h sp-factory.cpp					\
-	sp-filter.cpp sp-filter.h number-opt-number.h			\
-	sp-filter-primitive.cpp	sp-filter-primitive.h			\
-	sp-filter-reference.cpp	sp-filter-reference.h			\
-	sp-filter-units.h						\
-	sp-flowdiv.h sp-flowdiv.cpp					\
-	sp-flowregion.h sp-flowregion.cpp				\
-	sp-flowtext.h sp-flowtext.cpp					\
-        sp-font.cpp sp-font.h						\
-        sp-font-face.cpp sp-font-face.h					\
-        sp-glyph.cpp sp-glyph.h						\
-        sp-glyph-kerning.cpp sp-glyph-kerning.h				\
-	sp-gradient.cpp sp-gradient.h					\
-	sp-gradient-reference.cpp sp-gradient-reference.h		\
-	sp-gradient-spread.h						\
-	sp-gradient-units.h						\
-	sp-gradient-vector.h						\
-	sp-guide-attachment.h						\
-	sp-guide-constraint.h						\
-	sp-guide.cpp sp-guide.h						\
-	sp-hatch.cpp sp-hatch.h                     \
-	sp-hatch-path.cpp sp-hatch-path.h           \
-	sp-image.cpp sp-image.h						\
-	sp-item.cpp sp-item.h						\
-	sp-item-group.cpp sp-item-group.h				\
-	sp-item-notify-moveto.cpp sp-item-notify-moveto.h		\
-	sp-item-rm-unsatisfied-cns.cpp sp-item-rm-unsatisfied-cns.h	\
-	sp-item-transform.cpp sp-item-transform.h			\
-	sp-item-update-cns.cpp sp-item-update-cns.h			\
-	sp-linear-gradient.cpp sp-linear-gradient.h			\
-	sp-line.cpp sp-line.h						\
-	splivarot.cpp splivarot.h					\
-	sp-lpe-item.cpp sp-lpe-item.h					\
-	sp-marker.cpp sp-marker.h					\
-	sp-marker-loc.h							\
-	sp-mask.cpp sp-mask.h						\
-	sp-metadata.cpp sp-metadata.h					\
-	sp-mesh.cpp sp-mesh.h						\
-	sp-mesh-array.cpp sp-mesh-array.h				\
-	sp-mesh-patch.cpp sp-mesh-patch.h				\
-	sp-mesh-row.cpp sp-mesh-row.h					\
-        sp-missing-glyph.cpp sp-missing-glyph.h \
-	sp-namedview.cpp sp-namedview.h		\
-	sp-object.cpp sp-object.h		\
-	sp-object-group.cpp sp-object-group.h	\
-	sp-offset.cpp sp-offset.h		\
-	sp-paint-server.cpp sp-paint-server.h	\
-	sp-paint-server-reference.h		\
-	sp-path.cpp sp-path.h			\
-	sp-pattern.cpp sp-pattern.h		\
-	sp-polygon.cpp sp-polygon.h		\
-	sp-polyline.cpp sp-polyline.h		\
-	sp-radial-gradient.cpp sp-radial-gradient.h			\
-	sp-rect.cpp sp-rect.h			\
-	sp-root.cpp sp-root.h			\
-	sp-script.cpp sp-script.h		\
-	sp-shape.cpp sp-shape.h			\
-	sp-solid-color.cpp sp-solid-color.h	\
-	sp-spiral.cpp sp-spiral.h		\
-	sp-star.cpp sp-star.h			\
-	sp-stop.cpp sp-stop.h			\
-	sp-string.cpp sp-string.h		\
-	sp-style-elem.cpp sp-style-elem.h	\
-	sp-switch.cpp sp-switch.h		\
-	sp-symbol.cpp sp-symbol.h		\
-	sp-tag.cpp sp-tag.h			\
-	sp-tag-use.cpp sp-tag-use.h		\
-	sp-tag-use-reference.cpp sp-tag-use-reference.h			\
-	sp-text.cpp sp-text.h			\
-	sp-textpath.h				\
-	sp-title.cpp sp-title.h			\
-	sp-tref.cpp sp-tref.h			\
-	sp-tref-reference.cpp sp-tref-reference.h			\
-	sp-tspan.cpp sp-tspan.h			\
-	sp-use.cpp sp-use.h			\
-	sp-use-reference.cpp sp-use-reference.h	\
-	streq.h					\
-	strneq.h				\
-	style.cpp style.h			\
-	style-enums.h				\
-	style-internal.cpp style-internal.h	\
-	svg-profile.h				\
-	svg-view.cpp svg-view.h			\
-	svg-view-widget.cpp svg-view-widget.h	\
-	syseq.h					\
-	text-chemistry.cpp text-chemistry.h	\
-	text-editing.cpp text-editing.h		\
-	text-tag-attributes.h			\
-	transf_mat_3x4.cpp transf_mat_3x4.h	\
-	unclump.cpp unclump.h			\
-	undo-stack-observer.h			\
-	unicoderange.cpp unicoderange.h		\
-	uri.cpp uri.h				\
-	uri-references.cpp uri-references.h	\
-	vanishing-point.cpp vanishing-point.h	\
-	verbs.cpp verbs.h			\
-	version.cpp version.h			\
-	viewbox.cpp viewbox.h
-
-# Additional dependencies
-
-desktop.$(OBJEXT): helper/sp-marshal.h
-document.$(OBJEXT): helper/sp-marshal.h
-inkscape.$(OBJEXT): helper/sp-marshal.h
-knot.$(OBJEXT): helper/sp-marshal.h
-selection.$(OBJEXT): helper/sp-marshal.h
-sp-object.$(OBJEXT): helper/sp-marshal.h
-view.$(OBJEXT): helper/sp-marshal.h
-
-# ######################
-# ### CxxTest stuff ####
-# ######################
-CXXTEST_TESTSUITES +=			\
-	$(srcdir)/MultiPrinter.h	\
-	$(srcdir)/TRPIFormatter.h	\
-	$(srcdir)/PylogFormatter.h	\
-	$(srcdir)/attributes-test.h	\
-	$(srcdir)/color-profile-test.h	\
-	$(srcdir)/dir-util-test.h	\
-	$(srcdir)/extract-uri-test.h	\
-	$(srcdir)/marker-test.h		\
-	$(srcdir)/mod360-test.h		\
-	$(srcdir)/object-test.h         \
-	$(srcdir)/preferences-test.h    \
-	$(srcdir)/round-test.h		\
-	$(srcdir)/sp-gradient-test.h	\
-	$(srcdir)/sp-style-elem-test.h	\
-	$(srcdir)/style-test.h		\
-	$(srcdir)/test-helpers.h	\
-	$(srcdir)/verbs-test.h
diff --git a/src/debug/Makefile_insert b/src/debug/Makefile_insert
deleted file mode 100644
index 47cc2b704..000000000
--- a/src/debug/Makefile_insert
+++ /dev/null
@@ -1,15 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources += \
-	debug/demangle.cpp debug/demangle.h \
-	debug/event.h \
-	debug/event-tracker.h \
-	debug/heap.cpp debug/heap.h \
-	debug/gc-heap.h \
-	debug/logger.cpp debug/logger.h \
-	debug/log-display-config.cpp debug/log-display-config.h \
-	debug/simple-event.h \
-	debug/sysv-heap.cpp debug/sysv-heap.h \
-	debug/gdk-event-latency-tracker.cpp debug/gdk-event-latency-tracker.h \
-        debug/timestamp.cpp debug/timestamp.h
-
diff --git a/src/display/Makefile_insert b/src/display/Makefile_insert
deleted file mode 100644
index 419852f7d..000000000
--- a/src/display/Makefile_insert
+++ /dev/null
@@ -1,125 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-display/canvas-arena.$(OBJEXT): helper/sp-marshal.h
-display/sp-canvas.$(OBJEXT): helper/sp-marshal.h
-
-ink_common_sources += \
-	display/cairo-templates.h	\
-	display/cairo-utils.cpp	\
-	display/cairo-utils.h	\
-	display/canvas-arena.cpp	\
-	display/canvas-arena.h	\
-	display/canvas-axonomgrid.cpp	\
-	display/canvas-axonomgrid.h	\
-	display/canvas-bpath.cpp	\
-	display/canvas-bpath.h	\
-	display/canvas-grid.cpp	\
-	display/canvas-grid.h	\
-	display/canvas-temporary-item.cpp	\
-	display/canvas-temporary-item.h	\
-	display/canvas-temporary-item-list.cpp	\
-	display/canvas-temporary-item-list.h	\
-	display/canvas-text.cpp	\
-	display/canvas-text.h	\
-	display/curve.cpp	\
-	display/curve.h	\
-	display/drawing.cpp \
-	display/drawing.h \
-	display/drawing-context.cpp \
-	display/drawing-context.h \
-	display/drawing-group.cpp \
-	display/drawing-group.h \
-	display/drawing-image.cpp \
-	display/drawing-image.h \
-	display/drawing-item.cpp \
-	display/drawing-item.h \
-	display/drawing-pattern.cpp \
-	display/drawing-pattern.h \
-	display/drawing-shape.cpp \
-	display/drawing-shape.h \
-	display/drawing-surface.cpp \
-	display/drawing-surface.h \
-	display/drawing-text.cpp \
-	display/drawing-text.h \
-	display/gnome-canvas-acetate.cpp	\
-	display/gnome-canvas-acetate.h	\
-	display/grayscale.cpp	\
-	display/grayscale.h	\
-	display/guideline.cpp	\
-	display/guideline.h	\
-	display/nr-3dutils.cpp \
-	display/nr-3dutils.h \
-	display/nr-filter-blend.cpp     \
-	display/nr-filter-blend.h       \
-	display/nr-filter-colormatrix.cpp	\
-	display/nr-filter-colormatrix.h	\
-	display/nr-filter-component-transfer.cpp	\
-	display/nr-filter-component-transfer.h	\
-	display/nr-filter-composite.cpp	\
-	display/nr-filter-composite.h	\
-	display/nr-filter-convolve-matrix.cpp	\
-	display/nr-filter-convolve-matrix.h	\
-	display/nr-filter.cpp           \
-	display/nr-filter-diffuselighting.cpp     \
-	display/nr-filter-diffuselighting.h       \
-	display/nr-filter-displacement-map.cpp      \
-	display/nr-filter-displacement-map.h        \
-	display/nr-filter-flood.cpp  \
-	display/nr-filter-flood.h    \
-	display/nr-filter-gaussian.cpp  \
-	display/nr-filter-gaussian.h    \
-	display/nr-filter.h             \
-	display/nr-filter-image.cpp	\
-	display/nr-filter-image.h	\
-	display/nr-filter-merge.cpp	\
-	display/nr-filter-merge.h	\
-	display/nr-filter-morphology.cpp	\
-	display/nr-filter-morphology.h	\
-	display/nr-filter-offset.cpp	\
-	display/nr-filter-offset.h	\
-	display/nr-filter-primitive.cpp \
-	display/nr-filter-primitive.h   \
-	display/nr-filter-slot.cpp      \
-	display/nr-filter-slot.h        \
-	display/nr-filter-specularlighting.cpp     \
-	display/nr-filter-specularlighting.h       \
-	display/nr-filter-tile.cpp	\
-	display/nr-filter-tile.h	\
-	display/nr-filter-turbulence.cpp      \
-	display/nr-filter-turbulence.h        \
-	display/nr-filter-types.h       \
-	display/nr-filter-units.cpp	\
-	display/nr-filter-units.h	\
-	display/nr-filter-utils.h       \
-	display/nr-light.cpp			\
-	display/nr-light.h				\
-	display/nr-light-types.h	\
-	display/nr-style.cpp	\
-	display/nr-style.h	\
-	display/nr-svgfonts.cpp		\
-	display/nr-svgfonts.h		\
-	display/rendermode.h		\
-	display/snap-indicator.cpp	\
-	display/snap-indicator.h	\
-	display/sodipodi-ctrl.cpp	\
-	display/sodipodi-ctrl.h	\
-	display/sodipodi-ctrlrect.cpp	\
-	display/sodipodi-ctrlrect.h	\
-	display/sp-canvas.cpp	\
-	display/sp-canvas.h	\
-	display/sp-canvas-item.h \
-	display/sp-canvas-group.h \
-	display/sp-canvas-util.cpp	\
-	display/sp-canvas-util.h	\
-	display/sp-ctrlcurve.cpp	\
-	display/sp-ctrlcurve.h \
-	display/sp-ctrlline.cpp	\
-	display/sp-ctrlline.h \
-	display/sp-ctrlquadr.cpp \
-	display/sp-ctrlquadr.h
-
-# ######################
-# ### CxxTest stuff ####
-# ######################
-CXXTEST_TESTSUITES += \
-	$(srcdir)/display/curve-test.h
diff --git a/src/extension/Makefile_insert b/src/extension/Makefile_insert
deleted file mode 100644
index fb9713904..000000000
--- a/src/extension/Makefile_insert
+++ /dev/null
@@ -1,54 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-    extension/extension.cpp	\
-    extension/extension.h	\
-    extension/db.cpp	\
-    extension/db.h	\
-    extension/dependency.cpp \
-    extension/dependency.h \
-    extension/error-file.cpp \
-    extension/error-file.h \
-    extension/execution-env.cpp \
-    extension/execution-env.h \
-    extension/init.cpp	\
-    extension/init.h	\
-	extension/loader.h \
-	extension/loader.cpp \
-    extension/param/parameter.h \
-    extension/param/parameter.cpp \
-    extension/param/notebook.h \
-    extension/param/notebook.cpp \
-    extension/param/bool.h \
-    extension/param/bool.cpp \
-    extension/param/color.h \
-    extension/param/color.cpp \
-    extension/param/description.h \
-    extension/param/description.cpp \
-    extension/param/enum.h \
-    extension/param/enum.cpp \
-    extension/param/float.h \
-    extension/param/float.cpp \
-    extension/param/int.h \
-    extension/param/int.cpp \
-    extension/param/radiobutton.h \
-    extension/param/radiobutton.cpp \
-    extension/param/string.h \
-    extension/param/string.cpp \
-    extension/prefdialog.cpp \
-    extension/prefdialog.h \
-    extension/system.cpp	\
-    extension/system.h \
-    extension/timer.cpp \
-    extension/timer.h \
-    extension/input.h \
-    extension/input.cpp \
-    extension/output.h \
-    extension/output.cpp \
-    extension/effect.h \
-    extension/effect.cpp \
-    extension/patheffect.h \
-    extension/patheffect.cpp \
-    extension/print.h \
-    extension/print.cpp
-
diff --git a/src/extension/dbus/Makefile_insert b/src/extension/dbus/Makefile_insert
deleted file mode 100644
index 192651d87..000000000
--- a/src/extension/dbus/Makefile_insert
+++ /dev/null
@@ -1,111 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-if WITH_DBUS
-
-#############################
-# Sources for DBus interface
-#############################
-
-ink_common_sources +=	\
-	extension/dbus/dbus-init.cpp  \
-	extension/dbus/dbus-init.h  \
-	extension/dbus/application-interface.cpp  \
-	extension/dbus/application-interface.h  \
-	extension/dbus/document-interface.cpp  \
-	extension/dbus/document-interface.h  \
-	extension/dbus/org.inkscape.service.in
-
-###########################
-# Build DBus wrapper files
-###########################
-
-extension/dbus/application-server-glue.h: extension/dbus/application-interface.xml
-	dbus-binding-tool --mode=glib-server --output=$@ --prefix=application_interface $^
-
-extension/dbus/document-server-glue.h: extension/dbus/document-interface.xml
-	dbus-binding-tool --mode=glib-server --output=$@ --prefix=document_interface $^
-
-extension/dbus/document-client-glue.h: extension/dbus/document-interface.xml
-	dbus-binding-tool --mode=glib-client --output=$@ --prefix=document_interface $^
-
-BUILT_SOURCES += \
-	extension/dbus/application-server-glue.h   \
-	extension/dbus/document-server-glue.h   \
-	extension/dbus/document-client-glue.h
-
-###########################
-# Distribut DBus interface
-###########################
-
-EXTRA_DIST += \
-	extension/dbus/application-interface.xml \
-	extension/dbus/document-interface.xml
-
-###########################
-# DBus Activation Service
-###########################
-
-# Dbus service file
-servicedir = $(DBUSSERVICEDIR)
-service_in_files = extension/dbus/org.inkscape.service.in
-service_DATA = $(service_in_files:.service.in=.service)
-
-# Rule to make the service file with bindir expanded
-$(service_DATA): $(service_in_files) Makefile
-	@sed -e "s|bindir|$(prefix)|" $<> $@
-
-############################
-# DBus Interface Helper Lib
-############################
-
-lib_LTLIBRARIES = \
-	libinkdbus.la
-
-libinkdbusincludedir = $(includedir)/libinkdbus-0.48/libinkdbus
-libinkdbusinclude_HEADERS = \
-	extension/dbus/wrapper/inkscape-dbus-wrapper.h
-
-libinkdbus_la_SOURCES = \
-	extension/dbus/wrapper/inkscape-dbus-wrapper.h \
-	extension/dbus/wrapper/inkscape-dbus-wrapper.c
-
-libinkdbus_la_LDFLAGS = \
-	-version-info 0:0:0 \
-	-no-undefined \
-	-export-symbols-regex "^[^_d].*"
-
-libinkdbus_la_CFLAGS = \
-	$(DBUS_CFLAGS) \
-	$(INKSCAPE_CFLAGS) \
-	-I$(builddir)/extension/dbus \
-	-Wall
-
-libinkdbus_la_LIBADD = \
-	$(DBUS_LIBS) \
-	$(INKSCAPE_LIBS)
-
-############################
-# DBus Pkgconfig file
-############################
-
-pkgconfig_DATA = extension/dbus/wrapper/inkdbus.pc
-pkgconfigdir = $(libdir)/pkgconfig
-
-else # WITH_DBUS
-
-EXTRA_DIST += \
-	extension/dbus/dbus-init.cpp  \
-	extension/dbus/dbus-init.h  \
-	extension/dbus/application-interface.cpp  \
-	extension/dbus/application-interface.h  \
-	extension/dbus/document-interface.cpp  \
-	extension/dbus/document-interface.h \
-	extension/dbus/wrapper/inkscape-dbus-wrapper.h \
-	extension/dbus/wrapper/inkscape-dbus-wrapper.c \
-	extension/dbus/wrapper/inkdbus.pc \
-	extension/dbus/org.inkscape.service.in \
-	extension/dbus/application-interface.xml \
-	extension/dbus/document-interface.xml
-
-endif
-
diff --git a/src/extension/implementation/Makefile_insert b/src/extension/implementation/Makefile_insert
deleted file mode 100644
index 1b9080f1a..000000000
--- a/src/extension/implementation/Makefile_insert
+++ /dev/null
@@ -1,9 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	extension/implementation/implementation.cpp	\
-	extension/implementation/implementation.h \
-	extension/implementation/script.cpp	\
-	extension/implementation/script.h \
-	extension/implementation/xslt.cpp \
-	extension/implementation/xslt.h
diff --git a/src/extension/internal/Makefile_insert b/src/extension/internal/Makefile_insert
deleted file mode 100644
index 125776d41..000000000
--- a/src/extension/internal/Makefile_insert
+++ /dev/null
@@ -1,173 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-if WITH_LIBWPG
-ink_common_sources += \
-	extension/internal/wpg-input.cpp	\
-	extension/internal/wpg-input.h
-endif
-
-if WITH_LIBVISIO
-ink_common_sources += \
-	extension/internal/vsd-input.cpp	\
-	extension/internal/vsd-input.h
-endif
-
-if WITH_LIBCDR
-ink_common_sources += \
-	extension/internal/cdr-input.cpp	\
-	extension/internal/cdr-input.h
-endif
-
-if USE_IMAGE_MAGICK
-ink_common_sources +=			\
-	extension/internal/bitmap/imagemagick.cpp		\
-	extension/internal/bitmap/imagemagick.h			\
-	extension/internal/bitmap/adaptiveThreshold.cpp		\
-	extension/internal/bitmap/adaptiveThreshold.h		\
-	extension/internal/bitmap/addNoise.cpp			\
-	extension/internal/bitmap/addNoise.h			\
-	extension/internal/bitmap/blur.cpp			\
-	extension/internal/bitmap/blur.h			\
-	extension/internal/bitmap/channel.cpp			\
-	extension/internal/bitmap/channel.h			\
-	extension/internal/bitmap/charcoal.cpp			\
-	extension/internal/bitmap/charcoal.h			\
-	extension/internal/bitmap/colorize.cpp			\
-	extension/internal/bitmap/colorize.h			\
-	extension/internal/bitmap/contrast.cpp			\
-	extension/internal/bitmap/contrast.h			\
-	extension/internal/bitmap/crop.cpp			\
-	extension/internal/bitmap/crop.h			\
-	extension/internal/bitmap/cycleColormap.cpp		\
-	extension/internal/bitmap/cycleColormap.h		\
-	extension/internal/bitmap/despeckle.cpp			\
-	extension/internal/bitmap/despeckle.h			\
-	extension/internal/bitmap/edge.cpp			\
-	extension/internal/bitmap/edge.h			\
-	extension/internal/bitmap/emboss.cpp			\
-	extension/internal/bitmap/emboss.h			\
-	extension/internal/bitmap/enhance.cpp			\
-	extension/internal/bitmap/enhance.h			\
-	extension/internal/bitmap/equalize.cpp			\
-	extension/internal/bitmap/equalize.h			\
-	extension/internal/bitmap/gaussianBlur.cpp		\
-	extension/internal/bitmap/gaussianBlur.h		\
-	extension/internal/bitmap/implode.cpp			\
-	extension/internal/bitmap/implode.h			\
-	extension/internal/bitmap/level.cpp			\
-	extension/internal/bitmap/level.h			\
-	extension/internal/bitmap/levelChannel.cpp		\
-	extension/internal/bitmap/levelChannel.h		\
-	extension/internal/bitmap/medianFilter.cpp		\
-	extension/internal/bitmap/medianFilter.h		\
-	extension/internal/bitmap/modulate.cpp			\
-	extension/internal/bitmap/modulate.h			\
-	extension/internal/bitmap/negate.cpp			\
-	extension/internal/bitmap/negate.h			\
-	extension/internal/bitmap/normalize.cpp			\
-	extension/internal/bitmap/normalize.h			\
-	extension/internal/bitmap/oilPaint.cpp			\
-	extension/internal/bitmap/oilPaint.h			\
-	extension/internal/bitmap/opacity.cpp			\
-	extension/internal/bitmap/opacity.h			\
-	extension/internal/bitmap/raise.cpp			\
-	extension/internal/bitmap/raise.h			\
-	extension/internal/bitmap/reduceNoise.cpp		\
-	extension/internal/bitmap/reduceNoise.h			\
-	extension/internal/bitmap/sample.cpp			\
-	extension/internal/bitmap/sample.h			\
-	extension/internal/bitmap/shade.cpp			\
-	extension/internal/bitmap/shade.h			\
-	extension/internal/bitmap/sharpen.cpp			\
-	extension/internal/bitmap/sharpen.h			\
-	extension/internal/bitmap/solarize.cpp			\
-	extension/internal/bitmap/solarize.h			\
-	extension/internal/bitmap/spread.cpp			\
-	extension/internal/bitmap/spread.h			\
-	extension/internal/bitmap/swirl.cpp			\
-	extension/internal/bitmap/swirl.h			\
-	extension/internal/bitmap/threshold.cpp			\
-	extension/internal/bitmap/threshold.h			\
-	extension/internal/bitmap/unsharpmask.cpp		\
-	extension/internal/bitmap/unsharpmask.h			\
-	extension/internal/bitmap/wave.cpp			\
-	extension/internal/bitmap/wave.h
-endif
-
-ink_common_sources +=	\
-	extension/internal/bluredge.h	\
-	extension/internal/bluredge.cpp	\
-	extension/internal/clear-n_.h   \
-	extension/internal/grid.h	\
-	extension/internal/grid.cpp	\
-	extension/internal/gimpgrad.h	\
-	extension/internal/gimpgrad.cpp	\
-	extension/internal/svg.h	\
-	extension/internal/svg.cpp	\
-	extension/internal/svgz.h	\
-	extension/internal/svgz.cpp	\
-	extension/internal/cairo-ps-out.h	\
-	extension/internal/cairo-ps-out.cpp	\
-	extension/internal/cairo-render-context.h	\
-	extension/internal/cairo-render-context.cpp	\
-	extension/internal/cairo-renderer.h \
-	extension/internal/cairo-renderer.cpp \
-	extension/internal/cairo-renderer-pdf-out.h	\
-	extension/internal/cairo-renderer-pdf-out.cpp	\
-	extension/internal/cairo-png-out.h \
-	extension/internal/cairo-png-out.cpp \
-	extension/internal/javafx-out.cpp	\
-	extension/internal/javafx-out.h	\
-	extension/internal/gdkpixbuf-input.h	\
-	extension/internal/gdkpixbuf-input.cpp	\
-	extension/internal/latex-text-renderer.h \
-	extension/internal/latex-text-renderer.cpp \
-	extension/internal/pdfinput/svg-builder.h \
-	extension/internal/pdfinput/svg-builder.cpp \
-	extension/internal/pdfinput/pdf-parser.h \
-	extension/internal/pdfinput/pdf-parser.cpp \
-	extension/internal/pdfinput/pdf-input.h	\
-	extension/internal/pdfinput/pdf-input.cpp	\
-	extension/internal/pov-out.cpp	\
-	extension/internal/pov-out.h	\
-	extension/internal/odf.cpp	\
-	extension/internal/odf.h	\
-	extension/internal/latex-pstricks.cpp	\
-	extension/internal/latex-pstricks.h	\
-	extension/internal/latex-pstricks-out.cpp	\
-	extension/internal/latex-pstricks-out.h	\
-	extension/internal/filter/bevels.h	\
-	extension/internal/filter/blurs.h \
-	extension/internal/filter/bumps.h \
-	extension/internal/filter/color.h \
-	extension/internal/filter/distort.h \
-	extension/internal/filter/filter.h \
-	extension/internal/filter/image.h \
-	extension/internal/filter/morphology.h \
-	extension/internal/filter/overlays.h \
-	extension/internal/filter/paint.h \
-	extension/internal/filter/protrusions.h \
-	extension/internal/filter/shadows.h \
-	extension/internal/filter/textures.h \
-	extension/internal/filter/transparency.h \
-	extension/internal/filter/filter-all.cpp \
-	extension/internal/filter/filter-file.cpp \
-	extension/internal/filter/filter.cpp \
-	extension/internal/filter/filter.h \
-	extension/internal/text_reassemble.c \
-	extension/internal/text_reassemble.h \
-	extension/internal/emf-print.h \
-	extension/internal/emf-print.cpp \
-	extension/internal/emf-inout.h \
-	extension/internal/emf-inout.cpp \
-	extension/internal/metafile-inout.h \
-	extension/internal/metafile-inout.cpp \
-	extension/internal/metafile-print.h \
-	extension/internal/metafile-print.cpp \
-	extension/internal/wmf-print.h \
-	extension/internal/wmf-print.cpp \
-	extension/internal/wmf-inout.h \
-	extension/internal/wmf-inout.cpp \
-	extension/internal/image-resolution.h \
-	extension/internal/image-resolution.cpp
-	
diff --git a/src/filters/Makefile_insert b/src/filters/Makefile_insert
deleted file mode 100644
index ea9ff4b56..000000000
--- a/src/filters/Makefile_insert
+++ /dev/null
@@ -1,46 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	filters/blend.cpp				\
-	filters/blend.h					\
-	filters/colormatrix.cpp				\
-	filters/colormatrix.h				\
-	filters/componenttransfer.cpp			\
-	filters/componenttransfer-funcnode.cpp		\
-	filters/componenttransfer-funcnode.h		\
-	filters/componenttransfer.h			\
-	filters/composite.cpp				\
-	filters/composite.h				\
-	filters/convolvematrix.cpp			\
-	filters/convolvematrix.h			\
-	filters/diffuselighting.cpp			\
-	filters/diffuselighting.h			\
-	filters/displacementmap.cpp			\
-	filters/displacementmap.h			\
-	filters/distantlight.cpp			\
-	filters/distantlight.h				\
-	filters/flood.cpp				\
-	filters/flood.h					\
-	filters/gaussian-blur.cpp			\
-	filters/gaussian-blur.h				\
-	filters/image.cpp				\
-	filters/image.h					\
-	filters/merge.cpp				\
-	filters/merge.h					\
-	filters/mergenode.cpp				\
-	filters/mergenode.h				\
-	filters/morphology.cpp				\
-	filters/morphology.h				\
-	filters/offset.cpp				\
-	filters/offset.h				\
-	filters/pointlight.cpp				\
-	filters/pointlight.h				\
-	filters/specularlighting.cpp			\
-	filters/specularlighting.h			\
-	filters/spotlight.cpp				\
-	filters/spotlight.h				\
-	filters/tile.cpp				\
-	filters/tile.h					\
-	filters/turbulence.cpp				\
-	filters/turbulence.h
-
diff --git a/src/helper/Makefile_insert b/src/helper/Makefile_insert
deleted file mode 100644
index e59fcfb70..000000000
--- a/src/helper/Makefile_insert
+++ /dev/null
@@ -1,45 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-helper/unit-menu.$(OBJEXT): helper/sp-marshal.h
-
-ink_common_sources +=	\
-	helper/action.cpp	\
-	helper/action.h	\
-	helper/action-context.cpp	\
-	helper/action-context.h	\
-	helper/geom.cpp	\
-	helper/geom.h	\
-	helper/geom-curves.h	\
-	helper/geom-nodetype.cpp	\
-	helper/geom-nodetype.h	\
-	helper/geom-pathstroke.cpp      \
-	helper/geom-pathstroke.h        \
-	helper/gnome-utils.cpp	\
-	helper/gnome-utils.h	\
-	helper/mathfns.h \
-	helper/png-write.cpp	\
-	helper/png-write.h	\
-	helper/sp-marshal.cpp	\
-	helper/sp-marshal.h	\
-	helper/window.cpp	\
-	helper/window.h		\
-	helper/stock-items.cpp	\
-	helper/stock-items.h	
-
-# cmp exits with status 0 when there are no differences. "if" executes the commands
-# after "then" when the exit status of the if command is 0 (this is crazy).
-helper/sp-marshal.h: helper/sp-marshal.list
-	glib-genmarshal --prefix=sp_marshal --header $(srcdir)/helper/sp-marshal.list > helper/tmp.sp-marshal.h
-	if cmp -s helper/sp-marshal.h helper/tmp.sp-marshal.h; \
-	then rm helper/tmp.sp-marshal.h; \
-	else mv helper/tmp.sp-marshal.h helper/sp-marshal.h; fi
-
-helper/sp-marshal.cpp: helper/sp-marshal.list helper/sp-marshal.h
-	( echo '#include "helper/sp-marshal.h"' &&	\
-	  glib-genmarshal --prefix=sp_marshal --body $(srcdir)/helper/sp-marshal.list )	\
-	 > helper/tmp.sp-marshal.cpp; \
-	if cmp -s helper/sp-marshal.cpp helper/tmp.sp-marshal.cpp; \
-	then rm helper/tmp.sp-marshal.cpp; \
-	else mv helper/tmp.sp-marshal.cpp helper/sp-marshal.cpp; fi
-
-helper/sp-marshal.cpp helper/sp-marshal.h: helper/sp-marshal.list
diff --git a/src/inkgc/Makefile_insert b/src/inkgc/Makefile_insert
deleted file mode 100644
index 58aa39bb9..000000000
--- a/src/inkgc/Makefile_insert
+++ /dev/null
@@ -1,13 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-inkgc/all: inkgc/libinkgc.a
-
-inkgc/clean:
-	rm -f inkgc/libinkgc.a $(inkgc_libinkgc_a_OBJECTS)
-
-inkgc_libinkgc_a_SOURCES =         \
-	inkgc/gc.cpp		\
-	inkgc/gc-alloc.h	\
-	inkgc/gc-core.h		\
-	inkgc/gc-managed.h	\
-	inkgc/gc-soft-ptr.h
diff --git a/src/io/Makefile_insert b/src/io/Makefile_insert
deleted file mode 100644
index 35119ec7b..000000000
--- a/src/io/Makefile_insert
+++ /dev/null
@@ -1,26 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources += \
-	io/base64stream.h \
-	io/base64stream.cpp \
-	io/bufferstream.cpp  \
-	io/bufferstream.h    \
-	io/gzipstream.cpp \
-	io/gzipstream.h \
-	io/inkjar.cpp \
-	io/inkjar.h \
-	io/inkscapestream.cpp \
-	io/inkscapestream.h \
-	io/resource.cpp \
-	io/resource.h \
-	io/stringstream.cpp \
-	io/stringstream.h \
-	io/sys.h \
-	io/sys.cpp \
-	io/uristream.cpp \
-	io/uristream.h \
-	io/xsltstream.cpp \
-	io/xsltstream.h
-
-#io_streamtest_SOURCES = io/streamtest.cpp
-#io_streamtest_LDADD =   $(all_libs)
diff --git a/src/libavoid/Makefile_insert b/src/libavoid/Makefile_insert
deleted file mode 100644
index 3a9b97cef..000000000
--- a/src/libavoid/Makefile_insert
+++ /dev/null
@@ -1,37 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-libavoid/all: libavoid/libavoid.a
-
-libavoid/clean:
-	rm -f libavoid/libavoid.a $(libavoid_libavoid_a_OBJECTS)
-
-libavoid_libavoid_a_SOURCES =	\
-	libavoid/assertions.h	\
-	libavoid/connector.cpp	\
-	libavoid/connector.h	\
-	libavoid/debug.h	\
-	libavoid/geometry.cpp	\
-	libavoid/geometry.h	\
-	libavoid/geomtypes.cpp	\
-	libavoid/geomtypes.h	\
-	libavoid/graph.cpp	\
-	libavoid/graph.h	\
-	libavoid/makepath.cpp	\
-	libavoid/makepath.h	\
-	libavoid/orthogonal.cpp	\
-	libavoid/orthogonal.h	\
-	libavoid/vpsc.cpp	\
-	libavoid/vpsc.h		\
-	libavoid/router.cpp	\
-	libavoid/router.h	\
-	libavoid/shape.cpp	\
-	libavoid/shape.h	\
-	libavoid/timer.cpp	\
-	libavoid/timer.h	\
-	libavoid/vertices.cpp	\
-	libavoid/vertices.h	\
-	libavoid/visibility.cpp	\
-	libavoid/visibility.h	\
-	libavoid/viscluster.cpp \
-	libavoid/viscluster.h   \
-	libavoid/libavoid.h
diff --git a/src/libcola/Makefile_insert b/src/libcola/Makefile_insert
deleted file mode 100644
index dc032a289..000000000
--- a/src/libcola/Makefile_insert
+++ /dev/null
@@ -1,18 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-libcola/all: libcola.a
-
-libcola/clean:
-	rm -f libcola/libcola.a $(libcola_libcola_a_OBJECTS)
-
-libcola_libcola_a_SOURCES = libcola/cola.h\
-	libcola/cola.cpp\
-	libcola/conjugate_gradient.cpp\
-	libcola/conjugate_gradient.h\
-	libcola/gradient_projection.cpp\
-	libcola/gradient_projection.h\
-	libcola/shortest_paths.cpp\
-	libcola/shortest_paths.h\
-	libcola/straightener.h\
-	libcola/straightener.cpp\
-	libcola/connected_components.cpp
diff --git a/src/libcroco/Makefile_insert b/src/libcroco/Makefile_insert
deleted file mode 100644
index 97ed49ee8..000000000
--- a/src/libcroco/Makefile_insert
+++ /dev/null
@@ -1,64 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-libcroco/all: libcroco/libcroco.a
-
-libcroco/clean:
-	rm -f libcroco/libcroco.a $(libcroco_libcroco_a_OBJECTS)
-
-libcroco_libcroco_a_SOURCES =	\
-	libcroco/cr-utils.c	\
-	libcroco/cr-utils.h	\
-	libcroco/cr-input.c	\
-	libcroco/cr-input.h	\
-	libcroco/cr-enc-handler.c	\
-	libcroco/cr-enc-handler.h	\
-	libcroco/cr-num.c	\
-	libcroco/cr-num.h	\
-	libcroco/cr-rgb.c	\
-	libcroco/cr-rgb.h	\
-	libcroco/cr-token.c	\
-	libcroco/cr-token.h	\
-	libcroco/cr-tknzr.c	\
-	libcroco/cr-tknzr.h	\
-	libcroco/cr-term.c	\
-	libcroco/cr-term.h	\
-	libcroco/cr-attr-sel.c	\
-	libcroco/cr-attr-sel.h	\
-	libcroco/cr-pseudo.c	\
-	libcroco/cr-pseudo.h	\
-	libcroco/cr-additional-sel.c	\
-	libcroco/cr-additional-sel.h	\
-	libcroco/cr-simple-sel.c	\
-	libcroco/cr-simple-sel.h	\
-	libcroco/cr-selector.c	\
-	libcroco/cr-selector.h	\
-	libcroco/cr-doc-handler.c	\
-	libcroco/cr-doc-handler.h	\
-	libcroco/cr-parser.c	\
-	libcroco/cr-parser.h	\
-	libcroco/cr-declaration.c	\
-	libcroco/cr-declaration.h	\
-	libcroco/cr-statement.c	\
-	libcroco/cr-statement.h	\
-	libcroco/cr-stylesheet.c	\
-	libcroco/cr-stylesheet.h	\
-	libcroco/cr-cascade.c	\
-	libcroco/cr-cascade.h	\
-	libcroco/cr-om-parser.c	\
-	libcroco/cr-om-parser.h	\
-	libcroco/cr-style.c	\
-	libcroco/cr-style.h	\
-	libcroco/cr-libxml-node-iface.c	\
-	libcroco/cr-libxml-node-iface.h	\
-	libcroco/cr-node-iface.h	\
-	libcroco/cr-sel-eng.c	\
-	libcroco/cr-sel-eng.h	\
-	libcroco/cr-fonts.c	\
-	libcroco/cr-fonts.h	\
-	libcroco/cr-prop-list.c	\
-	libcroco/cr-prop-list.h	\
-	libcroco/cr-parsing-location.c	\
-	libcroco/cr-parsing-location.h	\
-	libcroco/cr-string.c	\
-	libcroco/cr-string.h	\
-	libcroco/libcroco.h
diff --git a/src/libdepixelize/Makefile_insert b/src/libdepixelize/Makefile_insert
deleted file mode 100644
index 8aed7244f..000000000
--- a/src/libdepixelize/Makefile_insert
+++ /dev/null
@@ -1,22 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-libdepixelize/all: libdepixelize/libdepixelize.a
-
-libdepixelize/clean:
-	rm -f libdepixelize/libdepixelize.a $(libdepixelize_libdepixelize_a_OBJECTS)
-
-libdepixelize_libdepixelize_a_SOURCES =            \
-	libdepixelize/kopftracer2011.cpp           \
-	libdepixelize/kopftracer2011.h             \
-	libdepixelize/splines.h                    \
-	libdepixelize/priv/branchless.h            \
-	libdepixelize/priv/colorspace.h            \
-	libdepixelize/priv/curvature.h             \
-	libdepixelize/priv/homogeneoussplines.h    \
-	libdepixelize/priv/integral.h              \
-	libdepixelize/priv/iterator.h              \
-	libdepixelize/priv/optimization-kopf2011.h \
-	libdepixelize/priv/pixelgraph.h            \
-	libdepixelize/priv/point.h                 \
-	libdepixelize/priv/simplifiedvoronoi.h     \
-	libdepixelize/priv/splines-kopf2011.h
diff --git a/src/libnrtype/Makefile_insert b/src/libnrtype/Makefile_insert
deleted file mode 100644
index ab9465daa..000000000
--- a/src/libnrtype/Makefile_insert
+++ /dev/null
@@ -1,28 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	libnrtype/boundary-type.h	\
-	libnrtype/font-glyph.h	\
-	libnrtype/font-instance.h	\
-	libnrtype/font-style.h	\
-	libnrtype/nr-type-primitives.cpp	\
-	libnrtype/nr-type-primitives.h	\
-	libnrtype/FontFactory.cpp \
-	libnrtype/FontFactory.h \
-	libnrtype/FontInstance.cpp \
-	libnrtype/font-lister.h \
-	libnrtype/font-lister.cpp \
-	libnrtype/one-box.h	\
-	libnrtype/one-glyph.h	\
-	libnrtype/one-para.h	\
-	libnrtype/text-boundary.h	\
-	libnrtype/TextWrapper.cpp \
-	libnrtype/TextWrapper.h \
-	libnrtype/Layout-TNG-Compute.cpp \
-	libnrtype/Layout-TNG-Input.cpp \
-	libnrtype/Layout-TNG-OutIter.cpp \
-	libnrtype/Layout-TNG-Output.cpp \
-	libnrtype/Layout-TNG-Scanline-Maker.h \
-	libnrtype/Layout-TNG-Scanline-Makers.cpp \
-	libnrtype/Layout-TNG.cpp \
-	libnrtype/Layout-TNG.h
diff --git a/src/libuemf/Makefile_insert b/src/libuemf/Makefile_insert
deleted file mode 100644
index 427a0e80e..000000000
--- a/src/libuemf/Makefile_insert
+++ /dev/null
@@ -1,30 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-libuemf/all: libuemf.a
-
-libuemf/clean:
-	rm -f libuemf/libuemf.a $(libuemf_libuemf_a_OBJECTS)
-
-libuemf_libuemf_a_SOURCES = \
-	libuemf/uemf.c \
-	libuemf/uemf.h \
-	libuemf/uemf_endian.c \
-	libuemf/uemf_endian.h \
-	libuemf/uemf_print.c \
-	libuemf/uemf_print.h \
-	libuemf/uemf_safe.c \
-	libuemf/uemf_safe.h \
-	libuemf/uemf_utf.c \
-	libuemf/uemf_utf.h \
-	libuemf/uwmf.c \
-	libuemf/uwmf.h \
-	libuemf/uwmf_endian.c \
-	libuemf/uwmf_endian.h \
-	libuemf/uwmf_print.c \
-	libuemf/uwmf_print.h \
-	libuemf/upmf.c \
-	libuemf/upmf.h \
-	libuemf/upmf_print.c \
-	libuemf/upmf_print.h \
-	libuemf/symbol_convert.c \
-	libuemf/symbol_convert.h
diff --git a/src/libvpsc/Makefile_insert b/src/libvpsc/Makefile_insert
deleted file mode 100644
index cb05be6c0..000000000
--- a/src/libvpsc/Makefile_insert
+++ /dev/null
@@ -1,23 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-libvpsc/all: libvpsc/libvpsc.a
-
-libvpsc/clean:
-	rm -f libvpsc/libvpsc.a $(libvpsc_libvpsc_a_OBJECTS)
-
-libvpsc_libvpsc_a_SOURCES = libvpsc/block.cpp\
-	libvpsc/blocks.cpp\
-	libvpsc/constraint.cpp\
-	libvpsc/generate-constraints.cpp\
-	libvpsc/pairingheap/PairingHeap.cpp\
-	libvpsc/remove_rectangle_overlap.cpp\
-	libvpsc/solve_VPSC.cpp\
-	libvpsc/variable.cpp\
-	libvpsc/block.h\
-	libvpsc/blocks.h\
-	libvpsc/constraint.h\
-	libvpsc/generate-constraints.h\
-	libvpsc/pairingheap/PairingHeap.h\
-	libvpsc/pairingheap/dsexceptions.h\
-	libvpsc/remove_rectangle_overlap.h\
-	libvpsc/solve_VPSC.h\
-	libvpsc/variable.h
diff --git a/src/livarot/Makefile_insert b/src/livarot/Makefile_insert
deleted file mode 100644
index 69078d073..000000000
--- a/src/livarot/Makefile_insert
+++ /dev/null
@@ -1,41 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-livarot/all: livarot/libvarot.a
-
-livarot/clean:
-	rm -f livarot/libvarot.a $(livarot_libvarot_a_OBJECTS)
-
-livarot_libvarot_a_SOURCES =	\
-	livarot/AVL.cpp	\
-	livarot/AVL.h	\
-	livarot/AlphaLigne.cpp	\
-	livarot/AlphaLigne.h	\
-	livarot/BitLigne.cpp	\
-	livarot/BitLigne.h	\
-	livarot/float-line.cpp	\
-	livarot/float-line.h	\
-	livarot/int-line.cpp	\
-	livarot/int-line.h	\
-	livarot/LivarotDefs.h	\
-	livarot/Path.cpp	\
-	livarot/Path.h	\
-	livarot/PathConversion.cpp	\
-	livarot/PathCutting.cpp	\
-	livarot/PathOutline.cpp	\
-	livarot/PathSimplify.cpp	\
-	livarot/PathStroke.cpp	\
-	livarot/Shape.cpp	\
-	livarot/Shape.h	\
-	livarot/ShapeDraw.cpp	\
-	livarot/ShapeMisc.cpp	\
-	livarot/ShapeRaster.cpp	\
-	livarot/ShapeSweep.cpp	\
-	livarot/sweep-tree-list.cpp	\
-	livarot/sweep-tree-list.h	\
-	livarot/sweep-tree.cpp \
-	livarot/sweep-tree.h \
-	livarot/sweep-event.cpp \
-	livarot/sweep-event.h	\
-	livarot/sweep-event-queue.h	\
-	livarot/path-description.h \
-	livarot/path-description.cpp
diff --git a/src/live_effects/Makefile_insert b/src/live_effects/Makefile_insert
deleted file mode 100644
index b5bee55c8..000000000
--- a/src/live_effects/Makefile_insert
+++ /dev/null
@@ -1,115 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources += \
-	live_effects/effect.cpp	\
-	live_effects/effect.h	\
-	live_effects/effect-enum.h	\
-	live_effects/lpeobject.cpp	\
-	live_effects/lpeobject.h	\
-	live_effects/lpegroupbbox.cpp	\
-	live_effects/lpegroupbbox.h	\
-	live_effects/lpeobject-reference.cpp	\
-	live_effects/lpeobject-reference.h	\
-	live_effects/lpe-patternalongpath.cpp	\
-	live_effects/lpe-patternalongpath.h	\
-	live_effects/lpe-bendpath.cpp	\
-	live_effects/lpe-bendpath.h	\
-	live_effects/lpe-dynastroke.cpp	\
-	live_effects/lpe-dynastroke.h	\
-	live_effects/lpe-extrude.cpp	\
-	live_effects/lpe-extrude.h	\
-	live_effects/lpe-sketch.cpp	\
-	live_effects/lpe-sketch.h	\
-	live_effects/lpe-knot.cpp	\
-	live_effects/lpe-knot.h	\
-	live_effects/lpe-vonkoch.cpp	\
-	live_effects/lpe-vonkoch.h	\
-	live_effects/lpe-rough-hatches.cpp	\
-	live_effects/lpe-rough-hatches.h	\
-	live_effects/lpe-curvestitch.cpp	\
-	live_effects/lpe-curvestitch.h	\
-	live_effects/lpe-constructgrid.cpp	\
-	live_effects/lpe-constructgrid.h	\
-	live_effects/lpe-fillet-chamfer.cpp	\
-	live_effects/lpe-fillet-chamfer.h	\
-	live_effects/lpe-gears.cpp	\
-	live_effects/lpe-gears.h	\
-	live_effects/lpe-interpolate.cpp	\
-	live_effects/lpe-interpolate.h	\
-	live_effects/lpe-interpolate_points.cpp	\
-	live_effects/lpe-interpolate_points.h	\
-	live_effects/lpe-test-doEffect-stack.cpp	\
-	live_effects/lpe-test-doEffect-stack.h	\
-	live_effects/lpe-bspline.cpp	\
-	live_effects/lpe-bspline.h	\
-	live_effects/lpe-lattice.cpp	\
-	live_effects/lpe-lattice.h	\
-	live_effects/lpe-lattice2.cpp	\
-	live_effects/lpe-lattice2.h	\
-	live_effects/lpe-roughen.cpp	\
-	live_effects/lpe-roughen.h	\
-	live_effects/lpe-show_handles.cpp	\
-	live_effects/lpe-show_handles.h	\
-	live_effects/lpe-simplify.cpp	\
-	live_effects/lpe-simplify.h	\
-	live_effects/lpe-envelope.cpp	\
-	live_effects/lpe-envelope.h	\
-	live_effects/lpe-spiro.cpp	\
-	live_effects/lpe-spiro.h	\
-	live_effects/lpe-tangent_to_curve.cpp	\
-	live_effects/lpe-tangent_to_curve.h	\
-	live_effects/lpe-perp_bisector.cpp	\
-	live_effects/lpe-perp_bisector.h	\
-	live_effects/spiro.h	\
-	live_effects/spiro.cpp	\
-	live_effects/spiro-converters.h	\
-	live_effects/spiro-converters.cpp	\
-	live_effects/lpe-circle_with_radius.cpp	\
-	live_effects/lpe-circle_with_radius.h	\
-	live_effects/lpe-perspective_path.cpp	\
-	live_effects/lpe-perspective_path.h		\
-	live_effects/lpe-perspective-envelope.cpp	\
-	live_effects/lpe-perspective-envelope.h		\
-	live_effects/lpe-mirror_symmetry.cpp	\
-	live_effects/lpe-mirror_symmetry.h	\
-	live_effects/lpe-circle_3pts.cpp	\
-	live_effects/lpe-circle_3pts.h	\
-	live_effects/lpe-transform_2pts.cpp	\
-	live_effects/lpe-transform_2pts.h	\
-	live_effects/lpe-angle_bisector.cpp	\
-	live_effects/lpe-angle_bisector.h	\
-	live_effects/lpe-parallel.cpp	\
-	live_effects/lpe-parallel.h	\
-	live_effects/lpe-copy_rotate.cpp	\
-	live_effects/lpe-copy_rotate.h	\
-	live_effects/lpe-powerstroke.cpp	\
-	live_effects/lpe-powerstroke.h	\
-	live_effects/lpe-powerstroke-interpolators.h	\
-	live_effects/lpe-offset.cpp	\
-	live_effects/lpe-offset.h	\
-	live_effects/lpe-clone-original.cpp	\
-	live_effects/lpe-clone-original.h	\
-	live_effects/lpe-ruler.cpp	\
-	live_effects/lpe-ruler.h	\
-	live_effects/lpe-recursiveskeleton.cpp	\
-	live_effects/lpe-recursiveskeleton.h	\
-	live_effects/lpe-text_label.cpp	\
-	live_effects/lpe-text_label.h	\
-	live_effects/lpe-path_length.cpp	\
-	live_effects/lpe-path_length.h	\
-	live_effects/lpe-line_segment.cpp	\
-	live_effects/lpe-line_segment.h	\
-	live_effects/lpe-bounding-box.cpp	\
-	live_effects/lpe-bounding-box.h	\
-	live_effects/lpe-attach-path.cpp	\
-	live_effects/lpe-attach-path.h	\
-	live_effects/lpe-fill-between-strokes.cpp	\
-	live_effects/lpe-fill-between-strokes.h	\
-	live_effects/lpe-fill-between-many.cpp	\
-	live_effects/lpe-fill-between-many.h	\
-	live_effects/lpe-ellipse_5pts.cpp	\
-	live_effects/lpe-ellipse_5pts.h	\
-	live_effects/lpe-jointype.cpp	\
-	live_effects/lpe-jointype.h	\
-	live_effects/lpe-taperstroke.cpp	\
-	live_effects/lpe-taperstroke.h 	
diff --git a/src/live_effects/parameter/Makefile_insert b/src/live_effects/parameter/Makefile_insert
deleted file mode 100644
index bd1c5b600..000000000
--- a/src/live_effects/parameter/Makefile_insert
+++ /dev/null
@@ -1,36 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources += \
-	live_effects/parameter/parameter.cpp	\
-	live_effects/parameter/parameter.h	\
-	live_effects/parameter/array.cpp	\
-	live_effects/parameter/array.h	\
-	live_effects/parameter/bool.cpp	\
-	live_effects/parameter/bool.h	\
-	live_effects/parameter/random.cpp	\
-	live_effects/parameter/random.h	\
-	live_effects/parameter/point.cpp	\
-	live_effects/parameter/point.h	\
-	live_effects/parameter/enum.h	\
-	live_effects/parameter/path-reference.cpp	\
-	live_effects/parameter/path-reference.h	\
-	live_effects/parameter/path.cpp	\
-	live_effects/parameter/path.h	\
-	live_effects/parameter/originalpath.cpp	\
-	live_effects/parameter/originalpath.h	\
-	live_effects/parameter/originalpatharray.cpp	\
-	live_effects/parameter/originalpatharray.h	\
-	live_effects/parameter/powerstrokepointarray.cpp	\
-	live_effects/parameter/powerstrokepointarray.h	\
-	live_effects/parameter/filletchamferpointarray.cpp	\
-	live_effects/parameter/filletchamferpointarray.h	\
-	live_effects/parameter/text.cpp	\
-	live_effects/parameter/text.h	\
-	live_effects/parameter/transformedpoint.cpp	\
-	live_effects/parameter/transformedpoint.h	\
-	live_effects/parameter/togglebutton.cpp	\
-	live_effects/parameter/togglebutton.h	\
-	live_effects/parameter/unit.cpp	\
-	live_effects/parameter/unit.h	\
-	live_effects/parameter/vector.cpp	\
-	live_effects/parameter/vector.h
diff --git a/src/svg/Makefile_insert b/src/svg/Makefile_insert
deleted file mode 100644
index 4f82bdd76..000000000
--- a/src/svg/Makefile_insert
+++ /dev/null
@@ -1,32 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	svg/css-ostringstream.h	\
-	svg/css-ostringstream.cpp	\
-	svg/path-string.h	\
-	svg/path-string.cpp \
-	svg/stringstream.h	\
-	svg/stringstream.cpp	\
-	svg/strip-trailing-zeros.h	\
-	svg/strip-trailing-zeros.cpp	\
-	svg/svg-affine.cpp	\
-	svg/svg-color.cpp	\
-	svg/svg-color.h 	\
-	svg/svg-icc-color.h \
-	svg/svg-angle.cpp   \
-	svg/svg-angle.h     \
-	svg/svg-length.cpp	\
-	svg/svg-length.h	\
-	svg/svg-path.cpp	\
-	svg/svg.h
-
-# ######################
-# ### CxxTest stuff ####
-# ######################
-CXXTEST_TESTSUITES += \
-	$(srcdir)/svg/css-ostringstream-test.h	\
-	$(srcdir)/svg/stringstream-test.h	\
-	$(srcdir)/svg/svg-affine-test.h		\
-	$(srcdir)/svg/svg-color-test.h		\
-	$(srcdir)/svg/svg-length-test.h		\
-	$(srcdir)/svg/svg-path-geom-test.h
diff --git a/src/trace/Makefile_insert b/src/trace/Makefile_insert
deleted file mode 100644
index 27353df15..000000000
--- a/src/trace/Makefile_insert
+++ /dev/null
@@ -1,23 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-if HAVE_POTRACE
-
-ink_common_sources +=	            \
-	trace/pool.h                        \
-	trace/trace.h                       \
-	trace/trace.cpp                     \
-	trace/imagemap-gdk.cpp	            \
-	trace/imagemap-gdk.h	            \
-	trace/imagemap.cpp	            \
-	trace/imagemap.h	            \
-	trace/quantize.h	            \
-	trace/quantize.cpp	            \
-	trace/filterset.h	            \
-	trace/filterset.cpp	            \
-	trace/siox.h			    \
-	trace/siox.cpp			    \
-	trace/potrace/bitmap.h              \
-	trace/potrace/inkscape-potrace.cpp  \
-	trace/potrace/inkscape-potrace.h
-
-endif
diff --git a/src/ui/Makefile_insert b/src/ui/Makefile_insert
deleted file mode 100644
index bbfdb532c..000000000
--- a/src/ui/Makefile_insert
+++ /dev/null
@@ -1,31 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=		\
-	ui/clipboard.cpp	\
-	ui/clipboard.h		\
-	ui/control-manager.cpp	\
-	ui/control-manager.h	\
-	ui/control-types.h	\
-	ui/dialog-events.cpp    \
-	ui/dialog-events.h      \
-	ui/draw-anchor.cpp	\
-	ui/draw-anchor.h	\
-	ui/icon-names.h		\
-	ui/interface.cpp	\
-	ui/interface.h		\
-	ui/object-edit.cpp	\
-	ui/object-edit.h	\
-	ui/previewable.h	\
-	ui/previewfillable.h	\
-	ui/previewholder.cpp	\
-	ui/previewholder.h	\
-	ui/selected-color.h     \
-	ui/selected-color.cpp   \
-	ui/shape-editor.cpp	\
-	ui/shape-editor.h	\
-	ui/tool-factory.cpp	\
-	ui/tool-factory.h	\
-	ui/tools-switch.cpp	\
-	ui/tools-switch.h	\
-	ui/uxmanager.cpp	\
-	ui/uxmanager.h
diff --git a/src/ui/cache/Makefile_insert b/src/ui/cache/Makefile_insert
deleted file mode 100644
index c648777f8..000000000
--- a/src/ui/cache/Makefile_insert
+++ /dev/null
@@ -1,6 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	ui/cache/svg_preview_cache.h	\
-	ui/cache/svg_preview_cache.cpp
-
diff --git a/src/ui/dialog/Makefile_insert b/src/ui/dialog/Makefile_insert
deleted file mode 100644
index 71628973e..000000000
--- a/src/ui/dialog/Makefile_insert
+++ /dev/null
@@ -1,133 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=		\
-	ui/dialog/aboutbox.cpp			\
-	ui/dialog/aboutbox.h			\
-	ui/dialog/align-and-distribute.cpp	\
-	ui/dialog/align-and-distribute.h	\
-	ui/dialog/arrange-tab.h			\
-	ui/dialog/behavior.h			\
-	ui/dialog/calligraphic-profile-rename.h	\
-	ui/dialog/calligraphic-profile-rename.cpp	\
-	ui/dialog/clonetiler.cpp		\
-	ui/dialog/clonetiler.h		\
-	ui/dialog/color-item.cpp		\
-	ui/dialog/color-item.h			\
-	ui/dialog/debug.cpp			\
-	ui/dialog/debug.h			\
-	ui/dialog/desktop-tracker.cpp		\
-	ui/dialog/desktop-tracker.h		\
-	ui/dialog/dialog.cpp			\
-	ui/dialog/dialog.h			\
-	ui/dialog/dialog-manager.cpp		\
-	ui/dialog/dialog-manager.h		\
-	ui/dialog/dock-behavior.cpp		\
-	ui/dialog/dock-behavior.h		\
-	ui/dialog/document-metadata.cpp  	\
-	ui/dialog/document-metadata.h    	\
-	ui/dialog/document-properties.cpp	\
-	ui/dialog/document-properties.h		\
-	ui/dialog/export.cpp		\
-	ui/dialog/export.h		\
-	ui/dialog/extension-editor.cpp		\
-	ui/dialog/extension-editor.h		\
-	ui/dialog/extensions.cpp		\
-	ui/dialog/extensions.h			\
-	ui/dialog/filedialog.cpp		\
-	ui/dialog/filedialog.h			\
-	ui/dialog/filedialogimpl-gtkmm.cpp      \
-	ui/dialog/filedialogimpl-gtkmm.h        \
-	ui/dialog/filedialogimpl-win32.cpp	\
-	ui/dialog/filedialogimpl-win32.h	\
-	ui/dialog/fill-and-stroke.cpp		\
-	ui/dialog/fill-and-stroke.h		\
-	ui/dialog/filter-effects-dialog.cpp	\
-	ui/dialog/filter-effects-dialog.h	\
-	ui/dialog/find.cpp			\
-	ui/dialog/find.h			\
-	ui/dialog/font-substitution.cpp			\
-	ui/dialog/font-substitution.h			\
-	ui/dialog/floating-behavior.cpp		\
-	ui/dialog/floating-behavior.h		\
-	ui/dialog/glyphs.cpp			\
-	ui/dialog/glyphs.h			\
-	ui/dialog/grid-arrange-tab.h		\
-	ui/dialog/grid-arrange-tab.cpp		\
-	ui/dialog/guides.cpp			\
-	ui/dialog/guides.h			\
-	ui/dialog/icon-preview.cpp		\
-	ui/dialog/icon-preview.h		\
-	ui/dialog/inkscape-preferences.cpp	\
-	ui/dialog/inkscape-preferences.h	\
-	ui/dialog/input.cpp			\
-	ui/dialog/input.h			\
-	ui/dialog/knot-properties.cpp		\
-	ui/dialog/knot-properties.h		\
-	ui/dialog/layer-properties.cpp		\
-	ui/dialog/layer-properties.h		\
-	ui/dialog/layers.cpp			\
-	ui/dialog/layers.h			\
-	ui/dialog/livepatheffect-add.cpp	\
-	ui/dialog/livepatheffect-add.h	\
-	ui/dialog/livepatheffect-editor.cpp	\
-	ui/dialog/livepatheffect-editor.h	\
-	ui/dialog/memory.cpp			\
-	ui/dialog/memory.h			\
-	ui/dialog/messages.cpp			\
-	ui/dialog/messages.h			\
-	ui/dialog/new-from-template.cpp		\
-	ui/dialog/new-from-template.h		\
-	ui/dialog/ocaldialogs.cpp		\
-	ui/dialog/ocaldialogs.h			\
-	ui/dialog/object-attributes.cpp \
-	ui/dialog/object-attributes.h	\
-	ui/dialog/object-properties.cpp \
-	ui/dialog/object-properties.h	\
-	ui/dialog/panel-dialog.h		\
-	ui/dialog/polar-arrange-tab.cpp		\
-	ui/dialog/polar-arrange-tab.h		\
-	ui/dialog/print.cpp			\
-	ui/dialog/print.h			\
-	ui/dialog/print-colors-preview-dialog.cpp		\
-	ui/dialog/print-colors-preview-dialog.h		\
-	ui/dialog/spellcheck.cpp		\
-	ui/dialog/spellcheck.h		\
-	ui/dialog/svg-fonts-dialog.cpp		\
-	ui/dialog/svg-fonts-dialog.h		\
-	ui/dialog/swatches.cpp			\
-	ui/dialog/swatches.h			\
-	ui/dialog/symbols.cpp			\
-	ui/dialog/symbols.h			\
-	ui/dialog/template-load-tab.cpp		\
-	ui/dialog/template-load-tab.h		\
-	ui/dialog/template-widget.cpp		\
-	ui/dialog/template-widget.h		\
-	ui/dialog/tags.cpp			\
-	ui/dialog/tags.h			\
-	ui/dialog/text-edit.cpp			\
-	ui/dialog/text-edit.h			\
-	ui/dialog/tile.cpp			\
-	ui/dialog/tile.h			\
-	ui/dialog/pixelartdialog.cpp		\
-	ui/dialog/pixelartdialog.h		\
-	ui/dialog/transformation.cpp		\
-	ui/dialog/transformation.h		\
-	ui/dialog/undo-history.cpp		\
-	ui/dialog/undo-history.h		\
-	ui/dialog/xml-tree.cpp		\
-	ui/dialog/xml-tree.h		\
-	ui/dialog/lpe-powerstroke-properties.cpp	\
-	ui/dialog/lpe-powerstroke-properties.h	\
-	ui/dialog/objects.cpp	\
-	ui/dialog/objects.h	\
-	ui/dialog/lpe-fillet-chamfer-properties.cpp		\
-	ui/dialog/lpe-fillet-chamfer-properties.h		\
-	$(inkboard_dialogs)
-
-if HAVE_POTRACE
-
-ink_common_sources +=		\
-	ui/dialog/tracedialog.cpp		\
-	ui/dialog/tracedialog.h
-
-endif
diff --git a/src/ui/tool/Makefile_insert b/src/ui/tool/Makefile_insert
deleted file mode 100644
index f46f48b72..000000000
--- a/src/ui/tool/Makefile_insert
+++ /dev/null
@@ -1,30 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources += \
-	ui/tool/control-point.cpp		\
-	ui/tool/control-point.h			\
-	ui/tool/control-point-selection.cpp	\
-	ui/tool/control-point-selection.h	\
-	ui/tool/commit-events.h			\
-	ui/tool/curve-drag-point.cpp		\
-	ui/tool/curve-drag-point.h		\
-	ui/tool/event-utils.cpp			\
-	ui/tool/event-utils.h			\
-	ui/tool/manipulator.cpp			\
-	ui/tool/manipulator.h			\
-	ui/tool/modifier-tracker.cpp			\
-	ui/tool/modifier-tracker.h			\
-	ui/tool/multi-path-manipulator.cpp	\
-	ui/tool/multi-path-manipulator.h	\
-	ui/tool/node.cpp			\
-	ui/tool/node.h				\
-	ui/tool/node-types.h			\
-	ui/tool/path-manipulator.cpp		\
-	ui/tool/path-manipulator.h		\
-	ui/tool/selectable-control-point.cpp	\
-	ui/tool/selectable-control-point.h	\
-	ui/tool/selector.cpp			\
-	ui/tool/selector.h			\
-	ui/tool/shape-record.h			\
-	ui/tool/transform-handle-set.cpp	\
-	ui/tool/transform-handle-set.h
diff --git a/src/ui/tools/Makefile_insert b/src/ui/tools/Makefile_insert
deleted file mode 100644
index 686dfedd8..000000000
--- a/src/ui/tools/Makefile_insert
+++ /dev/null
@@ -1,34 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources += \
-	ui/tools/arc-tool.cpp ui/tools/arc-tool.h						\
-	ui/tools/box3d-tool.cpp ui/tools/box3d-tool.h					\
-	ui/tools/calligraphic-tool.cpp ui/tools/calligraphic-tool.h		\
-	ui/tools/connector-tool.cpp ui/tools/connector-tool.h			\
-	ui/tools/dropper-tool.cpp ui/tools/dropper-tool.h				\
-	ui/tools/dynamic-base.cpp ui/tools/dynamic-base.h				\
-	ui/tools/eraser-tool.cpp ui/tools/eraser-tool.h					\
-	ui/tools/freehand-base.cpp ui/tools/freehand-base.h				\
-	ui/tools/gradient-tool.cpp ui/tools/gradient-tool.h				\
-	ui/tools/lpe-tool.cpp ui/tools/lpe-tool.h						\
-	ui/tools/measure-tool.cpp ui/tools/measure-tool.h				\
-	ui/tools/mesh-tool.cpp ui/tools/mesh-tool.h						\
-	ui/tools/node-tool.cpp ui/tools/node-tool.h						\
-	ui/tools/pen-tool.cpp	ui/tools/pen-tool.h						\
-	ui/tools/pencil-tool.cpp ui/tools/pencil-tool.h					\
-	ui/tools/rect-tool.cpp ui/tools/rect-tool.h						\
-	ui/tools/select-tool.cpp ui/tools/select-tool.h					\
-	ui/tools/spiral-tool.cpp ui/tools/spiral-tool.h					\
-	ui/tools/spray-tool.cpp ui/tools/spray-tool.h					\
-	ui/tools/star-tool.cpp ui/tools/star-tool.h						\
-	ui/tools/text-tool.cpp ui/tools/text-tool.h						\
-	ui/tools/tool-base.cpp ui/tools/tool-base.h						\
-	ui/tools/tweak-tool.cpp ui/tools/tweak-tool.h					\
-	ui/tools/zoom-tool.cpp ui/tools/zoom-tool.h
-
-if HAVE_POTRACE
-
-ink_common_sources += \
-	ui/tools/flood-tool.cpp ui/tools/flood-tool.h
-
-endif
diff --git a/src/ui/view/Makefile_insert b/src/ui/view/Makefile_insert
deleted file mode 100644
index b3ab598d4..000000000
--- a/src/ui/view/Makefile_insert
+++ /dev/null
@@ -1,9 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=		\
-	ui/view/edit-widget-interface.h \
-	ui/view/view.h			\
-	ui/view/view.cpp		\
-	ui/view/view-widget.cpp \
-	ui/view/view-widget.h
-
diff --git a/src/ui/widget/Makefile_insert b/src/ui/widget/Makefile_insert
deleted file mode 100644
index b22e4bd74..000000000
--- a/src/ui/widget/Makefile_insert
+++ /dev/null
@@ -1,106 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	ui/widget/anchor-selector.h	\
-	ui/widget/anchor-selector.cpp	\
-	ui/widget/attr-widget.h	\
-	ui/widget/button.h	\
-	ui/widget/button.cpp	\
-	ui/widget/color-entry.cpp    \
-	ui/widget/color-entry.h     \
-	ui/widget/color-icc-selector.cpp	\
-	ui/widget/color-icc-selector.h	\
-	ui/widget/color-notebook.cpp   \
-	ui/widget/color-notebook.h  \
-	ui/widget/color-wheel-selector.cpp    \
-	ui/widget/color-wheel-selector.h    \
-	ui/widget/color-picker.cpp     \
-	ui/widget/color-picker.h        \
-	ui/widget/color-preview.cpp     \
-	ui/widget/color-preview.h       \
-	ui/widget/color-slider.cpp      \
-	ui/widget/color-slider.h       \
-	ui/widget/color-scales.cpp   \
-	ui/widget/color-scales.h    \
-	ui/widget/combo-enums.h \
-	ui/widget/dock.h		\
-	ui/widget/dock.cpp		\
-	ui/widget/dock-item.h		\
-	ui/widget/dock-item.cpp		\
-	ui/widget/entity-entry.cpp      \
-	ui/widget/entity-entry.h        \
-	ui/widget/entry.cpp      \
-	ui/widget/entry.h        \
-	ui/widget/filter-effect-chooser.h \
-	ui/widget/filter-effect-chooser.cpp \
-	ui/widget/font-variants.h      	\
-	ui/widget/font-variants.cpp     \
-	ui/widget/frame.cpp      \
-	ui/widget/frame.h        \
-	ui/widget/imageicon.cpp		\
-	ui/widget/imageicon.h		\
-	ui/widget/imagetoggler.cpp		\
-	ui/widget/imagetoggler.h		\
-	ui/widget/labelled.cpp		\
-	ui/widget/labelled.h		\
-	ui/widget/layer-selector.cpp	\
-	ui/widget/layer-selector.h	\
-	ui/widget/licensor.cpp          \
-	ui/widget/licensor.h		\
-	ui/widget/notebook-page.cpp	\
-	ui/widget/notebook-page.h	\
-	ui/widget/object-composite-settings.cpp	\
-	ui/widget/object-composite-settings.h	\
-	ui/widget/page-sizer.cpp        \
-	ui/widget/page-sizer.h          \
-	ui/widget/panel.cpp		\
-	ui/widget/panel.h		\
-	ui/widget/point.cpp		\
-	ui/widget/point.h		\
-	ui/widget/preferences-widget.cpp \
-	ui/widget/preferences-widget.h   \
-	ui/widget/random.cpp \
-	ui/widget/random.h   \
-	ui/widget/registered-widget.cpp \
-	ui/widget/registered-widget.h   \
-	ui/widget/registered-enums.h   \
-	ui/widget/registry.cpp          \
-	ui/widget/registry.h            \
-	ui/widget/rendering-options.cpp          \
-	ui/widget/rendering-options.h            \
-	ui/widget/rotateable.h            \
-	ui/widget/rotateable.cpp            \
-	ui/widget/scalar-unit.cpp	\
-	ui/widget/scalar-unit.h		\
-	ui/widget/scalar.cpp		\
-	ui/widget/scalar.h		\
-	ui/widget/selected-style.h	\
-	ui/widget/selected-style.cpp	\
-	ui/widget/spinbutton.h	\
-	ui/widget/spinbutton.cpp	\
-	ui/widget/spin-scale.h		\
-	ui/widget/spin-scale.cpp	\
-	ui/widget/spin-slider.h		\
-	ui/widget/spin-slider.cpp	\
-	ui/widget/style-subject.h	\
-	ui/widget/style-subject.cpp	\
-	ui/widget/style-swatch.h        \
-	ui/widget/style-swatch.cpp      \
-	ui/widget/text.cpp		\
-	ui/widget/text.h		\
-	ui/widget/tolerance-slider.cpp  \
-	ui/widget/tolerance-slider.h    \
-	ui/widget/unit-menu.cpp		\
-	ui/widget/unit-menu.h \
-	ui/widget/unit-tracker.h \
-	ui/widget/unit-tracker.cpp	\
-	ui/widget/clipmaskicon.cpp	\
-	ui/widget/clipmaskicon.h	\
-	ui/widget/highlight-picker.cpp	\
-	ui/widget/highlight-picker.h	\
-	ui/widget/layertypeicon.cpp	\
-	ui/widget/layertypeicon.h	\
-	ui/widget/insertordericon.cpp	\
-	ui/widget/insertordericon.h	\
-	ui/widget/addtoicon.cpp	\
-	ui/widget/addtoicon.h
diff --git a/src/util/Makefile_insert b/src/util/Makefile_insert
deleted file mode 100644
index 2a778e660..000000000
--- a/src/util/Makefile_insert
+++ /dev/null
@@ -1,49 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-util/all: util/libutil.a
-
-util/clean:
-	rm -f util/libutil.a $(util_libutil_a_OBJECTS)
-
-util_libutil_a_SOURCES = \
-	util/ziptool.h \
-	util/ziptool.cpp	\
-	util/accumulators.h	\
-	util/compose.hpp	\
-	util/copy.h \
-	util/enums.h \
-	util/ege-appear-time-tracker.cpp	\
-	util/ege-appear-time-tracker.h	\
-	util/ege-tags.h \
-	util/ege-tags.cpp \
-	util/expression-evaluator.h \
-	util/expression-evaluator.cpp \
-	util/filter-list.h \
-	util/find-if-before.h \
-	util/find-last-if.h \
-	util/fixed_point.h \
-	util/format.h	\
-	util/forward-pointer-iterator.h \
-	util/function.h \
-	util/list.h \
-	util/list-container.h \
-	util/list-copy.h \
-	util/longest-common-suffix.h \
-	util/map-list.h \
-	util/reference.h \
-	util/reverse-list.h \
-	util/share.h \
-	util/share.cpp \
-	util/signal-blocker.h \
-	util/tuple.h \
-	util/ucompose.hpp \
-	util/units.cpp \
-	util/units.h \
-	util/unordered-containers.h
-
-# ######################
-# ### CxxTest stuff ####
-# ######################
-
-CXXTEST_TESTSUITES += \
-	$(srcdir)/util/list-container-test.h
diff --git a/src/widgets/Makefile_insert b/src/widgets/Makefile_insert
deleted file mode 100644
index 99a85c5b6..000000000
--- a/src/widgets/Makefile_insert
+++ /dev/null
@@ -1,129 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	widgets/arc-toolbar.cpp		\
-	widgets/arc-toolbar.h		\
-	widgets/box3d-toolbar.cpp		\
-	widgets/box3d-toolbar.h		\
-	widgets/button.cpp		\
-	widgets/button.h		\
-	widgets/calligraphy-toolbar.cpp		\
-	widgets/calligraphy-toolbar.h		\
-	widgets/connector-toolbar.cpp		\
-	widgets/connector-toolbar.h		\
-	widgets/dash-selector.cpp	\
-	widgets/dash-selector.h		\
-	widgets/desktop-widget.cpp	\
-	widgets/desktop-widget.h	\
-	widgets/dropper-toolbar.cpp		\
-	widgets/dropper-toolbar.h		\
-	widgets/eek-preview.cpp		\
-	widgets/eek-preview.h		\
-	widgets/ege-adjustment-action.cpp	\
-	widgets/ege-adjustment-action.h		\
-	widgets/ege-paint-def.cpp	\
-	widgets/ege-paint-def.h		\
-	widgets/ege-output-action.cpp	\
-	widgets/ege-output-action.h	\
-	widgets/ege-select-one-action.cpp	\
-	widgets/ege-select-one-action.h		\
-	widgets/eraser-toolbar.cpp		\
-	widgets/eraser-toolbar.h		\
-	widgets/fill-style.cpp		\
-	widgets/fill-style.h		\
-	widgets/fill-n-stroke-factory.h	\
-	widgets/font-selector.cpp	\
-	widgets/font-selector.h		\
-	widgets/gradient-image.cpp	\
-	widgets/gradient-image.h	\
-	widgets/gradient-selector.cpp	\
-	widgets/gradient-selector.h	\
-	widgets/gradient-toolbar.cpp	\
-	widgets/gradient-toolbar.h	\
-	widgets/gradient-vector.cpp	\
-	widgets/gradient-vector.h	\
-	widgets/icon.cpp		\
-	widgets/icon.h			\
-        widgets/image-menu-item.c       \
-        widgets/image-menu-item.h       \
-	widgets/ink-action.cpp		\
-	widgets/ink-action.h		\
-	widgets/ink-comboboxentry-action.cpp	\
-	widgets/ink-comboboxentry-action.h	\
-	widgets/ink-radio-action.cpp       \
-	widgets/ink-radio-action.h         \
-	widgets/ink-toggle-action.cpp      \
-	widgets/ink-toggle-action.h        \
-	widgets/ink-tool-menu-action.cpp   \
-	widgets/ink-tool-menu-action.h     \
-	widgets/lpe-toolbar.cpp	\
-	widgets/lpe-toolbar.h	   \
-	widgets/measure-toolbar.cpp	\
-	widgets/measure-toolbar.h	\
-	widgets/mesh-toolbar.cpp	\
-	widgets/mesh-toolbar.h		\
-	widgets/node-toolbar.cpp	\
-	widgets/node-toolbar.h	\
-	widgets/paint-selector.cpp	\
-	widgets/paint-selector.h	\
-	widgets/pencil-toolbar.cpp	\
-	widgets/pencil-toolbar.h	   \
-	widgets/rect-toolbar.cpp	\
-	widgets/rect-toolbar.h	   \
-	widgets/gimp/gimpspinscale.c	\
-	widgets/gimp/gimpspinscale.h       \
-	widgets/gimp/gimpcolorwheel.c \
-	widgets/gimp/gimpcolorwheel.h \
-	widgets/gimp/ruler.cpp		\
-	widgets/gimp/ruler.h			\
-	widgets/select-toolbar.cpp	\
-	widgets/select-toolbar.h	\
-	widgets/spray-toolbar.cpp		\
-	widgets/spray-toolbar.h		\
-	widgets/spiral-toolbar.cpp		\
-	widgets/spiral-toolbar.h		\
-	widgets/sp-attribute-widget.cpp	\
-	widgets/sp-attribute-widget.h	\
-	widgets/sp-color-selector.cpp	\
-	widgets/sp-color-selector.h	\
-	widgets/spinbutton-events.cpp	\
-	widgets/spinbutton-events.h	\
-	widgets/sp-widget.cpp		\
-	widgets/sp-widget.h		\
-	widgets/spw-utilities.cpp	\
-	widgets/spw-utilities.h		\
-	widgets/sp-xmlview-attr-list.cpp	\
-	widgets/sp-xmlview-attr-list.h	\
-	widgets/sp-xmlview-content.cpp	\
-	widgets/sp-xmlview-content.h	\
-	widgets/sp-xmlview-tree.cpp	\
-	widgets/sp-xmlview-tree.h	\
-	widgets/star-toolbar.cpp		\
-	widgets/star-toolbar.h		\
-	widgets/stroke-marker-selector.cpp	\
-	widgets/stroke-marker-selector.h		\
-	widgets/stroke-style.cpp	\
-	widgets/stroke-style.h		\
-	widgets/swatch-selector.cpp	\
-	widgets/swatch-selector.h	\
-	widgets/text-toolbar.cpp		\
-	widgets/text-toolbar.h		\
-	widgets/toolbox.cpp		\
-	widgets/toolbox.h		\
-	widgets/tweak-toolbar.cpp		\
-	widgets/tweak-toolbar.h		\
-	widgets/widget-sizes.h		\
-	widgets/zoom-toolbar.cpp		\
-	widgets/zoom-toolbar.h \
-	widgets/widget-sizes.h
-
-if HAVE_POTRACE
-
-ink_common_sources +=	\
-	widgets/paintbucket-toolbar.cpp	\
-	widgets/paintbucket-toolbar.h
-
-endif
-
-widgets/button.$(OBJEXT): helper/sp-marshal.h
-widgets/menu.$(OBJEXT): helper/sp-marshal.h
diff --git a/src/xml/Makefile_insert b/src/xml/Makefile_insert
deleted file mode 100644
index da55d7f7e..000000000
--- a/src/xml/Makefile_insert
+++ /dev/null
@@ -1,51 +0,0 @@
-## Makefile.am fragment sourced by src/Makefile.am.
-
-ink_common_sources +=	\
-	xml/comment-node.h \
-	xml/composite-node-observer.cpp xml/composite-node-observer.h \
-	xml/element-node.h \
-	xml/helper-observer.cpp	\
-	xml/helper-observer.h	\
-	xml/node-observer.h \
-	xml/quote.cpp	\
-	xml/quote.h	\
-	xml/repr-css.cpp	\
-	xml/log-builder.cpp	\
-	xml/log-builder.h	\
-	xml/node-fns.cpp	\
-	xml/node-fns.h	\
-	xml/pi-node.h	\
-	xml/rebase-hrefs.cpp	\
-	xml/rebase-hrefs.h	\
-	xml/repr-io.cpp	\
-	xml/repr-sorting.cpp    \
-	xml/repr-sorting.h      \
-	xml/repr-util.cpp	\
-	xml/repr.cpp	\
-	xml/repr.h	\
-	xml/simple-document.h \
-	xml/simple-document.cpp \
-	xml/simple-node.h \
-	xml/simple-node.cpp \
-	xml/node.h \
-	xml/croco-node-iface.cpp	\
-	xml/croco-node-iface.h	\
-	xml/attribute-record.h \
-	xml/sp-css-attr.h \
-	xml/event.cpp xml/event.h xml/event-fns.h	\
-	xml/document.h \
-	xml/node-event-vector.h \
-	xml/node-iterators.h	\
-	xml/sp-css-attr.h \
-	xml/subtree.cpp	\
-	xml/subtree.h	\
-	xml/text-node.h \
-	xml/invalid-operation-exception.h
-
-# ######################
-# ### CxxTest stuff ####
-# ######################
-CXXTEST_TESTSUITES += \
-	$(srcdir)/xml/rebase-hrefs-test.h	\
-	$(srcdir)/xml/repr-action-test.h	\
-	$(srcdir)/xml/quote-test.h
-- 
cgit v1.2.3


From d975ffe7b06db18ba418207270f58ec79eb07ae1 Mon Sep 17 00:00:00 2001
From: Alex Henrie 
Date: Mon, 8 Aug 2016 17:57:01 -0600
Subject: Use Gdk::Seat instead of Gdk::DeviceManager

(bzr r15046.1.1)
---
 src/desktop-events.cpp                  | 12 +++++++++++-
 src/device-manager.cpp                  | 20 +++++++++++++++++---
 src/ui/dialog/filter-effects-dialog.cpp | 12 +++++++++++-
 3 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/src/desktop-events.cpp b/src/desktop-events.cpp
index 1932a9864..5fef8cbfc 100644
--- a/src/desktop-events.cpp
+++ b/src/desktop-events.cpp
@@ -21,7 +21,12 @@
 #include "ui/dialog/guides.h"
 #include "desktop-events.h"
 
-#include 
+#include 
+#if GTK_CHECK_VERSION(3, 20, 0)
+# include 
+#else
+# include 
+#endif
 
 #include <2geom/line.h>
 #include <2geom/angle.h>
@@ -596,8 +601,13 @@ static void init_extended()
     Glib::ustring avoidName("pad");
     auto display = Gdk::Display::get_default();
 
+#if GTK_CHECK_VERSION(3, 20, 0)
+    auto seat = display->get_default_seat();
+    auto const devices = seat->get_slaves(Gdk::SEAT_CAPABILITY_ALL);
+#else
     auto dm = display->get_device_manager();
     auto const devices = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE);	
+#endif
     
     if ( !devices.empty() ) {
         for (auto const dev : devices) {
diff --git a/src/device-manager.cpp b/src/device-manager.cpp
index 68444fe66..6c8d4514c 100644
--- a/src/device-manager.cpp
+++ b/src/device-manager.cpp
@@ -15,13 +15,17 @@
 
 #include 
 
-#include 
+#include 
+
 #include 
+#if GTK_CHECK_VERSION(3, 20, 0)
+# include 
+#else
+# include 
+#endif
 
 #include 
 
-#include 
-
 #define noDEBUG_VERBOSE 1
 
 
@@ -317,8 +321,13 @@ DeviceManagerImpl::DeviceManagerImpl() :
 {
     Glib::RefPtr display = Gdk::Display::get_default();
 
+#if GTK_CHECK_VERSION(3, 20, 0)
+    auto seat = display->get_default_seat();
+    auto devList = seat->get_slaves(Gdk::SEAT_CAPABILITY_ALL);
+#else
     auto dm = display->get_device_manager();
     auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE);	
+#endif
 
     if (fakeList.empty()) {
         createFakeList();
@@ -649,8 +658,13 @@ static void createFakeList() {
 
         // try to find the first *real* core pointer
         Glib::RefPtr display = Gdk::Display::get_default();
+#if GTK_CHECK_VERSION(3, 20, 0)
+        auto seat = display->get_default_seat();
+        auto devList = seat->get_slaves(Gdk::SEAT_CAPABILITY_ALL);
+#else
         auto dm = display->get_device_manager();
         auto devList = dm->list_devices(Gdk::DEVICE_TYPE_SLAVE);	
+#endif
 
         // Set iterator to point at beginning of device list
         std::vector< Glib::RefPtr >::iterator dev = devList.begin();
diff --git a/src/ui/dialog/filter-effects-dialog.cpp b/src/ui/dialog/filter-effects-dialog.cpp
index 97fa47f2f..676dcf31f 100644
--- a/src/ui/dialog/filter-effects-dialog.cpp
+++ b/src/ui/dialog/filter-effects-dialog.cpp
@@ -22,7 +22,12 @@
 #include "dialog-manager.h"
 #include 
 
-#include 
+#include 
+#if GTK_CHECK_VERSION(3, 20, 0)
+# include 
+#else
+# include 
+#endif
 
 #include "ui/widget/spinbutton.h"
 
@@ -1970,8 +1975,13 @@ bool FilterEffectsDialog::PrimitiveList::on_draw_signal(const Cairo::RefPtrget_display();
+#if GTK_CHECK_VERSION(3, 20, 0)
+        auto seat = display->get_default_seat();
+        auto device = seat->get_pointer();
+#else
         auto dm = display->get_device_manager();
         auto device = dm->get_client_pointer();
+#endif
         get_bin_window()->get_device_position(device, mx, my, mask);
 
         // Outline the bottom of the connection area
-- 
cgit v1.2.3


From 5198e76ee434bd68985181d26900d71c1675cc63 Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Tue, 9 Aug 2016 12:32:55 +0100
Subject: Move some main functions to Application class

(bzr r15048)
---
 src/inkscape.cpp | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/inkscape.h   |   3 ++
 src/main.cpp     | 104 +++++-------------------------------------------------
 3 files changed, 116 insertions(+), 96 deletions(-)

diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index a88ef5947..48b921752 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -22,6 +22,10 @@
 
 #include 
 
+#include 
+
+#include 
+#include 
 #include 
 #include "debug/simple-event.h"
 #include "debug/event-tracker.h"
@@ -57,6 +61,7 @@
 #include "inkscape.h"
 #include "io/sys.h"
 #include "message-stack.h"
+#include "path-prefix.h"
 #include "resource-manager.h"
 #include "ui/tools/tool-base.h"
 #include "ui/dialog/debug.h"
@@ -379,6 +384,103 @@ void Application::argv0(char const* argv)
     _argv0 = g_strdup(argv);
 }
 
+/**
+ * \brief Add our icon theme to the search path
+ */
+void
+Application::add_icon_theme()
+{
+    // Get list of the possible folders containing the theme
+    auto dataDirs = Glib::get_system_data_dirs();
+    dataDirs.insert(dataDirs.begin(), Glib::get_user_data_dir());
+
+    auto icon_theme = Gtk::IconTheme::get_default();
+
+    for (auto it : dataDirs)
+    {
+        std::vector listing;
+        listing.push_back(it);
+        listing.push_back("inkscape");
+        listing.push_back("icons");
+        auto dir = Glib::build_filename(listing);
+        icon_theme->append_search_path(dir);
+    }
+
+    // Add our icon directory to the search path for icon theme lookups.
+    auto const usericondir = Inkscape::Application::profile_path("icons");
+    icon_theme->append_search_path(usericondir);
+    icon_theme->append_search_path(INKSCAPE_PIXMAPDIR);
+#ifdef INKSCAPE_THEMEDIR
+    icon_theme->append_search_path(INKSCAPE_THEMEDIR);
+    icon_theme->rescan_if_needed();
+#endif
+    g_free(usericondir);
+}
+
+/**
+ * \brief Add our CSS style sheets
+ */
+void
+Application::add_style_sheet()
+{
+    // Add style sheet (GTK3)
+    auto const screen = Gdk::Screen::get_default();
+
+    Glib::ustring inkscape_style = INKSCAPE_UIDIR;
+    inkscape_style += "/style.css";
+    // std::cout << "CSS Stylesheet Inkscape: " << inkscape_style << std::endl;
+
+    if (Glib::file_test(inkscape_style, Glib::FILE_TEST_EXISTS)) {
+      auto provider = Gtk::CssProvider::create();
+
+      // From 3.16, throws an error which we must catch.
+      try {
+          provider->load_from_path (inkscape_style);
+      }
+#if GTK_CHECK_VERSION(3,16,0)
+      // Gtk::CssProviderError not defined until 3.16.
+      catch (const Gtk::CssProviderError& ex)
+      {
+          std::cerr << "CSSProviderError::load_from_path(): failed to load: " << inkscape_style
+                    << "\n  (" << ex.what() << ")" << std::endl;
+      }
+#else
+      catch (...)
+      {}
+#endif
+
+      Gtk::StyleContext::add_provider_for_screen (screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+    } else {
+        std::cerr << "sp_main_gui: Cannot find default style file:\n  (" << inkscape_style
+                  << ")" << std::endl;
+    }
+
+    Glib::ustring user_style = Inkscape::Application::profile_path("ui/style.css");
+    // std::cout << "CSS Stylesheet User: " << user_style << std::endl;
+
+    if (Glib::file_test(user_style, Glib::FILE_TEST_EXISTS)) {
+      auto provider2 = Gtk::CssProvider::create();
+
+      // From 3.16, throws an error which we must catch.
+      try {
+          provider2->load_from_path (user_style);
+      }
+#if GTK_CHECK_VERSION(3,16,0)
+      // Gtk::CssProviderError not defined until 3.16.
+      catch (const Gtk::CssProviderError& ex)
+      {
+        std::cerr << "CSSProviderError::load_from_path(): failed to load: " << user_style
+                  << "\n  (" << ex.what() << ")" << std::endl;
+      }
+#else
+      catch (...)
+      {}
+#endif
+
+      Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+    }
+
+}
 /* \brief Constructor for the application.
  *  Creates a new Inkscape::Application.
  *
@@ -423,9 +525,12 @@ Application::Application(const char* argv, bool use_gui) :
     }
 
     if (use_gui) {
+        add_icon_theme();
+        add_style_sheet();
         load_menus();
         Inkscape::DeviceManager::getManager().loadConfig();
     }
+
     Inkscape::ResourceManager::getManager();
 
     /* set language for user interface according setting in preferences */
diff --git a/src/inkscape.h b/src/inkscape.h
index fe424377c..3f4416f2f 100644
--- a/src/inkscape.h
+++ b/src/inkscape.h
@@ -205,6 +205,9 @@ private:
     Application& operator=(Application const&); // no assign
     Application* operator&() const; // no pointer access
 
+    void add_icon_theme();
+    void add_style_sheet();
+
     Inkscape::XML::Document * _menus;
     std::map _document_set;
     std::map _selection_models;
diff --git a/src/main.cpp b/src/main.cpp
index 28bdf8359..28ae6992f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -46,7 +46,6 @@
 
 #include 
 
-#include 
 #include 
 
 #include "inkgc/gc-core.h"
@@ -101,9 +100,12 @@
 #endif // WITH_DBUS
 
 #include 
+#include 
+#include 
 #include 
 #include 
 #include 
+#include 
 
 #ifndef HAVE_BIND_TEXTDOMAIN_CODESET
 #define bind_textdomain_codeset(p,c)
@@ -851,8 +853,8 @@ static int sp_common_main( int argc, char const **argv, GSList **flDest )
 
 
     // temporarily switch gettext encoding to locale, so that help messages can be output properly
-    gchar const *charset;
-    g_get_charset(&charset);
+    std::string charset;
+    Glib::get_charset(charset);
 
     bind_textdomain_codeset(GETTEXT_PACKAGE, charset);
 
@@ -998,16 +1000,6 @@ snooper(GdkEvent *event, gpointer /*data*/) {
     gtk_main_do_event (event);
 }
 
-static std::vector getDirectorySet(const gchar* userDir, const gchar* const * systemDirs) {
-    std::vector listing;
-    listing.push_back(userDir);
-    for ( const char* const* cur = systemDirs; *cur; cur++ )
-    {
-        listing.push_back(*cur);
-    }
-    return listing;
-}
-
 int
 sp_main_gui(int argc, char const **argv)
 {
@@ -1017,103 +1009,23 @@ sp_main_gui(int argc, char const **argv)
     int retVal = sp_common_main( argc, argv, &fl );
     g_return_val_if_fail(retVal == 0, 1);
 
-    // Add possible icon entry directories
-    std::vector dataDirs = getDirectorySet( g_get_user_data_dir(),
-                                                           g_get_system_data_dirs() );
-    for (std::vector::iterator it = dataDirs.begin(); it != dataDirs.end(); ++it)
-    {
-        std::vector listing;
-        listing.push_back(*it);
-        listing.push_back("inkscape");
-        listing.push_back("icons");
-        Glib::ustring dir = Glib::build_filename(listing);
-        gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), dir.c_str());
-    }
-
-    // Add our icon directory to the search path for icon theme lookups.
-    gchar *usericondir = Inkscape::Application::profile_path("icons");
-    gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), usericondir);
-    gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), INKSCAPE_PIXMAPDIR);
-#ifdef INKSCAPE_THEMEDIR
-    gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(), INKSCAPE_THEMEDIR);
-    gtk_icon_theme_rescan_if_needed (gtk_icon_theme_get_default());
-#endif
-    g_free(usericondir);
-
-    // Add style sheet (GTK3)
-    Glib::RefPtr screen = Gdk::Screen::get_default();
-
-    Glib::ustring inkscape_style = INKSCAPE_UIDIR;
-    inkscape_style += "/style.css";
-    // std::cout << "CSS Stylesheet Inkscape: " << inkscape_style << std::endl;
-
-    if (g_file_test (inkscape_style.c_str(), G_FILE_TEST_EXISTS)) {
-      Glib::RefPtr provider = Gtk::CssProvider::create();
-
-      // From 3.16, throws an error which we must catch.
-      try {
-          provider->load_from_path (inkscape_style);
-      }
-#if GTK_CHECK_VERSION(3,16,0)
-      // Gtk::CssProviderError not defined until 3.16.
-      catch (const Gtk::CssProviderError& ex)
-      {
-          std::cerr << "CSSProviderError::load_from_path(): failed to load: " << inkscape_style
-                    << "\n  (" << ex.what() << ")" << std::endl;
-      }
-#else
-      catch (...)
-      {}
-#endif
-
-      Gtk::StyleContext::add_provider_for_screen (screen, provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-    } else {
-        std::cerr << "sp_main_gui: Cannot find default style file:\n  (" << inkscape_style
-                  << ")" << std::endl;
-    }
-
-    Glib::ustring user_style = Inkscape::Application::profile_path("ui/style.css");
-    // std::cout << "CSS Stylesheet User: " << user_style << std::endl;
-
-    if (g_file_test (user_style.c_str(), G_FILE_TEST_EXISTS)) {
-      Glib::RefPtr provider2 = Gtk::CssProvider::create();
-
-      // From 3.16, throws an error which we must catch.
-      try {
-          provider2->load_from_path (user_style);
-      }
-#if GTK_CHECK_VERSION(3,16,0)
-      // Gtk::CssProviderError not defined until 3.16.
-      catch (const Gtk::CssProviderError& ex)
-      {
-        std::cerr << "CSSProviderError::load_from_path(): failed to load: " << user_style
-                  << "\n  (" << ex.what() << ")" << std::endl;
-      }
-#else
-      catch (...)
-      {}
-#endif
-
-      Gtk::StyleContext::add_provider_for_screen (screen, provider2, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-    }
-
     gdk_event_handler_set((GdkEventFunc)snooper, NULL, NULL);
     Inkscape::Debug::log_display_config();
 
     // Set default window icon. Obeys the theme.
-    gtk_window_set_default_icon_name("inkscape");
+    Gtk::Window::set_default_icon_name("inkscape");
     // Do things that were previously in inkscape_gtk_stock_init().
     sp_icon_get_phys_size(GTK_ICON_SIZE_MENU);
     Inkscape::UI::Widget::Panel::prep();
 
-    gboolean create_new = TRUE;
+    bool create_new = true;
 
     /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
     Inkscape::Application::create(argv[0], true);
 
     while (fl) {
         if (sp_file_open((gchar *)fl->data,NULL)) {
-            create_new=FALSE;
+            create_new=false;
         }
         fl = g_slist_remove(fl, fl->data);
     }
-- 
cgit v1.2.3


From 860883afa75a3a2f60ed5ffc299447409138736f Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Wed, 10 Aug 2016 11:39:55 +0100
Subject: CloneTiler: C++ify

(bzr r15050)
---
 src/ui/dialog/clonetiler.cpp | 116 ++++++++++++++++---------------------------
 src/ui/dialog/clonetiler.h   |  18 ++++---
 2 files changed, 56 insertions(+), 78 deletions(-)

diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 1fa7a6c71..eb55e06c6 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -66,7 +66,6 @@ static SPDocument *trace_doc = NULL;
 
 CloneTiler::CloneTiler () :
     UI::Widget::Panel ("", "/dialogs/clonetiler/", SP_VERB_DIALOG_CLONETILER),
-    dlg(NULL),
     desktop(NULL),
     deskTrack(),
     table_row_labels(NULL)
@@ -75,9 +74,7 @@ CloneTiler::CloneTiler () :
     contents->set_spacing(0);
     
     {
-        Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-
-        dlg = GTK_WIDGET(gobj());
+        auto prefs = Inkscape::Preferences::get();
 
         auto mainbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
         gtk_box_set_homogeneous(GTK_BOX(mainbox), FALSE);
@@ -769,15 +766,14 @@ CloneTiler::CloneTiler () :
             gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
 
             g_signal_connect(G_OBJECT(b), "toggled",
-                               G_CALLBACK(clonetiler_do_pick_toggled), (gpointer)dlg);
+                               G_CALLBACK(clonetiler_do_pick_toggled), (gpointer)this);
         }
 
         {
             auto vvb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
             gtk_box_set_homogeneous(GTK_BOX(vvb), FALSE);
             gtk_box_pack_start (GTK_BOX (vb), vvb, FALSE, FALSE, 0);
-            g_object_set_data (G_OBJECT(dlg), "dotrace", (gpointer) vvb);
-
+            _dotrace = vvb;
 
             {
                 GtkWidget *frame = gtk_frame_new (_("1. Pick from the drawing:"));
@@ -973,7 +969,7 @@ CloneTiler::CloneTiler () :
             {
                 auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
                 gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
-                g_object_set_data (G_OBJECT(dlg), "rowscols", (gpointer) hb);
+                _rowscols = hb;
 
                 {
                     auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0);
@@ -1018,7 +1014,7 @@ CloneTiler::CloneTiler () :
             {
                 auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
                 gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
-                g_object_set_data (G_OBJECT(dlg), "widthheight", (gpointer) hb);
+                _widthheight = hb;
 
                 // unitmenu
                 unit_menu = new Inkscape::UI::Widget::UnitMenu();
@@ -1081,7 +1077,7 @@ CloneTiler::CloneTiler () :
                 radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: "));
                 gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns"));
                 clonetiler_table_attach (table, radio, 0.0, 1, 1);
-                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) dlg);
+                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) this);
             }
             if (!prefs->getBool(prefs_path + "fillrect")) {
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
@@ -1091,7 +1087,7 @@ CloneTiler::CloneTiler () :
                 radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Width, height: "));
                 gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling"));
                 clonetiler_table_attach (table, radio, 0.0, 2, 1);
-                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) dlg);
+                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) this);
             }
             if (prefs->getBool(prefs_path + "fillrect")) {
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
@@ -1122,7 +1118,7 @@ CloneTiler::CloneTiler () :
             gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
             gtk_box_pack_end (GTK_BOX (mainbox), hb, FALSE, FALSE, 0);
             GtkWidget *l = gtk_label_new("");
-            g_object_set_data (G_OBJECT(dlg), "status", (gpointer) l);
+            _status = l;
             gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0);
         }
 
@@ -1133,20 +1129,20 @@ CloneTiler::CloneTiler () :
             gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0);
 
             {
-                GtkWidget *b = gtk_button_new ();
-                GtkWidget *l = gtk_label_new ("");
-                gtk_label_set_markup_with_mnemonic (GTK_LABEL(l), _(" _Create "));
-                gtk_container_add (GTK_CONTAINER(b), l);
-                gtk_widget_set_tooltip_text (b, _("Create and tile the clones of the selection"));
-                g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_apply), dlg);
-                gtk_box_pack_end (GTK_BOX (hb), b, FALSE, FALSE, 0);
+                auto b = Gtk::manage(new Gtk::Button());
+                auto l = Gtk::manage(new Gtk::Label(""));
+                l->set_markup_with_mnemonic(_(" _Create "));
+                b->add(*l);
+                b->set_tooltip_text(_("Create and tile the clones of the selection"));
+                b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::apply));
+                gtk_box_pack_end (GTK_BOX (hb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0);
             }
 
             { // buttons which are enabled only when there are tiled clones
                 auto sb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
                 gtk_box_set_homogeneous(GTK_BOX(sb), FALSE);
                 gtk_box_pack_end (GTK_BOX (hb), sb, FALSE, FALSE, 0);
-                g_object_set_data (G_OBJECT(dlg), "buttons_on_tiles", (gpointer) sb);
+                _buttons_on_tiles = sb;
                 {
                     // TRANSLATORS: if a group of objects are "clumped" together, then they
                     //  are unevenly spread in the given amount of space - as shown in the
@@ -1160,28 +1156,26 @@ CloneTiler::CloneTiler () :
                 }
 
                 {
-                    GtkWidget *b = gtk_button_new_with_mnemonic (_(" Re_move "));
-                    gtk_widget_set_tooltip_text (b, _("Remove existing tiled clones of the selected object (siblings only)"));
-                    g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_remove), gpointer(dlg));
-                    gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0);
+                    auto b = Gtk::manage(new Gtk::Button(_(" Re_move "), true));
+                    b->set_tooltip_text(_("Remove existing tiled clones of the selected object (siblings only)"));
+                    b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::on_remove_button_clicked));
+                    gtk_box_pack_end (GTK_BOX (sb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0);
                 }
 
                 // connect to global selection changed signal (so we can change desktops) and
                 // external_change (so we're not fooled by undo)
-                selectChangedConn = INKSCAPE.signal_selection_changed.connect(sigc::bind(sigc::ptr_fun(&CloneTiler::clonetiler_change_selection), dlg));
-                externChangedConn = INKSCAPE.signal_external_change.connect   (sigc::bind(sigc::ptr_fun(&CloneTiler::clonetiler_external_change), dlg));
-
-                g_signal_connect(G_OBJECT(dlg), "destroy", G_CALLBACK(clonetiler_disconnect_gsignal), this);
+                selectChangedConn = INKSCAPE.signal_selection_changed.connect(sigc::mem_fun(*this, &CloneTiler::change_selection));
+                externChangedConn = INKSCAPE.signal_external_change.connect(sigc::mem_fun(*this, &CloneTiler::external_change));
 
                 // update now
-                clonetiler_change_selection (SP_ACTIVE_DESKTOP->getSelection(), dlg);
+                change_selection(SP_ACTIVE_DESKTOP->getSelection());
             }
 
             {
                 GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset "));
                 // TRANSLATORS: "change" is a noun here
                 gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"));
-                g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), dlg);
+                g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), this);
                 gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
             }
         }
@@ -1199,8 +1193,9 @@ CloneTiler::CloneTiler () :
 CloneTiler::~CloneTiler (void)
 {
     //subselChangedConn.disconnect();
-    //selectChangedConn.disconnect();
     //selectModifiedConn.disconnect();
+    selectChangedConn.disconnect();
+    externChangedConn.disconnect();
     desktopChangeConn.disconnect();
     deskTrack.disconnect();
     color_changed_connection.disconnect();
@@ -1215,17 +1210,7 @@ void CloneTiler::setDesktop(SPDesktop *desktop)
 void CloneTiler::setTargetDesktop(SPDesktop *desktop)
 {
     if (this->desktop != desktop) {
-        if (this->desktop) {
-            //selectModifiedConn.disconnect();
-            //subselChangedConn.disconnect();
-            //selectChangedConn.disconnect();
-        }
         this->desktop = desktop;
-        if (desktop && desktop->selection) {
-            //selectChangedConn = desktop->selection->connectChanged(sigc::hide(sigc::mem_fun(*this, &CloneTiler::clonetiler_change_selection)));
-            //subselChangedConn = desktop->connectToolSubselectionChanged(sigc::hide(sigc::mem_fun(*this, &CloneTiler::clonetiler_change_selection)));
-            //selectModifiedConn = desktop->selection->connectModified(sigc::hide<0>(sigc::mem_fun(*this, &CloneTiler::clonetiler_change_selection)));
-        }
     }
 }
 
@@ -1245,47 +1230,35 @@ void CloneTiler::on_picker_color_changed(guint rgba)
     is_updating = false;
 }
 
-void CloneTiler::clonetiler_change_selection(Inkscape::Selection *selection, GtkWidget *dlg)
+void CloneTiler::change_selection(Inkscape::Selection *selection)
 {
-    GtkWidget *buttons = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "buttons_on_tiles"));
-    GtkWidget *status = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "status"));
-
     if (selection->isEmpty()) {
-        gtk_widget_set_sensitive (buttons, FALSE);
-        gtk_label_set_markup (GTK_LABEL(status), _("Nothing selected."));
+        gtk_widget_set_sensitive (_buttons_on_tiles, FALSE);
+        gtk_label_set_markup (GTK_LABEL(_status), _("Nothing selected."));
         return;
     }
 
     if (boost::distance(selection->items()) > 1) {
-        gtk_widget_set_sensitive (buttons, FALSE);
-        gtk_label_set_markup (GTK_LABEL(status), _("More than one object selected."));
+        gtk_widget_set_sensitive (_buttons_on_tiles, FALSE);
+        gtk_label_set_markup (GTK_LABEL(_status), _("More than one object selected."));
         return;
     }
 
     guint n = clonetiler_number_of_clones(selection->singleItem());
     if (n > 0) {
-        gtk_widget_set_sensitive (buttons, TRUE);
+        gtk_widget_set_sensitive (_buttons_on_tiles, TRUE);
         gchar *sta = g_strdup_printf (_("Object has %d tiled clones."), n);
-        gtk_label_set_markup (GTK_LABEL(status), sta);
+        gtk_label_set_markup (GTK_LABEL(_status), sta);
         g_free (sta);
     } else {
-        gtk_widget_set_sensitive (buttons, FALSE);
-        gtk_label_set_markup (GTK_LABEL(status), _("Object has no tiled clones."));
+        gtk_widget_set_sensitive (_buttons_on_tiles, FALSE);
+        gtk_label_set_markup (GTK_LABEL(_status), _("Object has no tiled clones."));
     }
 }
 
-void CloneTiler::clonetiler_external_change(GtkWidget *dlg)
-{
-    clonetiler_change_selection (SP_ACTIVE_DESKTOP->getSelection(), dlg);
-}
-
-void CloneTiler::clonetiler_disconnect_gsignal(GObject *, gpointer source)
+void CloneTiler::external_change()
 {
-    g_return_if_fail(source != NULL);
-
-    CloneTiler* dlg = reinterpret_cast(source);
-    dlg->selectChangedConn.disconnect();
-    dlg->externChangedConn.disconnect();
+    change_selection(SP_ACTIVE_DESKTOP->getSelection());
 }
 
 Geom::Affine CloneTiler::clonetiler_get_transform(
@@ -2032,7 +2005,7 @@ guint CloneTiler::clonetiler_number_of_clones(SPObject *obj)
     return n;
 }
 
-void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool do_undo/* = true*/)
+void CloneTiler::remove(bool do_undo/* = true*/)
 {
     SPDesktop *desktop = SP_ACTIVE_DESKTOP;
     if (desktop == NULL) {
@@ -2064,7 +2037,7 @@ void CloneTiler::clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool d
     }
     g_slist_free (to_delete);
 
-    clonetiler_change_selection (selection, dlg);
+    change_selection (selection);
 
     if (do_undo) {
         DocumentUndo::done(desktop->getDocument(), SP_VERB_DIALOG_CLONETILER,
@@ -2104,7 +2077,7 @@ double CloneTiler::randomize01(double val, double rand)
 }
 
 
-void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
+void CloneTiler::apply()
 {
     SPDesktop *desktop = SP_ACTIVE_DESKTOP;
     if (desktop == NULL) {
@@ -2129,9 +2102,8 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
     desktop->setWaitingCursor();
 
     // set statusbar text
-    GtkWidget *status = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "status"));
-    gtk_label_set_markup (GTK_LABEL(status), _("Creating tiled clones..."));
-    gtk_widget_queue_draw(GTK_WIDGET(status));
+    gtk_label_set_markup (GTK_LABEL(_status), _("Creating tiled clones..."));
+    gtk_widget_queue_draw(GTK_WIDGET(_status));
     gdk_window_process_all_updates();
 
     SPObject *obj = selection->singleItem();
@@ -2144,7 +2116,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
     const char *id_href = g_strdup_printf("#%s", obj_repr->attribute("id"));
     SPObject *parent = obj->parent;
 
-    clonetiler_remove (NULL, dlg, false);
+    remove(false);
 
     Geom::Scale scale = desktop->getDocument()->getDocumentScale().inverse();
     double scale_units = scale[Geom::X]; // Use just x direction....
@@ -2542,7 +2514,7 @@ void CloneTiler::clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg)
         clonetiler_trace_finish ();
     }
 
-    clonetiler_change_selection (selection, dlg);
+    change_selection(selection);
 
     desktop->clearWaitingCursor();
 
diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h
index e76ad028e..9ad3fa878 100644
--- a/src/ui/dialog/clonetiler.h
+++ b/src/ui/dialog/clonetiler.h
@@ -41,7 +41,6 @@ protected:
     void clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col);
 
     static void clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/);
-    static void clonetiler_remove(GtkWidget */*widget*/, GtkWidget *dlg, bool do_undo = true);
     static void on_picker_color_changed(guint rgba);
     static void clonetiler_trace_hide_tiled_clones_recursively(SPObject *from);
     static void clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data);
@@ -55,11 +54,7 @@ protected:
     static void clonetiler_switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg);
     static void clonetiler_switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg);
     static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/);
-    static void clonetiler_apply(GtkWidget */*widget*/, GtkWidget *dlg);
     static void clonetiler_unclump(GtkWidget */*widget*/, void *);
-    static void clonetiler_change_selection(Inkscape::Selection *selection, GtkWidget *dlg);
-    static void clonetiler_external_change(GtkWidget *dlg);
-    static void clonetiler_disconnect_gsignal(GObject *widget, gpointer source);
     static void clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg);
     static guint clonetiler_number_of_clones(SPObject *obj);
     static void clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
@@ -71,6 +66,12 @@ protected:
     static void clonetiler_value_changed(GtkAdjustment *adj, gpointer data);
     static void clonetiler_reset_recursive(GtkWidget *w);
 
+    void apply();
+    void change_selection(Inkscape::Selection *selection);
+    void external_change();
+    void remove(bool do_undo = true);
+    void on_remove_button_clicked() {remove();}
+
     static Geom::Affine clonetiler_get_transform(    // symmetry group
             int type,
 
@@ -112,7 +113,6 @@ private:
     CloneTiler(CloneTiler const &d);
     CloneTiler& operator=(CloneTiler const &d);
 
-    GtkWidget *dlg;
     GtkWidget *nb;
     GtkWidget *b;
     SPDesktop *desktop;
@@ -142,6 +142,12 @@ private:
      */
     void setTargetDesktop(SPDesktop *desktop);
 
+    // Variables that used to be set using GObject
+    GtkWidget *_buttons_on_tiles;
+    GtkWidget *_dotrace;
+    GtkWidget *_status;
+    GtkWidget *_rowscols;
+    GtkWidget *_widthheight;
 };
 
 
-- 
cgit v1.2.3


From 349e2e3bc0b11c89a0a791e7feedfc9e0c457e5d Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Wed, 10 Aug 2016 12:39:30 +0100
Subject: CloneTiler: Further C++ification

(bzr r15051)
---
 src/ui/dialog/clonetiler.cpp | 511 ++++++++++++++++++++++---------------------
 src/ui/dialog/clonetiler.h   |  65 +++---
 2 files changed, 292 insertions(+), 284 deletions(-)

diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index eb55e06c6..8bd5cd5f6 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -22,7 +22,9 @@
 
 #include 
 #include <2geom/transforms.h>
+
 #include 
+#include 
 
 #include "desktop.h"
 
@@ -88,7 +90,7 @@ CloneTiler::CloneTiler () :
 
         // Symmetry
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("_Symmetry"));
+            GtkWidget *vb = new_tab (nb, _("_Symmetry"));
 
         /* TRANSLATORS: For the following 17 symmetry groups, see
              * http://www.bib.ulb.ac.be/coursmath/doc/17.htm (visual examples);
@@ -149,16 +151,16 @@ CloneTiler::CloneTiler () :
         gtk_combo_box_set_active (GTK_COMBO_BOX (combo), current);
 
         g_signal_connect(G_OBJECT(combo), "changed",
-                    G_CALLBACK(clonetiler_symgroup_changed), NULL);
+                    G_CALLBACK(symgroup_changed), NULL);
         }
 
         table_row_labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
 
         // Shift
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("S_hift"));
+            GtkWidget *vb = new_tab (nb, _("S_hift"));
 
-            GtkWidget *table = clonetiler_table_x_y_rand (3);
+            GtkWidget *table = table_x_y_rand (3);
             gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0);
 
             // X
@@ -168,29 +170,29 @@ CloneTiler::CloneTiler () :
                     // xgettext:no-c-format
                 gtk_label_set_markup (GTK_LABEL(l), _("Shift X:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 2, 1);
+                table_attach (table, l, 1, 2, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                    _("Horizontal shift per row (in % of tile width)"), "shiftx_per_j",
                    -10000, 10000, "%");
-                clonetiler_table_attach (table, l, 0, 2, 2);
+                table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                    _("Horizontal shift per column (in % of tile width)"), "shiftx_per_i",
                    -10000, 10000, "%");
-                clonetiler_table_attach (table, l, 0, 2, 3);
+                table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand",
+                GtkWidget *l = spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand",
                                                    0, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 2, 4);
+                table_attach (table, l, 0, 2, 4);
             }
 
             // Y
@@ -200,30 +202,30 @@ CloneTiler::CloneTiler () :
                     // xgettext:no-c-format
                 gtk_label_set_markup (GTK_LABEL(l), _("Shift Y:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 3, 1);
+                table_attach (table, l, 1, 3, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical shift per row (in % of tile height)"), "shifty_per_j",
                                                    -10000, 10000, "%");
-                clonetiler_table_attach (table, l, 0, 3, 2);
+                table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical shift per column (in % of tile height)"), "shifty_per_i",
                                                    -10000, 10000, "%");
-                clonetiler_table_attach (table, l, 0, 3, 3);
+                table_attach (table, l, 0, 3, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                                                    _("Randomize the vertical shift by this percentage"), "shifty_rand",
                                                    0, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 3, 4);
+                table_attach (table, l, 0, 3, 4);
             }
 
             // Exponent
@@ -231,21 +233,21 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Exponent:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 4, 1);
+                table_attach (table, l, 1, 4, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                                                    _("Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"), "shifty_exp",
                                                    0, 10, "", true);
-                clonetiler_table_attach (table, l, 0, 4, 2);
+                table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                                                    _("Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"), "shiftx_exp",
                                                    0, 10, "", true);
-                clonetiler_table_attach (table, l, 0, 4, 3);
+                table_attach (table, l, 0, 4, 3);
             }
 
             { // alternates
@@ -253,17 +255,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Alternate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Alternate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 5, 1);
+                table_attach (table, l, 1, 5, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate");
-                clonetiler_table_attach (table, l, 0, 5, 2);
+                GtkWidget *l = checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate");
+                table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate");
-                clonetiler_table_attach (table, l, 0, 5, 3);
+                GtkWidget *l = checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate");
+                table_attach (table, l, 0, 5, 3);
             }
 
             { // Cumulate
@@ -271,17 +273,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Cumulate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Cumulate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 6, 1);
+                table_attach (table, l, 1, 6, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate");
-                clonetiler_table_attach (table, l, 0, 6, 2);
+                GtkWidget *l = checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate");
+                table_attach (table, l, 0, 6, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate");
-                clonetiler_table_attach (table, l, 0, 6, 3);
+                GtkWidget *l = checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate");
+                table_attach (table, l, 0, 6, 3);
             }
 
             { // Exclude tile width and height in shift
@@ -289,17 +291,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Cumulate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Exclude tile:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 7, 1);
+                table_attach (table, l, 1, 7, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Exclude tile height in shift"), "shifty_excludeh");
-                clonetiler_table_attach (table, l, 0, 7, 2);
+                GtkWidget *l = checkbox (_("Exclude tile height in shift"), "shifty_excludeh");
+                table_attach (table, l, 0, 7, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Exclude tile width in shift"), "shiftx_excludew");
-                clonetiler_table_attach (table, l, 0, 7, 3);
+                GtkWidget *l = checkbox (_("Exclude tile width in shift"), "shiftx_excludew");
+                table_attach (table, l, 0, 7, 3);
             }
 
         }
@@ -307,9 +309,9 @@ CloneTiler::CloneTiler () :
 
         // Scale
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("Sc_ale"));
+            GtkWidget *vb = new_tab (nb, _("Sc_ale"));
 
-            GtkWidget *table = clonetiler_table_x_y_rand (2);
+            GtkWidget *table = table_x_y_rand (2);
             gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0);
 
             // X
@@ -317,29 +319,29 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Scale X:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 2, 1);
+                table_attach (table, l, 1, 2, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Horizontal scale per row (in % of tile width)"), "scalex_per_j",
                                                    -100, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 2, 2);
+                table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Horizontal scale per column (in % of tile width)"), "scalex_per_i",
                                                    -100, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 2, 3);
+                table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand",
+                GtkWidget *l = spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand",
                                                    0, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 2, 4);
+                table_attach (table, l, 0, 2, 4);
             }
 
             // Y
@@ -347,29 +349,29 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Scale Y:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 3, 1);
+                table_attach (table, l, 1, 3, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical scale per row (in % of tile height)"), "scaley_per_j",
                                                    -100, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 3, 2);
+                table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical scale per column (in % of tile height)"), "scaley_per_i",
                                                    -100, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 3, 3);
+                table_attach (table, l, 0, 3, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand",
+                GtkWidget *l = spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand",
                                                    0, 1000, "%");
-                clonetiler_table_attach (table, l, 0, 3, 4);
+                table_attach (table, l, 0, 3, 4);
             }
 
             // Exponent
@@ -377,19 +379,19 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Exponent:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 4, 1);
+                table_attach (table, l, 1, 4, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp",
+                GtkWidget *l = spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp",
                                                    0, 10, "", true);
-                clonetiler_table_attach (table, l, 0, 4, 2);
+                table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp",
+                GtkWidget *l = spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp",
                                                    0, 10, "", true);
-                clonetiler_table_attach (table, l, 0, 4, 3);
+                table_attach (table, l, 0, 4, 3);
             }
 
             // Logarithmic (as in logarithmic spiral)
@@ -397,19 +399,19 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Base:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 5, 1);
+                table_attach (table, l, 1, 5, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log",
+                GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log",
                                                    0, 10, "", false);
-                clonetiler_table_attach (table, l, 0, 5, 2);
+                table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log",
+                GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log",
                                                    0, 10, "", false);
-                clonetiler_table_attach (table, l, 0, 5, 3);
+                table_attach (table, l, 0, 5, 3);
             }
 
             { // alternates
@@ -417,17 +419,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Alternate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Alternate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 6, 1);
+                table_attach (table, l, 1, 6, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate");
-                clonetiler_table_attach (table, l, 0, 6, 2);
+                GtkWidget *l = checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate");
+                table_attach (table, l, 0, 6, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate");
-                clonetiler_table_attach (table, l, 0, 6, 3);
+                GtkWidget *l = checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate");
+                table_attach (table, l, 0, 6, 3);
             }
 
             { // Cumulate
@@ -435,17 +437,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Cumulate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Cumulate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 7, 1);
+                table_attach (table, l, 1, 7, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Cumulate the scales for each row"), "scaley_cumulate");
-                clonetiler_table_attach (table, l, 0, 7, 2);
+                GtkWidget *l = checkbox (_("Cumulate the scales for each row"), "scaley_cumulate");
+                table_attach (table, l, 0, 7, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Cumulate the scales for each column"), "scalex_cumulate");
-                clonetiler_table_attach (table, l, 0, 7, 3);
+                GtkWidget *l = checkbox (_("Cumulate the scales for each column"), "scalex_cumulate");
+                table_attach (table, l, 0, 7, 3);
             }
 
         }
@@ -453,9 +455,9 @@ CloneTiler::CloneTiler () :
 
         // Rotation
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("_Rotation"));
+            GtkWidget *vb = new_tab (nb, _("_Rotation"));
 
-            GtkWidget *table = clonetiler_table_x_y_rand (1);
+            GtkWidget *table = table_x_y_rand (1);
             gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0);
 
             // Angle
@@ -463,29 +465,29 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Angle:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 2, 1);
+                table_attach (table, l, 1, 2, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Rotate tiles by this angle for each row"), "rotate_per_j",
                                                    -180, 180, "°");
-                clonetiler_table_attach (table, l, 0, 2, 2);
+                table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (
+                GtkWidget *l = spinbox (
                     // xgettext:no-c-format
                                                    _("Rotate tiles by this angle for each column"), "rotate_per_i",
                                                    -180, 180, "°");
-                clonetiler_table_attach (table, l, 0, 2, 3);
+                table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand",
+                GtkWidget *l = spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 4);
+                table_attach (table, l, 0, 2, 4);
             }
 
             { // alternates
@@ -493,17 +495,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Alternate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Alternate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 3, 1);
+                table_attach (table, l, 1, 3, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej");
-                clonetiler_table_attach (table, l, 0, 3, 2);
+                GtkWidget *l = checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej");
+                table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei");
-                clonetiler_table_attach (table, l, 0, 3, 3);
+                GtkWidget *l = checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei");
+                table_attach (table, l, 0, 3, 3);
             }
 
             { // Cumulate
@@ -511,17 +513,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Cumulate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Cumulate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 4, 1);
+                table_attach (table, l, 1, 4, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej");
-                clonetiler_table_attach (table, l, 0, 4, 2);
+                GtkWidget *l = checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej");
+                table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei");
-                clonetiler_table_attach (table, l, 0, 4, 3);
+                GtkWidget *l = checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei");
+                table_attach (table, l, 0, 4, 3);
             }
 
         }
@@ -529,9 +531,9 @@ CloneTiler::CloneTiler () :
 
         // Blur and opacity
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("_Blur & opacity"));
+            GtkWidget *vb = new_tab (nb, _("_Blur & opacity"));
 
-            GtkWidget *table = clonetiler_table_x_y_rand (1);
+            GtkWidget *table = table_x_y_rand (1);
             gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0);
 
 
@@ -540,25 +542,25 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Blur:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 2, 1);
+                table_attach (table, l, 1, 2, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j",
+                GtkWidget *l = spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 2);
+                table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i",
+                GtkWidget *l = spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 3);
+                table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the tile blur by this percentage"), "blur_rand",
+                GtkWidget *l = spinbox (_("Randomize the tile blur by this percentage"), "blur_rand",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 4);
+                table_attach (table, l, 0, 2, 4);
             }
 
             { // alternates
@@ -566,17 +568,17 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Alternate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Alternate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 3, 1);
+                table_attach (table, l, 1, 3, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej");
-                clonetiler_table_attach (table, l, 0, 3, 2);
+                GtkWidget *l = checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej");
+                table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei");
-                clonetiler_table_attach (table, l, 0, 3, 3);
+                GtkWidget *l = checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei");
+                table_attach (table, l, 0, 3, 3);
             }
 
 
@@ -586,25 +588,25 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Opacity:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 4, 1);
+                table_attach (table, l, 1, 4, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j",
+                GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 4, 2);
+                table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i",
+                GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 4, 3);
+                table_attach (table, l, 0, 4, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand",
+                GtkWidget *l = spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 4, 4);
+                table_attach (table, l, 0, 4, 4);
             }
 
             { // alternates
@@ -612,24 +614,24 @@ CloneTiler::CloneTiler () :
                 // TRANSLATORS: "Alternate" is a verb here
                 gtk_label_set_markup (GTK_LABEL(l), _("Alternate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 5, 1);
+                table_attach (table, l, 1, 5, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej");
-                clonetiler_table_attach (table, l, 0, 5, 2);
+                GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej");
+                table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei");
-                clonetiler_table_attach (table, l, 0, 5, 3);
+                GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei");
+                table_attach (table, l, 0, 5, 3);
             }
         }
 
 
         // Color
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("Co_lor"));
+            GtkWidget *vb = new_tab (nb, _("Co_lor"));
 
             {
             auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
@@ -648,7 +650,7 @@ CloneTiler::CloneTiler () :
             }
 
 
-            GtkWidget *table = clonetiler_table_x_y_rand (3);
+            GtkWidget *table = table_x_y_rand (3);
             gtk_box_pack_start (GTK_BOX (vb), table, FALSE, FALSE, 0);
 
             // Hue
@@ -656,25 +658,25 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("H:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 2, 1);
+                table_attach (table, l, 1, 2, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j",
+                GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j",
                                                    -100, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 2);
+                table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i",
+                GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i",
                                                    -100, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 3);
+                table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the tile hue by this percentage"), "hue_rand",
+                GtkWidget *l = spinbox (_("Randomize the tile hue by this percentage"), "hue_rand",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 2, 4);
+                table_attach (table, l, 0, 2, 4);
             }
 
 
@@ -683,25 +685,25 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("S:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 3, 1);
+                table_attach (table, l, 1, 3, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j",
+                GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j",
                                                    -100, 100, "%");
-                clonetiler_table_attach (table, l, 0, 3, 2);
+                table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i",
+                GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i",
                                                    -100, 100, "%");
-                clonetiler_table_attach (table, l, 0, 3, 3);
+                table_attach (table, l, 0, 3, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand",
+                GtkWidget *l = spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 3, 4);
+                table_attach (table, l, 0, 3, 4);
             }
 
             // Lightness
@@ -709,25 +711,25 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("L:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 4, 1);
+                table_attach (table, l, 1, 4, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j",
+                GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j",
                                                    -100, 100, "%");
-                clonetiler_table_attach (table, l, 0, 4, 2);
+                table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i",
+                GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i",
                                                    -100, 100, "%");
-                clonetiler_table_attach (table, l, 0, 4, 3);
+                table_attach (table, l, 0, 4, 3);
             }
 
             {
-                GtkWidget *l = clonetiler_spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand",
+                GtkWidget *l = spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand",
                                                    0, 100, "%");
-                clonetiler_table_attach (table, l, 0, 4, 4);
+                table_attach (table, l, 0, 4, 4);
             }
 
 
@@ -735,38 +737,36 @@ CloneTiler::CloneTiler () :
                 GtkWidget *l = gtk_label_new ("");
                 gtk_label_set_markup (GTK_LABEL(l), _("Alternate:"));
                 gtk_size_group_add_widget(table_row_labels, l);
-                clonetiler_table_attach (table, l, 1, 5, 1);
+                table_attach (table, l, 1, 5, 1);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej");
-                clonetiler_table_attach (table, l, 0, 5, 2);
+                GtkWidget *l = checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej");
+                table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = clonetiler_checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei");
-                clonetiler_table_attach (table, l, 0, 5, 3);
+                GtkWidget *l = checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei");
+                table_attach (table, l, 0, 5, 3);
             }
 
         }
 
         // Trace
         {
-            GtkWidget *vb = clonetiler_new_tab (nb, _("_Trace"));
+            GtkWidget *vb = new_tab (nb, _("_Trace"));
         {
             auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
             gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
             gtk_box_pack_start (GTK_BOX (vb), hb, FALSE, FALSE, 0);
 
-            b  = gtk_check_button_new_with_label (_("Trace the drawing under the clones/sprayed items"));
-            g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE));
+            _b = Gtk::manage(new Gtk::CheckButton(_("Trace the drawing under the clones/sprayed items")));
+            _b->set_data("uncheckable", GINT_TO_POINTER(TRUE));
             bool old = prefs->getBool(prefs_path + "dotrace");
-            gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
-            gtk_widget_set_tooltip_text (b, _("For each clone/sprayed item, pick a value from the drawing in its location and apply it"));
-            gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
-
-            g_signal_connect(G_OBJECT(b), "toggled",
-                               G_CALLBACK(clonetiler_do_pick_toggled), (gpointer)this);
+            _b->set_active(old);
+            _b->set_tooltip_text(_("For each clone/sprayed item, pick a value from the drawing in its location and apply it"));
+            gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(_b->gobj()), FALSE, FALSE, 0);
+            _b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::do_pick_toggled),_b));
         }
 
         {
@@ -789,65 +789,65 @@ CloneTiler::CloneTiler () :
                 {
                     radio = gtk_radio_button_new_with_label (NULL, _("Color"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the visible color and opacity"));
-                    clonetiler_table_attach (table, radio, 0.0, 1, 1);
+                    table_attach (table, radio, 0.0, 1, 1);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_COLOR));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_COLOR));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Opacity"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the total accumulated opacity"));
-                    clonetiler_table_attach (table, radio, 0.0, 2, 1);
+                    table_attach (table, radio, 0.0, 2, 1);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_OPACITY));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_OPACITY));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("R"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the Red component of the color"));
-                    clonetiler_table_attach (table, radio, 0.0, 1, 2);
+                    table_attach (table, radio, 0.0, 1, 2);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_R));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_R));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_R);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("G"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the Green component of the color"));
-                    clonetiler_table_attach (table, radio, 0.0, 2, 2);
+                    table_attach (table, radio, 0.0, 2, 2);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_G));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_G));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_G);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("B"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the Blue component of the color"));
-                    clonetiler_table_attach (table, radio, 0.0, 3, 2);
+                    table_attach (table, radio, 0.0, 3, 2);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_B));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_B));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_B);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color hue", "H"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the hue of the color"));
-                    clonetiler_table_attach (table, radio, 0.0, 1, 3);
+                    table_attach (table, radio, 0.0, 1, 3);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_H));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_H));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_H);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color saturation", "S"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the saturation of the color"));
-                    clonetiler_table_attach (table, radio, 0.0, 2, 3);
+                    table_attach (table, radio, 0.0, 2, 3);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_S));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_S));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_S);
                 }
                 {
                     radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color lightness", "L"));
                     gtk_widget_set_tooltip_text (radio, _("Pick the lightness of the color"));
-                    clonetiler_table_attach (table, radio, 0.0, 3, 3);
+                    table_attach (table, radio, 0.0, 3, 3);
                     g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (clonetiler_pick_switched), GINT_TO_POINTER(PICK_L));
+                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_L));
                     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_L);
                 }
 
@@ -866,33 +866,33 @@ CloneTiler::CloneTiler () :
                 {
                     GtkWidget *l = gtk_label_new ("");
                     gtk_label_set_markup (GTK_LABEL(l), _("Gamma-correct:"));
-                    clonetiler_table_attach (table, l, 1.0, 1, 1);
+                    table_attach (table, l, 1.0, 1, 1);
                 }
                 {
-                    GtkWidget *l = clonetiler_spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked",
+                    GtkWidget *l = spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked",
                                                        -10, 10, "");
-                    clonetiler_table_attach (table, l, 0.0, 1, 2);
+                    table_attach (table, l, 0.0, 1, 2);
                 }
 
                 {
                     GtkWidget *l = gtk_label_new ("");
                     gtk_label_set_markup (GTK_LABEL(l), _("Randomize:"));
-                    clonetiler_table_attach (table, l, 1.0, 1, 3);
+                    table_attach (table, l, 1.0, 1, 3);
                 }
                 {
-                    GtkWidget *l = clonetiler_spinbox (_("Randomize the picked value by this percentage"), "rand_picked",
+                    GtkWidget *l = spinbox (_("Randomize the picked value by this percentage"), "rand_picked",
                                                        0, 100, "%");
-                    clonetiler_table_attach (table, l, 0.0, 1, 4);
+                    table_attach (table, l, 0.0, 1, 4);
                 }
 
                 {
                     GtkWidget *l = gtk_label_new ("");
                     gtk_label_set_markup (GTK_LABEL(l), _("Invert:"));
-                    clonetiler_table_attach (table, l, 1.0, 2, 1);
+                    table_attach (table, l, 1.0, 2, 1);
                 }
                 {
-                    GtkWidget *l = clonetiler_checkbox (_("Invert the picked value"), "invert_picked");
-                    clonetiler_table_attach (table, l, 0.0, 2, 2);
+                    GtkWidget *l = checkbox (_("Invert the picked value"), "invert_picked");
+                    table_attach (table, l, 0.0, 2, 2);
                 }
             }
 
@@ -910,9 +910,9 @@ CloneTiler::CloneTiler () :
                     bool old = prefs->getBool(prefs_path + "pick_to_presence", true);
                     gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
                     gtk_widget_set_tooltip_text (b, _("Each clone is created with the probability determined by the picked value in that point"));
-                    clonetiler_table_attach (table, b, 0.0, 1, 1);
+                    table_attach (table, b, 0.0, 1, 1);
                     g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_presence");
+                                       G_CALLBACK(pick_to), (gpointer) "pick_to_presence");
                 }
 
                 {
@@ -920,9 +920,9 @@ CloneTiler::CloneTiler () :
                     bool old = prefs->getBool(prefs_path + "pick_to_size");
                     gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
                     gtk_widget_set_tooltip_text (b, _("Each clone's size is determined by the picked value in that point"));
-                    clonetiler_table_attach (table, b, 0.0, 2, 1);
+                    table_attach (table, b, 0.0, 2, 1);
                     g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_size");
+                                       G_CALLBACK(pick_to), (gpointer) "pick_to_size");
                 }
 
                 {
@@ -930,9 +930,9 @@ CloneTiler::CloneTiler () :
                     bool old = prefs->getBool(prefs_path + "pick_to_color", 0);
                     gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
                     gtk_widget_set_tooltip_text (b, _("Each clone is painted by the picked color (the original must have unset fill or stroke)"));
-                    clonetiler_table_attach (table, b, 0.0, 1, 2);
+                    table_attach (table, b, 0.0, 1, 2);
                     g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_color");
+                                       G_CALLBACK(pick_to), (gpointer) "pick_to_color");
                 }
 
                 {
@@ -940,9 +940,9 @@ CloneTiler::CloneTiler () :
                     bool old = prefs->getBool(prefs_path + "pick_to_opacity", 0);
                     gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
                     gtk_widget_set_tooltip_text (b, _("Each clone's opacity is determined by the picked value in that point"));
-                    clonetiler_table_attach (table, b, 0.0, 2, 2);
+                    table_attach (table, b, 0.0, 2, 2);
                     g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(clonetiler_pick_to), (gpointer) "pick_to_opacity");
+                                       G_CALLBACK(pick_to), (gpointer) "pick_to_opacity");
                 }
             }
            gtk_widget_set_sensitive (vvb, prefs->getBool(prefs_path + "dotrace"));
@@ -983,7 +983,7 @@ CloneTiler::CloneTiler () :
 
                     // TODO: C++ification
                     g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
-                                       G_CALLBACK(clonetiler_xy_changed), (gpointer) "jmax");
+                                       G_CALLBACK(xy_changed), (gpointer) "jmax");
                 }
 
                 {
@@ -1005,10 +1005,10 @@ CloneTiler::CloneTiler () :
 
                     // TODO: C++ification
                     g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
-                                       G_CALLBACK(clonetiler_xy_changed), (gpointer) "imax");
+                                       G_CALLBACK(xy_changed), (gpointer) "imax");
                 }
 
-                clonetiler_table_attach (table, hb, 0.0, 1, 2);
+                table_attach (table, hb, 0.0, 1, 2);
             }
 
             {
@@ -1020,7 +1020,7 @@ CloneTiler::CloneTiler () :
                 unit_menu = new Inkscape::UI::Widget::UnitMenu();
                 unit_menu->setUnitType(Inkscape::Util::UNIT_TYPE_LINEAR);
                 unit_menu->setUnit(SP_ACTIVE_DESKTOP->getNamedView()->display_units->abbr);
-                unitChangedConn = unit_menu->signal_changed().connect(sigc::mem_fun(*this, &CloneTiler::clonetiler_unit_changed));
+                unitChangedConn = unit_menu->signal_changed().connect(sigc::mem_fun(*this, &CloneTiler::unit_changed));
 
                 {
                     // Width spinbutton
@@ -1038,7 +1038,7 @@ CloneTiler::CloneTiler () :
                     gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0);
                     // TODO: C++ification
 		    g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed",
-                                       G_CALLBACK(clonetiler_fill_width_changed), unit_menu);
+                                       G_CALLBACK(fill_width_changed), unit_menu);
                 }
                 {
                     GtkWidget *l = gtk_label_new ("");
@@ -1063,11 +1063,11 @@ CloneTiler::CloneTiler () :
                     gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0);
                     // TODO: C++ification
             g_signal_connect(G_OBJECT(fill_height->gobj()), "value_changed",
-                                       G_CALLBACK(clonetiler_fill_height_changed), unit_menu);
+                                       G_CALLBACK(fill_height_changed), unit_menu);
                 }
 
                 gtk_box_pack_start (GTK_BOX (hb), (GtkWidget*) unit_menu->gobj(), TRUE, TRUE, 0);
-                clonetiler_table_attach (table, hb, 0.0, 2, 2);
+                table_attach (table, hb, 0.0, 2, 2);
 
             }
 
@@ -1076,8 +1076,8 @@ CloneTiler::CloneTiler () :
             {
                 radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: "));
                 gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns"));
-                clonetiler_table_attach (table, radio, 0.0, 1, 1);
-                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_create), (gpointer) this);
+                table_attach (table, radio, 0.0, 1, 1);
+                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_create), (gpointer) this);
             }
             if (!prefs->getBool(prefs_path + "fillrect")) {
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
@@ -1086,8 +1086,8 @@ CloneTiler::CloneTiler () :
             {
                 radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Width, height: "));
                 gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling"));
-                clonetiler_table_attach (table, radio, 0.0, 2, 1);
-                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (clonetiler_switch_to_fill), (gpointer) this);
+                table_attach (table, radio, 0.0, 2, 1);
+                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_fill), (gpointer) this);
             }
             if (prefs->getBool(prefs_path + "fillrect")) {
                 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
@@ -1109,7 +1109,7 @@ CloneTiler::CloneTiler () :
             gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
 
             g_signal_connect(G_OBJECT(b), "toggled",
-                               G_CALLBACK(clonetiler_keep_bbox_toggled), NULL);
+                               G_CALLBACK(keep_bbox_toggled), NULL);
         }
 
         // Statusbar
@@ -1151,7 +1151,7 @@ CloneTiler::CloneTiler () :
                     //  So unclumping is the process of spreading a number of objects out more evenly.
                     GtkWidget *b = gtk_button_new_with_mnemonic (_(" _Unclump "));
                     gtk_widget_set_tooltip_text (b, _("Spread out clones to reduce clumping; can be applied repeatedly"));
-                    g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_unclump), NULL);
+                    g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (unclump), NULL);
                     gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0);
                 }
 
@@ -1175,7 +1175,7 @@ CloneTiler::CloneTiler () :
                 GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset "));
                 // TRANSLATORS: "change" is a noun here
                 gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"));
-                g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (clonetiler_reset), this);
+                g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (reset), this);
                 gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
             }
         }
@@ -1244,7 +1244,7 @@ void CloneTiler::change_selection(Inkscape::Selection *selection)
         return;
     }
 
-    guint n = clonetiler_number_of_clones(selection->singleItem());
+    guint n = number_of_clones(selection->singleItem());
     if (n > 0) {
         gtk_widget_set_sensitive (_buttons_on_tiles, TRUE);
         gchar *sta = g_strdup_printf (_("Object has %d tiled clones."), n);
@@ -1261,7 +1261,7 @@ void CloneTiler::external_change()
     change_selection(SP_ACTIVE_DESKTOP->getSelection());
 }
 
-Geom::Affine CloneTiler::clonetiler_get_transform(
+Geom::Affine CloneTiler::get_transform(
     // symmetry group
     int type,
 
@@ -1863,7 +1863,7 @@ Geom::Affine CloneTiler::clonetiler_get_transform(
     return Geom::identity();
 }
 
-bool CloneTiler::clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj)
+bool CloneTiler::is_a_clone_of(SPObject *tile, SPObject *obj)
 {
     bool result = false;
     char *id_href = NULL;
@@ -1890,21 +1890,21 @@ bool CloneTiler::clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj)
     return result;
 }
 
-void CloneTiler::clonetiler_trace_hide_tiled_clones_recursively(SPObject *from)
+void CloneTiler::trace_hide_tiled_clones_recursively(SPObject *from)
 {
     if (!trace_drawing)
         return;
 
     for (auto& o: from->children) {
         SPItem *item = dynamic_cast(&o);
-        if (item && clonetiler_is_a_clone_of(&o, NULL)) {
+        if (item && is_a_clone_of(&o, NULL)) {
             item->invoke_hide(trace_visionkey); // FIXME: hide each tiled clone's original too!
         }
-        clonetiler_trace_hide_tiled_clones_recursively (&o);
+        trace_hide_tiled_clones_recursively (&o);
     }
 }
 
-void CloneTiler::clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original)
+void CloneTiler::trace_setup(SPDocument *doc, gdouble zoom, SPItem *original)
 {
     trace_drawing = new Inkscape::Drawing();
     /* Create ArenaItem and set transform */
@@ -1914,7 +1914,7 @@ void CloneTiler::clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *o
 
     // hide the (current) original and any tiled clones, we only want to pick the background
     original->invoke_hide(trace_visionkey);
-    clonetiler_trace_hide_tiled_clones_recursively(trace_doc->getRoot());
+    trace_hide_tiled_clones_recursively(trace_doc->getRoot());
 
     trace_doc->getRoot()->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
     trace_doc->ensureUpToDate();
@@ -1922,7 +1922,7 @@ void CloneTiler::clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *o
     trace_zoom = zoom;
 }
 
-guint32 CloneTiler::clonetiler_trace_pick(Geom::Rect box)
+guint32 CloneTiler::trace_pick(Geom::Rect box)
 {
     if (!trace_drawing) {
         return 0;
@@ -1946,7 +1946,7 @@ guint32 CloneTiler::clonetiler_trace_pick(Geom::Rect box)
     return SP_RGBA32_F_COMPOSE (R, G, B, A);
 }
 
-void CloneTiler::clonetiler_trace_finish()
+void CloneTiler::trace_finish()
 {
     if (trace_doc) {
         trace_doc->getRoot()->invoke_hide(trace_visionkey);
@@ -1956,7 +1956,7 @@ void CloneTiler::clonetiler_trace_finish()
     }
 }
 
-void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *)
+void CloneTiler::unclump(GtkWidget */*widget*/, void *)
 {
     SPDesktop *desktop = SP_ACTIVE_DESKTOP;
     if (desktop == NULL) {
@@ -1977,27 +1977,27 @@ void CloneTiler::clonetiler_unclump(GtkWidget */*widget*/, void *)
     std::vector to_unclump; // not including the original
 
     for (auto& child: parent->children) {
-        if (clonetiler_is_a_clone_of (&child, obj)) {
+        if (is_a_clone_of (&child, obj)) {
             to_unclump.push_back((SPItem*)&child);
         }
     }
 
     desktop->getDocument()->ensureUpToDate();
     reverse(to_unclump.begin(),to_unclump.end());
-    unclump (to_unclump);
+    ::unclump (to_unclump);
 
     DocumentUndo::done(desktop->getDocument(), SP_VERB_DIALOG_CLONETILER,
                        _("Unclump tiled clones"));
 }
 
-guint CloneTiler::clonetiler_number_of_clones(SPObject *obj)
+guint CloneTiler::number_of_clones(SPObject *obj)
 {
     SPObject *parent = obj->parent;
 
     guint n = 0;
 
     for (auto& child: parent->children) {
-        if (clonetiler_is_a_clone_of (&child, obj)) {
+        if (is_a_clone_of (&child, obj)) {
             n ++;
         }
     }
@@ -2026,7 +2026,7 @@ void CloneTiler::remove(bool do_undo/* = true*/)
 // remove old tiling
     GSList *to_delete = NULL;
     for (auto& child: parent->children) {
-        if (clonetiler_is_a_clone_of (&child, obj)) {
+        if (is_a_clone_of (&child, obj)) {
             to_delete = g_slist_prepend (to_delete, &child);
         }
     }
@@ -2205,7 +2205,7 @@ void CloneTiler::apply()
 
     SPItem *item = dynamic_cast(obj);
     if (dotrace) {
-        clonetiler_trace_setup (desktop->getDocument(), 1.0, item);
+        trace_setup (desktop->getDocument(), 1.0, item);
     }
 
     Geom::Point center;
@@ -2277,7 +2277,7 @@ void CloneTiler::apply()
             // Note: We create a clone at 0,0 too, right over the original, in case our clones are colored
 
             // Get transform from symmetry, shift, scale, rotation
-            Geom::Affine orig_t = clonetiler_get_transform (type, i, j, center[Geom::X], center[Geom::Y], w, h,
+            Geom::Affine orig_t = get_transform (type, i, j, center[Geom::X], center[Geom::Y], w, h,
                                                        shiftx_per_i,     shifty_per_i,
                                                        shiftx_per_j,     shifty_per_j,
                                                        shiftx_rand,      shifty_rand,
@@ -2351,7 +2351,7 @@ void CloneTiler::apply()
             if (dotrace) {
                 Geom::Rect bbox_t = transform_rect (bbox_original, t*Geom::Scale(1.0/scale_units));
 
-                guint32 rgba = clonetiler_trace_pick (bbox_t);
+                guint32 rgba = trace_pick (bbox_t);
                 float r = SP_RGBA32_R_F(rgba);
                 float g = SP_RGBA32_G_F(rgba);
                 float b = SP_RGBA32_B_F(rgba);
@@ -2511,7 +2511,7 @@ void CloneTiler::apply()
     }
 
     if (dotrace) {
-        clonetiler_trace_finish ();
+        trace_finish ();
     }
 
     change_selection(selection);
@@ -2522,7 +2522,7 @@ void CloneTiler::apply()
                        _("Create tiled clones"));
 }
 
-GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label)
+GtkWidget * CloneTiler::new_tab(GtkWidget *nb, const gchar *label)
 {
     GtkWidget *l = gtk_label_new_with_mnemonic (label);
     auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, VB_MARGIN);
@@ -2532,14 +2532,14 @@ GtkWidget * CloneTiler::clonetiler_new_tab(GtkWidget *nb, const gchar *label)
     return vb;
 }
 
-void CloneTiler::clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data)
+void CloneTiler::checkbox_toggled(GtkToggleButton *tb, gpointer *data)
 {
     const gchar *attr = (const gchar *) data;
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     prefs->setBool(prefs_path + attr, gtk_toggle_button_get_active(tb));
 }
 
-GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr)
+GtkWidget * CloneTiler::checkbox(const char *tip, const char *attr)
 {
     auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
     gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
@@ -2553,21 +2553,21 @@ GtkWidget * CloneTiler::clonetiler_checkbox(const char *tip, const char *attr)
 
     gtk_box_pack_end (GTK_BOX (hb), b, FALSE, TRUE, 0);
     g_signal_connect ( G_OBJECT (b), "clicked",
-                         G_CALLBACK (clonetiler_checkbox_toggled), (gpointer) attr);
+                         G_CALLBACK (checkbox_toggled), (gpointer) attr);
 
     g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE));
 
     return hb;
 }
 
-void CloneTiler::clonetiler_value_changed(GtkAdjustment *adj, gpointer data)
+void CloneTiler::value_changed(GtkAdjustment *adj, gpointer data)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     const gchar *pref = (const gchar *) data;
     prefs->setDouble(prefs_path + pref, gtk_adjustment_get_value (adj));
 }
 
-GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/)
+GtkWidget * CloneTiler::spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/)
 {
     auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
     gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
@@ -2597,7 +2597,7 @@ GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, do
         a->set_value (value);
         // TODO: C++ification
         g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
-                           G_CALLBACK(clonetiler_value_changed), (gpointer) attr);
+                           G_CALLBACK(value_changed), (gpointer) attr);
 
         if (exponent) {
             sb->set_data ("oneable", GINT_TO_POINTER(TRUE));
@@ -2617,27 +2617,27 @@ GtkWidget * CloneTiler::clonetiler_spinbox(const char *tip, const char *attr, do
     return hb;
 }
 
-void CloneTiler::clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/)
+void CloneTiler::symgroup_changed(GtkComboBox *cb, gpointer /*data*/)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     gint group_new = gtk_combo_box_get_active (cb);
     prefs->setInt(prefs_path + "symmetrygroup", group_new);
 }
 
-void CloneTiler::clonetiler_xy_changed(GtkAdjustment *adj, gpointer data)
+void CloneTiler::xy_changed(GtkAdjustment *adj, gpointer data)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     const gchar *pref = (const gchar *) data;
     prefs->setInt(prefs_path + pref, (int) floor(gtk_adjustment_get_value (adj) + 0.5));
 }
 
-void CloneTiler::clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/)
+void CloneTiler::keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     prefs->setBool(prefs_path + "keepbbox", gtk_toggle_button_get_active(tb));
 }
 
-void CloneTiler::clonetiler_pick_to(GtkToggleButton *tb, gpointer data)
+void CloneTiler::pick_to(GtkToggleButton *tb, gpointer data)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     const gchar *pref = (const gchar *) data;
@@ -2645,7 +2645,7 @@ void CloneTiler::clonetiler_pick_to(GtkToggleButton *tb, gpointer data)
 }
 
 
-void CloneTiler::clonetiler_reset_recursive(GtkWidget *w)
+void CloneTiler::reset_recursive(GtkWidget *w)
 {
     if (w && G_IS_OBJECT(w)) {
         {
@@ -2673,25 +2673,25 @@ void CloneTiler::clonetiler_reset_recursive(GtkWidget *w)
     if (GTK_IS_CONTAINER(w)) {
         GList *ch = gtk_container_get_children (GTK_CONTAINER(w));
         for (GList *i = ch; i != NULL; i = i->next) {
-            clonetiler_reset_recursive (GTK_WIDGET(i->data));
+            reset_recursive (GTK_WIDGET(i->data));
         }
         g_list_free (ch);
     }
 }
 
-void CloneTiler::clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg)
+void CloneTiler::reset(GtkWidget */*widget*/, GtkWidget *dlg)
 {
-    clonetiler_reset_recursive (dlg);
+    reset_recursive (dlg);
 }
 
-void CloneTiler::clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col)
+void CloneTiler::table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col)
 {
     gtk_widget_set_halign(widget, GTK_ALIGN_FILL);
     gtk_widget_set_valign(widget, GTK_ALIGN_START);
     gtk_grid_attach(GTK_GRID(table), widget, col, row, 1, 1);
 }
 
-GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values)
+GtkWidget * CloneTiler::table_x_y_rand(int values)
 {
     auto table = gtk_grid_new();
     gtk_grid_set_row_spacing(GTK_GRID(table), 6);
@@ -2710,7 +2710,7 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values)
         gtk_label_set_markup (GTK_LABEL(l), _("Per row:"));
         gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 2);
 
-        clonetiler_table_attach (table, hb, 0, 1, 2);
+        table_attach (table, hb, 0, 1, 2);
     }
 
     {
@@ -2724,19 +2724,19 @@ GtkWidget * CloneTiler::clonetiler_table_x_y_rand(int values)
         gtk_label_set_markup (GTK_LABEL(l), _("Per column:"));
         gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 2);
 
-        clonetiler_table_attach (table, hb, 0, 1, 3);
+        table_attach (table, hb, 0, 1, 3);
     }
 
     {
         GtkWidget *l = gtk_label_new ("");
         gtk_label_set_markup (GTK_LABEL(l), _("Randomize:"));
-        clonetiler_table_attach (table, l, 0, 1, 4);
+        table_attach (table, l, 0, 1, 4);
     }
 
     return table;
 }
 
-void CloneTiler::clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data)
+void CloneTiler::pick_switched(GtkToggleButton */*tb*/, gpointer data)
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     guint v = GPOINTER_TO_INT (data);
@@ -2744,7 +2744,7 @@ void CloneTiler::clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data
 }
 
 
-void CloneTiler::clonetiler_switch_to_create(GtkToggleButton * /*tb*/, GtkWidget *dlg)
+void CloneTiler::switch_to_create(GtkToggleButton * /*tb*/, GtkWidget *dlg)
 {
     GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols"));
     GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight"));
@@ -2761,7 +2761,7 @@ void CloneTiler::clonetiler_switch_to_create(GtkToggleButton * /*tb*/, GtkWidget
 }
 
 
-void CloneTiler::clonetiler_switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *dlg)
+void CloneTiler::switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *dlg)
 {
     GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols"));
     GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight"));
@@ -2780,7 +2780,7 @@ void CloneTiler::clonetiler_switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *
 
 
 
-void CloneTiler::clonetiler_fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u)
+void CloneTiler::fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u)
 {
     gdouble const raw_dist = gtk_adjustment_get_value (adj);
     Inkscape::Util::Unit const *unit = u->getUnit();
@@ -2790,7 +2790,7 @@ void CloneTiler::clonetiler_fill_width_changed(GtkAdjustment *adj, Inkscape::UI:
     prefs->setDouble(prefs_path + "fillwidth", pixels);
 }
 
-void CloneTiler::clonetiler_fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u)
+void CloneTiler::fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u)
 {
     gdouble const raw_dist = gtk_adjustment_get_value (adj);
     Inkscape::Util::Unit const *unit = u->getUnit();
@@ -2800,7 +2800,7 @@ void CloneTiler::clonetiler_fill_height_changed(GtkAdjustment *adj, Inkscape::UI
     prefs->setDouble(prefs_path + "fillheight", pixels);
 }
 
-void CloneTiler::clonetiler_unit_changed()
+void CloneTiler::unit_changed()
 {
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     gdouble width_pixels = prefs->getDouble(prefs_path + "fillwidth");
@@ -2814,22 +2814,23 @@ void CloneTiler::clonetiler_unit_changed()
     gtk_adjustment_set_value(fill_height->gobj(), height_value);
 }
 
-void CloneTiler::clonetiler_do_pick_toggled(GtkToggleButton *tb, GtkWidget *dlg)
+void CloneTiler::do_pick_toggled(Gtk::ToggleButton *tb)
 {
-    GtkWidget *vvb = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "dotrace"));
+    GtkWidget *vvb = GTK_WIDGET(_dotrace);
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setBool(prefs_path + "dotrace", gtk_toggle_button_get_active (tb));
+    auto prefs = Inkscape::Preferences::get();
+    auto active = tb->get_active();
+    prefs->setBool(prefs_path + "dotrace", active);
 
     if (vvb) {
-        gtk_widget_set_sensitive (vvb, gtk_toggle_button_get_active (tb));
+        gtk_widget_set_sensitive (vvb, active);
     }
 }
 
 void CloneTiler::show_page_trace()
 {
     gtk_notebook_set_current_page(GTK_NOTEBOOK(nb),6);
-    gtk_toggle_button_set_active ((GtkToggleButton *) b, false);
+    _b->set_active(false);
 }
 
 
diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h
index 9ad3fa878..e1c8bab35 100644
--- a/src/ui/dialog/clonetiler.h
+++ b/src/ui/dialog/clonetiler.h
@@ -16,6 +16,11 @@
 #include "ui/widget/color-picker.h"
 #include "sp-root.h"
 
+namespace Gtk {
+    class CheckButton;
+    class ToggleButton;
+}
+
 namespace Inkscape {
 namespace UI {
 
@@ -34,45 +39,47 @@ public:
     void show_page_trace();
 protected:
 
-    GtkWidget * clonetiler_new_tab(GtkWidget *nb, const gchar *label);
-    GtkWidget * clonetiler_table_x_y_rand(int values);
-    GtkWidget * clonetiler_spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false);
-    GtkWidget * clonetiler_checkbox(const char *tip, const char *attr);
-    void clonetiler_table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col);
+    GtkWidget * new_tab(GtkWidget *nb, const gchar *label);
+    GtkWidget * table_x_y_rand(int values);
+    GtkWidget * spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false);
+    GtkWidget * checkbox(const char *tip, const char *attr);
+    void table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col);
 
-    static void clonetiler_symgroup_changed(GtkComboBox *cb, gpointer /*data*/);
+    // TODO: Improve encapsulation by using SigC++ signal handling, and convert all of these into
+    // non-static member functions
+    static void symgroup_changed(GtkComboBox *cb, gpointer /*data*/);
     static void on_picker_color_changed(guint rgba);
-    static void clonetiler_trace_hide_tiled_clones_recursively(SPObject *from);
-    static void clonetiler_checkbox_toggled(GtkToggleButton *tb, gpointer *data);
-    static void clonetiler_pick_switched(GtkToggleButton */*tb*/, gpointer data);
-    static void clonetiler_do_pick_toggled(GtkToggleButton *tb, GtkWidget *dlg);
-    static void clonetiler_pick_to(GtkToggleButton *tb, gpointer data);
-    static void clonetiler_xy_changed(GtkAdjustment *adj, gpointer data);
-    static void clonetiler_fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u);
-    static void clonetiler_fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u);
-    void clonetiler_unit_changed();
-    static void clonetiler_switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg);
-    static void clonetiler_switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg);
-    static void clonetiler_keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/);
-    static void clonetiler_unclump(GtkWidget */*widget*/, void *);
-    static void clonetiler_reset(GtkWidget */*widget*/, GtkWidget *dlg);
-    static guint clonetiler_number_of_clones(SPObject *obj);
-    static void clonetiler_trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
-    static guint32 clonetiler_trace_pick(Geom::Rect box);
-    static void clonetiler_trace_finish();
-    static bool clonetiler_is_a_clone_of(SPObject *tile, SPObject *obj);
+    static void trace_hide_tiled_clones_recursively(SPObject *from);
+    static void checkbox_toggled(GtkToggleButton *tb, gpointer *data);
+    static void pick_switched(GtkToggleButton */*tb*/, gpointer data);
+    static void pick_to(GtkToggleButton *tb, gpointer data);
+    static void xy_changed(GtkAdjustment *adj, gpointer data);
+    static void fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u);
+    static void fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u);
+    static void switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg);
+    static void switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg);
+    static void keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/);
+    static void unclump(GtkWidget */*widget*/, void *);
+    static void reset(GtkWidget */*widget*/, GtkWidget *dlg);
+    static guint number_of_clones(SPObject *obj);
+    static void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
+    static guint32 trace_pick(Geom::Rect box);
+    static void trace_finish();
+    static bool is_a_clone_of(SPObject *tile, SPObject *obj);
     static Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m);
     static double randomize01(double val, double rand);
-    static void clonetiler_value_changed(GtkAdjustment *adj, gpointer data);
-    static void clonetiler_reset_recursive(GtkWidget *w);
+    static void value_changed(GtkAdjustment *adj, gpointer data);
+    static void reset_recursive(GtkWidget *w);
 
     void apply();
     void change_selection(Inkscape::Selection *selection);
+    void do_pick_toggled(Gtk::ToggleButton *tb);
     void external_change();
     void remove(bool do_undo = true);
     void on_remove_button_clicked() {remove();}
+    void unit_changed();
 
-    static Geom::Affine clonetiler_get_transform(    // symmetry group
+    static Geom::Affine get_transform(    // symmetry group
             int type,
 
             // row, column
@@ -113,8 +120,8 @@ private:
     CloneTiler(CloneTiler const &d);
     CloneTiler& operator=(CloneTiler const &d);
 
+    Gtk::CheckButton *_b;
     GtkWidget *nb;
-    GtkWidget *b;
     SPDesktop *desktop;
     DesktopTracker deskTrack;
     Inkscape::UI::Widget::ColorPicker *color_picker;
-- 
cgit v1.2.3


From 93a6d057d8b8dac9e4d81d84511dbae60a958788 Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Fri, 12 Aug 2016 00:31:53 +0100
Subject: CloneTiler: Further C++ification

(bzr r15052)
---
 src/ui/dialog/clonetiler.cpp | 177 +++++++++++++++++++------------------------
 src/ui/dialog/clonetiler.h   |  17 +++--
 2 files changed, 88 insertions(+), 106 deletions(-)

diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index 8bd5cd5f6..a9bec8227 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -25,6 +25,7 @@
 
 #include 
 #include 
+#include 
 
 #include "desktop.h"
 
@@ -766,7 +767,7 @@ CloneTiler::CloneTiler () :
             _b->set_active(old);
             _b->set_tooltip_text(_("For each clone/sprayed item, pick a value from the drawing in its location and apply it"));
             gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(_b->gobj()), FALSE, FALSE, 0);
-            _b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::do_pick_toggled),_b));
+            _b->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::do_pick_toggled));
         }
 
         {
@@ -967,9 +968,7 @@ CloneTiler::CloneTiler () :
             gtk_box_pack_start (GTK_BOX (mainbox), table, FALSE, FALSE, 0);
 
             {
-                auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
-                gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
-                _rowscols = hb;
+                _rowscols = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN));
 
                 {
                     auto a = Gtk::Adjustment::create(0.0, 1, 500, 1, 10, 0);
@@ -979,7 +978,7 @@ CloneTiler::CloneTiler () :
                     auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0);
                     sb->set_tooltip_text (_("How many rows in the tiling"));
                     sb->set_width_chars (7);
-                    gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0);
+                    _rowscols->pack_start(*sb, true, true, 0);
 
                     // TODO: C++ification
                     g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
@@ -987,10 +986,10 @@ CloneTiler::CloneTiler () :
                 }
 
                 {
-                    GtkWidget *l = gtk_label_new ("");
-                    gtk_label_set_markup (GTK_LABEL(l), "×");
-                    gtk_widget_set_halign(l, GTK_ALIGN_END);
-                    gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0);
+                    auto l = Gtk::manage(new Gtk::Label(""));
+                    l->set_markup("×");
+                    l->set_halign(Gtk::ALIGN_END);
+                    _rowscols->pack_start(*l, true, true, 0);
                 }
 
                 {
@@ -1001,20 +1000,18 @@ CloneTiler::CloneTiler () :
                     auto sb = new Inkscape::UI::Widget::SpinButton(a, 1.0, 0);
                     sb->set_tooltip_text (_("How many columns in the tiling"));
                     sb->set_width_chars (7);
-                    gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), TRUE, TRUE, 0);
+                    _rowscols->pack_start(*sb, true, true, 0);
 
                     // TODO: C++ification
                     g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
                                        G_CALLBACK(xy_changed), (gpointer) "imax");
                 }
 
-                table_attach (table, hb, 0.0, 1, 2);
+                table_attach (table, GTK_WIDGET(_rowscols->gobj()), 0.0, 1, 2);
             }
 
             {
-                auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
-                gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
-                _widthheight = hb;
+                _widthheight = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN));
 
                 // unitmenu
                 unit_menu = new Inkscape::UI::Widget::UnitMenu();
@@ -1035,16 +1032,14 @@ CloneTiler::CloneTiler () :
                     e->set_tooltip_text (_("Width of the rectangle to be filled"));
                     e->set_width_chars (7);
                     e->set_digits (4);
-                    gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0);
-                    // TODO: C++ification
-		    g_signal_connect(G_OBJECT(fill_width->gobj()), "value_changed",
-                                       G_CALLBACK(fill_width_changed), unit_menu);
+                    _widthheight->pack_start(*e, true, true, 0);
+                    fill_width->signal_value_changed().connect(sigc::mem_fun(*this, &CloneTiler::fill_width_changed));
                 }
                 {
-                    GtkWidget *l = gtk_label_new ("");
-                    gtk_label_set_markup (GTK_LABEL(l), "×");
-                    gtk_widget_set_halign(l, GTK_ALIGN_END);
-                    gtk_box_pack_start (GTK_BOX (hb), l, TRUE, TRUE, 0);
+                    auto l = Gtk::manage(new Gtk::Label(""));
+                    l->set_markup("×");
+                    l->set_halign(Gtk::ALIGN_END);
+                    _widthheight->pack_start(*l, true, true, 0);
                 }
 
                 {
@@ -1060,56 +1055,53 @@ CloneTiler::CloneTiler () :
                     e->set_tooltip_text (_("Height of the rectangle to be filled"));
                     e->set_width_chars (7);
                     e->set_digits (4);
-                    gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(e->gobj()), TRUE, TRUE, 0);
-                    // TODO: C++ification
-            g_signal_connect(G_OBJECT(fill_height->gobj()), "value_changed",
-                                       G_CALLBACK(fill_height_changed), unit_menu);
+                    _widthheight->pack_start(*e, true, true, 0);
+                    fill_height->signal_value_changed().connect(sigc::mem_fun(*this, &CloneTiler::fill_height_changed));
                 }
 
-                gtk_box_pack_start (GTK_BOX (hb), (GtkWidget*) unit_menu->gobj(), TRUE, TRUE, 0);
-                table_attach (table, hb, 0.0, 2, 2);
+                _widthheight->pack_start(*unit_menu, true, true, 0);
+                table_attach (table, GTK_WIDGET(_widthheight->gobj()), 0.0, 2, 2);
 
             }
 
             // Switch
-            GtkWidget* radio;
+            Gtk::RadioButtonGroup rb_group;
             {
-                radio = gtk_radio_button_new_with_label (NULL, _("Rows, columns: "));
-                gtk_widget_set_tooltip_text (radio, _("Create the specified number of rows and columns"));
-                table_attach (table, radio, 0.0, 1, 1);
-                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_create), (gpointer) this);
-            }
-            if (!prefs->getBool(prefs_path + "fillrect")) {
-                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
-                gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (radio));
+                auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Rows, columns: ")));
+                radio->set_tooltip_text(_("Create the specified number of rows and columns"));
+                table_attach (table, GTK_WIDGET(radio->gobj()), 0.0, 1, 1);
+                radio->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::switch_to_create));
+
+                if (!prefs->getBool(prefs_path + "fillrect")) {
+                    radio->set_active(true);
+                }
             }
             {
-                radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Width, height: "));
-                gtk_widget_set_tooltip_text (radio, _("Fill the specified width and height with the tiling"));
-                table_attach (table, radio, 0.0, 2, 1);
-                g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (switch_to_fill), (gpointer) this);
-            }
-            if (prefs->getBool(prefs_path + "fillrect")) {
-                gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE);
-                gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (radio));
+                auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Width, height: ")));
+                radio->set_tooltip_text(_("Fill the specified width and height with the tiling"));
+                table_attach (table, GTK_WIDGET(radio->gobj()), 0.0, 2, 1);
+                radio->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::switch_to_fill));
+            
+                if (prefs->getBool(prefs_path + "fillrect")) {
+                    radio->set_active(true);
+                }
             }
         }
 
 
         // Use saved pos
         {
-            auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
-            gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
-            gtk_box_pack_start (GTK_BOX (mainbox), hb, FALSE, FALSE, 0);
-
-            GtkWidget *b  = gtk_check_button_new_with_label (_("Use saved size and position of the tile"));
-            bool keepbbox = prefs->getBool(prefs_path + "keepbbox", true);
-            gtk_toggle_button_set_active ((GtkToggleButton *) b, keepbbox);
-            gtk_widget_set_tooltip_text (b, _("Pretend that the size and position of the tile are the same as the last time you tiled it (if any), instead of using the current size"));
-            gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
-
-            g_signal_connect(G_OBJECT(b), "toggled",
-                               G_CALLBACK(keep_bbox_toggled), NULL);
+            auto hb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN));
+            gtk_box_pack_start (GTK_BOX (mainbox), GTK_WIDGET(hb->gobj()), FALSE, FALSE, 0);
+
+            _cb_keep_bbox = Gtk::manage(new Gtk::CheckButton(_("Use saved size and position of the tile")));
+            auto keepbbox = prefs->getBool(prefs_path + "keepbbox", true);
+            _cb_keep_bbox->set_active(keepbbox);
+            _cb_keep_bbox->set_tooltip_text(_("Pretend that the size and position of the tile are the same "
+                                              "as the last time you tiled it (if any), instead of using the "
+                                              "current size"));
+            hb->pack_start(*_cb_keep_bbox, false, false, 0);
+            _cb_keep_bbox->signal_toggled().connect(sigc::mem_fun(*this, &CloneTiler::keep_bbox_toggled));
         }
 
         // Statusbar
@@ -2631,10 +2623,10 @@ void CloneTiler::xy_changed(GtkAdjustment *adj, gpointer data)
     prefs->setInt(prefs_path + pref, (int) floor(gtk_adjustment_get_value (adj) + 0.5));
 }
 
-void CloneTiler::keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/)
+void CloneTiler::keep_bbox_toggled()
 {
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setBool(prefs_path + "keepbbox", gtk_toggle_button_get_active(tb));
+    auto prefs = Inkscape::Preferences::get();
+    prefs->setBool(prefs_path + "keepbbox", _cb_keep_bbox->get_active());
 }
 
 void CloneTiler::pick_to(GtkToggleButton *tb, gpointer data)
@@ -2744,59 +2736,50 @@ void CloneTiler::pick_switched(GtkToggleButton */*tb*/, gpointer data)
 }
 
 
-void CloneTiler::switch_to_create(GtkToggleButton * /*tb*/, GtkWidget *dlg)
+void CloneTiler::switch_to_create()
 {
-    GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols"));
-    GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight"));
-
-    if (rowscols) {
-        gtk_widget_set_sensitive (rowscols, TRUE);
+    if (_rowscols) {
+        _rowscols->set_sensitive(true);
     }
-    if (widthheight) {
-        gtk_widget_set_sensitive (widthheight, FALSE);
+    if (_widthheight) {
+        _widthheight->set_sensitive(false);
     }
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    auto prefs = Inkscape::Preferences::get();
     prefs->setBool(prefs_path + "fillrect", false);
 }
 
 
-void CloneTiler::switch_to_fill(GtkToggleButton * /*tb*/, GtkWidget *dlg)
+void CloneTiler::switch_to_fill()
 {
-    GtkWidget *rowscols = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "rowscols"));
-    GtkWidget *widthheight = GTK_WIDGET(g_object_get_data (G_OBJECT(dlg), "widthheight"));
-
-    if (rowscols) {
-        gtk_widget_set_sensitive (rowscols, FALSE);
+    if (_rowscols) {
+        _rowscols->set_sensitive(false);
     }
-    if (widthheight) {
-        gtk_widget_set_sensitive (widthheight, TRUE);
+    if (_widthheight) {
+        _widthheight->set_sensitive(true);
     }
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    auto prefs = Inkscape::Preferences::get();
     prefs->setBool(prefs_path + "fillrect", true);
 }
 
-
-
-
-void CloneTiler::fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u)
+void CloneTiler::fill_width_changed()
 {
-    gdouble const raw_dist = gtk_adjustment_get_value (adj);
-    Inkscape::Util::Unit const *unit = u->getUnit();
-    gdouble const pixels = Inkscape::Util::Quantity::convert(raw_dist, unit, "px");
+    auto const raw_dist = fill_width->get_value();
+    auto const unit     = unit_menu->getUnit();
+    auto const pixels   = Inkscape::Util::Quantity::convert(raw_dist, unit, "px");
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    auto prefs = Inkscape::Preferences::get();
     prefs->setDouble(prefs_path + "fillwidth", pixels);
 }
 
-void CloneTiler::fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u)
+void CloneTiler::fill_height_changed()
 {
-    gdouble const raw_dist = gtk_adjustment_get_value (adj);
-    Inkscape::Util::Unit const *unit = u->getUnit();
-    gdouble const pixels = Inkscape::Util::Quantity::convert(raw_dist, unit, "px");
+    auto const raw_dist = fill_height->get_value();
+    auto const unit     = unit_menu->getUnit();
+    auto const pixels   = Inkscape::Util::Quantity::convert(raw_dist, unit, "px");
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
+    auto prefs = Inkscape::Preferences::get();
     prefs->setDouble(prefs_path + "fillheight", pixels);
 }
 
@@ -2814,16 +2797,14 @@ void CloneTiler::unit_changed()
     gtk_adjustment_set_value(fill_height->gobj(), height_value);
 }
 
-void CloneTiler::do_pick_toggled(Gtk::ToggleButton *tb)
+void CloneTiler::do_pick_toggled()
 {
-    GtkWidget *vvb = GTK_WIDGET(_dotrace);
-
-    auto prefs = Inkscape::Preferences::get();
-    auto active = tb->get_active();
+    auto prefs  = Inkscape::Preferences::get();
+    auto active = _b->get_active();
     prefs->setBool(prefs_path + "dotrace", active);
 
-    if (vvb) {
-        gtk_widget_set_sensitive (vvb, active);
+    if (_dotrace) {
+        gtk_widget_set_sensitive (_dotrace, active);
     }
 }
 
diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h
index e1c8bab35..70a22d3d0 100644
--- a/src/ui/dialog/clonetiler.h
+++ b/src/ui/dialog/clonetiler.h
@@ -54,11 +54,9 @@ protected:
     static void pick_switched(GtkToggleButton */*tb*/, gpointer data);
     static void pick_to(GtkToggleButton *tb, gpointer data);
     static void xy_changed(GtkAdjustment *adj, gpointer data);
-    static void fill_width_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u);
-    static void fill_height_changed(GtkAdjustment *adj, Inkscape::UI::Widget::UnitMenu *u);
-    static void switch_to_create(GtkToggleButton */*tb*/, GtkWidget *dlg);
-    static void switch_to_fill(GtkToggleButton */*tb*/, GtkWidget *dlg);
-    static void keep_bbox_toggled(GtkToggleButton *tb, gpointer /*data*/);
+    void switch_to_create();
+    void switch_to_fill();
+    void keep_bbox_toggled();
     static void unclump(GtkWidget */*widget*/, void *);
     static void reset(GtkWidget */*widget*/, GtkWidget *dlg);
     static guint number_of_clones(SPObject *obj);
@@ -73,8 +71,10 @@ protected:
 
     void apply();
     void change_selection(Inkscape::Selection *selection);
-    void do_pick_toggled(Gtk::ToggleButton *tb);
+    void do_pick_toggled();
     void external_change();
+    void fill_width_changed();
+    void fill_height_changed();
     void remove(bool do_undo = true);
     void on_remove_button_clicked() {remove();}
     void unit_changed();
@@ -121,6 +121,7 @@ private:
     CloneTiler& operator=(CloneTiler const &d);
 
     Gtk::CheckButton *_b;
+    Gtk::CheckButton *_cb_keep_bbox;
     GtkWidget *nb;
     SPDesktop *desktop;
     DesktopTracker deskTrack;
@@ -153,8 +154,8 @@ private:
     GtkWidget *_buttons_on_tiles;
     GtkWidget *_dotrace;
     GtkWidget *_status;
-    GtkWidget *_rowscols;
-    GtkWidget *_widthheight;
+    Gtk::Box *_rowscols;
+    Gtk::Box *_widthheight;
 };
 
 
-- 
cgit v1.2.3


From ded71e7f2330ae5abbb0b09e12f89a8fefc2820a Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Fri, 12 Aug 2016 00:45:47 +0100
Subject: CloneTiler: Further C++ification

(bzr r15053)
---
 src/ui/dialog/clonetiler.cpp | 18 +++++++++---------
 src/ui/dialog/clonetiler.h   |  2 +-
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index a9bec8227..c27d5d35a 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -1141,10 +1141,10 @@ CloneTiler::CloneTiler () :
                     //  diagrams on the left in the following screenshot:
                     //  http://www.inkscape.org/screenshots/gallery/inkscape-0.42-CVS-tiles-unclump.png
                     //  So unclumping is the process of spreading a number of objects out more evenly.
-                    GtkWidget *b = gtk_button_new_with_mnemonic (_(" _Unclump "));
-                    gtk_widget_set_tooltip_text (b, _("Spread out clones to reduce clumping; can be applied repeatedly"));
-                    g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (unclump), NULL);
-                    gtk_box_pack_end (GTK_BOX (sb), b, FALSE, FALSE, 0);
+                    auto b = Gtk::manage(new Gtk::Button(_(" _Unclump "), true));
+                    b->set_tooltip_text(_("Spread out clones to reduce clumping; can be applied repeatedly"));
+                    b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::unclump));
+                    gtk_box_pack_end (GTK_BOX (sb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0);
                 }
 
                 {
@@ -1948,14 +1948,14 @@ void CloneTiler::trace_finish()
     }
 }
 
-void CloneTiler::unclump(GtkWidget */*widget*/, void *)
+void CloneTiler::unclump()
 {
-    SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+    auto desktop = SP_ACTIVE_DESKTOP;
     if (desktop == NULL) {
         return;
     }
 
-    Inkscape::Selection *selection = desktop->getSelection();
+    auto selection = desktop->getSelection();
 
     // check if something is selected
     if (selection->isEmpty() || boost::distance(selection->items()) > 1) {
@@ -1963,8 +1963,8 @@ void CloneTiler::unclump(GtkWidget */*widget*/, void *)
         return;
     }
 
-    SPObject *obj = selection->singleItem();
-    SPObject *parent = obj->parent;
+    auto obj = selection->singleItem();
+    auto parent = obj->parent;
 
     std::vector to_unclump; // not including the original
 
diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h
index 70a22d3d0..04f676800 100644
--- a/src/ui/dialog/clonetiler.h
+++ b/src/ui/dialog/clonetiler.h
@@ -57,7 +57,7 @@ protected:
     void switch_to_create();
     void switch_to_fill();
     void keep_bbox_toggled();
-    static void unclump(GtkWidget */*widget*/, void *);
+    void unclump();
     static void reset(GtkWidget */*widget*/, GtkWidget *dlg);
     static guint number_of_clones(SPObject *obj);
     static void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
-- 
cgit v1.2.3


From 547e60aa793646e7fa7af194427186dcaceb5c4c Mon Sep 17 00:00:00 2001
From: Ted Gould 
Date: Fri, 12 Aug 2016 00:19:50 -0500
Subject: Switch over to GTK3

(bzr r14950.1.21)
---
 .snapcraft.yaml | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/.snapcraft.yaml b/.snapcraft.yaml
index 18fe6ed3c..16cac0c31 100644
--- a/.snapcraft.yaml
+++ b/.snapcraft.yaml
@@ -1,5 +1,5 @@
 name: inkscape
-version: 0.91+devel
+version: 0.92+devel
 summary: Vector Graphics Editor
 description: |
  An Open Source vector graphics editor, with capabilities similar to
@@ -13,7 +13,7 @@ description: |
  
  We also aim to maintain a thriving user and developer community by using
  open, community-oriented development.
-confinement: devmode # use "strict" to enforce system access only via declared interfaces
+confinement: strict
 
 parts:
   inkscape:
@@ -28,11 +28,12 @@ parts:
       - libboost-dev
       - libcdr-dev
       - libgc-dev
+      - libgdl-3-dev
       - libglib2.0-dev
       - libgnomevfs2-dev
       - libgsl-dev
-      - libgtk2.0-dev
-      - libgtkmm-2.4-dev
+      - libgtk-3-dev
+      - libgtkmm-3.0-dev
       - libgtkspell-dev
       - liblcms2-dev
       - libmagick++-dev
@@ -41,6 +42,7 @@ parts:
       - libpoppler-glib-dev
       - libpoppler-private-dev
       - libpopt-dev
+      - libpotrace-dev
       - librevenge-dev
       - libsigc++-2.0-dev
       - libtool
@@ -83,11 +85,9 @@ parts:
       - libxml-xql-perl
       - python-uniconvertor
       - ruby
-    stage:
-      - -usr/sbin/update-icon-caches
     snap:
       - -lib/inkscape/*.a
-    after: [desktop/gtk2]
+    after: [desktop/gtk3]
   snapcraft-wrapper:
     plugin: copy
     files:
-- 
cgit v1.2.3


From dffaf2ab2ab1cd1ca21c0ff9e9cc9f077faf17f1 Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Fri, 12 Aug 2016 21:10:12 +0100
Subject: CloneTiler: Replace all remaining g_signal usage

(bzr r15055)
---
 src/ui/dialog/clonetiler.cpp | 425 +++++++++++++++++++++----------------------
 src/ui/dialog/clonetiler.h   |  87 +++++----
 2 files changed, 251 insertions(+), 261 deletions(-)

diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
index c27d5d35a..8e9d3dbbf 100644
--- a/src/ui/dialog/clonetiler.cpp
+++ b/src/ui/dialog/clonetiler.cpp
@@ -25,6 +25,8 @@
 
 #include 
 #include 
+#include 
+#include 
 #include 
 
 #include "desktop.h"
@@ -66,7 +68,6 @@ static unsigned trace_visionkey;
 static gdouble trace_zoom;
 static SPDocument *trace_doc = NULL;
 
-
 CloneTiler::CloneTiler () :
     UI::Widget::Panel ("", "/dialogs/clonetiler/", SP_VERB_DIALOG_CLONETILER),
     desktop(NULL),
@@ -100,7 +101,7 @@ CloneTiler::CloneTiler () :
              */
             struct SymGroups {
                 gint group;
-                gchar const *label;
+                Glib::ustring label;
             } const sym_groups[] = {
                 // TRANSLATORS: "translation" means "shift" / "displacement" here.
                 {TILE_P1, _("P1: simple translation")},
@@ -126,33 +127,27 @@ CloneTiler::CloneTiler () :
 
             gint current = prefs->getInt(prefs_path + "symmetrygroup", 0);
 
-        // Create a list structure containing all the data to be displayed in
-        // the symmetry group combo box.
-        GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING);
-        GtkTreeIter iter;
-
-        for (unsigned j = 0; j < G_N_ELEMENTS(sym_groups); ++j) {
-            SymGroups const &sg = sym_groups[j];
+            // Add a new combo box widget with the list of symmetry groups to the vbox
+            auto combo = Gtk::manage(new Gtk::ComboBoxText());
+            combo->set_tooltip_text(_("Select one of the 17 symmetry groups for the tiling"));
 
-            // Add the description of the symgroup to a new row
-            gtk_list_store_append(store, &iter);
-            gtk_list_store_set(store, &iter, 0, sg.label, -1);
-        }
+            // Hack to add markup support
+            auto cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo->gobj()));
+            gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo->gobj()),
+                                           GTK_CELL_RENDERER(cell_list->data),
+                                           "markup", 0, NULL);
 
-        // Add a new combo box widget with the list of symmetry groups to the vbox
-        GtkWidget *combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
-        gtk_widget_set_tooltip_text (combo, _("Select one of the 17 symmetry groups for the tiling"));
-        gtk_box_pack_start (GTK_BOX (vb), combo, FALSE, FALSE, SB_MARGIN);
+            for (unsigned j = 0; j < G_N_ELEMENTS(sym_groups); ++j) {
+                SymGroups const &sg = sym_groups[j];
 
-        // Specify the rendering of data from the list in a combo box cell
-        GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
-        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);
-        gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, "markup", 0, NULL);
+                // Add the description of the symgroup to a new row
+                combo->append(sg.label);
+            }
 
-        gtk_combo_box_set_active (GTK_COMBO_BOX (combo), current);
+            gtk_box_pack_start (GTK_BOX (vb), GTK_WIDGET(combo->gobj()), FALSE, FALSE, SB_MARGIN);
 
-        g_signal_connect(G_OBJECT(combo), "changed",
-                    G_CALLBACK(symgroup_changed), NULL);
+            combo->set_active(current);
+            combo->signal_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::symgroup_changed), combo));
         }
 
         table_row_labels = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
@@ -175,7 +170,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                    _("Horizontal shift per row (in % of tile width)"), "shiftx_per_j",
                    -10000, 10000, "%");
@@ -183,7 +178,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                    _("Horizontal shift per column (in % of tile width)"), "shiftx_per_i",
                    -10000, 10000, "%");
@@ -191,7 +186,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand",
+                auto l = spinbox (_("Randomize the horizontal shift by this percentage"), "shiftx_rand",
                                                    0, 1000, "%");
                 table_attach (table, l, 0, 2, 4);
             }
@@ -207,7 +202,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical shift per row (in % of tile height)"), "shifty_per_j",
                                                    -10000, 10000, "%");
@@ -215,7 +210,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical shift per column (in % of tile height)"), "shifty_per_i",
                                                    -10000, 10000, "%");
@@ -223,7 +218,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                                                    _("Randomize the vertical shift by this percentage"), "shifty_rand",
                                                    0, 1000, "%");
                 table_attach (table, l, 0, 3, 4);
@@ -238,14 +233,14 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                                                    _("Whether rows are spaced evenly (1), converge (<1) or diverge (>1)"), "shifty_exp",
                                                    0, 10, "", true);
                 table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                                                    _("Whether columns are spaced evenly (1), converge (<1) or diverge (>1)"), "shiftx_exp",
                                                    0, 10, "", true);
                 table_attach (table, l, 0, 4, 3);
@@ -260,12 +255,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate");
+                auto l = checkbox (_("Alternate the sign of shifts for each row"), "shifty_alternate");
                 table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate");
+                auto l = checkbox (_("Alternate the sign of shifts for each column"), "shiftx_alternate");
                 table_attach (table, l, 0, 5, 3);
             }
 
@@ -278,12 +273,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate");
+                auto l = checkbox (_("Cumulate the shifts for each row"), "shifty_cumulate");
                 table_attach (table, l, 0, 6, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate");
+                auto l = checkbox (_("Cumulate the shifts for each column"), "shiftx_cumulate");
                 table_attach (table, l, 0, 6, 3);
             }
 
@@ -296,12 +291,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Exclude tile height in shift"), "shifty_excludeh");
+                auto l = checkbox (_("Exclude tile height in shift"), "shifty_excludeh");
                 table_attach (table, l, 0, 7, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Exclude tile width in shift"), "shiftx_excludew");
+                auto l = checkbox (_("Exclude tile width in shift"), "shiftx_excludew");
                 table_attach (table, l, 0, 7, 3);
             }
 
@@ -324,7 +319,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Horizontal scale per row (in % of tile width)"), "scalex_per_j",
                                                    -100, 1000, "%");
@@ -332,7 +327,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Horizontal scale per column (in % of tile width)"), "scalex_per_i",
                                                    -100, 1000, "%");
@@ -340,7 +335,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand",
+                auto l = spinbox (_("Randomize the horizontal scale by this percentage"), "scalex_rand",
                                                    0, 1000, "%");
                 table_attach (table, l, 0, 2, 4);
             }
@@ -354,7 +349,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical scale per row (in % of tile height)"), "scaley_per_j",
                                                    -100, 1000, "%");
@@ -362,7 +357,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Vertical scale per column (in % of tile height)"), "scaley_per_i",
                                                    -100, 1000, "%");
@@ -370,7 +365,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand",
+                auto l = spinbox (_("Randomize the vertical scale by this percentage"), "scaley_rand",
                                                    0, 1000, "%");
                 table_attach (table, l, 0, 3, 4);
             }
@@ -384,13 +379,13 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp",
+                auto l = spinbox (_("Whether row scaling is uniform (1), converge (<1) or diverge (>1)"), "scaley_exp",
                                                    0, 10, "", true);
                 table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp",
+                auto l = spinbox (_("Whether column scaling is uniform (1), converge (<1) or diverge (>1)"), "scalex_exp",
                                                    0, 10, "", true);
                 table_attach (table, l, 0, 4, 3);
             }
@@ -404,13 +399,13 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log",
+                auto l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scaley_log",
                                                    0, 10, "", false);
                 table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log",
+                auto l = spinbox (_("Base for a logarithmic spiral: not used (0), converge (<1), or diverge (>1)"), "scalex_log",
                                                    0, 10, "", false);
                 table_attach (table, l, 0, 5, 3);
             }
@@ -424,12 +419,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate");
+                auto l = checkbox (_("Alternate the sign of scales for each row"), "scaley_alternate");
                 table_attach (table, l, 0, 6, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate");
+                auto l = checkbox (_("Alternate the sign of scales for each column"), "scalex_alternate");
                 table_attach (table, l, 0, 6, 3);
             }
 
@@ -442,12 +437,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Cumulate the scales for each row"), "scaley_cumulate");
+                auto l = checkbox (_("Cumulate the scales for each row"), "scaley_cumulate");
                 table_attach (table, l, 0, 7, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Cumulate the scales for each column"), "scalex_cumulate");
+                auto l = checkbox (_("Cumulate the scales for each column"), "scalex_cumulate");
                 table_attach (table, l, 0, 7, 3);
             }
 
@@ -470,7 +465,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Rotate tiles by this angle for each row"), "rotate_per_j",
                                                    -180, 180, "°");
@@ -478,7 +473,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (
+                auto l = spinbox (
                     // xgettext:no-c-format
                                                    _("Rotate tiles by this angle for each column"), "rotate_per_i",
                                                    -180, 180, "°");
@@ -486,7 +481,7 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand",
+                auto l = spinbox (_("Randomize the rotation angle by this percentage"), "rotate_rand",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 2, 4);
             }
@@ -500,12 +495,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej");
+                auto l = checkbox (_("Alternate the rotation direction for each row"), "rotate_alternatej");
                 table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei");
+                auto l = checkbox (_("Alternate the rotation direction for each column"), "rotate_alternatei");
                 table_attach (table, l, 0, 3, 3);
             }
 
@@ -518,12 +513,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej");
+                auto l = checkbox (_("Cumulate the rotation for each row"), "rotate_cumulatej");
                 table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei");
+                auto l = checkbox (_("Cumulate the rotation for each column"), "rotate_cumulatei");
                 table_attach (table, l, 0, 4, 3);
             }
 
@@ -547,19 +542,19 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j",
+                auto l = spinbox (_("Blur tiles by this percentage for each row"), "blur_per_j",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i",
+                auto l = spinbox (_("Blur tiles by this percentage for each column"), "blur_per_i",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the tile blur by this percentage"), "blur_rand",
+                auto l = spinbox (_("Randomize the tile blur by this percentage"), "blur_rand",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 2, 4);
             }
@@ -573,12 +568,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej");
+                auto l = checkbox (_("Alternate the sign of blur change for each row"), "blur_alternatej");
                 table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei");
+                auto l = checkbox (_("Alternate the sign of blur change for each column"), "blur_alternatei");
                 table_attach (table, l, 0, 3, 3);
             }
 
@@ -593,19 +588,19 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j",
+                auto l = spinbox (_("Decrease tile opacity by this percentage for each row"), "opacity_per_j",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i",
+                auto l = spinbox (_("Decrease tile opacity by this percentage for each column"), "opacity_per_i",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 4, 3);
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand",
+                auto l = spinbox (_("Randomize the tile opacity by this percentage"), "opacity_rand",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 4, 4);
             }
@@ -619,12 +614,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej");
+                auto l = checkbox (_("Alternate the sign of opacity change for each row"), "opacity_alternatej");
                 table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei");
+                auto l = checkbox (_("Alternate the sign of opacity change for each column"), "opacity_alternatei");
                 table_attach (table, l, 0, 5, 3);
             }
         }
@@ -643,7 +638,7 @@ CloneTiler::CloneTiler () :
 
             guint32 rgba = 0x000000ff | sp_svg_read_color (prefs->getString(prefs_path + "initial_color").data(), 0x000000ff);
             color_picker = new Inkscape::UI::Widget::ColorPicker (*new Glib::ustring(_("Initial color of tiled clones")), *new Glib::ustring(_("Initial color for clones (works only if the original has unset fill or stroke or on spray tool in copy mode)")), rgba, false);
-            color_changed_connection = color_picker->connectChanged (sigc::ptr_fun(on_picker_color_changed));
+            color_changed_connection = color_picker->connectChanged(sigc::mem_fun(*this, &CloneTiler::on_picker_color_changed));
 
             gtk_box_pack_start (GTK_BOX (hb), reinterpret_cast(color_picker->gobj()), FALSE, FALSE, 0);
 
@@ -663,19 +658,19 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j",
+                auto l = spinbox (_("Change the tile hue by this percentage for each row"), "hue_per_j",
                                                    -100, 100, "%");
                 table_attach (table, l, 0, 2, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i",
+                auto l = spinbox (_("Change the tile hue by this percentage for each column"), "hue_per_i",
                                                    -100, 100, "%");
                 table_attach (table, l, 0, 2, 3);
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the tile hue by this percentage"), "hue_rand",
+                auto l = spinbox (_("Randomize the tile hue by this percentage"), "hue_rand",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 2, 4);
             }
@@ -690,19 +685,19 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j",
+                auto l = spinbox (_("Change the color saturation by this percentage for each row"), "saturation_per_j",
                                                    -100, 100, "%");
                 table_attach (table, l, 0, 3, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i",
+                auto l = spinbox (_("Change the color saturation by this percentage for each column"), "saturation_per_i",
                                                    -100, 100, "%");
                 table_attach (table, l, 0, 3, 3);
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand",
+                auto l = spinbox (_("Randomize the color saturation by this percentage"), "saturation_rand",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 3, 4);
             }
@@ -716,19 +711,19 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j",
+                auto l = spinbox (_("Change the color lightness by this percentage for each row"), "lightness_per_j",
                                                    -100, 100, "%");
                 table_attach (table, l, 0, 4, 2);
             }
 
             {
-                GtkWidget *l = spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i",
+                auto l = spinbox (_("Change the color lightness by this percentage for each column"), "lightness_per_i",
                                                    -100, 100, "%");
                 table_attach (table, l, 0, 4, 3);
             }
 
             {
-                GtkWidget *l = spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand",
+                auto l = spinbox (_("Randomize the color lightness by this percentage"), "lightness_rand",
                                                    0, 100, "%");
                 table_attach (table, l, 0, 4, 4);
             }
@@ -742,12 +737,12 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej");
+                auto l = checkbox (_("Alternate the sign of color changes for each row"), "color_alternatej");
                 table_attach (table, l, 0, 5, 2);
             }
 
             {
-                GtkWidget *l = checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei");
+                auto l = checkbox (_("Alternate the sign of color changes for each column"), "color_alternatei");
                 table_attach (table, l, 0, 5, 3);
             }
 
@@ -785,71 +780,62 @@ CloneTiler::CloneTiler () :
                 gtk_grid_set_column_spacing(GTK_GRID(table), 6);
                 gtk_container_add(GTK_CONTAINER(frame), table);
 
-
-                GtkWidget* radio;
+                Gtk::RadioButtonGroup rb_group;
                 {
-                    radio = gtk_radio_button_new_with_label (NULL, _("Color"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the visible color and opacity"));
-                    table_attach (table, radio, 0.0, 1, 1);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_COLOR));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR);
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Color")));
+                    radio->set_tooltip_text(_("Pick the visible color and opacity"));
+                    table_attach(table, radio, 0.0, 1, 1);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_COLOR));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_COLOR);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("Opacity"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the total accumulated opacity"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("Opacity")));
+                    radio->set_tooltip_text(_("Pick the total accumulated opacity"));
                     table_attach (table, radio, 0.0, 2, 1);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_OPACITY));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_OPACITY));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_OPACITY);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("R"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the Red component of the color"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("R")));
+                    radio->set_tooltip_text(_("Pick the Red component of the color"));
                     table_attach (table, radio, 0.0, 1, 2);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_R));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_R);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_R));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_R);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("G"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the Green component of the color"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("G")));
+                    radio->set_tooltip_text(_("Pick the Green component of the color"));
                     table_attach (table, radio, 0.0, 2, 2);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_G));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_G);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_G));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_G);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), _("B"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the Blue component of the color"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, _("B")));
+                    radio->set_tooltip_text(_("Pick the Blue component of the color"));
                     table_attach (table, radio, 0.0, 3, 2);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_B));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_B);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_B));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_B);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color hue", "H"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the hue of the color"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, C_("Clonetiler color hue", "H")));
+                    radio->set_tooltip_text(_("Pick the hue of the color"));
                     table_attach (table, radio, 0.0, 1, 3);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_H));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_H);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_H));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_H);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color saturation", "S"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the saturation of the color"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, C_("Clonetiler color saturation", "S")));
+                    radio->set_tooltip_text(_("Pick the saturation of the color"));
                     table_attach (table, radio, 0.0, 2, 3);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_S));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_S);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_S));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_S);
                 }
                 {
-                    radio = gtk_radio_button_new_with_label (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)), C_("Clonetiler color lightness", "L"));
-                    gtk_widget_set_tooltip_text (radio, _("Pick the lightness of the color"));
+                    auto radio = Gtk::manage(new Gtk::RadioButton(rb_group, C_("Clonetiler color lightness", "L")));
+                    radio->set_tooltip_text(_("Pick the lightness of the color"));
                     table_attach (table, radio, 0.0, 3, 3);
-                    g_signal_connect (G_OBJECT (radio), "toggled",
-                                        G_CALLBACK (pick_switched), GINT_TO_POINTER(PICK_L));
-                    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), prefs->getInt(prefs_path + "pick", 0) == PICK_L);
+                    radio->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_switched), PICK_L));
+                    radio->set_active(prefs->getInt(prefs_path + "pick", 0) == PICK_L);
                 }
 
             }
@@ -870,7 +856,7 @@ CloneTiler::CloneTiler () :
                     table_attach (table, l, 1.0, 1, 1);
                 }
                 {
-                    GtkWidget *l = spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked",
+                    auto l = spinbox (_("Shift the mid-range of the picked value upwards (>0) or downwards (<0)"), "gamma_picked",
                                                        -10, 10, "");
                     table_attach (table, l, 0.0, 1, 2);
                 }
@@ -881,7 +867,7 @@ CloneTiler::CloneTiler () :
                     table_attach (table, l, 1.0, 1, 3);
                 }
                 {
-                    GtkWidget *l = spinbox (_("Randomize the picked value by this percentage"), "rand_picked",
+                    auto l = spinbox (_("Randomize the picked value by this percentage"), "rand_picked",
                                                        0, 100, "%");
                     table_attach (table, l, 0.0, 1, 4);
                 }
@@ -892,7 +878,7 @@ CloneTiler::CloneTiler () :
                     table_attach (table, l, 1.0, 2, 1);
                 }
                 {
-                    GtkWidget *l = checkbox (_("Invert the picked value"), "invert_picked");
+                    auto l = checkbox (_("Invert the picked value"), "invert_picked");
                     table_attach (table, l, 0.0, 2, 2);
                 }
             }
@@ -907,43 +893,39 @@ CloneTiler::CloneTiler () :
                 gtk_container_add(GTK_CONTAINER(frame), table);
 
                 {
-                    GtkWidget *b  = gtk_check_button_new_with_label (_("Presence"));
+                    auto b = Gtk::manage(new Gtk::CheckButton(_("Presence")));
                     bool old = prefs->getBool(prefs_path + "pick_to_presence", true);
-                    gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
-                    gtk_widget_set_tooltip_text (b, _("Each clone is created with the probability determined by the picked value in that point"));
+                    b->set_active(old);
+                    b->set_tooltip_text(_("Each clone is created with the probability determined by the picked value in that point"));
                     table_attach (table, b, 0.0, 1, 1);
-                    g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(pick_to), (gpointer) "pick_to_presence");
+                    b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_presence"));
                 }
 
                 {
-                    GtkWidget *b  = gtk_check_button_new_with_label (_("Size"));
+                    auto b = Gtk::manage(new Gtk::CheckButton(_("Size")));
                     bool old = prefs->getBool(prefs_path + "pick_to_size");
-                    gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
-                    gtk_widget_set_tooltip_text (b, _("Each clone's size is determined by the picked value in that point"));
+                    b->set_active(old);
+                    b->set_tooltip_text(_("Each clone's size is determined by the picked value in that point"));
                     table_attach (table, b, 0.0, 2, 1);
-                    g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(pick_to), (gpointer) "pick_to_size");
+                    b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_size"));
                 }
 
                 {
-                    GtkWidget *b  = gtk_check_button_new_with_label (_("Color"));
+                    auto b = Gtk::manage(new Gtk::CheckButton(_("Color")));
                     bool old = prefs->getBool(prefs_path + "pick_to_color", 0);
-                    gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
-                    gtk_widget_set_tooltip_text (b, _("Each clone is painted by the picked color (the original must have unset fill or stroke)"));
+                    b->set_active(old);
+                    b->set_tooltip_text(_("Each clone is painted by the picked color (the original must have unset fill or stroke)"));
                     table_attach (table, b, 0.0, 1, 2);
-                    g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(pick_to), (gpointer) "pick_to_color");
+                    b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_color"));
                 }
 
                 {
-                    GtkWidget *b  = gtk_check_button_new_with_label (_("Opacity"));
+                    auto b = Gtk::manage(new Gtk::CheckButton(_("Opacity")));
                     bool old = prefs->getBool(prefs_path + "pick_to_opacity", 0);
-                    gtk_toggle_button_set_active ((GtkToggleButton *) b, old);
-                    gtk_widget_set_tooltip_text (b, _("Each clone's opacity is determined by the picked value in that point"));
+                    b->set_active(old);
+                    b->set_tooltip_text(_("Each clone's opacity is determined by the picked value in that point"));
                     table_attach (table, b, 0.0, 2, 2);
-                    g_signal_connect(G_OBJECT(b), "toggled",
-                                       G_CALLBACK(pick_to), (gpointer) "pick_to_opacity");
+                    b->signal_toggled().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::pick_to), b, "pick_to_opacity"));
                 }
             }
            gtk_widget_set_sensitive (vvb, prefs->getBool(prefs_path + "dotrace"));
@@ -980,9 +962,7 @@ CloneTiler::CloneTiler () :
                     sb->set_width_chars (7);
                     _rowscols->pack_start(*sb, true, true, 0);
 
-                    // TODO: C++ification
-                    g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
-                                       G_CALLBACK(xy_changed), (gpointer) "jmax");
+                    a->signal_value_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::xy_changed), a, "jmax"));
                 }
 
                 {
@@ -1002,9 +982,7 @@ CloneTiler::CloneTiler () :
                     sb->set_width_chars (7);
                     _rowscols->pack_start(*sb, true, true, 0);
 
-                    // TODO: C++ification
-                    g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
-                                       G_CALLBACK(xy_changed), (gpointer) "imax");
+                    a->signal_value_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::xy_changed), a, "imax"));
                 }
 
                 table_attach (table, GTK_WIDGET(_rowscols->gobj()), 0.0, 1, 2);
@@ -1164,11 +1142,11 @@ CloneTiler::CloneTiler () :
             }
 
             {
-                GtkWidget *b = gtk_button_new_with_mnemonic (_(" R_eset "));
+                auto b = Gtk::manage(new Gtk::Button(_(" R_eset "), true));
                 // TRANSLATORS: "change" is a noun here
-                gtk_widget_set_tooltip_text (b, _("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"));
-                g_signal_connect (G_OBJECT (b), "clicked", G_CALLBACK (reset), this);
-                gtk_box_pack_start (GTK_BOX (hb), b, FALSE, FALSE, 0);
+                b->set_tooltip_text(_("Reset all shifts, scales, rotates, opacity and color changes in the dialog to zero"));
+                b->signal_clicked().connect(sigc::mem_fun(*this, &CloneTiler::reset));
+                gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(b->gobj()), FALSE, FALSE, 0);
             }
         }
 
@@ -2197,7 +2175,7 @@ void CloneTiler::apply()
 
     SPItem *item = dynamic_cast(obj);
     if (dotrace) {
-        trace_setup (desktop->getDocument(), 1.0, item);
+        trace_setup(desktop->getDocument(), 1.0, item);
     }
 
     Geom::Point center;
@@ -2524,72 +2502,74 @@ GtkWidget * CloneTiler::new_tab(GtkWidget *nb, const gchar *label)
     return vb;
 }
 
-void CloneTiler::checkbox_toggled(GtkToggleButton *tb, gpointer *data)
+void CloneTiler::checkbox_toggled(Gtk::ToggleButton   *tb,
+                                  const Glib::ustring &attr)
 {
-    const gchar *attr = (const gchar *) data;
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    prefs->setBool(prefs_path + attr, gtk_toggle_button_get_active(tb));
+    auto prefs = Inkscape::Preferences::get();
+    prefs->setBool(prefs_path + attr, tb->get_active());
 }
 
-GtkWidget * CloneTiler::checkbox(const char *tip, const char *attr)
+Gtk::Widget * CloneTiler::checkbox(const char          *tip,
+                                   const Glib::ustring &attr)
 {
-    auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, VB_MARGIN);
-    gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
-
-    GtkWidget *b = gtk_check_button_new ();
-    gtk_widget_set_tooltip_text (b, tip);
+    auto hb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, VB_MARGIN));
+    auto b  = Gtk::manage(new Gtk::CheckButton());
+    b->set_tooltip_text(tip);
 
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    bool value = prefs->getBool(prefs_path + attr);
-    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(b), value);
+    auto const prefs = Inkscape::Preferences::get();
+    auto const value = prefs->getBool(prefs_path + attr);
+    b->set_active(value);
 
-    gtk_box_pack_end (GTK_BOX (hb), b, FALSE, TRUE, 0);
-    g_signal_connect ( G_OBJECT (b), "clicked",
-                         G_CALLBACK (checkbox_toggled), (gpointer) attr);
+    hb->pack_end(*b, false, true);
+    b->signal_clicked().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::checkbox_toggled), b, attr));
 
-    g_object_set_data (G_OBJECT(b), "uncheckable", GINT_TO_POINTER(TRUE));
+    b->set_data("uncheckable", GINT_TO_POINTER(true));
 
     return hb;
 }
 
-void CloneTiler::value_changed(GtkAdjustment *adj, gpointer data)
+void CloneTiler::value_changed(Glib::RefPtr &adj,
+                               Glib::ustring const           &pref)
 {
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    const gchar *pref = (const gchar *) data;
-    prefs->setDouble(prefs_path + pref, gtk_adjustment_get_value (adj));
+    auto prefs = Inkscape::Preferences::get();
+    prefs->setDouble(prefs_path + pref, adj->get_value());
 }
 
-GtkWidget * CloneTiler::spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent/* = false*/)
+Gtk::Widget * CloneTiler::spinbox(const char          *tip,
+                                  const Glib::ustring &attr,
+                                  double               lower,
+                                  double               upper,
+                                  const gchar         *suffix,
+                                  bool                 exponent/* = false*/)
 {
-    auto hb = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
-    gtk_box_set_homogeneous(GTK_BOX(hb), FALSE);
+    auto hb = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL, 0));
 
     {
-        Glib::RefPtr a;
-        if (exponent) {
-            a = Gtk::Adjustment::create(1.0, lower, upper, 0.01, 0.05, 0);
-        } else {
-            a = Gtk::Adjustment::create(0.0, lower, upper, 0.1, 0.5, 0);
-        }
+        // Parameters for adjustment
+        auto const initial_value  = (exponent ? 1.0 : 0.0);
+        auto const step_increment = (exponent ? 0.01 : 0.1);
+        auto const page_increment = (exponent ? 0.05 : 0.4);
 
-        Inkscape::UI::Widget::SpinButton *sb;
-        if (exponent) {
-            sb = new Inkscape::UI::Widget::SpinButton(a, 0.01, 2);
-        } else {
-            sb = new Inkscape::UI::Widget::SpinButton(a, 0.1, 1);
-	}
+        auto a = Gtk::Adjustment::create(initial_value,
+                                         lower,
+                                         upper,
+                                         step_increment,
+                                         page_increment);
+
+        auto const climb_rate = (exponent ? 0.01 : 0.1);
+        auto const digits = (exponent ? 2 : 1);
+
+        auto sb = new Inkscape::UI::Widget::SpinButton(a, climb_rate, digits);
 
         sb->set_tooltip_text (tip);
         sb->set_width_chars (5);
         sb->set_digits(3);
-        gtk_box_pack_start (GTK_BOX (hb), GTK_WIDGET(sb->gobj()), FALSE, FALSE, SB_MARGIN);
+        hb->pack_start(*sb, false, false, SB_MARGIN);
 
-        Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-        double value = prefs->getDoubleLimited(prefs_path + attr, exponent? 1.0 : 0.0, lower, upper);
+        auto prefs = Inkscape::Preferences::get();
+        auto value = prefs->getDoubleLimited(prefs_path + attr, exponent? 1.0 : 0.0, lower, upper);
         a->set_value (value);
-        // TODO: C++ification
-        g_signal_connect(G_OBJECT(a->gobj()), "value_changed",
-                           G_CALLBACK(value_changed), (gpointer) attr);
+        a->signal_value_changed().connect(sigc::bind(sigc::mem_fun(*this, &CloneTiler::value_changed), a, attr));
 
         if (exponent) {
             sb->set_data ("oneable", GINT_TO_POINTER(TRUE));
@@ -2599,28 +2579,27 @@ GtkWidget * CloneTiler::spinbox(const char *tip, const char *attr, double lower,
     }
 
     {
-        GtkWidget *l = gtk_label_new ("");
-        gtk_label_set_markup (GTK_LABEL(l), suffix);
-        gtk_widget_set_halign(l, GTK_ALIGN_END);
-        gtk_widget_set_valign(l, GTK_ALIGN_START);
-        gtk_box_pack_start (GTK_BOX (hb), l, FALSE, FALSE, 0);
+        auto l = Gtk::manage(new Gtk::Label(""));
+        l->set_markup(suffix);
+        l->set_halign(Gtk::ALIGN_END);
+        l->set_valign(Gtk::ALIGN_START);
+        hb->pack_start(*l);
     }
 
     return hb;
 }
 
-void CloneTiler::symgroup_changed(GtkComboBox *cb, gpointer /*data*/)
+void CloneTiler::symgroup_changed(Gtk::ComboBox *cb)
 {
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    gint group_new = gtk_combo_box_get_active (cb);
+    auto prefs = Inkscape::Preferences::get();
+    auto group_new = cb->get_active_row_number();
     prefs->setInt(prefs_path + "symmetrygroup", group_new);
 }
 
-void CloneTiler::xy_changed(GtkAdjustment *adj, gpointer data)
+void CloneTiler::xy_changed(Glib::RefPtr &adj, Glib::ustring const &pref)
 {
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    const gchar *pref = (const gchar *) data;
-    prefs->setInt(prefs_path + pref, (int) floor(gtk_adjustment_get_value (adj) + 0.5));
+    auto prefs = Inkscape::Preferences::get();
+    prefs->setInt(prefs_path + pref, (int) floor(adj->get_value() + 0.5));
 }
 
 void CloneTiler::keep_bbox_toggled()
@@ -2629,11 +2608,10 @@ void CloneTiler::keep_bbox_toggled()
     prefs->setBool(prefs_path + "keepbbox", _cb_keep_bbox->get_active());
 }
 
-void CloneTiler::pick_to(GtkToggleButton *tb, gpointer data)
+void CloneTiler::pick_to(Gtk::ToggleButton *tb, Glib::ustring const &pref)
 {
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    const gchar *pref = (const gchar *) data;
-    prefs->setBool(prefs_path + pref, gtk_toggle_button_get_active(tb));
+    auto prefs = Inkscape::Preferences::get();
+    prefs->setBool(prefs_path + pref, tb->get_active());
 }
 
 
@@ -2671,9 +2649,14 @@ void CloneTiler::reset_recursive(GtkWidget *w)
     }
 }
 
-void CloneTiler::reset(GtkWidget */*widget*/, GtkWidget *dlg)
+void CloneTiler::reset()
+{
+    reset_recursive(GTK_WIDGET(this->gobj()));
+}
+
+void CloneTiler::table_attach(GtkWidget *table, Gtk::Widget *widget, float align, int row, int col)
 {
-    reset_recursive (dlg);
+    table_attach(table, GTK_WIDGET(widget->gobj()), align, row, col);
 }
 
 void CloneTiler::table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col)
@@ -2728,14 +2711,12 @@ GtkWidget * CloneTiler::table_x_y_rand(int values)
     return table;
 }
 
-void CloneTiler::pick_switched(GtkToggleButton */*tb*/, gpointer data)
+void CloneTiler::pick_switched(PickType v)
 {
-    Inkscape::Preferences *prefs = Inkscape::Preferences::get();
-    guint v = GPOINTER_TO_INT (data);
+    auto prefs = Inkscape::Preferences::get();
     prefs->setInt(prefs_path + "pick", v);
 }
 
-
 void CloneTiler::switch_to_create()
 {
     if (_rowscols) {
diff --git a/src/ui/dialog/clonetiler.h b/src/ui/dialog/clonetiler.h
index 04f676800..db3049ef1 100644
--- a/src/ui/dialog/clonetiler.h
+++ b/src/ui/dialog/clonetiler.h
@@ -18,6 +18,7 @@
 
 namespace Gtk {
     class CheckButton;
+    class ComboBox;
     class ToggleButton;
 }
 
@@ -38,48 +39,66 @@ public:
     static CloneTiler &getInstance() { return *new CloneTiler(); }
     void show_page_trace();
 protected:
+    enum PickType {
+        PICK_COLOR,
+        PICK_OPACITY,
+        PICK_R,
+        PICK_G,
+        PICK_B,
+        PICK_H,
+        PICK_S,
+        PICK_L
+    };
 
     GtkWidget * new_tab(GtkWidget *nb, const gchar *label);
     GtkWidget * table_x_y_rand(int values);
-    GtkWidget * spinbox(const char *tip, const char *attr, double lower, double upper, const gchar *suffix, bool exponent = false);
-    GtkWidget * checkbox(const char *tip, const char *attr);
+    Gtk::Widget * spinbox(const char          *tip,
+                          const Glib::ustring &attr,
+                          double               lower,
+                          double               upper,
+                          const gchar         *suffix,
+                          bool                 exponent = false);
+    Gtk::Widget * checkbox(const char          *tip,
+                           const Glib::ustring &attr);
     void table_attach(GtkWidget *table, GtkWidget *widget, float align, int row, int col);
-
-    // TODO: Improve encapsulation by using SigC++ signal handling, and convert all of these into
-    // non-static member functions
-    static void symgroup_changed(GtkComboBox *cb, gpointer /*data*/);
-    static void on_picker_color_changed(guint rgba);
-    static void trace_hide_tiled_clones_recursively(SPObject *from);
-    static void checkbox_toggled(GtkToggleButton *tb, gpointer *data);
-    static void pick_switched(GtkToggleButton */*tb*/, gpointer data);
-    static void pick_to(GtkToggleButton *tb, gpointer data);
-    static void xy_changed(GtkAdjustment *adj, gpointer data);
-    void switch_to_create();
-    void switch_to_fill();
-    void keep_bbox_toggled();
-    void unclump();
-    static void reset(GtkWidget */*widget*/, GtkWidget *dlg);
-    static guint number_of_clones(SPObject *obj);
-    static void trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
-    static guint32 trace_pick(Geom::Rect box);
-    static void trace_finish();
-    static bool is_a_clone_of(SPObject *tile, SPObject *obj);
-    static Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m);
-    static double randomize01(double val, double rand);
-    static void value_changed(GtkAdjustment *adj, gpointer data);
-    static void reset_recursive(GtkWidget *w);
+    void table_attach(GtkWidget *table, Gtk::Widget *widget, float align, int row, int col);
+
+    void       symgroup_changed(Gtk::ComboBox *cb);
+    void       on_picker_color_changed(guint rgba);
+    void       trace_hide_tiled_clones_recursively(SPObject *from);
+    guint      number_of_clones(SPObject *obj);
+    void       trace_setup(SPDocument *doc, gdouble zoom, SPItem *original);
+    guint32    trace_pick(Geom::Rect box);
+    void       trace_finish();
+    bool       is_a_clone_of(SPObject *tile, SPObject *obj);
+    Geom::Rect transform_rect(Geom::Rect const &r, Geom::Affine const &m);
+    double     randomize01(double val, double rand);
 
     void apply();
     void change_selection(Inkscape::Selection *selection);
+    void checkbox_toggled(Gtk::ToggleButton   *tb,
+                          Glib::ustring const &attr);
     void do_pick_toggled();
     void external_change();
     void fill_width_changed();
     void fill_height_changed();
-    void remove(bool do_undo = true);
+    void keep_bbox_toggled();
     void on_remove_button_clicked() {remove();}
+    void pick_switched(PickType);
+    void pick_to(Gtk::ToggleButton   *tb,
+                 Glib::ustring const &pref);
+    void remove(bool do_undo = true);
+    void reset();
+    void reset_recursive(GtkWidget *w);
+    void switch_to_create();
+    void switch_to_fill();
+    void unclump();
     void unit_changed();
+    void value_changed(Glib::RefPtr &adj, Glib::ustring const &pref);
+    void xy_changed(Glib::RefPtr &adj, Glib::ustring const &pref);
 
-    static Geom::Affine get_transform(    // symmetry group
+    Geom::Affine get_transform(
+            // symmetry group
             int type,
 
             // row, column
@@ -156,20 +175,10 @@ private:
     GtkWidget *_status;
     Gtk::Box *_rowscols;
     Gtk::Box *_widthheight;
+    
 };
 
 
-enum {
-    PICK_COLOR,
-    PICK_OPACITY,
-    PICK_R,
-    PICK_G,
-    PICK_B,
-    PICK_H,
-    PICK_S,
-    PICK_L
-};
-
 enum {
     TILE_P1,
     TILE_P2,
-- 
cgit v1.2.3


From 79114d4f5ed18fc7bc79fff42bbc02d24042b484 Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Sat, 13 Aug 2016 16:59:04 +0100
Subject: inkview: C++ify

(bzr r15056)
---
 src/inkview.cpp | 273 ++++++++++++++++++++++++--------------------------------
 1 file changed, 115 insertions(+), 158 deletions(-)

diff --git a/src/inkview.cpp b/src/inkview.cpp
index c90d0b85e..fe656ca5b 100644
--- a/src/inkview.cpp
+++ b/src/inkview.cpp
@@ -34,6 +34,8 @@
 #include 
 #include 
 
+#include 
+#include 
 #include 
 
 // #include 
@@ -66,28 +68,38 @@
 extern char *optarg;
 extern int  optind, opterr;
 
-struct SPSlideShow {
-    char **slides;
-    int size;
-    int length;
+class SPSlideShow {
+public:
+    std::vector slides;
     int current;
     SPDocument *doc;
     GtkWidget *view;
     GtkWidget *window;
     bool fullscreen;
     int timer;
-};
 
-static GtkWidget *sp_svgview_control_show (struct SPSlideShow *ss);
-static void sp_svgview_show_next (struct SPSlideShow *ss);
-static void sp_svgview_show_prev (struct SPSlideShow *ss);
-static void sp_svgview_goto_first (struct SPSlideShow *ss);
-static void sp_svgview_goto_last (struct SPSlideShow *ss);
+    SPSlideShow()
+        :
+            slides(),
+            current(0),
+            doc(NULL),
+            view(NULL),
+            fullscreen(false)
+    {}
+
+    GtkWidget *control_show();
+    void       show_next();
+    void       show_prev();
+    void       goto_first();
+    void       goto_last();
+
+protected:
+    void       waiting_cursor();
+    void       normal_cursor();
+    void       set_document(SPDocument *doc,
+                            int         current);
+};
 
-static int sp_svgview_show_next_cb (GtkWidget *widget, void *data);
-static int sp_svgview_show_prev_cb (GtkWidget *widget, void *data);
-static int sp_svgview_goto_first_cb (GtkWidget *widget, void *data);
-static int sp_svgview_goto_last_cb (GtkWidget *widget, void *data);
 #ifdef WITH_INKJAR
 static bool is_jar(char const *filename);
 #endif
@@ -114,11 +126,11 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/,
     switch (event->keyval) {
         case GDK_KEY_Up:
         case GDK_KEY_Home:
-            sp_svgview_goto_first(ss);
+            ss->goto_first();
             break;
         case GDK_KEY_Down:
         case GDK_KEY_End:
-            sp_svgview_goto_last(ss);
+            ss->goto_last();
             break;
         case GDK_KEY_F11:
             if (ss->fullscreen) {
@@ -130,19 +142,19 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/,
             }
             break;
         case GDK_KEY_Return:
-            sp_svgview_control_show (ss);
+            ss->control_show();
         break;
         case GDK_KEY_KP_Page_Down:
         case GDK_KEY_Page_Down:
         case GDK_KEY_Right:
         case GDK_KEY_space:
-            sp_svgview_show_next (ss);
+            ss->show_next();
         break;
         case GDK_KEY_KP_Page_Up:
         case GDK_KEY_Page_Up:
         case GDK_KEY_Left:
         case GDK_KEY_BackSpace:
-            sp_svgview_show_prev (ss);
+            ss->show_prev();
             break;
         case GDK_KEY_Escape:
         case GDK_KEY_q:
@@ -167,9 +179,8 @@ int main (int argc, const char **argv)
 
     Gtk::Main main_instance (&argc, const_cast(&argv));
 
-    struct SPSlideShow ss;
-
     int num_parsed_options = 0;
+    SPSlideShow ss;
 
     // the list of arguments is in the net line
     for (int i = 1; i < argc; i++) {
@@ -215,15 +226,6 @@ int main (int argc, const char **argv)
 
     setlocale (LC_NUMERIC, "C");
 
-    ss.size = 32;
-    ss.length = 0;
-    ss.current = 0;
-    ss.slides = g_new (char *, ss.size);
-    ss.current = 0;
-    ss.doc = NULL;
-    ss.view = NULL;
-    ss.fullscreen = false;
-
     Inkscape::Application::create(argv[0], true);
     //Inkscape::Application &inkscape = Inkscape::Application::instance();
 
@@ -254,21 +256,13 @@ int main (int argc, const char **argv)
                             }
                         }
                     } else if (gba->len > 0) {
-                        //::write(1, gba->data, gba->len);
-                        /* Append to list */
-                        if (ss.length >= ss.size) {
-                            /* Expand */
-                            ss.size <<= 1;
-                            ss.slides = g_renew (char *, ss.slides, ss.size);
-                        }
-
                         ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data,
                                            gba->len,
                                            TRUE);
                         gchar *last_filename = jar_file_reader.get_last_filename();
                         if (ss.doc) {
-                            ss.slides[ss.length++] = strdup (last_filename);
-                            (ss.doc)->setUri (last_filename);
+                            ss.slides.push_back(strdup(last_filename));
+                            (ss.doc)->setUri(last_filename);
                         }
                         g_byte_array_free(gba, TRUE);
                         g_free(last_filename);
@@ -279,16 +273,10 @@ int main (int argc, const char **argv)
             } else {
     #endif /* WITH_INKJAR */
             /* Append to list */
-            if (ss.length >= ss.size) {
-                /* Expand */
-                ss.size <<= 1;
-                ss.slides = g_renew (char *, ss.slides, ss.size);
-            }
-
-            ss.slides[ss.length++] = strdup (argv[i]);
+            ss.slides.push_back(strdup (argv[i]));
 
             if (!ss.doc) {
-                ss.doc = SPDocument::createNewDoc (ss.slides[ss.current], TRUE, false);
+                ss.doc = SPDocument::createNewDoc((ss.slides[ss.current]).c_str(), TRUE, false);
                 if (!ss.doc) {
                     ++ss.current;
                 }
@@ -335,56 +323,48 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/,
     return FALSE;
 }
 
-static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss)
+/**
+ * @brief Show the control buttons (next, previous etc) for the application
+ */
+GtkWidget* SPSlideShow::control_show()
 {
     if (!ctrlwin) {
         ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
         gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE);
-        gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(ss->window));
-        g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, ss);
+        gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(window));
+        g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, this);
         g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL);
         auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
         gtk_container_add(GTK_CONTAINER(ctrlwin), t);
 
-#if GTK_CHECK_VERSION(3,10,0)
-        GtkWidget *b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON);
-#else
-        GtkWidget *b   = gtk_button_new();
-        GtkWidget *img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-first"), GTK_ICON_SIZE_BUTTON);
-        gtk_button_set_image(GTK_BUTTON(b), img);
-#endif
-        gtk_container_add(GTK_CONTAINER(t), b);
-
-        g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_first_cb, ss);
-#if GTK_CHECK_VERSION(3,10,0)
-        b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON);
-#else
-        b = gtk_button_new();
-        img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-previous"), GTK_ICON_SIZE_BUTTON);
-        gtk_button_set_image(GTK_BUTTON(b), img);
-#endif
-        gtk_container_add(GTK_CONTAINER(t), b);
-
-        g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_prev_cb, ss);
-#if GTK_CHECK_VERSION(3,10,0)
-        b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON);
-#else
-        b = gtk_button_new();
-        img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-next"), GTK_ICON_SIZE_BUTTON);
-        gtk_button_set_image(GTK_BUTTON(b), img);
-#endif
-        gtk_container_add(GTK_CONTAINER(t), b);
-
-        g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_show_next_cb, ss);
-#if GTK_CHECK_VERSION(3,10,0)
-        b = gtk_button_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON);
-#else
-        b = gtk_button_new();
-        img = gtk_image_new_from_icon_name(INKSCAPE_ICON("go-last"), GTK_ICON_SIZE_BUTTON);
-        gtk_button_set_image(GTK_BUTTON(b), img);
-#endif
-        gtk_container_add(GTK_CONTAINER(t), b);
-        g_signal_connect(G_OBJECT(b), "clicked", (GCallback) sp_svgview_goto_last_cb, ss);
+        auto btn_go_first = Gtk::manage(new Gtk::Button());
+        auto img_go_first = Gtk::manage(new Gtk::Image());
+        img_go_first->set_from_icon_name(INKSCAPE_ICON("go-first"), Gtk::ICON_SIZE_BUTTON);
+        btn_go_first->set_image(*img_go_first);
+        gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_first->gobj()));
+        btn_go_first->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_first));
+        
+        auto btn_go_prev = Gtk::manage(new Gtk::Button());
+        auto img_go_prev = Gtk::manage(new Gtk::Image());
+        img_go_prev->set_from_icon_name(INKSCAPE_ICON("go-previous"), Gtk::ICON_SIZE_BUTTON);
+        btn_go_prev->set_image(*img_go_prev);
+        gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_prev->gobj()));
+        btn_go_prev->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_prev));
+        
+        auto btn_go_next = Gtk::manage(new Gtk::Button());
+        auto img_go_next = Gtk::manage(new Gtk::Image());
+        img_go_next->set_from_icon_name(INKSCAPE_ICON("go-next"), Gtk::ICON_SIZE_BUTTON);
+        btn_go_next->set_image(*img_go_next);
+        gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_next->gobj()));
+        btn_go_next->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_next));
+        
+        auto btn_go_last = Gtk::manage(new Gtk::Button());
+        auto img_go_last = Gtk::manage(new Gtk::Image());
+        img_go_last->set_from_icon_name(INKSCAPE_ICON("go-last"), Gtk::ICON_SIZE_BUTTON);
+        btn_go_last->set_image(*img_go_last);
+        gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_last->gobj()));
+        btn_go_last->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_last));
+
         gtk_widget_show_all(ctrlwin);
     } else {
         gtk_window_present(GTK_WINDOW(ctrlwin));
@@ -393,35 +373,11 @@ static GtkWidget* sp_svgview_control_show(struct SPSlideShow *ss)
     return NULL;
 }
 
-static int sp_svgview_show_next_cb (GtkWidget */*widget*/, void *data)
-{
-    sp_svgview_show_next(static_cast(data));
-    return FALSE;
-}
-
-static int sp_svgview_show_prev_cb (GtkWidget */*widget*/, void *data)
-{
-    sp_svgview_show_prev(static_cast(data));
-    return FALSE;
-}
-
-static int sp_svgview_goto_first_cb (GtkWidget */*widget*/, void *data)
-{
-    sp_svgview_goto_first(static_cast(data));
-    return FALSE;
-}
-
-static int sp_svgview_goto_last_cb (GtkWidget */*widget*/, void *data)
-{
-    sp_svgview_goto_last(static_cast(data));
-    return FALSE;
-}
-
-static void sp_svgview_waiting_cursor(struct SPSlideShow *ss)
+void SPSlideShow::waiting_cursor()
 {
     GdkDisplay *display = gdk_display_get_default();
     GdkCursor  *waiting = gdk_cursor_new_for_display(display, GDK_WATCH);
-    gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), waiting);
+    gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), waiting);
     g_object_unref(waiting);
     if (ctrlwin) {
         GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH);
@@ -433,90 +389,91 @@ static void sp_svgview_waiting_cursor(struct SPSlideShow *ss)
     }
 }
 
-static void sp_svgview_normal_cursor(struct SPSlideShow *ss)
+void SPSlideShow::normal_cursor()
 {
-   gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ss->window)), NULL);
+    gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), NULL);
     if (ctrlwin) {
         gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), NULL);
     }
 }
 
-static void sp_svgview_set_document(struct SPSlideShow *ss,
-                                    SPDocument *doc,
-                                    int current)
+void SPSlideShow::set_document(SPDocument *doc,
+                               int         current)
 {
-    if (doc && doc != ss->doc) {
+    if (doc && doc != this->doc) {
         doc->ensureUpToDate();
-        reinterpret_cast(SP_VIEW_WIDGET_VIEW (ss->view))->setDocument (doc);
-        ss->doc = doc;
-        ss->current = current;
+        reinterpret_cast(SP_VIEW_WIDGET_VIEW (view))->setDocument (doc);
+        this->doc = doc;
+        this->current = current;
     }
 }
 
-static void sp_svgview_show_next (struct SPSlideShow *ss)
+/**
+ * @brief Show the next file in the slideshow
+ */
+void SPSlideShow::show_next()
 {
-    sp_svgview_waiting_cursor(ss);
+    waiting_cursor();
 
     SPDocument *doc = NULL;
-    int current = ss->current;
-    while (!doc && (current < ss->length - 1)) {
-        doc = SPDocument::createNewDoc (ss->slides[++current], TRUE, false);
+    while (!doc && (current < slides.size() - 1)) {
+        doc = SPDocument::createNewDoc ((slides[++current]).c_str(), TRUE, false);
     }
 
-    sp_svgview_set_document(ss, doc, current);
-
-    sp_svgview_normal_cursor(ss);
+    set_document(doc, current);
+    normal_cursor();
 }
 
-static void sp_svgview_show_prev (struct SPSlideShow *ss)
+/**
+ * @brief Show the previous file in the slideshow
+ */
+void SPSlideShow::show_prev()
 {
-    sp_svgview_waiting_cursor(ss);
+    waiting_cursor();
 
     SPDocument *doc = NULL;
-    int current = ss->current;
     while (!doc && (current > 0)) {
-        doc = SPDocument::createNewDoc (ss->slides[--current], TRUE, false);
+        doc = SPDocument::createNewDoc ((slides[--current]).c_str(), TRUE, false);
     }
 
-    sp_svgview_set_document(ss, doc, current);
-
-    sp_svgview_normal_cursor(ss);
+    set_document(doc, current);
+    normal_cursor();
 }
 
-static void sp_svgview_goto_first (struct SPSlideShow *ss)
+/**
+ * @brief Switch to first slide in slideshow
+ */
+void SPSlideShow::goto_first()
 {
-    sp_svgview_waiting_cursor(ss);
+    waiting_cursor();
 
     SPDocument *doc = NULL;
     int current = 0;
-    while ( !doc && (current < ss->length - 1)) {
-        if (current == ss->current) {
-            break;
-        }
-        doc = SPDocument::createNewDoc (ss->slides[current++], TRUE, false);
+    while ( !doc && (current < slides.size() - 1)) {
+        doc = SPDocument::createNewDoc((slides[current++]).c_str(), TRUE, false);
     }
 
-    sp_svgview_set_document(ss, doc, current - 1);
+    set_document(doc, current - 1);
 
-    sp_svgview_normal_cursor(ss);
+    normal_cursor();
 }
 
-static void sp_svgview_goto_last (struct SPSlideShow *ss)
+/**
+ * @brief Switch to last slide in slideshow
+ */
+void SPSlideShow::goto_last()
 {
-    sp_svgview_waiting_cursor(ss);
+    waiting_cursor();
 
     SPDocument *doc = NULL;
-    int current = ss->length - 1;
+    int current = slides.size() - 1;
     while (!doc && (current >= 0)) {
-        if (current == ss->current) {
-            break;
-        }
-        doc = SPDocument::createNewDoc (ss->slides[current--], TRUE, false);
+        doc = SPDocument::createNewDoc((slides[current--]).c_str(), TRUE, false);
     }
 
-    sp_svgview_set_document(ss, doc, current + 1);
+    set_document(doc, current + 1);
 
-    sp_svgview_normal_cursor(ss);
+    normal_cursor();
 }
 
 #ifdef WITH_INKJAR
-- 
cgit v1.2.3


From 75c4b2b43058668f2c94b27db858763d0b1f308c Mon Sep 17 00:00:00 2001
From: Alex Valavanis 
Date: Sun, 14 Aug 2016 13:16:27 +0100
Subject: inkview: Convert to ApplicationWindow

(bzr r15057)
---
 src/inkview.cpp | 94 +++++++++++++++++++++++++++------------------------------
 1 file changed, 45 insertions(+), 49 deletions(-)

diff --git a/src/inkview.cpp b/src/inkview.cpp
index fe656ca5b..b9447a94f 100644
--- a/src/inkview.cpp
+++ b/src/inkview.cpp
@@ -34,6 +34,7 @@
 #include 
 #include 
 
+#include 
 #include 
 #include 
 #include 
@@ -68,15 +69,19 @@
 extern char *optarg;
 extern int  optind, opterr;
 
-class SPSlideShow {
+/**
+ * The main application window for the slideshow
+ */
+class SPSlideShow : public Gtk::ApplicationWindow {
 public:
-    std::vector slides;
-    int current;
-    SPDocument *doc;
-    GtkWidget *view;
-    GtkWidget *window;
-    bool fullscreen;
-    int timer;
+    std::vector  slides;  ///< List of filenames for each slide
+    int                       current; ///< Index of the currently displayed slide
+    SPDocument               *doc;     ///< The currently displayed slide
+    GtkWidget                *view;
+    int                       timer;
+    
+    /// Current state of application (full-screen or windowed)
+    bool is_fullscreen;
 
     SPSlideShow()
         :
@@ -84,20 +89,20 @@ public:
             current(0),
             doc(NULL),
             view(NULL),
-            fullscreen(false)
+            is_fullscreen(false)
     {}
 
-    GtkWidget *control_show();
-    void       show_next();
-    void       show_prev();
-    void       goto_first();
-    void       goto_last();
+    void control_show();
+    void show_next();
+    void show_prev();
+    void goto_first();
+    void goto_last();
 
 protected:
-    void       waiting_cursor();
-    void       normal_cursor();
-    void       set_document(SPDocument *doc,
-                            int         current);
+    void waiting_cursor();
+    void normal_cursor();
+    void set_document(SPDocument *doc,
+                      int         current);
 };
 
 #ifdef WITH_INKJAR
@@ -133,12 +138,12 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/,
             ss->goto_last();
             break;
         case GDK_KEY_F11:
-            if (ss->fullscreen) {
-                gtk_window_unfullscreen (GTK_WINDOW(ss->window));
-                ss->fullscreen = false;
+            if (ss->is_fullscreen) {
+                ss->unfullscreen();
+                ss->is_fullscreen = false;
             } else {
-                gtk_window_fullscreen (GTK_WINDOW(ss->window));
-                ss->fullscreen = true;
+                ss->fullscreen();
+                ss->is_fullscreen = true;
             }
             break;
         case GDK_KEY_Return:
@@ -164,7 +169,8 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/,
         default:
             break;
     }
-    gtk_window_set_title(GTK_WINDOW(ss->window), ss->doc->getName());
+
+    ss->set_title(ss->doc->getName());
     return TRUE;
 }
 
@@ -202,7 +208,6 @@ int main (int argc, const char **argv)
         }
     }
 
-    GtkWidget *w;
     int i;
 
     bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
@@ -214,8 +219,6 @@ int main (int argc, const char **argv)
     Inkscape::GC::init();
     Inkscape::Preferences::get(); // ensure preferences are initialized
 
-    gtk_init (&argc, (char ***) &argv);
-
 #ifdef lalaWITH_MODULES
     g_warning ("Have to autoinit modules (lauris)");
     sp_modulesys_init();
@@ -291,24 +294,21 @@ int main (int argc, const char **argv)
        return 1; /* none of the slides loadable */
     }
     
-    w = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_title( GTK_WINDOW(w), ss.doc->getName() );
-    gtk_window_set_default_size (GTK_WINDOW (w),
-                MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64),
-                MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64));
-    ss.window = w;
+    ss.set_title(ss.doc->getName() );
+    ss.set_default_size(MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64),
+                        MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64));
 
-    g_signal_connect (G_OBJECT (w), "delete_event", (GCallback) sp_svgview_main_delete, &ss);
-    g_signal_connect (G_OBJECT (w), "key_press_event", (GCallback) sp_svgview_main_key_press, &ss);
+    g_signal_connect (G_OBJECT (ss.gobj()), "delete_event", (GCallback) sp_svgview_main_delete, &ss);
+    g_signal_connect (G_OBJECT (ss.gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, &ss);
 
     (ss.doc)->ensureUpToDate();
     ss.view = sp_svg_view_widget_new (ss.doc);
     (ss.doc)->doUnref ();
     SP_SVG_VIEW_WIDGET(ss.view)->setResize( false, ss.doc->getWidth().value("px"), ss.doc->getHeight().value("px") );
     gtk_widget_show (ss.view);
-    gtk_container_add (GTK_CONTAINER (w), ss.view);
+    ss.add(*Glib::wrap(ss.view));
 
-    gtk_widget_show (w);
+    ss.show();
 
     gtk_main ();
 
@@ -326,12 +326,12 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/,
 /**
  * @brief Show the control buttons (next, previous etc) for the application
  */
-GtkWidget* SPSlideShow::control_show()
+void SPSlideShow::control_show()
 {
     if (!ctrlwin) {
         ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
         gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE);
-        gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(window));
+        gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(this->gobj()));
         g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, this);
         g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL);
         auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
@@ -369,20 +369,16 @@ GtkWidget* SPSlideShow::control_show()
     } else {
         gtk_window_present(GTK_WINDOW(ctrlwin));
     }
-
-    return NULL;
 }
 
 void SPSlideShow::waiting_cursor()
 {
-    GdkDisplay *display = gdk_display_get_default();
-    GdkCursor  *waiting = gdk_cursor_new_for_display(display, GDK_WATCH);
-    gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), waiting);
-    g_object_unref(waiting);
+    auto display = Gdk::Display::get_default();
+    auto waiting = Gdk::Cursor::create(display, Gdk::WATCH);
+    get_window()->set_cursor(waiting);
+    
     if (ctrlwin) {
-        GdkCursor *waiting = gdk_cursor_new_for_display(display, GDK_WATCH);
-        gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting);
-        g_object_unref(waiting);
+        gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting->gobj());
     }
     while(gtk_events_pending()) {
        gtk_main_iteration();
@@ -391,7 +387,7 @@ void SPSlideShow::waiting_cursor()
 
 void SPSlideShow::normal_cursor()
 {
-    gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(window)), NULL);
+    get_window()->set_cursor();
     if (ctrlwin) {
         gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), NULL);
     }
-- 
cgit v1.2.3


From 4dc583f5b28383a38d6140dfa475e8d2cf8ff49e Mon Sep 17 00:00:00 2001
From: Tavmjong Bah 
Date: Mon, 15 Aug 2016 22:25:15 +0200
Subject: Fix bug reported in http://www.viva64.com/en/b/0419/

(bzr r15058)
---
 src/sp-mesh-array.cpp | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp
index 6bd5c85d7..0dd89ac96 100644
--- a/src/sp-mesh-array.cpp
+++ b/src/sp-mesh-array.cpp
@@ -1046,11 +1046,12 @@ void SPMeshNodeArray::create( SPMesh *mg, SPItem *item, Geom::OptRect bbox ) {
     if( !bbox ) {
         // Set default size to bounding box if size not given.
         std::cout << "SPMeshNodeArray::create(): bbox empty" << std::endl;
-        Geom::OptRect bbox = item->geometricBounds();
-    }
-    if( !bbox ) {
-        std::cout << "SPMeshNodeArray::create: ERROR: No bounding box!" << std::endl;
-        return;
+        bbox = item->geometricBounds();
+
+        if( !bbox ) {
+            std::cout << "SPMeshNodeArray::create: ERROR: No bounding box!" << std::endl;
+            return;
+        }
     }
 
     Geom::Coord const width = bbox->dimensions()[Geom::X];
-- 
cgit v1.2.3


From 7f779f28e67eac1653e0f7751bb3f224b67894c7 Mon Sep 17 00:00:00 2001
From: Tavmjong Bah 
Date: Mon, 15 Aug 2016 22:55:21 +0200
Subject: Fix a bunch of errors as reported at http://www.viva64.com/en/b/0419/

(bzr r15059)
---
 src/display/drawing-text.cpp           | 2 +-
 src/filters/blend.cpp                  | 4 ++--
 src/inkscape.cpp                       | 2 +-
 src/libnrtype/FontFactory.cpp          | 4 ++--
 src/livarot/PathOutline.cpp            | 2 +-
 src/sp-lpe-item.cpp                    | 3 ---
 src/ui/dialog/inkscape-preferences.cpp | 2 +-
 src/ui/dialog/svg-fonts-dialog.cpp     | 4 +---
 src/ui/widget/font-variants.cpp        | 2 +-
 src/verbs.cpp                          | 2 +-
 10 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/src/display/drawing-text.cpp b/src/display/drawing-text.cpp
index f0d83abfd..a0918e9f5 100644
--- a/src/display/drawing-text.cpp
+++ b/src/display/drawing-text.cpp
@@ -269,7 +269,7 @@ void DrawingText::decorateStyle(DrawingContext &dc, double vextent, double xphas
     int dashes[16]={
         8,   7,   6,   5,
         4,   3,   2,   1,
-        -8, -7,  -6,  -5
+        -8, -7,  -6,  -5,
         -4, -3,  -2,  -1
     };
     int dots[16]={
diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp
index 0c7f87542..9ef544828 100644
--- a/src/filters/blend.cpp
+++ b/src/filters/blend.cpp
@@ -78,7 +78,7 @@ static Inkscape::Filters::FilterBlendMode sp_feBlend_readmode(gchar const *value
         case 's':
             if (strncmp(value, "screen", 6) == 0)
                 return Inkscape::Filters::BLEND_SCREEN;
-            if (strncmp(value, "saturation", 6) == 0)
+            if (strncmp(value, "saturation", 10) == 0)
                 return Inkscape::Filters::BLEND_SATURATION;
             break;
         case 'd':
@@ -106,7 +106,7 @@ static Inkscape::Filters::FilterBlendMode sp_feBlend_readmode(gchar const *value
                 return Inkscape::Filters::BLEND_COLOR;
             break;
         case 'h':
-            if (strncmp(value, "hard-light", 7) == 0)
+            if (strncmp(value, "hard-light", 10) == 0)
                 return Inkscape::Filters::BLEND_HARDLIGHT;
             if (strncmp(value, "hue", 3) == 0)
                 return Inkscape::Filters::BLEND_HUE;
diff --git a/src/inkscape.cpp b/src/inkscape.cpp
index 48b921752..6f8ea4324 100644
--- a/src/inkscape.cpp
+++ b/src/inkscape.cpp
@@ -656,6 +656,7 @@ Application::crash_handler (int /*signum*/)
         repr = doc->getReprRoot();
         if (doc->isModifiedSinceSave()) {
             const gchar *docname;
+            char n[64];
 
             /* originally, the document name was retrieved from
              * the sodipod:docname attribute */
@@ -671,7 +672,6 @@ Application::crash_handler (int /*signum*/)
                         if (*d=='.') dots++;
                     }
                     if (*d=='.' && d>docname && dots==2) {
-                        char n[64];
                         size_t len = MIN (d - docname, 63);
                         memcpy (n, docname, len);
                         n[len] = '\0';
diff --git a/src/libnrtype/FontFactory.cpp b/src/libnrtype/FontFactory.cpp
index 65eb62dda..35d584840 100644
--- a/src/libnrtype/FontFactory.cpp
+++ b/src/libnrtype/FontFactory.cpp
@@ -702,8 +702,8 @@ font_instance *font_factory::Face(PangoFontDescription *descr, bool canFail)
 
                         PangoOTTag* features =
                             pango_ot_info_list_features( info, PANGO_OT_TABLE_GSUB, 0, i, j );
-                        if( features[0] != 0 )
-                            // std::cout << "          features: " << std::endl;
+                        // if( features[0] != 0 )
+                        //   std::cout << "          features: " << std::endl;
 
                         for( unsigned k = 0; features[k] != 0; ++k ) {
                             // dump_tag( &features[k], "            feature: ");
diff --git a/src/livarot/PathOutline.cpp b/src/livarot/PathOutline.cpp
index 1c42301da..0683d8ae8 100644
--- a/src/livarot/PathOutline.cpp
+++ b/src/livarot/PathOutline.cpp
@@ -1195,7 +1195,7 @@ Path::OutlineJoin (Path * dest, Geom::Point pos, Geom::Point stNor, Geom::Point
             if ((dest->descr_cmd[dest->descr_cmd.size() - 1]->getType() == descr_lineto) && (nType == descr_lineto)) {
                 Geom::Point const biss = unit_vector(Geom::rot90( stNor - enNor ));
                 double c2 = Geom::dot (biss, enNor);
-                if (fabs(c2) > 0.707107) {    // apply only to obtuse angles
+                if (fabs(c2) > M_SQRT1_2) {    // apply only to obtuse angles
                     double l = width / c2;
                     PathDescrLineTo* nLine = dynamic_cast(dest->descr_cmd[dest->descr_cmd.size() - 1]);
                     nLine->p = pos + l*biss;  // relocate to bisector
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index d9e53fbc5..44dc684c9 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -201,9 +201,6 @@ Inkscape::XML::Node* SPLPEItem::write(Inkscape::XML::Document *xml_doc, Inkscape
  * returns true when LPE was successful.
  */
 bool SPLPEItem::performPathEffect(SPCurve *curve, bool is_clip_or_mask) {
-    if (!this) {
-        return false;
-    }
 
     if (!curve) {
         return false;
diff --git a/src/ui/dialog/inkscape-preferences.cpp b/src/ui/dialog/inkscape-preferences.cpp
index 4574e93fe..9a95c3d8c 100644
--- a/src/ui/dialog/inkscape-preferences.cpp
+++ b/src/ui/dialog/inkscape-preferences.cpp
@@ -1307,7 +1307,7 @@ void InkscapePreferences::initPageBehavior()
     _steps_rot_relative.init ( _("Relative snapping of guideline angles"), "/options/relativeguiderotationsnap/value", false);
     _page_steps.add_line( false, "", _steps_rot_relative, "",
                             _("When on, the snap angles when rotating a guideline will be relative to the original angle"));
-    _steps_zoom.init ( "/options/zoomincrement/value", 101.0, 500.0, 1.0, 1.0, 1.414213562, true, true);
+    _steps_zoom.init ( "/options/zoomincrement/value", 101.0, 500.0, 1.0, 1.0, M_SQRT2, true, true);
     _page_steps.add_line( false, _("_Zoom in/out by:"), _steps_zoom, _("%"),
                           _("Zoom tool click, +/- keys, and middle click zoom in and out by this multiplier"), false);
     this->AddPage(_page_steps, _("Steps"), iter_behavior, PREFS_PAGE_BEHAVIOR_STEPS);
diff --git a/src/ui/dialog/svg-fonts-dialog.cpp b/src/ui/dialog/svg-fonts-dialog.cpp
index 6a87f3714..0203d9778 100644
--- a/src/ui/dialog/svg-fonts-dialog.cpp
+++ b/src/ui/dialog/svg-fonts-dialog.cpp
@@ -162,10 +162,8 @@ GlyphComboBox::GlyphComboBox(){
 }
 
 void GlyphComboBox::update(SPFont* spfont){
-    if (!spfont) return
-//TODO: figure out why do we need to append("") before clearing items properly...
+    if (!spfont) return;
 
-    this->append(""); //Gtk is refusing to clear the combobox when I comment out this line
     this->remove_all();
 
     for (auto& node: spfont->children) {
diff --git a/src/ui/widget/font-variants.cpp b/src/ui/widget/font-variants.cpp
index aca85f246..b386051a6 100644
--- a/src/ui/widget/font-variants.cpp
+++ b/src/ui/widget/font-variants.cpp
@@ -629,7 +629,7 @@ namespace Widget {
           } else if( _caps_all_small.get_active() ) {
               css_string = "all-small-caps";
               caps_new = SP_CSS_FONT_VARIANT_CAPS_ALL_SMALL;
-          } else if( _caps_all_petite.get_active() ) {
+          } else if( _caps_petite.get_active() ) {
               css_string = "petite";
               caps_new = SP_CSS_FONT_VARIANT_CAPS_PETITE;
           } else if( _caps_all_petite.get_active() ) {
diff --git a/src/verbs.cpp b/src/verbs.cpp
index 59ad06fa1..5130f1701 100644
--- a/src/verbs.cpp
+++ b/src/verbs.cpp
@@ -1842,7 +1842,7 @@ void ZoomVerb::perform(SPAction *action, void *data)
 
     Inkscape::Preferences *prefs = Inkscape::Preferences::get();
     gdouble zoom_inc =
-        prefs->getDoubleLimited( "/options/zoomincrement/value", 1.414213562, 1.01, 10 );
+        prefs->getDoubleLimited( "/options/zoomincrement/value", M_SQRT2, 1.01, 10 );
 
     double zcorr = 1.0;
     Glib::ustring abbr = prefs->getString("/options/zoomcorrection/unit");
-- 
cgit v1.2.3


From d096134d56f86f585ff0c8880320f147fb22092b Mon Sep 17 00:00:00 2001
From: Martin Owens 
Date: Mon, 15 Aug 2016 21:17:26 -0400
Subject: Adjust label for resize in page sizer tab

(bzr r15060)
---
 src/ui/widget/page-sizer.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/ui/widget/page-sizer.cpp b/src/ui/widget/page-sizer.cpp
index 578b6855a..081300b9e 100644
--- a/src/ui/widget/page-sizer.cpp
+++ b/src/ui/widget/page-sizer.cpp
@@ -406,7 +406,7 @@ PageSizer::PageSizer(Registry & _wr)
     _fitPageButtonAlign.set(0.5, 0.5, 0.0, 1.0);
     _fitPageButtonAlign.add(_fitPageButton);
     _fitPageButton.set_use_underline();
-    _fitPageButton.set_label(_("_Resize page to drawing or selection"));
+    _fitPageButton.set_label(_("_Resize page to drawing or selection (Ctrl+Shift+R)"));
     _fitPageButton.set_tooltip_text(_("Resize the page to fit the current selection, or the entire drawing if there is no selection"));
 
     _scaleFrame.set_label(_("Scale"));
-- 
cgit v1.2.3


From 80cd661e8fc8ee72c5e77608961fd392c5b11d4a Mon Sep 17 00:00:00 2001
From: Martin Owens 
Date: Mon, 15 Aug 2016 23:52:21 -0400
Subject: Add Shift+drag to arc start and end knots, holding shift will now
 move both knots together, maintaining the arc's size. Adjusted buffer for
 closed/open auto flipping.

(bzr r15061)
---
 src/ui/object-edit.cpp | 35 +++++++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/ui/object-edit.cpp b/src/ui/object-edit.cpp
index ddf770f59..2763e6c4b 100644
--- a/src/ui/object-edit.cpp
+++ b/src/ui/object-edit.cpp
@@ -795,8 +795,11 @@ sp_genericellipse_side(SPGenericEllipse *ellipse, Geom::Point const &p)
     gdouble dy = (p[Geom::Y] - ellipse->cy.computed) / ellipse->ry.computed;
 
     gdouble s = dx * dx + dy * dy;
-    if (s < 1.0) return 1;
-    if (s > 1.0) return -1;
+    // We add a bit of a buffer, so there's a decent chance the user will
+    // be able to adjust the arc without the closed status flipping between
+    // open and closed during micro mouse movements.
+    if (s < 0.75) return 1;
+    if (s > 1.25) return -1;
     return 0;
 }
 
@@ -808,16 +811,21 @@ ArcKnotHolderEntityStart::knot_set(Geom::Point const &p, Geom::Point const &/*or
     SPGenericEllipse *arc = dynamic_cast(item);
     g_assert(arc != NULL);
 
-    arc->setClosed(sp_genericellipse_side(arc, p) == -1);
+    gint side = sp_genericellipse_side(arc, p);
+    if(side != 0) { arc->setClosed(side == -1); }
 
     Geom::Point delta = p - Geom::Point(arc->cx.computed, arc->cy.computed);
     Geom::Scale sc(arc->rx.computed, arc->ry.computed);
 
-    arc->start = atan2(delta * sc.inverse());
+    double offset = arc->start - atan2(delta * sc.inverse());
+    arc->start -= offset;
 
     if ((state & GDK_CONTROL_MASK) && snaps) {
         arc->start = sp_round(arc->start, M_PI / snaps);
     }
+    if (state & GDK_SHIFT_MASK) {
+        arc->end -= offset;
+    }
 
     arc->normalize();
     arc->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
@@ -852,16 +860,21 @@ ArcKnotHolderEntityEnd::knot_set(Geom::Point const &p, Geom::Point const &/*orig
     SPGenericEllipse *arc = dynamic_cast(item);
     g_assert(arc != NULL);
 
-    arc->setClosed(sp_genericellipse_side(arc, p) == -1);
+    gint side = sp_genericellipse_side(arc, p);
+    if(side != 0) { arc->setClosed(side == -1); }
 
     Geom::Point delta = p - Geom::Point(arc->cx.computed, arc->cy.computed);
     Geom::Scale sc(arc->rx.computed, arc->ry.computed);
 
-    arc->end = atan2(delta * sc.inverse());
+    double offset = arc->end - atan2(delta * sc.inverse());
+    arc->end -= offset;
 
     if ((state & GDK_CONTROL_MASK) && snaps) {
         arc->end = sp_round(arc->end, M_PI/snaps);
     }
+    if (state & GDK_SHIFT_MASK) {
+        arc->start -= offset;
+    }
 
     arc->normalize();
     arc->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG);
@@ -983,13 +996,15 @@ ArcKnotHolder::ArcKnotHolder(SPDesktop *desktop, SPItem *item, SPKnotHolderRelea
                       SP_KNOT_SHAPE_SQUARE, SP_KNOT_MODE_XOR);
 
     entity_start->create(desktop, item, this, Inkscape::CTRL_TYPE_ROTATE,
-                         _("Position the start point of the arc or segment; with Ctrl "
-                           "to snap angle; drag inside the ellipse for arc, outside for segment"),
+                         _("Position the start point of the arc or segment; with Shift to move "
+                           "with end point; with Ctrl to snap angle; drag inside the "
+                           "ellipse for arc, outside for segment"),
                          SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR);
 
     entity_end->create(desktop, item, this, Inkscape::CTRL_TYPE_ROTATE,
-                       _("Position the end point of the arc or segment; with Ctrl to snap angle; "
-                         "drag inside the ellipse for arc, outside for segment"),
+                       _("Position the end point of the arc or segment; with Shift to move "
+                         "with start point; with Ctrl to snap angle; drag inside the "
+                         "ellipse for arc, outside for segment"),
                        SP_KNOT_SHAPE_CIRCLE, SP_KNOT_MODE_XOR);
 
     entity.push_back(entity_rx);
-- 
cgit v1.2.3


From 65477c4c8456ceb7ee9d1e630421d4d5c79619dc Mon Sep 17 00:00:00 2001
From: Tavmjong Bah 
Date: Wed, 17 Aug 2016 09:37:48 +0200
Subject: Add std::nothrow so tests of memory allocation work as expected.
 Should eventually be replaced by smart pointers.

(bzr r15062)
---
 src/io/gzipstream.cpp | 8 ++++----
 src/sp-lpe-item.cpp   | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/io/gzipstream.cpp b/src/io/gzipstream.cpp
index 380c42411..330191ecd 100644
--- a/src/io/gzipstream.cpp
+++ b/src/io/gzipstream.cpp
@@ -171,12 +171,12 @@ bool GzipInputStream::load()
         }
 
     srcLen = inputBuf.size();
-    srcBuf = new Byte [srcLen];
+    srcBuf = new (std::nothrow) Byte [srcLen];
     if (!srcBuf) {
         return false;
     }
 
-    outputBuf = new unsigned char [OUT_SIZE];
+    outputBuf = new (std::nothrow) unsigned char [OUT_SIZE];
     if ( !outputBuf ) {
         delete[] srcBuf;
         srcBuf = NULL;
@@ -386,14 +386,14 @@ void GzipOutputStream::flush()
     }
 	
     uLong srclen = inputBuf.size();
-    Bytef *srcbuf = new Bytef [srclen];
+    Bytef *srcbuf = new (std::nothrow) Bytef [srclen];
     if (!srcbuf)
         {
         return;
         }
         
     uLong destlen = srclen;
-    Bytef *destbuf = new Bytef [(destlen + (srclen/100) + 13)];
+    Bytef *destbuf = new (std::nothrow) Bytef [(destlen + (srclen/100) + 13)];
     if (!destbuf)
         {
         delete[] srcbuf;
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index 44dc684c9..85df070b8 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -703,7 +703,7 @@ SPLPEItem::apply_to_clip_or_mask(SPItem *clip_mask, SPItem *item)
                 // LPE was unsuccesfull. Read the old 'd'-attribute.
                 if (gchar const * value = repr->attribute("d")) {
                     Geom::PathVector pv = sp_svg_read_pathv(value);
-                    SPCurve *oldcurve = new SPCurve(pv);
+                    SPCurve *oldcurve = new (std::nothrow) SPCurve(pv);
                     if (oldcurve) {
                         SP_SHAPE(clip_mask)->setCurve(oldcurve, TRUE);
                         oldcurve->unref();
-- 
cgit v1.2.3


From 2f53e4dbb4620edcabaffc964c55cb71090912f8 Mon Sep 17 00:00:00 2001
From: Tavmjong Bah 
Date: Wed, 17 Aug 2016 09:39:43 +0200
Subject: Use M_PI, M_PI_2. We use these constants everywhere so if they are
 not defined we are already in trouble. No need to define them ourselves
 (except maybe in shared libraries).

(bzr r15063)
---
 src/display/guideline.cpp                 |  2 +-
 src/extension/dbus/document-interface.cpp |  2 +-
 src/extension/internal/odf.cpp            |  5 +----
 src/sp-ellipse.cpp                        | 12 +++---------
 src/svg/svg-affine.cpp                    |  4 ----
 5 files changed, 6 insertions(+), 19 deletions(-)

diff --git a/src/display/guideline.cpp b/src/display/guideline.cpp
index 126fcf87c..f66b65e1a 100644
--- a/src/display/guideline.cpp
+++ b/src/display/guideline.cpp
@@ -48,7 +48,7 @@ static void sp_guideline_init(SPGuideLine *gl)
 
     gl->locked = false;
     gl->normal_to_line = Geom::Point(0,1);
-    gl->angle = 3.14159265358979323846/2;
+    gl->angle = M_PI_2;
     gl->point_on_line = Geom::Point(0,0);
     gl->sensitive = 0;
 
diff --git a/src/extension/dbus/document-interface.cpp b/src/extension/dbus/document-interface.cpp
index 5a8fb0918..667830997 100644
--- a/src/extension/dbus/document-interface.cpp
+++ b/src/extension/dbus/document-interface.cpp
@@ -405,7 +405,7 @@ document_interface_polygon (DocumentInterface *doc_interface, int cx, int cy,
                             int radius, int rotation, int sides, 
                             GError **error)
 {
-    gdouble rot = ((rotation / 180.0) * 3.14159265) - ( 3.14159265 / 2.0);
+    gdouble rot = ((rotation / 180.0) * M_PI) - M_PI_2;
     Inkscape::XML::Node *newNode = dbus_create_node(doc_interface->target.getDocument(), "svg:path");
     newNode->setAttribute("inkscape:flatsided", "true");
     newNode->setAttribute("sodipodi:type", "star");
diff --git a/src/extension/internal/odf.cpp b/src/extension/internal/odf.cpp
index 6904eb2fd..f885ef5e5 100644
--- a/src/extension/internal/odf.cpp
+++ b/src/extension/internal/odf.cpp
@@ -873,11 +873,8 @@ int SingularValueDecomposition::rank()
 
 
 
-#define pi 3.14159
 //#define pxToCm  0.0275
 #define pxToCm  0.03
-#define piToRad 0.0174532925
-#define docHeightCm 22.86
 
 
 //########################################################################
@@ -1565,7 +1562,7 @@ bool OdfOutput::processGradient(SPItem *item,
         output += buf;
         //TODO: apply maths, to define begin of gradient, taking gradient begin and end, as well as object boundary into account
         double angle = (gi.y2-gi.y1);
-        angle = (angle != 0.) ? (atan((gi.x2-gi.x1)/(gi.y2-gi.y1))* 180. / pi) : 90;
+        angle = (angle != 0.) ? (atan((gi.x2-gi.x1)/(gi.y2-gi.y1))* 180. / M_PI) : 90;
         angle = (angle < 0)?(180+angle):angle;
         angle = angle * 10; //why do we need this: precision?????????????
         output += Glib::ustring::compose(" draw:start-intensity=\"%1\" draw:end-intensity=\"%2\" draw:angle=\"%3\"/>\n",
diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp
index 995f880c2..0d60aa5d8 100644
--- a/src/sp-ellipse.cpp
+++ b/src/sp-ellipse.cpp
@@ -33,16 +33,10 @@
 #include "svg/path-string.h"
 
 
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-#define SP_2PI (2 * M_PI)
-
 SPGenericEllipse::SPGenericEllipse()
     : SPShape()
     , start(0)
-    , end(SP_2PI)
+    , end(M_2_PI)
     , type(SP_GENERIC_ELLIPSE_UNDEFINED)
     , _closed(true)
 {
@@ -533,7 +527,7 @@ void SPGenericEllipse::snappoints(std::vector &p,
     // Snap to the 4 quadrant points of the ellipse, but only if the arc
     // spans far enough to include them
     if (snapprefs->isTargetSnappable(Inkscape::SNAPTARGET_ELLIPSE_QUADRANT_POINT)) {
-        for (double angle = 0; angle < SP_2PI; angle += M_PI_2) {
+        for (double angle = 0; angle < M_2_PI; angle += M_PI_2) {
             if (Geom::AngleInterval(this->start, this->end, true).contains(angle)) {
                 Geom::Point pt = this->getPointAtAngle(angle) * i2dt;
                 p.push_back(Inkscape::SnapCandidatePoint(pt, Inkscape::SNAPSOURCE_ELLIPSE_QUADRANT_POINT, Inkscape::SNAPTARGET_ELLIPSE_QUADRANT_POINT));
@@ -668,7 +662,7 @@ bool SPGenericEllipse::_isSlice() const
 {
     Geom::AngleInterval a(this->start, this->end, true);
 
-    return !(Geom::are_near(a.extent(), 0) || Geom::are_near(a.extent(), SP_2PI));
+    return !(Geom::are_near(a.extent(), 0) || Geom::are_near(a.extent(), M_2_PI));
 }
 
 /*
diff --git a/src/svg/svg-affine.cpp b/src/svg/svg-affine.cpp
index 21635c79b..76d89579d 100644
--- a/src/svg/svg-affine.cpp
+++ b/src/svg/svg-affine.cpp
@@ -24,10 +24,6 @@
 #include "svg.h"
 #include "preferences.h"
 
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-
 bool
 sp_svg_transform_read(gchar const *str, Geom::Affine *transform)
 {
-- 
cgit v1.2.3


From 349e0a08c9d195531596386c4954b0a990eb7d51 Mon Sep 17 00:00:00 2001
From: kris-degussem <>
Date: Wed, 17 Aug 2016 11:24:59 +0200
Subject: Translations. Dutch translation update.

(bzr r15064)
---
 po/nl.po | 134 ++++++++++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 85 insertions(+), 49 deletions(-)

diff --git a/po/nl.po b/po/nl.po
index c0b77686e..f14e08c0e 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -60,7 +60,7 @@ msgstr ""
 "Project-Id-Version: inkscape 0.92\n"
 "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n"
 "POT-Creation-Date: 2016-06-08 09:06+0200\n"
-"PO-Revision-Date: 2016-07-08 23:37+0100\n"
+"PO-Revision-Date: 2016-08-13 11:42+0100\n"
 "Last-Translator: Kris De Gussem \n"
 "Language-Team: Dutch\n"
 "Language: nl\n"
@@ -9510,7 +9510,7 @@ msgstr "BSpline"
 
 #: ../src/live_effects/effect.cpp:144
 msgid "Join type"
-msgstr "Type samenvoeging"
+msgstr "Samenvoeging"
 
 #: ../src/live_effects/effect.cpp:145
 msgid "Taper stroke"
@@ -11238,6 +11238,8 @@ msgid ""
 "The \"show handles\" path effect will remove any custom style on the object "
 "you are applying it to. If this is not what you want, click Cancel."
 msgstr ""
+"Het padeffect \"Handvatten tonen\" verwijdert alle aangepaste stijlen op het "
+"toegepaste object. Indien je dit niet wil, klik Annuleren."
 
 #: ../src/live_effects/lpe-simplify.cpp:30
 msgid "Steps:"
@@ -11429,7 +11431,7 @@ msgstr "Lijnbreedte:"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:73
 msgid "The (non-tapered) width of the path"
-msgstr ""
+msgstr "De (niet-scherp toelopende) breedte van het pad"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:74
 msgid "Start offset:"
@@ -11437,7 +11439,7 @@ msgstr "Begin verplaatsing:"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:74
 msgid "Taper distance from path start"
-msgstr ""
+msgstr "Tapafstand van padbegin"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:75
 msgid "End offset:"
@@ -11445,15 +11447,15 @@ msgstr "Einde verplaatsing:"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:75
 msgid "The ending position of the taper"
-msgstr ""
+msgstr "Eindpositie tap"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:76
 msgid "Taper smoothing:"
-msgstr ""
+msgstr "Afronding tap:"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:76
 msgid "Amount of smoothing to apply to the tapers"
-msgstr ""
+msgstr "Mate van afronding voor de taps"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:77
 msgid "Join type:"
@@ -11465,15 +11467,15 @@ msgstr "Samenvoeging voor niet-gladde knooppunten"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:78
 msgid "Limit for miter joins"
-msgstr ""
+msgstr "Limiet voor verstek"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:447
 msgid "Start point of the taper"
-msgstr ""
+msgstr "Beginpunt tap"
 
 #: ../src/live_effects/lpe-taperstroke.cpp:451
 msgid "End point of the taper"
-msgstr ""
+msgstr "Eindpunt tap"
 
 #: ../src/live_effects/lpe-transform_2pts.cpp:31
 msgid "Elastic"
@@ -11485,7 +11487,7 @@ msgstr "Elastische modus"
 
 #: ../src/live_effects/lpe-transform_2pts.cpp:32
 msgid "From original width"
-msgstr "Van originelr breedte"
+msgstr "Van originele breedte"
 
 #: ../src/live_effects/lpe-transform_2pts.cpp:33
 msgid "Lock length"
@@ -11517,11 +11519,11 @@ msgstr "Eindpad"
 
 #: ../src/live_effects/lpe-transform_2pts.cpp:39
 msgid "Stretch"
-msgstr ""
+msgstr "Uitrekken"
 
 #: ../src/live_effects/lpe-transform_2pts.cpp:39
 msgid "Stretch the result"
-msgstr ""
+msgstr "Resultaat uitrekken"
 
 #: ../src/live_effects/lpe-transform_2pts.cpp:40
 msgid "Offset from knots"
@@ -11624,6 +11626,8 @@ msgid ""
 "Chamfer: Ctrl+Click toggle type, Shift+Click open "
 "dialog, Ctrl+Alt+Click reset"
 msgstr ""
+"Afschuining: Ctrl+klik type veranderen, Shift+klikdialoog openen, Alt+Ctrl+klik resetten"
 
 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:782
 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:843
@@ -11631,6 +11635,8 @@ msgid ""
 "Inverse Chamfer: Ctrl+Click toggle type, Shift+Click "
 "open dialog, Ctrl+Alt+Click reset"
 msgstr ""
+"Omgekeerde afschuining: Ctrl+klik type veranderen, Shift"
+"+klikdialoog openen, Alt+Ctrl+klik resetten"
 
 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:786
 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:847
@@ -11638,6 +11644,8 @@ msgid ""
 "Inverse Fillet: Ctrl+Click toggle type, Shift+Click "
 "open dialog, Ctrl+Alt+Click reset"
 msgstr ""
+"Omgekeerde omlijsting: Ctrl+klik type veranderen, Shift"
+"+klikdialoog openen, Alt+Ctrl+klik resetten"
 
 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:790
 #: ../src/live_effects/parameter/filletchamferpointarray.cpp:851
@@ -11645,6 +11653,8 @@ msgid ""
 "Fillet: Ctrl+Click toggle type, Shift+Click open "
 "dialog, Ctrl+Alt+Click reset"
 msgstr ""
+"Omlijsting: Ctrl+klik type veranderen, Shift+klikdialoog openen, Alt+Ctrl+klik resetten"
 
 #: ../src/live_effects/parameter/originalpath.cpp:67
 #: ../src/live_effects/parameter/originalpatharray.cpp:155
@@ -17626,7 +17636,7 @@ msgstr "Ver_grendeld"
 
 #: ../src/ui/dialog/guides.cpp:47
 msgid "Lock the movement of guides"
-msgstr ""
+msgstr "Beweging hulplijnen vastzetten"
 
 #: ../src/ui/dialog/guides.cpp:48
 msgid "Rela_tive change"
@@ -18379,7 +18389,7 @@ msgstr "Deens (da)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:541
 msgid "Dogri (doi)"
-msgstr ""
+msgstr "Dogri (doi)"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:541
 msgid "Dutch (nl)"
@@ -19678,11 +19688,11 @@ msgstr ""
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:1189
 msgid "Color stock markers the same color as object"
-msgstr "Kleur standaardmarkering is deze van object"
+msgstr "Kleur standaardmarkering is kleur object"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:1190
 msgid "Color custom markers the same color as object"
-msgstr "Kleur aangepaste markering is deze van object"
+msgstr "Kleur aangepaste markering is kleur object"
 
 #: ../src/ui/dialog/inkscape-preferences.cpp:1191
 #: ../src/ui/dialog/inkscape-preferences.cpp:1411
@@ -21050,7 +21060,7 @@ msgstr "Onderverdelingen:"
 
 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:136
 msgid "Modify Fillet-Chamfer"
-msgstr ""
+msgstr "Omlijsting/afschuining aanpassen"
 
 #: ../src/ui/dialog/lpe-fillet-chamfer-properties.cpp:137
 msgid "_Modify"
@@ -21078,7 +21088,7 @@ msgstr "%1:"
 
 #: ../src/ui/dialog/lpe-powerstroke-properties.cpp:122
 msgid "Modify Node Position"
-msgstr ""
+msgstr "Knooppositie aanpassen"
 
 #: ../src/ui/dialog/memory.cpp:96
 msgid "Heap"
@@ -21393,22 +21403,28 @@ msgid ""
 "Type: Layer, Group, or Object. Clicking on Layer or Group icon, toggles "
 "between the two types."
 msgstr ""
+"Type: laag, groep of object. Klikken op het laag- of groepsicoon wisselt "
+"tussen de types."
 
 #: ../src/ui/dialog/objects.cpp:1712
 msgid "Is object clipped and/or masked?"
-msgstr "Is het obejct afgesneden of gemaskerd?"
+msgstr "Is het object afgesneden of gemaskerd?"
 
 #: ../src/ui/dialog/objects.cpp:1723
 msgid ""
 "Highlight color of outline in Node tool. Click to set. If alpha is zero, use "
 "inherited color."
 msgstr ""
+"Kleur padindicator in het knooppuntgereedschap. Klik om in te stellen. "
+"Indien alfa nul is, wordt de overgeërfde kleur gebruikt."
 
 #: ../src/ui/dialog/objects.cpp:1734
 msgid ""
 "Layer/Group/Object label (inkscape:label). Double-click to set. Default "
 "value is object 'id'."
 msgstr ""
+"Label laag/groep/object (inkscape:label). Dubbelklik om in te stellen. De "
+"standaardwaarde is het object'id'."
 
 #: ../src/ui/dialog/objects.cpp:1831
 msgid "Add layer..."
@@ -24087,11 +24103,11 @@ msgstr "Kies een gereedschap van de gereedschappenbalk."
 #. create the knots
 #: ../src/ui/tools/measure-tool.cpp:349
 msgid "Measure start, Shift+Click for position dialog"
-msgstr ""
+msgstr "Begin meting, Shift+Klik voor dialoogvenster positie"
 
 #: ../src/ui/tools/measure-tool.cpp:355
 msgid "Measure end, Shift+Click for position dialog"
-msgstr ""
+msgstr "Einde meting, Shift+Klik voor dialoogvenster positie"
 
 #: ../src/ui/tools/measure-tool.cpp:747 ../share/extensions/measure.inx.h:2
 msgid "Measure"
@@ -24107,7 +24123,7 @@ msgstr "Hulplijnen van meetlat toevoegen"
 
 #: ../src/ui/tools/measure-tool.cpp:781
 msgid "Keep last measure on the canvas, for reference"
-msgstr ""
+msgstr "De laatste meting als referentie behouden op het canvas"
 
 #: ../src/ui/tools/measure-tool.cpp:801
 msgid "Convert measure to items"
@@ -25234,28 +25250,34 @@ msgstr "Kleine hoofdletters (onderkast). OpenType: 'smcp'"
 #: ../src/ui/widget/font-variants.cpp:140
 msgid ""
 "All small-caps (uppercase and lowercase). OpenType tables: 'c2sc' and 'smcp'"
-msgstr "Alle onderkast (hoofdletters en onderkast). OpenType: 'c2sc' en 'smcp'"
+msgstr "Onderkast (hoofdletters en onderkast). OpenType: 'c2sc' en 'smcp'"
 
 #: ../src/ui/widget/font-variants.cpp:141
 msgid "Petite-caps (lowercase). OpenType table: 'pcap'"
-msgstr ""
+msgstr "Kleine hoofdletters (voor onderkast). OpenType: 'pcap'"
 
 #: ../src/ui/widget/font-variants.cpp:142
 msgid ""
 "All petite-caps (uppercase and lowercase). OpenType tables: 'c2sc' and 'pcap'"
 msgstr ""
+"Alles kleine hoofdletters (hoofdletters en onderkast). OpenType: 'c2sc' and "
+"'pcap'"
 
 #: ../src/ui/widget/font-variants.cpp:143
 msgid ""
 "Unicase (small caps for uppercase, normal for lowercase). OpenType table: "
 "'unic'"
 msgstr ""
+"Unicase (Kleine hoofdletters voor hoofdletters, normaal voor onderkast). "
+"OpenType: 'unic'"
 
 #: ../src/ui/widget/font-variants.cpp:144
 msgid ""
 "Titling caps (lighter-weight uppercase for use in titles). OpenType table: "
 "'titl'"
 msgstr ""
+"Titelhoofdletters (lichtere hoofdletters voor gebruik in titels). OpenType: "
+"'titl'"
 
 #. Numeric ------------------------------
 #. Add tooltips
@@ -25297,17 +25319,19 @@ msgstr "Gestapelde breuken. OpenType: 'afrc'"
 
 #: ../src/ui/widget/font-variants.cpp:189
 msgid "Ordinals (raised 'th', etc.). OpenType table: 'ordn'"
-msgstr ""
+msgstr "Rangtelwoorden (verhoogd 'de', etc. OpenType: 'ordn'"
 
 #: ../src/ui/widget/font-variants.cpp:190
 msgid "Slashed zeros. OpenType table: 'zero'"
-msgstr ""
+msgstr "Doorstreepte nullen. OpenType: 'zero'"
 
 #. Feature settings ---------------------
 #. Add tooltips
 #: ../src/ui/widget/font-variants.cpp:240
 msgid "Feature settings in CSS form. No sanity checking is performed."
 msgstr ""
+"Featureinstellingen in CSS-vorm. Er wordt geen correctheidscontrole "
+"uitgevoerd."
 
 #: ../src/ui/widget/layer-selector.cpp:118
 msgid "Toggle current layer visibility"
@@ -29458,23 +29482,23 @@ msgstr "Afbeeldingswidget"
 
 #: ../src/widgets/image-menu-item.c:152
 msgid "Child widget to appear next to the menu text"
-msgstr ""
+msgstr "Dochterwidget verschijnt naast menutekst"
 
 #: ../src/widgets/image-menu-item.c:167
 msgid "Use stock"
-msgstr ""
+msgstr "Stock gebruiken"
 
 #: ../src/widgets/image-menu-item.c:168
 msgid "Whether to use the label text to create a stock menu item"
-msgstr ""
+msgstr "Al dan niet labeltekst gebruiken om een standaardmenuitem te maken"
 
 #: ../src/widgets/image-menu-item.c:183
 msgid "Accel Group"
-msgstr ""
+msgstr "Sneltoetsgroep"
 
 #: ../src/widgets/image-menu-item.c:184
 msgid "The Accel Group to use for stock accelerator keys"
-msgstr ""
+msgstr "Sneltoetsgroep voor standaard sneltoetsen"
 
 #: ../src/widgets/lpe-toolbar.cpp:233
 msgid "Closed"
@@ -29651,7 +29675,7 @@ msgstr "Meting omkeren"
 #: ../src/widgets/measure-toolbar.cpp:395
 #: ../src/widgets/measure-toolbar.cpp:396
 msgid "Phantom measure"
-msgstr ""
+msgstr "Fantoommeting"
 
 #: ../src/widgets/measure-toolbar.cpp:405
 #: ../src/widgets/measure-toolbar.cpp:406
@@ -31086,27 +31110,27 @@ msgstr "Vierkant uiteinde"
 
 #: ../src/widgets/stroke-style.cpp:392
 msgid "Fill, Stroke, Markers"
-msgstr ""
+msgstr "Vulling, lijn, markering"
 
 #: ../src/widgets/stroke-style.cpp:396
 msgid "Stroke, Fill, Markers"
-msgstr ""
+msgstr "Lijn, vulling, markering"
 
 #: ../src/widgets/stroke-style.cpp:400
 msgid "Fill, Markers, Stroke"
-msgstr ""
+msgstr "Vulling, markering, lijn"
 
 #: ../src/widgets/stroke-style.cpp:408
 msgid "Markers, Fill, Stroke"
-msgstr ""
+msgstr "Markering, vulling, lijn"
 
 #: ../src/widgets/stroke-style.cpp:412
 msgid "Stroke, Markers, Fill"
-msgstr ""
+msgstr "Lijn, markering, vulling"
 
 #: ../src/widgets/stroke-style.cpp:416
 msgid "Markers, Stroke, Fill"
-msgstr ""
+msgstr "Markering, lijn, vulling"
 
 #: ../src/widgets/stroke-style.cpp:534
 msgid "Set markers"
@@ -31298,7 +31322,7 @@ msgstr "Tekstoriëntatie"
 #. Label
 #: ../src/widgets/text-toolbar.cpp:1812
 msgid "Text (glyph) orientation in vertical text."
-msgstr ""
+msgstr "Tekst (karakter) oriëntatie in vertikale tekst."
 
 #. Drop down menu
 #: ../src/widgets/text-toolbar.cpp:1845
@@ -31806,7 +31830,7 @@ msgstr ""
 
 #: ../share/extensions/convert2dashes.py:56
 msgid "Total number of objects not converted: {}\n"
-msgstr ""
+msgstr "Totaal aantal niet geconverteerde objecten: {}\n"
 
 #: ../share/extensions/dimension.py:108
 msgid "Please select an object."
@@ -32638,26 +32662,27 @@ msgstr ""
 
 #: ../share/extensions/plotter.py:146
 msgid "pySerial is not installed. Please follow these steps:"
-msgstr ""
+msgstr "pySerial is niet geïnstalleerd. Volg deze stappen:"
 
 #: ../share/extensions/plotter.py:147
 msgid "1. Download and extract (unzip) this file to your local harddisk:"
 msgstr ""
+"1. Download en pak dit bestand uit (unzip) naar je lokale harde schijf:"
 
 #: ../share/extensions/plotter.py:149
 msgid ""
 "2. Copy the \"serial\" folder (Can be found inside the just extracted folder)"
-msgstr ""
+msgstr "Kopiëer de map \"serial\" (in de zonet uitgepakte map)"
 
 #: ../share/extensions/plotter.py:150
 msgid ""
 "   into the following Inkscape folder: C:\\[Program files]\\inkscape\\python"
 "\\Lib\\"
-msgstr ""
+msgstr "   in de volgende Inkscape map: C:\\[Program files]\\inkscape\\python"
 
 #: ../share/extensions/plotter.py:151
 msgid "3. Close and restart Inkscape."
-msgstr ""
+msgstr "3. Sluit en herstart Inkscape."
 
 #: ../share/extensions/plotter.py:200
 msgid ""
@@ -32814,6 +32839,11 @@ msgid ""
 "http://sk1project.org/modules.php?name=Products&product=uniconvertor\n"
 "and install into your Inkscape's Python location\n"
 msgstr ""
+"Je moet UniConvertor installeren.\n"
+"GNU/Linux: installeer het pakket python-uniconvertor.\n"
+"Windows: download van\n"
+"http://sk1project.org/modules.php?name=Products&product=uniconvertor\n"
+"en installeer het in Inkscape's Pythonlocatie.\n"
 
 #: ../share/extensions/voronoi2svg.py:205
 msgid "Please select objects!"
@@ -33176,6 +33206,9 @@ msgid ""
 "only for objects and groups). Change the range values to limit the distance "
 "between the original color and the randomized one."
 msgstr ""
+"Tint, verzadiging, helderheid en/of ondoorzichtigheid randomiseren "
+"(ondoorzichtigheid enkel voor objecten en groepen). Pas het bereik aan om "
+"het verschil tussen originele en gerandomiseerde kleur te beperken."
 
 #: ../share/extensions/color_removeblue.inx.h:1
 msgid "Remove Blue"
@@ -34627,7 +34660,7 @@ msgstr "Grootte voorvertoning (px):"
 
 #: ../share/extensions/gcodetools_graffiti.inx.h:8
 msgid "Preview's paint emmit (pts/s):"
-msgstr ""
+msgstr "Verfsnelheid tonen (pt/s):"
 
 #: ../share/extensions/gcodetools_graffiti.inx.h:10
 #: ../share/extensions/gcodetools_orientation_points.inx.h:3
@@ -35586,6 +35619,9 @@ msgid ""
 "each pen, name the layers \"Pen 1\", \"Pen 2\", etc., and put your drawings "
 "in the corresponding layers. This overrules the pen number option above."
 msgstr ""
+"Indien je meerdere pennen op je plotter gebruikt, neem één laag per pen en "
+"noem ze \"Pen 1\", \"Pen 2\", etc.Plaats je afbeeldingen in de "
+"overeenkomstige lagen. Dit overschrijft de bovenstaande optie met pennummer."
 
 #: ../share/extensions/hpgl_output.inx.h:23
 #: ../share/extensions/plotter.inx.h:51
@@ -36453,7 +36489,7 @@ msgstr "Knooppunthandvatten verschuiven"
 
 #: ../share/extensions/jitternodes.inx.h:7
 msgid "Distribution of the displacements:"
-msgstr ""
+msgstr "Distributie verplaatsingen:"
 
 #: ../share/extensions/jitternodes.inx.h:8
 msgid "Uniform"
@@ -36461,7 +36497,7 @@ msgstr "Uniform"
 
 #: ../share/extensions/jitternodes.inx.h:9
 msgid "Pareto"
-msgstr ""
+msgstr "Pareto"
 
 #: ../share/extensions/jitternodes.inx.h:10
 msgid "Gaussian"
@@ -38423,7 +38459,7 @@ msgstr "Deze uitbreiding overschrijft het huidig document"
 
 #: ../share/extensions/seamless_pattern_procedural.inx.h:1
 msgid "Seamless Pattern Procedural"
-msgstr ""
+msgstr "Procedureel naadloos patroon"
 
 #: ../share/extensions/setup_typography_canvas.inx.h:1
 msgid "1 - Setup Typography Canvas"
-- 
cgit v1.2.3


From 761e54744738ea80f7b573593446e366be3a7517 Mon Sep 17 00:00:00 2001
From: Nicolas Dufour 
Date: Wed, 17 Aug 2016 11:46:52 +0200
Subject: Documentation. New tutorial translations for Portuguese.

Fixed bugs:
  - https://launchpad.net/bugs/1612957

(bzr r15065)
---
 po/pt.po                                         |    18 +-
 share/tutorials/potrace-pt.png                   |   Bin 0 -> 5877 bytes
 share/tutorials/tutorial-advanced.pt.svg         |   511 +
 share/tutorials/tutorial-basic.pt.svg            |   760 +
 share/tutorials/tutorial-calligraphy.pt.svg      |   815 ++
 share/tutorials/tutorial-elements.pt.svg         |   674 +
 share/tutorials/tutorial-interpolate.pt.svg      |   594 +
 share/tutorials/tutorial-shapes.pt.svg           |  1097 ++
 share/tutorials/tutorial-tips.pt.svg             |   691 +
 share/tutorials/tutorial-tracing-pixelart.pt.svg | 15603 +++++++++++++++++++++
 share/tutorials/tutorial-tracing.pt.svg          |   231 +
 11 files changed, 20985 insertions(+), 9 deletions(-)
 create mode 100644 share/tutorials/potrace-pt.png
 create mode 100644 share/tutorials/tutorial-advanced.pt.svg
 create mode 100644 share/tutorials/tutorial-basic.pt.svg
 create mode 100644 share/tutorials/tutorial-calligraphy.pt.svg
 create mode 100644 share/tutorials/tutorial-elements.pt.svg
 create mode 100644 share/tutorials/tutorial-interpolate.pt.svg
 create mode 100644 share/tutorials/tutorial-shapes.pt.svg
 create mode 100644 share/tutorials/tutorial-tips.pt.svg
 create mode 100644 share/tutorials/tutorial-tracing-pixelart.pt.svg
 create mode 100644 share/tutorials/tutorial-tracing.pt.svg

diff --git a/po/pt.po b/po/pt.po
index d85d49837..04a5ccb28 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -26250,46 +26250,46 @@ msgstr "Criar novo conjunto de seleção"
 #. code); otherwise leave as "tutorial-basic.svg".
 #: ../src/verbs.cpp:2175
 msgid "tutorial-basic.svg"
-msgstr "tutorial-basic.pt_BR.svg"
+msgstr "tutorial-basic.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2179
 msgid "tutorial-shapes.svg"
-msgstr "tutorial-shapes.pt_BR.svg"
+msgstr "tutorial-shapes.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2183
 msgid "tutorial-advanced.svg"
-msgstr "tutorial-advanced.pt_BR.svg"
+msgstr "tutorial-advanced.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2189
 msgid "tutorial-tracing.svg"
-msgstr "tutorial-tracing.pt_BR.svg"
+msgstr "tutorial-tracing.pt.svg"
 
 #: ../src/verbs.cpp:2194
 msgid "tutorial-tracing-pixelart.svg"
-msgstr "tutorial-tracing-pixelart.svg"
+msgstr "tutorial-tracing-pixelart.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2198
 msgid "tutorial-calligraphy.svg"
-msgstr "tutorial-calligraphy.pt_BR.svg"
+msgstr "tutorial-calligraphy.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2202
 msgid "tutorial-interpolate.svg"
-msgstr "tutorial-interpolate.pt_BR.svg"
+msgstr "tutorial-interpolate.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2206
 msgid "tutorial-elements.svg"
-msgstr "tutorial-elements.pt_BR.svg"
+msgstr "tutorial-elements.pt.svg"
 
 #. TRANSLATORS: See "tutorial-basic.svg" comment.
 #: ../src/verbs.cpp:2210
 msgid "tutorial-tips.svg"
-msgstr "tutorial-tips.pt_BR.svg"
+msgstr "tutorial-tips.pt.svg"
 
 #: ../src/verbs.cpp:2396 ../src/verbs.cpp:3012
 msgid "Unlock all objects in the current layer"
diff --git a/share/tutorials/potrace-pt.png b/share/tutorials/potrace-pt.png
new file mode 100644
index 000000000..5baf22db9
Binary files /dev/null and b/share/tutorials/potrace-pt.png differ
diff --git a/share/tutorials/tutorial-advanced.pt.svg b/share/tutorials/tutorial-advanced.pt.svg
new file mode 100644
index 000000000..022eeb355
--- /dev/null
+++ b/share/tutorials/tutorial-advanced.pt.svg
@@ -0,0 +1,511 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::AVANÇADO
+ 
+
+ 
+ 
+  
+   
+  
+  Este tutorial aborda os seguintes temas: copiar/colar, edição de nós, desenho à mão livre e desenho com curvas Bézier, manipulação de caminhos, operações booleanas, deslocamentos (comprimir/expandir), simplificação e ferramenta de texto.
+ 
+ 
+ 
+  
+   
+  
+  Use Ctrl+setas, roda do meio do rato ou arrastar com o botão do meio do rato para deslocar a visualização da página para baixo. Para ter noções básicas sobre criação, seleção e transformação de objetos, veja o tutorial Básico em Ajuda > Tutoriais.
+ 
+ 
+  Técnicas de colar
+ 
+ 
+ 
+  
+   
+  
+  Depois de copiar alguns objetos com Ctrl+C ou cortar com Ctrl+X, o comando Colar (Ctrl+V) cola os objetos copiados no local do ponteiro do rato ou, se o cursor estiver fora da janela, no centro da janela do documento. No entanto, os objetos na área de transferência também têm as informações sobre o lugar original do qual foram copiados e pode-se colar para o local onde estavam originalmente com Colar no Lugar (Ctrl+Alt+V).
+ 
+ 
+ 
+  
+   
+  
+  Um outro comando, Colar Estilo (Shift+Ctrl+V), aplica o estilo do primeiro objeto na área de transferência na seleção atual. O "estilo" colado inclui todas as configurações de preenchimento, traço e fonte tipográfica, mas não a forma geométrica, o tamanho ou parâmetros específicos de um tipo de forma geométrica, como por exemplo o número de pontas de uma estrela.
+ 
+ 
+ 
+  
+   
+  
+  Existe ainda outro conjunto de comandos para colar, como o Colar Tamanho que redimensiona a seleção para ficar a ter o tamanho igual aos objetos da área de transferência. Existem vários comandos para colar o tamanho: Colar Tamanho, Colar Largura, Colar Altura, Colar Tamanho Separadamente, Colar Largura Separadamente e Colar Altura Separadamente.
+ 
+ 
+ 
+  
+   
+  
+  Colar Tamanho altera o tamanho de toda a seleção para igualar o tamanho total dos objetos da área de transferência. Colar Largura/Colar Altura altera o tamanho de toda a seleção horizontalmente/verticalmente por forma a ficar igual à largura/altura dos objetos da área de transferência. Estes comandos obedecem ao botão de bloqueio da proporção do redimensionamento da ferramenta de seleção na barra Controlos da Ferramenta (ícone do cadeado entre os campos L e A), por forma a que, quando este botão de bloqueio é ativado, a outra dimensão do objeto selecionado é redimensionada na mesma proporção; caso contrário a outra dimensão permanece inalterada. Os comandos que contêm a palavra "Separadamente" funcionam de maneira semelhante aos descritos acima, exceto pelo facto que eles redimensionam cada objeto selecionado separadamente para que corresponda ao tamanho/largura/altura dos objetos da área de transferência.
+ 
+ 
+ 
+  
+   
+  
+  A área de transferência está disponível ao nível do sistema - pode-se copiar e colar objetos entre diferentes instâncias do Inkscape assim como entre o Inkscape e outros programas (estes têm de suportar o formato SVG).
+ 
+ 
+  Desenhar à mão livre e caminhos regulares
+ 
+ 
+ 
+  
+   
+  
+  A maneira mais fácil de criar uma forma geométrica arbitrária é desenhá-la usando a ferramenta Lápis, ou seja, linhas à mão livre (F6):
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Para desenhar com formas geométricas mais regulares, usar a ferramenta Caneta, ou seja, desenhar com curvas Bézier e linhas retas (Shift+F6):
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Com a ferramenta Caneta, cada clique cria um nó agudo sem alças de curvas, desta forma uma série de cliques produz uma sequência de segmentos de linhas retas. Clicar e arrastar cria um nó Bézier suave com duas alças colinearmente opostas. Pressione a tecla Shift enquanto arrasta uma alça para rodar apenas uma alça e manter fixa a outra oposta. Como de costume, utilizando a tecla Ctrl limita a direção, tanto do segmento de linha atual quanto das alças Bézier em incrementos de 15 graus. Pressionando a tecla Enter finaliza a linha, Esc cancela. Para cancelar apenas o último segmento de uma linha incompleta, pressione a tecla Backspace.
+ 
+ 
+ 
+  
+   
+  
+  Tanto na ferramenta Lápis como na ferramenta Caneta, o caminho atualmente selecionado mostra pequenas âncoras quadradas em ambas as extremidades. Estas âncoras permitem continuar o caminho (desenhando a partir de uma das âncoras) ou completá-lo (desenhando de uma âncora à outra) em vez de criar um novo caminho separado.
+ 
+ 
+  Editar caminhos
+ 
+ 
+ 
+  
+   
+  
+  Ao contrário das formas geométricas criadas pelas ferramentas de formas geométricas, as ferramentas de Caneta e de Lápis criam o que é conhecido como caminho. Um caminho é uma sequência de segmentos de linhas retas e/ou curvas Bézier que, como qualquer outro objeto do Inkscape, podem ter determinadas propriedades de preenchimento e traço. Porém, ao contrário de uma forma geométrica, um caminho pode ser editado arrastando-se livremente quaisquer um dos seus nós (e não apenas com alças pré-definidas) ou arrastando-se diretamente um segmento do caminho. Selecione o caminho seguinte e mude para ferramenta Nó (F2):
+ 
+ 
+ 
+ 
+  
+   
+  
+  Aparecem alguns pequenos quadrados cinzentos que representam nós no caminho. Estes nós podem ser selecionados com um clique sobre eles, com Shift+clique, ou com arrasto elástico — da mesma forma como são selecionados os objetos com a ferramenta de Selecionar. Também se pode clicar sobre um segmento do caminho para selecionar automaticamente os nós adjacentes. Os nós selecionados ficam destacados e mostram as suas alças de controlo — um ou dois pequenos círculos ligados a cada nó selecionado por linhas retas. A tecla ! inverte a seleção do nó nos sub-caminhos atuais (ou seja, sub-caminhos com pelo menos um nó selecionado); Alt+! inverte a seleção no caminho inteiro.
+ 
+ 
+ 
+  
+   
+  
+  Os caminhos são editados arrastando os nós, as alças de controlo, ou arrastando diretamente um segmento. Tente arrastar alguns nós, alças e segmentos do caminho acima. Ctrl funciona como de costume, restringindo o movimento e a rotação. As teclas de setas e a tecla Tab, [, ], <, > com os seus modificadores, funcionam todas da mesma forma que a ferramenta de Selecionar, mas aplicam-se aos nós em vez dos objetos. Pode-se adicionar nós em qualquer lugar de um caminho com um clique duplo ou pressionando Ctrl+Alt+clique no local desejado.
+ 
+ 
+ 
+  
+   
+  
+  Pode eliminar os nós com a tecla Del ou Ctrl+Alt+clique. Ao eliminar nós, o Inkscape tentará manter a forma anterior, mas se desejar que as alças dos nós adjacentes fiquem retraídas (sem manter a forma) pode eliminá-las com Ctrl+Del. Além disso, pode-se duplicar (Shift+D) os nós selecionados. O caminho pode ser partido (Shift+B) nos nós selecionados, ou selecionando 2 nós das extremidades de 1 caminho, é possível ligá-los (Shift+J).
+ 
+ 
+ 
+  
+   
+  
+  Pode-se transformar um nó num nó afiado (Shift+C), o que significa que as suas 2 alças podem-se mover em qualquer ângulo independentemente uma da outra; num nó suave (Shift+S), no qual as suas alças estão sempre na mesma linha reta (colineares); num nó simétrico (Shift+Y), que é semelhante ao nó suave, mas as alças têm o mesmo comprimento; num nó auto-suave (Shift+A), um nó especial que ajusta automaticamente as alças do nó e nós auto-suaves adjacentes para manter uma curva suave. Quando se muda o tipo de nó, pode-se preservar a posição de uma das 2 alças posicionando o cursor sobre a alça, de forma a que apenas a outra alça seja rodada/dimensionada com o movimento.
+ 
+ 
+ 
+  
+   
+  
+  Além disso, pode-se retrair (eliminar) completamente a alça de um nó com Ctrl+clique sobre ela. Se os 2 nós adjacentes tiverem as alças retraídas, o segmento do caminho entre os nós será uma linha reta. Para acrescentar uma alça num nó sem alças, Shift+arraste sobre o nó.
+ 
+ 
+  Sub-caminhos e combinar
+ 
+ 
+ 
+  
+   
+  
+  Um caminho pode conter mais de um sub-caminho. Um sub-caminho é uma sequência de nós ligados uns aos outros. Por essa razão, se um caminho tem mais de um sub-caminho, nem todos os seus nós estão ligados. Abaixo à esquerda, 3 sub-caminhos pertencem a 1 único caminho composto; os mesmo 3 sub-caminhos à direita são caminhos independentes:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Notar que um caminho composto não é o mesmo que um grupo. É um objeto que só pode ser selecionado como um todo. Se selecionar o objeto da esquerda acima e mudar para a ferramenta de Nó, verá nós em todos os 3 sub-caminhos. Na direita, pode apenas editar os nós de um caminho de cada vez.
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape pode Combinar caminhos num caminho composto (Ctrl+K) e Separar um caminho composto em caminhos separados (Shift+Ctrl+K). Tente estes comandos nos exemplos acima. Visto que um objeto pode ter apenas um preenchimento e um traço, um novo caminho composto fica com o estilo do primeiro objeto (o objeto mais baixo na ordem-Z) a ser combinado.
+ 
+ 
+ 
+  
+   
+  
+  Quando se combinam caminhos preenchidos que se sobrepõem, geralmente o preenchimento desaparecerá nas áreas onde os caminhos se sobrepõem:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Esta é maneira mais fácil de criar objetos com buracos. Para comandos mais avançados em caminhos, ver "Operações Booleanas" mais adiante.
+ 
+ 
+  Converter Objeto num caminho
+ 
+ 
+ 
+  
+   
+  
+  Qualquer objeto de forma geométrica ou texto pode ser convertido num caminho (Shift+Ctrl+C). Esta operação não altera a aparência do objeto mas remove todas as capacidades específicas do objeto (por exemplo, não será possível posteriormente arredondar os cantos de um retângulo ou editar o texto); em vez disso, será possível editar os nós. São mostradas abaixo 2 estrelas — a da esquerda é a forma geométrica criada com a ferramenta Polígono e Estrela e a da direita é uma estrela convertida num caminho. Mude para a ferramenta de edição de nós e veja como elas podem ser editadas quando estão selecionadas:
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Além disso, pode-se converter num caminho ("contorno") o traço de qualquer objeto. Abaixo, o primeiro objeto é o caminho original (nenhum preenchimento, traço preto), enquanto o segundo é o resultado do comando Converter Traço num Caminho (preenchimento preto, nenhum traço):
+ 
+ 
+ 
+ 
+  Operações Booleanas
+ 
+ 
+ 
+  
+   
+  
+  Os comandos no menu Caminho permitem combinar 2 ou mais objetos utilizando operações booleanas:
+ 
+ Formas originais
+ União (Ctrl++)
+ Diferença (Ctrl+-)
+ Interseção(Ctrl+*)
+ Exclusão(Ctrl+^)
+ Divisão(Ctrl+/)
+ Cortar Caminho(Ctrl+Alt+/)
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ (parte inferior menos a superior)
+ 
+ 
+  
+   
+  
+  As teclas de atalho para estes comandos fazem alusão às analogias aritméticas das operações booleanas (união refere-se à adição, diferença é a subtração, etc.). Os comandos Diferença e Exclusão aplicam-se apenas a 2 objetos selecionados; os outros comandos podem processar uma quantidade qualquer de objetos de uma só vez. O resultado obtém sempre o estilo do objeto que estiver mais fundo na ordem-Z.
+ 
+ 
+ 
+  
+   
+  
+  O resultado do comando Exclusão é parecido com o do comando Combinar (ver acima), mas é diferente, uma vez que o Exclusão adiciona nós extras onde os caminhos originais se cruzam. A diferença entre Divisão e Cortar Caminho é que o primeiro corta o objeto do fundo por inteiro na área em que o objeto do topo o sobrepõe, enquanto que o último apenas corta o traço do objeto do fundo nos pontos de contacto com o objeto do topo e remove qualquer preenchimento (isto é adequado para cortar traços sem preenchimento em pedaços).
+ 
+ 
+  Comprimir e expandir
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape é capaz de comprimir e expandir formas não apenas através da alteração das suas dimensões, mas também executando o deslocamento num caminho, ou seja, deslocando perpendicularmente o caminho em cada ponto. Os comandos correspondentes são chamados Comprimir (Ctrl+() e Expandir (Ctrl+)). Abaixo, está o caminho original (a vermelho) e vários caminhos comprimidos ou expandidos a partir do original:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Os comandos Comprimir e Expandir produzem caminhos (converte o objeto original num caminho se ainda não for um caminho). Geralmente é mais conveniente o Deslocamento Dinâmico (Ctrl+J) que cria um objeto com uma alça que pode ser arrastada (similar à alça de uma forma geométrica) controlando a distância do deslocamento. Selecione o objeto abaixo, mude para o ferramenta de edição de nós e arraste as alças para ter uma noção de como funciona:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Os objetos com Deslocamento Dinâmico memorizam o caminho original, assim estes não "se degradam" quando se altera a distância do deslocamento várias vezes. Quando não for preciso ajustá-lo mais, pode-se converter um objeto com deslocamento de novo num caminho.
+ 
+ 
+ 
+  
+   
+  
+  Ainda mais prático é um objeto com Deslocamento Ligado ao Original, similar ao objeto com Deslocamento Dinâmico mas que está ligado a um outro caminho que permanece editável. Pode-se fazer uma qualquer quantidade de objetos com Deslocamento Ligado ao Original baseados num só caminho. Abaixo, o caminho original está a vermelho, o deslocamento ligado ao original tem o traço preto e nenhum preenchimento, o outro tem preenchimento preto e nenhum traço.
+ 
+ 
+ 
+  
+   
+  
+  Selecione o objeto vermelho e edite os nós deste; veja como os 2 deslocamentos ligados ao original respondem. Agora selecione qualquer um dos deslocamentos e arraste a alça para ajustar o raio do deslocamento. Finalmente, note como se pode mover ou transformar os objetos com deslocamento independentemente sem perder a ligação com o caminho fonte.
+ 
+ 
+  
+  
+  
+ 
+ 
+  Simplificação
+ 
+ 
+ 
+  
+   
+  
+  O principal uso do comando Simplificar (Ctrl+L) é reduzir o número de nós num caminho enquanto quase preserva a sua forma. Isto pode ser útil para caminhos criados pela ferramenta Lápis, uma vez que esta ferramenta certas vezes cria mais nós do que o necessário. Abaixo, a forma à esquerda foi criada pela ferramenta à mão livre, e à direita uma cópia que foi simplificada. O caminho original tem 28 nós, enquanto o simplificado tem 17 (o que significa que é muito mais fácil para trabalhar com a ferramenta de edição de nós) e é mais suave.
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  A quantidade de simplificação (conhecida como limiar) depende do tamanho da seleção. Por essa razão, se selecionar um caminho junto com algum objeto mais largo, ele será simplificado mais agressivamente do que se for selecionado sozinho. Além disso, o comando Simplificar é acelerado. Isto significa que se pressionar Ctrl+L várias vezes sucessivamente (até 0,5 segundos entre eles), o limiar cresce a cada uma das ações. Ao fazer outro Simplificar depois de uma pausa, o limiar volta para o valor padrão. Fazendo uso da aceleração, é fácil aplicar a quantidade exata de simplificação que se necessita para cada caso.
+ 
+ 
+ 
+  
+   
+  
+  Além de suavizar traços criados à mão livre, o comando Simplificar pode ser usado para vários efeitos criativos. Muitas vezes, uma forma rígida e geométrica é beneficiada com alguma simplificação que cria interessantes generalizações naturais da forma original — suavizando cantos pontiagudos e introduzindo distorções muito naturais, algumas vezes elegantes e outras divertidas. Eis de seguida um exemplo que fica muito mais agradável depois de usar o Simplificar:
+ 
+ Original
+ Simplificação ligeira
+ Simplificação agressiva
+ 
+ 
+ 
+ 
+  Criar texto
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape é capaz de criar textos longos e complexos. No entanto, é também bastante útil para a criar de pequenos textos tais como cabeçalhos, faixas, logotipos, etiquetas, legendas de diagramas, etc. Esta secção é uma introdução muito básica sobre as capacidades de texto do Inkscape.
+ 
+ 
+ 
+  
+   
+  
+  Criar um objeto de texto é simples: basta clicar na ferramenta Texto (F8), clicar em qualquer lugar no documento e digitar o texto. Para mudar a família da fonte, estilo, tamanho e alinhamento, abra o painel Texto e Fonte (Shift+Ctrl+T). Esse painel também tem uma aba de entrada de texto onde se pode editar o texto selecionado - em algumas situações, pode ser mais conveniente que editá-lo diretamente na área de desenho (notar que esta aba suporta a verificação ortográfica em tempo real).
+ 
+ 
+ 
+  
+   
+  
+  Tal como outras ferramentas, a ferramenta Texto pode selecionar objetos do mesmo tipo — objetos de texto — pode-se clicar para selecionar e posicionar o cursor em qualquer objeto de texto existente (como este parágrafo).
+ 
+ 
+ 
+  
+   
+  
+  Umas das operações mais comuns na elaboração de textos é o ajuste do espaçamento entre as letras e as linhas. Como sempre, o Inkscape tem teclas de atalho para isto. Quando se está a editar um texto, as teclas Alt+< e Alt+> mudam o espaçamento das letras na linha atual de um texto, por forma a que o comprimento total desta linha mude em 1 píxel no aumento da vista atual (compare com a ferramenta de Selecionar onde as mesmas teclas redimensionam o objeto na proporção do píxel no ecrã). Como regra, se o tamanho da fonte num objeto de texto é maior que o tamanho padrão, provavelmente será melhor comprimir as letras deixando-as um pouco mais apertadas que o padrão. Eis um exemplo:
+ 
+ Original
+ Espaçamento entre-letras diminuído
+ Inspiração
+ Inspiração
+ 
+ 
+  
+   
+  
+  A variante com letras apertadas parece um pouco melhor para um cabeçalho, mas ainda não é perfeita: as distâncias entre as letras não são uniformes, por exemplo as letras "a" e "t" estão muito separadas enquanto que "t" e "i" estão muito próximas. A quantidade de tais espaçamentos imperfeitos (visíveis especialmente em tamanhos grandes de fontes) é maior em fontes de baixa qualidade que nas de alta qualidade; no entanto, em qualquer composição de texto e em qualquer fonte, provavelmente encontrará algumas letras que beneficiarão do ajuste do espaçamento.
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape facilita bastante tais ajustes. Apenas mova o cursor de edição de texto entre os caracteres mal espaçados e use Alt+setas para mover as letras que estão a seguir ao cursor. É mostrado abaixo o mesmo exemplo, desta vez com ajuste manual para posicionar de forma uniforme as letras:
+ 
+ Espaçamento entre-letras diminuído, com entre-letras em alguns pares de letras ajustado manualmente
+ Inspiração
+ 
+ 
+  
+   
+  
+  Além de mover as letras horizontalmente com Alt+seta esquerda ou Alt+seta direita, também se pode movê-las verticalmente usando Alt+seta de cima ou Alt+seta de baixo:
+ 
+ Inspiração
+ 
+ 
+  
+   
+  
+  Claro que se poderia simplesmente converter o texto num caminho (Shift+Ctrl+C) e mover as letras como qualquer forma geométrica ou caminho. No entanto é muito mais prático manter as propriedades de texto — permanecendo editável e pode-se experimentar fontes diferentes sem remover os ajustes e espaçamentos, além disso ocupa muito menos espaço no ficheiro gravado. A única desvantagem em conservar "texto como texto" é que é necessário ter a fonte original instalada no computador em que se queira abrir o documento SVG.
+ 
+ 
+ 
+  
+   
+  
+  Similar ao espaçamento das letras, também se pode ajustar o espaçamento entre linhas em objetos de texto com várias linhas. Experimente usar Ctrl+Alt+< e Ctrl+Alt+> em qualquer parágrafo neste tutorial para variar a altura total do objeto de texto em 1 píxel na ampliação da vista atual. Como na ferramenta de Selecionar, pressionar a tecla Shift com qualquer tecla de atalho de espaçamento ou entre-letras produz um efeito 10 vezes maior que sem a tecla Shift.
+ 
+ 
+  Editor XML
+ 
+ 
+ 
+  
+   
+  
+  Uma das ferramenta mais poderosas do Inkscape é o editor XML (Shift+Ctrl+X). Este mostra a árvore XML completa do documento, mostrando sempre o estado atual do documento. Pode-se editar o desenho e observar as mudanças correspondentes na árvore XML. Além disso é possível editar qualquer texto, elemento ou atributo dos nós no editor XML e ver imediatamente o resultado. Esta é uma boa ferramenta para aprender SVG de forma interativa e permite fazer truques que seriam impossíveis com as ferramentas comuns de edição.
+ 
+ 
+  Conclusão
+ 
+ 
+ 
+  
+   
+  
+  Este tutorial mostra apenas uma pequena parte do que o Inkscape é capaz. Esperamos que tenha gostado. Não fique com medo de experimentar e partilhar o que criou. Visite www.inkscape.org para obter mais informações, as versões mais recentes e para obter ajuda da comunidade de utilizadores e programadores.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-basic.pt.svg b/share/tutorials/tutorial-basic.pt.svg
new file mode 100644
index 000000000..2338e5364
--- /dev/null
+++ b/share/tutorials/tutorial-basic.pt.svg
@@ -0,0 +1,760 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::BÃSICO
+ 
+
+ 
+ 
+  
+   
+  
+  Este tutorial demonstra o funcionamento básico do Inkscape. É um documento normal do Inkscape que se pode ver, editar, copiar ou gravar alterações.
+ 
+ 
+ 
+  
+   
+  
+  O tutorial Básico aborda a navegação na área de trabalho, gerir documentos, funcionamento básico das ferramentas de formas geométricas, técnicas de seleção, transformação de objetos com a ferramenta de selecionar, agrupamento, configuração de preenchimento e traço, alinhamento e ordem em profundidade (ordem-z). Para tópicos mais avançados consulte os outros tutoriais no menu Ajuda.
+ 
+ 
+  Deslocar a área de visualização
+ 
+ 
+ 
+  
+   
+  
+  Existem muitas formas de deslocar a área de trabalho que se está a visualizar. Pode-se usar as teclas Ctrl+seta (uma das teclas de setas) para deslocar a área de trabalho através do teclado (experimente agora mesmo deslocar para baixo). Também pode arrastar a área de trabalho clicando (mantendo ao mesmo tempo que desloca o rato) com o botão do meio do rato (caso seja uma roda, clique tela). É possível também usar as barras de elevadores (pressione as teclas Ctrl+B para as mostrar ou esconder). A roda do rato também funciona para deslocar verticalmente; pressione a tecla Shift e de seguida use a roda para deslocar na horizontal.
+ 
+ 
+  Aumentar e diminuir a vista
+ 
+ 
+ 
+  
+   
+  
+  A forma mais fácil para aumentar a vista é pressionar a tecla - e para diminuir, a tecla + (ou =). Pode também usar Ctrl+clique com o botão do meio ou Ctrl+clique com o botão direito para aumentar, Shift+clique com o botão do meio ou Shift+clique com o botão direito para diminuir, ou rode a roda do rato com Ctrl. Pode também clicar no campo de aumento (no canto inferior direito), onde se pode especificar um aumento preciso em percentagem, carregando de seguida na tecla Enter. Também se pode usar a ferramenta Lupa (na barra vertical de Ferramentas à esquerda onde aparece uma lupa) que te permite aumentar com clique, diminuir com Shift+clique e clicar-arrastar-e-largar para aumentar nessa área.
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape também mantém um histórico das ampliações e reduções da sessão de trabalho atual. Pressione a tecla ` para voltar à ampliação anterior, ou Shift+` para ir à ampliação seguinte do histórico.
+ 
+ 
+  Ferramentas do Inkscape
+ 
+ 
+ 
+  
+   
+  
+  A barra de ferramentas vertical à esquerda mostra as ferramentas de desenho e edição do Inkscape. Na parte superior da janela, abaixo do menu, localiza-se a Barra de Comandos com botões de comando gerais e a barra Controlos da Ferramenta com controlos que são específicos para cada ferramenta. A Barra de Estado na parte inferior da janela mostra dicas úteis e mensagens enquanto se trabalha no Inkscape.
+ 
+ 
+ 
+  
+   
+  
+  Muitas operações estão disponíveis através de teclas de atalho. Para ver a lista completa aceda ao menu Ajuda > Guia de Referência de Teclado e Rato
+ 
+ 
+  Criar e gerir documentos
+ 
+ 
+ 
+  
+   
+  
+  Para criar um novo documento aceda ao menu Ficheiro > Novo ou pressione as teclas Ctrl+N. Para criar um documento de um dos modelos do Inkscape, aceda ao menu Ficheiro > Novo a partir de um modelo... ou pressione as teclas Ctrl+Alt+N
+ 
+ 
+ 
+  
+   
+  
+  Para abrir um documento SVG existente, aceda ao menu Ficheiro > Abrir ou pressione as teclas Ctrl+O. Para gravar, use o menu Ficheiro > Gravar (Ctrl+S), ou Gravar Como (Shift+Ctrl+S) para gravar com outro nome noutro ficheiro. (O Inkscape pode ser instável, por isso é recomendável gravar com frequência!)
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape usa o formato SVG (Scalable Vector Graphics) nos ficheiros gravados. O SVG é um padrão aberto suportado por muitos programas das artes gráficas. Os ficheiros SVG são baseados no XML e podem ser editados com qualquer editor de textos ou editor de XML (para além do Inkscape). Além do SVG, o Inkscape pode importar e exportar vários outros formatos (EPS, PNG, etc.).
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape abre uma janela separada para cada documento. Pode navegar entre elas usando o gestor de janelas do sistema operativo (por exemplo, com Alt+Tab), assim como pode usar as teclas de atalho do Inkscape, Ctrl+Tab, que fará um ciclo através de todas as janelas abertas. (Crie agora um novo documento e alterne entre ele e este documento para praticar.) Nota: o Inkscape trata estas janelas como se fossem abas num navegador de internet, isto significa que o atalho Ctrl+Tab apenas funciona em documentos a correr no mesmo processo de sistema. Se abrir vários ficheiros num navegador de ficheiros do sistema operativo ou abrir mais do que uma vez o Inkscape através de atalhos ou o programa em si do navegador de ficheiros, isto não funcionará.
+ 
+ 
+  Criar formas geométricas
+ 
+ 
+ 
+  
+   
+  
+  É hora de fazer algumas formas geométricas! Clique na ferramenta Retângulo na barra de ferramentas esquerda (ou pressione a tecla F4) e clique-e-arraste, num novo documento vazio ou aqui mesmo:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Como pode ver, por padrão, os retângulos são azuis, com um traço preto (contorno) e totalmente opaco. Veremos como alterar isto mais à frente. Com outras ferramentas, também se pode criar elipses, estrelas e espirais:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Estas ferramentas são conhecidas como ferramentas de formas geométricas. Cada forma criada mostra uma ou mais alças em forma de diamante; tente arrastá-las para ver como a forma é alterada. A barra de Controlos da Ferramenta é outra maneira de alterar uma forma; estes controlos afetam as formas atualmente selecionadas (ou seja, aquelas que mostram as alças) e definem a configuração padrão que será aplicada a formas criadas posteriormente.
+ 
+ 
+ 
+  
+   
+  
+  Para desfazer a última ação, usar as teclas Ctrl+Z. (Ou se mudar de ideia de novo pode refazer a ação desfeita com as teclas Shift+Ctrl+Z.)
+ 
+ 
+  Mover, redimensionar, rodar
+ 
+ 
+ 
+  
+   
+  
+  A ferramenta do Inkscape mais usada é a ferramenta de Selecionar. Clique no primeiro botão (com a seta) na Barra de Ferramentas da esquerda vertical, ou pressione a tecla F1 ou a Barra de Espaço. Agora pode selecionar qualquer objeto. Clique no retângulo abaixo.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Verá oito alças de controlo em forma de setas que apareceram ao redor do objeto. Agora pode:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Mover o objeto clicando nele e mantendo premido, arraste-o. (Pressione a tecla Ctrl para restringir o movimento aos eixos horizontal e vertical.)
+ 
+ 
+ 
+ 
+  
+   
+  
+  Redimensionar o objeto arrastando qualquer alça de controlo. (Pressione a tecla Ctrl para manter a proporção altura e largura originais.)
+ 
+ 
+ 
+  
+   
+  
+  Agora clique no retângulo novamente. As alças mudam. Agora pode:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Rodar o objeto arrastando as alças dos cantos. (Pressione a tecla Ctrl para restringir a rotação a incrementos de 15 graus. Arraste a marca em forma de cruz que aparece ao centro para alterar o centro de rotação.)
+ 
+ 
+ 
+ 
+  
+   
+  
+  Distorcer (esticar ou encolher lateralmente) o objeto arrastando as alças centrais. (Pressione a tecla Ctrl para restringir a distorção em incrementos de 15 graus.)
+ 
+ 
+ 
+  
+   
+  
+  Com a Ferramenta de Selecionar, também pode usar os campos numéricos na barra de Controles da Ferramenta (logo acima da área de desenho) para configurar os valores exatos para as coordenadas (X e Y) e tamanho (L e A) da seleção.
+ 
+ 
+  Transformar com as teclas
+ 
+ 
+ 
+  
+   
+  
+  Uma das características do Inkscape que o diferencia da maioria dos outros editores vetoriais é sua ênfase na acessibilidade através do teclado. Dificilmente existe algum comando ou ação que seja impossível de realizar a partir do teclado e transformar objetos não é exceção.
+ 
+ 
+ 
+  
+   
+  
+  Pode usar o teclado para mover (teclas de seta), redimensionar (teclas < e >), e rodar (teclas [ e ]) objetos. O incremento padrão em movimentos e redimensionamentos é de 2 px; com Shift, move ou redimensiona multiplicado por 10. Ctrl+> e Ctrl+< redimensiona em 200% ou 50% do original, respectivamente. Por padrão, as rotações são feitas com incrementos de 15 graus; com Ctrl, roda em 90 graus.
+ 
+ 
+ 
+  
+   
+  
+  Entretanto, talvez a mais útil seja a transformação em escala de píxel, executada usando Alt com as teclas de transformação. Por exemplo, Alt+seta moverá a seleção em 1 píxel na ampliação da vista atual (ou seja em 1 píxel do ecrã, não confunda com a unidade px que é uma unidade de comprimento do SVG independente da ampliação da vista). Isto significa que se aumentar a ampliação, ao pressionar Alt+seta resultará em um movimento absoluto menor que ainda se parecerá com um movimento de 1 píxel no ecrã. Assim é possível posicionar os objetos com precisão arbitrária simplesmente aumentando ou diminuindo a ampliação conforme necessário.
+ 
+ 
+ 
+  
+   
+  
+  De forma semelhante, Alt+> e Alt+< alteram as dimensões do objeto de modo que o seu tamanho visível é alterado em 1 píxel no ecrã, e Alt+[ e Alt+] roda de modo que o ponto mais longe do centro se mova em 1 píxel do ecrã.
+ 
+ 
+ 
+  
+   
+  
+  Nota: os utilizadores do Linux podem não obter os resultados esperados com a combinação Alt+seta e outras combinações se o gestor de janelas do sistema operativo capturar esses eventos antes de eles chegarem ao Inkscape. Uma solução seria alterar a configuração do gestor de janelas.
+ 
+ 
+  Várias seleções
+ 
+ 
+ 
+  
+   
+  
+  Pode selecionar quaisquer quantidade de objetos simultaneamente com a tecla Shift+clique sobre cada um deles. Ou pode arrastar o cursor à volta dos objetos que deseja selecionar; chama-se a isto seleção elástica. (O Selecionador cria a seleção elástica quando se arrasta a partir de um espaço vazio; entretanto, se pressionar a tecla Shift antes de começar a arrastar, o Inkscape usará a seleção elástica.) Pratique selecionando todas as três formas presentes abaixo:
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Agora, use a seleção elástica (arrastando ou Shift+arrastar) para selecionar as 2 elipses mas não o retângulo:
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Cada objeto individual dentro de uma seleção mostra um indicador de seleção — por padrão, uma caixa retangular pontilhada. Estes indicadores facilitam a visualização imediata do que está e não está selecionado. Por exemplo, se selecionar tanto as duas elipses quanto o retângulo, sem os indicadores seria difícil adivinhar se as elipses estão ou não selecionadas.
+ 
+ 
+ 
+  
+   
+  
+  Shift+clique sobre um objeto selecionado, retira-o da seleção. Selecione todos os três objetos acima, depois use Shift+clique para retirar ambas as elipses da seleção deixando apenas o retângulo selecionado.
+ 
+ 
+ 
+  
+   
+  
+  Pressionando Esc desseleciona qualquer objeto selecionado. Ctrl+A seleciona todos os objetos na camada atual (se não criou camadas, isto é o mesmo que todos os objetos no documento).
+ 
+ 
+  Agrupar
+ 
+ 
+ 
+  
+   
+  
+  Podem ser combinados vários objetos num grupo. Um grupo comporta-se como um objeto único quando se arrasta ou transforma. Abaixo, os 3 objetos à esquerda estão independentes; os mesmo 3 objetos à direita estão agrupados. Tente arrastar o grupo.
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  Para criar um grupo, selecione 1 ou mais objetos e pressione Ctrl+G. Para desagrupar 1 ou mais grupos, selecione-os e pressione Ctrl+U. Os mesmo grupos podem ser agrupados, como qualquer outro objeto; tais grupos recursivos podem colocar-se em profundidades arbitrárias. No entanto, Ctrl+U apenas desagrupa o nível mais alto do grupo numa seleção; é necessário pressionar Ctrl+U repetidamente para desagrupar completamente um grupo dentro de outros grupos.
+ 
+ 
+ 
+  
+   
+  
+  No entanto não é necessário desagrupar caso se necessite editar um objeto dentro de um grupo. Basta usar Ctrl+clique sobre o objeto e este será selecionado e poderá ser editável, ou Shift+Ctrl+clique sobre vários objetos (dentro ou fora de qualquer grupo) para fazer a seleção múltipla independentemente do agrupamento. Tente mover ou transformar as formas individualmente no grupo (acima à direita) sem desagrupá-lo, depois desfaça a seleção e selecione o grupo normalmente para ver que ele ainda permanece agrupado.
+ 
+ 
+  Preenchimento e traço
+ 
+ 
+ 
+  
+   
+  
+  A forma mais simples para aplicar uma cor a um objeto é selecioná-lo e clicar numa das cores na paleta de cores que se encontra na parte inferior. Alternativamente, pode-se abrir o painel de Amostras de Cores no menu Ver (ou usar Shift+Ctrl+W), selecionar um objeto e clicar numa cor para aplicá-la.
+ 
+ 
+ 
+  
+   
+  
+  Para aceder a mais opções pode-se usar o painel Preenchimento e Traço no menu Objeto (ou usar Shift+Ctrl+F). Selecione a forma abaixo e abra o painel Preenchimento e Traço.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Verá que o painel Preenchimento e Traço tem três abas: Preenchimento, Pintura do traço e Estilo do traço. A aba Preenchimento permite editar o preenchimento (área interior) dos objetos selecionados. Usando os botões logo abaixo da aba, pode-se escolher os tipos de preenchimento, incluindo nenhum preenchimento (o botão com o X), preenchimento de cor lisa, bem como gradientes lineares ou radiais. Para a forma de cima, está ativado o botão de cor lisa.
+ 
+ 
+ 
+  
+   
+  
+  Mais abaixo do painel, vê-se uma série de botões com sistemas de cores: RGB, HSL, CMYK, Roda e CMS. Provavelmente o mais prático é o sistema de Roda, onde se pode girar o triângulo para escolher uma cor na roda e depois selecionar um tom dessa cor dentro do triângulo. Todos os sistemas de cor contêm um deslizador para configurar a transparência (canal alfa) dos objetos selecionados.
+ 
+ 
+ 
+  
+   
+  
+  Sempre que se seleciona um objeto, o sistema de cores é atualizado para mostrar o seu preenchimento e traço atual (quando são selecionados vários objetos, o painel mostra a sua cor média de entre todos os objetos). Faça experiências com estes exemplos:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Usando a aba Pintura do traço, pode-se remover o traço (contorno) do objeto, ou atribuir-lhe qualquer cor ou transparência:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  A última aba, Estilo do traço, permite configurar a espessura do traço e outros parâmetros deste:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Finalmente, em vez de uma cor lisa, pode-se usar gradientes para preenchimentos e/ou traços:
+ 
+ 
+  
+   
+   
+   
+   
+  
+  
+  
+   
+   
+  
+  
+  
+  
+   
+   
+  
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+  
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Quando se muda de cor lisa para gradiente, o gradiente acabado de criar usará a cor lisa anterior, variando de opaca a transparente. Mude para a ferramenta Gradiente (Ctrl+F1) para arrastar as alças do gradiente. As alças do gradiente são os controlos em forma de pequenos quadrados ligados por 1 linha que definem a direção e extensão do gradiente. Quando qualquer alça do gradiente é selecionada (destacada a azul), o painel Preenchimento e Traço configura a cor dessa alça e não a cor do objeto inteiro selecionado.
+ 
+ 
+ 
+  
+   
+  
+  Uma outra maneira prática de mudar a cor de um objeto é através da ferramenta Pipeta (F7). Basta clicar em qualquer lugar do desenho com esta ferramenta e a cor capturada será atribuída ao preenchimento do objeto selecionado (com Shift+clique atribui a cor do traço).
+ 
+ 
+  Duplicar, alinhar, distribuir
+ 
+ 
+ 
+  
+   
+  
+  Uma das operações mais comuns é duplicar um objeto (Ctrl+D) no menu Editar. O objeto duplicado é colocado exatamente por cima do original e é selecionado apenas o duplicado, para que se possa arrastá-lo com o rato ou as teclas de setas. Para praticar, tente duplicar o seguinte quadrado preto várias vezes, dispondo as cópias umas ao lado das outras em linha:
+ 
+ 
+ 
+ 
+  
+   
+  
+  É provável que as cópias do quadrado sejam colocadas ligeiramente alinhadas. É aqui que o painel Alinhar e Distribuir (Shift+Ctrl+A no menu Objeto) é útil. Selecione todos os quadrados (Shift+clique ou faça uma seleção elástica, à volta de todos eles), abra de seguida o painel Alinhar e Distribuir e clique no botão "Centrar no eixo horizontal" e depois no botão "Distribuir centros à mesma distância na horizontal" (para saber o que cada um dos botões faz, basta posicionar o rato sobre um dos botões e esperar 1 segundo e aparece a descrição do botão). Agora os objetos estão alinhados e distribuídos à mesma distância. Aqui estão outros exemplos de alinhamento e distribuição:
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+  
+   
+   
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Ordem de profundidade (Ordem-Z)
+ 
+ 
+ 
+  
+   
+  
+  O termo ordem-Z refere-se à ordem de empilhamento de objetos uns sobre os outros em altura, ou seja, quais os objetos estão no topo que ocultam os que estão por baixo deles. Os dois comandos no menu Objeto, Subir para o Topo (tecla Home) e Baixar para o Fundo (tecla End), movem os objetos selecionados para a parte mais alta ou mais baixa dos objetos. Os outros dois comandos, Subir (PgUp) e Baixar (PgDn), baixa ou levanta os objetos apenas um nível, ou seja, move para cima ou para baixo de apenas um objeto não selecionado na ordem da pilha (apenas contam os objetos que se sobrepõem uns aos outros, baseado nas respetivas caixas limitadoras).
+ 
+ 
+ 
+  
+   
+  
+  Pratique usando estes comandos alterando a ordem-Z dos objetos presentes abaixo, de forma a que a elipse mais à esquerda fique no topo e a elipse mais à direita fique no fundo:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Uma tecla de atalho muito útil para selecionar é a Tab que se encontra por cima da tecla de maiúsculas. Se não estiver nada selecionado, é selecionado o objeto que está mais no fundo; se estiver algum objeto selecionado, com a tecla Tab é selecionado o objeto logo acima do selecionado na ordem-Z. Shift+Tab funciona de forma contrária, começando a partir do objeto situado no topo e procedendo para baixo. Uma vez que os objetos que se criam são adicionados sucessivamente no topo dos existentes, pressionar Shift+Tab não tendo nada selecionado irá selecionar o último objeto criado. Pratique usando a tecla Tab e Shift+Tab na pilha de elipses acima.
+ 
+ 
+  Selecionar um objeto de baixo e arrastá-lo
+ 
+ 
+ 
+  
+   
+  
+  O que fazer se o objeto que se quer editar está escondido por detrás de outro? Se o objeto por cima for ligeiramente transparente ainda se poderá ver o de baixo, mas clicando sobre ele será selecionado o de cima.
+ 
+ 
+ 
+  
+   
+  
+  É para isto que serve Alt+clique. Usando Alt+clique é selecionado o objeto do topo. No entanto, usando de novo Alt+clique novamente sobre o objeto, será selecionado o objeto que está logo abaixo do que está no topo; o próximo Alt+clique selecionará o objeto mais abaixo a seguir, etc. Assim, com vários Alt+cliques sucessivos navegará, de cima a baixo, através de toda a pilha de objetos na ordem-Z no ponto do clique. Quanto o objeto do fundo é selecionado, o próximo Alt+clique selecionará o objeto do topo novamente.
+ 
+ 
+ 
+  
+   
+  
+  [Se estiver a usar um sistema operativo Linux, notará que Alt+clique não funciona como esperado, pois irá mover a janela do Inkscape. Isto acontece porque o gestor de janelas do sistema operativo Linux reservou as teclas Alt+clique para uma ação diferente. Pode-se corrigir isto na configuração do gestor de janelas do Linux, desativando esta combinação de teclas ou mudando para a tecla Meta (tecla Windows), para que o Inkscape e outras aplicações possam usar a tecla Alt livremente.]
+ 
+ 
+ 
+  
+   
+  
+  Isto é bom, mas após selecionar um objeto por baixo de outro, o que se pode fazer com ele? Pode-se usar as teclas para o transformar, assim como arrastar as alças de transformação à volta do objeto. No entanto, ao tentar arrastar o objeto por baixo do cursor, irá arrastar o de cima (foi para isto que clicar-e-arrastar foi concebido — seleciona primeiro o objeto de cima e depois arrasta a seleção). Para arrastar o que está selecionado sem selecionar mais nada, use Alt+arrastar com o rato. Isto moverá a seleção atual seja qual for a direção do arrasto.
+ 
+ 
+ 
+  
+   
+  
+  Pratique usando Alt+clique e Alt+arrastar com o rato nas 2 estrelas que estão abaixo do retângulo transparente:
+ 
+ 
+ 
+ 
+ 
+  Selecionar objetos similares
+ 
+ 
+ 
+  
+   
+  
+  Pode-se selecionar outros objetos similares ao atualmente selecionado. Por exemplo, se quisermos selecionar todos os quadrados azuis abaixo, primeiro seleciona-se um dos azuis e usa-se o menu Editar > Selecionar Iguais > Cor do Preenchimento. São selecionados todos os objetos com a mesma cor azul no preenchimento.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Para além de se poder selecionar pela mesma cor de preenchimento, pode-se selecionar também objetos similares na cor do traço, estilo do traço, preenchimento e traço, e tipo de objeto.
+ 
+ 
+  Conclusão
+ 
+ 
+ 
+  
+   
+  
+  Isto conclui o tutorial Básico. O Inkscape tem muitas mais funcionalidades, mas com as técnicas descritas aqui, já poderá criar gráficos simples e úteis. Para tópicos mais avançados, leia o tutorial Avançado e os outros em Ajuda > Tutoriais.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-calligraphy.pt.svg b/share/tutorials/tutorial-calligraphy.pt.svg
new file mode 100644
index 000000000..b9f20d6ec
--- /dev/null
+++ b/share/tutorials/tutorial-calligraphy.pt.svg
@@ -0,0 +1,815 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::CALIGRAFIA
+ 
+
+ 
+ 
+  
+   
+  
+  Uma das ferramentas disponíveis no Inkscape é a ferramenta de Caligrafia. Este tutorial ajudará a se familiarizar com o funcionamento desta ferramenta, bem como demonstrar algumas técnicas básicas da arte da Caligrafia.
+ 
+ 
+ 
+  
+   
+  
+  Use Ctrl+setas, roda do meio do rato ou arrastar com o botão do meio do rato para deslocar a visualização da página para baixo. Para ter noções básicas sobre criação, seleção e transformação de objetos, veja o tutorial Básico em Ajuda > Tutoriais.
+ 
+ 
+  História e Estilos
+ 
+ 
+ 
+  
+   
+  
+  Consultando a definição do dicionário, caligrafia significa "escrita bonita" ou "escrita atraente ou elegante". Essencialmente, a caligrafia é a arte de fazer escrita manual de uma maneira bonita ou elegante. Pode parecer intimidador, mas com um pouco de prática, qualquer um pode dominar o básico desta arte.
+ 
+ 
+ 
+  
+   
+  
+  As primeiras formas de caligrafia remontam às pinturas rupestres nas cavernas. Até aproximadamente 1440 d.C., e antes do surgimento da prensa de impressão, a caligrafia era o meio de fabricação de livros e outras publicações. Um escrivão tinha que escrever manualmente cada uma das cópias de cada livro ou publicação. A escrita manual era realizada com uma pena mergulhada em tinta sobre materiais tais como pergaminho ou couro. Os estilos de letra usados através dos tempos incluem o Rústico, Carolíngio, Letra Gótica, etc. Talvez o uso mais comum da caligrafia hoje em dia seja nos convites de casamento.
+ 
+ 
+ 
+  
+   
+  
+  Existem três estilos principais de caligrafia:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Ocidental ou Romana
+ 
+ 
+ 
+ 
+  
+   
+  
+  Arábica
+ 
+ 
+ 
+ 
+  
+   
+  
+  Chinesa ou Oriental
+ 
+ 
+ 
+  
+   
+  
+  Este tutorial concentra-se principalmente na caligrafia Ocidental, enquanto que para os outros dois estilos é necessário o uso de um pincel (em vez de uma caneta-tinteiro), o que não é como a ferramenta Caligrafia do Inkscape funciona atualmente.
+ 
+ 
+ 
+  
+   
+  
+  Uma grande vantagem que temos sobre os escrivãos do passado é o comando Desfazer: se cometermos um erro, não se perde a página inteira. A ferramenta de Caligrafia do Inkscape também permite algumas técnicas que não seriam possíveis com uma caneta a tinta tradicional.
+ 
+ 
+  Dispositivos de entrada
+ 
+ 
+ 
+  
+   
+  
+  Obtêm-se melhores resultados ao usar uma mesa digitalizadora (por exemplo da marca Wacom). Graças à flexibilidade da ferramenta de Caligrafia, mesmo quem dispõe apenas de um rato é capaz de fazer alguns traços caligráficos bastante intrincados, embora se depare com alguma dificuldade ao produzir traços amplos rápidos.
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape é capaz de utilizar a sensibilidade à pressão e a sensibilidade à inclinação de uma mesa digitalizadora que suporte estas características. As funções de sensibilidade estão desativadas por padrão porque elas têm de ser configuradas para cada mesa digitalizadora. Além disso, deve ter-se em conta que o desenho de caligrafia com uma pena ou caneta-tinteiro também não são muito sensíveis a pressão, ao contrário de um pincel.
+ 
+ 
+ 
+  
+   
+  
+  Se tiver uma mesa digitalizadora e quiser utilizar a sensibilidade à pressão, é necessário configurar o dispositivo. Só é necessário fazer esta configuração apenas uma vez. Para ativar a sensibilidade à pressão é preciso primeiro ligar a mesa digitalizadora ao computador antes de iniciar o Inkscape e então abrir o painel Dispositivos de Entrada no menu Editar. Com o painel aberto pode-se escolher o dispositivo e configurações da mesa digitalizadora. Depois de definir estas configurações, mude para a ferramenta de Caligrafia e ative os botões de pressão e inclinação na barra de Controlo da Ferramenta. A partir de agora, o Inkscape lembrar-se-á destas configurações todas as vezes que for iniciado.
+ 
+ 
+ 
+  
+   
+  
+  A ferramenta de caligrafia do Inkscape pode ser sensível à velocidade do traço (ver o capítulo "Estreitamento" mais abaixo), mas se estiver a usar um rato provavelmente vai querer colocar este parâmetro a zero.
+ 
+ 
+  Opções da Ferramenta de Caligrafia
+ 
+ 
+ 
+  
+   
+  
+  Pode-se mudar para a ferramenta de Caligrafia pressionando Ctrl+F6, pressionando a tecla C ou clicando no botão na Barra de Ferramentas. Na barra de Controlos da Ferramenta existem 7 opções: Largura, Estreitamento, Ângulo, Fixação, Pontas, Tremido, Ondulado e Inércia. Também existem 2 botões para ativar e desativar a sensibilidade à pressão e inclinação da caneta (para a mesa digitalizadora).
+ 
+ 
+  Largura e Estreitamento
+ 
+ 
+ 
+  
+   
+  
+  Estas 2 opções controlam a largura da caneta. A largura pode variar de 1 a 100 e (por padrão) é medida em unidades relativas ao tamanho da janela de edição, independente da aproximação da vista. Isto faz sentido, porque a "unidade de medida" natural em caligrafia é o alcance do movimento da mão e é portanto conveniente ter a largura da ponta da caneta em constante proporção em relação ao tamanho da "área de desenho" e não em alguma unidade real a qual poderia depender da aproximação da vista. No entanto este comportamento é opcional, por forma a que este possa ser alterado para quem prefere unidades absolutas qualquer que seja a aproximação da vista. Para mudar para esta configuração, ative a opção "A largura é em unidades absolutas" nas Preferências da ferramenta Caligrafia (pode-se abri-la com clique duplo no botão da ferramenta).
+ 
+ 
+ 
+  
+   
+  
+  Uma vez que a largura da caneta é alterada com frequência, pode-se ajustá-la sem ter que ir à barra Controlos da Ferramenta, usando as teclas seta esquerda e seta direita ou com uma mesa digitalizadora que suporte a função de sensibilidade à pressão. A melhor característica destas teclas é que elas funcionam enquanto se desenha, o que permite mudar a largura da caneta gradualmente no meio do traço:
+ 
+ largura=1 a crescer...                            atingindo 47 e a diminuir...                            para 0
+ 
+ 
+ 
+  
+   
+  
+  A largura do traço da caneta pode também depender da velocidade, controlada pelo parâmetro Estreitamento. Este parâmetro pode ter valores entre -100 e 100; 0 significa que a largura é independente da velocidade, valores positivos fazem traços rápidos mais finos, valores negativos fazem traços rápidos mais amplos. O valor padrão de 10 significa finura moderada de traços rápidos. Aqui estão alguns exemplos, todos desenhados com largura=20 e ângulo=90:
+ 
+ estreitamento = 0 (largura uniforme) 
+ estreitamento = 10
+ estreitamento = 40
+ estreitamento = -20
+ estreitamento = -60
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Por diversão, configure tanto a Largura como o Estreitamento com o valor 100 (máximo) e desenhe com movimentos bruscos para obter formas estranhamente naturais, parecidas com neurónios:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Ângulo e Fixação
+ 
+ 
+ 
+  
+   
+  
+  Depois da largura, o ângulo é o parâmetro mais importante da caligrafia. Consiste no ângulo da caneta em graus, que muda de 0 (horizontal) até 90 (vertical em sentido anti-horário) ou até -90 (vertical em sentido horário). Notar que ativando a sensibilidade à inclinação para a mesa digitalizadora, o parâmetro ângulo é desativado, sendo este determinado pela inclinação da caneta.
+ 
+ 
+  
+   
+  
+  
+   
+  
+ 
+ 
+ 
+ 
+ ângulo = 90 graus
+ ângulo = 30 (padrão)
+ ângulo = 0
+ ângulo = -90 graus
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+ 
+ 
+  
+   
+  
+  Cada estilo tradicional de caligrafia tem seu próprio ângulo prevalecente da caneta. Por exemplo, a caligrafia Uncial usa um ângulo de 25 graus. As caligrafias mais complexas e os calígrafos mais experientes variam com frequência o ângulo enquanto desenham. O Inkscape torna isto possível pressionando as teclas seta para cima e seta para baixo ou com uma mesa digitalizadora que suporte o recurso de sensibilidade à inclinação. Para iniciados em caligrafia, é aconselhável manter o ângulo constante pois funcionará melhor. Seguem-se alguns exemplos de traços desenhados com diferentes ângulos (com fixação = 100):
+ 
+ ângulo = 30
+ ângulo = 60
+ ângulo = 90
+ ângulo = 0
+ ângulo = 15
+ ângulo = -45
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Como se pode observar, o traço é o mais fino possível quando é desenhado paralelo ao seu ângulo e mais grosso quando desenhado na perpendicular. Ângulos positivos são os mais naturais e tradicionais para caligrafia feita com a mão direita.
+ 
+ 
+ 
+  
+   
+  
+  O nível de contraste entre o mais fino e o mais grosso é controlado pelo parâmetro fixação. O valor de 100 significa que o ângulo é sempre constante, como configurado no campo Ângulo. Diminuindo o valor da Fixação ,a caneta roda um pouco contra a direção do traço. Com fixação=0, a caneta roda livremente para ficar sempre perpendicular ao traço e o Ângulo não terá mais efeito:
+ 
+ 
+  
+   
+  
+ 
+ ângulo = 30fixação = 100
+ ângulo = 30fixação = 80
+ ângulo = 30fixação = 0
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  Tipograficamente falando, fixação máxima, e por sua vez, contraste da largura do traço máximo (acima à esquerda) são as características de antigas fontes serifadas, tais como a Times ou Bodoni (porque estas fontes são historicamente uma imitação da caligrafia com caneta fixa). A fixação a zero e contraste da largura também a zero (acima à direita), por outro lado, sugere fontes sem serifas modernas como a Helvetica.
+ 
+ 
+  Tremido
+ 
+ 
+ 
+  
+   
+  
+  Tremido tem como função dar um visual mais natural aos traços caligráficos. O Tremido é ajustável na barra Controlos da Ferramenta com valores que variam de 0 até 100. Isto afeta os traços produzindo coisas como uma leve irregularidade até manchas e marcas violentas. Isto expande significativamente a variedade criativa da ferramenta.
+ 
+ 
+  lento
+  médio
+  rápido
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ tremido = 0
+ tremido = 10
+ tremido = 30
+ tremido = 50
+ tremido = 70
+ tremido = 90
+ tremido = 20
+ tremido = 40
+ tremido = 60
+ tremido = 80
+ tremido = 100
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Ondulado e Inércia
+ 
+ 
+ 
+  
+   
+  
+  Ao contrário da largura e do ângulo, estes dois últimos parâmetros definem como a ferramenta "sente" em vez de afetar a sua saída visual. Por isso não haverá ilustrações nesta secção; em substituição, teste-os para ter uma ideia melhor como funciona.
+ 
+ 
+ 
+  
+   
+  
+  Ondulado é a resistência do papel ao movimento da caneta. O valor padrão está no mínimo (0) e aumentar este parâmetro torna o papel "escorregadio": se a inércia é grande, a caneta tende a fugir em viragens bruscas; se a inércia for 0, um valor alto de Ondulado faz a caneta mover-se violentamente.
+ 
+ 
+ 
+  
+   
+  
+  Em física, massa é o que causa inércia; quanto maior a inércia da ferramenta de caligrafia do Inkscape, maior a demora do traço que segue o cursor do rato e maior é a suavização das viragens bruscas do traço. Por padrão este valor é bastante pequeno (2), o suficiente para que a ferramenta seja rápida e sensível, mas pode-se aumentar a inércia para obter uma caneta mais lenta e suave.
+ 
+ 
+  Exemplos de Caligrafia
+ 
+ 
+ 
+  
+   
+  
+  Agora que conhece as capacidades básicas da ferramenta, pode tentar criar alguma caligrafia. Se é novo nesta arte, adquira um bom livro de caligrafia e estude-o aplicando os conhecimentos no Inkscape. Esta secção mostra apenas alguns exemplos simples.
+ 
+ 
+ 
+  
+   
+  
+  Antes de mais, para fazer letras é necessário criar um par de guias para servirem de orientação. Se quiser escrever uma caligrafia inclinada ou cursiva, acrescente também algumas guias inclinadas através das réguas, por exemplo:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Então aproxime a vista de modo que a altura entre as guias corresponda ao alcance mais natural do movimento da sua mão, ajuste a largura e o ângulo e estará pronto para começar!
+ 
+ 
+ 
+  
+   
+  
+  Provavelmente a primeira coisa que pode fazer como um calígrafo iniciante é praticar os elementos básicos das letras — barras verticais e horizontais, traços redondos e barras inclinadas. Aqui estão alguns elementos das letras da caligrafia Uncial:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Várias dicas úteis:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Se a sua mão está confortável na mesa digitalizadora, não a movimente. Em vez disso, desloque a área de desenho (Ctrl+setas) com a sua mão esquerda depois de terminar cada letra.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Se o seu último traço não foi bom, apenas desfaça-o (Ctrl+Z). Caso a forma tenha ficado boa mas a posição ou tamanho estão ligeiramente diferentes, é melhor usar a ferramenta de Selecionar temporariamente (Barra de espaço) e então mova-a levemente/amplie/rode-a conforme necessário (usando o rato ou o teclado) e depois pressione a tecla Barra de espaço novamente para retornar à ferramenta de Caligrafia.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Após terminar uma palavra, mude para a ferramenta de Selecionar novamente para ajustar a uniformidade das barras e o espaçamento entre as letras. Porém não exagere. Uma boa caligrafia deve conservar um visual manuscrito um pouco irregular. Resista à tentação de copiar as letras e seus elementos, cada traço deve ser original.
+ 
+ 
+ 
+  
+   
+  
+  E aqui estão alguns exemplos completos de letras:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ Caligrafia Uncial
+ Caligrafia Carolíngia
+ Caligrafia Gótica
+ Caligrafia Bastarda
+ 
+ 
+ Caligrafia Itálica Floreada
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Conclusão
+ 
+ 
+ 
+  
+   
+  
+  A caligrafia não é apenas divertida, é uma arte profundamente espiritual que pode transformar a sua visão sobre tudo o que faz e vê. A ferramenta de caligrafia do Inkscape pode servir apenas como uma modesta introdução a esta arte. E ainda assim é muito agradável utilizá-la e pode ser útil na criação de desenhos profissionais. Divirta-se!
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-elements.pt.svg b/share/tutorials/tutorial-elements.pt.svg
new file mode 100644
index 000000000..dbd7cf943
--- /dev/null
+++ b/share/tutorials/tutorial-elements.pt.svg
@@ -0,0 +1,674 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::ELEMENTOS DO DESIGN
+ 
+ 
+ 
+  
+   
+  
+  Este tutorial demonstra os elementos e os princípios do design que são normalmente ensinados a estudantes de arte para entender várias propriedades na criação de obras gráficas. Isto não é uma lista completa, por isso pode acrescentar, retirar e combinar para tornar este tutorial mais abrangente.
+ 
+ 
+ 
+ 
+ Elementos
+ Princípios
+ Cor
+ Linha
+ Forma
+ Espaço
+ Textura
+ Valor
+ Tamanho
+ Equilíbrio
+ Contraste
+ Ênfase
+ Proporção
+ Padrão
+ Gradação
+ Composição
+ Visão geral
+ 
+  Elementos do Design
+ 
+ 
+ 
+  
+   
+  
+  Os elementos seguintes são os pilares do design.
+ 
+ 
+  Linha
+ 
+ 
+ 
+  
+   
+  
+  Uma linha é definida como sendo uma marca com comprimento e direção, criada por um ponto que se move através de uma superfície. Uma linha pode variar em comprimento, espessura, direção, curvatura e cor. A linha pode ser bidimensional (uma linha feita com lápis no papel) ou implicitamente tridimensional.
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+  Forma
+ 
+ 
+ 
+  
+   
+  
+  Uma figura sólida, a forma é criada quando linhas verdadeiras ou implícitas se encontram ao redor de um espaço. Uma mudança na cor ou no sombreado pode definir uma forma. As formas podem ser divididas em vários tipos: geométrica (quadrado, triângulo, círculo) e orgânica (irregular no contorno).
+ 
+ 
+  
+  
+  
+  
+ 
+ 
+  Tamanho
+ 
+ 
+ 
+  
+   
+  
+  Isto refere-se às variações nas proporções de objetos, linhas ou formas. Existe uma variação de tamanhos nos objetos, quer real quer imaginária.
+ 
+ 
+ GRA
+ pequeno
+ 
+  Espaço
+ 
+ 
+ 
+  
+   
+  
+  O espaço é a área vazia ou área aberta entre, ao redor, por cima, por baixo ou dentro dos objetos. As figuras e formas são feitas pelo espaço ao redor e dentro deles. O espaço é geralmente chamado de tridimensional ou bidimensional. O espaço positivo é o que preenche uma figura ou forma. O espaço negativo é o que rodeia uma figura ou forma.
+ 
+ 
+ 
+ 
+ 
+ 
+  Cor
+ 
+ 
+ 
+  
+   
+  
+  A cor é o carácter percecionado de uma superfície de acordo com o comprimento de onda da luz refletida da superfície. A cor tem 3 dimensões: MATIZ (outra palavra para cor, indicada pelo seu nome como vermelho ou amarelo), VALOR (quanto ao claro ou escuro), INTENSIDADE (quanto ao brilho ou fosco).
+ 
+ 
+  
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  Textura
+ 
+ 
+ 
+  
+   
+  
+  A textura é a maneira como se sente uma superfície (textura real) ou como pode ser observada (textura implícita). As texturas são descritas por palavras como por exemplo áspera, sedosa ou granulada.
+ 
+ 
+  
+  
+  
+  
+   
+  
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+  Valor
+ 
+ 
+ 
+  
+   
+  
+  O valor é quanto se vê algo como escuro ou claro. Realizam-se mudanças de valor na cor adicionando preto ou branco a esta. Por exemplo, a técnica tradicional chiaroscuro da pintura utiliza o alto contraste das luzes e sombras numa composição.
+ 
+ 
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Princípios do Design
+ 
+ 
+ 
+  
+   
+  
+  Os princípios usam os elementos do design para criar uma composição.
+ 
+ 
+  Equilíbrio
+ 
+ 
+ 
+  
+   
+  
+  O equilíbrio é um sentido de igualdade visual numa forma, figura, valor, cor, etc. O equilíbrio pode ser simétrico ou uniformemente equilibrado ou assimétrico e não uniformemente equilibrado. Os objetos, valores, cores, texturas, formas, figuras, etc. podem ser usados para criar um equilíbrio numa composição.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Contraste
+ 
+ 
+ 
+  
+   
+  
+  O contraste é a justaposição de elementos opostos.
+ 
+ 
+ 
+ 
+ 
+ 
+  Ênfase
+ 
+ 
+ 
+  
+   
+  
+  A ênfase é usada para destacar certas partes do trabalho artístico e chamar a atenção do observador. O centro de interesse ou ponto de foco é o lugar para onde se olha primeiro.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Proporção
+ 
+ 
+ 
+  
+   
+  
+  A proporção descreve o tamanho, posição ou quantidade de uma coisa comparada à outra.
+ 
+ 
+  
+   
+   
+  
+  
+   
+   
+   
+  
+  
+   
+   
+   
+  
+  
+   
+   
+   
+  
+  
+   
+   
+   
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+   
+   
+  
+  
+  
+  
+  
+  
+  
+  
+   
+   
+   
+  
+  
+ 
+ 
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+ 
+ Random Ant e 4WD
+ Imagem SVG criada por Andrew FitzsimonCortesia da Open Clip Art Libraryhttp://www.openclipart.org/
+ 
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+ 
+ 
+  Padrão
+ 
+ 
+ 
+  
+   
+  
+  O padrão é criado repetindo-se um elemento (linha, forma ou cor) várias vezes.
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+  Gradação
+ 
+ 
+ 
+  
+   
+  
+  A gradação de tamanho e direção produz uma perspetiva linear. A gradação de cores de quente para frio e tons escuros para claros produzem uma perspetiva aérea. A gradação pode adicionar interesse e movimento a uma forma. Uma gradação do escuro para o claro fará o olho movimentar-se ao longo de uma forma.
+ 
+ 
+  
+   
+   
+  
+  
+  
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Composição
+ 
+ 
+ 
+  
+   
+  
+  A combinação de elementos distintos para formar um todo.
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+   
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+  
+  
+  
+  
+  
+   
+   
+   
+  
+  
+   
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+  
+  
+  
+ 
+ 
+ 
+  Bibliografia
+ 
+ 
+ 
+  
+   
+  
+  Isto é uma bibliografia parcial utilizada na concepção este documento.
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://www.makart.com/resources/artclass/EPlist.html
+
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://www.princetonol.com/groups/iad/Files/elements2.htm
+
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://www.johnlovett.com/test.htm
+
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://digital-web.com/articles/elements_of_design/
+
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://digital-web.com/articles/principles_of_design/
+
+ 
+ 
+ 
+  
+   
+  
+  Agradecimentos especiais para Linda Kim (http://www.coroflot.com/redlucite/) por me ajudar (http://www.rejon.org/) neste tutorial. Agradecimentos também ao Open Clip Art Library (http://www.openclipart.org/) e para os artistas gráficos que têm contribuído para esse projeto.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-interpolate.pt.svg b/share/tutorials/tutorial-interpolate.pt.svg
new file mode 100644
index 000000000..db23f824c
--- /dev/null
+++ b/share/tutorials/tutorial-interpolate.pt.svg
@@ -0,0 +1,594 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::INTERPOLAR
+ 
+
+ 
+ 
+  
+   
+  
+  Este tutorial explica como usar a extensão Interpolar do Inkscape
+ 
+ 
+  Introdução
+ 
+ 
+ 
+  
+   
+  
+  A extensão Interpolar faz a interpolação linear entre 2 ou mais caminhos selecionados. Basicamente significa que "preenche os espaços" entre os caminhos e os transforma de acordo com o número de passos dados.
+ 
+ 
+ 
+  
+   
+  
+  Para usar a extensão Interpolar, selecione os caminhos que deseja transformar e aceda ao menu Extensões > Gerar do Caminho > Interpolar.
+ 
+ 
+ 
+  
+   
+  
+  Antes de usar esta extensão, os objetos que serão transformados têm de ser caminhos. Isto é feito pela seleção do objeto e usando Caminho >  Converter Objeto num Caminho ou Shift+Ctrl+C. Se os objetos não forem caminhos antes de aplicar a extensão, não terá efeito nenhum neles.
+ 
+ 
+  Interpolação entre 2 caminhos idênticos
+ 
+ 
+ 
+  
+   
+  
+  O uso mais simples da extensão Interpolar é para interpolar entre 2 caminhos que sejam idênticos. Quando a extensão é utilizada, resulta no espaço entre os 2 caminhos que é preenchido com duplicados dos caminhos originais. O número de passos define quantos destes caminhos duplicados serão criados.
+ 
+ 
+ 
+  
+   
+  
+  Por exemplo, veja os seguintes 2 caminhos:
+ 
+ 
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  Agora, selecione os 2 caminhos e execute a extensão Interpolar com as configurações mostradas na seguinte imagem.
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicar caminhos finais: desativadoEstilo de interpolação: desativado
+ 
+ 
+ 
+  
+   
+  
+  Como pode ser visto no resultado acima, o espaço entre os 2 caminhos de forma circular foi preenchido com 6 (o número de passos de interpolação) outros caminhos circulares. Note também que a extensão agrupa todas estas formas geométricas.
+ 
+ 
+  Interpolação entre 2 caminhos diferentes
+ 
+ 
+ 
+  
+   
+  
+  Quando a interpolação é feita em 2 caminhos diferentes, o programa interpola a forma de um caminho para o outro. O que resulta numa sequência de caminhos de fusão entre ambos os caminhos iniciais, com a regularidade ainda definida pelo valor dos Passos de Interpolação.
+ 
+ 
+ 
+  
+   
+  
+  Por exemplo, veja os seguintes 2 caminhos:
+ 
+ 
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  Agora selecione os 2 caminhos e execute a extensão Interpolar. O resultado deve ser algo como:
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+   
+  
+  
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicar caminhos finais: desativadoEstilo de interpolação: desativado
+ 
+ 
+ 
+  
+   
+  
+  Como se pode ver pelo resultado acima, o espaço entre o caminho com a forma de círculo e a forma de triângulo foi preenchido com 6 caminhos que fazem a gradação entre uma forma e a outra.
+ 
+ 
+ 
+  
+   
+  
+  Ao usar a extensão Interpolar em 2 caminhos diferentes, a posição do nó inicial de cada caminho é importante. Para encontrar o nó inicial de cada caminho, selecione o caminho, depois selecione a Ferramenta de Nó para que os nós sejam mostrados e pressione a tecla TAB. O primeiro nó destacado é o primeiro nó do caminho.
+ 
+ 
+ 
+  
+   
+  
+  A imagem abaixo é idêntica ao exemplo anterior, exceto nos pontos de nós mostrados. O nó verde de cada caminho é o nó inicial.
+ 
+ 
+  
+  
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  O exemplo anterior (mostrado de novo em baixo) foi feito com estes nós como pontos iniciais.
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+   
+  
+  
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicar caminhos finais: desativadoEstilo de interpolação: desativado
+ 
+ 
+ 
+  
+   
+  
+  Agora note a mudança no resultado da interpolação quando o caminho triangular é espelhado para que o nó inicial esteja numa posição diferente:
+ 
+ 
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+  Método de Interpolação
+ 
+ 
+ 
+  
+   
+  
+  Um dos parâmetros da extensão de Interpolação é o Método de Interpolação. Existem 2 métodos de interpolação implementados, que diferem no modo em que calculam as curvas de novas formas geométricas. As opções disponíveis são o Método de Interpolação 1 ou 2.
+ 
+ 
+ 
+  
+   
+  
+  Nos exemplos acima, foi usado o Método de Interpolação 2 o que resulta em:
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+   
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  E com o Método de Interpolação 1 resulta em:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  As diferenças entre estes dois métodos encontra-se no cálculo os números e está para além do âmbito deste tutorial, por isso experimente ambos e use aquele que fornecer o resultado mais próximo que pretende.
+ 
+ 
+  Expoente
+ 
+ 
+ 
+  
+   
+  
+  O parâmetro expoente controla o espaçamento entre os passos da interpolação. Um expoente de 0 faz com que o espaçamento entre as cópias seja igual.
+ 
+ 
+ 
+  
+   
+  
+  Aqui está o resultado de outro exemplo básico com expoente de 0.
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicar caminhos finais: desativadoEstilo de interpolação: desativado
+ 
+ 
+ 
+  
+   
+  
+  O mesmo exemplo com o expoente de 1:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  com um expoente de 2:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  e com expoente de -1:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  Quando lidar com expoentes na extensão de Interpolação, a ordem de seleção dos objetos é importante. No exemplo acima, o caminho em forma de estrela da esquerda foi selecionado primeiro e o caminho de forma hexagonal na direita foi selecionado depois.
+ 
+ 
+ 
+  
+   
+  
+  Veja o resultado quando o caminho da direita foi selecionado primeiro. O expoente deste exemplo é 1:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+  Duplicar Caminhos Finais
+ 
+ 
+ 
+  
+   
+  
+  Este parâmetro define se o grupo de caminhos gerados pela extensão inclui uma cópia dos caminhos originais nos quais a interpolação foi aplicada.
+ 
+ 
+  Estilo de Interpolação
+ 
+ 
+ 
+  
+   
+  
+  Este parâmetro é uma das funções mais elegantes da extensão de interpolação. Este indica à extensão para tentar mudar o estilo dos caminhos a cada passo. Desta forma, se os caminhos do começo e do fim tiverem cores diferentes, os caminhos gerados também mudarão de cor de forma incremental.
+ 
+ 
+ 
+  
+   
+  
+  Aqui está um exemplo onde a função de Estilo de interpolação é usada no preenchimento de um caminho:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  O Estilo de Interpolação também afeta o traço de um caminho:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  Claro que, o caminho do ponto inicial e do ponto final também não precisam ser os mesmos:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+  
+  
+  
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+  Usando a Interpolação para simular gradientes de forma irregular
+ 
+ 
+ 
+  
+   
+  
+  Ainda não é possível criar no Inkscape um gradiente diferente que não seja o linear (linha reta) ou radial (redondo). No entanto, isto pode ser simulado usando a extensão de Interpolar e o Estilo de Interpolação. Segue-se um exemplo simples — desenhe 2 linhas de diferentes espessuras:
+ 
+ 
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  E faça a interpolação entre as 2 linhas para criar o gradiente:
+ 
+ 
+  
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+  Conclusão
+ 
+ 
+ 
+  
+   
+  
+  Como demonstrado acima, a extensão Interpolar do Inkscape é uma ferramenta poderosa. Este tutorial cobre o básico desta extensão, entretanto o experimentar é a chave para explorar a interpolação ainda mais.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-shapes.pt.svg b/share/tutorials/tutorial-shapes.pt.svg
new file mode 100644
index 000000000..886b16851
--- /dev/null
+++ b/share/tutorials/tutorial-shapes.pt.svg
@@ -0,0 +1,1097 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::FORMAS
+ 
+
+ 
+ 
+  
+   
+  
+  Este tutorial aborda as 4 ferramentas de formas geométricas: Retângulo, Círculo, Estrela e Polígono, Espiral. Veremos as capacidades das formas geométricas do Inkscape e sugerir exemplos de como e quando podem ser usados.
+ 
+ 
+ 
+  
+   
+  
+  Use Ctrl+setas, a roda do meio do rato, ou arrastar com clique do botão do meio do rato para deslocar a visualização da página para baixo. Para informações sobre sobre criação, seleção e transformação de objetos, ver o tutorial Básico em Ajuda > Tutoriais.
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape tem 4 ferramentas de formas geométricas versáteis, cada uma delas permite criar e editar os seus próprios tipos de formas. Uma forma geométrica é um objeto que pode ser alterado de formas únicas dependendo do tipo, usando as alças e parâmetros numéricos que determinam a sua aparência.
+ 
+ 
+ 
+  
+   
+  
+  Por exemplo, numa estrela é possível alterar o número de pontas, o seu comprimento, ângulo, arredondamento, etc. — mas uma estrela continua a ser uma estrela. Uma forma é "menos livre" que um caminho, mas permite outras transformações. É sempre possível converter uma forma geométrica num caminho (Ctrl+Shift+C), mas um caminho numa forma não.
+ 
+ 
+ 
+  
+   
+  
+  As ferramentas de forma são Retângulo, Círculo, Estrela e Polígono, e Espiral. Primeiro vamos ver como funcionam as ferramentas de formas geométricas; depois exploraremos cada uma delas em pormenor.
+ 
+ 
+  Dicas gerais
+ 
+ 
+ 
+  
+   
+  
+  É criada uma nova forma ao arrastar sobre a área de desenho com a respetiva ferramenta. Após a forma ser criada (desde que esteja selecionada), são mostradas vários tipos de alças, em forma de diamante, quadrado ou redondo (dependendo da ferramenta de forma geométrica), assim pode-se alterar a forma geométrica mexendo nessas alças.
+ 
+ 
+ 
+  
+   
+  
+  Todos os quatro tipos de formas geométricas mostram as suas alças assim como na ferramenta de edição de nós (F2). Quando se passa com o rato sobre uma alça, aparece na Barra de Estado (zona inferior do ecrã) a descrição do que essa alça permite alterar.
+ 
+ 
+ 
+  
+   
+  
+  Além disso, cada ferramenta de forma geométrica mostra os seus parâmetros na barraControlos da Ferramenta (logo acima da área de desenho). Geralmente esta barra tem alguns campos numéricos e um botão para repor os valores padrão, além de outros). Quando é selecionada a forma do tipo nativo da ferramenta atual, ao editar os seus valores na barra de Controlos de Ferramenta a forma é alterada.
+ 
+ 
+ 
+  
+   
+  
+  Qualquer alteração feita na barra Controlos da Ferramenta será gravada e utilizada no próximo objeto que for criado com a mesma ferramenta. Por exemplo, depois de alterar o número de pontas de uma estrela, as novas estrelas criadas terão o mesmo número de pontas. Além disso, mesmo selecionando simplesmente uma forma geométrica, os seus parâmetros são enviados para a barra de Controlos da Ferramenta e por isso, define por si só os parâmetros para novas forma geométricas criadas.
+ 
+ 
+ 
+  
+   
+  
+  Com uma das ferramentas de formas geométricas ativada, pode-se selecionar um objeto clicando nele. Ctrl+clique (seleção em grupo) e Alt+clique (selecionar objeto por baixo) também funciona como na ferramenta de Selecionar. Esc desfaz a seleção.
+ 
+ 
+  Retângulos
+ 
+ 
+ 
+  
+   
+  
+  Um retângulo é a mais simples e talvez a forma mais comum em design e ilustração. O Inkscape tenta tornar o processo de criação e edição de retângulos o mais fácil e prático possível.
+ 
+ 
+ 
+  
+   
+  
+  Mude para a ferramenta Retângulo com a tecla F4 ou clicando no botão correspondente na Caixa de Ferramentas. Desenhe um novo retângulo ao lado deste azul:
+ 
+ desenhe aqui
+ 
+ 
+ 
+  
+   
+  
+  Depois, sem sair da ferramenta Retângulo, mude a seleção de um retângulo para a seleção de outro clicando sobre eles.
+ 
+ 
+ 
+  
+   
+  
+  Teclas de atalho para desenho de retângulos:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Com Ctrl, desenhe um quadrado ou um retângulo de proporção inteira (2:1, 3:1, etc).
+ 
+ 
+ 
+ 
+  
+   
+  
+  Com Shift, desenha tendo como ponto de partida o centro.
+ 
+ 
+ 
+  
+   
+  
+  Como se pode ver, o retângulo selecionado (o retângulo acabado de criar é selecionado automaticamente) mostra 3 alças em 3 dos seus cantos. Na verdade são 4 alças, mas 2 delas (no canto superior direito) sobrepõem-se caso o retângulo não tenha cantos arredondados. Estas 2 alças são as alças de arredondamento; as outras 2 (acima à esquerda e abaixo à direita) são as alças de redimensionamento.
+ 
+ 
+ 
+  
+   
+  
+  Vamos dar uma olhada nas alças de arredondamento primeiro. Agarre uma delas e arraste para baixo. Todos os 4 cantos do retângulo ficam arredondados e vê-se a segunda alça de arredondamento — ela permanece na posição original, no canto. Caso se queira os cantos arredondados simetricamente, é tudo o que se necessita de fazer. Para fazer cantos não simétricos, move-se a outra alça do canto.
+ 
+ 
+ 
+  
+   
+  
+  Aqui os 2 primeiros retângulos têm cantos arredondados circulares e os outros dois têm cantos arredondados elípticos:
+ 
+ Cantos arredondados elípticos
+ Cantos arredondados circulares
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Ainda na ferramenta Retângulo, clique nestes retângulos para selecioná-los e repare nas alças de arredondamento.
+ 
+ 
+ 
+  
+   
+  
+  Na maioria das vezes, o raio e forma dos cantos arredondados têm de ser constantes dentro de toda a composição, mesmo que os tamanhos dos retângulos sejam diferentes (imagine como se fossem diagramas com caixas arredondadas de vários tamanhos). O Inkscape torna esta operação fácil. Mude para a ferramenta de Selecionar; na barra de Controlos da Ferramenta, existe um grupo de 4 botões do lado direito, o segundo a contar da esquerda, mostra 2 linhas arredondadas. Com este botão ativado, o tamanho do raio dos cantos é proporcional ao tamanho do retângulo caso se altere o tamanho do retângulo.
+ 
+ 
+ 
+  
+   
+  
+  Por exemplo, na imagem seguinte o retângulo vermelho original foi duplicado e ampliado várias vezes, para cima e para baixo, em diferentes proporções, com o botão "Ao redimensionar retângulos, redimensionar também o raio dos cantos arredondados" desativado:
+ 
+ Dimensionando retângulos com cantos arredondados com "Dimensionar cantos arredondados em retângulos" DESATIVADO
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Repare como o tamanho e a forma dos cantos arredondados são os mesmos em todos os retângulos, de tal maneira que os arredondamentos alinham-se exatamente no canto superior direito onde todos eles se encontram. Todos os retângulos azuis pontilhados foram obtidos a partir do retângulo vermelho original, apenas ampliando-o com a ferramenta de Selecionar, sem qualquer alteração manual das alças de arredondamento.
+ 
+ 
+ 
+  
+   
+  
+  Para uma comparação, eis de seguida a mesma composição mas agora criada com o mesmo botão "Ao redimensionar retângulos, redimensionar também o raio dos cantos arredondados" ativado:
+ 
+ Dimensionando retângulos com cantos arredondados com "Dimensionar cantos arredondados em retângulos" ATIVADO
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Agora os cantos arredondados estão tão diferentes quanto os retângulos aos quais pertencem, não havendo um mínimo encontro no canto superior direito (aproxime com a Lupa para ver). Este é o mesmo resultado (visível) que se obteria convertendo o retângulo original num caminho (Ctrl+Shift+C) e alterando o seu tamanho como um caminho.
+ 
+ 
+ 
+  
+   
+  
+  As teclas de atalho para as alças de arredondamento de um retângulo são:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Arrastar um alça com Ctrl para igualar os raios (arredondamento circular, simétrico).
+ 
+ 
+ 
+ 
+  
+   
+  
+  Ctrl+clique na alça para igualar um raio ao outro sem arrastá-las.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Shift+clique na alça para remover o arredondamento.
+ 
+ 
+ 
+  
+   
+  
+  Notar que a barra de Controlos da ferramenta Retângulo mostra os raios de arredondamento horizontal (Rx) e vertical (Ry) para o retângulo selecionado e permite configurá-los precisamente em qualquer unidade de medida. O botão Tornar cantos agudos (o último) remove o arredondamento dos retângulos selecionados.
+ 
+ 
+ 
+  
+   
+  
+  Uma vantagem importante destes controlos é que eles podem afetar muitos retângulos de uma só vez. Por exemplo, para alterar todos os retângulos na camada, basta usar Ctrl+A (Selecionar Tudo) e configurar os parâmetros necessários na barra de Controlos da Ferramenta. Se houver algum objeto selecionado que não seja um retângulo, este será ignorado — apenas serão afetados os retângulos.
+ 
+ 
+ 
+  
+   
+  
+  Agora vamos ver as alças de redimensionamento de um retângulo. Podemos colocar a questão: qual a necessidade, se podemos simplesmente redimensionar o retângulo com a ferramenta de Selecionar?
+ 
+ 
+ 
+  
+   
+  
+  O problema com a ferramenta de Selecionar é que a sua noção de horizontal e vertical é sempre a mesma da página do documento. De forma diferente, uma alça de redimensionamento de um retângulo aumenta-o ao longo dos seus lados, mesmo que o retângulo seja rodado ou distorcido. Por exemplo, tente redimensionar este retângulo primeiro com a ferramenta de Selecionar e depois com as alças de redimensionamento da ferramenta Retângulo:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Uma vez que as alças de redimensionamento são 2, pode-se redimensionar o retângulo em qualquer direção ou mesmo movê-lo ao longo dos seus lados. Estas alças preservam sempre os raios de arredondamento.
+ 
+ 
+ 
+  
+   
+  
+  As teclas de atalho para as alças de redimensionamento são:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Arrastar com Ctrl para mover rapidamente para os lados ou na diagonal do retângulo. Em outras palavras, Ctrl preserva ou a largura ou a altura ou a proporção largura/altura do retângulo (novamente, no seu próprio sistema de coordenadas que permite ser rodado ou distorcido).
+ 
+ 
+ 
+  
+   
+  
+  Aqui está o mesmo retângulo rodeado por linhas pontilhadas cinza indicando as direções para as quais se pode mover o retângulo quando arrastado com Ctrl (tente agora):
+ 
+ 
+  
+  
+  
+  
+  
+ 
+ 
+ Atração do retângulo - redimensionar alças com Ctrl
+ 
+ 
+  
+   
+  
+  Inclinando e rodando um retângulo, depois duplicando-o e redimensionando-o com as alças de redimensionamento, podem ser criadas facilmente composições 3D:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 3 retângulos originais
+ Vários retângulos copiados e redimensionados pelas alças, a maioria com Ctrl
+ 
+ 
+  
+   
+  
+  Aqui estão alguns exemplos adicionais de composições de retângulos, incluindo arredondamentos e preenchimento com gradientes:
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+  
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+  
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Círculos e Elipses
+ 
+ 
+ 
+  
+   
+  
+  A ferramenta Círculo (F5) permite criar elipses e círculos, os quais se podem transformar em segmentos ou arcos destes. As teclas de atalho de desenho de círculos são as mesmas que as da ferramenta Retângulo:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Com Ctrl, cria-se um círculo ou uma elipse de proporção inteira (2:1, 3:1, etc.).
+ 
+ 
+ 
+ 
+  
+   
+  
+  Com Shift, desenha tendo como ponto de partida o centro.
+ 
+ 
+ 
+  
+   
+  
+  Vamos explorar agora as alças de uma elipse. Selecione a seguinte:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Mais uma vez, pode-se ver 3 alças inicialmente, mas na verdade são 4. A alça localizada mais à direita em cima é composta por 2 alças que se sobrepõem e que permitem "abrir" a elipse. Arraste esta alça, depois arraste a outra alça que ficou visível para obter uma variedade de segmentos em forma de rodela de queijo ou arcos:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Para obter um segmento (um arco fechado com 2 raios), arraste para fora da elipse; para criar apenas um arco, arraste para dentro dela. Acima, existem 4 segmentos à esquerda e 3 arcos à direita. Notar que os arcos são formas abertas, ou seja, o traço apenas avança através da elipse mas não liga as extremidades do arco. Pode-se tornar isto óbvio removendo-se o preenchimento, deixando apenas o traço:
+ 
+ 
+  
+  
+  
+  15
+  
+ 
+ Segmentos
+ Arcos
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Observe o grupo de segmentos estreitos em forma de leque à esquerda. Foi fácil criá-los usando o atração ao ângulo da alça com Ctrl. As teclas de atalho de arcos/segmentos são:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Com Ctrl, atrai ao ângulo a cada 15 graus ao arrastar.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Shift+clique para completar a elipse (não um arco nem segmento).
+ 
+ 
+ 
+  
+   
+  
+  A atração ao ângulo pode ser alterada nas Preferências do Inkscape (em Comportamento > Passos).
+ 
+ 
+ 
+  
+   
+  
+  As outras 2 alças da elipse são usadas para redimensioná-la ao redor do centro. As teclas de atalho são similares às das alças de arredondamento de um retângulo:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Arrastar com Ctrl para fazer um círculo (iguala os 2 raios).
+ 
+ 
+ 
+ 
+  
+   
+  
+  Ctrl+clique para fazer um círculo sem arrastar.
+ 
+ 
+ 
+  
+   
+  
+  E tal como as alças de redimensionamento do retângulo, estas alças da elipse ajustam a altura e largura da elipse nas suas próprias coordenadas. Isto significa que uma elipse rodada ou distorcida pode ser facilmente esticada ou comprimida ao longo de seus eixos originais enquanto permanece rodada ou distorcida. Tente redimensionar qualquer uma destas elipses através das alças de redimensionamento:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Polígonos e Estrelas
+ 
+ 
+ 
+  
+   
+  
+  OS polígonos e as estrelas são as formas geométricas mais complexas do Inkscape. Se quiser impressionar seus amigos com o Inkscape, deixe-os brincar com esta ferramenta. É divertido — na verdade é viciante!
+ 
+ 
+ 
+  
+   
+  
+  A ferramenta Polígonos pode criar 2 objetos similares mas de diferentes tipos: polígonos e estrelas. Uma estrela tem 2 alças cujas posições definem a extensão e forma das suas pontas; um polígono tem apenas 1 alça que simplesmente roda e redimensiona-o quando é arrastada:
+ 
+ 
+  
+  Estrela
+ 
+ 
+  
+  Polígono
+ 
+ 
+ 
+  
+   
+  
+  Na barra de Controlos da ferramenta Polígonos, primeiro aparecem 2 botões para transformar uma estrela num polígono e vice-versa. Depois, um campo numérico onde se configura o número de cantos de uma estrela ou polígono. Este parâmetro é apenas editável através da barra de Controlos da Ferramenta e pode variar de 3 a 1024, mas não se deve aplicar um número alto (por exemplo, acima de 200) se o computador for lento.
+ 
+ 
+ 
+  
+   
+  
+  Ao desenhar uma nova estrela ou polígono,
+ 
+ 
+ 
+ 
+  
+   
+  
+  Arraste com Ctrl para atrair ao ângulo em incrementos de 15 graus.
+ 
+ 
+ 
+  
+   
+  
+  Naturalmente, uma estrela é uma forma muito mais interessante (embora os polígonos sejam mais úteis na prática). As 2 alças de uma estrela têm funções ligeiramente diferentes. A primeira alça (inicialmente localizada em 1 vértice, ou seja, num canto convexo da estrela) diminui ou aumenta os raios da estrela, mas quando se roda com esta alça (relativamente ao centro da forma), a outra alça roda em conformidade com esta. Isto significa que não se pode distorcer os raios da estrela com esta alça.
+ 
+ 
+ 
+  
+   
+  
+  A outra alça (inicialmente localizada num canto côncavo entre 2 cantos) é, por outro lado, livre para se mover tanto radialmente quanto tangencialmente, sem afetar a alça do canto. Na verdade, esta alça pode se tornar por si própria um canto movendo-a para mais longe do centro que a outra alça. Esta sim é a alça que pode distorcer as pontas das estrelas para obter todos os tipos de formas que se assemelham a cristais, mandalas, flocos de neve e porcos-espinho:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Se pretender apenas uma estrela simples sem qualquer decoração, é possível fazer com que a alça que distorce a estrela se comporte como a outra, que não distorce:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Arraste com Ctrl para manter os raios da estrela estritamente radiais (sem distorção).
+ 
+ 
+ 
+ 
+  
+   
+  
+  Ctrl+clique para remover a distorção sem arrastar.
+ 
+ 
+ 
+  
+   
+  
+  Como complemento útil para o arrastar de alças sobre a área de desenho, a barra de Controlos da Ferramenta tem o campo Proporção do raio que define a proporção das distâncias das 2 alças até ao centro.
+ 
+ 
+ 
+  
+   
+  
+  As estrelas no Inkscape têm mais dois truques na manga. Em geometria, um polígono é uma forma com bordas em linha reta e cantos pontiagudos. No mundo real, no entanto, estão normalmente presentes vários níveis de curvatura e arredondamento — e o Inkscape pode fazer isso também. Arredondar uma estrela ou polígono funciona de forma um pouco diferente de arredondar um retângulo. Não se usa uma alça dedicada para isto, mas sim:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Shift+arrastar uma alça tangencialmente para arredondar a estrela ou polígono.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Shift+clique sobre uma alça para remover o arredondamento.
+ 
+ 
+ 
+  
+   
+  
+  "Tangencialmente" significa numa direção perpendicular à direção do centro. Se "rodar" uma alça com Shift no sentido anti-horário ao redor do centro, obterá arredondamento positivo; se rodar no sentido horário, obterá um arredondamento negativo (ver exemplos a seguir de arredondamento negativo).
+ 
+ 
+ 
+  
+   
+  
+  Aqui está uma comparação de um quadrado arredondado (ferramenta Retângulo) com um polígono de 4 cantos arredondados (ferramenta Polígono):
+ 
+ 
+  
+  Polígono arredondado
+ 
+ 
+  
+  Retângulo arredondado
+ 
+ 
+ 
+  
+   
+  
+  Como se pode ver, enquanto um retângulo arredondado tem segmentos de linha reta nos seus lados e nos arredondamentos circulares (geralmente elípticos), um polígono ou estrela arredondada não tem nenhuma linha reta; a sua curvatura varia suavemente entre um máximo (nos cantos) e um mínimo (na metade da distância entre os cantos). O Inkscape faz isto simplesmente adicionando tangentes Bézier colineares em cada nó da forma (pode-se observá-los convertendo a forma geométrica num caminho e examinar com a ferramenta Nó).
+ 
+ 
+ 
+  
+   
+  
+  O parâmetro Arredondado que se pode ajustar na barra de Controlos da Ferramenta é a proporção do comprimento destas tangentes em relação ao comprimento dos cantos do polígono ou estrela aos quais elas são adjacentes. Este parâmetro pode assumir valores negativos, o que inverte a direção das tangentes. Os valores entre 0,2 e 0,4 resultam num arredondamento "normal" como esperado; outros valores tendem a produzir padrões belos, intrincados e totalmente imprevisíveis. Uma estrela com um valor alto de arredondamento pode exceder os limites determinados para as alças. Seguem-se alguns exemplos, cada um indicando o valor utilizado no campo Arredondado:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 0,25
+ 0,25
+ 0,25
+ 0,37
+ 
+ 0,43
+ 3,00
+ -3,00
+ 
+ 0,41
+ 5,43
+ 1,85
+ 0,21
+ -3,00
+ 
+ -0,43
+ 
+ -8,94
+ 
+ 0,39
+ 
+ 
+  
+   
+  
+  Se quiser que as pontas de uma estrela sejam pontiagudas mas suas concavidades sejam suaves ou vice-versa, basta criar um deslocamento (Ctrl+J) a partir da estrela:
+ 
+ 
+ 
+ 
+ Estrela original
+ Deslocamento ligado, dentro
+ Deslocamento ligado, fora
+ 
+ 
+  
+   
+  
+  Com Shift+arrastar as alças da estrela pode-se criar formas interessantes e fora do vulgar. Mas ainda podem ser melhoradas.
+ 
+ 
+ 
+  
+   
+  
+  Para imitar melhor as formas do mundo real, o Inkscape pode tornar Aleatórias (em outras palavras, distorção aleatória) as formas das estrelas e polígonos. Uma ligeira distorção aleatória deixa a estrela menos regular, mais humana, geralmente engraçada; já uma distorção alta é uma maneira de obter uma variedade de formas imprevisíveis. Uma estrela arredondada permanece suavemente arredondada quando distorcida aleatoriamente. As teclas de atalho são:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Alt+arrastar uma alça tangencialmente para distorcer aleatoriamente a estrela ou polígono.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Alt+clicar sobre uma alça para remover a distorção aleatória.
+ 
+ 
+ 
+  
+   
+  
+  Enquanto se desenha ou arrasta a alça de uma estrela distorcida aleatoriamente, ela irá "tremer" porque cada posição única das suas alças correspondem à sua própria distorção aleatória única. Assim, movendo uma alça sem a tecla Alt, a forma será distorcida novamente com o mesmo nível de aleatoriedade, enquanto que arrastando-a com Alt mantém-se a mesma distorção mas o nível é ajustado. Seguem-se alguns exemplos de estrelas cujos parâmetros são exatamente os mesmos, mas cada uma é distorcida novamente com movimentos muito suaves da alça (o valor do campo Aleatório é 0,1 em todas elas):
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Agora seguem-se alguns exemplos com base na estrela do meio nos exemplos anteriores, com o nível de distorção aleatória variando entre -0,2 e 0,2:
+ 
+ +0,2
+ +0,1
+ 0
+ -0,1
+ -0,2
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Alt+arraste uma alça da estrela do meio nesta linha e observe como ela se transforma nas suas vizinhas da direita e da esquerda — e para além disso.
+ 
+ 
+ 
+  
+   
+  
+  Provavelmente vai achar as suas próprias aplicações para estrelas distorcidas aleatoriamente. Segue-se um exemplo de uma composição com manchas arredondadas e grandes planetas irregulares com paisagens fantásticas:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Espirais
+ 
+ 
+ 
+  
+   
+  
+  A espiral do Inkscape é uma ferramenta versátil, embora não tão cativantes como a estrela, ela pode ser por vezes muito útil. Uma espiral, assim como uma estrela, é desenhada a partir do centro. Enquanto é desenhada e editada:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Ctrl+arraste para atrair ao ângulo com incrementos de 15 graus.
+ 
+ 
+ 
+  
+   
+  
+  Uma vez desenhada, uma espiral apresenta 2 alças nas suas extremidades: interna e externa. Ambas as alças, quando simplesmente arrastadas, enrolam ou desenrolam a espiral (isto é, dá "continuidade" à espiral, mudando o número de voltas). Outras teclas de atalho:
+ 
+ 
+ 
+  
+   
+  
+  Na alça externa:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Shift+arraste para ampliar/rodar ao redor do centro (sem enrolar/desenrolar).
+ 
+ 
+ 
+ 
+  
+   
+  
+  Alt+arraste para manter o raio enquanto se enrola/desenrola.
+ 
+ 
+ 
+  
+   
+  
+  Na alça interna:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Alt+arraste verticalmente para convergir/divergir a espiral.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Alt+clique para repor a divergência no valor padrão.
+ 
+ 
+ 
+ 
+  
+   
+  
+  Shift+clique para mover a alça interna para o centro.
+ 
+ 
+ 
+  
+   
+  
+  A divergência de uma espiral é a medida não linear das suas revoluções. Quando é igual a 1, a espiral é uniforme; quando é menor que 1 (Alt+arrastar para cima), a espiral é mais densa na periferia; quando é maior que 1 (Alt+arrastar para baixo), a espiral é mais densa no centro:
+ 
+ 0,2
+ 0,5
+ 6
+ 2
+ 1
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  O número máximo de revoluções, ou seja voltas, para uma espiral é 1024.
+ 
+ 
+ 
+  
+   
+  
+  Assim como a ferramenta Círculo é adequada não apenas para círculos e elipses mas também para arcos (linhas de curvatura constante), a ferramenta Espiral é útil para fazer linhas com curvatura que varia suavemente. Comparada a uma curva Bézier comum, um arco ou uma espiral é geralmente mais prática porque se pode diminuí-la ou aumentá-la arrastando uma alça ao longo da curva sem afetar a sua forma. Para além disso, enquanto uma espiral é normalmente criada sem preenchimento, pode-se adicionar preenchimento e remover o traço para criar efeitos interessantes.
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Especialmente interessantes são as espirais com traço pontilhado — elas combinam a concentração suave da forma com espaçamento regular de pontos ou pequenos traços criando belos efeitos moiré:
+ 
+ 
+ 
+ 
+ 
+  Conclusão
+ 
+ 
+ 
+  
+   
+  
+  As ferramentas de formas geométricas do Inkscape são muito poderosas. Aprenda os seus truques e brinque com elas no seu tempo livre — isto dará resultados quando fizer os seus trabalhos gráficos, porque usar formas em vez de caminhos simples é geralmente mais rápido e fácil para alterar. Se tem ideias para melhorar as ferramentas de formas geométricas, por favor entre em contacto com os programadores.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-tips.pt.svg b/share/tutorials/tutorial-tips.pt.svg
new file mode 100644
index 000000000..7093d752d
--- /dev/null
+++ b/share/tutorials/tutorial-tips.pt.svg
@@ -0,0 +1,691 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::DICAS E TRUQUES
+ 
+ 
+ 
+  
+   
+  
+  Este tutorial demonstra várias dicas e truques que vários utilizadores descobriram ao utilizarem o Inkscape e algumas características "ocultas" que podem ajudar a acelerar tarefas de produção.
+ 
+ 
+  Posicionamento radial com "Clones Ladrilhados"
+ 
+ 
+ 
+  
+   
+  
+  É fácil notar como usar o painel Criar Clones Ladrilhados (no menu Editar > Clonar) para grelhas retangulares e padrões. Mas e se quisermos um posicionamento radial, onde os objetos partilham um centro comum de rotação? Isto também é possível!
+ 
+ 
+ 
+  
+   
+  
+  Se o padrão radial apenas necessita de 3, 4, 6, 8 ou 12 elementos, então pode-se tentar as simetrias P3, P31M, P3M1, P4, P4M, P6 ou P6M. Estes padrões funcionam perfeitamente para flocos de neve e similares. No entanto o próximo método é mais genérico.
+ 
+ 
+ 
+  
+   
+  
+  Escolha a simetria P1 (transição simples) e depois compense essa transição configurando na aba Deslocar, os campos Por linha/Deslocar Y e Por coluna/Deslocar X ambos com o valor -100%. Agora todos os clones ficarão empilhados exatamente em cima do original. Tudo o que resta fazer é ir à aba Rodar e configurar um ângulo de rotação por coluna e então criar o padrão com uma linha e múltiplas colunas. Por exemplo, aqui está um padrão feito a partir de uma linha horizontal, com 30 colunas, cada coluna rodada em 6 graus:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Para obter um mostrador de relógio a partir disto, tudo o que é necessário fazer é cortar ou simplesmente cobrir a parte central com um círculo branco (para fazer operações booleanas nos clones, desligue-os primeiro dos caminhos originais).
+ 
+ 
+ 
+  
+   
+  
+  Podem ser criados efeitos mais interessantes utilizando as linhas e as colunas. Aqui está um padrão com 10 colunas e 8 linhas, com rotação de 2 graus por linha e 18 graus por coluna. Neste caso, cada grupo de linhas é uma "coluna", assim os grupos estão a 18 graus um do outro, dentro de cada coluna e as linhas individuais estão 2 graus afastadas:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Nos exemplos acima, a linha foi rodada à volta do seu centro. Mas e se quisermos que o centro fique fora da forma? Apenas clique no objeto 2 vezes com a ferramenta Selecionar para mudar para o modo de rotação. Agora mova o centro de rotação do objeto (representado por uma cruz no centro) para o ponto onde pretende que seja o centro da rotação para a operação de Clones Ladrilhados. Então aplique Criar Clones Ladrilhados no objeto. Isto é uma demonstração de como se pode criar "explosões" ou "rastos de estrelas" aplicando escala aleatória, rotação e possivelmente opacidade:
+ 
+ 
+  
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Como fazer fatias (várias áreas retangulares exportadas)?
+ 
+ 
+ 
+  
+   
+  
+  Crie uma camada nova, nesta camada crie retângulos invisíveis cobrindo partes de uma imagem. Certifique-se que o documento usa a unidade px (padrão), ative a grelha e atraia os retângulos à grelha de modo que cada um abranja um número inteiro de unidades px. Atribua IDs compreensíveis aos retângulos e exporte cada um deles em ficheiros separados (Ficheiro > Exportar para Imagem PNG (Shift+Ctrl+E)). Assim os retângulos terão os seus nomes de exportação. Depois disto, é muito fácil tornar a exportar alguns retângulos: mude para a camada de exportação, use a tecla Tab para selecionar aquele que deseja (ou use Procurar pelo ID) e clique em Exportar no painel de Exportar para Imagem PNG. Como alternativa, pode escrever um script da shell ou ficheiro batch para exportar todas as áreas com um comando como:
+ 
+ 
+ 
+  
+   
+  
+  inkscape -i area-id -t filename.svg
+ 
+ 
+ 
+  
+   
+  
+  para cada área exportada. A opção -t ativa a utilização do nome do ficheiro gravado, senão pode fornecer o nome do ficheiro de exportação com a opção -e. Como alternativa, pode usar Extensões > Web > Fatias ou Extensões > Exportar > Guilhotina para resultados similares.
+ 
+ 
+  Gradientes não-lineares
+ 
+ 
+ 
+  
+   
+  
+  A versão 1.1 do SVG não suporta gradientes não-lineares (ou seja, aqueles que têm uma transição não-linear entre as cores). Pode-se no entanto imitá-los através de gradientes com várias paragens.
+ 
+ 
+ 
+  
+   
+  
+  Comece com um gradiente simples com 2 paragens (pode-se atribuí-las no painel Preenchimento e Traço ou na ferramenta Gradiente). Agora, com a ferramenta Gradiente, adicione uma nova paragem no meio, através de um duplo clique na linha do gradiente ou selecionando a paragem do gradiente quadrada e clicando no botão Inserir nova paragem na barra de Configuração da Ferramenta que logo acima da área de desenho. Arraste um pouco a nova paragem. E depois adicione mais paragens antes e depois da paragem do meio e arraste-as também, para que o gradiente pareça suave. Quanto mais paragens se adicionarem, mais suave fica o gradiente. Aqui está o gradiente inicial preto e branco com 2 paragens:
+ 
+ 
+  
+   
+   
+  
+ 
+ 
+ 
+ 
+  
+   
+  
+  E aqui estão vários gradientes não-lineares com múltiplas paragens (examine-as no Editor de Gradiente):
+ 
+ 
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Gradientes radiais excêntricos
+ 
+ 
+ 
+  
+   
+  
+  Os gradientes radiais não têm que ser simétricos. Com a ferramenta Gradiente arraste a alça central de um gradiente elíptico com a tecla Shift. Isto fará mover a alça de foco em forma de x do gradiente para longe do seu centro. Quando não precisar mais dela, pode atrair de novo o foco de volta arrastando-o para perto do seu centro.
+ 
+ 
+  
+   
+   
+  
+  
+   
+   
+  
+ 
+ 
+ 
+ 
+  Alinhar ao centro da página
+ 
+ 
+ 
+  
+   
+  
+  Para alinhar alguma coisa ao centro ou ao lado de uma página, selecione o objeto ou grupo e depois escolha a opção Página no campo Relativo a: no painel Alinhar e Distribuir (Shift+Ctrl+A).
+ 
+ 
+  Optimizar o documento
+ 
+ 
+ 
+  
+   
+  
+  Muitos dos gradientes não utilizados, padrões e marcadores (mais precisamente, aqueles que editou manualmente) permanecem nas paletas respetivas e podem ser usados novamente em novos objetos. No entanto se quiser otimizar o documento, use o comando Optimizar Documento no menu Ficheiro. Serão removidos quaisquer gradientes, padrões ou marcadores que não estão a ser utilizados no documento, desta forma o ficheiro ocupa menos espaço em disco.
+ 
+ 
+  Funcionalidades ocultas e o editor XML
+ 
+ 
+ 
+  
+   
+  
+  O editor XML (Shift+Ctrl+X) permite alterar quase todos os aspetos do documento sem ser necessário usar um editor de texto externo. Além disso, o Inkscape normalmente suporta mais características do SVG do que as que estão acessíveis a partir da interface gráfica. O editor XML é uma forma de obter acesso a estas características (se tiver conhecimentos técnicos do SVG).
+ 
+ 
+  Alterar a unidade de medida das réguas
+ 
+ 
+ 
+  
+   
+  
+  No modelo padrão, a unidade de medida usada pelas réguas é mm. Esta é também a unidade usada para mostrar as coordenadas no canto inferior esquerdo e pré-selecionada em todos os menus de unidades. Pode sempre posicionar o cursor sobre uma régua para ver a mensagem com as unidades usadas. Para alterar isto, abra as Propriedades do Documento no menu Ficheiro (Shift+Ctrl+D) e altere as Unidades de visualização logo no início da primeira aba Página.
+ 
+ 
+  Carimbo
+ 
+ 
+ 
+  
+   
+  
+  Para criar rapidamente várias cópias de um objeto, use o carimbo. Basta arrastar um objeto (ou redimensioná-lo ou rodá-lo) e enquanto se mantém pressionado o botão do rato, pressione a Barra de Espaço. Isto cria um "carimbo" do objeto selecionado. Pode repeti-lo as vezes que quiser.
+ 
+ 
+  Truques da ferramenta Caneta
+ 
+ 
+ 
+  
+   
+  
+  Na ferramenta Caneta (Bézier), tem as seguintes opções para finalizar a linha atual:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Carregar na tecla Enter
+ 
+ 
+ 
+ 
+  
+   
+  
+  Clicar 2 vezes com o botão esquerdo do rato
+ 
+ 
+ 
+ 
+  
+   
+  
+  Clicar com o botão direito do rato
+ 
+ 
+ 
+ 
+  
+   
+  
+  Selecionar outra ferramenta
+ 
+ 
+ 
+  
+   
+  
+  Note que enquanto o caminho não estiver terminado (ou seja, é mostrado a verde, com o segmento atual a vermelho) este ainda não existe como objeto no documento. Por isso, para cancelá-lo, use a tecla Esc (cancela todo o caminho) ou a tecla Backspace (remove o último segmento do caminho por terminar) em vez do comando Desfazer.
+ 
+ 
+ 
+  
+   
+  
+  Para adicionar um novo sub-caminho a um caminho existente, selecione o caminho e comece a desenhar com a tecla Shift num ponto qualquer. Se no entanto quiser apenas continuar um caminho existente, a tecla Shift não é necessária; basta começar a desenhar a partir de um dos nós dos extremos do caminho selecionado.
+ 
+ 
+  Inserir valores Unicode
+ 
+ 
+ 
+  
+   
+  
+  Na ferramenta Texto, pressionar Ctrl+U alterna entre o modo Unicode e o modo normal. No modo Unicode, cada grupo de 4 dígitos hexadecimais que digitar torna-se num único caractere Unicode, permitindo assim inserir símbolos arbitrários (desde que conheça os códigos Unicode e a fonte os suporte). Para terminar a introdução em Unicode, pressione a tecla Esc. Por exemplo, Ctrl+U 2 0 1 4 Enter insere um travessão eme (—). Para sair do modo Unicode sem inserir nada pressione a tecla Esc.
+ 
+ 
+ 
+  
+   
+  
+  Também pode usar o painel no menu Texto > Caracteres para procurar e inserir caracteres no documento.
+ 
+ 
+  Usar a grelha para desenhar ícones
+ 
+ 
+ 
+  
+   
+  
+  Suponhamos que queira criar um ícone com as dimensões 24x24 píxeis. Para isso crie uma página com 24x24 px (use as Propriedades do Documento) e configure a grelha para 0,5 px (linhas de grelha de 48x48). Agora, se alinhar objetos preenchidos às linhas da grelha pares e objetos com traços às linhas da grelha ímpares com a espessura do traço em px num número par e exportá-lo no valor padrão 96dpi (de modo que 1 px se transforme em 1 píxel de bitmap), obterá uma imagem bitmap clara, sem necessidade de suavização de anti-serrilhado.
+ 
+ 
+  Rotação de objetos
+ 
+ 
+ 
+  
+   
+  
+  Com a ferramenta de Selecionar, clique num objeto para ver as setas de redimensionamento, depois clique novamente no objeto para ver as setas de rotação e inclinação. Se clicar nas setas dos cantos e arrastá-las, o objeto será rodado à volta do centro (representado por uma cruz). Se manter pressionada a tecla Shift enquanto faz isto, a rotação ocorrerá ao redor do canto oposto. Também pode arrastar o centro de rotação para qualquer lugar.
+ 
+ 
+ 
+  
+   
+  
+  Pode também rodar através do teclado pressionando [ e ] (em incrementos de 15 graus) ou Ctrl+[ e Ctrl+] (em incrementos de 90 graus). As mesmas teclas [] com Alt executam uma rotação suave no tamanho do píxel.
+ 
+ 
+  Sombras caídas
+ 
+ 
+ 
+  
+   
+  
+  Para criar rapidamente sombras caídas em objetos, use o menu Filtros > Sombras e Auréolas > Sombra Caída....
+ 
+ 
+ 
+  
+   
+  
+  Também pode criar facilmente sombras caídas desfocadas em objetos manualmente com o campo Desfocagem no painel Preenchimento e Traço. Selecione um objeto, duplique-o com Ctrl+D, pressione a tecla PgDown para o colocar por baixo do objeto original, devendo posicionar um pouco para baixo e para a direita do objeto original. Agora abra o painel Preenchimento e Traço e altere o valor da Desfocagem, por exemplo para 5,0 e já está!
+ 
+ 
+  Colocar texto num caminho
+ 
+ 
+ 
+  
+   
+  
+  Para colocar texto ao longo de um caminho, selecione o texto e o caminho e use o comando Colocar no Caminho no menu Texto. O texto começará no início do caminho. Regra geral, é melhor criar um caminho apenas para o texto, em vez de enquadrá-lo noutro elemento do desenho – isto dará mais controlo sem estragar o desenho existente.
+ 
+ 
+  Selecionar o original
+ 
+ 
+ 
+  
+   
+  
+  Quando se tem um texto num caminho, um deslocamento ligado, ou um clone, pode ser difícil selecionar o objeto/caminho original porque estes podem estar por baixo ou estarem invisíveis e/ou bloqueados. As teclas Shift+D podem ajudar. Selecione o texto, deslocamento ligado ou clone e pressione Shift+D para mover a seleção para o caminho, deslocamento ligado ou o clone original correspondente.
+ 
+ 
+  Recuperação de janelas fora do ecrã
+ 
+ 
+ 
+  
+   
+  
+  Ao transferir documentos entre sistemas com diferentes resoluções ou número de ecrãs, pode acontecer que o Inkscape tenha gravado a posição da janela fora do ecrã que estiver a utilizar. Simplesmente maximize a janela (o que vai recuperar a visão prévia, para isto use a barra de tarefas do sistema operativo), grave e torne a abrir. Pode-se evitar este problema desativando a opção "Gravar tamanho e posição da janela (geometria)" em (preferências, na secção Interface > Janelas).
+ 
+ 
+  Exportar transparências e gradientes para PostScript
+ 
+ 
+ 
+  
+   
+  
+  Os formatos PostScript ou EPS não suportam transparência, por isso não se deve usá-la caso se queira exportar para PS ou EPS. No caso da transparência lisa que sobrepõe a cor lisa, é fácil corrigir isto: selecione um dos objetos transparentes; mude para a ferramenta Pipeta (F7 ou d); certifique-se que o botão Transparência: Capturar na barra de Configuração da Ferramenta está desativado. Repita isto em todos os objetos com transparência. Caso o objeto transparente esteja por cima de várias áreas com cores lisas, será necessário separar o objeto com a transparência em vários objetos e aplicar este procedimento em cada um deles. Note que a ferramenta Pipeta não altera o valor da transparência do objeto, mas sim apenas o valor alfa da cor de preenchimento ou do traço. Por isso certifique-se que todos os valores de opacidade dos objetos estão em 100% antes de começar.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-tracing-pixelart.pt.svg b/share/tutorials/tutorial-tracing-pixelart.pt.svg
new file mode 100644
index 000000000..6da3e5c35
--- /dev/null
+++ b/share/tutorials/tutorial-tracing-pixelart.pt.svg
@@ -0,0 +1,15603 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::VETORIZAR ARTE DE PÃXEIS
+ 
+ 
+ 
+  
+   
+  
+  Antes de todos termos acesso a programas de edição de gráficos vetoriais...
+ 
+ 
+ 
+  
+   
+  
+  Mesmo antes de usarmos pequenos ecrãs de computador com resoluções de 640x480...
+ 
+ 
+ 
+  
+   
+  
+  Era comum jogar vídeo jogos com píxeis criados com cuidado em ecrãs de baixa resolução.
+ 
+ 
+ 
+  
+   
+  
+  Chamamos a este tipo de grafismos nascidos nesta era "Arte de Píxeis".
+ 
+ 
+ 
+  
+   
+  
+  O Inkscape inclui o programa libdepixelize que oferece a capacidade de vetorizar automaticamente estas imagens "especiais" de Arte de Píxeis. Pode tentar usar esta ferramenta noutros tipos de imagens, mas tenha em conta que o resultado não será tão bom quanto o da ferramenta tradicional do Inkscape de Vetorizar Imagens Bitmap.
+ 
+ 
+ 
+  
+   
+  
+  Vamos começar com uma imagem de exemplo para mostrar as capacidades deste motor de vetorização. Segue-se abaixo um exemplo de uma imagem raster (composta por píxeis, retirada de uma submissão ao concurso Liberated Pixel Cup - traduzido à letra: Taça de Píxel Libertado) à esquerda e o resultado da vetorização Arte de Píxeis na direita.
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  O motor libdepixelize usa o algoritmo Kopf-Lischinski para vetorizar imagens. Este algoritmo usa ideias de várias técnicas da ciência da computação e conceitos matemáticos para produzir um bom resultado em imagens de Arte de Píxeis. Algo a notar é o canal alfa (transparência) que é completamente ignorado pelo algoritmo. O libdepixelize não tem neste momento extensões que suportem totalmente este tipo de imagens, mas todas as imagens de Arte de Píxeis com suporte de canal alfa estão a produzir resultados similares às imagens de referência reconhecidos pelo Kopf-Lischinski.
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  A imagem acima tem um canal alfa e o resultado está bom. Mesmo assim, se encontrar uma imagem de Arte de Píxeis com um mau resultado e acredita que o problema é o canal alfa, então contacte o responsável pelo libdepixelize (isto é, submeta um relatório de erro na página do projeto) e nós ficaremos contentes por integrar novas funcionalidades e correções. Nós não poderemos melhorar o programa se não soubermos que tipos de imagens dão maus resultados.
+ 
+ 
+ 
+  
+   
+  
+  A imagem seguinte é uma descarga de ecrã do painel Vetorizar Arte de Píxeis do Inkscape em Inglês. Pode-se abrir este painel utilizando o menu Caminho > Vetorizar Arte de Píxeis... ou então clicando com o botão direito do rato sobre uma imagem e escolher no menu que aparece Vetorizar Arte de Píxeis....
+ 
+ 
+  
+ 
+ 
+ 
+  
+   
+  
+  Este painel tem 2 secções: Heurísticas e Saída. As heurísticas destinam-se a utilizações avançadas, mas estas já têm uma configuração padrão para casos gerais que produz bons resultados. Mas não nos preocupemos com esta parte agora. Ficará para mais tarde. Começaremos pela explicação da secção Saída.
+ 
+ 
+ 
+  
+   
+  
+  O algoritmo Kopf-Lischinski funciona (de um ponto de vista de alto-nível) como um compilador, convertendo os dados ao longo de vários tipos de representação. Em cada passo, o algoritmo tem a oportunidade de explorar operações que esta representação fornece. Algumas destas representações intermédias têm uma representação visual correta (como a saída Voronoi do gráfico da célula reformulada) e algumas não têm (como o gráfico de similaridade). Durante o desenvolvimento do libdepixelize, os utilizadores pediram muitas vezes para adicionar a possibilidade de exportar estes passos intermédios para o libdepixelize e o autor original aceitou este pedido.
+ 
+ 
+ 
+  
+   
+  
+  A saída padrão B-Spline produz o resultado mais suave e provavelmente serve para a maioria dos casos. Já vimos a saída padrão nos primeiros exemplos deste tutorial. Se quiser tentar por si mesmo, basta abrir o painel Vetorizar Arte de Píxeis e clicar no botão OK após selecionar uma imagem no Inkscape.
+ 
+ 
+ 
+  
+   
+  
+  Pode-se ver a saída Voronoi abaixo que consiste numa "imagem de píxeis com a forma alterada", onde as células (que anteriormente eram píxeis) foram alteradas quanto à forma para ligar píxeis que fazem parte da mesma característica. Nenhuma curva é criada e a imagem continua a ser composta por linhas direitas. A diferença pode ser observada quando se amplia a imagem. Os píxeis anteriores não podiam partilhar uma borda com um vizinho na diagonal, mesmo que tenham sido colocados para fazer parte da mesma característica. Mas agora (graças à similaridade das cores e às heurísticas que podem ser ajustadas para obter melhores resultados), é possível fazer com que 2 células diagonais partilhem uma borda (anteriormente apenas vértices únicos eram partilhados por 2 células diagonais).
+ 
+ 
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+ 
+ 
+ 
+  
+   
+  
+  A saída padrão em B-splines é suavizada, porque a saída anterior Voronoi é convertida em curvas Bézier quadradas. No entanto, a conversão não é 1:1 porque existem mais heurísticas a trabalhar para decidir quais curvas serão fundidas numa só quando o algoritmo chega a uma junção-T de entre as cores visíveis.
+ 
+ 
+ 
+  
+   
+  
+  A etapa final do libdepixelize (atualmente não exportável pela interface do Inkscape por ser experimental e incompleto) é "otimizar curvas" para remover o efeito de escada das curvas B-spline. Esta etapa também usa uma técnica de deteção de bordas para prevenir que algumas características sejam suavizadas e uma técnica de triangulação para corrigir a posição dos nós após a otimização. É possível desativar cada uma destas características quando a saída deixar de estar no "estado experimental" no libdepixelize (esperamos que seja brevemente).
+ 
+ 
+ 
+  
+   
+  
+  A secção das heurísticas na interface permite afinar as heurísticas usadas pelo libdepixelize para decidir o que fazer quando encontra um bloco de píxel 2x2 onde as duas diagonais têm cores similares. "Que ligação devo manter?" é o que o libdepixelize pergunta. Este tenta aplicar todas as heurísticas às diagonais em conflito e mantém a ligação ao vencedor. Se ocorrer um empate, ambas as ligações são eliminadas.
+ 
+ 
+ 
+  
+   
+  
+  Para analisar o efeito de cada heurística e experimentar vários valores, a melhor saída é a Voronoi. Pode-se ver melhor os efeitos das heurísticas na saída Voronoi e quando estiver bom, pode-se mudar o tipo de saída para o pretendido.
+ 
+ 
+ 
+  
+   
+  
+  A imagem abaixo tem uma imagem e a saída B-Spline com apenas uma das heurísticas ativadas para cada tentativa. Notar os círculos púrpuras que destacam as diferenças entre cada heurística.
+ 
+ 
+  
+  
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+   
+  
+  
+  
+  
+  
+  
+  
+  
+  
+  
+ 
+ 
+ 
+  
+   
+  
+  Para a primeira tentativa (primeira imagem), apenas foi ativada a heurística Curvas. Esta heurística tenta manter ligadas as curvas longas. Pode-se notar que este resultado é semelhante à última imagem, onde é aplicada a heurística de píxeis dispersos. Difere na sua "força" que é mais justa e apenas atribui um valor alto ao voto quando é realmente importante manter estas ligações. O conceito/definição de "justo" aqui é baseado na "intuição humana" na base de dados de píxeis analisados. Outra diferença é que esta heurística não consegue decidir o que fazer quando as ligações agrupam grandes blocos em vez de curvas longas (tal como num tabuleiro de xadrez).
+ 
+ 
+ 
+  
+   
+  
+  Para a segunda tentativa (a imagem do meio) apenas foi ativada a heurística Ilhas. A única coisa que esta heurística faz é tentar manter a ligação que de outra forma poderia resultar em vários píxeis isolados (ilhas) com um peso de voto constante. Este tipo de situação não é comum como a situação que acontece com as outras heurísticas, mas esta heurística é excelente e ajuda a obter melhores resultados.
+ 
+ 
+ 
+  
+   
+  
+  Para a terceira tentativa (a imagem do fundo), apenas se ativou a heurística Píxeis Dispersos. Esta heurística tenta manter as curvas ligadas à cor do fundo. Para descobrir qual é a cor do fundo a heurística analisa uma janela com os píxeis à volta das curvas em conflito. Nesta heurística pode-se afinar a "força", assim como a janela de píxeis que analisa. Notar que quando se aumenta a janela de píxeis analisados, a "força" máxima para o seu voto aumentará também e poderá ser melhor ajustar o multiplicador para o seu voto. O autor original do libdepixelize acha que esta heurística é demasiado "gananciosa" e prefere usar o valor "0.25" no multiplicador.
+ 
+ 
+ 
+  
+   
+  
+  Mesmo que o resultado da heurística Curvas e Píxeis dispersos dêem resultados similares, pode querer manter ambos ativados, porque a heurística Curvas pode fornecer uma segurança extra para que as curvas importantes dos píxeis de contorno não sejam descartadas e há casos que apenas podem ser respondidos pela heurística píxeis dispersos.
+ 
+ 
+ 
+  
+   
+  
+  Dica: pode-se desativar todas as heurísticas ao aplicar o valor "0" nos campos multiplicador. Pode-se fazer com que as heurísticas actuem contra os seus princípios usando valores negativos nos campos multiplicador. Ao inverter a ação da heurística obtêm-se resultados "artísticos".
+ 
+ 
+ 
+  
+   
+  
+  E é isto! Para este lançamento inicial do libdepixelize, estas são todas as opções disponíveis. Mas se a pesquisa do autor original do libdepixelize e o seu mentor criativo for bem sucedida, poderemos ter no futuro outras opções e outros tipos de imagens adequadas nas quais o libdepixelize pode dar bons resultados.
+ 
+ 
+ 
+  
+   
+  
+  Todas as imagens utilizadas neste tutorial são provenientes de Liberated Pixel Cup para evitar problemas de direitos de autor. As hiperligações são as seguintes:
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://opengameart.org/content/memento
+ 
+ 
+ 
+ 
+  
+   
+  
+  http://opengameart.org/content/rpg-enemies-bathroom-tiles
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
diff --git a/share/tutorials/tutorial-tracing.pt.svg b/share/tutorials/tutorial-tracing.pt.svg
new file mode 100644
index 000000000..9d213274c
--- /dev/null
+++ b/share/tutorials/tutorial-tracing.pt.svg
@@ -0,0 +1,231 @@
+
+
+
+ 
+ 
+  
+   
+   
+  
+  
+  
+   
+   
+   
+   
+   
+  
+ 
+ 
+  
+   
+    image/svg+xml
+    
+   
+  
+ 
+ 
+  
+  
+  
+  
+  
+   
+   
+   
+   
+   
+  
+  
+  Usar Ctrl+seta para baixo para baixar 
+  
+ 
+ 
+  ::VETORIZAR IMAGENS BITMAP
+ 
+ 
+ 
+  
+   
+  
+  Um dos recursos do Inkscape é a ferramenta que vetoriza uma imagem bitmap num elemento SVG denominado <path> (caminho) no desenho SVG. Estas pequenas indicações devem ajudá-lo a familiarizar-se com o funcionamento desta ferramenta.
+ 
+ 
+ 
+  
+   
+  
+  Atualmente o Inkscape usa o motor Potrace de vetorização bitmap (potrace.sourceforge.net) criado por Peter Selinger. No futuro esperamos permitir outros programas de vetorização alternativos; por agora, entretanto, esta ferramenta é mais do que suficiente para as nossas necessidades.
+ 
+ 
+ 
+  
+   
+  
+  Tenha em mente que o propósito desta ferramenta não é reproduzir uma cópia exata da imagem original, nem produzir um produto final. Nenhuma ferramenta de vetorização automática consegue fazer isso. O que a ferramenta faz é criar um conjunto de curvas que se podem usar como um recurso para o desenho.
+ 
+ 
+ 
+  
+   
+  
+  O Potrace interpreta uma imagem bitmap a preto e branco, produzindo um conjunto de curvas. Para o Potrace, atualmente temos 3 tipos de filtros de entrada, para converter uma imagem em bruto em algo que o Potrace possa usar.
+ 
+ 
+ 
+  
+   
+  
+  Geralmente, quanto mais escuros forem os píxeis na imagem bitmap intermediária, mais vetorização o Potrace fará. À medida que a quantidade de traços aumenta, mais tempo de processamento será necessário e o elemento <path> será muito maior. É recomendável experimentar com imagens intermediárias mais claras primeiro, passando depois para as mais escuras para obter a complexidade e proporção desejadas.
+ 
+ 
+ 
+  
+   
+  
+  Para usar a ferramenta de Vetorizar Imagens Bitmap, abra ou importe uma imagem, selecione-a e aceda ao menu Caminho > Vetorizar Imagem Bitmap, ou Shift+Alt+B.
+ 
+ Opções principais dentro do painel Vetorizar Imagem Bitmap
+ 
+ 
+ 
+  
+   
+  
+  Irão aparecer pelo menos 3 opções de filtros disponíveis:
+ 
+ 
+ 
+ 
+  
+   
+  
+  Nível de Brilho
+ 
+ 
+ 
+  
+   
+  
+  Isto usa simplesmente a soma do vermelho, verde e azul (ou tons de cinza) de um píxel para determinar se ele deve ser considerado como preto ou branco. O limiar pode ser configurado de 0,0 (preto) a 1,0 (branco). Quanto maior o valor, menor a quantidade de píxeis que serão considerados "brancos" e a imagem intermediária ficará mais escura.
+ 
+ Imagem Original
+ Limiar de BrilhoPreenchido, sem Traço
+ Limiar de BrilhoTraço, não Preenchido
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Deteção de Bordas
+ 
+ 
+ 
+  
+   
+  
+  Isto usa o algoritmo de detecção de bordas concebido por J. Canny, como uma forma de achar rapidamente isóclinas de contrastes parecidos. Isto produzirá uma imagem bitmap intermediária que se parecerá menos com a imagem original do que com o que faz o Limiar do Nível de Brilho, mas provavelmente fornecerá informação sobre a curva que de outra maneira seria ignorada. A configuração do campo Limiar aqui (de 0,0 a 1,0) ajusta o limiar do brilho a fim de determinar se um píxel situado próximo a uma borda com contraste deve ser incluído no resultado ou não. Este recurso permite ajustar o escuro ou espessura da borda no resultado final da imagem vetorizada.
+ 
+ Imagem Original
+ Borda DetetadaPreenchido, sem Traço
+ Borda DetetadaTraço, não Preenchido
+ 
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  Número de Cores
+ 
+ 
+ 
+  
+   
+  
+  O resultado deste filtro produzirá uma imagem intermediária que é muito diferente dos outros dois, mas é muito útil. Em vez de mostrar as isóclinas de brilho ou contraste, este filtro procura bordas onde as cores mudam, mesmo com brilho e contrastes iguais. O campo aqui, Número de Cores, decide quantas cores de saída existiriam se a imagem bitmap intermediária fosse colorida. Ele então decide preto/branco de acordo com o índice par ou ímpar da cor.
+ 
+ Imagem Original
+ Número de Cores (12)Preenchido, sem Traço
+ Número de Cores (12)Traço, não Preenchido
+ 
+ 
+ 
+ 
+ 
+  
+   
+  
+  É recomendável experimentar todos os 3 filtros e observar os diferentes resultados produzidos para diferentes tipos de imagens de entrada. Haverá sempre uma imagem onde um funciona melhor do que os outros.
+ 
+ 
+ 
+  
+   
+  
+  Depois de vetorizar, é recomendável usar o comando Caminho > Simplificar (Ctrl+L) no caminho resultante da vetorização, para reduzir o número de nós, por forma a ser muito mais fácil editá-lo posteriormente. Por exemplo, aqui está uma vetorização típica do "Homem Velho Tocando Violão":
+ 
+ Imagem Original
+ Imagem Vetorizada / Caminho Resultante(1551 nós)
+ 
+ 
+ 
+ 
+  
+   
+  
+  Observe a enorme quantidade de nós no caminho. Depois de pressionar Ctrl+L no caminho, este é o resultado típico:
+ 
+ Imagem Original
+ Imagem Vetorizada / Caminho Resultante - Simplificado(384 nós)
+ 
+ 
+ 
+ 
+  
+   
+  
+  A representação é um pouco mais aproximada e rudimentar, mas o desenho é muito mais simples e fácil de editar. Tenha em mente que o que se pretende normalmente com a vetorização, não é uma cópia exata da imagem, mas um conjunto de curvas que se podem usar em desenhos.
+ 
+ 
+  
+   
+   
+    
+    
+    
+    
+    
+   
+  
+  
+   
+    
+     image/svg+xml
+     
+    
+   
+  
+  
+   
+   
+   
+   
+    
+    
+    
+    
+    
+   
+   
+   Usar Ctrl+seta para cima para subir 
+   
+  
+ 
+
-- 
cgit v1.2.3


From 70d05ffc30f6cd327f2e6ab7b0b76e2c5d89ca7a Mon Sep 17 00:00:00 2001
From: Nicolas Dufour 
Date: Wed, 17 Aug 2016 12:02:10 +0200
Subject: Documentation. Tutorials translation update for Brazilian Portuguese.

Fixed bugs:
  - https://launchpad.net/bugs/1612957

(bzr r15066)
---
 share/tutorials/tutorial-advanced.pt_BR.svg    | 417 ++++++-------
 share/tutorials/tutorial-basic.pt_BR.svg       | 668 ++++++++++-----------
 share/tutorials/tutorial-calligraphy.pt_BR.svg | 658 ++++++++++-----------
 share/tutorials/tutorial-elements.pt_BR.svg    | 396 ++++++-------
 share/tutorials/tutorial-interpolate.pt_BR.svg | 244 ++++----
 share/tutorials/tutorial-shapes.pt_BR.svg      |  16 +-
 share/tutorials/tutorial-tips.pt_BR.svg        | 774 +++++++++++++------------
 share/tutorials/tutorial-tracing.pt_BR.svg     | 150 ++---
 8 files changed, 1687 insertions(+), 1636 deletions(-)

diff --git a/share/tutorials/tutorial-advanced.pt_BR.svg b/share/tutorials/tutorial-advanced.pt_BR.svg
index 96b207d15..e7795a0f3 100644
--- a/share/tutorials/tutorial-advanced.pt_BR.svg
+++ b/share/tutorials/tutorial-advanced.pt_BR.svg
@@ -36,61 +36,61 @@
    
    
   
-  
-  Use Ctrl+down arrow to scroll 
+  
+  Use Ctrl+down arrow to scroll 
   
  
- 
+ 
   ::AVANÇADO
  
-bulia byak, buliabyak@users.sf.net e josh andler, scislac@users.sf.net
- 
- 
+
+ 
+ 
   
    
   
   Este tutorial aborda os seguintes temas: copiar/colar, edição de nós, desenho a mão livre e com curvas Bezier, manipulação de caminhos, operações booleanas, objetos offset (comprimir/expandir), simplificação, e ferramenta de texto.
  
- 
- 
+ 
+ 
   
    
   
-  Use Ctrl+setas, roda do mouse, ou arrasto com o botão do meio para rolar a página para baixo. Para saber o básico sobre criação, seleção, e transformação de objetos, veja o tutorial Básico em Ajuda > Tutoriais.
+  Use Ctrl+setas, roda do mouse, ou arrasto com o botão do meio para rolar a página para baixo. Para saber o básico sobre criação, seleção, e transformação de objetos, veja o tutorial Básico em Ajuda > Tutoriais.
  
- 
-  Técnicas de colagem
+ 
+  Técnicas de colagem
  
- 
- 
+ 
+ 
   
    
   
-  Depois que você copia algum(s) objeto(s) com Ctrl+C ou recorta com Ctrl+X, o comando regular Colar (Ctrl+V) cola o(s) objeto(s) copiado(s) bem abaixo do cursor do mouse ou, se o cursor estiver fora da janela, no centro da janela do documento. No entanto, o(s) objeto(s) na área de transferência ainda grava(m) o lugar original do qual foram copiados, e você pode colar de volta onde estava com Colar no Lugar (Ctrl+Alt+V).
+  Depois que você copia algum(s) objeto(s) com Ctrl+C ou recorta com Ctrl+X, o comando regular Colar (Ctrl+V) cola o(s) objeto(s) copiado(s) bem abaixo do cursor do mouse ou, se o cursor estiver fora da janela, no centro da janela do documento. No entanto, o(s) objeto(s) na área de transferência ainda grava(m) o lugar original do qual foram copiados, e você pode colar de volta onde estava com Colar no Lugar (Ctrl+Alt+V).
  
- 
- 
+ 
+ 
   
    
   
-  Um outro comando, Colar Estilo (Shift+Ctrl+V), aplica o estilo do (primeiro) objeto na área de transferência à seleção atual. O "estilo" assim colado inclui todas as configurações de preenchimento, traço e fonte, mas não a forma, tamanho, ou parâmetros específicos a um tipo de forma, como por exemplo o número de pontas de um objeto estrela.
+  Um outro comando, Colar Estilo (Shift+Ctrl+V), aplica o estilo do (primeiro) objeto na área de transferência à seleção atual. O "estilo" assim colado inclui todas as configurações de preenchimento, traço e fonte, mas não a forma, tamanho, ou parâmetros específicos a um tipo de forma, como por exemplo o número de pontas de um objeto estrela.
  
- 
- 
+ 
+ 
   
    
   
-  Existe ainda outro conjunto de comandos de colagem, Colar Tamanho, dimensiona a seleção para se igualar com o atributo de tamanho desejado do(s) objeto(s) da área de transferência. Existe uma quantidade grande de comandos para a colagem de tamanho, são eles: Colar Tamanho, Colar Largura, Colar Altura, Colar Tamanho Separadamente, Colar Largura Separadamente, e Colar Altura Separadamente.
+  Existe ainda outro conjunto de comandos de colagem, Colar Tamanho, dimensiona a seleção para se igualar com o atributo de tamanho desejado do(s) objeto(s) da área de transferência. Existe uma quantidade grande de comandos para a colagem de tamanho, são eles: Colar Tamanho, Colar Largura, Colar Altura, Colar Tamanho Separadamente, Colar Largura Separadamente, e Colar Altura Separadamente.
  
- 
- 
+ 
+ 
   
    
   
   Colar Tamanho dimensiona toda a seleção para combinar com o tamanho total do(s) objeto(s) da área de transferência. Colar Largura/Colar Altura dimensiona a seleção completa horizontalmente/verticalmente de modo que se iguale a largura/altura do(s) objeto(s) da área de transferência. Estes comandos fazem jus ao botão de travamento de proporção do dimensionamento da ferramenta de seleção na barra Controles de Ferramenta (entre os campos W e H), de modo que quando esta trava é pressionada, a outra dimensão do objeto selecionado é dimensionada na mesma proporção; caso contrário a outra dimensão permanece inalterada. Os comandos que contém "Separadamente" funcionam de maneira semelhante aos descritos acima, exceto pelo fato que eles dimensionam cada objeto selecionado separadamente para com o tamanho/largura/altura do(s) objeto(s) da área de transferência.
  
- 
- 
+ 
+ 
   
    
   
@@ -99,43 +99,43 @@ instances as well as between Inkscape and other applications (which must be able
 handle SVG on the clipboard to use this).
 
  
- 
-  Desenhando a mão livre e caminhos regulares
+ 
+  Desenhando a mão livre e caminhos regulares
  
- 
- 
+ 
+ 
   
    
   
   A maneira mais fácil de criar uma forma arbitrária é desenhá-la usando a ferramenta Lápis (desenhar linhas a mão livre) (F6):
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Se deseja formas mais regulares, use a ferramenta Caneta (Desenhar curvas Bezier e linhas retas) (Shift+F6):
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
@@ -149,26 +149,26 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing
 only the last segment of an unfinished line, press Backspace.
 
  
- 
- 
+ 
+ 
   
    
   
   Em ambas as ferramentas, o caminho atualmente selecionado mostra pequenas âncoras quadradas em ambas extremidades. Estas âncoras te permitem continuar este caminho (desenhar a partir de uma das âncoras) ou completá-lo (desenhando de uma âncora a outra) em vez de criar uma nova.
  
- 
-  Editando caminhos
+ 
+  Editando caminhos
  
- 
- 
+ 
+ 
   
    
   
   Ao contrário de formas criadas pela ferramenta correspondente, as ferramentas Caneta e Lápis criam o que é conhecido como caminhos. Um caminho é uma sequência de segmentos linhas retas e/ou curvas Bezier que, como qualquer objeto do Inkscape, podem ter propriedades arbitrárias de preenchimento e traço. Porém, diferente de uma forma, um caminho pode ser editado arrastando-se livremente quaisquer de seus nós (não apenas alças predefinidas) ou arrastando-se diretamente um segmento do caminho. Selecione este caminho e mude para ferramenta de Nó (F2):
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
@@ -183,8 +183,8 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on
 selected node); Alt+! inverts in the entire path.
 
  
- 
- 
+ 
+ 
   
    
   
@@ -196,8 +196,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by
 either double clicking or by Ctrl+Alt+click at the desired location.
 
  
- 
- 
+ 
+ 
   
    
   
@@ -209,8 +209,8 @@ selected nodes. The path can be broken (Shift+BShift+J).
 
  
- 
- 
+ 
+ 
   
    
   
@@ -226,61 +226,61 @@ of one of the two handles by hovering your mouse over it, so that only the other
 rotated/scaled to match.
 
  
- 
- 
+ 
+ 
   
    
   
   Você pode ainda retrair completamente a alça de um nó Ctrl+clicando sobre ela. Se os dois nós adjacentes possuem suas alças retraídas, o segmento de caminho entre os nós será uma linha reta. Para retirar o nó retraído, Shift+arraste a alça para longe do nó.
  
- 
-  Subcaminhos e combinação
+ 
+  Subcaminhos e combinação
  
- 
- 
+ 
+ 
   
    
   
   Um objeto de caminho pode conter mais de um subcaminho. Um subcaminho é uma sequência de nós conectados uns aos outros. (Por essa razão, se um caminho tem mais de um subcaminho, nem todos os seus nós estão conectados.) Abaixo à esquerda, três subcaminhos pertencem a um único composto de caminho ; os mesmo três subcaminhos à direita são objetos de caminho independentes:
  
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Observe que um caminho composto não é o mesmo que um agrupamento. É um objeto sozinho que só pode ser selecionado como um todo. Se você selecionar o objeto da esquerda acima e mudar para a ferramenta de nó, verá nós em todos os três subcaminhos. No da direita, você pode apenas editar os nós selecionando um caminho por vez.
  
- 
- 
+ 
+ 
   
    
   
-  O Inkscape pode Combinar caminhos em um composto (Ctrl+K) e Separar um composto em caminhos separados (Shift+Ctrl+K). Tente estes comandos nos exemplos acima. Visto que um objeto pode ter apenas um preenchimento e traço, um novo composto fica com o estilo do primeiro (o mais baixo na ordem-z) objeto a ser combinado.
+  O Inkscape pode Combinar caminhos em um composto (Ctrl+K) e Separar um composto em caminhos separados (Shift+Ctrl+K). Tente estes comandos nos exemplos acima. Visto que um objeto pode ter apenas um preenchimento e traço, um novo composto fica com o estilo do primeiro (o mais baixo na ordem-z) objeto a ser combinado.
  
- 
- 
+ 
+ 
   
    
   
   Quando você combina caminhos preenchidos que se sobrepõem, geralmente o preenchimento desaparecerá nas áreas onde os caminhos se sobrepõem:
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Esta é maneira mais fácil de criar objetos com buracos. Para comandos mais poderosos para caminhos, veja "Operações Booleanas" mais adiante.
  
- 
-  Convertendo em caminho
+ 
+  Convertendo em caminho
  
- 
- 
+ 
+ 
   
    
   
@@ -292,167 +292,172 @@ nodes. Here are two stars - the left one is kept a shape and the right one is
 converted to path. Switch to node tool and compare their editability when selected:
 
  
- 
- 
- 
- 
+ 
+ 
+ 
+ 
   
    
   
   Além disso, você pode converter em caminho um traço ("contorno") de qualquer objeto. Abaixo, o primeiro objeto é o caminho original (nenhum preenchimento, traço preto), enquanto o segundo é o resultado do comando Traço para caminho (preenchimento preto, nenhum traço):
  
- 
- 
- 
-  Operações Booleanas
+ 
+ 
+ 
+  Operações Booleanas
  
- 
- 
+ 
+ 
   
    
   
   Os comandos no menu Caminho permitem combinar dois ou mais objetos usando as operações booleanas:
  
- Formas originais
- União (Ctrl++)
- Diferença (Ctrl+-)
- Intersecção(Ctrl+*)
- Exclusão(Ctrl+^)
- Divisão(Ctrl+/)
- Cortar Caminho(Ctrl+Alt+/)
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- (parte inferior menos superior)
- 
- 
+ Formas originais
+ União (Ctrl++)
+ Diferença (Ctrl+-)
+ Intersecção(Ctrl+*)
+ Exclusão(Ctrl+^)
+ Divisão(Ctrl+/)
+ Cortar Caminho(Ctrl+Alt+/)
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ (parte inferior menos superior)
+ 
+ 
   
    
   
-  As teclas de atalho para estes comandos fazem alusão às analogias aritméticas das operações booleanas (união se refere à adição, diferença a subtração, etc.). Os comandos Diferença e Exclusão se aplicam apenas a dois objetos selecionados; os outros comandos podem processsar qualquer quantidade de objetos de uma só vez. O resultado sempre recebe o estilo do objeto do fundo.
+  As teclas de atalho para estes comandos fazem alusão às analogias aritméticas das operações booleanas (união se refere à adição, diferença a subtração, etc.). Os comandos Diferença e Exclusão se aplicam apenas a dois objetos selecionados; os outros comandos podem processsar qualquer quantidade de objetos de uma só vez. O resultado sempre recebe o estilo do objeto do fundo.
  
- 
- 
+ 
+ 
   
    
   
-  O resultado do comando Exclusão se parece com o do comando Combinar (veja acima), mas é diferente pelo fato que Exclusão adiciona nós extras onde os caminhos originais se cruzam. A diferença entre Divisão e Cortar Caminho é que o primeiro corta o objeto do fundo por inteiro na área em que o objeto do topo o sobrepõe, enquanto o último apenas corta o traço do objeto do fundo nos pontos de contato com o objeto do topo e remove qualquer preenchimento (isto é adequado para cortar traços sem preenchimento em pedaços).
+  O resultado do comando Exclusão se parece com o do comando Combinar (veja acima), mas é diferente pelo fato que Exclusão adiciona nós extras onde os caminhos originais se cruzam. A diferença entre Divisão e Cortar Caminho é que o primeiro corta o objeto do fundo por inteiro na área em que o objeto do topo o sobrepõe, enquanto o último apenas corta o traço do objeto do fundo nos pontos de contato com o objeto do topo e remove qualquer preenchimento (isto é adequado para cortar traços sem preenchimento em pedaços).
  
- 
-  Comprimir e expandir
+ 
+  Comprimir e expandir
  
- 
- 
+ 
+ 
   
    
   
-  O Inkscape é capaz de expandir e contrair formas não apenas modificando suas dimensões, mas também executando offset em um caminho, ou seja, deslocando perpendicularmente o caminho em cada ponto. Os comandos correspondentes são chamados Comprimir (Ctrl+() e Expandir (Ctrl+)). Abaixo, está o caminho original (em vermelho) e vários caminhos comprimidos ou expandidos a partir do original:
+  O Inkscape é capaz de expandir e contrair formas não apenas modificando suas dimensões, mas também executando offset em um caminho, ou seja, deslocando perpendicularmente o caminho em cada ponto. Os comandos correspondentes são chamados Comprimir (Ctrl+() e Expandir (Ctrl+)). Abaixo, está o caminho original (em vermelho) e vários caminhos comprimidos ou expandidos a partir do original:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
-  Os comandos Comprimir e Expandir produzem caminhos (converte o objeto original em caminho se ele ainda não é um caminho). Geralmente, mais conveniente é o Tipografia Dinâmica (Ctrl+J) que cria um objeto com uma alça que pode ser arrastada (similar à alça de uma forma) controlando a distância do offset. Selecione o objeto abaixo, mude para o ferramenta de edição de nós, e arraste suas alças para ter uma idéia:
+  Os comandos Comprimir e Expandir produzem caminhos (converte o objeto original em caminho se ele ainda não é um caminho). Geralmente, mais conveniente é o Tipografia Dinâmica (Ctrl+J) que cria um objeto com uma alça que pode ser arrastada (similar à alça de uma forma) controlando a distância do offset. Selecione o objeto abaixo, mude para o ferramenta de edição de nós, e arraste suas alças para ter uma idéia:
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Tal objeto de Tipografia Dinâmica grava o caminho original, assim ele não "se degrada" quando você altera a distância do offset várias vezes. Quando você não mais desejar ajustá-lo, você sempre pode converter um objeto offset de volta em um caminho.
  
- 
- 
+ 
+ 
   
    
   
   Ainda mais prático é um objeto de Tipografia Ligada, similar ao objeto de Tipografia Dinâmica exceto pelo fato que ele está conectado a um outro caminho que permanece editável. Você pode fazer qualquer quantidade de objetos de Tipografia Ligada (linked offsets) a partir de um caminho fonte. Abaixo, o caminho fonte está em vermelho, um offset ligado ao caminho fonte tem traço preto e nenhum preenchimento, o outro, preenchimento preto e nenhum traço.
  
- 
- 
+ 
+ 
   
    
   
-  Selecione o objeto vermelho e edite seus nós; veja como os dois offsets respondem. Agora selecione qualquer um dos offsets e arraste sua alça para ajustar o seu raio. Finalmente, observe que, ao mover ou transformar o caminho fonte, todos os objetos offset conectados a ele se movem, e como você é capaz de mover ou transformá-los independentemente sem perder a conexão com o caminho fonte.
+  Select the red object and node-edit it; watch how both linked offsets respond. Now
+select any of the offsets and drag its handle to adjust the offset radius. Finally, note
+ how you
+can move or transform the offset objects independently without losing their connection
+with the source.
+
  
- 
+ 
   
   
   
  
- 
-  Simplificação
+ 
+  Simplificação
  
- 
- 
+ 
+ 
   
    
   
-  O principal uso do comando Simplificar (Ctrl+L) é reduzir o número de nós em um caminho enquanto quase preserva sua forma. Isto pode ser útil para caminhos criados pela ferramenta Lápis, uma vez que essa ferramenta algumas vezes cria mais nós que o necessário. Abaixo, a forma à esquerda foi criada pela ferramenta a mão livre, e à direita uma cópia que foi simplificada. O caminho original tem 28 nós, enquanto o simplificado tem 17 (o que significa que é muito mais fácil para trabalhar com a ferramenta de edição de nós) e é mais suave.
+  O principal uso do comando Simplificar (Ctrl+L) é reduzir o número de nós em um caminho enquanto quase preserva sua forma. Isto pode ser útil para caminhos criados pela ferramenta Lápis, uma vez que essa ferramenta algumas vezes cria mais nós que o necessário. Abaixo, a forma à esquerda foi criada pela ferramenta a mão livre, e à direita uma cópia que foi simplificada. O caminho original tem 28 nós, enquanto o simplificado tem 17 (o que significa que é muito mais fácil para trabalhar com a ferramenta de edição de nós) e é mais suave.
  
- 
- 
- 
- 
+ 
+ 
+ 
+ 
   
    
   
-  A quantidade de simplificação (conhecida como limiar) depende do tamanho da seleção. Por essa razão, se você selecionar um caminho junto com algum objeto mais largo, ele será simplificado mais agressivamente que se você o selecionar sozinho. Além disso, o comando Simplificar é acelerado. Isto significa que se você pressionar Ctrl+L várias vezes sucessivamente (em até 0,5 segundo entre as chamadas sucessivas), o limiar cresce a cada chamada. (Se você faz outro Simplificar depois de uma pausa, o limiar volta para seu valor padrão.) Fazendo uso da aceleração, é fácil aplicar a quantia exata de simplificação que você precisa para cada caso.
+  A quantidade de simplificação (conhecida como limiar) depende do tamanho da seleção. Por essa razão, se você selecionar um caminho junto com algum objeto mais largo, ele será simplificado mais agressivamente que se você o selecionar sozinho. Além disso, o comando Simplificar é acelerado. Isto significa que se você pressionar Ctrl+L várias vezes sucessivamente (em até 0,5 segundo entre as chamadas sucessivas), o limiar cresce a cada chamada. (Se você faz outro Simplificar depois de uma pausa, o limiar volta para seu valor padrão.) Fazendo uso da aceleração, é fácil aplicar a quantia exata de simplificação que você precisa para cada caso.
  
- 
- 
+ 
+ 
   
    
   
-  Besides smoothing freehand strokes, Simplify can be used for various
+  Besides smoothing freehand strokes, Simplify can be used for various
 creative effects. Often, a shape which is rigid and geometric benefits from some amount
 of simplification that creates cool life-like generalizations of the original form -
 melting sharp corners and introducing very natural distortions, sometimes stylish and
 sometimes plain funny. Here's an example of a clipart shape that looks much nicer after
-Simplify:
+Simplify:
 
  
- Original
- Simplificação leve
- Simplificação agressiva
- 
- 
- 
- 
-  Criando texto
+ Original
+ Simplificação leve
+ Simplificação agressiva
+ 
+ 
+ 
+ 
+  Criando texto
  
- 
- 
+ 
+ 
   
    
   
   O Inkscape é capaz de criar textos longos e complexos. No entanto, é adequado também para a criação de pequenos textos tais como cabeçalhos, banners, logotipos, etiquetas e legendas de diagramas, etc. Esta seção é uma introdução muito básica sobre as capacidades de texto do Inkscape.
  
- 
- 
+ 
+ 
   
    
   
   Criar um objeto texto é tão simples quanto mudar para a ferramenta Texto (F8), clicar em qualquer lugar no documento, e digitar seu texto. Para mudar a família da fonte, estilo, tamanho e alinhamento, abra a caixa de diálogos Texto e Fonte (Shift+Ctrl+T). Essa caixa também tem uma aba de entrada de texto onde você pode editar o texto selecionado - em algumas situações, pode ser mais conveniente que editá-lo diretamente na tela (em particular, esta aba tem suporte a verificação ortográfica em tempo real).
  
- 
- 
+ 
+ 
   
    
   
@@ -461,43 +466,43 @@ objects -so you can click to select and position the cursor in any
 existing text object (such as this paragraph).
 
  
- 
- 
+ 
+ 
   
    
   
   Umas das operações mais comuns na elaboração de textos é o ajuste do espaçamento entre as letras e linhas. Como sempre, o Inkscape fornece teclas de atalho para isto. Quando você está editando um texto, as teclas Alt+< e Alt+> mudam o espaçamento das letras na linha atual de um texto, de modo que o comprimento total desta linha mude em 1 pixel no zoom atual (compare com a ferramenta de Seleção onde as mesmas teclas redimensionam o objeto em proporção de pixel). Como regra, se o tamanho da fonte em um objeto texto é maior que o padrão, provavelmente será benéfico comprimir as letras deixando-as um pouco mais apertadas que o padrão. Eis um exemplo:
  
- Original
- Espaçamento entre as letras diminuído
- Inspiration
- Inspiration
- 
- 
+ Original
+ Espaçamento entre as letras diminuído
+ Inspiration
+ Inspiration
+ 
+ 
   
    
   
   A variação com letras apertadas parece um pouco melhor para um cabeçalho, mas ainda não é perfeita: as distâncias entre as letras não são uniformes, por exemplo "a" e "t" estão muito separadas enquanto "t" e "i" estão muito próximas. A quantidade de tais espaçamentos imperfeitos (especialmente visíveis em tamanhos grandes de fonte) é maior em fontes de baixa qualidade que nas de alta qualidade; no entanto, em qualquer composição de texto e em qualquer fonte você provavelmente encontrará algumas letras que se beneficiarão do ajuste do espaçamento.
  
- 
- 
+ 
+ 
   
    
   
   O Inkscape facilita bastante tais ajustes. Apenas mova o cursor de edição de texto entre os caracteres mal espaçados e use Alt+setas para mover as letras a partir do cursor. Abaixo o mesmo exemplo, desta vez com ajuste manual de modo que as letras foram posicionadas uniformemente:
  
- Espaçamento entre as letras diminuído, com espaçamento ajustado manualmente
- Inspiration
- 
- 
+ Espaçamento entre as letras diminuído, com espaçamento ajustado manualmente
+ Inspiration
+ 
+ 
   
    
   
   Além de mover as letras horizontalmente com Alt+seta esquerda ou Alt+seta direita, você pode também movê-las verticalmente usando Alt+seta para cima ou Alt+seta para baixo:
  
- Inspiration
- 
- 
+ Inspiration
+ 
+ 
   
    
   
@@ -509,34 +514,34 @@ disadvantage to the “text as text†approach is that you need to have the ori
 installed on any system where you want to open that SVG document.
 
  
- 
- 
+ 
+ 
   
    
   
   Similar ao espaçamento das letras, você pode ajustar o espaçamento das linhas em objetos textos com várias linhas. Tente Ctrl+Alt+< e Ctrl+Alt+> em qualquer parágrafo neste tutorial para variar a altura total do objeto texto em 1 pixel no zoom atual. Como na ferramenta de seleção, pressionar Shift com qualquer tecla de atalho de espaçamento ou ajuste produz um efeito 10 vezes maior que sem Shift.
  
- 
-  Editor XML
+ 
+  Editor XML
  
- 
- 
+ 
+ 
   
    
   
   A última ferramenta poderosa do Inkscape é o editor XML (Shift+Ctrl+X). Ele mostra a árvore XML completa do documento, sempre refletindo seu estado atual. Você pode editar seu desenho e observar as mudanças correspondentes na árvore XML. Além disso, é possível editar qualquer texto, elemento, ou atributo dos nós no editor XML e ver o resultado bem na sua tela. Esta é a melhor ferramenta imaginável para aprender SVG interativamente, e te deixa livre pra fazer truques que seriam impossíveis com as ferramentas comuns de edição.
  
- 
-  Conclusão
+ 
+  Conclusão
  
- 
- 
+ 
+ 
   
    
   
-  Este tutorial mostra apenas uma pequena parte do que o Inkscape é capaz. Esperamos que você tenha gostado. Não fique com medo de experimentar e compartilhar o que você criou. Por favor acesse www.inkscape.org para mais informações, as versões mais recentes, e para obter ajuda da comunidade de usuários e desenvolvedores.
+  Este tutorial mostra apenas uma pequena parte do que o Inkscape é capaz. Esperamos que você tenha gostado. Não fique com medo de experimentar e compartilhar o que você criou. Por favor acesse www.inkscape.org para mais informações, as versões mais recentes, e para obter ajuda da comunidade de usuários e desenvolvedores.
  
- 
+ 
   
    
    
@@ -566,8 +571,8 @@ installed on any system where you want to open that SVG document.
     
     
    
-   
-   Use Ctrl+up arrow to scroll 
+   
+   Use Ctrl+up arrow to scroll 
    
   
  
diff --git a/share/tutorials/tutorial-basic.pt_BR.svg b/share/tutorials/tutorial-basic.pt_BR.svg
index ec6815ad8..cf7b3ca0e 100644
--- a/share/tutorials/tutorial-basic.pt_BR.svg
+++ b/share/tutorials/tutorial-basic.pt_BR.svg
@@ -36,105 +36,105 @@
    
    
   
-  
-  Use Ctrl+down arrow to scroll 
+  
+  Use Ctrl+down arrow to scroll 
   
  
- 
+ 
   ::BÃSICO
  
 
- 
- 
+ 
+ 
   
    
   
   Este tutorial demonstra o funcionamento básico do Inkscape. É um documento regular que você pode ver, editar, copiar dele, ou gravar.
  
- 
- 
+ 
+ 
   
    
   
   O tutorial Básico aborda a navegação na lousa (ou canvas, em inglês), administração de documentos, funcionamento básico das ferramentas de forma, técnicas de seleção, transformação de objetos com a ferramenta de seleção, agrupamento, configuração de preencimento e traço, alinhamento, e superposição (ordem-z). Para tópicos mais avançados, verifique os outros tutoriais no menu Ajuda.
  
- 
-  Navegando pela tela
+ 
+  Navegando pela tela
  
- 
- 
+ 
+ 
   
    
   
   Existem muitas maneiras de navegar (rolar) a lousa do documento. Tente as teclas Ctrl+setas para rolar pelo teclado. (Tente isto agora para rolar este documento para baixo.) Você pode também arrastar a lousa com o botão do meio do mouse. É possível também usar as barras de rolagem (pressione Ctrl+B para mostrar ou escondê-las). A roda do seu mouse também funciona para rolar verticalmente; pressione Shift junto com a roda para rolar horizontalmente.
  
- 
-  Aumentantdo e diminuindo o Zoom
+ 
+  Aumentantdo e diminuindo o Zoom
  
- 
- 
+ 
+ 
   
    
   
   O jeito mais fácil de dar um zoom é pressionando as teclas - e + (ou =). Você pode também usar Ctrl+clique com o botão do meio ou Ctrl+clique com o botão direito para aumentar o zoom, Shift+clique com o botão do meio ou Shift+clique com o botão direito para diminuir o zoom, ou gire a roda do mouse com Ctrl. Ainda, você pode clicar no campo do zoom (no canto esquerdo inferior da janela do documento), digitar um valor do zoom preciso em %, e pressionar Enter. Também temos a ferramenta Ampliar ou reduzir nível de Zoom (na barra Caixa de Ferramentas à esquerda) que te permite dar um zoom em uma área arrastando o cursor sobre ela.
  
- 
- 
+ 
+ 
   
    
   
   O Inkscape também mantém um histórico dos zoom's que você usou nesta sessão de trabalho. Pressione a tecla ` para retornar ao zoom anterior, ou Shift+` para ir ao seguinte.
  
- 
-  Ferramentas do Inkscape
+ 
+  Ferramentas do Inkscape
  
- 
- 
+ 
+ 
   
    
   
   A barra de ferramentas vertical à esquerda mostra as ferramentas de desenho e edição do Inkscape. Na parte superior da janela, abaixo do menu, localiza-se a Barra de Comandos com botões de comando gerais e a barra Controles de Ferramenta com controles que são específicos para cada ferramenta. A Barra de Estado na parte inferior da janela mostra dicas úteis e mensagens enquanto você trabalha.
  
- 
- 
+ 
+ 
   
    
   
   Muitas operações estão disponíveis através de teclas de atalho. Abra Ajuda > Teclas e Atalhos para ver a referência completa.
  
- 
-  Criando e administrando documentos
+ 
+  Criando e administrando documentos
  
- 
- 
+ 
+ 
   
    
   
-  To create a new empty document, use File > New > Default 
+  To create a new empty document, use File > New 
 or press Ctrl+N. To create a new document from one of Inkscape's many 
-templates, use File > New > Templates... or press 
+templates, use File > New from Template... or press 
 Ctrl+Alt+N
  
- 
- 
+ 
+ 
   
    
   
-  To open an existing SVG document, use File >
-Open (Ctrl+O). To save, use File > Save
-(Ctrl+S), or Save As (Shift+Ctrl+S)
+  To open an existing SVG document, use File >
+Open (Ctrl+O). To save, use File > Save
+(Ctrl+S), or Save As (Shift+Ctrl+S)
 to save under a new name.  (Inkscape may still be unstable, so remember to save
 often!)
  
- 
- 
+ 
+ 
   
    
   
   O Inkscape usa o formato SVG (Scalable Vector Graphics) para seus arquivos. O SVG é um padrão aberto vastamente suportado por softwares gráficos. Arquivos SVG são baseados em XML e podem ser editados com qualquer editor de textos ou de XML (isto é, além do editor do Inkscape). Além de SVG, o Inkscape pode importar e exportar vários outros formatos (EPS, PNG).
  
- 
- 
+ 
+ 
   
    
   
@@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do
 process. If you open multiple files from a file browser or launch more than
 one Inkscape process from an icon it will not work.
  
- 
-  Criando formas
+ 
+  Criando formas
  
- 
- 
+ 
+ 
   
    
   
   Hora para algumas formais legais! Clique na ferramenta Retângulo na barra Caixa de Ferramentas (ou pressione F4) e clique e arraste, em um novo documento vazio ou aqui mesmo:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
@@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work.
 and fully opaque. We'll see how to change that below. With other tools, you can
 also create ellipses, stars, and spirals:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Estas ferramentas são conhecidas coletivamente como ferramentas de forma. Cada forma criada mostra uma ou mais alças em forma de diamante; tente arrastá-las para ver como a forma responde. O painel Controles de Ferramenta para uma ferramenta de forma é outra maneira de modificar uma forma; estes controles afetam as formas atualmente selecionadas (ou seja, aquelas que mostram as alças) e configuram o padrão que será aplicado a formas recém criadas.
  
- 
- 
+ 
+ 
   
    
   
   Para desfazer sua última ação, pressione Ctrl+Z. (Ou, se você mudar de idéia de novo, você pode refazer a ação desfeita com Shift+Ctrl+Z.)
  
- 
-  Movendo, redimensionando, girando
+ 
+  Movendo, redimensionando, girando
  
- 
- 
+ 
+ 
   
    
   
   A ferramenta do Inkscape mais frequentemente usada é a ferramenta deSeleção (ou seletor). Clique no botão mais alto (em forma de cursor) na barra Caixa de Ferramentas, ou pressione F1 ou Barra de Espaço. Agora você pode selecionar qualquer objeto na tela. Clique no retângulo abaixo.
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Você verá oito alças em forma de seta aparecerem ao redor do objeto. Agora você pode:
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Mover o objeto arrastando-o. (Pressione Ctrl para restringir o movimento a horizontal e vertical.)
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Redimensionar o objeto arrastando qualquer alça. (Pressione Ctrl para preservar a proporção altura/largura original.)
  
- 
- 
+ 
+ 
   
    
   
   Agora clique no retângulo novamente. As alças mudam. Agora você pode:
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Girar o objeto arrastando as alças dos cantos. (Pressione Ctrl para restringir a rotação a incrementos de 15 graus. Arraste a marca em forma de cruz para determinar o centro de rotação.)
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Distorcer (tosar) o objeto arrastando as alças centrais. (Pressione Ctrl para restringir a distorção a incrementos de 15 graus.)
  
- 
- 
+ 
+ 
   
    
   
   Com o seletor, você pode também usar os campos numéricos na barra Controles de Ferramenta (acima da lousa) para configurar valores exatos para as coordenadas (X e Y) e tamanho (W e H) da seleção.
  
- 
-  Transformando com as teclas
+ 
+  Transformando com as teclas
  
- 
- 
+ 
+ 
   
    
   
   Uma das características do Inkscape que o diferencia da maioria dos outros editores vetoriais é sua ênfase na acessibilidade através do teclado. Dificilmente existe algum comando ou ação que seja impossível de realizar a partir do teclado, e transformar objetos não é exceção.
  
- 
- 
+ 
+ 
   
    
   
@@ -294,180 +294,185 @@ and Ctrl+< scale up or down to 200% o
 respectively.  Default rotates are by 15 degrees; with Ctrl, you rotate
 by 90 degrees.
  
- 
- 
+ 
+ 
   
    
   
   Entretanto, talvez a mais útil seja a transformação em escala de pixel, executada usando Alt com as teclas de transformação. Por exemplo, Alt+setas moverá a seleção em 1 pixel no zoom atual (ou seja em 1 pixel de tela, não confunda com a unidade px que é uma unidade de comprimento do SVG independente do zoom). Isto significa que se você aumentar o zoom, ao pressionar Alt+setas resultará em um movimento absoluto menor que ainda se parecerá com um movimento suave de um pixel na sua tela. Assim é possível posicionar os objetos com precisão arbitrária simplesmente aumentando ou diminuindo o zoom como desejado.
  
- 
- 
+ 
+ 
   
    
   
   De maneira semelhante, Alt+> e Alt+< modificam as dimensões do objeto de modo que seu tamanho visível altere em um pixel de tela, e Alt+[ e Alt+] giram-no de modo que o ponto mais longe do centro se mova em um pixel de tela.
  
- 
- 
+ 
+ 
   
    
   
   Nota: usuários do Linux podem não obter os resultados esperados com a combinação Alt+setas e algumas outras combinações se seus gerenciadores de janelas executam estes eventos de tecla antes do Inkscape. Uma solução seria modificar a configuração do gerenciador de janelas.
  
- 
-  Seleções Múltiplas
+ 
+  Seleções Múltiplas
  
- 
- 
+ 
+ 
   
    
   
   Você pode selecionar qualquer quantidade de objetos simultaneamente clicando sobre juntamente com Shift. Ainda mais, você pode arrastar o cursor em volta dos objetos que deseja selecionar; isto se chama seleção elástica. (O seletor cria seleção elástica quando se arrasta a partir de um espaço vazio; entretanto, se você pressionar Shift antes de começar a arrastar, o Inkscape sempre criará a seleção elástica.) Pratique selecionando todas as três formas abaixo:
  
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Agora, use a seleção elástica (pelo arrasto ou Shift+arrasto) para selecionar as duas elipses mas não o retângulo:
  
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Cada objeto individual dentro de uma seleção mostra uma marca de seleção — por padrão, uma caixa retangular pontilhada. Estas marcas facilitam a visualização imediata do que está e não está selecionado. Por exemplo, se você selecionar tanto as duas elipses quanto o retângulo, sem as marcas seria difícil adivinhar se as elipses estão ou não selecionadas.
  
- 
- 
+ 
+ 
   
    
   
   Shift+Clique sobre um objeto selecionado o exclui da seleção. Selecione todos os três objetos acima, depois use Shift+Clique para excluir ambas as elipses da seleção deixando apenas o retângulo selecionado.
  
- 
- 
+ 
+ 
   
    
   
   Pressionando Esc desfaz a selecão de qualquer objeto selecionado. Ctrl+A seleciona todos os objetos na camada atual (se você não criou camadas, isto é o mesmo que todos os objetos no documento).
  
- 
-  Agrupando
+ 
+  Agrupando
  
- 
- 
+ 
+ 
   
    
   
   Vários objetos podem ser combinados em um grupo. Um grupo se comporta como um objeto único quando você arrasta ou transforma-o. Abaixo, os três objetos à esquerda estão independentes; os mesmo três objetos à direita estão agrupados. Tente arrastar o grupo.
  
- 
- 
- 
- 
+ 
+ 
+ 
+ 
   
   
   
  
- 
- 
+ 
+ 
   
    
   
   Para criar um grupo, selecione um ou mais objetos e pressione Ctrl+G. Para desagrupar um ou mais grupos, selecione-os e pressione Ctrl+U. Os mesmo grupos podem ser agrupados, como qualquer outro objeto; tais grupos recursivos podem por-se em profundidades arbitrárias. Entretanto, Ctrl+U apenas desagrupa o nível mais alto de agrupamento em uma seleção; você vai precisar pressionar Ctrl+U repetidamente se você quiser desagrupar completamente um grupo "profundo" dentro de outro grupo.
  
- 
- 
+ 
+ 
   
    
   
   Você não tem que necessariamente desagrupar, a não ser que você queira editar um objeto dentro de um grupo. Apenas Ctrl+Clique sobre o objeto e este será selecionado e editável sozinho, ou Shift+Ctrl+Clique sobre vários objetos (dentro ou fora de qualquer grupo) para seleção múltipla independente do agrupamento. Tente mover ou transformar as formas individualmente no grupo (acima à direita) sem desagrupá-lo, depois desfaça a seleção e selecione o grupo normalmente para ver que ele ainda permanece agrupado.
  
- 
-  Preenchimento e traço
+ 
+  Preenchimento e traço
  
- 
- 
+ 
+ 
   
    
   
-  Muitas das funções do Inkscape estão disponíveis através das caixas de diálogos. Provavelmente a maneira mais simples de pintar um objeto de alguma cor é abrir a caixa de diálogos Modelos de Cores do menu Objetos, selecionar um objeto, e clicar em um modelo de cor para pintá-lo (modifica sua cor de preenchimento).
+  Probably the simplest way to paint an object some color is to
+select an object, and click a swatch in the palette below the canvas to
+paint it (change its fill color).
+Alternatively, you can open the Swatches dialog from the
+View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint
+it (change its fill color).
  
- 
- 
+ 
+ 
   
    
   
   Mais poderosa é a caixa de diálogos Preenchimento e Traço (Shift+Ctrl+F). Selecione a forma abaixo e abra a caixa de diálogos Preenchimento e Traço.
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Você verá que a caixa tem três abas: Preencher, Pintura de traço e Estilo de traço. A aba Preencher te permite editar o preenchimento (interior) do(s) objeto(s) selecionado(s). Usando os botões logo abaixo da aba, você pode selecionar tipos de preenchimento, incluindo nenhum preenchimento (o botão com o X), preenchimento de cor lisa, bem como gradientes lineares ou radiais. Para a forma acima, o botão de cor lisa será ativado.
  
- 
- 
+ 
+ 
   
    
   
   Mais abaixo, você vê uma coleção de seletores de cores, cada um em sua própria aba: RGB, CMYK, HSL, e Roda. Talvez o mais prático seja o seletor Roda, onde você pode girar o triângulo para escolhar uma cor na roda, e depois selecionar um tom dessa cor dentro do triângulo. Todos os seletores de cor contém um deslizador para configurar o alfa (transparência) do(s) objeto(s) selecionado(s) .
  
- 
- 
+ 
+ 
   
    
   
   Sempre que você seleciona um objeto, o seletor de cores é atualizado para mostrar seu preenchimento e traço atual (quando múltiplos objetos são selecionados, a caixa de diálogos mostra sua cor média). Brinque com estes exemplos ou crie os seus próprios:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Usando a aba Pintura de traço, você pode remover o traço (contorno) do objeto, ou atribuir qualquer cor ou transparência:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   A última aba, Estilo de traço, te permite configurar a largura e outros parâmetros do traço:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
@@ -510,45 +515,45 @@ by 90 degrees.
    
   
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Quando você muda de cor lisa para gradiente, o gradiente recém criado usará a cor lisa anterior, variando de opaca a transparente. Mude para a ferramenta Gradiente (Ctrl+F1) para arrastar as alças do gradiente — os controles conectados por linhas que definem a direção e extensão do gradiente. Quando qualquer alça do gradiente é selecionada (destacada em azul), a caixa de diálogos Preenchimento e Traço configura a cor dessa alça em vez da cor do objeto inteiro selecionado.
  
- 
- 
+ 
+ 
   
    
   
   Uma outra maneira prática de mudar a cor de um objeto é através da ferramenta Conta-gotas (F7). Apenas clique em qualquer lugar do desenho com essa ferramenta, e a cor capturada será atribuída ao preenchimento do objeto selecionado (Shift+clique atribui a cor do traço).
  
- 
-  Duplicação, alinhamento, distribuição
+ 
+  Duplicação, alinhamento, distribuição
  
- 
- 
+ 
+ 
   
    
   
   Uma das operações mais comuns é a de duplicar um objeto (Ctrl+D). O objeto duplicado é colocado exatamente acima do original e selecionado, assim você pode arrastá-lo com o mouse ou pelas setas do teclado. Para praticar, tente preencher a linha com cópias deste quadrado preto:
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Chances are, your copies of the square are placed more or less randomly. This is
-where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares
+where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares
 (Shift+click or drag a rubberband), open the dialog and press the
 “Center on horizontal axis†button, then the “Make horizontal gaps between objects
 equal†button (read the button tooltips). The objects are now neatly aligned and
@@ -570,98 +575,105 @@ examples:
    
   
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-  Ordem-Z (ou superposição)
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Ordem-Z (ou superposição)
  
- 
- 
+ 
+ 
   
    
   
-  O termo ordem-z se refere a ordem de empilhamento de objetos em um desenho, ou seja, a que objetos estão no topo e obscurecem os outros. Os dois comandos no menu Objeto, Levantar no Topo (tecla Home) e Abaixar para o Fundo (tecla End), moverá os objetos selecionados para a parte mais alta ou mais baixa da superposição dos objetos. Dois outros comandos, Levantar (PgUp) e Abaixar (PgDn), abaixará ou levantará a seleção em apenas um passo, ou seja, move para cima um objeto não selecionado na superposição (apenas objetos que sobrepõem a seleção contam; se nada sobrepõe a seleção, Levantar e Abaixar move-a completamente para cima ou para baixo respectivamente).
+  The term z-order refers to the stacking order of objects in a drawing,
+i.e. to which objects are on top and obscure others. The two commands in the Object
+menu, Raise to Top (the Home key) and Lower to Bottom (the
+End key), will move your selected objects to the very top or very
+bottom of the current layer's z-order. Two more commands, Raise (PgUp)
+and Lower (PgDn), will sink or emerge the selection one step only,
+i.e. move it past one non-selected object in z-order (only objects that overlap the
+selection count, based on their respective bounding boxes).
  
- 
- 
+ 
+ 
   
    
   
   Pratique usando estes comandos revertendo a ordem-z dos objetos abaixo, de modo que a elipse mais à esquerda fique no topo e a elipse mais à direita fique no fundo:
  
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Um tecla de atalho de seleção muito útil é Tab. Se nada está selecionado, ela seleciona o objeto que está mais ao fundo; senão ela seleciona o objeto acima do(s) objeto(s) selecionado(s) na ordem-z. Shift+Tab funciona de maneira contrária, começando a partir do objeto situado no topo e procedendo para baixo. Uma vez que os objetos que você cria são adicionados ao topo da pilha, pressionar Shift+Tab com nada selecionado, o objeto que você criou por último será selecionado. Pratique as teclas Tab e Shift+Tab na pilha de elipses acima.
  
- 
-  Selecionando o objeto de baixo e arrastando
+ 
+  Selecionando o objeto de baixo e arrastando
  
- 
- 
+ 
+ 
   
    
   
   O que fazer se o objeto que você precisa está escondido atrás de outro objeto? Você consegue ainda ver o objeto do fundo se o que está no topo for (parcialmente) transparente, mas clicando sobre ele, o objeto do topo que será selecionado, não o que você precisa.
  
- 
- 
+ 
+ 
   
    
   
   Para isto é que serve Alt+clique. O primeiro Alt+clique seleciona o objeto do topo como um simples clique normal. No entanto, o próximo Alt+clique no mesmo ponto selecionará o objeto abaixo do que está no topo; o pŕoximo, o objeto mais abaixo, etc. Assim, vários Alt+cliques sucessivos navegará, de cima a baixo, através de toda a pilha de objetos na ordem-z no ponto do clique. Quanto o objeto do fundo é atingido, o próximo Alt+clique selecionará, naturalmente, o objeto do topo novamente.
  
- 
- 
+ 
+ 
   
    
   
@@ -674,95 +686,95 @@ either turn it off, or map it to use the Meta key (aka Windows key), so
 Inkscape and other applications may use the Alt key freely.]
 
  
- 
- 
+ 
+ 
   
    
   
   Isto é bom, mas uma vez que você selecionou um objeto que está coberto por outro, o que você pode fazer com ele? Usar as teclas para transformá-lo, e arrastar as alças de seleção. No entanto, ao arrastar o próprio objeto, a seleção do objeto do topo será retomada (para isto é que clicar-e-arrastar foi projetado — seleciona o objeto (do topo) sob o cursor primeiro, depois arrasta a seleção). Para dizer ao Inkscape para arrastar o que está selecionado agora sem selecionar mais nada, use Alt+arrastar. Isto moverá a seleção atual não importa de onde você arraste seu mouse.
  
- 
- 
+ 
+ 
   
    
   
   Pratique Alt+clique e Alt+arrastar nas duas formas marrons que estão abaixo do retângulo transparente verde:
  
- 
- 
- 
- 
-  Selecting similar objects
+ 
+ 
+ 
+ 
+  Selecting similar objects
  
- 
- 
+ 
+ 
   
    
   
   Inkscape can select other objects similar to the object currently selected. 
 For example, if you want to select all the blue squares below first select one of the 
-blue squares, and use Edit > Select Same > 
+blue squares, and use Edit > Select Same > 
 Fill Color from the menu. All the objects with a fill color the same 
 shade of blue are now selected.
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   In addition to selecting by fill color, you can select multiple similar objects
 by stroke color, stroke style, fill & stroke, and object type.
  
- 
-  Conclusão
+ 
+  Conclusão
  
- 
- 
+ 
+ 
   
    
   
-  Isto conclui o tutorial Básico. Tem muito mais que isso no Inkscape, mas com as técnicas descritas aqui, você já será capaz de criar gráficos simples porém úteis. Para coisas mais avançadas, leia o tutorial Avançado e os outros em Ajuda > Tutoriais.
+  Isto conclui o tutorial Básico. Tem muito mais que isso no Inkscape, mas com as técnicas descritas aqui, você já será capaz de criar gráficos simples porém úteis. Para coisas mais avançadas, leia o tutorial Avançado e os outros em Ajuda > Tutoriais.
  
- 
+ 
   
    
    
@@ -792,8 +804,8 @@ by stroke color, stroke style, fill & stroke, and object type.
     
     
    
-   
-   Use Ctrl+up arrow to scroll 
+   
+   Use Ctrl+up arrow to scroll 
    
   
  
diff --git a/share/tutorials/tutorial-calligraphy.pt_BR.svg b/share/tutorials/tutorial-calligraphy.pt_BR.svg
index 28c35498d..7ae244d60 100644
--- a/share/tutorials/tutorial-calligraphy.pt_BR.svg
+++ b/share/tutorials/tutorial-calligraphy.pt_BR.svg
@@ -40,104 +40,104 @@
   Use Ctrl+down arrow to scroll 
   
  
- 
+ 
   ::CALIGRAFIA
  
-bulia byak, buliabyak@users.sf.net e josh andler, scislac@users.sf.net
- 
+
+ 
  
   
    
   
   Uma das grandes ferramentas disponíveis no Inkscape é a ferramenta de Caligrafia. Este tutorial te ajudará a se familiarizar com o funcionamento dessa ferramenta, bem como demonstrar algumas técnicas básicas da arte da Caligrafia.
  
- 
+ 
  
   
    
   
   Use Ctrl+flechas, roda do mouse, ou arraste com o botão do meio para rolar a página para baixo. Para saber o básico sobre criação, seleção, e transformação de objetos, veja o tutorial Básico em Ajuda > Tutoriais.
  
- 
-  História e estilos
+ 
+  História e estilos
  
- 
+ 
  
   
    
   
   Consultando a definição do dicionário, caligrafia significa "escrita bonita" ou "escrita atraente ou elegante". Essencialmente, caligrafia é a arte de fazer escrita manual de um maneira bonita ou elegante. Pode parecer intimador, mas com um pouco de prática, qualquer um pode dominar o básico desta arte.
  
- 
+ 
  
   
    
   
   As primeiras formas de caligrafia remontam às pinturas rupestres. Até aproximadamente 1440 d.C., e antes do surgimento da prensa de imprensão, a caligrafia era o meio de fabricação de livros e outras publicações. Um escrivão tinha que escrever manualmente cada cópia individual de cada livro ou publicação. A escrita manual era realizada com uma pena e tinta sobre materiais tais como pergaminho ou couro. Os estilos de letra usados através dos tempos incluem o Rústico, Carolíngio, Letra-Escura, etc. Talvez o uso mais comum da caligrafia hoje em dia seja nos convites de casamento.
  
- 
+ 
  
   
    
   
   Existem três estilos principais de caligrafia:
  
- 
- 
+ 
+ 
  
   
    
   
   Ocidental ou Romana
  
- 
- 
+ 
+ 
  
   
    
   
   Arábica
  
- 
- 
+ 
+ 
  
   
    
   
   Chinês ou Oriental
  
- 
+ 
  
   
    
   
   Este tutorial concentra-se principalmente na caligrafia Ocidental, enquanto para os outros dois estilos é necessário o uso de um pincel (em vez de uma caneta-tinteiro), que não é como nossa ferramenta atualmente funciona.
  
- 
+ 
  
   
    
   
   Uma grande vantagem que temos sobre os escrivãos do passado é o comando Desfazer: se você comete um erro, não se perde a página inteira. A ferramenta de Caligrafia do Inkscape também permite algumas técnicas que não seriam possíveis com uma caneta a tinta tradicional.
  
- 
-  Hardware
+ 
+  Hardware
  
- 
+ 
  
   
    
   
   Você obterá melhores resultados se usar uma mesa digitalizadora (por exemplo, uma da Wacom). Graças a flexibilidade de nossa ferramenta, mesmo quem dispõe apenas de mouse é capaz de fazer alguns traços caligráficos bastante intricados, embora se depare com alguma dificuldade ao produzir traços amplos rápidos.
  
- 
+ 
  
   
    
   
   O Inkscape é capaz de utilizar sensibilidade à pressão e  sensibilidade à inclinação de uma caneta digitalizadora que suporta estas características. As funções de sensibilidade estão desativadas por padrão porque elas requerem configuração. Além disso, leve em consideração que caligrafia com uma pena ou caneta-tinteiro também não são muito sensíveis a pressão, ao contrário de um pincel.
  
- 
+ 
  
   
    
@@ -152,17 +152,17 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr
 now on, Inkscape will remember those settings on startup.
 
  
- 
+ 
  
   
    
   
   A caneta de caligrafia do Inkscape pode ser sensível à velocidade do traço (veja "Sinuoso" abaixo), então, se você estiver usando um mouse, você provavelmente vai querer zerar este parâmetro.
  
- 
-  Opções da ferramenta de Caligrafia
+ 
+  Opções da ferramenta de Caligrafia
  
- 
+ 
  
   
    
@@ -174,58 +174,58 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and
 drawing tablets).
 
  
- 
-  Largura & Sinuoso
+ 
+  Largura & Sinuoso
  
- 
+ 
  
   
    
   
   Este par de opções controla a largura de sua caneta. A largura pode variar de 1 a 100 e (por padrão) é medida em unidades relativas ao tamanho de sua janela de edição, independente do zoom. Isto faz sentido, porque a "unidade de medida" natural em caligrafia é o alcance do movimento de sua mão, e portanto é conveniente ter a largura da ponta de sua caneta em constante proporção ao tamanho de sua "tábua de desenho" e não em alguma unidade real a qual poderia depender do zoom. Entretanto este comportamento é opcional, de modo que ele pode ser alterado para quem prefere unidades absolutas qualquer que seja o zoom. Para mudar para esta configuração, use a caixa de verificação (checkbox) na página Preferências da ferramenta (você pode abri-la com clique duplo no botão da ferramenta).
  
- 
+ 
  
   
    
   
   Uma vez que a largura da caneta é alterada com freqüência, você pode ajustá-la sem ter que ir à barra Controles de Ferramenta, usando as setas esquerda e direita ou com uma mesa digitalizadora que suporte a função de sensibilidade à pressão. A melhor coisa sobre estas teclas é que elas funcionam enquanto você desenha, de modo que você pode mudar a largura de sua caneta gradualmente no meio do traço:
  
- width=1, growing....                       reaching 47, decreasing...                                  back to 0
- 
- 
+ width=1, growing....                       reaching 47, decreasing...                                  back to 0
+ 
+ 
  
   
    
   
   A largura do traço da caneta pode também depender da velocidade, controlada pelo parâmetro Sinuoso. Este parâmetro pode tomar valores entre -100 e 100; zero significa que a largura é independente da velocidade, valores positivos fazem traços rápidos mais finos, valores negativos fazem traços rápidos mais amplos. O padrão de 10 significa finura moderada de traços rápidos. Aqui estão alguns exemplos, todos desenhados com largura=20 e ângulo=90:
  
- sinuoso = 0 (largura uniforme)
- thinning = 10
- thinning = 40
- thinning = -20
- thinning = -60
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ sinuoso = 0 (largura uniforme)
+ thinning = 10
+ thinning = 40
+ thinning = -20
+ thinning = -60
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  
   
    
@@ -234,16 +234,16 @@ drawing tablets).
 jerky movements to get strangely naturalistic, neuron-like shapes: 
 
  
- 
- 
- 
- 
- 
- 
- 
-  Ângulo & Fixação
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Ângulo & Fixação
  
- 
+ 
  
   
    
@@ -258,15 +258,15 @@ jerky movements to get strangely naturalistic, neuron-like shapes:
    
   
  
- 
- 
- 
- ângulo = 90 graus
- ângulo = 30 (padrão)
- ângulo = 0
- ângulo = -90 graus
- 
- 
+ 
+ 
+ 
+ ângulo = 90 graus
+ ângulo = 30 (padrão)
+ ângulo = 0
+ ângulo = -90 graus
+ 
+ 
   
   
   
@@ -275,8 +275,8 @@ jerky movements to get strangely naturalistic, neuron-like shapes:
   
   
  
- 
- 
+ 
+ 
  
   
    
@@ -290,26 +290,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at
 different angles (fixation = 100):
 
  
- ângulo = 30
- ângulo = 60
- ângulo = 90
- ângulo = 0
- ângulo = 15
- ângulo = -45
- 
- 
- 
- 
- 
- 
- 
+ ângulo = 30
+ ângulo = 60
+ ângulo = 90
+ ângulo = 0
+ ângulo = 15
+ ângulo = -45
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  
   
    
   
   Como você pode observar, o traço é o mais fino possível quando é desenhado paralelo ao seu ângulo, e mais amplo quando desenhado perpendicular. Ângulos positivos são os mais naturais e tradicionais para caligrafia feita com a mão direita.
  
- 
+ 
  
   
    
@@ -326,19 +326,19 @@ perpendicular to the stroke, and Angle has no effect anymore:
    
   
  
- ângulo = 30fixation = 100
- ângulo = 30fixation = 80
- ângulo = 30fixação = 0
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ ângulo = 30fixation = 100
+ ângulo = 30fixation = 80
+ ângulo = 30fixação = 0
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
   
   
@@ -347,7 +347,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -356,7 +356,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -365,7 +365,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -374,7 +374,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -383,7 +383,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -392,7 +392,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -401,7 +401,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -410,7 +410,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -419,7 +419,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -428,7 +428,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -437,7 +437,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -446,7 +446,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -455,7 +455,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -464,7 +464,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -473,7 +473,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -482,7 +482,7 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
   
   
   
@@ -491,17 +491,17 @@ perpendicular to the stroke, and Angle has no effect anymore:
   
   
  
- 
+ 
  
   
    
   
   Tipograficamente falando, fixação máxima, e por sua vez, contraste de largura do traço máximo (acima à esquerda) são as características de antigas fontes serif, tais como Times ou Bodoni (porque estas fontes foram historicamente uma imitação de caligrafia com caneta fixa). Fixação zero e contraste da largura zero (acima à direita), por outro lado, sugere modernas fontes sans serif como a Helvetica.
  
- 
-  Tremor
+ 
+  Tremor
  
- 
+ 
  
   
    
@@ -512,7 +512,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a
 splotches. This significantly expands the creative range of the tool.
 
  
- 
+ 
   lento
   médio
   rápido
@@ -526,59 +526,59 @@ splotches. This significantly expands the creative range of the tool.
  
  
  
- tremor = 0
- tremor = 10
- tremor = 30
- tremor = 50
- tremor = 70
- tremor = 90
- tremor = 20
- tremor = 40
- tremor = 60
- tremor = 80
- tremor = 100
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-  Wiggle & Mass
+ tremor = 0
+ tremor = 10
+ tremor = 30
+ tremor = 50
+ tremor = 70
+ tremor = 90
+ tremor = 20
+ tremor = 40
+ tremor = 60
+ tremor = 80
+ tremor = 100
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Wiggle & Mass
  
- 
+ 
  
   
    
   
   Ao contrário da largura e do ângulo, estes dois últimos parâmetros definem como a ferramenta "sente" em vez de afetar sua saída visual. Em razão disso não haverá ilustrações nesta seção; em substituição, apenas teste-os você mesmo para ter uma idéia melhor.
  
- 
+ 
  
   
    
@@ -589,7 +589,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer
 wiggle makes the pen to wiggle wildly.
 
  
- 
+ 
  
   
    
@@ -601,39 +601,39 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma
 get slower and smoother pen.
 
  
- 
-  Exemplos de Caligrafia
+ 
+  Exemplos de Caligrafia
  
- 
+ 
  
   
    
   
   Agora que você conhece as capacidades básicas da ferramenta, você pode tentar produzir, de fato, alguma caligrafia. Se você é novo nesta arte, adquira um bom livro de caligrafia e estude-o com o Inkscape. Esta seção te mostrará apenas alguns simples exemplos.
  
- 
+ 
  
   
    
   
   Antes de tudo, para fazer letras, você precisa criar um par de réguas para se guiar. Se você vai escrever em uma caligrafia inclinada ou cursiva, acrescente também algumas guias inclinadas através das réguas, por exemplo:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  
   
    
   
   Então dê um zoom de modo que a altura entre as réguas corresponda ao alcance mais natural do movimento de sua mão, ajuste a largura e o ângulo, e você estará pronto pra começar!
  
- 
+ 
  
   
    
@@ -643,184 +643,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted
 stems. Here are some letter elements for the Uncial hand:
 
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  
   
    
   
   Várias dicas úteis:
  
- 
- 
+ 
+ 
  
   
    
   
   Se sua mão está confortável na mesa digitalizadora, não a movimente. Em vez disso, role a tela (Ctrl+setas) com sua mão esquerda depois de terminar cada letra.
  
- 
- 
+ 
+ 
  
   
    
   
   Se seu último traço não foi bom, apenas desfaça-o (Ctrl+Z). Entretanto, se a forma ficou boa mas a posição ou tamanho, levemente diferentes, é melhor usar a ferramenta de seleção temporariamente (Barra de espaço) e então mova-a levemente/amplie/gire-a o necessário (usando o mouse ou o teclado), e depois pressione Barra de espaço novamente para retornar à ferramenta de caligrafia.
  
- 
- 
+ 
+ 
  
   
    
   
   Terminado uma palavra, mude para a ferramenta de seleção novamente para ajustar a uniformidade das barras e o espaçamento entre as letras. Porém, não exagere; boa caligrafia deve conservar um visual manuscrito um pouco irregular. Resista a tentação de copiar as letras e seus elementos; cada traço deve ser original.
  
- 
+ 
  
   
    
   
   E aqui estão alguns exemplos completos de letras:
  
- 
- 
- 
- 
- 
- 
- 
- 
- Caligrafia Unicial
- Caligrafia Carolíngia
- Caligrafia Gótica
- Caligrafia Bâtarde
- 
- 
- Caligrafia Itálica Floreada
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-  Conclusão
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ Caligrafia Unicial
+ Caligrafia Carolíngia
+ Caligrafia Gótica
+ Caligrafia Bâtarde
+ 
+ 
+ Caligrafia Itálica Floreada
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Conclusão
  
- 
+ 
  
   
    
   
   Caligrafia não é apenas divertida; é uma arte profundamente espiritual que pode transformar sua visão sobre tudo o que faz e vê. A ferramenta de caligrafia do Inkscape pode servir apenas como uma modesta introdução à esta arte. E ainda assim é muito agradável utilizá-la e pode ser útil na criação de desenhos profissionais. Divirta-se!
  
- 
+ 
   
    
    
diff --git a/share/tutorials/tutorial-elements.pt_BR.svg b/share/tutorials/tutorial-elements.pt_BR.svg
index 678528259..ddea10ddd 100644
--- a/share/tutorials/tutorial-elements.pt_BR.svg
+++ b/share/tutorials/tutorial-elements.pt_BR.svg
@@ -36,61 +36,61 @@
    
    
   
-  
-  Use Ctrl+down arrow to scroll 
+  
+  Use Ctrl+down arrow to scroll 
   
  
- 
-  ::ELEMENTOS
+ 
+  ::ELEMENTS OF DESIGN
  
- 
- 
+ 
+ 
   
    
   
   Este tutorial demonstrará os elementos e os princípios de design que são normalmente ensinados a novatos estudantes de arte para entender várias propriedades na criação da arte. Esta não é uma lista completa, então por favor, acrescente, subtraia, e combine para tornar este tutorial mais abrangente.
  
- 
- 
- 
- Elementos
- Principíos
- Cor
- Linha
- Forma
- Espaço
- Textura
- Valor
- Tamanho
- Equilíbrio
- Contraste
- Ênfase
- Proporção
- Padrão
- Gradação
- Composição
- Visão geral
- 
-  Elementos do Design
+ 
+ 
+ 
+ Elementos
+ Principíos
+ Cor
+ Linha
+ Forma
+ Espaço
+ Textura
+ Valor
+ Tamanho
+ Equilíbrio
+ Contraste
+ Ênfase
+ Proporção
+ Padrão
+ Gradação
+ Composição
+ Visão geral
+ 
+  Elementos do Design
  
- 
- 
+ 
+ 
   
    
   
   Os elementos seguintes são os pilares do design.
  
- 
-  Linha
+ 
+  Linha
  
- 
- 
+ 
+ 
   
    
   
   Uma linha é definida como sendo uma marca com comprimento e direção, criada por um ponto que se move através de uma superfície. Uma linha pode variar em comprimento, espessura, direção, curvatura e cor. A linha pode ser bidimensional (uma linha feita com lápis no papel), ou tridimensional.
  
- 
+ 
   
   
   
@@ -102,54 +102,54 @@
   
   
  
- 
-  Forma
+ 
+  Forma
  
- 
- 
+ 
+ 
   
    
   
   Uma figura sólida, a forma é criada quando linhas verdadeiras ou implícitas se encontram ao redor de um espaço. Uma mudança na cor ou no sombreado pode definir uma forma. Formas podem ser divididas em vários tipos: geométrica (quadrado, triângulo, círculo) e orgânica (irregular no contorno).
  
- 
+ 
   
   
   
   
  
- 
-  Tamanho
+ 
+  Tamanho
  
- 
- 
+ 
+ 
   
    
   
   Se refere às variações nas proporções de objetos, linhas ou formas. Existe uma variação tanto real quanto imaginária de tamanhos em objetos.
  
- 
- BIG
- small
- 
-  Espaço
+ 
+ BIG
+ small
+ 
+  Espaço
  
- 
- 
+ 
+ 
   
    
   
   Espaço é a área vazia ou aberta entre, ao redor, acima, abaixo ou dentro dos objetos. Figuras e formas são feitas pelo espaço ao redor e dentro deles. Espaço é geralmente chamado de tridimensional ou bidimensional. Espaço positivo é preenchido por uma figura ou forma. Espaço negativo rodeia uma figura ou forma.
  
- 
- 
- 
- 
- 
-  Cor
+ 
+ 
+ 
+ 
+ 
+  Cor
  
- 
- 
+ 
+ 
   
    
   
@@ -166,12 +166,12 @@
    
   
  
- 
- 
-  Textura
+ 
+ 
+  Textura
  
- 
- 
+ 
+ 
   
    
   
@@ -188,15 +188,15 @@
   
   
  
- 
- 
- 
- 
- 
-  Valor
+ 
+ 
+ 
+ 
+ 
+  Valor
  
- 
- 
+ 
+ 
   
    
   
@@ -222,71 +222,71 @@
    
   
  
- 
- 
- 
- 
- 
- 
-  Principíos do Design
+ 
+ 
+ 
+ 
+ 
+ 
+  Principíos do Design
  
- 
- 
+ 
+ 
   
    
   
   Os princípios usam os elementos do design para criar uma composição.
  
- 
-  Equilíbrio
+ 
+  Equilíbrio
  
- 
- 
+ 
+ 
   
    
   
   Equilíbrio é um sentido de igualdade visual numa forma, figura, valor, cor, etc. O equilíbrio pode ser simétrico ou uniformemente equilibrado ou assimétrico ou não uniformemente equilibrado. Objetos, valores, cores, texturas, formas, figuras, etc., podem ser usados para criar um equilíbrio numa composição.
  
- 
- 
- 
- 
- 
- 
- 
-  Contraste
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Contraste
  
- 
- 
+ 
+ 
   
    
   
   Contraste é a justaposiçao (fusão) de elementos opostos.
  
- 
- 
- 
- 
- 
-  Ênfase
+ 
+ 
+ 
+ 
+ 
+  Ênfase
  
- 
- 
+ 
+ 
   
    
   
   A ênfase é usada para destacar certas partes do trabalho artístico e chamar sua atenção. O centro de interesse ou ponto de foco é o lugar para onde você olha primeiro.
  
- 
- 
- 
- 
- 
- 
-  Proporção
+ 
+ 
+ 
+ 
+ 
+ 
+  Proporção
  
- 
- 
+ 
+ 
   
    
   
@@ -342,9 +342,9 @@
   
   
  
- 
- 
- 
+ 
+ 
+ 
   
   
   
@@ -381,9 +381,9 @@
   
   
  
- Random Ant & 4WD
- SVG  Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/
- 
+ Random Ant & 4WD
+ SVG  Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/
+ 
   
   
   
@@ -403,13 +403,13 @@
   
   
  
- 
- 
- 
-  Padrão
+ 
+ 
+ 
+  Padrão
  
- 
- 
+ 
+ 
   
    
   
@@ -425,14 +425,14 @@
    
   
  
- 
- 
- 
- 
-  Gradação
+ 
+ 
+ 
+ 
+  Gradação
  
- 
- 
+ 
+ 
   
    
   
@@ -448,17 +448,17 @@
   
   
  
- 
- 
- 
- 
- 
- 
- 
-  Composição
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Composição
  
- 
- 
+ 
+ 
   
    
   
@@ -544,103 +544,103 @@
    
   
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
   
   
   
  
- 
- 
-  Bibliografia
+ 
+ 
+  Bibliografia
  
- 
- 
+ 
+ 
   
    
   
   Bibliografia parcial usada para construir este documento.
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
-  http://www.makart.com/resources/artclass/EPlist.html
+  http://www.makart.com/resources/artclass/EPlist.html
 
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
-  http://www.princetonol.com/groups/iad/Files/elements2.htm
+  http://www.princetonol.com/groups/iad/Files/elements2.htm
 
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
-  http://www.johnlovett.com/test.htm
+  http://www.johnlovett.com/test.htm
 
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
-  http://digital-web.com/articles/elements_of_design/
+  http://digital-web.com/articles/elements_of_design/
 
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
-  http://digital-web.com/articles/principles_of_design/
+  http://digital-web.com/articles/principles_of_design/
 
  
- 
- 
+ 
+ 
   
    
   
-  Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping 
-me (http://www.rejon.org/) with this tutorial. Also, thanks to the 
-Open Clip Art Library (http://www.openclipart.org/) and the graphics 
+  Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping 
+me (http://www.rejon.org/) with this tutorial. Also, thanks to the 
+Open Clip Art Library (http://www.openclipart.org/) and the graphics 
 people have submitted to that project.
 
  
- 
+ 
   
    
    
@@ -670,8 +670,8 @@ people have submitted to that project.
     
     
    
-   
-   Use Ctrl+up arrow to scroll 
+   
+   Use Ctrl+up arrow to scroll 
    
   
  
diff --git a/share/tutorials/tutorial-interpolate.pt_BR.svg b/share/tutorials/tutorial-interpolate.pt_BR.svg
index b3897458f..a2257561b 100644
--- a/share/tutorials/tutorial-interpolate.pt_BR.svg
+++ b/share/tutorials/tutorial-interpolate.pt_BR.svg
@@ -1,6 +1,6 @@
 
 
-
+
  
  
   
@@ -36,74 +36,74 @@
    
    
   
-  
-  Use Ctrl+down arrow to scroll 
+  
+  Use Ctrl+down arrow to scroll 
   
  
- 
+ 
   ::INTERPOLAR
  
-Ryan Lerch, ryanlerch at gmail dot com
- 
- 
+
+ 
+ 
   
    
   
   Este documento explica como usar a extensão Interpolar do Inkscape
  
- 
-  Introdução
+ 
+  Introdução
  
- 
- 
+ 
+ 
   
    
   
   O Efeito Interpolar faz a interpolação linear entre dois ou mais caminhos selecionados. Basicamente significa que “preenche os espaços†entre os caminhos e os transforma de acordo com o número de passos dados.
  
- 
- 
+ 
+ 
   
    
   
-  Para usar o efeito de Interpolar, selecione os caminhos que você deseja transformar, e escolha Efeitos > Gerar a partir de Caminho > Interpolar do menu.
+  Para usar o efeito de Interpolar, selecione os caminhos que você deseja transformar, e escolha Efeitos > Gerar a partir de Caminho > Interpolar do menu.
  
- 
- 
+ 
+ 
   
    
   
-  Antes de invocar este efeito, os objetos que você irá transformar precisam estar em caminhos. Isto é feito pela seleção do objeto e usando Caminho >  Objeto para Caminho ou Shift+Ctrl+C. Se seus objetos não são caminhos, o efeito não fará nada.
+  Antes de invocar este efeito, os objetos que você irá transformar precisam estar em caminhos. Isto é feito pela seleção do objeto e usando Caminho >  Objeto para Caminho ou Shift+Ctrl+C. Se seus objetos não são caminhos, o efeito não fará nada.
  
- 
-  Interpolação entre dois de caminhos idênticos
+ 
+  Interpolação entre dois de caminhos idênticos
  
- 
- 
+ 
+ 
   
    
   
   O uso mais simples do efeito Interpolar é para interpolar entre dois caminhos idênticos. Quando o efeito é chamado, o resultado é que o espaço entre os dois caminhos é preenchido com duplicatas dos caminhos originais. O número de passos define quantas destas duplicatas serão criadas.
  
- 
- 
+ 
+ 
   
    
   
   Por exemplo, veja os seguintes dois caminhos:
  
- 
+ 
   
   
  
- 
- 
+ 
+ 
   
    
   
   Agora, selecione os dois caminhos, e execute o efeito de Interpolar com as configurações mostradas na seguinte imagem.
  
- 
+ 
   
   
   
@@ -114,44 +114,44 @@ Ryan Lerch, ryanlerch at gmail dot com
    
    
   
-  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
  
- 
- 
+ 
+ 
   
    
   
   Como pode ser visto no resultado acima, o espaço entre os dois caminhos de forma circular foi preenchido com 6 (o número de passos de interpolação) outros caminhos circulares. Note também que o efeito agrupa todas estas formas.
  
- 
-  Interpolação entre dois de caminhos diferentes
+ 
+  Interpolação entre dois de caminhos diferentes
  
- 
- 
+ 
+ 
   
    
   
   Quando a interpolação é feita em dois caminhos diferentes, o programa interpola a forma de um caminho na do outro caminho. O resultado é que você obtém a sequência da modificação entre os caminhos, com a regularidade ainda definida pelo valor dos Passos da Interpolação.
  
- 
- 
+ 
+ 
   
    
   
   Por exemplo, veja os seguintes dois caminhos:
  
- 
+ 
   
   
  
- 
- 
+ 
+ 
   
    
   
   Agora, selecione os dois caminhos, e execute o efeito Interpolar. O resultado deve ser assim:
  
- 
+ 
   
   
    
@@ -162,30 +162,30 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
   
-  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
  
- 
- 
+ 
+ 
   
    
   
   As can be seen from the above result, the space between the circle-shaped path and the triangle-shaped path has been filled with 6 paths that progress in shape from one path to the other.
  
- 
- 
+ 
+ 
   
    
   
   Quando usando o efeito de Interpolar em dois caminhos diferentes, a posição do nó inicial de cada caminho é importante. Para encontrar o nó inicial de cada caminho, selecione o caminho, depois selecione a Ferramenta de Nó para que os nós apareçam e pressione TAB. O primeiro nó que é selecionado é o primeiro nó de cada caminho.
  
- 
- 
+ 
+ 
   
    
   
   Veja a imagem abaixo, que é idêntica ao exemplo anterior, exceto pelos pontos de nós sendo exibidos. O nó verde de cada caminho é o nó inicial.
  
- 
+ 
   
   
   
@@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch at gmail dot com
   
   
  
- 
- 
+ 
+ 
   
    
   
   O exemplo anterior (mostrado de novo abaixo) foi feito com estes nós como pontos de partida.
  
- 
+ 
   
   
    
@@ -214,16 +214,16 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
   
-  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
  
- 
- 
+ 
+ 
   
    
   
   Agora, note a mudança no resultado da interpolação quando o caminho triangular é espelhado para que o nó inicial esteja em uma posição diferente:
  
- 
+ 
   
    
    
@@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
+ 
   
    
    
@@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
-  Método de Interpolação
+ 
+  Método de Interpolação
  
- 
- 
+ 
+ 
   
    
   
   Um dos parâmetros do efeito de Interpolação é o Método de Interpolação. Existem 2 métodos de interpolação implementados, e eles diferem no modo em que calculam as curvas de novas formas geométricas. As escolhas são Método de Interpolação 1 ou 2.
  
- 
- 
+ 
+ 
   
    
   
   Nos exemplos acima, usamos o Método 2 de Interpolação, e o resultado foi:
  
- 
+ 
   
   
    
@@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch at gmail dot com
   
   
  
- 
- 
+ 
+ 
   
    
   
   Agora compare isso com o Método 1 de Interpolação:
  
- 
+ 
   
   
   
@@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
- 
+ 
+ 
   
    
   
   As diferenças em como estes métodos calcularm os números está além do escopo deste documento, então simplesmente experimente ambos, e use aquele que fornecer o resultado mais próximo do que você deseja.
  
- 
-  Expoente
+ 
+  Expoente
  
- 
- 
+ 
+ 
   
    
   
   O parâmetro expoente controla o espaçamento entre passos da interpolação. Um expoente de 0 faz com que o espaçamento entre as cópias seja igual.
  
- 
- 
+ 
+ 
   
    
   
   Aqui está o resultado de outro exemplo básico com expoente de 0.
  
- 
+ 
   
   
   
@@ -331,16 +331,16 @@ Ryan Lerch, ryanlerch at gmail dot com
    
    
   
-  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
+  Expoente: 0.0Passos de Interpolação: 6Método de Interpolação: 2Duplicate Endpaths: uncheckedEstilo de 
  
- 
- 
+ 
+ 
   
    
   
   O mesmo exemplo com o expoente de 1:
  
- 
+ 
   
   
   
@@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
- 
+ 
+ 
   
    
   
   com um expoente de 2:
  
- 
+ 
   
   
   
@@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
- 
+ 
+ 
   
    
   
   e com expoente de -1:
  
- 
+ 
   
   
   
@@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
- 
+ 
+ 
   
    
   
   Quando lidar com expoentes no efeito de Interpolação, a ordem em que você seleciona os objetos é importante. No exemplo acima, o caminho em forma de estrela na esquerda foi selecionado primeiro, e o caminho de forma hexagonal na direita foi selecionado em segundo.
  
- 
- 
+ 
+ 
   
    
   
   Veja o resultado quando o caminho da direita foi selecionado primeiro. O expoente deste exemplo foi definido em 1:
  
- 
+ 
   
   
   
@@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
-  Duplicate Endpaths
+ 
+  Duplicate Endpaths
  
- 
- 
+ 
+ 
   
    
   
   Este parâmetro define se o grupo de caminhos gerados pelo efeito inclui uma cópia dos caminhos originais em que o efeito interpolar foi aplicado.
  
- 
-  Estilo de Interpolar
+ 
+  Estilo de Interpolar
  
- 
- 
+ 
+ 
   
    
   
   Este parâmetro é uma das funções mais elegantes do efeito de interpolação. Ele diz ao efeito para tentar mudar o estilo dos caminhos a cada passo. Assim se os caminhos do começo e do fim são cores diferentes, os caminhos gerados também mudarão de forma incremental.
  
- 
- 
+ 
+ 
   
    
   
   Aqui temos um exemplo aonde a função de Estilo Interpolar é usada para preencher um caminho:
  
- 
+ 
   
   
   
@@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
- 
+ 
+ 
   
    
   
   Estilo de Interpolação também afeta o contorno de um caminho:
  
- 
+ 
   
   
   
@@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
- 
+ 
+ 
   
    
   
   Claro que, o caminho do ponto de partida e do caminho de chegada também não precisam ser os mesmos:
  
- 
+ 
   
   
   
@@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
-  Usando Interpolação para simular gradientes de forma irregular
+ 
+  Usando Interpolação para simular gradientes de forma irregular
  
- 
- 
+ 
+ 
   
    
   
   Não é possível no Inkscape (ainda) criar um gradiente diferente do linear (linha reta) ou radial (redondo). Entretanto, isto pode ser simulado usando o efeito de Interpolar e o estilo Interpolar. Um exemplo simples a seguir — desenhe duas linhas de diferentes contornos:
  
- 
+ 
   
   
  
- 
- 
+ 
+ 
   
    
   
   E Interpolar entre as duas linhas para criar o seu gradiente:
  
- 
+ 
   
   
   
@@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch at gmail dot com
    
   
  
- 
-  Conclusão
+ 
+  Conclusão
  
- 
- 
+ 
+ 
   
    
   
   Como demonstrado acima, a extensão Interpolar do Inkscape é uma ferramenta poderosa. Este tutorial cobre o básico desta extensão, entretanto a experimentação é a chave para explorar a interpolação ainda mais.
  
- 
+ 
   
    
    
@@ -586,8 +586,8 @@ Ryan Lerch, ryanlerch at gmail dot com
     
     
    
-   
-   Use Ctrl+up arrow to scroll 
+   
+   Use Ctrl+up arrow to scroll 
    
   
  
diff --git a/share/tutorials/tutorial-shapes.pt_BR.svg b/share/tutorials/tutorial-shapes.pt_BR.svg
index 4b46c1057..b281aba01 100644
--- a/share/tutorials/tutorial-shapes.pt_BR.svg
+++ b/share/tutorials/tutorial-shapes.pt_BR.svg
@@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and
  
  
  
- 
-  Elipses
+ 
+  Elipses
  
  
  
@@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and
  
  
  
- 
-  Estrelas
+ 
+  Estrelas
  
  
  
@@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow.
  
  
  
- 
-  Espirais
+ 
+  Espirais
  
  
  
@@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow.
  
  
  
- 
-  Conclusão
+ 
+  Conclusão
  
  
  
diff --git a/share/tutorials/tutorial-tips.pt_BR.svg b/share/tutorials/tutorial-tips.pt_BR.svg
index a6ef772c5..022441c5c 100644
--- a/share/tutorials/tutorial-tips.pt_BR.svg
+++ b/share/tutorials/tutorial-tips.pt_BR.svg
@@ -36,271 +36,274 @@
    
    
   
-  
-  Use Ctrl+down arrow to scroll 
+  
+  Use Ctrl+down arrow to scroll 
   
  
- 
+ 
   ::DICAS E TRUQUES
  
- 
- 
+ 
+ 
   
    
   
   Este tutorial demonstrará várias dicas e truques que usuários aprenderam com o uso do Inkscape e algumas características “escondidas†que podem te ajudar a acelerar tarefas de produção.
  
- 
-  Arranjo radial com “Ladrilhar Clonesâ€
+ 
+  Radial placement with Tiled Clones
  
- 
- 
+ 
+ 
   
    
   
-  It's easy to see how to use the Create Tile Clones dialog for rectangular grids and
+  It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and
 patterns. But what if you need radial placement, where objects
 share a common center of rotation? It's possible too!
 
  
- 
- 
+ 
+ 
   
    
   
-  Se seu padrão radial requer apenas 3, 4, 6, 8 ou 12 elementos, então você pode tentar as simetrias P3, P31M,P3M1, P4, P4M, P6 ou P6M. Estes padrões funcionam perfeitamente para flocos de neve e afins. Entretanto, o próximo método é mais abrangente.
+  If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the
+P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes
+and the like. A more general method, however, is as follows.
+
  
- 
- 
+ 
+ 
   
    
   
-  Escolha a simetria P1 (transição simples) e depois compense essa transição configurando na aba Deslocamento, Por linha/Deslocar Y e Por coluna/Deslocar X ambos para -100%. Agora todos os clones ficarão empilhados exatamente em cima do original. Tudo o que resta a fazer é ir para a aba Rotação e configurar algum ângulo de rotação por coluna, e então criar o padrão com uma linha e múltiplas colunas. Por exemplo, aqui está um padrão feito a partir de uma linha horizontal, com 30 colunas, cada uma girada 6 graus:
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+  Escolha a simetria P1 (transição simples) e depois compense essa transição configurando na aba Deslocamento, Por linha/Deslocar Y e Por coluna/Deslocar X ambos para -100%. Agora todos os clones ficarão empilhados exatamente em cima do original. Tudo o que resta a fazer é ir para a aba Rotação e configurar algum ângulo de rotação por coluna, e então criar o padrão com uma linha e múltiplas colunas. Por exemplo, aqui está um padrão feito a partir de uma linha horizontal, com 30 colunas, cada uma girada 6 graus:
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Para obter um mostrador de relógio a partir deste, tudo o que você precisa fazer é cortar ou simplesmente cobrir a parte central com um círculo branco (para fazer operações booleanas nos clones, desagrupe-os primeiro).
  
- 
- 
+ 
+ 
   
    
   
   Efeitos mais interessantes podem ser criados usando tanto linhas quanto colunas. Aqui está um padrão com 10 colunas e 8 linhas, com rotação de 2 graus por linha e 18 graus por coluna. Aqui cada grupo de linhas é uma "coluna", assim os grupos estão a 18 graus um do outro, dentro de cada coluna, e as linhas individuais, 2 graus afastadas:
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
-  In the above examples, the line was rotated around its center. But what if you want the
-center to be outside of your shape? Just create an invisible (no fill, no stroke)
-rectangle which would cover your shape and whose center is in the point you need, group
-the shape and the rectangle together, and then use Create Tile Clones on
-that group. This is how you can do nice “explosions†or “starbursts†by randomizing
-scale, rotation, and possibly opacity:
+  In the above examples, the line was rotated around its center. But what if you want the 
+center to be outside of your shape? Just click on the object twice with the Selector tool 
+to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) 
+to the point you would like to be the center of the rotation for the Tiled Clones operation.
+Then use Create Tiled Clones on the object. This is how you can do nice “explosions†
+or “starbursts†by randomizing scale, rotation, and possibly opacity:
 
  
- 
+ 
   
   
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
-  How to do slicing (multiple rectangular export areas)?
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  How to do slicing (multiple rectangular export areas)?
  
- 
- 
+ 
+ 
   
    
   
   Create a new layer, in that layer create invisible rectangles covering parts of your
 image. Make sure your document uses the px unit (default), turn on grid and snap the
 rects to the grid so that each one spans a whole number of px units. Assign meaningful
-ids to the rects, and export each one to its own file (File
+ids to the rects, and export each one to its own file (File
 > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember
 their export filenames. After that, it's very easy to re-export some of the rects:
 switch to the export layer, use Tab to select the one you need (or use Find by id), and
@@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex
 all of your areas, with a command like:
 
  
- 
- 
+ 
+ 
   
    
   
   inkscape -i area-id -t filename.svg
 
  
- 
- 
+ 
+ 
   
    
   
   for each exported area. The -t switch tells it to use the remembered filename hint,
 otherwise you can provide the export filename with the -e switch. Alternatively, you can
-use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results.
+use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results.
 
  
- 
-  Gradientes não-lineares
+ 
+  Gradientes não-lineares
  
- 
- 
+ 
+ 
   
    
   
   A versão 1.1 do SVG não suporta gradientes não-lineares (ou seja, aqueles que tem uma transição não-linear entre as cores). Você pode, entretanto, imitá-los através de gradientes com várias paradas.
  
- 
- 
+ 
+ 
   
    
   
-  Comece com um gradiente simples de duas paradas. Abra o Editor de Gradiente (ex. duplo clique em qualquer alça de controle do gradiente com a ferramenta Gradiente). Adicione uma nova parada de gradiente no meio, arraste-a um pouco. Depois adicione mais paradas antes e depois da parada do meio e arraste-as também, de modo que o gradiente fique suave. Quanto mais paradas você adicionar, mais suave o gradiente resultante. Aqui está o gradiente inicial preto e branco com duas paradas:
+  Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog 
+or use the gradient tool). Now, with the gradient tool, add a new gradient stop in
+the middle; either by double-clicking on the gradient line, or by selecting the square-shaped 
+gradient stop and clicking on the button Insert new stop in the gradient 
+tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the 
+middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the 
+smoother you can make the resulting gradient. Here's the initial black-white gradient with two 
+stops:
+
  
  
   
@@ -349,11 +360,11 @@ use the Extensions > Web > Slicer
    
   
  
- 
- 
- 
+ 
+ 
+ 
   
-   
+   
   
   E aqui, vários gradientes não-lineares com múltiplas paradas (verifique-as no Editor de Gradiente):
  
@@ -438,21 +449,21 @@ use the Extensions > Web > Slicer
    
   
  
- 
- 
- 
- 
- 
- 
- 
- 
- 
-  Gradientes radiais excêntricos
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+  Gradientes radiais excêntricos
  
- 
- 
+ 
+ 
   
-   
+   
   
   Gradientes radiais não têm que ser simétricos. Com a ferramenta Gradiente arraste a alça central de um gradiente elíptico com Shift. Isto fará mover a alça de foco em forma de x do gradiente para longe do seu centro. Quando você não o mais precisar, você pode ajustar o foco de volta à sua posição arrastando-o para perto do centro.
  
@@ -466,42 +477,42 @@ use the Extensions > Web > Slicer
    
   
  
- 
- 
- 
-  Alinhando ao centro da página
+ 
+ 
+ 
+  Alinhando ao centro da página
  
- 
- 
+ 
+ 
   
-   
+   
   
   To align something to the center or side of a page, select the object or group and then
-choose Page from the Relative to: list in the
+choose Page from the Relative to: list in the
 Align and Distribute dialog (Shift+Ctrl+A). 
 
  
- 
-  Limpando o documento
+ 
+  Limpando o documento
  
- 
- 
+ 
+ 
   
-   
+   
   
   Many of the no-longer-used gradients, patterns, and markers (more precisely, those which
 you edited manually) remain in the corresponding palettes and can be reused for new
-objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers
+objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers
 which are not used by anything in the document, making the file smaller.
 
  
- 
-  Características escondidas e o editor XML
+ 
+  Características escondidas e o editor XML
  
- 
- 
+ 
+ 
   
-   
+   
   
   The XML editor (Shift+Ctrl+X) allows you to change almost all aspects
 of the document without using an external text editor. Also, Inkscape usually supports
@@ -509,97 +520,96 @@ more SVG features than are accessible from the GUI. The XML editor is one way to
 access to these features (if you know SVG).
 
  
- 
-  Modificando a unidade de medida das réguas
+ 
+  Modificando a unidade de medida das réguas
  
- 
- 
+ 
+ 
   
-   
+   
   
-  In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€,
-in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in
+  In the default template, the unit of measure used by the rulers is mm. This is also the unit used in
 displaying coordinates at the lower-left corner and preselected in all units menus. (You
 can always hover your mouse over a ruler to see the tooltip with the units it uses.) To
-change this, open Document Preferences
-(Shift+Ctrl+D) and change the Default units on the
-Page tab.
+change this, open Document Properties
+(Shift+Ctrl+D) and change the Display units on the
+Page tab.
 
  
- 
-  Estampagem
+ 
+  Estampagem
  
- 
- 
+ 
+ 
   
-   
+   
   
   Para criar rapidamente várias cópias de um objeto, use a estampagem. Simplesmente arraste um objeto (ou amplie-o ou rotacione-o), e enquanto mantém pressionado o botão do mouse, pressione Barra de Espaço. Isto cria uma “estampa†do objeto selecionado. Você pode repeti-lo quantas vezes desejar.
  
- 
-  Truques da ferramenta Bezier
+ 
+  Truques da ferramenta Bezier
  
- 
- 
+ 
+ 
   
-   
+   
   
   Na ferramenta Caneta (Bezier), você tem as seguintes opções para finalizar a linha:
  
- 
- 
- 
+ 
+ 
+ 
   
-   
+   
   
   Pressionar Enter
  
- 
- 
- 
+ 
+ 
+ 
   
-   
+   
   
   Duplo clique com o botão esquerdo do mouse
  
- 
- 
- 
+ 
+ 
+ 
   
-   
+   
   
-  Select the Pen tool from the toolbar
+  Click with the right mouse button
 
  
- 
- 
- 
+ 
+ 
+ 
   
-   
+   
   
   Selecionar outra ferramenta
  
- 
- 
+ 
+ 
   
-   
+   
   
-  Observe que enquanto o caminho não estiver finalizado (ou seja, é exibido em verde, com o segmento atual em vermelho) ele ainda não existe como um objeto no documento. Dessa maneira, para cancelá-lo, use tanto Esc (cancela o caminho inteiro) quanto Backspace (remove o último segmento do caminho não finalizado) em vez do comando Desfazer.
+  Observe que enquanto o caminho não estiver finalizado (ou seja, é exibido em verde, com o segmento atual em vermelho) ele ainda não existe como um objeto no documento. Dessa maneira, para cancelá-lo, use tanto Esc (cancela o caminho inteiro) quanto Backspace (remove o último segmento do caminho não finalizado) em vez do comando Desfazer.
  
- 
- 
+ 
+ 
   
-   
+   
   
   Para adicionar um novo subcaminho a um caminho existente, selecione o caminho e comece a desenhar com Shift Entretanto, se o que você quer é simplesmente continuar um caminho existente, Shift não é necessário; apenas comece a desenhar a partir de um dos nós finais do caminho selecionado.
  
- 
-  Inserindo valores Unicode
+ 
+  Inserindo valores Unicode
  
- 
- 
+ 
+ 
   
-   
+   
   
   While in the Text tool, pressing Ctrl+U toggles between Unicode and
 normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a
@@ -610,58 +620,70 @@ an em-dash (—). To quit the Unicode mode without inserting anything press
 Esc.
 
  
- 
- 
+ 
+ 
   
-   
+   
   
-  You can also use the Text > Glyphs dialog to search for and insert 
+  You can also use the Text > Glyphs dialog to search for and insert 
 glyphs into your document.
 
  
- 
-  Usando a grade para desenhar ícones
+ 
+  Usando a grade para desenhar ícones
  
- 
- 
+ 
+ 
   
-   
+   
   
-  Suponha que você queira criar um ícone de dimensões 24x24 pixels. Crie uma lousa de 24x24 px (use Configurações do Desenho) e configure a grade para 0,5 px (linhas de grade de 48x48). Agora, se você alinha objetos preenchidos à linhas de grade pares, e objetos tracejados à linhas de grade ímpares com a espessura do traço em px um número par, e exporta-o no valor padrão 90dpi (de modo que 1 px se transforme em 1 pixel de bitmap), você obterá uma imagem bitmap clara, sem necessidade de suavização ('antialising').
+  Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the
+Document Preferences) and set the grid to 0.5 px (48x48 gridlines).
+Now, if you align filled objects to even gridlines, and stroked
+objects to odd gridlines with the stroke width in px being an even
+number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you
+get a crisp bitmap image without unneeded antialiasing.
+
  
- 
-  Rotação de objetos
+ 
+  Rotação de objetos
  
- 
- 
+ 
+ 
   
-   
+   
   
-  Com a ferramenta de seleção, clique em um objeto para ver as setas de dimensionamento, depois clique novamente no objeto para ver as setas de rotação e de posição. Se clicar nas setas do canto e arrastá-las, o objeto será girado em volta do centro (exibido como uma marca de cruz). Se você manter pressionada a tecla Shift enquanto faz isso, a rotação ocorrerá ao redor do canto oposto. Você pode também arrastar o centro de rotação para qualquer lugar.
+  When in the Selector tool, click on an object to see the scaling arrows,
+then click again on the object to see the rotation and skew arrows. If
+the arrows at the corners are clicked and dragged, the object will rotate around the
+center (shown as a cross mark). If you hold down the Shift key while
+doing this, the rotation will occur around the opposite corner. You can also drag the
+rotation center to any place.
+
  
- 
- 
+ 
+ 
   
-   
+   
   
   Você pode também girar a partir do teclado pressionando [ e ] (em incrementos de 15 graus) ou Ctrl+[ e Ctrl+] (para 90 graus). As mesmas teclas [] com Alt executam rotação suave em proporção de pixel.
  
- 
-  Sombras de fundo em bitmaps
+ 
+  Sombras de fundo em bitmaps
  
- 
- 
+ 
+ 
   
-   
+   
   
   To quickly create drop shadows for objects, use the 
-Filters > Shadows and Glows > Drop Shadow... feature.
+Filters > Shadows and Glows > Drop Shadow... feature.
 
  
- 
- 
+ 
+ 
   
-   
+   
   
   You can also easily create blurred drop shadows for objects manually with blur in the
 Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press 
@@ -670,53 +692,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur
 say, 5.0. That's it!
 
  
- 
-  Posicionando texto em um caminho
+ 
+  Posicionando texto em um caminho
  
- 
- 
+ 
+ 
   
-   
+   
   
-  Para colocar texto ao longo de uma curva, selecione o texto e a curva juntos e escolha Pôr no caminho do menu Texto. O texto começará no início do caminho. No geral, é melhor criar um caminho explícito sobre o qual você queira ajustar o texto, em vez de ajustá-lo em algum outro elemento de desenho – isto te dará mais controle sem ter que deslocar seu desenho.
+  Para colocar texto ao longo de uma curva, selecione o texto e a curva juntos e escolha Pôr no caminho do menu Texto. O texto começará no início do caminho. No geral, é melhor criar um caminho explícito sobre o qual você queira ajustar o texto, em vez de ajustá-lo em algum outro elemento de desenho – isto te dará mais controle sem ter que deslocar seu desenho.
  
- 
-  Selecionando o original
+ 
+  Selecionando o original
  
- 
- 
+ 
+ 
   
-   
+   
   
   Quando você tem um texto em um caminho, um offset, ou um clone, pode ser difícel de seus objetos/caminhos fontes serem selecionados porque podem estar diretamente na camada de baixo sob outros objetos, invisíveis e/ou bloqueados. As teclas mágicas Shift+D te ajudarão; selecione o texto, offset, ou clone, e pressione Shift+D para mover a seleção entre o caminho, offset, ou o clone original correspondente.
  
- 
-  Recuperação de janelas fora da tela
+ 
+  Recuperação de janelas fora da tela
  
- 
- 
+ 
+ 
   
-   
+   
   
   When moving documents between systems with different resolutions or number of displays,
 you may find Inkscape has saved a window position that places the window out of reach on
 your screen. Simply maximise the window (which will bring it back into view, use the
 task bar), save and reload. You can avoid this altogether by unchecking the global
-option to save window geometry (Inkscape Preferences,
-Interface > Windows section).
+option to save window geometry (Inkscape Preferences,
+Interface > Windows section).
 
  
- 
-  Exportação de transparência, gradientes e PostScript
+ 
+  Exportação de transparência, gradientes e PostScript
  
- 
- 
-  
-   
-  
-  Os formatos PostScript ou EPS não suportam transparência, logo, você não deve usá-la nunca se for exportá-la em PS/EPS. No caso de transparência lisa que sobrepõe a cor lisa, é fácil consertar isso: selecione um dos objetos transparentes; mude para a ferramenta Conta-gotas (F7); certifique-se que esteja ativado para pegar as cores visíveis sem alfa, na barra Controles de Ferramenta; clique no mesmo objeto. Isto vai pegar a cor visível e atribuí-la de volta ao objeto, mas desta vez sem transparência. Repita para todos os objetos transparentes. Se seu objeto transparente sobrepor várias áreas de cor lisa, você vai ter que quebrá-lo em pedaços e aplicar este procedimento para cada pedaço.
+ 
+ 
+  
+   
+  
+  PostScript or EPS formats do not support transparency, so you
+should never use it if you are going to export to PS/EPS. In the case of flat
+transparency which overlays flat color, it's easy to fix it: Select one of the
+transparent objects; switch to the Dropper tool (F7 or d); 
+make sure that the Opacity: Pick button in the dropper tool's tool bar 
+is deactivated; click on that same object. That will pick
+the visible color and assign it back to the object, but this time without
+transparency. Repeat for all transparent objects. If your transparent object overlays
+several flat color areas, you will need to break it correspondingly into pieces and
+apply this procedure to each piece. Note that the dropper tool does not change the opacity 
+value of the object, but only the alpha value of its fill or stroke color, so make sure that 
+every object's opacity value is set to 100% before you start out.
+
  
- 
+ 
   
    
    
@@ -746,8 +780,8 @@ option to save window geometry (Inkscape Preference
     
     
    
-   
-   Use Ctrl+up arrow to scroll 
+   
+   Use Ctrl+up arrow to scroll 
    
   
  
diff --git a/share/tutorials/tutorial-tracing.pt_BR.svg b/share/tutorials/tutorial-tracing.pt_BR.svg
index 3410e734e..f4bccc09d 100644
--- a/share/tutorials/tutorial-tracing.pt_BR.svg
+++ b/share/tutorials/tutorial-tracing.pt_BR.svg
@@ -36,166 +36,166 @@
    
    
   
-  
-  Use Ctrl+down arrow to scroll 
+  
+  Use Ctrl+down arrow to scroll 
   
  
- 
-  ::VETORIZAÇÃO
+ 
+  ::TRACING BITMAPS
  
- 
- 
+ 
+ 
   
    
   
   Um dos recursos do Inkscape é a ferramenta que vetoriza uma imagem bitmap em um elemento <caminho> para seu desenho SVG. Estas pequenas notas devem te ajudar a se familiarizar com o funcionamento desta ferramenta.
  
- 
- 
+ 
+ 
   
    
   
-  Atualmente o Inkscape emprega o motor de vetorização bitmap (potrace.sourceforge.net) escrito por Peter Selinger. No futuro esperamos permitir programas de vetorização alternativos; por agora, entretanto, esta ótima ferramenta é mais que suficiente para nossas necessidades.
+  Atualmente o Inkscape emprega o motor de vetorização bitmap (potrace.sourceforge.net) escrito por Peter Selinger. No futuro esperamos permitir programas de vetorização alternativos; por agora, entretanto, esta ótima ferramenta é mais que suficiente para nossas necessidades.
  
- 
- 
+ 
+ 
   
    
   
   Tenha em mente que o propósito desta ferramenta não é reproduzir uma cópia exata da imagem original; tampouco produzir um produto final. Nenhuma ferramenta de vetorização automática consegue fazer isso. O que ele faz é te fornecer um conjunto de curvas que você pode usar como um recurso para seu desenho.
  
- 
- 
+ 
+ 
   
    
   
   O Potrace interpreta um bitmap preto e branco, e produz um conjunto de curvas. Para o Potrace, atualmente temos três tipos de filtros de entrada, para converter uma imagem crua em algo que o Potrace possa usar.
  
- 
- 
+ 
+ 
   
    
   
   Geralmente quanto mais escuros os pixels no bitmap intermediário, maior a vetorização que o Potrace executará. A medida que a quantidade de traços aumenta, mais tempo de processamento da CPU será necessário, e o elemento <caminho> ficará muito maior. É recomendável que o usuário experimente com imagens intermediárias mais claras primeiro, passando para mais escuras para obter a complexidade e proporção desejadas do caminho resultante.
  
- 
- 
+ 
+ 
   
    
   
-  Para usar a ferramenta de vetorização, carregue ou importe uma imagem, selecione-a, e selecione o comando Caminho > Traçar Bitmap, ou Shift+Alt+B.
+  Para usar a ferramenta de vetorização, carregue ou importe uma imagem, selecione-a, e selecione o comando Caminho > Traçar Bitmap, ou Shift+Alt+B.
  
- Main options within the Trace dialog
- 
- 
- 
+ Main options within the Trace dialog
+ 
+ 
+ 
   
    
   
   O usuário verá as três opções de filtros disponíveis:
  
- 
- 
- 
+ 
+ 
+ 
   
    
   
   Brightness Cutoff
 
  
- 
- 
+ 
+ 
   
    
   
   Este simplesmente usa a soma do vermelho, verde e azul (ou tons de cinza) de um pixel para determinar se ele deve ser considerado preto ou branco. O limiar pode ser configurado de 0,0 (preto) a 1,0 (branco). Quanto maior o valor, menor a quantidade de pixels que serão considerados "brancos", e a imagem intermediária ficará mais escura.
  
- Imagem Original
- Limiar de BrilhoPreenchida, sem Contorno
- Limiar de BrilhoContornada, sem Preenchimento
- 
- 
- 
- 
- 
- 
+ Imagem Original
+ Limiar de BrilhoPreenchida, sem Contorno
+ Limiar de BrilhoContornada, sem Preenchimento
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Edge Detection
 
  
- 
- 
+ 
+ 
   
    
   
   Este filtro usa o algoritmo de detecção de bordas inventado por J. Canny, como uma forma de achar rapidamente isóclinas de contrastes parecidos. Isto produzirá um bitmap intermediário que se parecerá menos com a imagem original que com o que faz o Limiar do Brilho, mas provavelmente fornecerá informação sobre a curva que de outra maneira seria ignorada. A configuração do campo Limiar aqui (de 0,0 a 1,0) ajusta o limiar do brilho a fim de determinar se um pixel situado próximo a uma borda de contraste deve ser incluído no resultado. Este recurso permite ajustar a obscuridade ou espessura da borda no resultado final da imagem vetorizada.
  
- Imagem Original
- Borda DetectadaPreenchida, sem Contorno
- Borda DetectadaContornada, sem Preenchimento
- 
- 
- 
- 
- 
- 
+ Imagem Original
+ Borda DetectadaPreenchida, sem Contorno
+ Borda DetectadaContornada, sem Preenchimento
+ 
+ 
+ 
+ 
+ 
+ 
   
    
   
   Quantificação de Cor
  
- 
- 
+ 
+ 
   
    
   
   O resultado deste filtro produzirá uma imagem intermediária que é muito diferente dos outros dois, mas muito útil. Em vez de mostrar as isóclinas de brilho ou contraste, este filtro procurará bordas onde as cores mudam, mesmo com brilho e contrastes iguais. O campo aqui, Cores, decide quantas cores de saída existiriam se o bitmap intermediário fosse colorido. Ele então decide preto/branco de acordo com o índice par ou ímpar da cor.
  
- Imagem Original
- Quantificação (12 cores)Preenchida, sem Contorno
- Quantificação (12 cores)Contornada, sem Preenchimento
- 
- 
- 
- 
- 
+ Imagem Original
+ Quantificação (12 cores)Preenchida, sem Contorno
+ Quantificação (12 cores)Contornada, sem Preenchimento
+ 
+ 
+ 
+ 
+ 
   
    
   
   É recomendável o usuário tentar todos os três filtros, e observar os diferentes resultados produzidos para diferentes tipos de imagens de entrada. Sempre haverá uma imagem onde um funciona melhor que os outros.
  
- 
- 
+ 
+ 
   
    
   
-  Depos de vetorizar, é recomendável que o usuário tente o comando Caminho > Simplificar (Ctrl+L) no caminho resultante, para reduzir o número de nós. Isto fará o resultado do Potrace muito mais fácil de ser editado. Por exemplo, aqui está uma vetorização típica do "Homem Velho Tocando Violão":
+  Depos de vetorizar, é recomendável que o usuário tente o comando Caminho > Simplificar (Ctrl+L) no caminho resultante, para reduzir o número de nós. Isto fará o resultado do Potrace muito mais fácil de ser editado. Por exemplo, aqui está uma vetorização típica do "Homem Velho Tocando Violão":
  
- Imagem Original
- Imagem Vetorizada / Caminho resultante(1551 nós)
- 
- 
- 
- 
+ Imagem Original
+ Imagem Vetorizada / Caminho resultante(1551 nós)
+ 
+ 
+ 
+ 
   
    
   
   Perceba o número enorme de nós no caminho. Depois de pressionar Ctrl+L, este é o resultado típico:
  
- Imagem Original
- Imagem Vetorizada / Caminho resultante - Simplificado(384 nós)
- 
- 
- 
- 
+ Imagem Original
+ Imagem Vetorizada / Caminho resultante - Simplificado(384 nós)
+ 
+ 
+ 
+ 
   
    
   
   A representação é um pouco mais aproximada e rudimentar, mas o desenho é muito mais simples e fácil de editar. Tenha em mente que o que você quer não é uma cópia exata da imagem, mas um conjunto de curvas que você pode usar em seu desenho.
  
- 
+ 
   
    
    
@@ -225,8 +225,8 @@
     
     
    
-   
-   Use Ctrl+up arrow to scroll 
+   
+   Use Ctrl+up arrow to scroll 
    
   
  
-- 
cgit v1.2.3


From 5aea590a88676079d336f2a964939e6f65f75b21 Mon Sep 17 00:00:00 2001
From: Nicolas Dufour 
Date: Wed, 17 Aug 2016 12:17:32 +0200
Subject: Documentation. Traditional Chinese tutorials and keys reference
 update.

(bzr r15067)
---
 doc/keys.zh_TW.html                                | 225 +++---
 share/tutorials/tutorial-advanced.zh_TW.svg        | 520 +++++++-------
 share/tutorials/tutorial-basic.zh_TW.svg           | 788 ++++++++++-----------
 share/tutorials/tutorial-calligraphy.zh_TW.svg     | 658 ++++++++---------
 share/tutorials/tutorial-elements.zh_TW.svg        | 394 +++++------
 share/tutorials/tutorial-interpolate.zh_TW.svg     | 242 +++----
 share/tutorials/tutorial-shapes.zh_TW.svg          | 726 +++++++++----------
 share/tutorials/tutorial-tips.zh_TW.svg            | 773 ++++++++++----------
 .../tutorials/tutorial-tracing-pixelart.zh_TW.svg  |  72 +-
 share/tutorials/tutorial-tracing.zh_TW.svg         | 154 ++--
 10 files changed, 2212 insertions(+), 2340 deletions(-)

diff --git a/doc/keys.zh_TW.html b/doc/keys.zh_TW.html
index 0d9f67176..9a4d20103 100644
--- a/doc/keys.zh_TW.html
+++ b/doc/keys.zh_TW.html
@@ -16,15 +16,10 @@
       
       
-

This document describes the default keyboard and mouse shortcuts of Inkscape, corresponding to the -share/keys/default.xml file in your Inkscape installation. Some of the keyboard shortcuts may not be available for non-US keyboard layouts, but most (not all) of these shortcuts are configurable by the user. You can create custom shortcuts and load custom keyboard shortcut files in the Inkscape Preferences, or by following the instructions in the default.xml file.

+

這份文件講述 Inkscape é è¨­çš„éµç›¤æ»‘é¼ å¿«æ·éµï¼Œå°æ‡‰ Inkscape 安è£ç›®éŒ„中的 share/keys/default.xml 檔案。æŸäº›å¿«æ·éµå¯èƒ½ç„¡æ³•åœ¨éž US éµç›¤é…置下使用,但使用者å¯è‡ªè¡Œè¨­å®šå¤§éƒ¨åˆ† (éžå…¨éƒ¨) 的快æ·éµã€‚你能建立自訂快æ·éµä¸¦å¾ž Inkscape å好設定中載入éµç›¤å¿«æ·éµæª”案,或éµç…§ default.xml 的說明進行設定。

-

Unless noted otherwise, keypad keys (such as arrows, Home, End, +, -, digits) are -supposed to work the same as corresponding regular keys. If you have a new shortcut -idea, please contact the developers (by writing to the devel mailing list -or by submitting a -feature request).

+

除éžå¦æœ‰èªªæ˜Žï¼Œæ•¸å­—éµ (例如方å‘éµã€Homeã€Endã€+ã€-ã€æ•¸å­—) éƒ½å’Œç›¸å°æ‡‰çš„æ™®é€šæŒ‰éµæœ‰ç›¸åŒçš„æ•ˆæžœã€‚如果你有新的快æ·éµæ§‹æƒ³ï¼Œè«‹è¯çµ¡é–‹ç™¼è€… (寄信到開發者郵件論壇或到 æäº¤åŠŸèƒ½è«‹æ±‚)。

@@ -47,7 +42,7 @@ feature request).

  • - Tool controls bar + 工具控制列
  • -

    Tool controls bar

    +

    工具控制列

    @@ -1127,7 +1122,7 @@ feature request).

    @@ -1174,7 +1169,7 @@ feature request).

    @@ -1219,7 +1214,7 @@ feature request).

    @@ -1234,7 +1229,7 @@ feature request).

    @@ -1251,7 +1246,7 @@ feature request).

    @@ -1295,7 +1290,7 @@ feature request).

    @@ -1366,7 +1361,7 @@ feature request).

    @@ -1375,13 +1370,13 @@ feature request).

    Q @@ -1484,7 +1479,7 @@ feature request).

    @@ -1511,7 +1506,7 @@ feature request).

    @@ -1647,19 +1642,19 @@ feature request).

    +\ @@ -1671,13 +1666,13 @@ feature request).

    +3 @@ -1698,7 +1693,7 @@ feature request).

    @@ -1798,7 +1793,7 @@ feature request).

    @@ -1807,7 +1802,7 @@ feature request).

    滑鼠滾輪 @@ -1973,7 +1968,7 @@ feature request).

    +P @@ -1994,7 +1989,7 @@ feature request).

    +F11 @@ -2005,7 +2000,7 @@ feature request).

    +F11 @@ -2098,7 +2093,7 @@ feature request).

    - The tool controls bar at the top of the document window provides different buttons and controls for each tool. + 使–¼æ–‡ä»¶è¦–çª—é ‚ç«¯çš„å·¥å…·æŽ§åˆ¶åˆ—å¯æä¾›æ¯ç¨®å·¥å…·ä¸åŒçš„æŒ‰éˆ•和控制項。
    - Use these to navigate between fields in the tool controls bar (the value in the field you leave, if changed, is accepted). + 使用這些快æ·éµå¯åœ¨å·¥å…·æŽ§åˆ¶åˆ—的輸入欄之間ç€è¦½ (å¦‚æžœä½ é›¢é–‹æ™‚è¼¸å…¥æ¬„è£¡çš„æ•¸å€¼å·²è®Šæ›´ï¼Œç¨‹å¼æœƒè¦–ç‚ºåŒæ„變更數值)。
    - 這å¯è®“您在文字輸入欄裡輸入新數值並將畫é¢åˆ‡æ›å›žç•«å¸ƒã€‚ + 這å¯è®“你在文字輸入欄裡輸入新數值並將畫é¢åˆ‡æ›å›žç•«å¸ƒã€‚
    - 這å¯å–消您在文字輸入欄裡所åšçš„任何變更,並將畫é¢åˆ‡æ›å›žç•«å¸ƒã€‚ + 這å¯å–消你在文字輸入欄裡所åšçš„任何變更,並將畫é¢åˆ‡æ›å›žç•«å¸ƒã€‚
    - 這å¯å–消您在文字輸入欄裡所åšçš„任何變更,但滑鼠游標åœç•™åœ¨è¼¸å…¥æ¬„裡。 + 這å¯å–消你在文字輸入欄裡所åšçš„任何變更,但滑鼠游標åœç•™åœ¨è¼¸å…¥æ¬„裡。
    - 數字éµçš„ +/- 按éµå¯åœ¨æ‚¨ç·¨è¼¯æ–‡å­—物件時進行縮放,除éžå•Ÿç”¨ NumLock。 + 數字éµçš„ +/- 按éµå¯åœ¨ä½ ç·¨è¼¯æ–‡å­—物件時進行縮放,除éžå•Ÿç”¨ NumLock。
    - 視窗å³ä¸‹è§’的縮放輸入欄å¯è®“您指定精確的縮放比例。 + 視窗å³ä¸‹è§’的縮放輸入欄å¯è®“你指定精確的縮放比例。
    - quick zoom + 快速畫é¢ç¸®æ”¾
    - Zooms to selection, or doubles the current zoom factor if nothing is selected, until key is released. + 將畫é¢ç¸®æ”¾æˆé¸å–å€å¤§å°ï¼Œæˆ–在沒有é¸å–任何物件下以目å‰ç¸®æ”¾ä¿‚數的兩å€ç¸®æ”¾ç•«é¢ï¼Œç›´åˆ°æ”¾é–‹æŒ‰éµã€‚
    - 按這些快æ·éµï¼Œæ‚¨å¯ä»¥å‰å¾Œå¾€è¿”這次作業階段裡的畫é¢ç¸®æ”¾ç´€éŒ„。 + 按這些快æ·éµï¼Œä½ å¯ä»¥å‰å¾Œå¾€è¿”這次作業階段裡的畫é¢ç¸®æ”¾ç´€éŒ„。
    - æŒ‰éµæ²å‹•åŠ é€Ÿï¼Œä¾‹å¦‚ï¼šæ‚¨æŒ‰ä½æˆ–連續按 Ctrl+æ–¹å‘鵿™‚å¯åŠ å¿«ç•«é¢æ²å‹•速度。 + æŒ‰éµæ²å‹•åŠ é€Ÿï¼Œä¾‹å¦‚ï¼šä½ æŒ‰ä½æˆ–連續按 Ctrl+æ–¹å‘鵿™‚å¯åŠ å¿«ç•«é¢æ²å‹•速度。
    - toggle guide visibility + 開啟 / 關閉åƒè€ƒç·šå¯è¦‹ç‹€æ…‹
    - For activating / deactivating snapping to guides, use the snap bar or the global snapping toggle (% key). + 若想è¦å•Ÿå‹•或關閉貼齊到åƒè€ƒç·šåŠŸèƒ½ï¼Œè«‹ä½¿ç”¨è²¼é½ŠåŠŸèƒ½åˆ—æˆ–ç¸½é«”è²¼é½ŠåŠŸèƒ½é–‹é—œ (% 按éµ)。
    - When you create a new guide by dragging off the ruler, guide visibility is automatically turned on. + 當你從滑鼠游標從尺標拖動放開建立新åƒè€ƒç·šï¼Œåƒè€ƒç·šæœƒè‡ªå‹•開啟å¯è¦‹ç‹€æ…‹ã€‚
    - toggle grids visibility + 開啟 / 關閉å¯è¦–狀態
    - For activating / deactivating snapping to grids, use the snap bar or the global snapping toggle (% key). + 若想è¦å•Ÿå‹•或關閉貼齊到格線功能,請使用貼齊功能列或總體貼齊功能開關 (% 按éµ)。
    - This toggle affects snapping to grids, guides, and objects in all tools. The settings in the snap bar determine which snap targets and snapping points will snap. + 此開關動作會影響所有工具中的貼齊格線ã€è²¼é½Šåƒè€ƒç·šå’Œè²¼é½Šç‰©ä»¶ä¹‹åŠŸèƒ½ã€‚è²¼é½ŠåŠŸèƒ½åˆ—ä¸­çš„è¨­å®šå€¼æœƒæ±ºå®šè²¼é½Šç›®æ¨™å’Œè²¼é½Šé»žã€‚
    - 您也å¯å°‡é¡è‰²æ‹–到狀態列中的填充和邊框標示圖形來變更é¸å–範åœçš„填充和邊框。 + 你也å¯å°‡é¡è‰²æ‹–到狀態列中的填充和邊框標示圖形來變更é¸å–範åœçš„填充和邊框。
    - scroll palette + æ²å‹•調色盤
    - toggle palette + 開啟 / 關閉調色盤
    - toggle toolbars + 開啟 / 關閉工具列
    - toggle toolbars and fullscreen + 開啟 / 關閉工具列和全螢幕
    @@ -2111,7 +2106,7 @@ feature request).

    +Q @@ -2124,7 +2119,7 @@ feature request).

    +Q @@ -2249,7 +2244,7 @@ feature request).

    @@ -2260,7 +2255,7 @@ feature request).

    +點擊 @@ -2271,13 +2266,13 @@ feature request).

    +Alt+點擊 @@ -2518,7 +2513,7 @@ feature request).

    @@ -2581,7 +2576,7 @@ feature request).

    @@ -2606,7 +2601,7 @@ feature request).

    @@ -3180,7 +3175,7 @@ feature request).

    @@ -3220,7 +3215,7 @@ feature request).

    @@ -3243,7 +3238,7 @@ feature request).

    @@ -3346,7 +3341,7 @@ feature request).

    @@ -3388,19 +3383,19 @@ feature request).

    @@ -3417,7 +3412,7 @@ feature request).

    @@ -3562,13 +3557,13 @@ feature request).

    @@ -3673,7 +3668,7 @@ feature request).

    @@ -3685,7 +3680,7 @@ feature request).

    @@ -3713,7 +3708,7 @@ feature request).

    @@ -3734,7 +3729,7 @@ feature request).

    @@ -4009,7 +4004,7 @@ feature request).

    @@ -4073,7 +4068,7 @@ feature request).

    +拖動滑鼠 @@ -4198,7 +4193,7 @@ feature request).

    @@ -4301,7 +4296,7 @@ feature request).

    +滑鼠滾輪 @@ -4432,13 +4427,13 @@ feature request).

    @@ -4611,13 +4606,13 @@ feature request).

    @@ -4672,7 +4667,7 @@ feature request).

    @@ -4706,7 +4701,7 @@ feature request).

    @@ -4727,7 +4722,7 @@ feature request).

    @@ -4858,7 +4853,7 @@ feature request).

    @@ -4997,7 +4992,7 @@ feature request).

    @@ -5187,7 +5182,7 @@ feature request).

    @@ -5350,7 +5345,7 @@ feature request).

    @@ -5384,7 +5379,7 @@ feature request).

    @@ -5439,7 +5434,7 @@ feature request).

    @@ -5555,7 +5550,7 @@ feature request).

    @@ -5749,7 +5744,7 @@ feature request).

    +拖動滑鼠 @@ -5998,7 +5993,7 @@ feature request).

    End @@ -6064,7 +6059,7 @@ feature request).

    - previous extension + 上一個擴充功能
    - previous extension settings + 上一個擴充功能設定值

    - Hide/lock

    + éš±è— / 鎖定
    - select a layer and toggle visibility (eye icon) or lock status (lock icon) on the other layers + 鏿“‡åœ–層並切æ›å…¶ä»–圖層上的å¯è¦‹ç‹€æ…‹ (眼ç›åœ–示) 或鎖定狀態 (鎖頭圖示)
    - toggle visibility (eye icon) or lock status (lock icon) on the unselected layers + åˆ‡æ›æœªè¢«é¸å–圖層的å¯è¦‹ç‹€æ…‹ (眼ç›åœ–示) 或鎖定狀態 (鎖頭圖示)
    - These commands apply to the Layers dialog's icons only. + é€™äº›æŒ‡ä»¤åªæœƒå¥—用到圖層å°è©±çª—的圖示。
    - 您åªèƒ½ä¸€æ¬¡ä»¿è£½ä¸€å€‹ç‰©ä»¶ï¼›è‹¥æ‚¨æƒ³è¦åŒæ™‚仿製多個物件,請群組這些物件並仿製該群組。 + ä½ åªèƒ½ä¸€æ¬¡ä»¿è£½ä¸€å€‹ç‰©ä»¶ï¼›è‹¥ä½ æƒ³è¦åŒæ™‚仿製多個物件,請群組這些物件並仿製該群組。
    - This exports the selected object(s) (all other objects hidden) as PNG in the document's directory and imports it back as embedded bitmap. + 這å¯å°‡é¸å–物件匯出 PNG 到文件資料夾裡 (其他物件都會被隱è—起來) 並將 PNG 以內嵌點陣圖匯回文件中。
    - 這å¯ä»¥é–‹å•Ÿæç¹ªé»žé™£åœ–å°è©±çª—讓您å¯ä»¥å°‡é»žé™£åœ–ç‰©ä»¶è½‰æ›æˆè·¯å¾‘。 + 這å¯ä»¥é–‹å•Ÿæç¹ªé»žé™£åœ–å°è©±çª—讓你å¯ä»¥å°‡é»žé™£åœ–ç‰©ä»¶è½‰æ›æˆè·¯å¾‘。
    - 如果您迅速連續調用此指令好幾次,指令的效果會越來越強烈。 + 如果你迅速連續調用此指令好幾次,指令的效果會越來越強烈。
    - 當您在物件上點擊滑鼠左éµï¼Œä¸Šä¸€å€‹é¸å–ç¯„åœæœƒå–消é¸å–狀態。 + 當你在物件上點擊滑鼠左éµï¼Œä¸Šä¸€å€‹é¸å–ç¯„åœæœƒå–消é¸å–狀態。
    - double-click + 點擊兩下 編輯物件 @@ -3306,13 +3301,13 @@ feature request).

    - 通常您必須從空白ä½ç½®é–‹å§‹ä»¥é‡æ–°æ¡†é¸ã€‚ + 通常你必須從空白ä½ç½®é–‹å§‹ä»¥é‡æ–°æ¡†é¸ã€‚
    - 若您在框é¸å‰æŒ‰ Shift éµï¼Œé‚£éº¼å³ä½¿å¾žç‰©ä»¶ä¸Šé–‹å§‹æ‹–å‹• Inkscape 仿œƒé€²è¡Œæ¡†é¸ã€‚ + 若你在框é¸å‰æŒ‰ Shift éµï¼Œé‚£éº¼å³ä½¿å¾žç‰©ä»¶ä¸Šé–‹å§‹æ‹–å‹• Inkscape 仿œƒé€²è¡Œæ¡†é¸ã€‚
    - 拖曳的時候,您å¯ä»¥è—‰ç”±æŒ‰ä¸‹ / 放開 Alt éµä¾†å°‡æ¡†é¸åˆ‡æ›æˆè§¸ç¢°é¸å–或將觸碰é¸å–切æ›å›žæ¡†é¸ã€‚ + 拖曳的時候,你å¯ä»¥è—‰ç”±æŒ‰ä¸‹ / 放開 Alt éµä¾†å°‡æ¡†é¸åˆ‡æ›æˆè§¸ç¢°é¸å–或將觸碰é¸å–切æ›å›žæ¡†é¸ã€‚
    - é™¤éžæ‰‹å‹•釿–°æŽ’列,ä¸ç„¶æ‚¨å»ºç«‹çš„æœ€å¾Œä¸€å€‹ç‰©ä»¶éƒ½æœƒæ”¾ç½®åœ¨æœ€ä¸Šå±¤ã€‚ + é™¤éžæ‰‹å‹•釿–°æŽ’列,ä¸ç„¶ä½ å»ºç«‹çš„æœ€å¾Œä¸€å€‹ç‰©ä»¶éƒ½æœƒæ”¾ç½®åœ¨æœ€ä¸Šå±¤ã€‚
    - 因此若沒有é¸å–任何物件,按一次 Shift+Tab å¯å¿«é€Ÿåœ°é¸å–您最後建立的物件。 + 因此若沒有é¸å–任何物件,按一次 Shift+Tab å¯å¿«é€Ÿåœ°é¸å–你最後建立的物件。
    - 這åªå°ç›®å‰åœ–層裡的物件有作用 (é™¤éžæ‚¨åœ¨å好設定裡變更設定)。 + 這åªå°ç›®å‰åœ–層裡的物件有作用 (除éžä½ åœ¨å好設定裡變更設定)。
    - 這åªå°ç›®å‰åœ–層裡的物件有作用 (é™¤éžæ‚¨åœ¨å好設定裡變更設定)。 + 這åªå°ç›®å‰åœ–層裡的物件有作用 (除éžä½ åœ¨å好設定裡變更設定)。
    - 如果您的éµç›¤æœ‰ Meta éµï¼Œæ‚¨å¯èƒ½å¸Œæœ›å°‡ä¿®æ”¹éµè¨­å®šä½¿ç”¨ Meta éµè€Œä¸æ˜¯ Alt éµã€‚ + 如果你的éµç›¤æœ‰ Meta éµï¼Œä½ å¯èƒ½å¸Œæœ›å°‡ä¿®æ”¹éµè¨­å®šä½¿ç”¨ Meta éµè€Œä¸æ˜¯ Alt éµã€‚
    - (有時您也å¯ä»¥ç”¨ Ctrl+Alt+點擊 (é¸å–群組裡的下層物件) å’Œ Alt+點擊 的作用一樣。) + (有時你也å¯ä»¥ç”¨ Ctrl+Alt+點擊 (é¸å–群組裡的下層物件) å’Œ Alt+點擊 的作用一樣。)
    - Alt+拖曳å¯ç§»å‹•ç›®å‰é¸å–的物件 (ä¸å¿…管é¸å–物件是å¦åœ¨æ»‘鼠游標下方),ä¸ç®¡æ‚¨å¾žå“ªè£¡é–‹å§‹æ‹–曳。 + Alt+拖曳å¯ç§»å‹•ç›®å‰é¸å–的物件 (ä¸å¿…管é¸å–物件是å¦åœ¨æ»‘鼠游標下方),ä¸ç®¡ä½ å¾žå“ªè£¡é–‹å§‹æ‹–曳。
    - 如果您的éµç›¤æœ‰ Meta éµï¼Œæ‚¨å¯èƒ½å¸Œæœ›å°‡ä¿®æ”¹éµè¨­å®šä½¿ç”¨ Meta éµè€Œä¸æ˜¯ Alt éµã€‚ + 如果你的éµç›¤æœ‰ Meta éµï¼Œä½ å¯èƒ½å¸Œæœ›å°‡ä¿®æ”¹éµè¨­å®šä½¿ç”¨ Meta éµè€Œä¸æ˜¯ Alt éµã€‚
    - This temporarily disables snapping when you are dragging with snapping activated. + 這項能暫時åœç”¨è²¼é½Šåˆ°æ ¼é»žæˆ–åƒè€ƒç·š (當拖曳到格點或åƒè€ƒç·šä¸Šæ–¹æ™‚) 的功能。
    - 您å¯ä»¥åœ¨æ‹–曳期間按ä½ç©ºç™½éµèƒ½ç”¢ç”Ÿç¾Žå¦™çš„「足跡ã€ã€‚ + ä½ å¯ä»¥åœ¨æ‹–曳期間按ä½ç©ºç™½éµèƒ½ç”¢ç”Ÿç¾Žå¦™çš„「足跡ã€ã€‚
    - The default size increment is added to (or subtracted from) either the selection's height or width, whichever one is larger. Scaling is done around the center of the selection's bounding box and keeps the proportions of the selected object(s). + é è¨­å°ºå¯¸å¢žåР釿œƒåŒæ™‚增加 (或減少) é¸å–範åœçš„高度或寬度,無論哪一個比較大。縮放會以é¸å–範åœé‚Šç•Œæ¡†ä¸­å¿ƒé€²è¡Œç¸®æ”¾ï¼Œä¸¦ä¿ç•™é¸å–物件的比例。
    - rotate around opposite corner + 沿å°é¢è§’è½æ—‹è½‰
    - 被移動的旋轉中心會記ä½ä¸¦å„²å­˜ (全部) 鏿“‡ç‰©ä»¶çš„ä½ç½®ï¼›æ‚¨å¯ä»¥é‡è¨­æ—‹è½‰ä¸­å¿ƒã€‚ + 被移動的旋轉中心會記ä½ä¸¦å„²å­˜ (全部) 鏿“‡ç‰©ä»¶çš„ä½ç½®ï¼›ä½ å¯ä»¥é‡è¨­æ—‹è½‰ä¸­å¿ƒã€‚
    - cycle z-order + 循環排列順åº
    - 正常情æ³ä¸‹ï¼Œæ‚¨éœ€è¦å¾žéžè·¯å¾‘ä¸Šæ–¹çš„åœ°æ–¹æˆ–ç¯€é»žé–‹å§‹æ‹–æ›³ä»¥é‡æ–°é–‹å§‹æ¡†é¸ã€‚ + 正常情æ³ä¸‹ï¼Œä½ éœ€è¦å¾žéžè·¯å¾‘ä¸Šæ–¹çš„åœ°æ–¹æˆ–ç¯€é»žé–‹å§‹æ‹–æ›³ä»¥é‡æ–°é–‹å§‹æ¡†é¸ã€‚
    - ä¸éŽï¼Œè‹¥æ‚¨åœ¨æ‹–æ›³å‰æŒ‰ Shift éµï¼Œå³ä½¿æ‚¨å¾žè·¯å¾‘上方開始拖曳 Inkscape 也會執行框é¸å‹•作。 + ä¸éŽï¼Œè‹¥ä½ åœ¨æ‹–æ›³å‰æŒ‰ Shift éµï¼Œå³ä½¿ä½ å¾žè·¯å¾‘上方開始拖曳 Inkscape 也會執行框é¸å‹•作。
    - 您的滑鼠游標必須在膨脹 / 收縮的節點上方。 + 你的滑鼠游標必須在膨脹 / 收縮的節點上方。
    - Each key press or turn of the mouse wheel selects the nearest unselected node or deselects the farthest selected node. + 按下æ¯å€‹æŒ‰éµæˆ–滾動滑鼠滾輪å¯é¸å–最é è¿‘未é¸å–çš„ç¯€é»žæˆ–è€…å–æ¶ˆé¸å–最é çš„å·²é¸å–節點。
    - This restricts movement to the directions of the node's handles, their counter directions and perpendiculars (total 8 snaps). + 這å¯é™åˆ¶ç¯€é»žæŽ§åˆ¶æŸ„移動的方å‘ï¼Œå…¶ç›¸åæ–¹å‘èˆ‡åž‚ç›´æ–¹å‘ (總共 8 段貼齊)。
    - 若節點有縮進去的控制柄,按著 Shift éµé€²è¡Œæ‹–曳å¯è®“您將控制柄拉出節點外。 + 若節點有縮進去的控制柄,按著 Shift éµé€²è¡Œæ‹–曳å¯è®“你將控制柄拉出節點外。
    - 您å¯ä»¥åœ¨æ‹–曳期間按ä½ç©ºç™½éµèƒ½ç”¢ç”Ÿç¾Žå¦™çš„「足跡ã€ã€‚ + ä½ å¯ä»¥åœ¨æ‹–曳期間按ä½ç©ºç™½éµèƒ½ç”¢ç”Ÿç¾Žå¦™çš„「足跡ã€ã€‚
    - The default angle step is 15 degrees. This also snaps to the handle's original angle, its counter direction and perpendiculars. + é è¨­å›ºå®šè§’度為 15 åº¦ã€‚åŒæ™‚也會貼齊控制柄的原本角度ã€å…¶ç›¸åæ–¹å‘與垂直方å‘。
    - 您å¯ä»¥åˆ†åˆ¥ä½¿ç”¨ , (逗號) éµå’Œ . (å¥è™Ÿ) éµä¾†æ›¿ä»£ < å’Œ > 按éµã€‚ + ä½ å¯ä»¥åˆ†åˆ¥ä½¿ç”¨ , (逗號) éµå’Œ . (å¥è™Ÿ) éµä¾†æ›¿ä»£ < å’Œ > 按éµã€‚
    - The default size increment is added to (or subtracted from) either the node selection's height or width, whichever one is larger. Scaling keeps the proportions of the node selection. + é è¨­å°ºå¯¸å¢žåР釿œƒåŒæ™‚增加 (或減少) é¸å–節點的高度或寬度,無論哪一個比較大。縮放會ä¿ç•™é¸å–節點的比例。
    - 按 Shift+C ç¬¬ä¸€æ¬¡å¯æ”¹è®Šç¯€é»žé¡žåž‹ï¼›è‹¥æ‚¨ç¹¼çºŒåœ¨å·²ç¶“æ˜¯å°–è§’çš„ç¯€é»žä¸Šå†æŒ‰ä¸€æ¬¡ Shift+C,則會縮回本身的控制柄。 + 按 Shift+C ç¬¬ä¸€æ¬¡å¯æ”¹è®Šç¯€é»žé¡žåž‹ï¼›è‹¥ä½ ç¹¼çºŒåœ¨å·²ç¶“æ˜¯å°–è§’çš„ç¯€é»žä¸Šå†æŒ‰ä¸€æ¬¡ Shift+C,則會縮回本身的控制柄。
    - 當變æˆå¹³æ»‘或å°ç¨±æ™‚,您å¯ä»¥è—‰ç”±å°‡æ»‘鼠移到其中一個控制柄上方來鎖定該控制柄的ä½ç½®ã€‚ + 當變æˆå¹³æ»‘或å°ç¨±æ™‚,你å¯ä»¥è—‰ç”±å°‡æ»‘鼠移到其中一個控制柄上方來鎖定該控制柄的ä½ç½®ã€‚
    - 您å¯ä»¥è—‰ç”±å°‡æ»‘é¼ åœç•™åœ¨å…©å€‹çµåˆç¯€é»žä¹‹ä¸­çš„其中一個上方來鎖定該節點的ä½ç½®ã€‚ + ä½ å¯ä»¥è—‰ç”±å°‡æ»‘é¼ åœç•™åœ¨å…©å€‹çµåˆç¯€é»žä¹‹ä¸­çš„其中一個上方來鎖定該節點的ä½ç½®ã€‚
    - double-click + 點擊兩下 建立節點 @@ -5736,7 +5731,7 @@ feature request).

    +拖動滑鼠
    - temporarily switch to shrink mode + 暫時切æ›åˆ°æ”¶ç¸®æ¨¡å¼
    - temporarily switch to grow mode + 暫時切æ›åˆ°è†¨è„¹æ¨¡å¼
    - set brush width to its minimum or maximum + 將筆刷寬度設定為其最å°å€¼æˆ–最大值
    @@ -6075,7 +6070,7 @@ feature request).

    拖動滑鼠 @@ -6086,7 +6081,7 @@ feature request).

    +拖動滑鼠 @@ -6097,7 +6092,7 @@ feature request).

    +拖動滑鼠 @@ -6147,7 +6142,7 @@ feature request).

    @@ -6326,7 +6321,7 @@ feature request).

    @@ -6646,7 +6641,7 @@ feature request).

    @@ -7194,7 +7189,7 @@ feature request).

    @@ -7205,13 +7200,13 @@ feature request).

    +拖動滑鼠 @@ -7266,7 +7261,7 @@ feature request).

    拖動滑鼠 @@ -7283,7 +7278,7 @@ feature request).

    @@ -7300,7 +7295,7 @@ feature request).

    @@ -7320,7 +7315,7 @@ feature request).

    點擊 @@ -7666,7 +7661,7 @@ feature request).

    Enter @@ -7675,22 +7670,22 @@ feature request).

    點擊滑鼠å³éµ @@ -7743,7 +7738,7 @@ feature request).

    拖動滑鼠 @@ -7814,7 +7809,7 @@ feature request).

    End @@ -7976,7 +7971,7 @@ feature request).

    @@ -8313,7 +8308,7 @@ feature request).

    @@ -8734,7 +8729,7 @@ feature request).

    End @@ -8766,7 +8761,7 @@ feature request).

    End @@ -8836,7 +8831,7 @@ feature request).

    +拖動滑鼠 @@ -8953,13 +8948,13 @@ feature request).

    diff --git a/share/tutorials/tutorial-advanced.zh_TW.svg b/share/tutorials/tutorial-advanced.zh_TW.svg index 3bf46afa4..f25962f81 100644 --- a/share/tutorials/tutorial-advanced.zh_TW.svg +++ b/share/tutorials/tutorial-advanced.zh_TW.svg @@ -36,474 +36,444 @@ - 使用 Ctrl+↓ å‘下æ²å‹•é é¢ + 使用 Ctrl+↓ å‘下æ²å‹•é é¢ - + ::進階 -bulia byak, buliabyak@users.sf.net å’Œ josh andler, scislac@users.sf.net - - + + + 這篇教學內容涵蓋複製/貼上ã€ç¯€é»žç·¨è¼¯ã€æ‰‹ç¹ªå’Œè²èŒ²æ›²ç·šã€è·¯å¾‘é‹ç”¨ã€å¸ƒæž—é‹ç®—ã€åç§»ã€ç°¡åŒ–和文字工具。 - - + + - 使用 Ctrl+æ–¹å‘éµã€æ»‘鼠滾輪 或 æŒ‰è‘—æ»‘é¼ ä¸­éµæ‹–曳 å¯å‘下æ²å‹•é é¢ã€‚關於建立ã€é¸å–和改變物件的基本方法,請閱讀 說明 > 指導手冊 中的基本教學。 + 使用 Ctrl+æ–¹å‘éµã€æ»‘鼠滾輪 或 æŒ‰è‘—æ»‘é¼ ä¸­éµæ‹–曳 å¯å‘下æ²å‹•é é¢ã€‚關於建立ã€é¸å–和改變物件的基本方法,請閱讀 說明 > 指導手冊 中的基本教學。 - - 剪貼技巧 + + 剪貼技巧 - - + + - 你用 Ctrl+C 複製或用 Ctrl+X 剪下一些物件後,普通的 貼上 指令 (Ctrl+V) 會在滑鼠游標正下方貼上複製的物件,如果游標ä¸åœ¨è¦–窗內,會將複製物件貼在文件視窗的中心ä½ç½®ã€‚ä¸éŽï¼Œåœ¨å‰ªè²¼ç°¿ä¸­çš„ç‰©ä»¶è¢«è¤‡è£½æ™‚ä»æœƒè¨˜ä½åŽŸå§‹ä½ç½®ï¼Œä¸”ä½ å¯ä»¥ç”¨ åŒä½ç½®è²¼ä¸Š (Ctrl+Alt+V) 貼回到那裡。 + 你用 Ctrl+C 複製或用 Ctrl+X 剪下一些物件後,普通的 貼上 指令 (Ctrl+V) 會在滑鼠游標正下方貼上複製的物件,如果游標ä¸åœ¨è¦–窗內,會將複製物件貼在文件視窗的中心ä½ç½®ã€‚ä¸éŽï¼Œåœ¨å‰ªè²¼ç°¿ä¸­çš„ç‰©ä»¶è¢«è¤‡è£½æ™‚ä»æœƒè¨˜ä½åŽŸå§‹ä½ç½®ï¼Œä¸”ä½ å¯ä»¥ç”¨ åŒä½ç½®è²¼ä¸Š (Ctrl+Alt+V) 貼回到那裡。 - - + + - å¦ä¸€å€‹æŒ‡ä»¤ - è²¼ä¸Šæ¨£å¼ (Shift+Ctrl+V) 套用在剪貼簿上的 (第一個) 物件樣å¼åˆ°ç›®å‰çš„é¸å–。被套用的樣å¼åŒ…括全部的填色ã€é‚Šæ¡†å’Œå­—型設定,但ä¸åŒ…å«å½¢ç‹€ã€å¤§å°æˆ–æŒ‡å®šå½¢ç‹€é¡žåž‹çš„åƒæ•¸ï¼Œä¾‹å¦‚星形的尖角數目。 + å¦ä¸€å€‹æŒ‡ä»¤ - è²¼ä¸Šæ¨£å¼ (Shift+Ctrl+V) 套用在剪貼簿上的 (第一個) 物件樣å¼åˆ°ç›®å‰çš„é¸å–。被套用的樣å¼åŒ…括全部的填色ã€é‚Šæ¡†å’Œå­—型設定,但ä¸åŒ…å«å½¢ç‹€ã€å¤§å°æˆ–æŒ‡å®šå½¢ç‹€é¡žåž‹çš„åƒæ•¸ï¼Œä¾‹å¦‚星形的尖角數目。 - - + + - åˆå¦ä¸€å€‹è²¼ä¸ŠæŒ‡ä»¤ - 貼上尺寸,縮放é¸å–的物件使其與剪貼簿物件的尺寸屬性相åŒã€‚下列為一些貼上尺寸的指令:貼上尺寸ã€è²¼ä¸Šå¯¬åº¦ã€è²¼ä¸Šé«˜åº¦ã€åˆ†åˆ¥è²¼ä¸Šå°ºå¯¸ã€åˆ†åˆ¥è²¼ä¸Šå¯¬åº¦å’Œåˆ†åˆ¥è²¼ä¸Šé«˜åº¦ã€‚ + åˆå¦ä¸€å€‹è²¼ä¸ŠæŒ‡ä»¤ - 貼上尺寸,縮放é¸å–的物件使其與剪貼簿物件的尺寸屬性相åŒã€‚下列為一些貼上尺寸的指令:貼上尺寸ã€è²¼ä¸Šå¯¬åº¦ã€è²¼ä¸Šé«˜åº¦ã€åˆ†åˆ¥è²¼ä¸Šå°ºå¯¸ã€åˆ†åˆ¥è²¼ä¸Šå¯¬åº¦å’Œåˆ†åˆ¥è²¼ä¸Šé«˜åº¦ã€‚ - - + + - 貼上尺寸 會縮放整個é¸å–å€ä½¿å…¶èˆ‡å‰ªè²¼ç°¿ç‰©ä»¶æ•´é«”大å°ç›¸åŒã€‚貼上寬度/貼上高度 會水平/垂直縮放整個é¸å–å€å› è€Œå®ƒæœƒèˆ‡å‰ªè²¼ç°¿ç‰©ä»¶çš„寬度/高度相åŒã€‚這些指令éµå¾ªæ–¼é¸å–工具控制列上(W å’Œ H 之間的地方)的縮放比例鎖定,所以當鎖定被按下時,會以等比例縮放é¸å–物件的其他尺寸;å¦å‰‡å…¶ä»–尺寸沒有變化。此指令包å«ã€Œå€‹åˆ¥ã€è™•ç†é¡žä¼¼æ–¼ä¸Šè¿°çš„æŒ‡ä»¤ï¼Œé™¤äº†å®ƒå€‘個別使æ¯å€‹é¸å–物件縮放為與剪貼簿物件的大å°/寬度/高度相åŒã€‚ + 貼上尺寸 會縮放整個é¸å–å€ä½¿å…¶èˆ‡å‰ªè²¼ç°¿ç‰©ä»¶æ•´é«”大å°ç›¸åŒã€‚貼上寬度/貼上高度 會水平/垂直縮放整個é¸å–å€å› è€Œå®ƒæœƒèˆ‡å‰ªè²¼ç°¿ç‰©ä»¶çš„寬度/高度相åŒã€‚這些指令éµå¾ªæ–¼é¸å–工具控制列上(W å’Œ H 之間的地方)的縮放比例鎖定,所以當鎖定被按下時,會以等比例縮放é¸å–物件的其他尺寸;å¦å‰‡å…¶ä»–尺寸沒有變化。此指令包å«ã€Œå€‹åˆ¥ã€è™•ç†é¡žä¼¼æ–¼ä¸Šè¿°çš„æŒ‡ä»¤ï¼Œé™¤äº†å®ƒå€‘個別使æ¯å€‹é¸å–物件縮放為與剪貼簿物件的大å°/寬度/高度相åŒã€‚ - - + + 剪貼簿是全系統範åœçš„ - ä½ å¯ä»¥åœ¨ä¸åŒçš„ Inkscape 實例之間複製/貼上物件,也å¯ä»¥åœ¨ Inkscape 和其他應用程å¼ä¹‹é–“ (此應用程å¼å¿…須能處ç†å‰ªè²¼ç°¿ä¸Šçš„ SVG æ‰å¯ä½¿ç”¨)。 - - 手繪和è¦å‰‡è·¯å¾‘ + + 手繪和è¦å‰‡è·¯å¾‘ - - + + 製作一個任æ„形狀最簡單的方法是使用鉛筆 (手繪) 工具 (F6) 繪製: - - - - - - - - - - - + + + + + + + + + + + å¦‚æžœä½ æƒ³è¦æ›´å¤šè¦å‰‡çš„形狀,使用筆 (è²èŒ²æ›²ç·š) 工具 (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + - With the Pen tool, each click creates a sharp node without any curve -handles, so a series of clicks produces a sequence of straight line segments. -click and drag creates a smooth Bezier node with two collinear opposite -handles. Press Shift while dragging out a handle to rotate only one -handle and fix the other. As usual, Ctrl limits the direction of either -the current line segment or the Bezier handles to 15 degree increments. Pressing -Enter finalizes the line, Esc cancels it. To cancel -only the last segment of an unfinished line, press Backspace. - + ç”¨ç­†å·¥å…·æ¯æ¬¡ 點擊 會建立一個無任何曲線控制柄的尖銳節點,所以一連串點擊會產生一æ¢ç›´ç·šç·šæ®µçš„串連。點擊並拖曳 會建立一個帶有兩個å°ç«‹æ–¼åŒä¸€ç›´ç·šä¸Šçš„æŽ§åˆ¶é»žçš„平滑è²èŒ²æ›²ç·šç¯€é»žã€‚ç•¶æ‹–ä½ä¸€å€‹æŽ§åˆ¶é»žæ™‚按 Shift å¯åªæ—‹è½‰å–®å€‹æŽ§åˆ¶é»žä¸¦å›ºå®šå¦ä¸€å€‹ã€‚Ctrl åƒå¾€å¸¸ä¸€æ¨£å¯é™åˆ¶ç›®å‰ç·šæ®µæˆ–è²èŒ²æ›²ç·šæŽ§åˆ¶é»žæ–¹ä½çš„增加é‡ç‚º 15 度。按 Enter 以完æˆä¸¦çµæŸæ­¤ç›´ç·šï¼ŒæŒ‰ Esc å¯å–消它。按 Backspace å¯åªå–消未完æˆç›´ç·šçš„æœ€å¾Œç·šæ®µã€‚ - - + + ä¸è«–用手繪或è²èŒ²æ›²ç·šå·¥å…·ï¼Œç›®å‰é¸å–的路徑於兩å´ç«¯é»žæœƒé¡¯ç¤ºæ–¹å½¢çš„å°éŒ¨é»žã€‚這些錨點讓你å¯ç¹¼çºŒé€™å€‹è·¯å¾‘ (從其中一個錨點開始繪製) 或關閉它 (從其中一個錨點繪製到å¦ä¸€å€‹)ï¼Œè€Œä¸æ˜¯å»ºç«‹ä¸€å€‹æ–°çš„路徑。 - - 編輯路徑 + + 編輯路徑 - - + + 用形狀工具建立ä¸åŒçš„形狀,筆和鉛筆工具建立的æ±è¥¿ç¨±ç‚ºè·¯å¾‘。路徑是直線線段和(或)è²èŒ²æ›²ç·šçš„串連,åƒä»»ä½•å…¶ä»– Inkscape 物件一樣會有任æ„填色和邊框屬性。但是ä¸åŒçš„形狀ã€è·¯å¾‘å¯ä»¥è—‰ç”±ä»»æ„拖動它的節點(ä¸åƒ…é å®šç¾©çš„æŽ§åˆ¶é»ž)或直接拖動路徑的線段來編輯。é¸å–這個路徑並切æ›ç‚ºç¯€é»žå·¥å…· (F2): - - - + + + 你會看到路徑上有許多ç°è‰²æ–¹å½¢ç¯€é»žã€‚這些節點å¯ä»¥è—‰ç”±é»žæ“Šä¾†é¸å–,Shift+點擊 或用拖曳一個é¸å–框 — å°±åƒæ˜¯ç”¨é¸å–工具鏿“‡ç‰©ä»¶ä¸€æ¨£ã€‚你也å¯ä»¥é»žæ“Šè·¯å¾‘線段自動é¸å–相鄰的節點。é¸å–的節點會變明亮並且顯示它們的節點控制柄 — 一個或兩個å°åœ“形由直線連接å„個é¸å–的節點。! 按éµå¯å轉目å‰å­è·¯å¾‘上é¸å–的節點 (å³å«æœ‰æœ€å¾Œé¸å–的節點的å­è·¯å¾‘)ï¼›Alt+! å¯å轉整個路徑。 - - + + - Paths are edited by dragging their nodes, node handles, or directly -dragging a path segment. (Try to drag some nodes, handles, and path segments of the -above path.) Ctrl works as usual to restrict movement and rotation. The arrow -keys, Tab, [, ], <, > keys with their modifiers all work just as they do in selector, -but apply to nodes instead of objects. You can add nodes anywhere on a path by -either double clicking or by Ctrl+Alt+click at the desired location. - + 路徑å¯è—‰ç”±æ‹–曳它們的節點ã€ç¯€é»žæŽ§åˆ¶æŸ„或直接拖動路徑線段進行編輯。(試著拖動上é¢è·¯å¾‘çš„ä¸€äº›ç¯€é»žã€æŽ§åˆ¶æŸ„å’Œè·¯å¾‘ç·šæ®µã€‚) Ctrl 的作用與往常一樣å¯é™åˆ¶ç§»å‹•é‡å’Œæ—‹è½‰é‡ã€‚æ–¹å‘éµã€Tabã€[ã€]ã€<ã€> 按éµçš„全部作用都與在é¸å–å™¨æ™‚ä¸€æ¨£ï¼Œä½†å¥—ç”¨åˆ°ç¯€é»žè€Œä¸æ˜¯ç‰©ä»¶ã€‚ä½ å¯ä»¥è—‰ç”±é»žæ“Šå…©æ¬¡æˆ– Ctrl+Alt+點擊 想è¦çš„ä½ç½®æ–¼è·¯å¾‘上任何地方增加節點。 - - + + - You can delete nodes with Del or Ctrl+Alt+click. When -deleting nodes it will try to retain the shape of the path, if you desire for the -handles of the adjacent nodes to be retracted (not retaining the shape) you can -delete with Ctrl+Del. Additionally, you can duplicate (Shift+D) -selected nodes. The path can be broken (Shift+B) at the selected nodes, or if you -select two endnodes on one path, you can join them (Shift+J). - + ä½ å¯ä»¥ç”¨ Del 或 Ctrl+Alt+點擊 刪除節點。當刪除節點時會試著維æŒè·¯å¾‘的形狀,如果你渴望撤銷相鄰節點的控制柄,那麼å¯ä»¥ç”¨ Ctrl+Del 刪除。å¦å¤–,你å¯ä»¥å†è£½ (Shift+D) é¸å–的節點。於é¸å–數個節點上的路徑å¯ä»¥è¢«æ‹†é–‹ (Shift+B),或者如果你é¸å–路徑上兩個端點節點,你å¯ä»¥åˆä½µå®ƒå€‘ (Shift+J)。 - - + + - A node can be made cusp (Shift+C), which means -its two handles can move independently at any angle to each other; -smooth (Shift+S), which means its handles are -always on the same straight line (collinear); symmetric -(Shift+Y), which is the same as smooth, but the handles also have the -same length; and auto-smooth (Shift+A), a special -node that automatically adjusts the handles of the node and surrounding auto-smooth nodes -to maintain a smooth curve. When you switch the type of node, you can preserve the position -of one of the two handles by hovering your mouse over it, so that only the other handle is -rotated/scaled to match. - + 節點å¯ä»¥è®Šç‚ºå°–è§’ (Shift+C)ï¼Œé€™è¡¨ç¤ºå®ƒçš„å…©å€‹æŽ§åˆ¶æŸ„å½¼æ­¤ä¹‹é–“å¯æ–¼ä»»ä½•角度å„自移動;平滑 (Shift+S) è¡¨ç¤ºå®ƒçš„æŽ§åˆ¶é»žç¸½ä¿æŒåœ¨åŒä¸€ç›´ç·šä¸Š (共線);而å°ç¨± (Shift+Y) åŒæ–¼å¹³æ»‘,但控制柄還具有相åŒçš„長度。當你切æ›ç¯€é»žçš„類型時,你å¯ä»¥å°‡æ»‘é¼ åœç•™åœ¨å…¶ä¸­ä¸€å€‹æŽ§åˆ¶é»žä¸Šé¢ä½¿å…¶ç¶­æŒåŽŸä¾†çš„ä½ç½®ï¼Œæ‰€ä»¥åªæœ‰å¦ä¸€å€‹æŽ§åˆ¶é»žæœƒé…åˆæ—‹è½‰/縮放。 - - + + - + åŒæ¨£åœ°ä½ ç”¨ Ctrl+點擊 節點的控制點å¯ä»¥æ’¤éŠ·å®ƒã€‚å¦‚æžœç›¸é„°çš„å…©å€‹ç¯€é»žå·²æ’¤éŠ·ä»–å€‘çš„æŽ§åˆ¶é»žï¼Œç¯€é»žä¹‹é–“çš„è·¯å¾‘ç·šæ®µæœƒè®Šæˆç›´ç·šã€‚從節點 Shift+拖曳離開 坿¢å¾©å·²æ’¤éŠ·çš„ç¯€é»žã€‚ - - å­è·¯å¾‘å’Œåˆä½µ + + å­è·¯å¾‘å’Œåˆä½µ - - + + - + 一個路徑物件å¯èƒ½åŒ…å«å¤šå€‹å­è·¯å¾‘。å­è·¯å¾‘是節點連接å¦ä¸€å€‹ç¯€é»žçš„串連。(因此,如果路徑有多個å­è·¯å¾‘ï¼Œä¸¦ä¸æ˜¯æ‰€æœ‰çš„節點都連接在一起。) 下é¢å·¦é‚Šçš„三個路徑屬於單一複åˆè·¯å¾‘;於å³é‚Šç›¸åŒçš„三個路徑是ç¨ç«‹çš„路徑物件: - - - - - - + + + + + + - + 注æ„那個複åˆè·¯å¾‘ä¸åŒæ–¼ç¾¤çµ„ã€‚å®ƒæ˜¯å–®ä¸€å€‹ç‰©ä»¶ï¼Œåªæ˜¯æ•´å€‹éƒ½å¯é¸å–。如果你é¸å–上é¢å·¦é‚Šçš„物件並切æ›ç‚ºç¯€é»žå·¥å…·ï¼Œä½ æœƒçœ‹åˆ°ç¯€é»žé¡¯ç¤ºåœ¨å…¨éƒ¨ä¸‰å€‹å­è·¯å¾‘上。在å³é‚Šçš„,你åªèƒ½ä¸€æ¬¡ç·¨è¼¯ä¸€å€‹è·¯å¾‘上的節點。 - - + + - + - Inkscape å¯ä»¥åˆä½µæ•¸å€‹è·¯å¾‘為一個複åˆè·¯å¾‘ (Ctrl+K) 和打散一個複åˆè·¯å¾‘變為分開的數個路徑 (Shift+Ctrl+K)。在上é¢çš„範例嘗試這些指令。由於一個物件åªèƒ½æœ‰ä¸€ç¨®å¡«è‰²å’Œé‚Šæ¡†ï¼Œä¸€å€‹æ–°çš„複åˆè·¯å¾‘會使用åˆä½µå‰ç¬¬ä¸€å€‹(排列在最下層)物件的樣å¼ã€‚ + Inkscape å¯ä»¥åˆä½µæ•¸å€‹è·¯å¾‘為一個複åˆè·¯å¾‘ (Ctrl+K) 和打散一個複åˆè·¯å¾‘變為分開的數個路徑 (Shift+Ctrl+K)。在上é¢çš„範例嘗試這些指令。由於一個物件åªèƒ½æœ‰ä¸€ç¨®å¡«è‰²å’Œé‚Šæ¡†ï¼Œä¸€å€‹æ–°çš„複åˆè·¯å¾‘會使用åˆä½µå‰ç¬¬ä¸€å€‹(排列在最下層)物件的樣å¼ã€‚ - - + + - + ç•¶ä½ åˆä½µæœ‰å¡«è‰²çš„é‡ç–Šè·¯å¾‘時,通常在路徑é‡ç–Šåœ°æ–¹çš„填色會消失: - - - + + + - + 這個是製作帶有孔洞的物件最簡單的方法。看下é¢çš„「布林é‹ç®—ã€æ®µè½å¯äº†è§£æ›´å¤šå¼·å¤§çš„路徑指令。 - - è½‰æ›æˆè·¯å¾‘ + + è½‰æ›æˆè·¯å¾‘ - - + + - + 任何形狀或文字物件都å¯è½‰æ›æˆè·¯å¾‘ (Shift+Ctrl+C)。這個æ“ä½œä¸æœƒæ”¹è®Šç‰©ä»¶çš„外觀,但是會移除原本類型的全部特性 (例如你ä¸å†èƒ½å°‡çŸ©å½¢çš„邊角圓角化或編輯文字)ï¼›å–而代之地,你ç¾åœ¨å¯ä»¥ç·¨è¼¯å®ƒçš„ç¯€é»žã€‚ä¸‹é¢æœ‰å…©å€‹æ˜Ÿå½¢ — å·¦é‚Šçš„ä»æ˜¯å½¢ç‹€è€Œå³é‚Šçš„æ˜¯å·²ç¶“è½‰æ›æˆè·¯å¾‘。切æ›åˆ°ç¯€é»žå·¥å…·ä¸¦æ¯”較é¸å–時它們的編輯特性: - - - - + + + + - + 此外,你å¯ä»¥å°‡ä»»ä½•物件的邊框轉æ›ç‚ºè·¯å¾‘ (“輪廓â€)。下é¢çš„第一個物件是原本的路徑 (無填色,黑色邊框),第二個是使用邊框轉æˆè·¯å¾‘æŒ‡ä»¤çš„çµæžœ (黑色填色,無邊框): - - - - 布林é‹ç®— + + + + 布林é‹ç®— - - + + - + 在路徑é¸å–®ä¸­çš„這個指令讓你用布林é‹ç®—åˆä½µå…©å€‹æˆ–多個物件: - 原始形狀 - 相加 (Ctrl++) - 減去 (Ctrl+-) - 交集(Ctrl+*) - 排除(Ctrl+^) - 除法(Ctrl+/) - 剪切(Ctrl+Alt+/) - - - - - - - - - - - 下層減去上層 - - - - - - 這些指令的éµç›¤å¿«æ·éµæ˜¯é‡å°å¸ƒæž—é‹ç®—的類比算法 (相加是è¯é›†ã€æ¸›åŽ»æ˜¯å·®é›†...ç­‰)。相減和排除指令åªèƒ½å¥—ç”¨åˆ°å…©å€‹å·²é¸æ“‡çš„物件;其他的å¯ä»¥ä¸€æ¬¡è™•ç†å¤šå€‹ç‰©ä»¶ã€‚çµæžœéƒ½æ˜¯å‘ˆç¾ä¸‹å±¤ç‰©ä»¶çš„æ¨£å¼ã€‚ - - - - - - - ä½¿ç”¨æŽ’é™¤æŒ‡ä»¤çš„çµæžœçœ‹èµ·ä¾†åƒæ˜¯åˆä½µ(如上),但它的差別在於排除會在原來的路徑交差點增加é¡å¤–的節點。除法和剪切之間的ä¸åŒæ˜¯å‰è€…以最上層物件切去整個下層物件,而後者åªåˆ‡åŽ»ä¸‹å±¤ç‰©ä»¶çš„é‚Šæ¡†ä¸¦åŽ»æŽ‰ä»»ä½•å¡«è‰² (這個å°å°‡ç„¡å¡«è‰²çš„邊框切割æˆç¢Žç‰‡å¾ˆæ–¹ä¾¿)。 - - - 內縮和外擴 + 原始形狀 + 相加 (Ctrl++) + 減去 (Ctrl+-) + 交集(Ctrl+*) + 排除(Ctrl+^) + 除法(Ctrl+/) + 剪切(Ctrl+Alt+/) + + + + + + + + + + + 下層減去上層 + + + + + + 這些指令的éµç›¤å¿«æ·éµæ˜¯é‡å°å¸ƒæž—é‹ç®—的類比算法 (相加是è¯é›†ã€æ¸›åŽ»æ˜¯å·®é›†...ç­‰)。相減和排除指令åªèƒ½å¥—ç”¨åˆ°å…©å€‹å·²é¸æ“‡çš„物件;其他的å¯ä»¥ä¸€æ¬¡è™•ç†å¤šå€‹ç‰©ä»¶ã€‚çµæžœéƒ½æ˜¯å‘ˆç¾ä¸‹å±¤ç‰©ä»¶çš„æ¨£å¼ã€‚ + + + + + + + ä½¿ç”¨æŽ’é™¤æŒ‡ä»¤çš„çµæžœçœ‹èµ·ä¾†åƒæ˜¯åˆä½µ(如上),但它的差別在於排除會在原來的路徑交差點增加é¡å¤–的節點。除法和剪切之間的ä¸åŒæ˜¯å‰è€…以最上層物件切去整個下層物件,而後者åªåˆ‡åŽ»ä¸‹å±¤ç‰©ä»¶çš„é‚Šæ¡†ä¸¦åŽ»æŽ‰ä»»ä½•å¡«è‰² (這個å°å°‡ç„¡å¡«è‰²çš„邊框切割æˆç¢Žç‰‡å¾ˆæ–¹ä¾¿)。 + + + 內縮和外擴 - - + + - + - Inkscape ä¸åªå¯ç”¨ç¸®æ”¾ä¾†æ“´å¼µå’Œæ”¶ç¸®å½¢ç‹€ï¼Œä¹Ÿå¯è—‰ç”±åç§»ç‰©ä»¶çš„è·¯å¾‘é”æˆæ•ˆæžœï¼Œå³æ¯å€‹é»žä»¥åž‚直於路徑方å‘ç§»å‹•ã€‚å°æ‡‰çš„æŒ‡ä»¤å稱為內縮 (Ctrl+() 和外擴 (Ctrl+))。下é¢é™³åˆ—的是原始路徑 (紅色) 和一些由原路徑經éŽå…§ç¸®æˆ–外擴的路徑: + Inkscape ä¸åªå¯ç”¨ç¸®æ”¾ä¾†æ“´å¼µå’Œæ”¶ç¸®å½¢ç‹€ï¼Œä¹Ÿå¯è—‰ç”±åç§»ç‰©ä»¶çš„è·¯å¾‘é”æˆæ•ˆæžœï¼Œå³æ¯å€‹é»žä»¥åž‚直於路徑方å‘ç§»å‹•ã€‚å°æ‡‰çš„æŒ‡ä»¤å稱為內縮 (Ctrl+() 和外擴 (Ctrl+))。下é¢é™³åˆ—的是原始路徑 (紅色) 和一些由原路徑經éŽå…§ç¸®æˆ–外擴的路徑: - - - - - - - - - + + + + + + + + + - + - 簡單的內縮和外擴指令產生這些路徑 (å¦‚æžœåŽŸç‰©ä»¶ä¸æ˜¯è·¯å¾‘先將它轉æˆè·¯å¾‘)。通常動態åç§» (Ctrl+J) 更方便些,å¯è£½ä½œå‡ºä¸€å€‹å¸¶æœ‰å¯æŽ§åˆ¶åç§»è·é›¢çš„æŽ§åˆ¶æŸ„的物件。é¸å–下é¢çš„物件,切æ›åˆ°ç¯€é»žå·¥å…·ä¸¦æ‹–動它的控制點來了解這功能: + 簡單的內縮和外擴指令產生這些路徑 (å¦‚æžœåŽŸç‰©ä»¶ä¸æ˜¯è·¯å¾‘先將它轉æˆè·¯å¾‘)。通常動態åç§» (Ctrl+J) 更方便些,å¯è£½ä½œå‡ºä¸€å€‹å¸¶æœ‰å¯æŽ§åˆ¶åç§»è·é›¢çš„æŽ§åˆ¶æŸ„的物件。é¸å–下é¢çš„物件,切æ›åˆ°ç¯€é»žå·¥å…·ä¸¦æ‹–動它的控制點來了解這功能: - - - + + + - + 上述的動態å移物件會記ä½åŽŸæœ¬è·¯å¾‘ï¼Œæ‰€ä»¥ç•¶ä½ ä¸€éåˆä¸€é的改變åç§»è·é›¢æ™‚å®ƒä¸æœƒå—到「æå®³ã€ã€‚ç•¶ä½ ä¸éœ€è¦å†åšä»»ä½•調整時,你å¯å°‡å移物件轉æ›å›žè·¯å¾‘。 - - + + - + 還有更方便的連çµå移,類似於動態變化但是連çµåˆ°å¦ä¸€å€‹å°šå¾…編輯的路徑。一個來æºè·¯å¾‘坿œ‰å¤šå€‹é€£çµå移。下é¢ç´…色的是來æºè·¯å¾‘,它的連çµå移是黑色邊框且無填色,其他的是黑色填色而無邊框。 - - + + - + - é¸å–紅色的物件並編輯它的節點;觀察連çµå移跟著如何變化。ç¾åœ¨é¸å–任一個å移並拖動它的控制柄以調整åç§»åŠå¾‘。最後注æ„ç§»å‹•æˆ–æ”¹è®Šä¾†æºæ™‚所有連çµå移如何跟著動,而在ä¸å¤±åŽ»å®ƒå€‘èˆ‡ä¾†æºçš„é€£çµæƒ…形下你å¯ä»¥å¦‚何ç¨è‡ªåœ°ç§»å‹•或改變å移物件。 + é¸å–紅色物件並編輯它的節點;觀察連çµå移跟著怎樣變化。ç¾åœ¨é¸å–任一個å移並拖動它的控制柄以調整åç§»åŠå¾‘。最後,注æ„ç§»å‹•æˆ–æ”¹è®Šä¾†æºæ™‚所有連çµå移是如何跟著變動,而在ä¸å¤±åŽ»å®ƒå€‘èˆ‡ä¾†æºçš„é€£çµæƒ…形下你能夠如何ç¨è‡ªåœ°ç§»å‹•或改變å移物件。 - + - - 簡化 + + 簡化 - - + + - + - 簡化指令 (Ctrl+L) 主è¦ç”¨æ–¼æ¸›å°‘路徑的節點數目並且盡å¯èƒ½ä¿æŒåŽŸä¾†çš„å½¢ç‹€ã€‚é€™å€‹å°ç”¨é‰›ç­†å·¥å…·è£½ä½œçš„路徑很有用,因為鉛筆工具有時候會製作ä¸å¿…è¦çš„節點。下é¢å·¦é‚Šçš„形狀是用手繪工具製作的,而å³é‚Šé‚£ä¸€å€‹æ˜¯ç¶“éŽç°¡åŒ–çš„çµæžœã€‚原始路徑有 28 個節點,而簡化éŽçš„åªæœ‰ 17 個 (這表示用節點工具進行編輯會更容易) 且外觀更平滑。 + 簡化指令 (Ctrl+L) 主è¦ç”¨æ–¼æ¸›å°‘路徑的節點數目並且盡å¯èƒ½ä¿æŒåŽŸä¾†çš„å½¢ç‹€ã€‚é€™å€‹å°ç”¨é‰›ç­†å·¥å…·è£½ä½œçš„路徑很有用,因為鉛筆工具有時候會製作ä¸å¿…è¦çš„節點。下é¢å·¦é‚Šçš„形狀是用手繪工具製作的,而å³é‚Šé‚£ä¸€å€‹æ˜¯ç¶“éŽç°¡åŒ–çš„çµæžœã€‚原始路徑有 28 個節點,而簡化éŽçš„åªæœ‰ 17 個 (這表示用節點工具進行編輯會更容易) 且外觀更平滑。 - - - - + + + + - + - 簡化的程度 (稱為臨界值) 決定在é¸å–物件的大å°ã€‚因此,如果你é¸å–一個路徑和一些較大的物件,那麼路徑簡化的程度會大於åªå–®ç¨é¸å–路徑時。å¦å¤–,簡化指令具有加速性。這表示如果你連續快速按 Ctrl+L 數次 (æ¯æ¬¡é–“éš”å°æ–¼ 0.5 ç§’)ï¼Œé‚£éº¼æ¯æ¬¡å‘¼å«æŒ‡ä»¤éƒ½æœƒå¢žåŠ è‡¨ç•Œå€¼ã€‚(如果你暫åœä¸€ä¸‹å†åŸ·è¡Œç°¡åŒ–,臨界值會回到é è¨­å€¼ã€‚) éˆæ´»é‹ç”¨åŠ é€Ÿç‰¹æ€§ï¼Œå¯è®“你輕易地ä¾ç…§ä¸åŒéœ€æ±‚套用準確的簡化程度。 + 簡化的程度 (稱為臨界值) 決定在é¸å–物件的大å°ã€‚因此,如果你é¸å–一個路徑和一些較大的物件,那麼路徑簡化的程度會大於åªå–®ç¨é¸å–路徑時。å¦å¤–,簡化指令具有加速性。這表示如果你連續快速按 Ctrl+L 數次 (æ¯æ¬¡é–“éš”å°æ–¼ 0.5 ç§’)ï¼Œé‚£éº¼æ¯æ¬¡å‘¼å«æŒ‡ä»¤éƒ½æœƒå¢žåŠ è‡¨ç•Œå€¼ã€‚(如果你暫åœä¸€ä¸‹å†åŸ·è¡Œç°¡åŒ–,臨界值會回到é è¨­å€¼ã€‚) éˆæ´»é‹ç”¨åŠ é€Ÿç‰¹æ€§ï¼Œå¯è®“你輕易地ä¾ç…§ä¸åŒéœ€æ±‚套用準確的簡化程度。 - - + + - + - 除了平滑手繪的邊框以外,簡化還å¯ç”¨æ–¼å„ç¨®å‰µæ„æ•ˆæžœã€‚通常形狀是死æ¿çš„,而æŸäº›ç¨‹åº¦ç°¡åŒ–幾何形狀的好處是å¯å‰µä½œå‡ºå¾ˆæ£’的生動外觀 — 柔化形狀的邊角而產生éžå¸¸è‡ªç„¶çš„æ‰­æ›²ï¼Œæ™‚而æµè¡Œæ™‚å°šï¼Œæ™‚è€Œç°¡æ¨¸æœ‰è¶£ã€‚ä¸‹é¢æœ‰ä¸€å€‹ç¾Žå·¥åœ–案形狀的例å­ï¼Œç¶“éŽç°¡åŒ–後使外觀變得很漂亮: + 除了平滑手繪的邊框以外,簡化還å¯ç”¨æ–¼å„ç¨®å‰µæ„æ•ˆæžœã€‚通常形狀是死æ¿çš„,而æŸäº›ç¨‹åº¦ç°¡åŒ–幾何形狀的好處是å¯å‰µä½œå‡ºå¾ˆæ£’的生動外觀 — 柔化形狀的邊角而產生éžå¸¸è‡ªç„¶çš„æ‰­æ›²ï¼Œæ™‚而æµè¡Œæ™‚å°šï¼Œæ™‚è€Œç°¡æ¨¸æœ‰è¶£ã€‚ä¸‹é¢æœ‰ä¸€å€‹ç¾Žå·¥åœ–案形狀的例å­ï¼Œç¶“éŽç°¡åŒ–後使外觀變得很漂亮: - 原本的 - 輕微簡化 - 高度簡化 - - - - - 建立文字 + 原本的 + 輕微簡化 + 高度簡化 + + + + + 建立文字 - - + + - + Inkscape å¯ä»¥è£½ä½œé•·ç¯‡å¹…且複雜的文章。ä¸éŽä¹Ÿå¯ä»¥æ¥µç‚ºæ–¹ä¾¿åœ°è£½ä½œå°‘è¨±æ–‡å­—çš„ç‰©ä»¶ï¼Œè«¸å¦‚æ¨™é¡Œã€æ——å¹Ÿã€æ¨™èªŒã€åœ–表標籤和說明...等。這å°ç¯€å°‡ä»‹ç´¹åŸºæœ¬çš„ Inkscape 文字功能。 - - + + - + 建立文字物件和切æ›åˆ°æ–‡å­—工具 (F8) 一樣簡單。點擊文件中æŸå€‹åœ°æ–¹ä¸¦è¼¸å…¥ä½ è¦çš„æ–‡å­—。開啟文字和字型å°è©±çª— (Shift+Ctrl+T) å¯è®Šæ›´å­—åž‹ã€æ¨£å¼ã€å¤§å°å’Œå°é½Šã€‚æ­¤å°è©±çª—也有文字輸入欄分é ï¼Œä½ å¯ä»¥åœ¨é‚£è£¡ç·¨è¼¯æ–‡å­—物件 - 在æŸäº›æƒ…形下它會比在畫布上編輯還方便 (å°¤å…¶é€™å€‹åˆ†é æ”¯æ´æ‹¼å­—檢查功能)。 - - + + - + åƒå…¶ä»–工具一樣,文字工具能é¸å–æ“æœ‰ã€Œæ–‡å­—物件ã€é¡žåž‹çš„物件,所以你å¯ä»¥é»žæ“Šä¾†é¸å–以åŠå°‡æ¸¸æ¨™æ”¾ç½®åœ¨ä»»ä½•ç¾æœ‰çš„æ–‡å­—物件 (比如本段è½)。 - - + + - + 文字排版常見的æ“作之一就是調整字è·å’Œè¡Œè·ã€‚正如往常,Inkscape æä¾›äº†é€™å€‹åŠŸèƒ½çš„éµç›¤å¿«æ·éµçµ„åˆã€‚當你正在編輯文字,Alt+< å’Œ Alt+> 坿”¹è®Šæ–‡å­—物件中目å‰é€™è¡Œçš„å­—è·ï¼Œæ‰€ä»¥æœƒä»¥ç›®å‰ç•«é¢çš„ 1 åƒç´ ç‚ºå–®ä½æ”¹è®Šç¸½é•·åº¦ (é¸å–å·¥å…·ä¸­ä»¥åŒæ¨£æŒ‰éµåšåƒç´ å¤§å°çš„縮放)。一般來說,如果文字物件裡的字型大å°å¤§æ–¼é è¨­çš„,它會é©ç•¶åœ°å£“縮字æ¯ä½¿å…¶æ¯”é è¨­çš„ç·Šå¯†ä¸€é»žã€‚ä¸‹é¢æœ‰ä¸€å€‹ç¯„例: - 原本的 - 減少字æ¯é–“è· - Inspiration - Inspiration - - + 原本的 + 減少字æ¯é–“è· + Inspiration + Inspiration + + - + 作為標題時緊縮變化會看起來較好一點,但ä»ç„¶ä¸å®Œç¾Žï¼šå­—æ¯é–“çš„è·é›¢æœƒä¸ä¸€è‡´ï¼Œä¾‹å¦‚「aã€å’Œã€Œtã€é›¢å¤ªé è€Œã€Œtã€å’Œã€Œiã€åˆé å¤ªè¿‘。這麼糟糕的字æ¯ç¸®æŽ’(在字型大時特別明顯)使用å“質差的字型會比用å“質好的字型還嚴é‡ï¼›å„˜ç®¡å¦‚此,在任何文字段è½ä¸­ä½¿ç”¨ä»»ä½•字型,你å¯èƒ½æœƒç™¼ç¾å­—è·èª¿æ•´å°æ–¼å­—æ¯çµ„åˆé‚„是有好處的。 - - + + - + Inkscape è¦ä½œé€™äº›èª¿æ•´éžå¸¸åœ°å®¹æ˜“。åªè¦å°‡ä½ çš„æ–‡å­—編輯游標移到需è¦èª¿æ•´çš„字元之間並使用 Alt+æ–¹å‘éµ ä¾†ç§»å‹•åœ¨æ¸¸æ¨™å³é‚Šçš„å­—æ¯ã€‚䏋颿œ‰ä¸€å€‹ç›¸åŒçš„æ¨™é¡Œï¼Œé€™æ¬¡æ‰‹å‹•調整看起來ä¸ä¸€è‡´çš„å­—æ¯ä½ç½®ï¼š - 減少字æ¯é–“è·ï¼Œæ‰‹å‹•縮排一些字æ¯çµ„åˆ - Inspiration - - + 減少字æ¯é–“è·ï¼Œæ‰‹å‹•縮排一些字æ¯çµ„åˆ + Inspiration + + - + 除了用 Alt+左方å‘éµ æˆ– Alt+峿–¹å‘éµ æ°´å¹³ç§»å‹•å­—æ¯å¤–,你也å¯ä»¥è—‰ç”± Alt+上方å‘éµ æˆ– Alt+下方å‘éµ åž‚ç›´ç§»å‹•å­—æ¯ï¼š - Inspiration - - + Inspiration + + - + ç•¶ç„¶ä½ å¯ä»¥å°‡æ–‡å­—è½‰æ›æˆè·¯å¾‘ (Shift+Ctrl+C) 並當作一般路徑物件來æ¬å‹•ã€‚å¯æ˜¯ä¿æŒç‚ºæ–‡å­—屬性會更加方便 — ä»å¯ç·¨è¼¯ï¼Œä½ ä¸éœ€è¦ç§»é™¤å­—æ¯ç¸®æŽ’和間è·å°±å¯ä»¥å˜—試ä¸åŒçš„å­—åž‹ï¼Œè€Œä¸”å„²å­˜æˆæª”案的佔用空間也較å°ã€‚「文字屬性ã€çš„唯一缺點是開啟 SVG 文件的系統上必須有安è£åŽŸä¾†çš„å­—åž‹ã€‚ - - + + - + 如åŒå­—è·ï¼Œä½ ä¹Ÿå¯ä»¥åœ¨å¤šè¡Œçš„æ–‡å­—物件裡調整行è·ã€‚在這個教學裡的æŸè™•試用 Ctrl+Alt+< å’Œ Ctrl+Alt+> 按éµä¾†ç¸®å°æˆ–加寬行è·ï¼Œå› æ­¤æ–‡å­—物件的整體高度會以畫é¢çš„ 1 åƒç´ é€²è¡Œè®ŠåŒ–。跟在é¸å–工具裡一樣,按著 Shift 冿Œ‰å¢žæ¸›è¡Œè·æˆ–縮排的快æ·éµæœƒç”¢ç”ŸåŽŸä¾†çš„ 10 倿•ˆæžœã€‚ - - XML 編輯器 + + XML 編輯器 - - + + - + Inkscape 的終極強力工具是 XML 編輯器 (Shift+Ctrl+X)。它會顯示文件的整個 XML æ¨¹ç‹€æž¶æ§‹ï¼Œéš¨æ™‚åæ˜ ç›®å‰çš„狀態。你å¯ä»¥ç·¨è¼¯åœ–畫並觀察 XML æ¨¹ç‹€æž¶æ§‹ä¸­å°æ‡‰çš„變化。此外,你å¯ä»¥ç”¨ XML 編輯器編輯任何文字ã€å…ƒä»¶æˆ–節點並在畫布上看到效果。這個是互動å¼å­¸ç¿’ SVG 的最佳工具,而且它能夠讓你實ç¾ç”¨å…¶ä»–普通編輯工具åšä¸åˆ°çš„æŠŠæˆ²ã€‚ - - çµè«– + + çµè«– - - + + - + - 這篇教學僅展示了 Inkscape 所有功能的一å°éƒ¨ä»½ã€‚我們希望你會喜歡。ä¸è¦å®³æ€•實驗和分享你的創作。請造訪 www.inkscape.org 以ç²å¾—æ›´å¤šè³‡è¨Šã€æœ€æ–°ç‰ˆæœ¬å’Œä¾†è‡ªä½¿ç”¨è€…åŠé–‹ç™¼è€…討論å€çš„幫助。 + 這篇教學僅展示了 Inkscape 所有功能的一å°éƒ¨ä»½ã€‚我們希望你會喜歡。ä¸è¦å®³æ€•實驗和分享你的創作。請造訪 www.inkscape.org 以å–å¾—æ›´å¤šè³‡è¨Šã€æœ€æ–°ç‰ˆæœ¬å’Œä¾†è‡ªä½¿ç”¨è€…åŠé–‹ç™¼è€…討論å€çš„幫助。 - + @@ -533,8 +503,8 @@ rotated/scaled to match. - - 使用 Ctrl+↑ å‘上æ²å‹•é é¢ + + 使用 Ctrl+↑ å‘上æ²å‹•é é¢ diff --git a/share/tutorials/tutorial-basic.zh_TW.svg b/share/tutorials/tutorial-basic.zh_TW.svg index effbde48c..056d054e4 100644 --- a/share/tutorials/tutorial-basic.zh_TW.svg +++ b/share/tutorials/tutorial-basic.zh_TW.svg @@ -36,425 +36,418 @@ - 使用 Ctrl+↓ å‘下æ²å‹•é é¢ + 使用 Ctrl+↓ å‘下æ²å‹•é é¢ - + ::基本 - - + + 這篇教學示範 Inkscape 的基本使用。本文是標準的 Inkscape 文件,所以你å¯ä»¥è§€çœ‹ã€ç·¨è¼¯ã€è¤‡è£½å…§å®¹æˆ–儲存。 - - + + 基本教學的內容涵蓋畫布ç€è¦½ã€ç®¡ç†æ–‡ä»¶ã€å½¢ç‹€å·¥å…·åŸºç¤Žã€é¸å–技巧ã€ç”¨é¸å–器改變物件ã€ç¾¤çµ„ã€è¨­å®šå¡«è‰²å’Œé‚Šæ¡†ã€å°é½Šå’ŒæŽ’列順åºã€‚到說明é¸å–®ä¸­çœ‹çœ‹å…¶ä»–教學有更多進階的主題。 - - 平移畫布 + + 平移畫布 - - + + 有許多方å¼ä¾†å¹³ç§» (æ²å‹•) 文件畫布。試著用éµç›¤ä¸Šçš„ Crtl+æ–¹å‘éµ ä¾†æ²å‹•。(立刻嘗試這個方法å‘下æ²å‹•這個文件。) 你也å¯ä»¥ç”¨æ»‘鼠䏭鵿‹–動畫布。或者,使用æ²è»¸ (按 Ctrl+B ä»¥é¡¯ç¤ºæˆ–éš±è—æ²è»¸)。滑鼠滾輪 也å¯é€²è¡Œåž‚ç›´æ–¹å‘çš„æ²å‹•;按 Shift ä¸¦æ»¾å‹•å¯æ°´å¹³æ²å‹•。 - - ç¸®æ”¾ç•«é¢ + + ç¸®æ”¾ç•«é¢ - - + + 按 - å’Œ + (或 =) 按éµé€²è¡Œç¸®æ”¾æ˜¯æœ€ç°¡å–®çš„æ–¹æ³•。你也å¯ä»¥ç”¨ Ctrl+é»žæ“Šæ»‘é¼ ä¸­éµ æˆ–è€… Ctrl+點擊滑鼠å³éµ 來放大畫é¢ã€Shift+é»žæ“Šæ»‘é¼ ä¸­éµ æˆ– Shift+點擊滑鼠å³éµ 來縮å°ç•«é¢ï¼Œæˆ–按著 Ctrl 滾動滑鼠滾輪。或者,你å¯ä»¥åœ¨ç¸®æ”¾è¼¸å…¥å€ä¸­é»žæ“Šä¸€ä¸‹ (在文件視窗的左下角),輸入一個縮放畫é¢çš„精確值 (å–®ä½ç‚º %),並按一下 Enter éµã€‚我們也有縮放工具 (在左å´çš„工具列中) è®“ä½ ç¶“ç”±æ‹–å‹•å‘¨åœæ”¾å¤§åˆ°ä¸€å€‹å€åŸŸã€‚ - - + + Inkscape 也ä¿ç•™åœ¨é€™å€‹å·¥ä½œéšŽæ®µä¸­ä½¿ç”¨éŽçš„縮放層級記錄。按下 ` éµå›žåˆ°ä¸Šä¸€å€‹ç¸®æ”¾ç‹€æ…‹ï¼Œæˆ– Shift+` å‰å¾€ä¸‹ä¸€å€‹ã€‚ - - Inkscape 工具 + + Inkscape 工具 - - + + 於左å´çš„垂直工具列陳列著 Inkscape 的繪製和編輯工具。在視窗頂端ã€é¸å–®çš„下é¢ï¼Œæœ‰åŒ…括一般命令按鈕的命令列和æ¯å€‹å·¥å…·ç‰¹æ€§æŽ§åˆ¶çš„å·¥å…·æŽ§åˆ¶åˆ—ã€‚ä½æ–¼è¦–窗底部的狀態列在你使用時會顯示有用的æç¤ºå’Œè¨Šæ¯ã€‚ - - + + 許多æ“作å¯ç”±éµç›¤çš„å¿«æ·éµé”æˆã€‚開啟 說明 > éµç›¤å’Œæ»‘é¼  å¯çœ‹è¦‹å®Œæ•´çš„åƒç…§ã€‚ - - å»ºç«‹å’Œç®¡ç†æ–‡ä»¶ + + å»ºç«‹å’Œç®¡ç†æ–‡ä»¶ - - + + - To create a new empty document, use File > New > Default -or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press -Ctrl+Alt+N + 使用 檔案 > 新增 來建立新的空白文件或者按 Ctrl+N å¿«æ·éµã€‚è‹¥è¦å¾ž Inkscape 範本建立新的文件,則使用 檔案 > 從範本新增... 或者按 Ctrl+Alt+N å¿«æ·éµ - - + + - + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) -to save under a new name. (Inkscape may still be unstable, so remember to save -often!) + 使用 檔案 > 開啟 (Ctrl+O) é–‹å•Ÿä¸€å€‹ç¾æœ‰çš„ SVG 檔案。使用 檔案 > 儲存 (Ctrl+S) 進行儲存,或用å¦å­˜æ–°æª” (Shift+Ctrl+S) ä¾ç…§æ–°çš„æª”案å稱來儲存。(Inkscape ä»å¯èƒ½æœƒä¸ç©©å®šï¼Œæ‰€ä»¥è¨˜å¾—時常儲存檔案ï¼) - - + + - + Inkscape 使用 SVG (å¯ç¸®æ”¾å‘é‡åœ–å½¢) æ ¼å¼ä½œç‚ºæª”案格å¼ã€‚SVG 是一個開放的標準,被圖形軟體廣泛地支æ´ã€‚SVG 檔案基於 XML 並且å¯è—‰ç”±ä»»ä½•的文字或 XML 編輯器進行編輯 (Inkscape 以外的軟體)。除了 SVG 外,Inkscape å¯ä»¥åŒ¯å…¥å’ŒåŒ¯å‡ºå¹¾ç¨®å…¶ä»–æ ¼å¼ (EPSã€PNG)。 - - + + - + Inkscape å°æ¯ä¸€å€‹æ–‡ä»¶é–‹å•Ÿä¸€å€‹åˆ†é›¢è¦–窗。你å¯ä»¥ä½¿ç”¨ä½ çš„視窗管ç†ç¨‹å¼ (例如用 Alt+Tab) 在它們之間ç€è¦½ï¼Œæˆ–者使用 Inkscape å¿«æ·éµ Ctrl+Tab å¾ªç’°åˆ‡æ›æ‰€æœ‰é–‹å•Ÿçš„æ–‡ä»¶è¦–窗。(ç¾åœ¨å»ºç«‹ä¸€å€‹æ–°æ–‡ä»¶ï¼Œä¸¦åœ¨æ–°æ–‡ä»¶å’Œæœ¬æ–‡ä»¶ä¹‹é–“切æ›é€²è¡Œç·´ç¿’。) 注æ„:Inkscape 將這些視窗視為åƒç¶²é ç€è¦½å™¨ä¸­çš„分é ä¸€æ¨£ï¼Œé€™è¡¨ç¤º Ctrl+Tab å¿«æ·éµåªå°åœ¨åŒä¸€ç¨‹åºçš„æ–‡ä»¶æœ‰ç”¨ã€‚如果你從檔案ç€è¦½å™¨ä¸­é–‹å•Ÿå¤šå€‹æª”案或從圖示啟動數個 Inkscape 程åºï¼Œé‚£éº¼å¿«æ·éµå°±ä¸æœƒæœ‰ä½œç”¨ã€‚ - - 建立形狀 + + 建立形狀 - - + + - + 學習製作一些漂亮的形狀ï¼é»žæ“Šåœ¨å·¥å…·åˆ—上的矩形工具 (或按 F4) 然後在一個新的空白文件或這裡點擊並拖曳: - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + 如你所見,é è¨­çŸ©å½¢ç‚ºè—色,帶有黑色 邊框 (輪廓),而且完全ä¸é€æ˜Žã€‚下é¢å…§å®¹æˆ‘們將會見到如何去改變它。用其他工具,你也å¯ä»¥å»ºç«‹æ©¢åœ“å½¢ã€æ˜Ÿå½¢å’Œèžºæ—‹å½¢ï¼š - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + 這些工具統稱為形狀工具。æ¯å€‹ä½ å»ºç«‹çš„形狀會顯示一個或多個方塊形狀的控制點;試著拖動它們å¯è¦‹åˆ°å½¢ç‹€å¦‚ä½•è·Ÿè‘—è®ŠåŒ–ã€‚å½¢ç‹€å·¥å…·çš„æŽ§åˆ¶é¢æ¿å¯ç”¨å¦ä¸€ç¨®æ–¹å¼ä¾†å¾®èª¿å½¢ç‹€ï¼›é€™äº›æŽ§åˆ¶å½±éŸ¿ç›®å‰é¸æ“‡çš„形狀 (å³é‚£äº›é¡¯ç¤ºçš„æŽ§åˆ¶é»ž) 並且將會套用到新建立形狀的é è¨­æƒ…形。 - - + + - + 按 Ctrl+Z å¯å¾©åŽŸä½ ä¸Šä¸€å€‹å‹•ä½œã€‚(或者,如果你改變主æ„,å¯ä»¥ç”¨ Shift+Ctrl+Z é‡åšå¾©åŽŸçš„å‹•ä½œã€‚) - - 移動ã€ç¸®æ”¾ã€æ—‹è½‰ + + 移動ã€ç¸®æ”¾ã€æ—‹è½‰ - - + + - + 使用最頻ç¹çš„ Inkscape 工具就是é¸å–器。點é¸å·¥å…·åˆ—上最上é¢çš„æŒ‰éˆ• (ç®­é ­),或者按 F1 或空白éµã€‚ç¾åœ¨ä½ å¯ä»¥åœ¨ç•«å¸ƒä¸Šé¸å–任何物件。點擊下é¢çš„矩形。 - - - + + + - + 你會見到 8 個箭頭形狀的控制點出ç¾åœ¨ç‰©ä»¶çš„四周。ç¾åœ¨ä½ å¯ä»¥ï¼š - - - + + + - + 拖動它來移動物件。(按 Ctrl 以固定移動方å‘為垂直和水平) - - - + + + - + 拖動任何控制點來縮放物件大å°ã€‚(按 Ctrl 以維æŒåŽŸä¾†çš„é•·å¯¬æ¯”ä¾‹) - - + + - + ç¾åœ¨å†é»žä¸€æ¬¡çŸ©å½¢ã€‚控制點改變了。ç¾åœ¨ä½ å¯ä»¥ï¼š - - - + + + - + 拖動頂點上的控制點來旋轉物件。(按 Ctrl ä»¥å›ºå®šæ¯ 15 度為一階作旋轉。拖動交å‰è¨˜è™Ÿä»¥æ”¹è®Šæ—‹è½‰ä¸­å¿ƒçš„ä½ç½®ã€‚) - - - + + + - + æ‹–å‹•éžé ‚點上的控制點來傾斜 (切變) 物件。(按 Ctrl ä»¥å›ºå®šæ¯ 15 度為一階作傾斜 。) - - + + - + 當用é¸å–器時,你也å¯ä»¥ä½¿ç”¨æŽ§åˆ¶åˆ—上的數字輸入å€ä¾†è¨­å®šé¸å–çš„åæ¨™ (X å’Œ Y) å’Œå¤§å° (寬和長) 的準確數值。 - - ç”¨æŒ‰éµæ”¹è®Šç‰©ä»¶ + + ç”¨æŒ‰éµæ”¹è®Šç‰©ä»¶ - - + + - + 一個 Inkscape 的特色是除了大部份å‘é‡ç¹ªåœ–的特點以外還強調能用éµç›¤å®Œæˆæ‰€æœ‰è¨­å®šã€‚幾乎沒有任何命令和動作是éµç›¤åšä¸åˆ°çš„,改變物件也沒有例外。 - - + + - + ä½ å¯ä»¥ä½¿ç”¨éµç›¤ä¾†ç§»å‹• (æ–¹å‘éµ)ã€ç¸®æ”¾ (< å’Œ > éµ) 和旋轉 ([ å’Œ ] éµ) 物件。é è¨­ç§»å‹•和縮放的單ä½ç‚º 2 px;按 Shift,以 10 å€é è¨­å€¼ä¾†ç§»å‹•或縮放。Ctrl+> å’Œ Ctrl+< 分別放大或縮å°ç‚ºåŽŸä¾†çš„ 200% 或 50%。é è¨­ä»¥ 15 度作旋轉;按 Ctrl,å¯ä»¥ 90 度作旋轉。 - - + + - + 無論如何,或許最有用的是åƒç´ å¤§å°çš„æ”¹è®Šï¼Œè—‰ç”±ä½¿ç”¨ Alt æ­é…改變按éµä¾†èª¿ç”¨ã€‚例如,Alt+æ–¹å‘éµ å¯åœ¨ç›®å‰çš„ç•«é¢ä¸­ä»¥ 1 åƒç´ ç§»å‹•é¸å–物件 (å³ 1 螢幕åƒç´ ï¼Œä¸è¦å’Œ SVG çš„é•·åº¦å–®ä½ px 混淆了)。這表示如果你放大畫é¢ï¼ŒAlt+æ–¹å‘éµ åŸ·è¡Œä¸€æ¬¡å¾—åˆ°çš„çµæžœæ˜¯è¼ƒå°çš„絕å°ç§»å‹•é‡ï¼Œåœ¨ä½ çš„螢幕上ä»ç„¶çœ‹èµ·ä¾†åƒæ˜¯ 1 åƒç´ è¼•è¼•ç§»å‹•ã€‚å› æ­¤éœ€è¦æ™‚å¯èƒ½ç”±ç•«é¢ç¸®æ”¾ç°¡å–®ã€æº–確地把物件放置到任æ„ä½ç½®ã€‚ - - + + - + åŒæ¨£åœ°ï¼ŒAlt+> å’Œ Alt+< 縮放é¸å–物件是å¯è¦‹å¤§å°æ”¹è®Š 1 螢幕åƒç´ ï¼Œè€Œ Alt+[ å’Œ Alt+] 旋轉是以è·ä¸­å¿ƒæœ€é çš„點移動 1 螢幕åƒç´ ã€‚ - - + + - + 注æ„:如果 Linux 使用者的視窗管ç†ç¨‹å¼åœ¨é€²è¡Œ inkscape æ‡‰ç”¨å‰æ•ç²é‚£äº›æŒ‰éµäº‹ä»¶ï¼Œé‚£éº¼å¯èƒ½ç„¡æ³•得到 Alt+æ–¹å‘éµ å’Œä¸€äº›å…¶ä»–æŒ‰éµçµ„åˆé æœŸçš„çµæžœã€‚因此其中一個解決辦法就是改變視窗管ç†å™¨çš„設置。 - - 多é‡é¸å– + + 多é‡é¸å– - - + + - + ä½ å¯ä»¥ç”¨ Shift+多次點擊 ä¾†åŒæ™‚é¸å–ä»»æ„æ•¸ç›®çš„物件。或者,你å¯ä»¥åœ¨éœ€è¦é¸å–çš„ç‰©ä»¶å‘¨åœæ‹–曳;這稱為框é¸ã€‚(當從一個空白å€åŸŸæ‹–曳時,é¸å–器會產生一個矩形線框;ä¸éŽå¦‚æžœä½ åœ¨é–‹å§‹æ‹–æ›³å‰æŒ‰ Shift,Inkscape 就會一直產生矩形線框。)藉由é¸å–下é¢å…¨éƒ¨ä¸‰å€‹ç‰©ä»¶åšç·´ç¿’: - - - - - + + + + + - + ç¾åœ¨ï¼Œä½¿ç”¨æ¡†é¸ (拖曳或 Shift+拖曳) 來鏿“‡é€™å…©å€‹æ©¢åœ“,但ä¸è¦çŸ©å½¢ï¼š - - - - - + + + + + - + æ¯å€‹å–®ç¨çš„物件在é¸å–範åœå…§æœƒé¡¯ç¤ºé¸å–標示 — é è¨­æ˜¯ä¸€å€‹çŸ©å½¢è™›ç·šæ¡†ã€‚這些標示使得容易一眼看出哪個被é¸å–ã€å“ªå€‹æ²’被é¸å–ã€‚èˆ‰ä¾‹ä¾†èªªï¼Œå¦‚æžœä½ é¸æ“‡å…©å€‹æ©¢åœ“形和一個矩形,沒有標示的情æ³ä¸‹ä½ æœƒå¾ˆé›£çŒœæ¸¬æ©¢åœ“形是å¦å·²è¢«é¸å–。 - - + + - + 在一個已é¸å–的物件上按 Shift+點擊 å¯å¾žé¸å–å€ä¸­å°‡å®ƒæŽ’除。é¸å–上é¢å…¨éƒ¨ä¸‰å€‹ç‰©ä»¶ï¼Œç„¶å¾Œä½¿ç”¨ Shift+點擊 從é¸å–å€ä¸­å°‡å…©å€‹æ©¢åœ“形排除åªç•™ä¸‹çŸ©å½¢ã€‚ - - + + - + 按 Esc éµå¯å–消é¸å–任何已鏿“‡çš„物件。Ctrl+A å¯é¸å–å†ç›®å‰åœ–層中所有的物件(如果你沒有建立圖層,那就變為é¸å–文件中的所有物件)。 - - 群組 + + 群組 - - + + - + 幾個物件å¯çµåˆç‚ºä¸€å€‹ç¾¤çµ„。一個群組於拖曳或變形時會表ç¾å¾—åƒå–®ä¸€å€‹ç‰©ä»¶ã€‚下é¢å·¦é‚Šçš„三個物件是ç¨ç«‹çš„,而å³é‚Šç›¸åŒçš„三個物件是已群組的。試著拖動這個群組看看。 - - - - + + + + - - + + - + ä½ é¸å–一個或多個物件並按 Ctrl+G å¯å»ºç«‹ä¸€å€‹ç¾¤çµ„。é¸å–它們並按 Ctrl+U å¯è§£æ•£ä¸€å€‹æˆ–多個群組。多個群組本身å¯èƒ½è¢«ç¾¤çµ„ï¼Œåªæ˜¯çœ‹èµ·ä¾†åƒä»»ä½•其他物件;這樣éžè¿´çš„群組å¯ä»¥åšä¸‹åŽ»åˆ°ä»»æ„æ·±åº¦ã€‚然而,Ctrl+U åªæœƒè§£æ•£ä¸€å€‹é¸å–中最上層的群組;如果想è¦å®Œå…¨è§£æ•£æ·±å±¤çš„「群組中有群組ã€ï¼Œé‚£éº¼å°±éœ€è¦é‡è¤‡åœ°æŒ‰ Ctrl+U。 - - + + - + 如果想è¦ç·¨è¼¯ç¾¤çµ„中的一個物件,你未必一定得解散群組。åªè¦ Ctrl+點擊 那個物件,那麼物件會被é¸å–並å¯è¢«ç·¨è¼¯ï¼Œæˆ–者 Shift+Ctrl+點擊 多個物件(任何群組的內部或外é¢)來多é‡é¸å–而ä¸ç®¡ç¾¤çµ„與å¦ã€‚試著以ä¸è§£ç¾¤çµ„散的情形下移動或改變群組中個別的形狀,然後åšä¸€èˆ¬çš„å–æ¶ˆé¸å–å’Œé¸å–此群組會見到它ä»ç„¶ä¿æŒç¾¤çµ„狀態。 - - 填色和邊框 + + 填色和邊框 - - + + - + - Inkscape 的許多功能å¯ç¶“ç”±å°è©±çª—使用。讓物件塗上一些é¡è‰²æœ€ç°¡å–®çš„æ–¹å¼å¤§æ¦‚是從檢視é¸å–®ä¸­é–‹å•Ÿè‰²ç¥¨å°è©±çª— (或按 Shift+Ctrl+W),é¸å–一個物件並點擊一個色票來塗上é¡è‰² (改變它的填色)。 + 讓物件塗上é¡è‰²æœ€ç°¡å–®çš„æ–¹å¼æ˜¯é¸å–一個物件,然後在畫布下é¢çš„調色盤點擊一個色票 (改變它的填色)。也å¯ä»¥å¾žæª¢è¦–é¸å–®ä¸­é–‹å•Ÿè‰²ç¥¨å°è©±çª— (或按 Shift+Ctrl+W),é¸å–物件,然後點擊色票塗上填色 (改變它的填色)。 - - + + - + 更強大的是從物件é¸å–®ä¸­é–‹å•Ÿçš„填充和邊框å°è©±çª— (或按 Shift+Ctrl+F)。é¸å–下é¢çš„形狀並開啟填充和邊框å°è©±çª—。 - - - + + + - + 你會見到å°è©±çª—有三個分é ï¼šå¡«å……ã€é‚Šæ¡†é¡è‰²å’Œé‚Šæ¡†æ¨£å¼ã€‚填充分é è®“你編輯é¸å–物件的填色 (內部)。使用於分é ä¸‹é¢ä¸€é»žçš„æŒ‰éˆ•å¯é¸æ“‡å¡«å…¥é¡žåž‹ï¼ŒåŒ…括沒有填色 (有 X 圖案的按鈕)ã€ç´”色填充ã€ç·šæ€§æ¼¸å±¤æˆ–放射狀漸層。以上é¢çš„形狀來說,純色填充按鈕會是開啟的狀態。 - - + + - + 更進一步你會看到é¡è‰²é¸æ“‡å™¨çš„集åˆåœ¨å®ƒå€‘自己所屬的分é ä¸­ï¼šRGBã€CMYKã€HSLå’Œè‰²ç’°ã€‚è‰²ç’°é¸æ“‡å™¨å¤§æ¦‚是最方便的,你å¯ä»¥æ—‹è½‰ä¸‰è§’形來鏿“‡è‰²ç’°ä¸Šçš„色相,然後在三角形範åœè£¡é¸æ“‡é‚£å€‹è‰²ç›¸çš„æ˜Žæš—程度。所有é¡è‰²é¸æ“‡å™¨åŒ…å«ä¸€å€‹æ»‘動拉桿å¯è¨­å®šé¸å–物件的 alpha 值(ä¸é€æ˜Žåº¦)。 - - + + - + æ¯ç•¶ä½ é¸æ“‡ä¸€å€‹ç‰©ä»¶ï¼Œé¡è‰²é¸æ“‡å™¨æœƒæ›´æ–°ä¸¦é¡¯ç¤ºç›®å‰çš„填色和邊框 (若是多é‡é¸å–,å°è©±çª—顯示是它們的平å‡é¡è‰²)。用這些樣å“玩玩或建立你自己的: - - - - - - - - - + + + + + + + + + - + 使用邊框填塗分é å¯ä»¥ç§»é™¤ç‰©ä»¶çš„邊框 (輪廓),或者指定任何é¡è‰²æˆ–逿˜Žåº¦ : - - - - - - - - - - + + + + + + + + + + - + 最後一個分é ã€Œé‚Šæ¡†æ¨£å¼ã€è®“ä½ è¨­å®šå¯¬åº¦å’Œé‚Šæ¡†çš„å…¶ä»–åƒæ•¸ï¼š - - - - - - - - - + + + + + + + + + - + 最後,你å¯ä»¥ç”¨æ¼¸å±¤è‰²æ›¿ä»£ç´”色作為填色和(或)邊框é¡è‰²ï¼š @@ -495,50 +488,44 @@ often!) - - - - - - - - - - - + + + + + + + + + + + 當你從純色切æ›ç‚ºæ¼¸å±¤æ™‚,會使用先å‰çš„純色建立新的漸層 (從ä¸é€æ˜Žåˆ°é€æ˜Ž)。切æ›åˆ°æ¼¸å±¤å·¥å…·(Ctrl+F1)坿‹–動漸層控制點 — 連接控制點的直線定義漸層的方å‘和長度。當任何漸層控制點被é¸å–時 (以è—色標示),填色和邊框å°è©±çª—變為控制點的é¡è‰²è€Œéžé¸å–物件整體的é¡è‰²ã€‚ - - + + - + 還有å¦ä¸€ç¨®ç°¡ä¾¿çš„æ–¹å¼å¯æ”¹è®Šç‰©ä»¶çš„é¡è‰²å°±æ˜¯ä½¿ç”¨æ»´ç®¡å·¥å…· (F7)。åªè¦ç”¨é€™å€‹å·¥å…·é»žæ“Šä¸€ä¸‹ç¹ªåœ–å€ä¸­çš„任何地方,那麼點å–çš„é¡è‰²æœƒè¢«æŒ‡å®šç‚ºé¸å–物件的填色 (Shift+點擊 會指定邊框é¡è‰²)。 - - å†è£½ã€å°é½Šã€åˆ†ä½ˆ + + å†è£½ã€å°é½Šã€åˆ†ä½ˆ - - + + - + 最常見的動作之一為å†è£½ç‰©ä»¶ (Ctrl+D)。å†è£½ç‰©ä»¶æœƒæ”¾ç½®åœ¨åŽŸæœ¬ç‰©ä»¶çš„æ­£ä¸Šæ–¹ä¸¦ä¸”å·²é¸å–,所以你å¯ä»¥ç”¨æ»‘鼠或方å‘éµå°‡å®ƒæ‹–走。試著用這個黑色正方形排æˆç›´ç·šä½œç‚ºç·´ç¿’: - - - + + + - + - Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares -(Shift+click or drag a rubberband), open the dialog and press the -“Center on horizontal axis†button, then the “Make horizontal gaps between objects -equal†button (read the button tooltips). The objects are now neatly aligned and -distributed equispacedly. Here are some other alignment and distribution -examples: + 基本上你的正方形複製體有å¯èƒ½æœƒä»»æ„擺放。這時å°é½Šå°è©±çª— (Ctrl+Shift+A) 就相當有用。é¸å–所有正方形(Shift+é»žæ“Šæˆ–æ‹–æ›³ä¸€å€‹é¸æ¡†),開啟å°è©±çª—並點é¸ã€Œæ°´å¹³ç½®ä¸­ã€æŒ‰éˆ•,然後點é¸ã€Œç‰©ä»¶é–“ä»¥åŒæ¨£çš„æ°´å¹³é–“è·ä¾†åˆ†ä½ˆã€æŒ‰éˆ•(閱讀按鈕的工具æç¤º)。這些物件ç¾åœ¨æŽ’列整齊且等è·é›¢åˆ†ä½ˆã€‚這裡是一些其他å°é½Šå’Œåˆ†ä½ˆçš„例å­ï¼š @@ -555,192 +542,187 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - æŽ’åˆ—é †åº + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + æŽ’åˆ—é †åº - - + + - + - 排列順åºé€™é …涉åŠç¹ªç•«æ™‚物件的堆疊次åºï¼Œå³å“ªäº›ç‰©ä»¶åœ¨é ‚層而é®ä½å…¶ä»–物件。在物件é¸å–®ä¸­æœ‰å…©å€‹æŒ‡ä»¤ — æåˆ°æœ€ä¸Šå±¤ (Home éµ) å’Œé™åˆ°æœ€ä¸‹å±¤ (End éµ),å¯ç§»å‹•ä½ çš„é¸å–物件到目å‰åœ–層排列順åºçš„æœ€ä¸Šå±¤å’Œæœ€ä¸‹å±¤ã€‚å¦å¤–兩個指令 — æå‡ (PgUp) å’Œé™ä½Ž (PgDn),å¯åªä½œä¸€æ¬¡ä¸‹æ²‰æˆ–上å‡é¸å–,å³åœ¨æŽ’列順åºä¸­ç§»å‹•它越éŽä¸€å€‹éžé¸å–物件(åªæœ‰ç‰©ä»¶é‡ç–Šé¸å–倿™‚æ‰ç®—;如果沒有æ±è¥¿é‡ç–Šé¸å–å€ï¼Œæå‡å’Œé™ä½Žæœƒç§»åˆ°ç›¸æ‡‰çš„æœ€ä¸Šå±¤å’Œæœ€ä¸‹å±¤)。 + 排列順åºé€™é …涉åŠç¹ªç•«æ™‚物件的堆疊次åºï¼Œå³å“ªäº›ç‰©ä»¶åœ¨é ‚層而é®ä½å…¶ä»–物件。在物件é¸å–®ä¸­æœ‰å…©å€‹æŒ‡ä»¤ — æåˆ°æœ€ä¸Šå±¤ (Home éµ) å’Œé™åˆ°æœ€ä¸‹å±¤ (End éµ),å¯ç§»å‹•ä½ çš„é¸å–物件到目å‰åœ–層排列順åºçš„æœ€ä¸Šå±¤å’Œæœ€ä¸‹å±¤ã€‚å¦å¤–兩個指令 — æå‡ (PgUp) å’Œé™ä½Ž (PgDn),å¯åªä½œä¸€æ¬¡ä¸‹æ²‰æˆ–上å‡é¸å–,å³åœ¨æŽ’列順åºä¸­ç§»å‹•它越éŽä¸€å€‹éžé¸å–物件 (根據它們å„è‡ªçš„é‚Šç•Œæ¡†ï¼Œåªæœ‰ç‰©ä»¶é‡ç–Šé¸å–倿™‚æ‰ç®—)。 - - + + - + 以åå‘é †åºæŽ’åˆ—ä¸‹é¢çš„物件來練習這些指令,所以最左邊的橢圓形在頂層而最å³é‚Šé‚£å€‹åœ¨åº•層: - - - - - - - - + + + + + + + + - + Tab 鵿˜¯éžå¸¸æœ‰ç”¨çš„é¸å–å¿«æ·éµã€‚如果沒有任何é¸å–,那麼它會é¸å–最下層的物件;ä¸ç„¶å®ƒæœƒé¸å–排列順åºä¸­é¸å–物件上é¢çš„一個物件。Shift+Tab 則å之,從最上層物件開始且å‘下進行。你建立的物件新增至堆疊的最上層,於沒有任何é¸å–情形下按下 Shift+Tab å¯ç°¡ä¾¿åœ°é¸å–你最後建立的物件。於上é¢å †ç–Šåœ¨ä¸€èµ·çš„æ©¢åœ“形上練習 Tab å’Œ Shift+Tab éµã€‚ - - é¸å–下方物件和拖曳é¸å–物件 + + é¸å–下方物件和拖曳é¸å–物件 - - + + - + 如果你需è¦çš„物件隱è—在其他物件背後,該怎麼辦?如果上層物件 (å¯èƒ½) æ˜¯é€æ˜Žçš„,你ä»ç„¶å¯çœ‹è¦‹åº•層的物件,但是在它上é¢é»žæ“Šæœƒé¸å–到上層的物件 (ä½ ä¸éœ€è¦çš„那個)。 - - + + - + Alt+點擊 就是é‡å°é€™ç¨®æƒ…æ³ã€‚首先用 Alt+點擊 é¸å–ä¸Šå±¤çš„ç‰©ä»¶å°±åƒæ™®é€šçš„點é¸ã€‚ç„¶è€Œï¼Œå†æ¬¡ Alt+點擊 åŒä¸€å€‹é»žæœƒé¸å–上層物件下é¢çš„那個物件;å†åšä¸€æ¬¡æœƒé¸å–更下é¢çš„物件,等等。因此,連續 Alt+點擊 幾次會從上層到下層循環,經由點擊ä½ç½®ä¸Šçš„物件群整個堆疊順åºã€‚ç•¶é”åˆ°æœ€ä¸‹å±¤ç‰©ä»¶æ™‚ï¼Œå† Alt+點擊 一次自然會å†ä¸€æ¬¡é¸å–最上層物件。 - - + + - + [如果你在 Linux ä¸‹ï¼Œä½ æœƒç™¼ç¾ Alt+點擊 å¯èƒ½æ²’有作用。相å地,å¯èƒ½æœƒè®Šæˆæ‹–動整個 Inkscape 視窗。這是因為你的視窗管ç†ç¨‹å¼å·²ç¶“é å®š Alt+點擊 為ä¸åŒçš„動作。修正這個å•題方法為找到視窗管ç†ç¨‹å¼çš„視窗行為é…ç½®ä¸¦é—œé–‰å®ƒï¼Œæˆ–è€…å°‡å®ƒå°æ‡‰åˆ°ä½¿ç”¨ Meta éµ (亦稱 Windows éµ),如此一來 Inkscape 和其他應用程å¼ä¾¿å¯è‡ªç”±ä½¿ç”¨ Alt éµã€‚] - - + + - + 這樣ä¸éŒ¯ï¼Œä½†æ˜¯ä½ é¸å–一個表é¢ä¸‹çš„物件å¯ä»¥åšäº›ä»€éº¼ï¼Ÿå¯ä»¥ç”¨æŒ‰éµæ”¹è®Šå®ƒå’Œæ‹–曳é¸å–æŽ§åˆ¶é»žã€‚ç„¶è€Œæ‹–å‹•ç‰©ä»¶æœ¬èº«æœƒå†æ¬¡è®Šå›žé¸å–最上層物件(這是點擊和拖曳設計為如何工作 — 它會先é¸å–游標下的(最上層)物件,然後拖曳é¸å–)。使用 Alt+拖曳 來告訴 Inkscape ç¾åœ¨ä»€éº¼è¢«é¸å–è¦é€²è¡Œæ‹–動而ä¸è¦é¸å–任何別的æ±è¥¿ã€‚這將會移動目å‰çš„é¸å–而ä¸ç®¡ä½ çš„æ»‘鼠拖曳到哪裡。 - - + + - + åœ¨ç¶ è‰²é€æ˜ŽçŸ©å½¢ä¸‹é¢çš„兩個è¤è‰²å½¢ç‹€ä¸Šç·´ç¿’ Alt+點擊 å’Œ Alt+拖曳: - - - - - Selecting similar objects + + + + + é¸å–相似物件 - - - - - - Inkscape can select other objects similar to the object currently selected. -For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > -Fill Color from the menu. All the objects with a fill color the same -shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - In addition to selecting by fill color, you can select multiple similar objects -by stroke color, stroke style, fill & stroke, and object type. - - - çµè«– + + + + + + Inkscape 能夠é¸å–和目å‰ç‰©ä»¶ç›¸ä¼¼çš„其他物件。例如,你想è¦é¸å–在第一個é¸å–è—色正方形底下的所有è—色正方形,則使用é¸å–®ä¸­çš„ 編輯 > é¸å–相åŒç‰©ä»¶ > 填色。那麼所有填色為è—色的物件都會被é¸å–。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 除了ä¾ç…§å¡«è‰²é¸å–外,你也å¯ä»¥ä¾ç…§é‚Šæ¡†é¡è‰²ã€é‚Šæ¡†æ¨£å¼ã€å¡«è‰² & 邊框ã€ç‰©ä»¶é¡žåž‹ä¾†é¸å–多個相似物件。 + + + çµè«– - - + + - + - å°åŸºæœ¬æ•™å­¸ä½œä¸€å€‹ç¸½çµã€‚Inkscape é ä¸æ­¢é€™äº›ï¼Œä½†ç¶“由這裡介紹的技巧,你已經å¯ä»¥è£½ä½œç°¡å–®è€Œæœ‰ç”¨çš„圖形。閱讀 說明 > 指導手冊 中的進階和其他教學了解更複雜的æ±è¥¿ã€‚ + å°åŸºæœ¬æ•™å­¸ä½œä¸€å€‹ç¸½çµã€‚Inkscape é ä¸æ­¢é€™äº›ï¼Œä½†ç¶“由這裡介紹的技巧,你已經å¯ä»¥è£½ä½œç°¡å–®è€Œæœ‰ç”¨çš„圖形。閱讀 說明 > 指導手冊 中的進階和其他教學了解更複雜的æ±è¥¿ã€‚ - + @@ -770,8 +752,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - 使用 Ctrl+↑ å‘上æ²å‹•é é¢ + + 使用 Ctrl+↑ å‘上æ²å‹•é é¢ diff --git a/share/tutorials/tutorial-calligraphy.zh_TW.svg b/share/tutorials/tutorial-calligraphy.zh_TW.svg index f8b1bc447..033f2470a 100644 --- a/share/tutorials/tutorial-calligraphy.zh_TW.svg +++ b/share/tutorials/tutorial-calligraphy.zh_TW.svg @@ -40,195 +40,195 @@ - + ::書法 -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + 書法工具是 Inkscape 眾多優秀工具的其中之一。這篇教學會幫助你熟悉這個工具的使用方法,示範書法è—術的一些基本技巧。 - + 使用 Ctrl+æ–¹å‘éµã€æ»‘鼠滾輪 或 æŒ‰è‘—æ»‘é¼ ä¸­éµæ‹–曳 å¯å‘下æ²å‹•é é¢ã€‚關於建立ã€é¸å–和改變物件的基本方法,請閱讀 說明 > 指導手冊 中的基本教學。 - - æ­·å²èˆ‡æ›¸æ³•風格 + + æ­·å²èˆ‡æ›¸æ³•風格 - + ä¾ç…§å­—å…¸ä¸­çš„å®šç¾©ï¼Œæ›¸æ³•æ˜¯æŒ‡ã€Œå„ªç¾Žçš„æ›¸å¯«ã€æˆ–「工整或優雅的筆跡ã€ã€‚基本上,書法是創造美麗或優雅的手寫è—術。這樣è½èµ·ä¾†æ„Ÿè¦ºå¾ˆå›°é›£ï¼Œä½†æ˜¯ç¶“éŽä¸€é»žç·´ç¿’,任何人都能掌æ¡é€™ç¨®è—術的基本原則。 - + 書法最簡單的形å¼å¯è¿½æº¯åˆ°å±±é ‚洞人的å£ç•«ã€‚直到西元 1440 å¹´å·¦å³ï¼Œåœ¨å°åˆ·æ©Ÿç™¼æ˜Žä»¥å‰ï¼Œæ›¸ç±èˆ‡å…¶ä»–出版物都用手書寫而æˆã€‚ç¹•å¯«å“¡ç”¨æ‰‹å¯«å‡ºäº†æ¯æœ¬æ›¸æˆ–出版物的ç¨ç‰¹è¤‡è£½å“ã€‚ç¹•å¯«å“¡ç”¨ç¾½æ¯›ç­†å’Œå¢¨æ°´åœ¨ç¾Šçš®ç´™æˆ–çŠ¢çš®ç´™ç­‰ææ–™ä¸Šå®Œæˆæ›¸å¯«å·¥ä½œã€‚從å¤è‡³ä»Šæµå‚³ä½¿ç”¨çš„æ–‡å­—風格包括有粗俗體ã€å¡æ´›æž—王æœé«”ã€å¤é»‘體等。或許ç¾ä»Šä¸€èˆ¬äººæœ€å¸¸åœ¨å–œå¸–上見到書法。 - + 有三種主è¦çš„æ›¸æ³•風格: - - + + 西方或羅馬 - - + + 阿拉伯 - - + + ä¸­åœ‹æˆ–æ±æ–¹ - + 這個教學主è¦è‘—釿–¼è¥¿æ–¹æ›¸æ³•,而å¦å¤–å…©ç¨®é¢¨æ ¼å‚¾å‘æ–¼ä½¿ç”¨ç­†åˆ· (而éžé‹¼ç­†çš„筆尖)ï¼Œé€™ä¸æ˜¯æˆ‘們的書法工具目å‰çš„功能。 - + 我們有一個以å‰ç¹•寫員所沒有的極大優勢,那就是復原指令:如果你寫錯了,ä¸å¿…毀去整張紙。Inkscape 的書法工具也能夠實ç¾ä¸€äº›å‚³çµ±ç­†å¢¨ç„¡æ³•åšåˆ°çš„æŠ€å·§ã€‚ - - 硬體設備 + + 硬體設備 - + 如果你使用 ç¹ªåœ–æ¿ (例如 Wacom) æœƒå¾—åˆ°æœ€ä½³çš„æ•ˆæžœã€‚æ‰€å¹¸æˆ‘å€‘çš„å·¥å…·æ¥µå…·éˆæ´»æ€§ï¼Œå³ä½¿åªä½¿ç”¨æ»‘鼠也能創造一些相當複雜的書法,雖然快速製作連綿彎曲的畫筆會有些困難。 - + Inkscape 能支æ´ç¹ªåœ–筆的壓力感應和傾斜感應特性。感應功能因為需è¦è¨­å®šï¼Œæ‰€ä»¥é è¨­æ˜¯åœç”¨çš„。å¦å¤–,記ä½ä¸€é»žç”¨ç¾½æ¯›ç­†æˆ–鋼筆寫的書法å°å£“åŠ›è®ŠåŒ–çš„æ„Ÿæ‡‰ä¹Ÿä¸æœƒå¾ˆéˆæ•,與筆刷ä¸åŒã€‚ - + 如果你有繪圖æ¿ä¸¦ä¸”想使用感壓功能,需è¦è¨­å®šä¸€ä¸‹ä½ çš„è£ç½®ã€‚åªéœ€è¦è¨­ç½®ä¸€æ¬¡ä¸¦å„²å­˜è¨­å®šã€‚è¦å•Ÿç”¨é€™é …支æ´ä½ å¿…é ˆå†å•Ÿå‹• inkscape 之剿’上繪圖æ¿ç„¶å¾Œé–‹å•Ÿç·¨è¼¯é¸å–®ä¸­çš„輸入è£ç½®...å°è©±çª—。你å¯ä»¥åœ¨é–‹å•Ÿçš„å°è©±çª—䏭鏿“‡å好的è£ç½®å’Œè¨­å®šä½ çš„繪圖筆。完æˆé€™äº›è¨­å®šå¾Œï¼Œåˆ‡æ›åˆ°æ›¸æ³•工具並且按下工具列上壓力和傾斜開關按鈕。從此之後 Inkscape 在啟動時會記ä½é€™äº›è¨­å®šå€¼ã€‚ - + Inkscape 的美工筆能感應畫筆的速度 (詳見下é¢â€œç´°åŒ–â€å°ç¯€),所以如果你正在使用滑鼠,你å¯èƒ½æœƒæƒ³è®“é€™å€‹åƒæ•¸å€¼ç‚ºé›¶ã€‚ - - 書法工具é¸é … + + 書法工具é¸é … - + 按 Ctrl+F6ã€C æŒ‰éµæˆ–點擊工具列上的按鈕來切æ›åˆ°æ›¸æ³•工具。你會注æ„到在上方工具列有 8 個é¸é …:寬度和細化;角度和固定;端點;顫抖;擺動和質é‡ã€‚也有兩個按鈕å¯é–‹é—œç¹ªåœ–æ¿çš„壓力和傾斜感應功能 (繪圖æ¿)。 - - 寬度和細化 + + 寬度和細化 - + 這組é¸é …控制你的畫筆寬度。寬度å¯å¾ž 1 變化到 100 而且 (é è¨­) 測é‡çš„å–®ä½ç›¸å°æ–¼ä½ çš„編輯視窗大å°ï¼Œä½†èˆ‡ç•«é¢ç¸®æ”¾ç„¡é—œã€‚這樣設計是有原因的,因為在書法中的自然“測é‡å–®ä½â€æ˜¯ä½ æ‰‹ç§»å‹•的範åœï¼Œå› è€Œæ–¹ä¾¿ä½ çš„筆尖寬度使用“繪圖æ¿â€å¤§å°çš„å›ºå®šæ¯”ä¾‹ï¼Œè€Œä¸æ˜¯ç”¨çœŸå¯¦å–®ä½ï¼Œé€™æ¨£å¯ä»¥ä½¿å…¶å–決於畫é¢å¤§å°ã€‚這種é‹ä½œæ–¹å¼ä¸æ˜¯å¼·åˆ¶çš„,所以å¯è½‰è€Œä½¿ç”¨ä¸ç®¡ç•«é¢ç¸®æ”¾çš„絕å°å–®ä½ã€‚勾鏿–¼å·¥å…·çš„å好設定é é¢ä¸Šçš„勾鏿–¹æ ¼ä¾†åˆ‡æ›ç‚ºé€™ç¨®æ¨¡å¼ (點擊兩次此工具按鈕å¯é–‹å•Ÿå好設定é é¢)。 - + 由於會時常改變筆尖寬度,所以你ä¸å¿…åˆ°å·¥å…·åˆ—èª¿æ•´å¯¬åº¦ï¼Œç›´æŽ¥ä½¿ç”¨å·¦å’Œå³æ–¹å‘鵿ˆ–繪圖æ¿çš„æ„Ÿå£“功能。最棒的是你能一邊繪畫一邊使用這些快æ·éµï¼Œæ‰€ä»¥ä½ èƒ½é€æ¼¸æ”¹è®Šç­†ç•«ä¸­é–“的寬度。 - 寬度=1, 逿¼¸è®Šå¯¬.... é”到 47, 逿¼¸è®Šç´°... 回到 0 - - + 寬度=1, 逿¼¸è®Šå¯¬.... é”到 47, 逿¼¸è®Šç´°... 回到 0 + + 筆尖寬度也å¯ä»¥å–æ±ºæ–¼é€Ÿåº¦ï¼Œç”±ç´°åŒ–åƒæ•¸é€²è¡ŒæŽ§åˆ¶ã€‚é€™é …åƒæ•¸å¯è¨­å®šçš„æ•¸å€¼ç‚º -100 到 100;零表示筆寬與速度無關,數值為正表示速度越快筆畫越細,數值為負則越快筆畫越寬。é è¨­å€¼ 10 表示快速的筆畫會有中等程度的細化。這裡有一些例å­ï¼Œå…¨éƒ¨ä»¥å¯¬åº¦=20 且角度=90: - 細化 = 0 (等寬) - 細化 = 10 - 細化 = 40 - 細化 = -20 - 細化 = -60 - - - - - - - - - - - - - - - - - - - - - + 細化 = 0 (等寬) + 細化 = 10 + 細化 = 40 + 細化 = -20 + 細化 = -60 + + + + + + + + + + + + + + + + + + + + + 來åšä¸€ä»¶å¥½çŽ©çš„äº‹ï¼Œå°‡å¯¬åº¦å’Œç´°åŒ–éƒ½è¨­å®šç‚º 100 (最大值) 並用抖動方å¼ç§»å‹•繪畫會產生奇妙自然的類似神經細胞的形狀: - - - - - - - - 角度和固定 + + + + + + + + 角度和固定 - + @@ -243,15 +243,15 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - - - 角度 = 90 度 - 角度 = 30 (é è¨­) - 角度 = 0 - 角度 = -90 度 - - + + + + 角度 = 90 度 + 角度 = 30 (é è¨­) + 角度 = 0 + 角度 = -90 度 + + @@ -260,34 +260,34 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + æ¯ä¸€ç¨®å‚³çµ±æ›¸æ³•風格都有自己普éçš„é‹ç­†è§’度。例如,安瑟爾字體 (Uncial hand) 書寫時使用 25 度角。更複雜的手法åŠå¯Œæœ‰ç¶“驗的書法家時常會在書寫時改變角度,而 Inkscape 能按上和下方å‘鵿ˆ–藉由繪圖æ¿çš„å‚¾æ–œæ„Ÿæ‡‰åŠŸèƒ½é”æˆé€™ç¨®æ•ˆæžœã€‚ä¸éŽæ›¸æ³•è¨“ç·´èª²ç¨‹å‰›é–‹å§‹æ™‚ï¼Œä¿æŒå›ºå®šè§’度是最好的練習方å¼ã€‚這有幾個用ä¸åŒè§’度書寫的筆畫範例 (固定 = 100): - 角度 = 30 - 角度 = 60 - 角度 = 90 - 角度 = 0 - 角度 = 15 - 角度 = -45 - - - - - - - + 角度 = 30 + 角度 = 60 + 角度 = 90 + 角度 = 0 + 角度 = 15 + 角度 = -45 + + + + + + + æ­£å¦‚æ‰€è¦‹ï¼Œæ›¸å¯«èˆ‡ç­†å°–è§’åº¦å¹³è¡Œæ™‚ç­†ç•«æœ€ç´°ï¼Œè€Œåž‚ç›´æ›¸å¯«å‰‡æœ€å¯¬ã€‚è§’åº¦ç‚ºæ­£æ˜¯æœ€è‡ªç„¶å’Œå‚³çµ±çš„å³æ‰‹æ›¸æ³•。 - + @@ -299,19 +299,19 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - 角度 = 30固定 = 100 - 角度 = 30固定 = 80 - 角度 = 30固定 = 0 - - - - - - - - - - + 角度 = 30固定 = 100 + 角度 = 30固定 = 80 + 角度 = 30固定 = 0 + + + + + + + + + + @@ -320,7 +320,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -329,7 +329,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -338,7 +338,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -347,7 +347,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -356,7 +356,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -365,7 +365,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -374,7 +374,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -383,7 +383,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -392,7 +392,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -401,7 +401,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -410,7 +410,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -419,7 +419,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -428,7 +428,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -437,7 +437,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -446,7 +446,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -455,7 +455,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -464,24 +464,24 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + 以å°åˆ·æ–¹é¢ä¾†èªªï¼Œæœ€å¤§å›ºå®šå€¼å½¢æˆæœ€å¤§ç¨‹åº¦çš„ç­†ç•«å¯¬åº¦å°æ¯” (左上圖) 便是å¤ç¾…馬襯線字型的特色,諸如 Times 或 Bodoni (因為這些字型從歷å²è§’度來看是在模仿固定筆尖的書寫方å¼)ã€‚å›ºå®šå€¼å’Œå¯¬åº¦å°æ¯”皆為零 (å³ä¸Šåœ–),用於其他的書寫方å¼ï¼Œä½¿äººè¯æƒ³åˆ°ç„¡è¥¯ç·šå­—形,例如 Helvetica。 - - 顫抖 + + 顫抖 - + 顫抖是為了使書寫筆畫有更自然的外觀。在控制列上å¯èª¿æ•´é¡«æŠ–的數值範åœå¾ž 0 到 100。它會使你的筆畫有å¯èƒ½ç”¢ç”Ÿå¾žäº›å¾®ä¸å‡å‹»åˆ°ä¸å—控制的斑點和汙點ä¸åŒçš„æƒ…å½¢ã€‚é€™é …åŠŸèƒ½å¯æœ‰æ•ˆæ“´å¤§æ›¸æ³•工具的創作幅度。 - + æ…¢ 中 å¿« @@ -495,289 +495,289 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - 顫抖 = 0 - 顫抖 = 10 - 顫抖 = 30 - 顫抖 = 50 - 顫抖 = 70 - 顫抖 = 90 - 顫抖 = 20 - 顫抖 = 40 - 顫抖 = 60 - 顫抖 = 80 - 顫抖 = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - æ“ºå‹•å’Œè³ªé‡ + 顫抖 = 0 + 顫抖 = 10 + 顫抖 = 30 + 顫抖 = 50 + 顫抖 = 70 + 顫抖 = 90 + 顫抖 = 20 + 顫抖 = 40 + 顫抖 = 60 + 顫抖 = 80 + 顫抖 = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + æ“ºå‹•å’Œè³ªé‡ - + ä¸åŒæ–¼å¯¬åº¦å’Œè§’åº¦ï¼Œæœ€å¾Œé€™å…©å€‹åƒæ•¸æ˜¯å®šç¾©å·¥å…·ã€Œæ„Ÿè¦ºã€èµ·ä¾†å¦‚ä½•ï¼Œè€Œä¸æ˜¯å½±éŸ¿å·¥å…·ç”¢ç”Ÿçš„æ•ˆæžœã€‚所以在這一å°ç¯€ä¸æœƒæœ‰ä»»ä½•æ’圖;å而åªè¦ä½ è‡ªå·±åŽ»å˜—è©¦é€™å…©å€‹åƒæ•¸å¾žä¸­ç²å¾—想法。 - + 擺動是筆移動時與紙張之間的阻力。é è¨­ç‚ºæœ€å°å€¼ (0)ï¼Œè€Œé€™é …åƒæ•¸æ„ˆå¤§æœƒä½¿ç´™å¼µæ„ˆã€Œå…‰æ»‘ã€ï¼šå¦‚果質é‡å¾ˆå¤§ï¼Œç­†å¾€å¾€æœƒåœ¨è½‰å½Žè™•失控;如果質é‡ç‚ºé›¶ï¼Œä¸”擺動值高會使筆瘋狂扭動。 - + 物ç†ä¸Šï¼Œè³ªé‡æ˜¯å°Žè‡´æ…£æ€§çš„å› ç´ ï¼›Inkscape 書法工具的質é‡è¶Šå¤§ï¼Œæœƒæ¯”滑鼠游標移動慢更多且筆畫中的å°è½‰å½Žå’Œæ‰­è½‰è™•會更為平滑。é è¨­çš„質é‡ç›¸ç•¶å° (2) æ‰€ä»¥æ›¸æ³•å·¥å…·åæ‡‰å¿«é€Ÿï¼Œä½†ä½ èƒ½å¢žåŠ è³ªé‡ä½¿ç­†å°–移動較慢且較平滑。 - - 書法範例 + + 書法範例 - + ç¾åœ¨ä½ å·²ç¶“曉得書法工具的基本功能,你å¯è©¦è‘—寫一些實際的書法。如果你å°é€™é–€è—è¡“ä¸ç†Ÿæ‚‰ï¼Œè‡ªå·±æ‰¾ä¸€æœ¬æ›¸æ³•書ç±ä¸¦ç”¨ Inkscape 來學習。這一å°ç¯€åªæœƒç¤ºç¯„一些簡單的例å­è®“你看。 - + 首先,開始學習寫一些字,你需è¦å»ºç«‹ä¸€çµ„基準線引導你。如果你è¦å¯«æ–œé«”æˆ–è‰æ›¸ï¼ŒåŒæ¨£åœ°åŠ å…¥ä¸€äº›è·¨è¶Šé‚£å…©æ¢åŸºæº–線的斜åƒè€ƒç·šï¼Œå¦‚下: - - - - - - - - - + + + + + + + + + 然後放大畫é¢å¦‚此一來基準線間的高度相當於你的手最自然的移動範åœï¼Œèª¿æ•´å¯¬åº¦å’Œè§’åº¦ï¼Œç„¶å¾Œè‡ªå·±ç·´ç¿’å¯«çœ‹çœ‹ï¼ - + 身為書法åˆå­¸è€…è¦åšçš„第一件事大概是練習文字的基本元素 — æ©«ã€è±Žã€åœ“ã€æ’‡ã€‚䏋颿œ‰ä¸€äº›å®‰ç‘Ÿçˆ¾å­—é«” (Uncial hand) 的字形元素: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + 一些有用的秘訣: - - + + 如果你的手在繪圖æ¿ä¸Šå¾ˆèˆ’é©ï¼Œæ‰‹ä¸è¦é›¢é–‹ã€‚åè€Œï¼Œåœ¨å®Œæˆæ¯å€‹å­—æ¯å¾Œç”¨ä½ çš„左手æ²å‹•é é¢ (Ctrl+æ–¹å‘éµ)。 - - + + 如果你最後一é“筆畫很糟,直接按 Ctrl+Z 復原。ä¸éŽï¼Œå‡å¦‚字的形狀很棒但ä½ç½®æˆ–大尿œ‰è¼•å¾®å離,最好暫時切æ›åˆ°é¸å–工具 (空白éµ) 並ä¾éœ€æ±‚調整/縮放/旋轉 (使用滑鼠或éµç›¤)ï¼Œç„¶å¾Œå†æŒ‰ä¸€æ¬¡ç©ºç™½éµå›žåˆ°è¼¸æ³•工具。 - - + + 已經完æˆä¸€å€‹å­—æ¯ï¼Œå°±å†æ¬¡åˆ‡æ›åˆ°é¸å–工具去調整筆畫一致性和字æ¯é–“è·ã€‚坿˜¯ä¸è¦åšéŽé ­äº†ï¼›å¥½çš„æ›¸æ³•å¿…é ˆä¿ç•™ç¨å¾®ä¸è¦å‰‡çš„æ‰‹å¯«æ¨£è²Œã€‚è¦æŠµæŠ—åŽ»è¤‡è£½å­—æ¯å’Œå­—æ¯å…ƒä»¶çš„誘惑;æ¯ä¸€ç­†ç•«éƒ½å¿…須用手寫。 - + 而這裡有一些完整的文字範例: - - - - - - - - - 安瑟爾體 (Unicial) - 塿´›æž—王æœé«” (Carolingian) - 哥德體 (Gothic) - 法國哥德體 (Bâtarde) - - - 花斜體 (Flourished Italic) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - çµè«– + + + + + + + + + 安瑟爾體 (Unicial) + 塿´›æž—王æœé«” (Carolingian) + 哥德體 (Gothic) + 法國哥德體 (Bâtarde) + + + 花斜體 (Flourished Italic) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + çµè«– - + 書法ä¸åƒ…好玩有趣;也是能傳é”你的經歷和感å—ä¸”èƒ½è§¸åŠæ·±å±¤éˆé­‚çš„è—術。Inkscape 的書法工具åªèƒ½ä½œç‚ºé©åº¦çš„入門。但它是éžå¸¸å¥½çš„玩樂消é£ä¸¦ä¸”在實際設計上會éžå¸¸æœ‰ç”¨ã€‚ç¥æ‚¨çŽ©å¾—æ„‰å¿«ï¼ - + diff --git a/share/tutorials/tutorial-elements.zh_TW.svg b/share/tutorials/tutorial-elements.zh_TW.svg index 971f42a14..b6ef9c765 100644 --- a/share/tutorials/tutorial-elements.zh_TW.svg +++ b/share/tutorials/tutorial-elements.zh_TW.svg @@ -36,61 +36,61 @@ - 使用 Ctrl+↓ å‘下æ²å‹•é é¢ + 使用 Ctrl+↓ å‘下æ²å‹•é é¢ - - ::è¦ç´  + + ::設計è¦ç´  - - + + 這篇教學示範設計的è¦ç´ å’ŒåŽŸå‰‡ï¼Œåœ¨åˆæœŸæ•™å°Žæ­£è¦ç¾Žè¡“學生這些是為了ç†è§£ç”¨åœ¨è—術創作的å„ç¨®æ€§è³ªã€‚é€™ä¸æ˜¯ä¸€å€‹è©³ç›¡çš„列表,所以請補充ã€åˆªæ¸›å’Œçµåˆå…¶ä»–內容讓這個教學更全é¢ã€‚ - - - - è¦ç´  - 原則 - é¡è‰² - ç·šæ¢ - 形狀 - 空間 - ç´‹ç† - 明暗 - å¤§å° - 平衡 - å°æ¯” - 強調 - 比例 - 圖案 - 層次 - çµ„åˆ - æ¦‚è¦ - - 設計è¦ç´  + + + + è¦ç´  + 原則 + é¡è‰² + ç·šæ¢ + 形狀 + 空間 + ç´‹ç† + 明暗 + å¤§å° + 平衡 + å°æ¯” + 強調 + 比例 + 圖案 + 層次 + çµ„åˆ + æ¦‚è¦ + + 設計è¦ç´  - - + + ä¸‹åˆ—å¹¾é …å…ƒç´ æ˜¯è¨­è¨ˆçš„ç©æœ¨ã€‚ - - ç·šæ¢ + + ç·šæ¢ - - + + ç·šæ¢è¢«å®šç¾©ç‚ºè¡¨ç¤ºé•·åº¦å’Œæ–¹å‘的特徵,由一點建立並移動跨越一個表é¢ã€‚ç·šæ¢èƒ½æœ‰å„種長度ã€å¯¬åº¦ã€æ–¹å‘ã€æ›²çŽ‡å’Œé¡è‰²ã€‚ç·šæ¢å¯ä»¥æ˜¯äºŒç¶­ (紙張上的鉛筆線),或是隱å«çš„三維。 - + @@ -102,54 +102,54 @@ - - 形狀 + + 形狀 - - + + 當實際或隱å«çš„ç·šæ¢æŽ¥åˆåœç¹žä¸€å€‹ç©ºé–“時就建立出一個平é¢åœ–å½¢ã€å½¢ç‹€ã€‚é¡è‰²æˆ–明暗變化å¯å®šç¾©ä¸€å€‹å½¢ç‹€ã€‚形狀å¯åˆ†ç‚ºå¹¾ç¨®é¡žåž‹ï¼šå¹¾ä½• (正方形ã€ä¸‰è§’å½¢ã€åœ“å½¢) å’Œ 有機 (ä¸è¦å‰‡çš„輪廓)。 - + - - å¤§å° + + å¤§å° - - + + 這項涉åŠç‰©ä»¶ã€ç·šæ¢æˆ–形狀的比例差異。物件ä¸è«–在實際或視覺上都有大å°å·®ç•°ã€‚ - - BIG - small - - 空間 + + BIG + small + + 空間 - - + + 空間是物件周åœã€ä¸Šé¢ã€ä¸‹é¢æˆ–裡é¢çš„空白或開放é¢ç©ã€‚由空間的周åœå’Œå…§éƒ¨è£½é€ å‡ºå½¢ç‹€å’Œçµæ§‹ã€‚ç©ºé–“å¸¸è¢«ç¨±ç‚ºä¸‰ç¶­æˆ–äºŒç¶­ã€‚å¯¦ç©ºé–“æ˜¯ç”±ä¸€å€‹å½¢ç‹€æˆ–çµæ§‹å¡«å……。虛空間則åœç¹žä¸€å€‹å½¢ç‹€æˆ–çµæ§‹ã€‚ - - - - - - é¡è‰² + + + + + + é¡è‰² - - + + @@ -166,12 +166,12 @@ - - - ç´‹ç† + + + ç´‹ç† - - + + @@ -188,15 +188,15 @@ - - - - - - 明暗 + + + + + + 明暗 - - + + @@ -222,71 +222,71 @@ - - - - - - - 設計原則 + + + + + + + 設計原則 - - + + 原則是é‹ç”¨è¨­è¨ˆè¦ç´ å‰µä½œå‡ºä¸€å€‹çµ„åˆé«”。 - - 平衡 + + 平衡 - - + + 平衡是一種在形狀ã€çµæ§‹ã€æ˜Žæš—ã€é¡è‰²ç­‰ä¸Šé¢çš„視覺å‡ç­‰æ„Ÿå—。平衡感å¯ä»¥æ˜¯å°ç¨±çš„æˆ–å‡å‹»çš„平衡或者éžå°ç¨±çš„å’Œéžå‡å‹»çš„å¹³è¡¡ã€‚ç‰©ä»¶ã€æ˜Žæš—ã€é¡è‰²ã€ç´‹ç†ã€å½¢ç‹€ã€çµæ§‹ç­‰å¯ä»¥ç”¨æ–¼å»ºç«‹ä¸€å€‹åˆæˆé«”的平衡感。 - - - - - - - - å°æ¯” + + + + + + + + å°æ¯” - - + + å°æ¯”是幾項相å°çš„元素並列一起。 - - - - - - 強調 + + + + + + 強調 - - + + 強調是用來使作å“çš„æŸäº›éƒ¨ä»½è„«ç©Žè€Œå‡ºä¸¦å¼•起你的注æ„。趣味中心或焦點的作用是å¸å¼•你的第一次目光。 - - - - - - - 比例 + + + + + + + 比例 - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant & 4WD - SVG 圖åƒä½œè€…為 Andrew Fitzsimon開放美工圖庫的美æ„http://www.openclipart.org/ - + Random Ant & 4WD + SVG 圖åƒä½œè€…為 Andrew Fitzsimon開放美工圖庫的美æ„http://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - 圖案 + + + + 圖案 - - + + @@ -425,14 +425,14 @@ - - - - - 層次 + + + + + 層次 - - + + @@ -448,17 +448,17 @@ - - - - - - - - çµ„åˆ + + + + + + + + çµ„åˆ - - + + @@ -544,103 +544,99 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - åƒè€ƒæ–‡ç» + + + åƒè€ƒæ–‡ç» - - + + 這是用於文件的部份åƒè€ƒæ–‡ç»ã€‚ - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics -people have submitted to that project. - + ç‰¹åˆ¥æ„Ÿè¬ Linda Kim (http://www.redlucite.org/redlucite/) 給予我 (http://www.rejon.org/) 和這篇教學的幫助。也感è¬é–‹æ”¾ç¾Žå·¥åœ–庫 (http://www.openclipart.org/) å’Œéžäº¤åˆ°é€™å€‹è¨ˆåŠƒçš„ä½œå“ã€ä½œè€…。 - + @@ -670,8 +666,8 @@ people have submitted to that project. - - 使用 Ctrl+↑ å‘上æ²å‹•é é¢ + + 使用 Ctrl+↑ å‘上æ²å‹•é é¢ diff --git a/share/tutorials/tutorial-interpolate.zh_TW.svg b/share/tutorials/tutorial-interpolate.zh_TW.svg index 5e735c05c..b696c5015 100644 --- a/share/tutorials/tutorial-interpolate.zh_TW.svg +++ b/share/tutorials/tutorial-interpolate.zh_TW.svg @@ -1,6 +1,6 @@ - + @@ -36,74 +36,74 @@ - 使用 Ctrl+↓ å‘下æ²å‹•é é¢ + 使用 Ctrl+↓ å‘下æ²å‹•é é¢ - + ::å…§æ’ -Ryan Lerch, ryanlerch at gmail dot com - - + + + 這篇文章說明如何使用 Inkscape çš„å…§æ’æ“´å……功能 - - 介紹 + + 介紹 - - + + å…§æ’æ˜¯åœ¨å…©å€‹æˆ–多個é¸å–路徑之間作線性內æ’。大致上來說就是在路徑的間隔填入æ±è¥¿ä¸¦ä¸”根據給定的階層數轉變它們。 - - + + - é–‹å§‹ä½¿ç”¨å…§æ’æ“´å……功能,é¸å–你想è¦è½‰è®Šçš„路徑,並從é¸å–®ä¸­é¸æ“‡ 擴充功能 > 從路徑產生 > å…§æ’。 + é–‹å§‹ä½¿ç”¨å…§æ’æ“´å……功能,é¸å–你想è¦è½‰è®Šçš„路徑,並從é¸å–®ä¸­é¸æ“‡ 擴充功能 > 從路徑產生 > å…§æ’。 - - + + - 調用此擴充功能å‰ï¼Œä½ å¿…é ˆå…ˆå°‡ç‰©ä»¶è½‰æ›æˆè·¯å¾‘。é¸å–物件然後使用 路徑 > 物件轉æˆè·¯å¾‘ 或 Shift+Ctrl+Cã€‚å¦‚æžœä½ çš„ç‰©ä»¶ä¸æ˜¯è·¯å¾‘,那麼執行內æ’䏿œƒæœ‰ä»»ä½•作用。 + 調用此擴充功能å‰ï¼Œä½ å¿…é ˆå…ˆå°‡ç‰©ä»¶è½‰æ›æˆè·¯å¾‘。é¸å–物件然後使用 路徑 > 物件轉æˆè·¯å¾‘ 或 Shift+Ctrl+Cã€‚å¦‚æžœä½ çš„ç‰©ä»¶ä¸æ˜¯è·¯å¾‘,那麼執行內æ’䏿œƒæœ‰ä»»ä½•作用。 - - 兩個相åŒè·¯å¾‘çš„å…§æ’ + + 兩個相åŒè·¯å¾‘çš„å…§æ’ - - + + å…§æ’特效最簡單的用法是在兩個完全相åŒçš„è·¯å¾‘ä¹‹é–“åŸ·è¡Œå…§æ’æ“´å……功能。當呼å«é€™å€‹ç‰¹æ•ˆæ™‚ï¼Œå…¶çµæžœä¾¿æ˜¯ä»¥æ•¸å€‹åŽŸå§‹ç‰©ä»¶çš„å†è£½ç‰©ä»¶å¡«å…¥é€™å…©å€‹è·¯å¾‘之間的空間。階層數會決定放置多少個複製物件。 - - + + ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰å…©å€‹è·¯å¾‘: - + - - + + ç¾åœ¨ï¼Œé¸å–這兩個路徑,然後以下é¢åœ–ç‰‡è£¡çš„è¨­å®šå€¼ä¾†åŸ·è¡Œå…§æ’æ“´å……功能。 - + @@ -114,44 +114,44 @@ Ryan Lerch, ryanlerch at gmail dot com - 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ + 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - - + + 如åŒä¸Šåœ–ä¸­æ‰€è¦‹åŸ·è¡Œå¾Œçš„çµæžœï¼Œå…©çš„圓形路徑之間的地方被填入 6 個 (å…§æ’階層數) å…¶ä»–çš„åœ“å½¢è·¯å¾‘ã€‚ä¸¦æ³¨æ„æ­¤æ“´å……功能會把這些形狀群組在一起。 - - å…©å€‹ç›¸ç•°è·¯å¾‘çš„å…§æ’ + + å…©å€‹ç›¸ç•°è·¯å¾‘çš„å…§æ’ - - + + ç•¶å…§æ’用在兩個ä¸åŒçš„è·¯å¾‘ä¸Šæ™‚ï¼Œç¨‹å¼æ‰€æ’入的路徑之形狀會從其中一個漸漸變為å¦ä¸€å€‹ã€‚你會ç²å¾—路徑之間連續的形狀轉變效果,形狀轉變的數é‡ä»æ˜¯ç”±å…§æ’階層數決定。 - - + + ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰å…©å€‹è·¯å¾‘: - + - - + + ç¾åœ¨ï¼Œé¸å–é€™å…©å€‹è·¯å¾‘ï¼Œä¸¦åŸ·è¡Œå…§æ’æ“´å……åŠŸèƒ½ã€‚åŸ·è¡Œå¾Œçš„çµæžœå¦‚䏋颿‰€ç¤ºï¼š - + @@ -162,30 +162,30 @@ Ryan Lerch, ryanlerch at gmail dot com - 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ + 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - - + + å¦‚ä¸Šåœ–ä¸­çœ‹åˆ°çš„çµæžœï¼Œåœ“形路徑和三角形路徑之間的地方被填入 6 個路徑,且路徑的形狀從圓形漸漸轉變æˆä¸‰è§’形。 - - + + ç•¶å…§æ’æ“´å……功能用於兩個相異的路徑時,æ¯å€‹è·¯å¾‘起始節點的ä½ç½®å°±å¾ˆé‡è¦ã€‚è¦æŸ¥è©¢è·¯å¾‘的起始節點,先é¸å–è·¯å¾‘ï¼Œç„¶å¾Œé¸æ“‡ç¯€é»žå·¥å…·æœƒå‡ºç¾è·¯å¾‘ç¯€é»žï¼Œå†æŒ‰ TAB éµã€‚第一個被é¸å–的就是路徑的起始節點。 - - + + 看下é¢çš„圖åƒï¼Œé™¤äº†é¡¯ç¤ºç¯€é»žä»¥å¤–其他部份和上一個範例完全相åŒã€‚æ¯å€‹è·¯å¾‘上的綠色節點便是起始節點。 - + @@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 上一個範例 (下圖所示) æ–¼æ¯å€‹è·¯å¾‘上標示起始節點。 - + @@ -214,16 +214,16 @@ Ryan Lerch, ryanlerch at gmail dot com - 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ + 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - - + + ç¾åœ¨ï¼Œç¿»è½‰ä¸‰è§’形路徑使得起始節點ä½ç½®ä¸åŒï¼Œæ³¨æ„å…§æ’æ•ˆæžœç”¢ç”Ÿçš„變化: - + @@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch at gmail dot com - + @@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch at gmail dot com - - æ’å…¥æ–¹å¼ + + æ’å…¥æ–¹å¼ - - + + æ’å…¥æ–¹å¼æ˜¯å…§æ’æ“´å……åŠŸèƒ½çš„å…¶ä¸­ä¸€å€‹åƒæ•¸ã€‚有 2 種ä¸åŒçš„æ’å…¥æ–¹å¼ï¼Œå…©è€…的差別在於用ä¸åŒçš„æ–¹å¼ä¾†è¨ˆç®—新形狀的曲線。æ’å…¥æ–¹å¼ 1 或 2 åªèƒ½äºŒé¸ä¸€ã€‚ - - + + 在上é¢çš„範例中,我們使用æ’å…¥æ–¹å¼ 2ï¼Œçµæžœå¦‚下: - + @@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + ç¾åœ¨å’Œæ’å…¥æ–¹å¼ 1 作比較: - + @@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + è‡³æ–¼å…©è€…æ•¸å€¼è¨ˆç®—çš„æ–¹å¼æœ‰ä½•差別ä¸åœ¨æœ¬æ–‡è¬›è¿°çš„範åœï¼Œæ‰€ä»¥ç›´æŽ¥è©¦çœ‹çœ‹é€™å…©ç¨®æ–¹å¼ï¼Œç„¶å¾Œé¸ç”¨ç”¢ç”Ÿæ•ˆæžœæœ€æŽ¥è¿‘你想è¦çš„那一種。 - - 指數 + + 指數 - - + + æŒ‡æ•¸åƒæ•¸å¯æŽ§åˆ¶æ’入路徑之間的間隔è·é›¢ã€‚指數為 0 會使複本之間的間隔è·é›¢å¹³å‡åˆ†é…。 - - + + 䏋颿˜¯å¦ä¸€å€‹ç¯„例且指數為 0 的效果。 - + @@ -331,16 +331,16 @@ Ryan Lerch, ryanlerch at gmail dot com - 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ + 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - - + + åŒæ¨£çš„範例但指數為 1: - + @@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 指數為 2: - + @@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 指數為 -1: - + @@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + ç•¶å…§æ’æ“´å……åŠŸèƒ½è™•ç†æŒ‡æ•¸æ™‚,é¸å–ç‰©ä»¶çš„é †åºæ˜¯å¾ˆé‡è¦çš„。下é¢çš„範例中,先é¸å–左邊的星形路徑,å†é¸å–å³é‚Šçš„六邊形路徑。 - - + + å†çœ‹çœ‹è‹¥å…ˆé¸å³é‚Šè·¯å¾‘æƒ…å½¢ä¸‹çš„çµæžœã€‚這範例的指數設定為 1: - + @@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch at gmail dot com - - å†è£½çµ‚點路徑 + + å†è£½çµ‚點路徑 - - + + é€™å€‹åƒæ•¸æ±ºå®šå…§æ’擴充功能生æˆçš„路徑群組是å¦åŒ…å«åŽŸå§‹è·¯å¾‘çš„è¤‡æœ¬ã€‚ - - æ’å…¥æ¨£å¼ + + æ’å…¥æ¨£å¼ - - + + é€™å€‹åƒæ•¸æ˜¯å…§æ’擴充功能美妙功能的其中一項。æ’å…¥æ¨£å¼æœƒä½¿æ“´å……功能於æ¯éšŽå±¤éƒ½è©¦è‘—改變路徑的樣å¼ã€‚因此如果起點路徑的é¡è‰²å’Œçµ‚點路徑ä¸åŒï¼Œç”Ÿæˆçš„è·¯å¾‘æœƒé€æ¼¸è®Šæˆä¸€æ¨£ã€‚ - - + + 下é¢çš„範例中æ’入樣å¼åŠŸèƒ½è¢«ç”¨æ–¼è·¯å¾‘çš„å¡«è‰²ä¸Šï¼š - + @@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + æ’入樣å¼å°è·¯å¾‘的邊框é¡è‰²ä¹Ÿæœ‰ä½œç”¨ï¼š - + @@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 當然,起點和終點的路徑ä¸ä¸€å®šè¦ç›¸åŒï¼š - + @@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch at gmail dot com - - 用內æ’仿造ä¸è¦å‰‡æ¼¸å±¤ + + 用內æ’仿造ä¸è¦å‰‡æ¼¸å±¤ - - + + Inkscape 還無法建立線性 (ç›´ç·š) 或放射狀 (圓形) 以外的漸層。ä¸éŽï¼Œå¯ä»¥ç”¨å…§æ’擴充功能和æ’入樣å¼ä¾†ä»¿é€ å…¶ä»–種類的漸層。一個簡單的例å­å¦‚下 — ç•«å…©æ¢ä¸åŒé‚Šæ¡†é¡è‰²çš„ç·šæ¢ï¼š - + - - + + 然後å°é€™å…©æ¢ç·šæ®µä½¿ç”¨å…§æ’來建立漸層效果: - + @@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch at gmail dot com - - çµè«– + + çµè«– - - + + 如åŒä¸Šé¢å…§å®¹æ‰€å‘ˆç¾ï¼ŒInkscape çš„å…§æ’æ“´å……功能是éžå¸¸å¼·å¤§çš„å·¥å…·ã€‚é€™ç¯‡æ•™å­¸è¬›è¿°äº†å…§æ’æ“´å……功能的基本用法,但經éŽå¯¦é©—和練習æ‰èƒ½å®Œå…¨æŽŒæ¡å…§æ’的特性。 - + @@ -586,8 +586,8 @@ Ryan Lerch, ryanlerch at gmail dot com - - 使用 Ctrl+↑ å‘上æ²å‹•é é¢ + + 使用 Ctrl+↑ å‘上æ²å‹•é é¢ diff --git a/share/tutorials/tutorial-shapes.zh_TW.svg b/share/tutorials/tutorial-shapes.zh_TW.svg index b6a818c38..cc15f43aa 100644 --- a/share/tutorials/tutorial-shapes.zh_TW.svg +++ b/share/tutorials/tutorial-shapes.zh_TW.svg @@ -65,334 +65,322 @@ Inkscape 有四種è¬ç”¨çš„形狀工具,æ¯ç¨®å·¥å…·éƒ½æœ‰å»ºç«‹å’Œç·¨è¼¯è‡ªå·±å½¢ç‹€é¡žåž‹çš„功能。形狀屬於一種物件,所以你能用ç¨ç‰¹çš„æ–¹å¼ä¾†ä¿®æ”¹å½¢ç‹€çš„æ¨£å¼ï¼Œä½¿ç”¨å¯æ‹–曳的控制點和數字形å¼çš„åƒæ•¸ä¾†æ±ºå®šå½¢ç‹€çš„外觀。 - + - For example, with a star you can alter the number of tips, their length, angle, -rounding, etc. — but a star remains a star. A shape is “less free†than a simple -path, but it's often more interesting and useful. You can always convert a shape -to a path (Shift+Ctrl+C), but the reverse conversion is not possible. - + 例如,你å¯ä»¥æ”¹è®Šä¸€å€‹æ˜Ÿå½¢çš„尖角數ã€é•·åº¦ã€è§’度ã€åœ“角化程度...ç­‰ — 但是星形ä»ç„¶æ˜¯æ˜Ÿå½¢ã€‚形狀比起簡單的路徑比較有 â€œä¾·é™æ€§â€œï¼Œä½†å½¢ç‹€ä»ç„¶å¾ˆæœ‰è¶£ä¸”很有用。你å¯éš¨æ™‚將形狀轉æˆè·¯å¾‘ (Ctrl+Shift+C),但無法逆å‘轉æ›å›žå½¢ç‹€ã€‚ - + å½¢ç‹€å·¥å…·åˆ†ç‚ºçŸ©å½¢ã€æ©¢åœ“å½¢ã€æ˜Ÿå½¢å’Œèžºæ—‹å½¢ã€‚我們先大致瞭解形狀工具的使用方å¼ï¼›ç„¶å¾Œå†æ·±å…¥æŽ¢è¨Žæ¯ç¨®å½¢ç‹€é¡žåž‹çš„細節。 - - 一般技巧 + + 一般技巧 - + - A new shape is created by dragging on canvas with the -corresponding tool. Once the shape is created (and so long as it is -selected), it displays its handles as white diamond, square or round -marks (depending on the tools), so you can immediately edit what you -created by dragging these handles. - + ä½¿ç”¨å°æ‡‰çš„工具在畫布上拖曳å¯å»ºç«‹ä¸€å€‹æ–°å½¢ç‹€ã€‚一旦建立形狀 (åªè¦æ˜¯å½¢ç‹€è¢«é¸å–),便會顯示白色方塊形狀記號作為它的控制點,所以你拖動這些控制點就能直接進行編輯。 - + 四種形狀在使用形狀工具時都會顯示它們的控制點,與使用節點工具 (F2) 時一樣。當你的滑鼠åœç•™åœ¨æŽ§åˆ¶é»žä¸Šæ™‚ï¼Œç¨‹å¼æœƒåœ¨ç‹€æ…‹åˆ—告訴使用者當拖曳或點擊會有什麼ä¸åŒçš„修改效果。 - + åŒæ¨£åœ°ï¼Œæ¯ç¨®å½¢ç‹€å·¥å…·æœƒåœ¨å·¥å…·æŽ§åˆ¶åˆ—é¡¯ç¤ºå®ƒçš„åƒæ•¸ (使–¼ç•«å¸ƒä¸Šæ–¹çš„æ©«å‘ä½ç½®)。通常控制列上有一些數值輸入欄和一個å¯é‡è¨­ç‚ºé è¨­å€¼çš„æŒ‰éˆ•。當é¸å–ç›®å‰å·¥å…·æ‰€å±¬çš„å½¢ç‹€æ™‚ï¼Œç·¨è¼¯æŽ§åˆ¶åˆ—ä¸Šçš„æ•¸å€¼å¯æ”¹è®Šé¸å–的形狀。 - + ç¨‹å¼æœƒè¨˜ä½å·¥å…·æŽ§åˆ—的任何變更,並且會用於下次所繪製的物件上。舉例來說,你改變星形的尖角數é‡ä¹‹å¾Œï¼Œç¹ªè£½ä¸€å€‹æ˜Ÿå½¢æœƒæœ‰ç›¸åŒçš„尖角數。此外,還能簡單地é¸å–一個形狀傳é€å®ƒçš„åƒæ•¸åˆ°å·¥å…·æŽ§åˆ¶åˆ—ï¼Œä¸¦å°‡é€™äº›åƒæ•¸å€¼å¥—用到新建立的åŒé¡žåž‹å½¢ç‹€ã€‚ - + - When in a shape tool, selecting an object can be done by clicking -on it. Ctrl+click (select in group) and Alt+click -(select under) also work as they do in Selector tool. Esc deselects. - + 當使用形狀工具時,在形狀上點擊滑鼠左éµå¯é¸å–物件。Ctrl+點擊 (é¸å–群組中的形狀) å’Œ Alt+點擊 (é¸å–下é¢çš„形狀) 也å¯ç•¶æˆé¸å–工具使用。Esc éµ å¯å–消é¸å–。 - - 矩形 + + 矩形 - + 矩形是最簡單的,但或許也是在設計和æ’畫中最常見的形狀。Inkscape 試著讓建立和編輯矩形盡å¯èƒ½è®Šå¾—ç°¡å–®ã€æ–¹ä¾¿ã€‚ - + 按 F4 或點擊工具箱上的按鈕來切æ›åˆ°çŸ©å½¢å·¥å…·ã€‚沿著這個è—色矩形的邊繪製一個新矩形: - 畫在這裡 - - + 畫在這裡 + + 接著,繼續使用矩形工具,然後é‹ç”¨é»žæ“Šå¾žä¸€å€‹çŸ©å½¢åˆ‡æ›é¸å–å¦ä¸€å€‹ã€‚ - + 矩形繪製快æ·éµï¼š - - + + 按著 Ctrl,å¯ç¹ªè£½æ­£æ–¹å½¢æˆ–整數比例 (2:1ã€3:1 ç­‰) 的矩形。 - - + + 按著 Shift,以起始點作為中心來繪製。 - + 正如你所見,被é¸å–的矩形 (剛繪製好的矩形都會呈é¸å–狀態) 在三個角上會顯示三個控制點。實際上有四個控制點,但如果éžåœ“角矩形其中兩個 (å³ä¸Šè§’) 會é‡ç–Šåœ¨ä¸€èµ·ã€‚其中兩個是圓角控制點;其餘兩個 (左上角和å³ä¸‹è§’) 是大å°èª¿æ•´æŽ§åˆ¶é»žã€‚ - + 先來看圓角控制點。抓ä½å…¶ä¸­ä¸€å€‹ä¸¦å¾€ä¸‹æ‹–動。矩形的四個角全部都會變æˆåœ“角,而你å¯ä»¥çœ‹åˆ°ç¬¬äºŒå€‹åœ“角控制點 — 在原來的ä½ç½®ä¸Šã€‚é€™æ™‚å€™æ˜¯åœ“å½¢çš„åœ“è§’ã€‚å¦‚æžœä½ æƒ³è®“åœ“è§’æˆæ©¢åœ“形,便å‘左移動其他控制點。 - + 下圖,å‰é¢å…©å€‹çŸ©å½¢ç‚ºåœ“形圓角,而其餘兩個則是橢圓形圓角: - 橢圓形圓角 - 圓形圓角 - - - - - + 橢圓形圓角 + 圓形圓角 + + + + + 在使用矩形工具的情形下,點擊這些矩形來é¸å–,並觀察它們的圓角控制點。 - + 常會需è¦è®“整個形體內的圓角åŠå¾‘和形狀固定ä¸è®Šï¼Œå³ä½¿çŸ©å½¢çš„大å°ä¸åŒ (想åƒä¸€ä¸‹åœ–表中å„種大å°çš„圓角方形)。Inkscape 能輕易地åšåˆ°ã€‚切æ›ç‚ºé¸å–工具;在工具控制列上有四個開關按鈕,左邊數來第二個呈ç¾å…©å€‹åŒå¿ƒåœ“角的圖案。這個開關按鈕å¯è®“你控制矩形縮放時圓角是å¦éš¨è‘—縮放。 - + 例如,å†è£½ä¸‹é¢åŽŸå§‹çš„ç´…è‰²çŸ©å½¢ï¼Œç„¶å¾Œé—œé–‰ã€Œç¸®æ”¾åœ“è§’ã€æŒ‰éˆ•的情æ³ä¸‹ç¸®æ”¾å¹¾æ¬¡ã€ä¸Šä¸‹ç§»å‹•ã€æ”¹è®Šæ¯”例: - ç¸®æ”¾åœ“è§’çŸ©å½¢é—œé–‰åŒæ™‚ "縮放圓角" - - - - - - - - - + ç¸®æ”¾åœ“è§’çŸ©å½¢é—œé–‰åŒæ™‚ "縮放圓角" + + + + + + + + + å¯ç™¼ç¾åœ¨æ‰€æœ‰çŸ©å½¢ä¸­åœ“角的大å°å’Œå½¢ç‹€éƒ½ä¸æœƒæ”¹è®Šï¼Œæ‰€ä»¥å…¨éƒ¨å³ä¸Šè§’的圓角完全é‡ç–Šåœ¨ä¸€èµ·ã€‚全部點線邊框的è—色矩形都是從紅色矩形用é¸å–工具進行縮放得到的,且ä¸ä½œä»»ä½•圓角控制點的手動調整。 - + ç¾åœ¨ä¾†åšå€‹æ¯”è¼ƒï¼Œä¸‹é¢æœ‰åŒæ¨£çš„組æˆä½†åœ¨é–‹å•Ÿã€Œç¸®æ”¾åœ“è§’ã€æŒ‰éˆ•的情形下建立: - ç¸®æ”¾åœ“è§’çŸ©å½¢é–‹å•ŸåŒæ™‚ "縮放圓角" - - - - - - - - - + ç¸®æ”¾åœ“è§’çŸ©å½¢é–‹å•ŸåŒæ™‚ "縮放圓角" + + + + + + + + + 這時æ¯å€‹çŸ©å½¢çš„圓角大å°çš†ä¸åŒï¼Œä¸”å³ä¸Šè§’完全沒有å°é½Š (放大畫é¢ä¾†è§€å¯Ÿ)。這個和你將原本的矩形轉為路徑 (Ctrl+Shift+C) 然後縮放大å°çš„æ•ˆæžœä¸€æ¨£ (看起來)。 - + 䏋颿˜¯çŸ©å½¢åœ“角控制點的快æ·éµï¼š - - + + 按著 Ctrl 拖曳滑鼠å¯ç”¢ç”Ÿå…¶ä»–ç­‰åŠå¾‘圓角 (圓形圓角)。 - - + + Ctrl+點擊 ä¸éœ€æ‹–動滑鼠便å¯ç”¢ç”Ÿå…¶ä»–的等åŠå¾‘圓角。 - - + + Shift+點擊 å¯ç§»é™¤åœ“角。 - + ä½ å¯èƒ½å·²ç¶“注æ„到矩形工具列上會顯示é¸å–矩形的水平 (Rx) 和垂直 (Ry) 圓角åŠå¾‘,讓你å¯ä»¥æº–確地設定圓角åŠå¾‘和使用å„種長度單ä½ã€‚而無圓角按鈕的作用是 — 從é¸å–的矩形上移除圓角。 - + 這些æ“作有一個é‡è¦çš„優點那就是å¯ä»¥ä¸€æ¬¡æ”¹è®Šè¨±å¤šçŸ©å½¢ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ æƒ³è¦æ”¹è®Šåœ–層中全部的矩形,åªè¦æŒ‰ Ctrl+A (å…¨é¸) 並在控制列上設定你è¦çš„åƒæ•¸ã€‚如有é¸å–到其他éžçŸ©å½¢çš„物件,會自動忽略那些物件 — åªæœ‰çŸ©å½¢æœƒç”¢ç”Ÿè®ŠåŒ–。 - + ç¾åœ¨æˆ‘們來看矩形的大å°èª¿æ•´æŽ§åˆ¶é»žã€‚ä½ å¯èƒ½æƒ³çŸ¥é“既然我們å¯ç”¨é¸å–工具縮放矩形為什麼還需è¦å¤§å°èª¿æ•´æŽ§åˆ¶é»žï¼Ÿ - + é¸å–工具的å•題在於水平和垂直縮放都是沿著文件é é¢çš„æ–¹å‘。相較之下,矩形的大å°èª¿æ•´æŽ§åˆ¶é»žæ˜¯æ²¿è‘—矩形的邊進行縮放,å³ä½¿æ˜¯æ—‹è½‰æˆ–傾斜矩形。例如,先試著用é¸å–工具調整這個矩形的大å°ç„¶å¾Œå†ç”¨çŸ©å½¢å·¥å…·èª¿æ•´æŽ§åˆ¶é»žï¼š - - + + 由於有兩個大å°èª¿æ•´æŽ§åˆ¶é»žï¼Œä½ å¯ä»¥å¾€ä»»ä½•æ–¹å‘調整大å°ç”šè‡³æ²¿è‘—矩形的邊移動。大å°èª¿æ•´æŽ§åˆ¶é»žæœƒä¸€ç›´å›ºå®šåœ“è§’åŠå¾‘。 - + 䏋颿˜¯å¤§å°èª¿æ•´æŽ§åˆ¶é»žçš„å¿«æ·éµï¼š - - + + 按著 Ctrl 拖曳å¯è²¼é½ŠçŸ©å½¢çš„邊或å°è§’線進行。æ›å¥è©±èªªï¼ŒCtrl 會固定矩形的寬度ã€é«˜åº¦æˆ–寬高比 (å³ä¾¿æ—‹è½‰æˆ–å‚¾æ–œè‡ªå·±çš„åæ¨™)。 - + 䏋颿œ‰ä¸€å€‹ç›¸åŒçš„矩形,按著 Ctrl 拖曳時讓大å°èª¿æ•´æŽ§åˆ¶é»žä¿æŒä»¥ç°è‰²è™›ç·šæŒ‡ç¤ºçš„æ–¹å‘移動 (試試看): - + - - 矩形的貼齊 - 按 Ctrl 拖動大å°èª¿æ•´æŽ§åˆ¶é»ž - + + 矩形的貼齊 - 按 Ctrl 拖動大å°èª¿æ•´æŽ§åˆ¶é»ž + 傾斜和旋轉一個矩形,然後å†è£½çŸ©å½¢ä¸¦ç”¨æŽ§åˆ¶é»žèª¿æ•´å¤§å°ï¼Œä¾¿èƒ½è¼•易地製作立體效果: - - - - - - - - - - - - - - - - - - - - - 3 個原始矩形 - 一些由控制點調整大å°çš„複製之矩形,大部分按著 Ctrl æ“作 - + + + + + + + + + + + + + + + + + + + + + 3 個原始矩形 + 一些由控制點調整大å°çš„複製之矩形,大部分按著 Ctrl æ“作 + @@ -463,621 +451,615 @@ on it. Ctrl+click (select in group) and - - - - - - - - - - - - - - - - - - - - - - - - 橢圓形 + + + + + + + + + + + + + + + + + + + + + + + + 橢圓形 - + 橢圓形工具 (F5) 能建立橢圓形和圓形,也å¯è½‰æ›ç‚ºæ‰‡å½¢æˆ–弧。橢圓形工具的快æ·éµèˆ‡çŸ©å½¢å·¥å…·ç›¸åŒï¼š - - + + 按著 Ctrl å¯ç¹ªè£½åœ“形或整數比例 (2:1ã€3:1 ç­‰) 的橢圓形。 - - + + 按著 Shift,以起始點作為中心來繪製。 - + 讓我們來探索橢圓形控制點的特性。é¸å–下é¢çš„æ©¢åœ“形: - - + + 與之å‰ä¸€æ¨£ï¼Œä½ æœƒçœ‹åˆ°ä¸‰å€‹æŽ§åˆ¶é»žï¼Œä½†å¯¦éš›ä¸Šæœ‰å››å€‹ã€‚最å³é‚Šçš„æŽ§åˆ¶é»žæ˜¯å…©å€‹é‡ç–Šçš„æŽ§åˆ¶é»žè®“ä½ å¯ä»¥ã€Œæ‰“é–‹ã€é€™å€‹æ©¢åœ“形。拖動最å³é‚Šçš„æŽ§åˆ¶é»žï¼Œç„¶å¾Œæ‹–動在剛剛控制點底下的控制點å¯å¾—到å„種餅形的扇形或弧形: - - - - - - - - + + + + + + + + 拖曳時游標在橢圓形的外é¢ç§»å‹•å¯å¾—到一個扇形 (一個弧形加上兩個åŠå¾‘);拖曳時游標在橢圓形的內部移動則å¯å¾—到一個弧形。上é¢çš„左邊有 4 個扇形而å³é‚Šæœ‰ 3 個弧形。注æ„那些弧形是未閉åˆçš„形狀,也就是說邊框沿著橢圓形但弧形的兩端點沒有接åˆåœ¨ä¸€èµ·ã€‚如果你移除填色åªç•™ä¸‹é‚Šæ¡†å¯è®“這個特徵更明顯: - + 15 - 扇形 - å¼§ - - - - - - - - - - - - - - - - - - - - + 扇形 + å¼§ + + + + + + + + + + + + + + + + + + + + 注æ„左邊狹窄線段的扇å­å½¢ç‹€ç¾¤çµ„。按著 Ctrl 利用控制點的角度æ‰å–å¯è¼•易地製作出這些扇形。弧/扇形控制點的快æ·éµï¼š - - + + 按著 Ctrl æ‹–æ›³æ™‚æœƒä»¥æ¯æ¬¡ 15 度改變控製點。 - - + + Shift+點擊 å¯è£½ä½œå®Œæ•´çš„æ©¢åœ“å½¢ (䏿˜¯å¼§æˆ–扇形)。 - + - The snap angle can be changed in Inkscape Preferences (in Behavior > Steps). - + 在 Inkscape çš„å好設定 (行為 > 階層數分é ) 坿›´æ”¹è²¼é½Šè§’度。 - + 其餘兩個控制點用於以中心點調整橢圓形的大å°ã€‚這兩個控制點的快æ·éµæ“作類似矩形的圓角控制點: - - + + 按著 Ctrl 拖曳å¯è£½ä½œåœ“å½¢ (使åŠå¾‘相等)。 - - + + Ctrl+點擊 ä¸éœ€æ‹–動滑鼠å¯ä½¿æ©¢åœ“形變æˆåœ“形。 - + 如åŒçŸ©å½¢å¤§å°èª¿æ•´æŽ§åˆ¶é»žï¼Œé€™äº›æ©¢åœ“形控制點å¯åœ¨è‡ªå·±çš„忍™å…§èª¿æ•´é«˜åº¦å’Œå¯¬åº¦ã€‚這表示旋轉或傾斜éŽçš„æ©¢åœ“形能輕易地沿著原本的軸線繼續伸長或壓縮。試著用控制點調整這些橢圓形的大å°ï¼š - - - - - - - - 星形 + + + + + + + + 星形 - + 星形工具是 Inkscape 中最複雜也是最令人興奮的形狀。如果你想讓你的朋å‹é«”é©— Inkscape 的奧妙,讓他們玩這個工具。它有無窮的樂趣 — æœƒè®“äººå¾¹åº•ä¸Šç™®ï¼ - + 星形工具能建立兩種類似但外觀ä¸åŒçš„物件:星形和多邊形。一個星形有兩個控制點,控制點的ä½ç½®æ±ºå®šæ˜Ÿå½¢å°–角的長度和形狀;而一個多邊形僅有一個控制點,當拖曳這個控制點å¯ç°¡å–®åœ°æ—‹è½‰å’Œèª¿æ•´å¤šé‚Šå½¢çš„大å°ï¼š - + 星形 - + 多邊形 - + - In the Controls bar of the Star tool, the first two buttons control how the shape is -drawn (regular polygon or star). Next, a numeric field sets the number of -vertices of a star or polygon. This parameter is only editable via the -Controls bar. The allowed range is from 3 (obviously) to 1024, but you shouldn't try -large numbers (say, over 200) if your computer is slow. - + 在星形工具的控制列上,å‰å…©å€‹æŒ‰éˆ•æ˜¯æŽ§åˆ¶æ˜Ÿå½¢ç¹ªè£½æ–¹å¼ (普通多邊形或星形)。下一項,數字輸入欄å¯è¨­å®šæ˜Ÿå½¢æˆ–å¤šé‚Šå½¢çš„é ‚é»žæ•¸ç›®ã€‚é€™é …åƒæ•¸åªèƒ½ç¶“由控制列進行編輯。容許範åœå¾ž 3 到 1024,但是如果你的電腦é‹ç®—èƒ½åŠ›è¼ƒå·®ä¸æ‡‰è©²åšè©¦éŽå¤§çš„æ•¸å€¼ (æ¯”å¦‚èªªï¼Œè¶…éŽ 200)。 - + 當繪製一個新的星形或多邊形, - - + + 按著 Ctrl æ‹–æ›³å¯æ¯æ¬¡ä»¥ 15 度增加角度。 - + 當然,星形較為有趣 (雖然實際上多邊形比較有用)。星形的兩個控制點有截然ä¸åŒçš„功能。第一個控制點 (䏀開始使–¼é ‚點上,å³åœ¨æ˜Ÿå½¢çš„凸角上) å¯ä½¿æ˜Ÿå½¢çš„光芒變長或變短,但是當你旋轉它時 (ç›¸å°æ–¼å½¢ç‹€çš„中心點),å¦ä¸€å€‹æŽ§åˆ¶é»žä¹Ÿæœƒè·Ÿè‘—旋轉。這表示你ä¸èƒ½ç”¨é€™å€‹æŽ§åˆ¶é»žä¾†å‚¾æ–œæ˜Ÿå½¢çš„光芒。 - + å¦ä¸€å€‹æŽ§åˆ¶é»ž (䏀開始使–¼å…©å€‹é ‚點之間的凹角上) 能任æ„地沿徑å‘和切線方å‘ç§»å‹•ï¼Œè€Œä¸æœƒå½±éŸ¿é ‚點的控制點。(事實上,這個控制點å¯ç¶“由移動超éŽå¦ä¸€å€‹æŽ§åˆ¶é»žä½ç½®ä½¿å…¶è®Šæˆé ‚點) 它å¯ä»¥å‚¾æ–œæ˜Ÿå½¢çš„尖角來ç²å¾—å„種樣å¼çš„çµæ™¶ã€æ›¼é™€ç¾…ã€é›ªèŠ±å’Œè±ªè±¬ï¼š - - - - - - - - - - + + + + + + + + + + 如果你è¦çš„åªæ˜¯ç°¡å–®ã€è¦å‰‡çš„æ˜Ÿå½¢è€Œä¸æ˜¯é€™ç¨®èŠ±é‚Šå‰µä½œï¼Œä½ å¯ä»¥è®“星形ä¸è¦å‚¾æ–œï¼š - - + + 按著 Ctrl æ‹–æ›³ä½¿æ˜Ÿå½¢å…‰èŠ’å®Œå…¨åœ°ä¿æŒåŠå¾‘æ–¹å‘ (無傾斜)。 - - + + Ctrl+點擊 ä¸éœ€æ‹–å‹•å¯ç§»é™¤æ˜Ÿå½¢çš„傾斜。 - + 補充一點有關畫布上拖曳控制點的æ“作,控制列上有輪輻比率輸入欄å¯å®šç¾©å…©å€‹æŽ§åˆ¶é»žåˆ°ä¸­å¿ƒé»žè·é›¢çš„æ¯”值。 - + Inkscape 的星形工具還有兩個技巧。在幾何上,多邊形是帶有直線邊和尖角的形狀。實際上會有å„種角度的曲線和圓角化 — 而 Inkscape 也能作出å„種效果。ä¸éŽæ˜Ÿå½¢æˆ–多邊形的圓角化效果與圓角矩形有很大的差異。沒有專屬的控制點來åšé€™äº›è®ŠåŒ–,但 - - + + 按著 Shift ä¸¦æ²¿åˆ‡ç·šæ–¹å‘æ‹–曳控制點å¯è®“星形或多邊形圓角化。 - - + + 按著 Shift 並點擊控制點å¯ç§»é™¤åœ“角化。 - + 「切線方å‘ã€è¡¨ç¤ºèˆ‡åŠå¾‘垂直的方å‘。如果你按著 Shift 繞著中心點逆時é˜ã€Œæ—‹è½‰ã€æŽ§åˆ¶é»žï¼Œå¯å¾—åˆ°æ­£åœ“è§’ï¼›é †æ™‚é˜æ—‹è½‰ï¼Œå‰‡å¯å¾—到負圓角。(看下é¢çš„負圓角範例) - + 比較一下圓角正方形 (矩形工具) 和圓角四邊形 (星形工具) 的差別: - + 圓角多邊形 - + 圓角矩形 - + 正如你所見,圓角矩形有直線段的邊和圓形 (一般為橢圓形) 圓角,而圓角多邊形或星形整體上沒有直線段;曲率從最大值 (頂點) 平順地變化為最å°å€¼ (頂點間的中途)。Inkscape 藉由將åŒä¸€ç›´ç·šçš„è²èŒ²åˆ‡ç·šåŠ å…¥åˆ°å½¢ç‹€çš„æ¯å€‹ç¯€é»žè¼•易地產生這種效果 (如果把形狀轉æˆè·¯å¾‘並用節點工具查看路徑å¯è¦‹åˆ°è©³ç´°æƒ…å½¢)。 - + åœ¨æŽ§åˆ¶åˆ—çš„åœ“è§’åŒ–åƒæ•¸èƒ½è®“你調整切線長度和多邊形/æ˜Ÿå½¢é‚Šé•·çš„æ¯”å€¼ã€‚é€™å€‹åƒæ•¸å¯ä»¥æ˜¯è² å€¼ï¼Œé€™æ¨£ä½¿åˆ‡ç·šçš„æ–¹å‘å轉。在 0.2 到 0.4 之間的數值會得到「一般性ã€çš„åœ“è§’é¡žåž‹ï¼›å…¶ä»–æ•¸å€¼å‰‡å‚¾å‘æ–¼ç”¢ç”Ÿå„ªç¾Žã€éŒ¯ç¶œè¤‡é›œä¸”å®Œå…¨ç„¡æ³•é æ¸¬çš„åœ–æ¡ˆã€‚åœ“è§’åŒ–åƒæ•¸å¤§çš„æ˜Ÿå½¢å¯èƒ½æœƒå»¶ä¼¸åˆ°é›¢æŽ§åˆ¶é»žå¾ˆé çš„åœ°æ–¹ã€‚ä¸‹é¢æœ‰ä¸€äº›ç¯„例,æ¯å€‹åœ–éƒ½æœ‰æ¨™ç¤ºæ˜Ÿå½¢çš„åœ“è§’åŒ–åƒæ•¸å€¼ï¼š - - - - - - - - - - - - - - 0.25 - 0.25 - 0.25 - 0.37 - - 0.43 - 3.00 - -3.00 - - 0.41 - 5.43 - 1.85 - 0.21 - -3.00 - - -0.43 - - -8.94 - - 0.39 - + + + + + + + + + + + + + + 0.25 + 0.25 + 0.25 + 0.37 + + 0.43 + 3.00 + -3.00 + + 0.41 + 5.43 + 1.85 + 0.21 + -3.00 + + -0.43 + + -8.94 + + 0.39 + 如果你想讓星形的尖角呈ç¾å°–銳但凹角部份平滑或者åéŽä¾†ï¼Œæœ€ç°¡å–®çš„æ–¹æ³•是藉由åç§» (Ctrl+J) 來锿ˆï¼š - - - - 原始星形 - 連çµå移,內縮 - 連çµå移,外擴 - + + + + 原始星形 + 連çµå移,內縮 + 連çµå移,外擴 + Shift+拖曳星形的控制點是 Inkscape 調整圓角已知的最佳方å¼ä¹‹ä¸€ã€‚但ä»å¯ä»¥è®Šå¾—更好。 - + 為了摹擬更接近真實世界的的形狀,Inkscape 能使星形和多邊形隨機化 (å³éš¨æ©Ÿæ‰­æ›²)。輕微的隨機化會使星形有點ä¸è¦å‰‡ã€æ›´äººæ€§ã€æ›´å¥½çŽ©ï¼›é«˜åº¦éš¨æ©ŸåŒ–å‰‡å¯ç²å¾—å„種瘋狂ä¸å¯é çŸ¥çš„形狀。圓角星形隨機化時ä»ä¿æœ‰å¹³æ»‘åœ“è§’ã€‚ä¸‹é¢æœ‰ç›¸é—œå¿«æ·éµï¼š - - + + ä»¥åˆ‡ç·šæ–¹å‘ Alt+拖曳 控制點來隨機化星形或多邊形。 - - + + Alt+點擊 控制點來移除隨機化。 - + 當你繪製或拖曳控制點編輯隨機化的星形時,星形會出ç¾ã€Œé¡«æŠ–ã€ç¾è±¡æ˜¯å› ç‚ºæ¯å€‹æŽ§åˆ¶é»žéƒ½æœ‰ç¨ä¸€ç„¡äºŒçš„ä½ç½®ç›¸ç•¶æ–¼éƒ½æœ‰è‡ªå·±ç¨ä¸€ç„¡äºŒçš„éš¨æ©ŸåŒ–ã€‚æ‰€ä»¥åœ¨åŒæ¨£çš„隨機化程度下沒有按著 Alt éµç§»å‹•æŽ§åˆ¶é»žæœƒé‡æ–°éš¨æ©ŸåŒ–,當按著 Alt 鵿‹–å‹•æŽ§åˆ¶é»žæ™‚æœƒåœ¨ä¿æŒç›¸åŒéš¨æ©ŸåŒ–效果情形下調整隨機化的程度。下é¢å¹¾å€‹æ˜Ÿå½¢çš„åƒæ•¸å®Œå…¨ä¸€æ¨£ï¼Œä½†æ¯å€‹éƒ½éžå¸¸è¼•å¾®åœ°ç§»å‹•æŽ§åˆ¶é»žä¾†é‡æ–°éš¨æ©ŸåŒ– (隨機化程度始終為 0.1): - - - - - - + + + + + + 而下é¢çš„圖案是上é¢ä¸­é–“çš„æ˜Ÿå½¢ï¼Œå°æ‡‰éš¨æ©ŸåŒ–程度從 -0.2 變為 0.2: - +0.2 - +0.1 - 0 - -0.1 - -0.2 - - - - - - + +0.2 + +0.1 + 0 + -0.1 + -0.2 + + + + + + Alt+拖曳 上é¢ä¸­é–“星形的控制點並觀察它演變為左å³å…©é‚Šçš„æ˜Ÿå½¢åœ–案。 - + ä½ å¯èƒ½å·²ç¶“想到如何é‹ç”¨é€™äº›éš¨æ©ŸåŒ–星形圖案,但我特別喜愛變形蟲外觀的汙點和帶有夢幻色彩的的粗糙表é¢è¡Œæ˜Ÿï¼š - - - - - - - - - - - 螺旋形 + + + + + + + + + + + 螺旋形 - + Inkscape 的螺旋形是多用途的形狀,雖然ä¸å¦‚星形那般地迷人,但有時候éžå¸¸å¥½ç”¨ã€‚èžºæ—‹å½¢åƒæ˜Ÿå½¢ä¸€æ¨£æ˜¯å¾žä¸­å¿ƒé»žç¹ªè£½ï¼›ç·¨è¼¯æ™‚也是一樣。 - - + + Ctrl+拖曳 坿¯æ¬¡ä»¥ 15 度增加角度。 - + 螺旋形在內ã€å¤–çš„ç«¯é»žä¸Šå…·æœ‰å…©å€‹æŽ§åˆ¶é»žã€‚ç•¶æ‹–å‹•é€™å…©å€‹æŽ§åˆ¶é»žæ™‚ï¼Œå¯æ²èµ·æˆ–展開螺旋形。 (å³ã€ŒæŽ¥çºŒã€èžºæ—‹ç·šæ®µï¼Œæ”¹è®Šåœˆæ•¸)。其他快æ·éµï¼š - + 外控制點: - - + + Shift+拖曳 å¯ç¹žè‘—中心點縮放/旋轉 (䏿²èµ·/ä¸å±•é–‹)。 - - + + Alt+拖曳 坿–¼æ²èµ·/展開時鎖定åŠå¾‘。 - + 內控制點: - - + + Alt+垂直拖曳 å¯èšé›†/發散。 - - + + Alt+點擊 å¯é‡è¨­ç™¼æ•£ç¨‹åº¦ã€‚ - - + + Shift+點擊 å¯æŠŠå…§æŽ§åˆ¶é»žç§»å‹•åˆ°ä¸­å¿ƒã€‚ - + 螺旋形的發散程度是指繞圈的éžç·šæ€§ç¨‹åº¦ã€‚ 當等於 1 時,螺旋形為å‡å‹»çš„ï¼›ç•¶å°æ–¼ 1 時 (Alt+拖曳 å¯å‘上),外åœéƒ¨ä»½è¼ƒå¯†é›†ï¼›ç•¶å¤§æ–¼ 1 時 (Alt+拖曳 å¯å‘下),é è¿‘中心的部份較密集: - 0.2 - 0.5 - 6 - 2 - 1 - - - - - - + 0.2 + 0.5 + 6 + 2 + 1 + + + + + + 最大螺旋圈數為 1024。 - + å°±å¦‚åŒæ©¢åœ“形工具ä¸åƒ…å¯ç¹ªè£½æ©¢åœ“也能繪製弧形 (固定曲率的線æ¢)ï¼Œèžºæ—‹å½¢å·¥å…·å°æ–¼è£½ä½œå¹³æ»‘彎曲變化的曲線時éžå¸¸å¥½ç”¨ã€‚和普通的è²èŒ²æ›²ç·šæ¯”較起來,弧形或螺旋常常較為便利,因為你å¯ä»¥è—‰ç”±æ‹–動控制點來沿著曲線變短或變長而ä¸å½±éŸ¿å½¢ç‹€å¤–觀。å¦å¤–,一般繪製出來的螺旋形沒有填色,你å¯åŠ å…¥å¡«è‰²ä¸¦ç§»é™¤é‚Šæ¡†ä¾†ç”¢ç”Ÿæœ‰è¶£çš„æ•ˆæžœã€‚ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + 點狀邊框的螺旋形特別地有趣 — èžåˆå¹³æ»‘的集中形狀和è¦å‰‡çš„å‡å‹»åˆ†ä½ˆå¯è£½ä½œå‡ºå„ªç¾Žçš„æ³¢ç´‹æ¨™èªŒ (點或線段): - - - - - çµè«– + + + + + çµè«– - + Inkscape 的形狀工具是éžå¸¸å¼·å¤§çš„。學習形狀工具的技巧並於空閒時練習使用 — 這會讓你進行設計工作時ç²å¾—益處,因為常常使用形狀會å¯è®“å‘釿’圖創作更快速且更容易修改。如果你有任何改進形狀工具的æ„見,請è¯çµ¡é–‹ç™¼äººå“¡ã€‚ - + diff --git a/share/tutorials/tutorial-tips.zh_TW.svg b/share/tutorials/tutorial-tips.zh_TW.svg index 8bfb1e22b..2fdd24d1c 100644 --- a/share/tutorials/tutorial-tips.zh_TW.svg +++ b/share/tutorials/tutorial-tips.zh_TW.svg @@ -36,311 +36,290 @@ - 使用 Ctrl+↓ å‘下æ²å‹•é é¢ + 使用 Ctrl+↓ å‘下æ²å‹•é é¢ - + ::技巧和秘訣 - - + + 這篇教學將說明å„種技巧和秘訣,使用者會學到é€éŽä½¿ç”¨ Inkscape 和一些「隱è—ã€åŠŸèƒ½ä¾†å¹«åŠ©ä½ å¿«é€Ÿå®Œæˆä»»å‹™ã€‚ - - 鋪排仿製的放射狀分佈 + + 放射狀分佈鋪排仿製 - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and -patterns. But what if you need radial placement, where objects -share a common center of rotation? It's possible too! - + 使用者很容易就懂得如何使用一般格線和圖樣的建立鋪排仿製å°è©±çª—ã€‚ä½†æ˜¯å¦‚æžœä½ éœ€è¦æ”¾å°„狀分佈,å¯ä»¥è®“物件群共用åŒä¸€å€‹æ—‹è½‰ä¸­å¿ƒå—Žï¼Ÿé€™ä¹Ÿæ˜¯èƒ½å¤ é”æˆçš„ï¼ - - + + - 如果你的放射狀圖案åªéœ€è¦ 3ã€4ã€6ã€8 或 12 個元件,那麼你å¯ä»¥è©¦è©¦ P3ã€P31Mã€P3M1ã€P4ã€P4Mã€P6 或 P6M å°ç¨±ã€‚這些å°è£½ä½œé›ªèŠ±æˆ–é¡žä¼¼çš„æ±è¥¿å¾ˆæœ‰ç”¨ã€‚ä¸éŽæœ‰ä¸€å€‹æ›´æ™®é的方法,如下。 + 如果你的放射狀圖案åªéœ€è¦ 3ã€4ã€6ã€8 或 12 個元件,那麼你å¯ä»¥è©¦è©¦ P3ã€P31Mã€P3M1ã€P4ã€P4Mã€P6 或 P6M å°ç¨±ã€‚é€™äº›å°æ–¼è£½ä½œé›ªèŠ±æˆ–é¡žä¼¼çš„æ±è¥¿å¾ˆæœ‰ç”¨ã€‚ä¸éŽæœ‰ä¸€å€‹æ›´æ™®é的方法,如下。 - - + + - 鏿“‡ P1 å°ç¨± (簡單平移),然後切æ›åˆ°ä½ç§»åˆ†é ä¸¦è¨­å®šæ¯è¡Œ/ä½ç§» Y å’Œæ¯åˆ—/ä½ç§» X 皆為 -100% 以補償剛剛的平移。這時全部的仿製物件會完全é‡ç–Šåœ¨åŽŸå§‹ç‰©ä»¶çš„ä¸Šé¢ã€‚繼續切æ›åˆ°æ—‹è½‰åˆ†é ä¸¦è¨­å®šæ¯åˆ—旋轉一些角度,然後以單行多列建立圖案。舉例來說,下é¢çš„圖案是用 30 列且æ¯ä¸€åˆ—旋轉 6 度製作出來的: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 鏿“‡ P1 å°ç¨± (簡單平移),然後切æ›åˆ°ä½ç§»åˆ†é ä¸¦è¨­å®šæ¯è¡Œ/ä½ç§» Y å’Œæ¯åˆ—/ä½ç§» X 皆為 -100% 以補償剛剛的平移。這時全部的仿製物件會完全é‡ç–Šåœ¨åŽŸå§‹ç‰©ä»¶çš„ä¸Šé¢ã€‚繼續切æ›åˆ°æ—‹è½‰åˆ†é ä¸¦è¨­å®šæ¯åˆ—旋轉一些角度,然後以單行多列建立圖案。舉例來說,下é¢çš„圖案是用 30 列且æ¯ä¸€åˆ—旋轉 6 度製作出來的: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + è¦ç”¨é€™å€‹æ–¹æ³•製作一個時é˜åˆ»åº¦ç›¤ï¼Œåªéœ€è¦ç”¨ä¸€å€‹ç™½è‰²åœ“形切掉或覆蓋中央的部份 (è¦åœ¨ä»¿è£½ç‰©ä»¶ä¸Šé€²è¡Œå¸ƒæž—é‹ç®—å‰å…ˆå°‡ç‰©ä»¶å–消連çµ)。 - - + + è—‰ç”±åŒæ™‚使用行與列å¯è£½ä½œæ›´å¤šæœ‰è¶£çš„æ•ˆæžœã€‚下é¢çš„圖案是用 10 列和 8 行,且æ¯è¡Œæ—‹è½‰ 2 度而æ¯åˆ—旋轉 18 度。這裡æ¯å€‹ç›´ç·šç¾¤çµ„代表一「列ã€ï¼Œæ‰€ä»¥ç¾¤çµ„å½¼æ­¤ä¹‹é–“éƒ½ç›¸è· 18 度;æ¯åˆ—裡é¢çš„å–®ç¨ç›´ç·šå‰‡ç›¸éš” 2 度: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: - + 在上é¢çš„例å­è£¡ï¼Œç›´ç·šç¹žè‘—自己的中心旋轉。但如果你想è¦çš„æ—‹è½‰ä¸­å¿ƒåœ¨å½¢ç‹€çš„外颿€Žéº¼è¾¦ï¼Ÿåªè¦ä½¿ç”¨é¸å–工具在物件上點擊兩下進入旋轉模å¼ã€‚將物件的旋轉中心 (外觀為å°å‰å‰å½¢ç‹€çš„æŽ§åˆ¶é»ž) 到你è¦é‹ªæŽ’的中心ä½ç½®ã€‚å°ç‰©ä»¶ä½¿ç”¨å»ºç«‹é‹ªæŽ’ä»¿è£½ã€‚é€™å°±æ˜¯åˆ©ç”¨éš¨æ©Ÿæ€§çš„ç¸®æ”¾ã€æ—‹è½‰å’Œé€æ˜Žä¾†è£½ä½œã€Œçˆ†ç‚¸ã€æˆ–ã€Œæ†æ˜Ÿçˆ†è£‚ã€æ•ˆæžœçš„æ–¹æ³•。 - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 如何將影åƒåˆ‡ç‰‡ (多個矩形輸出範åœ)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 如何將影åƒåˆ‡ç‰‡ (多個矩形輸出範åœ)? - - + + - Create a new layer, in that layer create invisible rectangles covering parts of your -image. Make sure your document uses the px unit (default), turn on grid and snap the -rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File -> Export PNG Image (Shift+Ctrl+E)). Then the rects will remember -their export filenames. After that, it's very easy to re-export some of the rects: -switch to the export layer, use Tab to select the one you need (or use Find by id), and -click Export in the dialog. Or, you can write a shell script or batch file to export -all of your areas, with a command like: - + 建立一個新圖層,在這圖層裡建立幾個隱形矩形,讓這些矩形分æˆå¹¾å€‹éƒ¨ä»½è¦†è“‹ä½ çš„å½±åƒã€‚確èªä½ çš„æ–‡ä»¶æ˜¯ä½¿ç”¨ px å–®ä½ (é è¨­),開啟格線顯示並把矩形都貼齊格線,使æ¯å€‹çŸ©å½¢é•·åº¦éƒ½æ˜¯æ•´æ•¸ px å–®ä½ã€‚æ¯å€‹çŸ©å½¢éƒ½çµ¦äºˆä¸€å€‹æœ‰æ„義的識別å稱 (ID),並且將æ¯å€‹çŸ©å½¢åŒ¯å‡ºæˆè‡ªå·±å€‹åˆ¥çš„æª”案 (檔案 > 匯出 PNG 圖片 (Shift+Ctrl+E))。而這些矩形會記ä½åŒ¯å‡ºçš„æª”å。在那之後,就å¯ä»¥å¾ˆå®¹æ˜“çš„å†æ¬¡åŒ¯å‡ºä¸€äº›æª”案:切æ›åˆ°åŒ¯å‡ºåœ–層,使用 Tab éµä¾†é¸æ“‡ä½ è¦åŒ¯å‡ºçš„å€åŸŸ (或ä¾ç…§ ID 來尋找),然後點擊å°è©±çª—裡的匯出按鈕。或者,你å¯ä»¥å¯«ä¸€å€‹ shell 腳本或批次命令檔來匯出所有å€åŸŸï¼Œä¾‹å¦‚下é¢çš„æŒ‡ä»¤ï¼š - - + + inkscape -i å€åŸŸ-id -t 檔å.svg - - + + - for each exported area. The -t switch tells it to use the remembered filename hint, -otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - + é‡å°æ¯å€‹è¦åŒ¯å‡ºçš„å€åŸŸã€‚åƒæ•¸ -t 會告訴程å¼ä½¿ç”¨å·²è¨˜ä½çš„æª”åæç¤ºï¼Œä¸ç„¶ä½ å¯ä»¥ç”¨åƒæ•¸ -e æä¾›åŒ¯å‡ºçš„æª”å。或者,你å¯ä»¥ä½¿ç”¨ 擴充功能 > ç¶²é  > 切片器 或 擴充功能 > 匯出 > 切片工具 锿ˆé¡žä¼¼çš„æ•ˆæžœã€‚ - - éžç·šæ€§æ¼¸å±¤ + + éžç·šæ€§æ¼¸å±¤ - - + + SVG 版本 1.1 䏿”¯æ´éžç·šæ€§æ¼¸å±¤ (å³é¡è‰²ä¹‹é–“有éžç·šæ€§è½‰è®Š)。ä¸éŽï¼Œä½ å¯ä»¥ç”¨å¤šåœæ­¢é»žæ¼¸å±¤æ¨¡æ“¬é¡žä¼¼çš„æ•ˆæžœã€‚ - - + + - 星形帶有簡單的兩點漸層。開啟漸層編輯器 (例如用漸層工具在任何漸層控制點上點擊兩下)。在中間ä½ç½®åŠ å…¥æ–°çš„æ¼¸å±¤åœæ­¢é»žï¼›ä¸¦ç¨å¾®æ‹–å‹•å®ƒã€‚ç„¶å¾Œåœ¨ä¸­é–“åœæ­¢é»žçš„å‰å¾ŒåŠ å…¥æ›´å¤šçš„åœæ­¢é»žä¸¦ä¸”ä¹Ÿæ‹–å‹•é€™äº›åœæ­¢é»žï¼Œä»¥ä¾¿è®“漸層呈ç¾å¹³æ»‘ç‹€æ…‹ã€‚ä½ åŠ å…¥çš„é€™äº›åœæ­¢é»žæœƒè®“生æˆçš„æ¼¸å±¤æ›´å¹³æ»‘ã€‚é€™è£¡æœ‰ä¸€é–‹å§‹å¸¶æœ‰å…©å€‹åœæ­¢é»žçš„黑白漸層: + 星形帶有簡單的兩點漸層 (ä½ å¯ä»¥åœ¨å¡«è‰²å’Œé‚Šæ¡†å°è©±çª—或使用漸層工具指定é¡è‰²)。ç¾åœ¨ä½¿ç”¨æ¼¸å±¤å·¥å…·åœ¨ä¸­é–“ä½ç½®åŠ å…¥æ–°çš„æ¼¸å±¤åœæ­¢é»žï¼›å¯ä»¥åœ¨æ¼¸å±¤ç·šä¸Šé»žæ“Šå…©ä¸‹ï¼Œæˆ–é¸å–å°æ–¹å¡Šå½¢ç‹€çš„æ¼¸å±¤åœæ­¢é»žä¸¦é»žæ“Šåœ¨ä¸Šé¢æ¼¸å±¤å·¥å…·åˆ—çš„æ’å…¥æ–°åœæ­¢é»žæŒ‰éˆ•。ç¨å¾®æ‹–å‹•æ–°åœæ­¢é»žã€‚ç„¶å¾Œåœ¨ä¸­é–“åœæ­¢é»žçš„å‰å¾ŒåŠ å…¥æ›´å¤šçš„åœæ­¢é»žä¸¦ä¸”ä¹Ÿæ‹–å‹•é€™äº›åœæ­¢é»žï¼Œä»¥ä¾¿è®“漸層呈ç¾å¹³æ»‘ç‹€æ…‹ã€‚ä½ åŠ å…¥æ„ˆå¤šåœæ­¢é»žæœƒè®“æ¼¸å±¤çœ‹èµ·ä¾†æ›´å¹³æ»‘ã€‚ä¸€é–‹å§‹å¸¶æœ‰å…©å€‹åœæ­¢é»žçš„黑白漸層: @@ -348,11 +327,11 @@ use the Extensions > Web > Slicer - - - + + + - + 而這邊有å„種樣å¼çš„「éžç·šæ€§ã€å¤šåœæ­¢é»žæ¼¸å±¤ (用漸層工具查看這些圖形): @@ -437,21 +416,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - 離心放射狀漸層 + + + + + + + + + + 離心放射狀漸層 - - + + - + 放射狀漸層ä¸ä¸€å®šè¦å°ç¨±ã€‚用漸層工具,按著 Shift æ‹–æ›³æ©¢åœ“å½¢æ¼¸å±¤ä¸­å¤®çš„æŽ§åˆ¶é»žã€‚é€™æœƒä½¿æ¼¸å±¤ä¸­å‘ˆç¾ x 形狀之作用中的控制點從中心往外移動。當ä¸éœ€è¦æ™‚,你å¯ä»¥æ‹–曳控制點往中心移回原本的ä½ç½®ã€‚ @@ -465,246 +444,216 @@ use the Extensions > Web > Slicer - - - - å°é½Šé é¢ä¸­å¿ƒ + + + + å°é½Šé é¢ä¸­å¿ƒ - - + + - + - To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the -Align and Distribute dialog (Shift+Ctrl+A). - + 想è¦å°é½Šé é¢ä¸­å¿ƒæˆ–邊緣,å¯é¸å–物件或群組然後在å°é½Šå’Œåˆ†ä½ˆå°è©±çª— (Ctrl+Shift+A) 裡從 ç›¸å°æ–¼: æ¸…å–®ä¸­é¸æ“‡ é é¢ã€‚ - - æ¸…ç†æ–‡ä»¶ + + æ¸…ç†æ–‡ä»¶ - - + + - + - Many of the no-longer-used gradients, patterns, and markers (more precisely, those which -you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers -which are not used by anything in the document, making the file smaller. - + 許多沒用到的漸層ã€åœ–樣和標記 (更準確地說是你手動編輯的那些) ä¿å­˜åœ¨å°æ‡‰çš„åƒæ•¸é¢æ¿ä¸­ä¸¦å¯é‡è¤‡ä½¿ç”¨æ–¼æ–°ç‰©ä»¶ä¸Šã€‚但是如果你想è¦å°‡ä½ çš„æ–‡ä»¶æœ€ä½³åŒ–,請使用檔案é¸å–®è£¡çš„æ¸…ç†æ–‡ä»¶ 指令。它會移除文件中沒有用到的漸層ã€åœ–æ¨£æˆ–æ¨™è¨˜ï¼Œä½¿æª”æ¡ˆé«”ç©æ›´å°ã€‚ - - éš±è—特性和 XML 編輯器 + + éš±è—特性和 XML 編輯器 - - + + - + XML 編輯器 (Shift+Ctrl+X) 讓你能夠在ä¸ä½¿ç”¨å…§éƒ¨çš„編輯器情形下改變文件絕大部分的外觀。而且 Inkscape 支æ´çš„ SVG 特性通常比圖形介é¢ä¸Šå¯ä½¿ç”¨çš„還多。舉例來說,我們ç¾åœ¨æ”¯æ´é¡¯ç¤ºé®ç½©å’Œè£å‰ªè·¯å¾‘,雖然沒有圖形介é¢å¯å»ºç«‹æˆ–修改。XML 編輯器是使用這些功能的唯一方法 (如果你了解 SVG 的話)。 - - 改變尺標的測é‡å–®ä½ + + 改變尺標的測é‡å–®ä½ - - - - - - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in -displaying coordinates at the lower-left corner and preselected in all units menus. (You -can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. - - - - 圖章 + + + + + + 在é è¨­çš„範本裡,尺標使用的測é‡å–®ä½ç‚º mmã€‚é€™ä¹Ÿæ˜¯å·¦ä¸‹è§’çš„é¡¯ç¤ºåæ¨™ä¸Šä½¿ç”¨çš„å–®ä½å’Œæ‰€æœ‰é¸å–®è£¡é å…ˆé¸æ“‡çš„å–®ä½ã€‚(ä½ å¯ä»¥æŠŠæ»‘鼠游標åœç•™åœ¨å°ºæ¨™ä¸Šæ–¹æœƒçœ‹è¦‹å–®ä½ä½¿ç”¨çš„相關工具æç¤ºã€‚) è‹¥è¦æ”¹è®Šå–®ä½ï¼Œé–‹å•Ÿ 文件屬性 (Shift+Ctrl+D) 並改變在 é é¢ 分é ä¸Šçš„é è¨­å–®ä½ã€‚ + + + 圖章 - - + + - + 想è¦å¿«é€Ÿå»ºç«‹è¨±å¤šç‰©ä»¶çš„複本,就使用圖章功能。先拖動物件(æˆ–è€…ç¸®æ”¾ã€æ—‹è½‰ç‰©ä»¶)ï¼Œç„¶å¾Œç•¶æŒ‰ä½æ»‘鼠按鈕時按空白éµã€‚這會留下目å‰ç‰©ä»¶å½¢ç‹€çš„「圖案ã€ã€‚你坿 ¹æ“šéœ€æ±‚é‡è¤‡é€™å€‹å‹•作好幾次。 - - 筆工具的技巧 + + 筆工具的技巧 - - + + - + 使用筆 (è²èŒ²æ›²ç·š) 工具,你有下列幾種方å¼ä¾†çµæŸç›®å‰çš„ç·šæ¢ï¼š - - - + + + - + 按 Enter éµ - - - + + + - + é»žæ“Šå…©ä¸‹æ»‘é¼ å·¦éµ - - - + + + - + - Select the Pen tool from the toolbar - + 點擊滑鼠å³éµ - - - + + + - + 鏿“‡å…¶ä»–工具 - - + + - + - 注æ„當路徑處於未完æˆç‹€æ…‹ (å³è·¯å¾‘呈ç¾ç¶ è‰²ï¼Œç›®å‰çš„線段呈ç¾ç´…色),這個路徑尚未以物件形態存在文件中。因此,å¯ç”¨ Esc (å–æ¶ˆæ•´å€‹è·¯å¾‘) 或 Backspace (移除未完æˆè·¯å¾‘的最後線段) 來喿¶ˆè·¯å¾‘,而ä¸ç”¨å¾©åŽŸã€‚ + 注æ„當路徑處於未完æˆç‹€æ…‹ (å³è·¯å¾‘呈ç¾ç¶ è‰²ï¼Œç›®å‰çš„線段呈ç¾ç´…色),這個路徑尚未以物件形態存在文件中。因此,å¯ç”¨ Esc (å–æ¶ˆæ•´å€‹è·¯å¾‘) 或 Backspace (移除未完æˆè·¯å¾‘的最後線段) 來喿¶ˆè·¯å¾‘,而ä¸ç”¨å¾©åŽŸã€‚ - - + + - + è¦åŠ å…¥æ–°çš„å­è·¯å¾‘åˆ°ç¾æœ‰çš„路徑,é¸å–路徑並按著 Shift 從任æ„一個點開始繪製。但是如果你åªä¸éŽæƒ³æŽ¥çºŒç¾æœ‰çš„路徑,那麼ä¸éœ€è¦æŒ‰è‘— Shift éµï¼›åƒ…需從é¸å–è·¯å¾‘çš„çµæŸéŒ¨é»žé–‹å§‹ç¹ªè£½ã€‚ - - 輸入 Unicode å­—å…ƒ + + 輸入 Unicode å­—å…ƒ - - + + - + 當使用文字工具時,按 Ctrl+U å¯åœ¨ä¸€èˆ¬æ¨¡å¼èˆ‡ Unicode 模å¼ä¹‹é–“作切æ›ã€‚在 Unicode 模å¼ä¸­ï¼Œä½ è¼¸å…¥çš„字會以 4 個å六進使•¸å­—為一組變æˆä¸€å€‹å–®ä¸€çš„ Unicode 字元,因而å…許你輸入å„種符號 (åªè¦ä½ æ›‰å¾—它們的 Unicode å€åˆ†ç¢¼ä¸”字型能支æ´)。按 Enter å¯å®Œæˆ Unicode 輸入。例如,Ctrl+U 2 0 1 4 Enter 坿’入一個 em-dash (—)。按 Esc å¯ä¸æ’入任何字元便離開 Unicode 模å¼ã€‚ - - + + - + - You can also use the Text > Glyphs dialog to search for and insert -glyphs into your document. - + 你也å¯ä»¥ä½¿ç”¨ 文字 > å­—å½¢ å°è©±çª—來æœå°‹å’Œæ’入字形到你的檔案中。 - - 使用格線繪製圖示 + + 使用格線繪製圖示 - - + + - + - å‡è¨­ä½ æƒ³è£½ä½œä¸€å€‹ 24x24 åƒç´ çš„圖示。建立一幅寬高為 24x24 px 的畫布 (使用文件å好設定) 並設定格線為 0.5 px (48x48 的格線數)。這時,如果你將填充物件å°é½Šå¶æ•¸æ ¼ç·šï¼Œè€Œé‚Šæ¡†ç‰©ä»¶å°é½Šåˆ°å¥‡æ•¸æ ¼ç·šåŠ ä¸Š px å–®ä½çš„邊框寬度就變æˆå¶æ•¸ï¼Œä¸¦æ–¼é è¨­ 90dpi (也就是 1 px è®Šæˆ 1 點陣圖åƒç´ ) 匯出,你會得到一個清晰的點陣圖åƒï¼Œè€Œæ²’有ä¸å¿…è¦çš„平滑效果。 + å‡è¨­ä½ æƒ³è£½ä½œä¸€å€‹ 24x24 åƒç´ çš„圖示。建立一幅寬高為 24x24 px 的畫布 (使用文件å好設定) 並設定格線為 0.5 px (48x48 的格線數)。這時,如果你將填充物件å°é½Šå¶æ•¸æ ¼ç·šï¼Œè€Œé‚Šæ¡†ç‰©ä»¶å°é½Šåˆ°å¥‡æ•¸æ ¼ç·šåŠ ä¸Š px å–®ä½çš„邊框寬度就變æˆå¶æ•¸ï¼Œä¸¦æ–¼é è¨­ 90dpi (也就是 1 px è®Šæˆ 1 點陣圖åƒç´ ) 匯出,你會得到一個清晰的點陣圖åƒï¼Œè€Œæ²’有ä¸å¿…è¦çš„平滑效果。 - - 物件旋轉 + + 物件旋轉 - - + + - + - 當使用é¸å–工具,在物件上點擊會看到縮放箭頭,然後在物件上å†é»žæ“Šä¸€æ¬¡æœƒè¦‹åˆ°æ—‹è½‰ã€ä½ç§»çš„箭頭。如果點擊和拖曳四個角上的箭頭,物件會繞著中心點旋轉 (顯示為å字標誌)。如果你在åšé€™å€‹å‹•ä½œæ™‚æŒ‰ä½ Shift,那麼會繞著å°è§’作旋轉。你也能將旋轉中心拖到任何地方。 + 當使用é¸å–工具,在物件上點擊會看到縮放箭頭,然後在物件上å†é»žæ“Šä¸€æ¬¡æœƒè¦‹åˆ°æ—‹è½‰ã€ä½ç§»çš„箭頭。如果點擊和拖曳四個角上的箭頭,物件會繞著中心點旋轉 (顯示為å字標誌)。如果你在åšé€™å€‹å‹•ä½œæ™‚æŒ‰ä½ Shift éµï¼Œé‚£éº¼æœƒç¹žè‘—å°è§’作旋轉。你也能將旋轉中心拖到任何地方。 - - + + - + 或者,你å¯ä»¥æŒ‰éµç›¤ä¸Šçš„ [ å’Œ ] (15 度) 或 Ctrl+[ å’Œ Ctrl+] (90 度)作旋轉。按著 Alt 並按 [] éµå¯ä½œç·©æ…¢çš„åƒç´ å¤§å°æ—‹è½‰ã€‚ - - 下è½å¼é™°å½± + + 下è½å¼é™°å½± - - + + - + - To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. - + 使用 æ¿¾é¡ > 陰影和光暈 > 下è½å¼é™°å½±... 功能能夠快速建立物件的下è½å¼é™°å½±ã€‚ - - + + - + - You can also easily create blurred drop shadows for objects manually with blur in the -Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press -PgDown to put it beneath original object, place it a little to the right -and lower than original object. Now open Fill And Stroke dialog and change Blur value to, -say, 5.0. That's it! - + 你也å¯ä»¥è—‰ç”±å¡«å……和邊框å°è©±çª—中的模糊很簡單地手動為物件加上模糊的下è½å¼é™°å½±ã€‚å…ˆé¸å–物件,用 Ctrl+D å†è£½ï¼ŒæŒ‰ PgDown 把å†è£½ç‰©ä»¶æ”¾åˆ°åŽŸå§‹ç‰©ä»¶çš„ä¸‹æ–¹ï¼Œå°‡å†è£½ç‰©ä»¶æ”¾ç½®åˆ°æ¯”原始物件下é¢ä¸€é»žåŠå³é‚Šä¸€é»žçš„ä½ç½®ã€‚ç¾åœ¨é–‹å•Ÿã€Œå¡«å……和邊框ã€å°è©±çª—並將模糊值改為 5.0ã€‚å°±æ˜¯é€™æ¨£ï¼ - - 將文字放置在路徑上 + + 將文字放置在路徑上 - - + + - + - è¦å°‡æ–‡å­—æ²¿è‘—æ›²ç·šæ”¾ç½®ï¼ŒåŒæ™‚é¸å–文字和路徑並從文字é¸å–®ä¸­é¸æ“‡ç½®æ–¼è·¯å¾‘ã€‚é€™ä¸²æ–‡å­—æœƒå¾žè·¯å¾‘èµ·é»žé–‹å§‹ã€‚ä¸€èˆ¬ä¾†èªªæœ€å¥½çš„æ–¹å¼æ˜¯å»ºç«‹ä¸€å€‹ä½ æƒ³è¦å¡«å…¥çš„æ˜Žç¢ºè·¯å¾‘ï¼Œè€Œä¸æ˜¯æŠŠæ–‡å­—填入到其他繪圖元件 — é€™æœƒè®“ä½ æ›´å¥½æŽ§åˆ¶ä¸”ä¸æœƒå½±éŸ¿åˆ°ä½ çš„繪畫。 + è¦å°‡æ–‡å­—æ²¿è‘—æ›²ç·šæ”¾ç½®ï¼ŒåŒæ™‚é¸å–文字和路徑並從文字é¸å–®ä¸­é¸æ“‡ç½®æ–¼è·¯å¾‘ã€‚é€™ä¸²æ–‡å­—æœƒå¾žè·¯å¾‘èµ·é»žé–‹å§‹ã€‚ä¸€èˆ¬ä¾†èªªæœ€å¥½çš„æ–¹å¼æ˜¯å»ºç«‹ä¸€å€‹ä½ æƒ³è¦å¡«å…¥çš„æ˜Žç¢ºè·¯å¾‘ï¼Œè€Œä¸æ˜¯æŠŠæ–‡å­—填入到其他繪圖元件 — é€™æœƒè®“ä½ æ›´å¥½æŽ§åˆ¶ä¸”ä¸æœƒå½±éŸ¿åˆ°ä½ çš„繪畫。 - - é¸å–原始物件 + + é¸å–原始物件 - - + + - + 當你有置於路徑上的文字ã€é€£çµå移物件或仿製物件,這些物件的來æºç‰©ä»¶/路徑å¯èƒ½å¾ˆé›£é¸å–,因為å¯èƒ½æ­£å¥½åœ¨åº•下或設定為隱形和/或鎖定。神奇的 Shift+D 會幫助你;先é¸å–文字ã€é€£çµå移物件或仿製物件,然後按 Shift+D å¯å°‡é¸å–ç§»å‹•åˆ°å°æ‡‰çš„路徑ã€åç§»ä¾†æºæˆ–仿製原始物件。 - - æ¢å¾©è¶…出螢幕的視窗 + + æ¢å¾©è¶…出螢幕的視窗 - - + + - + - When moving documents between systems with different resolutions or number of displays, -you may find Inkscape has saved a window position that places the window out of reach on -your screen. Simply maximise the window (which will bring it back into view, use the -task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). - + 當在ä¸åŒçš„è§£æžåº¦æˆ–一些顯示模å¼çš„ç³»çµ±ä¹‹é–“ç§»å‹•æ–‡ä»¶æ™‚ï¼Œä½ æœƒç™¼ç¾ Inkscape 已經儲存了視窗ä½ç½®ï¼Œç¨‹å¼æœƒæŠŠè¦–窗放置到超出螢幕的地方。直接將視窗最大化 (使用任務欄會把視窗帶回檢視å€)ï¼Œå„²å­˜ä¸¦é‡æ–°è¼‰å…¥ã€‚ä½ å¯ä»¥è—‰ç”±å–æ¶ˆå‹¾é¸æ•´é«”é¸é …變æˆå„²å­˜è¦–窗空間 (Inkscape åå¥½è¨­å®šï¼Œä»‹é¢ > 視窗部分) 來é¿å…這種å•題。 - - 逿˜Žã€æ¼¸å±¤å’Œ PostScript 匯出 + + 逿˜Žã€æ¼¸å±¤å’Œ PostScript 匯出 - - + + - + - PostScript 或 EPS æ ¼å¼ä¸æ”¯æ´é€æ˜Žï¼Œå› æ­¤å¦‚果你想è¦åŒ¯å‡ºæˆ PS/EPS å°±ä¸è¦ä½¿ç”¨é€æ˜Žã€‚至於平é¢é€æ˜Žæœƒè¦†è“‹å¹³é¢è‰²å½©çš„å•題,很簡單就能解決:é¸å–逿˜Žç‰©ä»¶çš„其中一個;切æ›åˆ°æ»´ç®¡å·¥å…· (F7)ï¼›ç¢ºèªæ»´ç®¡å·¥å…·æ˜¯ä½¿ç”¨ã€Œé»žå–å¯è¦‹é¡è‰²ä¸å«é€æ˜Žåº¦ã€æ¨¡å¼ï¼›ç„¶å¾Œåœ¨åŒç‰©ä»¶ä¸Šé»žæ“Šã€‚這會點å–å¯è¦‹é¡è‰²ä¸¦æŒ‡æ´¾å›žåˆ°ç‰©ä»¶ï¼Œä½†é€™æ¬¡ä¸åŒ…å«é€æ˜Žåº¦ã€‚å°å…¨éƒ¨å…¶ä»–逿˜Žç‰©ä»¶é‡è¤‡ä¸Šè¿°çš„æ­¥é©Ÿã€‚å¦‚æžœä½ çš„é€æ˜Žç‰©ä»¶è“‹ä½ä¸€äº›å¹³é¢é¡è‰²ç¯„åœï¼Œä½ éœ€è¦ç›¸å°åœ°å°‡å®ƒæ‰“æ•£æˆæ•¸å€‹å…ƒä»¶ä¸¦å°æ¯å€‹å…ƒä»¶å¥—用上述的步驟。 + PostScript 或 EPS æ ¼å¼ä¸æ”¯æ´é€æ˜Žï¼Œå› æ­¤å¦‚果你想è¦åŒ¯å‡ºæˆ PS/EPS å°±ä¸è¦ä½¿ç”¨é€æ˜Žã€‚至於平é¢é€æ˜Žæœƒè¦†è“‹å¹³é¢è‰²å½©çš„å•題,很簡單就能解決:é¸å–逿˜Žç‰©ä»¶çš„其中一個;切æ›åˆ°æ»´ç®¡å·¥å…· (F7)ï¼›ç¢ºèªæ»´ç®¡å·¥å…·åˆ—上ä¸é€æ˜Žåº¦ï¼šæ‹¾å–按鈕為åœç”¨ç‹€æ…‹ï¼›ç„¶å¾Œåœ¨åŒç‰©ä»¶ä¸Šé»žæ“Šã€‚這會拾å–å¯è¦‹é¡è‰²ä¸¦æŒ‡æ´¾å›žåˆ°ç‰©ä»¶ã€‚å°å…¨éƒ¨å…¶ä»–逿˜Žç‰©ä»¶é‡è¤‡ä¸Šè¿°çš„æ­¥é©Ÿã€‚å¦‚æžœä½ çš„é€æ˜Žç‰©ä»¶è“‹ä½ä¸€äº›å¹³é¢é¡è‰²ç¯„åœï¼Œä½ éœ€è¦ç›¸å°åœ°å°‡å®ƒæ‰“æ•£æˆæ•¸å€‹å…ƒä»¶ä¸¦å°æ¯å€‹å…ƒä»¶å¥—ç”¨ä¸Šè¿°çš„æ­¥é©Ÿã€‚æ³¨æ„æ»´ç®¡å·¥å…·ä¸åªæœƒæ”¹è®Šç‰©ä»¶çš„ä¸é€æ˜Žåº¦ï¼Œä¹Ÿæœƒè®Šæ›´ç‰©ä»¶çš„å¡«è‰²æˆ–é‚Šæ¡†é€æ˜Žå€¼ï¼Œå› æ­¤å‹•作å‰å…ˆç¢ºèªæ¯å€‹ç‰©ä»¶ä¸é€æ˜Žå€¼è¨­å®šç‚º 100%。 - + @@ -734,8 +683,8 @@ option to save window geometry (Inkscape Preference - - 使用 Ctrl+↑ å‘上æ²å‹•é é¢ + + 使用 Ctrl+↑ å‘上æ²å‹•é é¢ diff --git a/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg b/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg index 655f49986..45cabac07 100644 --- a/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg +++ b/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg @@ -40,52 +40,52 @@ - + ::æç¹ªåƒç´ åœ–案 - + 在功能強大的å‘é‡ç¹ªåœ–軟體出ç¾ä»¥å‰... - + 甚至在 640x480 電腦出ç¾ä»¥å‰... - + 用低解æžåº¦é¡¯ç¤ºå™¨çŽ©éŠæˆ²å…¶ç•«é¢é€šå¸¸çœ‹èµ·ä¾†éƒ½åƒæ˜¯ç”±è¨±å¤šç´°å°çš„åƒç´ çµ„æˆã€‚ - + 我們ç¾åœ¨å°‡é€™é¡žçš„圖形稱為「åƒç´ åœ–案ã€ã€‚ - + Inkscape 是藉由 libdepixelize 將這些「特殊ã€åƒç´ åœ–ç‰‡è½‰æ›æˆå‘é‡åœ–。你也å¯ä»¥è©¦è©¦å…¶ä»–類型的圖片,但是記ä½ï¼šè‹¥ç”¢ç”Ÿçš„å‘é‡åœ–效果ä¸ä½³ï¼Œè«‹æ”¹ç”¨å¦ä¸€ç¨® Inkscape 點陣圖æç¹ªå™¨ - potrace。 - + 讓我們用簡單的圖片來示範這款æç¹ªå¼•擎的能力。下é¢å·¦å´æœ‰ä¸€å¼µç¯„例點陣圖 (從自由開放的 Pixel Cup é …ç›®å–得的圖片),而å³å´æ˜¯è½‰æ›æˆå‘é‡åœ–å½¢çš„æˆæžœã€‚ - + @@ -327,14 +327,14 @@ - + libdepixelize 使用 Kopf-Lischinski 演算法來將圖片轉變æˆå‘é‡åœ–形。這種演算法混åˆä½¿ç”¨å¤šç¨®é›»è…¦ç§‘學技術想法和數學概念,使該算法用在åƒç´ åœ–案上能夠產生很棒的效果。值得注æ„çš„æ˜¯æ­¤æ¼”ç®—æ³•æœƒå®Œå…¨åœ°å¿½ç•¥é€æ˜Žè‰²ç‰ˆã€‚libdepixelize ç›®å‰æ²’有擴充功能æä¾›å°ˆé–€è™•ç†é€™é¡žçš„åœ–ç‰‡ï¼Œä½†æ˜¯æ‰€æœ‰å«æœ‰é€æ˜Žè‰²ç‰ˆçš„åƒç´ åœ–案ä»å¯ä»¥åƒ Kopf-Lischinski èƒ½è¾¨è­˜çš„åœ–ç‰‡ä¸€æ¨£å¾—åˆ°ç›¸è¿‘çš„çµæžœã€‚ - + @@ -698,52 +698,52 @@ - + 上é¢çš„åœ–ç‰‡æœ‰é€æ˜Žè‰²ç‰ˆï¼Œä½†çµæžœæ˜¯æ­£å¸¸çš„。ä¸éŽè‹¥ä½ çš„åƒç´ åœ–æ¡ˆçµæžœä¸æ­£å¸¸ä¸”ä½ èªç‚ºåŽŸå› å‡ºåœ¨é€æ˜Žè‰²ç‰ˆï¼Œè«‹è¯çµ¡ libdepixelize 維護人員 (例如,在專案網é ä¸Šå¡«å¯«ç¨‹å¼éŒ¯èª¤å›žå ±) è€Œä»–æœƒå¾ˆæ¨‚æ„æ”¹é€²æ¼”算法。如果維護人員ä¸çŸ¥é“åœ–ç‰‡çµæžœç•°å¸¸çš„原因便無法改進演算法。 - + 下é¢é€™å¼µåœ–片是 æç¹ªåƒç´ åœ– å°è©±çª—的螢幕擷å–圖。你å¯ä»¥å¾ž 路徑 > æç¹ªåƒç´ åœ–... é¸å–®æˆ–在圖片物件上點擊滑鼠å³éµå¾Œé¸æ“‡ æç¹ªåƒç´ åœ– 來開啟此å°è©±çª—。 - + - + å°è©±çª—分æˆå…©å€‹å€å¡Šï¼šè©¦æŽ¢æ³•(Heuristics) 和輸出。試探法是專為進階使用者設計的,但是é è¨­å€¼ä¹Ÿå¤ ä¸€èˆ¬ç”¨é€”,ä¸å¿…æ“”å¿ƒåƒæ•¸çš„設定;因此試探法的部分留到後é¢è¬›è§£ï¼Œå…ˆå¾žè¼¸å‡ºé–‹å§‹è«‡èµ·ã€‚ - + Kopf-Lischinski 演算法就åƒç·¨è­¯å™¨çš„作用一樣 (從高階程å¼èªžè¨€çš„觀點來看)ï¼Œå°‡è³‡æ–™è½‰æ›æˆè¨±å¤šç¨®ä¸åŒé¡žåž‹çš„表ç¾å½¢å¼ã€‚在æ¯å€‹éšŽæ®µä¸­æ¼”ç®—æ³•çµ¦äºˆæˆ‘å€‘æŽ¢ç´¢æ­¤è¡¨ç¾æ‰‹æ³•潛在應用的機會。æŸäº›é‹ç®—éŽç¨‹ç”¢ç”Ÿçš„åœ–æ¡ˆæœ‰æ­£ç¢ºçš„è¦–è¦ºè¡¨ç¾ (åƒé€ å½¢èŒƒæ°æ™¶æ ¼åœ–案輸出),而有些則沒有 (åƒç›¸ä¼¼åº¦åœ–å½¢)。在 libdepixelize 的開發éŽç¨‹ä¸­è¨±å¤šä½¿ç”¨è€…䏿–·è©¢å•能å¦åŠ å…¥åŒ¯å‡ºé€™äº›è™•ç†éŽç¨‹åœ–形功能的å¯èƒ½æ€§ï¼Œæœ€å¾ŒåŽŸå§‹çš„ libdepixelize ä½œè€…åŒæ„加入這些使用者所期望的功能。 - + é è¨­è¼¸å‡ºæ‡‰è©²æœƒç”¢ç”Ÿæœ€å¹³æ»‘的圖案,而該圖案å¯èƒ½æ˜¯ä½ æƒ³è¦çš„çµæžœã€‚ä½ å¯èƒ½å·²ç¶“在這篇教學的第一幅範例圖見éŽé è¨­è¼¸å‡ºçš„æ•ˆæžœã€‚如果你想自己試試,開啟 æç¹ªåƒç´ åœ– å°è©±çª—並在 Inkscape 中é¸å–æŸå¼µåœ–片後按 確定 按鈕。 - + 從下é¢ç¯„例圖你å¯ä»¥çœ‹åˆ°èŒƒæ°æ™¶æ ¼ (Voronoi) è¼¸å‡ºçµæžœä¸”這屬於「é‡å¡‘åž‹åƒç´ åœ–ã€ï¼Œæ™¶æ ¼å–®å…ƒ (以å‰çš„åƒç´ ) 會轉變æˆç›¸é€£åƒç´ è®“圖案有相åŒå¤–è§€ã€‚ä¸æœƒå»ºç«‹ä»»ä½•æ›²ç·šè€Œå½±åƒæœƒæŒçºŒä»¥ç›´ç·šæ§‹æˆã€‚ç•¶ä½ æ”¾å¤§å½±åƒæ™‚則會有差異。以å‰åƒç´ ä¸æœƒèˆ‡å°è§’相鄰的åƒç´ å…±ç”¨é‚Šç·£ï¼Œå³ä½¿æœƒåœ–å½¢æœƒè®Šæˆæœ‰ç›¸åŒçš„外觀。但ç¾åœ¨ (感è¬è‰²å½©ç›¸ä¼¼åº¦åœ–形和試探法讓你å¯ä»¥å¾—到更好的é‹ç®—çµæžœ) å»èƒ½å¤ è®“å…©çš„å°è§’單元共用邊緣 (以å‰ä¸€å€‹é ‚點åªèƒ½ç”±å…©å€‹å°è§’單元所共用)。 - + @@ -15084,42 +15084,42 @@ - + æ¨™æº–è²æ°é›²å½¢ç·šè¼¸å‡ºæœƒæœ‰å¹³æ»‘的圖形,因為å‰é¢æ•˜è¿°çš„èŒƒæ°æ™¶æ ¼è¼¸å‡ºæœƒè½‰æ›æˆäºŒæ¬¡è²èŒ²æ›²ç·šï¼Œä½†è½‰æ›ä¸æœƒæ˜¯ 1:1,原因是當演算法è¦åœ¨å¯è¦‹è‰²å½©ä¹‹ä¸­é”æˆå€å¡Šé–“網格ä¸é€£çºŒ (T-junction) 時,試探法會多次é‹ç®—決定哪些曲線會åˆä½µæˆä¸€æ¢æ›²ç·šã€‚å°æ–¼è©²éšŽæ®µè©¦æŽ¢æ³•çš„æç¤ºï¼šä½ ç„¡æ³•調整它們。 - + ç”± libdepixelize (Inkscape ç›®å‰ä¸æä¾›åœ–形介é¢ï¼Œå› ç‚ºæœ¬èº«è™•於實驗且尚未開發完整階段) åŒ¯å‡ºçš„æœ€å¾Œä¸€å¼µè¼¸å‡ºçµæžœæ˜¯ç”¨ã€Œæœ€ä½³åŒ–曲線ã€ç§»é™¤è²æ°é›²å½¢ç·šçš„階梯ç¾è±¡ã€‚æ­¤é‹ç®—éšŽæ®µåŒæ™‚åŸ·è¡Œäº†é‚Šç•Œåµæ¸¬æŠ€è¡“來é¿å…æŸäº›å¤–觀變得平滑,以åŠä¸‰è§’æ¸¬é‡æŠ€è¡“ä¾†ä¿®æ­£æœ€ä½³åŒ–å¾Œçš„ç¯€é»žä½ç½®ã€‚ç•¶ libdepixelize çš„é–‹ç™¼è„«é›¢ã€Œå¯¦é©—éšŽæ®µã€æ™‚ (希望是ä¸ä¹…之後),你應該就å¯ä»¥å€‹åˆ¥åœ°åœç”¨é€™äº›åŠŸèƒ½çš„ä»»ä½•ä¸€é …ã€‚ - + 圖形介é¢ä¸­çš„試探法部分讓你å¯ä»¥èª¿æ•´ libdepixelize çš„è©¦æŽ¢æ³•åƒæ•¸ä»¥æ±ºå®šç¨‹å¼é‡åˆ° 2x2 åƒç´ æ™‚哪兩個å°è§’åƒç´ æœ‰ç›¸åŒçš„é¡è‰²ã€‚libdepixelize çš„å•é¡Œå°±æ˜¯ã€Œåœ–æ¡ˆä¸­å“ªäº›é—œè¯æ€§æ˜¯æˆ‘該ä¿ç•™çš„?ã€ã€‚ç¨‹å¼æœƒè©¦è‘—å°ä¸ä¸€è‡´çš„å°è§’åƒç´ å¥—用所有試探法並ä¿ç•™æ¯”è¼ƒå¥½çš„é—œè¯æ€§ã€‚如果出ç¾å…©å€‹ä¸€æ¨£å¥½çš„æƒ…å½¢æ™‚ï¼Œå‰‡é—œè¯æ€§éƒ½æœƒè¢«åˆªé™¤ã€‚ - + 若你想è¦åˆ†æžæ¯æ¬¡è©¦æŽ¢æ³•的效果並用這些數字åšå…¶ä»–æœ‰è¶£çš„è©¦é©—ï¼Œé‚£éº¼èŒƒæ°æ™¶æ ¼å°±æ˜¯æœ€ä½³çš„輸出方å¼ã€‚ä½ å¯ä»¥ç°¡å–®åœ°åœ¨èŒƒæ°æ™¶æ ¼è¼¸å‡ºä¸­çœ‹åˆ°æ›´å¤šè©¦æŽ¢æ³•的效果,而當你滿æ„自己的設定值時,你便能將輸出類型改æˆä½ æƒ³è¦çš„那一種。 - + 下é¢çš„åœ–ç‰‡é¡¯ç¤ºæ¯æ¬¡åªæœ‰é–‹å•Ÿä¸€ç¨®è©¦æŽ¢æ³•çš„è²æ°é›²å½¢ç·šè¼¸å‡ºã€‚請注æ„用紫色圓圈特別標示的ä½ç½®ï¼Œé‚£æ˜¯æ¯ç¨®è©¦æŽ¢æ³•åŸ·è¡Œæ™‚çµæžœä¸åŒçš„地方。 - + @@ -15500,72 +15500,72 @@ - + 第一次試驗 (最上é¢çš„圖片),我們åªå•Ÿç”¨æ›²ç·šè©¦æŽ¢æ³•。這種試探法會試著ä¿ç•™ç›¸é€£ä¸€èµ·çš„長曲線。你會注æ„åˆ°çµæžœå¾ˆé¡žä¼¼æœ€å¾Œä¸€å¼µåœ–片,而最後一張是套用稀ç–åƒç´ è©¦æŽ¢æ³•çš„çµæžœã€‚ä¸åŒçš„åœ°æ–¹æ˜¯å®ƒçš„ã€Œå¼·åº¦ã€æ›´å‡è¡¡ä¸”é‡åˆ°çœŸçš„æœƒå½±éŸ¿åˆ°ä¿ç•™é€£æŽ¥æ€§æ™‚åªæœƒæŠŠé«˜çš„æ•¸å€¼ä½œç‚ºæŠ•票值。這裡的「å‡è¡¡ã€ä¸€è©žä»£è¡¨çš„定義/概念是根據「人類直覺ã€çµ¦å®šçš„åƒç´ è³‡æ–™åº«åˆ†æžè€Œä¾†ã€‚其他差異則是é‡åˆ°ç›¸é€£éƒ¨åˆ†ç¾¤çµ„æˆå¤§åž‹åœ–å¡Šè€Œä¸æ˜¯é•·æ›²ç·š (想åƒä¸€ä¸‹æ£‹ç›¤) 時試探法無法決定該怎麼åšã€‚ - + 第二次試驗 (中間那幅圖片),我們åªå•Ÿç”¨å­¤ç«‹è©¦æŽ¢æ³•ã€‚è©¦æŽ¢æ³•åªæœ‰è©¦è‘—ä¿ç•™ç›¸é€£éƒ¨åˆ†ï¼Œæ›è¨€ä¹‹åœ–ç‰‡çµæžœæ˜¯å«æœ‰å›ºå®šæ¬Šé‡æŠ•票的æŸäº›éš”離åƒç´  (孤立)。這種情形與其他試探法處ç†ä¸ç›¸åŒï¼Œä½†è©²è©¦æŽ¢æ³•ä»ç„¶å¾ˆæ£’ä¸”æœ‰åŠ©æ–¼å¾—åˆ°æ›´å¥½çš„çµæžœã€‚ - + 第三次試驗 (底下的那張圖片),我們åªå•Ÿç”¨ç¨€ç–åƒç´ è©¦æŽ¢æ³•。這種試探法會試著ä¿ç•™èˆ‡å‰æ™¯é¡è‰²ç›¸é€£çš„æ›²ç·šã€‚試探法藉由分æžä¸ä¸€è‡´æ›²ç·šå‘¨åœçš„åƒç´ å€åŸŸä¾†æ‰¾åˆ°å‰æ™¯é¡è‰²ã€‚使用這種試探法,你ä¸åªèƒ½å¤ èª¿æ•´ã€Œå¼·åº¦ã€ï¼Œä¹Ÿå¯ä»¥èª¿æ•´è¦åˆ†æžçš„åƒç´ å€åŸŸã€‚但記ä½ä¸€ä»¶äº‹ï¼Œç•¶ä½ å¢žåŠ åƒç´ å€åŸŸåˆ†æžçš„æœ€å¤§ã€Œå¼·åº¦ã€æ™‚其投票也會增加,你å¯èƒ½æœƒéœ€è¦ä¿®æ”¹æŠ•ç¥¨çš„å€æ•¸ã€‚原始的 libdepixelize 作者èªç‚ºæ­¤ç¨®è©¦æŽ¢æ³•å¤ªè²ªå¿ƒå› è€Œæ¯”è¼ƒå–œæ­¡å°‡å€æ•¸æ”¹ç‚ºã€Œ0.25ã€ã€‚ - + å³ä½¿æ›²ç·šè©¦æŽ¢æ³•和稀ç–åƒç´ è©¦æŽ¢æ³•æœƒå¾—åˆ°é¡žä¼¼çš„çµæžœï¼Œä½ ä»æœƒæƒ³éƒ½å•Ÿç”¨é€™å…©ç¨®è©¦æŽ¢æ³•,因為曲線試探法å¯èƒ½æ¥µç‚ºä¿å®ˆåœ°ä¿ç•™è¼ªå»“åƒç´ é‡è¦æ›²ç·šï¼Œè€ŒæŸäº›æƒ…å½¢åªæœ‰ç¨€ç–åƒç´ è©¦æŽ¢æ³•能符åˆéœ€æ±‚。 - + 尿Ѐ巧æç¤ºï¼šä½ å¯ä»¥å°‡å€æ•¸/權é‡è¨­å®šå€¼è¨­å®šç‚ºé›¶ä¾†åœç”¨æ‰€æœ‰çš„è©¦æŽ¢æ³•ã€‚ä½ ä¹Ÿèƒ½å°‡ä»»ä½•ä¸€ç¨®è©¦æŽ¢æ³•çš„å€æ•¸/æ¬Šé‡æ•¸å€¼è¨­ç‚ºè² å€¼è®“çµæžœç”¢ç”Ÿèˆ‡åŽŸç†ç›¸å的效果。至於你為什麼想用åå‘行為去å–ä»£ç”¨æ¨™æº–è¡Œç‚ºæ‰€å¾—åˆ°çš„è‰¯å¥½ç•«è³ªçµæžœå‘¢ï¼Ÿå› ç‚ºä½ èƒ½é€™éº¼åš...因為你å¯èƒ½æƒ³è¦ä¸€ç¨®æœ‰ã€Œäººé€ æ„Ÿã€çš„æ•ˆæžœ...ä¸ç®¡ä»€éº¼åŽŸå› ...你就是å¯ä»¥é€™æ¨£åšã€‚ - + 就這樣ï¼ä¸Šé¢æ‰€è¿°å°±æ˜¯ libdepixelize åˆæ¬¡ç™¼ä½ˆç‰ˆæœ¬æä¾›çš„全部é¸é …。但å‡å¦‚ libdepixelize 原始作者和創作導師的研究能夠æˆåŠŸï¼Œé‚£éº¼ä½ å¯èƒ½èƒ½ä½¿ç”¨æ›´å¤šé¡å¤–çš„é¸é …,甚至能讓用 libdepixelize ç”¢ç”Ÿè‰¯å¥½çµæžœçš„圖片範åœè®Šå¾—更廣。希望他們開發éŽç¨‹é †åˆ©ã€‚ - + 這篇文章使用的所有圖片都來自 Liberated Pixel Cup 以é¿å…著作權å•題。連çµï¼š - - + + http://opengameart.org/content/memento - - + + http://opengameart.org/content/rpg-enemies-bathroom-tiles - + diff --git a/share/tutorials/tutorial-tracing.zh_TW.svg b/share/tutorials/tutorial-tracing.zh_TW.svg index 12399c5e2..10a26e7cd 100644 --- a/share/tutorials/tutorial-tracing.zh_TW.svg +++ b/share/tutorials/tutorial-tracing.zh_TW.svg @@ -36,166 +36,164 @@ - 使用 Ctrl+↓ å‘下æ²å‹•é é¢ + 使用 Ctrl+↓ å‘下æ²å‹•é é¢ - - ::æç¹ª + + ::æç¹ªé»žé™£åœ– - - + + Inkscape 的特點之一就是有工具能將點陣圖æç¹ªæˆ <路徑> 元件作為 SVG 圖畫。這些簡短的說明應該能幫助你熟悉它的用法。 - - + + - ç›®å‰ Inkscape 採用 Potrace 點陣圖æç¹ªå¼•擎 (potrace.sourceforge.net) 其作者為 Peter Selinger。我們期望將來有候補的æç¹ªç¨‹å¼ï¼›ä¸éŽï¼Œç¾åœ¨é€™å€‹å„ªç§€çš„工具已經能大大滿足我們的需求。 + ç›®å‰ Inkscape 採用 Potrace 點陣圖æç¹ªå¼•擎 (potrace.sourceforge.net) 其作者為 Peter Selinger。我們期望將來有候補的æç¹ªç¨‹å¼ï¼›ä¸éŽï¼Œç¾åœ¨é€™å€‹å„ªç§€çš„工具已經能大大滿足我們的需求。 - - + + è¨˜ä½æç¹ªçš„ç›®çš„ä¸¦éžä»¿é€ å‡ºåŽŸå§‹åœ–åƒçš„精確複製å“ï¼›ä¹Ÿä¸æ˜¯åˆ»æ„打造一個最終作å“。沒有自動æç¹ªç¨‹å¼å¯ä»¥åšåˆ°é‚£æ¨£ã€‚它能åšçš„æ˜¯çµ¦ä½ ä¸€çµ„æ›²ç·šä½œç‚ºç´ ææ‡‰ç”¨åˆ°ä½ çš„創作中。 - - + + Potrace å¯è©®é‡‹ä¸€å¹…é»‘ç™½é»žé™£åœ–ä¸¦ç”¢ç”Ÿä¸€çµ„æ›²ç·šã€‚ç›®å‰æˆ‘們有三種類型的輸入濾é¡å¯å°‡åŽŸæœ¬åœ–åƒè½‰æ›æˆ Potrace å¯ä½¿ç”¨çš„æ±è¥¿ã€‚ - - + + ä¸€èˆ¬ä¾†èªªä¸­é–“é»žé™£åœ–ä¸­å«æœ‰è¼ƒå¤šçš„æš—色åƒç´ ï¼Œ Potrace 會實行更多次的æç¹ªå‹•作。當æç¹ªçš„æ¬¡æ•¸å¢žåŠ æ™‚ï¼Œæœƒéœ€è¦æ›´å¤šçš„ CPU 時間,且產生的 <路徑> 元件也會大很多。建議使用者先試驗é¡è‰²è¼ƒäº®çš„ä¸­é–“é»žé™£åœ–ï¼Œå†æ…¢æ…¢åœ°æ›æˆé¡è‰²è¼ƒæš—的以得到想è¦çš„輸出路徑比例和複雜性。 - - + + - 開始使用æç¹ªåŠŸèƒ½ï¼Œè¼‰å…¥æˆ–åŒ¯å…¥ä¸€å€‹åœ–åƒï¼Œé¸å–å®ƒä¸¦é¸æ“‡ 路徑 > æç¹ªé»žé™£åœ– 項目,或者直接按 Shift+Alt+B。 + 開始使用æç¹ªåŠŸèƒ½ï¼Œè¼‰å…¥æˆ–åŒ¯å…¥ä¸€å€‹åœ–åƒï¼Œé¸å–å®ƒä¸¦é¸æ“‡ 路徑 > æç¹ªé»žé™£åœ– 項目,或者直接按 Shift+Alt+B。 - æç¹ªå°è©±çª—的主è¦é¸é … - - - + æç¹ªå°è©±çª—的主è¦é¸é … + + + 這時會看到三種å¯ç”¨çš„æ¿¾é¡é¸é …: - - - + + + - Brightness Cutoff - + 亮度界é™å€¼ - - + + 這個僅僅使用åƒç´ çš„紅色ã€ç¶ è‰²ã€è—色 (或ç°åº¦) 的總和作為判定哪一個為黑或白的指標。臨界值å¯è¨­å®šç‚º 0.0 (黑色) 到 1.0 (白色)。設定較高的臨界值,åƒç´ æ•¸é‡å°‘æ–¼è‡¨ç•Œå€¼çš„æœƒåˆ¤å®šç‚ºç™½è‰²ï¼Œè€Œä¸­é–“å½±åƒæœƒè®Šå¾—較暗。 - åŽŸå§‹åœ–åƒ - 亮度臨界值填色,無邊框 - 亮度臨界值邊框,無填色 - - - - - - + åŽŸå§‹åœ–åƒ + 亮度臨界值填色,無邊框 + 亮度臨界值邊框,無填色 + + + + + + - Edge Detection - + é‚Šç·£åµæ¸¬ - - + + 這個使用 J. Canny ç™¼æ˜Žçš„é‚Šç·£åµæ¸¬ç®—法作為快速發ç¾ç›¸ä¼¼å°æ¯”的等斜線的方法。這個產生的中間點陣圖看起來比使用亮度臨界值的效果還ä¸åƒåŽŸå§‹åœ–åƒï¼Œä½†æ˜¯å¾ˆå¯èƒ½æœƒæä¾›å¦ä¸€å€‹æ–¹å¼è¢«å¿½ç•¥çš„æ›²ç·šè³‡è¨Šã€‚這裡設定的臨界值 (0.0 – 1.0) å¯èª¿æ•´è¼¸å‡ºçµæžœä¸­ç›¸é„°åƒç´ æ˜¯å¦é”åˆ°é‚Šç·£å·®ç•°çš„äº®åº¦è‡¨ç•Œå€¼ã€‚é€™å€‹è¨­å®šèƒ½èª¿æ•´è¼¸å‡ºçµæžœä¸­é‚Šç·£çš„æ˜Žæš—æˆ–粗細。 - åŽŸå§‹åœ–åƒ - 嵿¸¬é‚Šç·£å¡«è‰²ï¼Œç„¡é‚Šæ¡† - 嵿¸¬é‚Šç·£é‚Šæ¡†ï¼Œç„¡å¡«è‰² - - - - - - + åŽŸå§‹åœ–åƒ + 嵿¸¬é‚Šç·£å¡«è‰²ï¼Œç„¡é‚Šæ¡† + 嵿¸¬é‚Šç·£é‚Šæ¡†ï¼Œç„¡å¡«è‰² + + + + + + é¡è‰²é‡åŒ– - - + + 這個濾é¡çš„æ•ˆæžœæœƒç”¢ç”Ÿä¸€å€‹ä¸åŒæ–¼å…¶ä»–兩種濾é¡çš„中間影åƒï¼Œä½†æ˜¯éžå¸¸æœ‰ç”¨ã€‚é€™å€‹æ¿¾é¡æœƒå°‹æ‰¾é¡è‰²è®ŠåŒ–的邊緣å³ä½¿åœ¨åŒç­‰äº®åº¦å’Œå°æ¯”ä¸‹ï¼Œè€Œä¸æ˜¯é¡¯ç¤ºäº®åº¦æˆ–å°æ¯”的等斜線。如果中間點陣圖是彩色的,é¡è‰²æ•¸ç›®çš„設定值會決定有多少種輸出é¡è‰²ã€‚還會決定黑色/ç™½è‰²æ˜¯å¦æœ‰å¶æ•¸æˆ–奇數索引。 - åŽŸå§‹åœ–åƒ - é‡åŒ– (12 種é¡è‰²)填色,無邊框 - é‡åŒ– (12 種é¡è‰²)邊框,無填色 - - - - - + åŽŸå§‹åœ–åƒ + é‡åŒ– (12 種é¡è‰²)填色,無邊框 + é‡åŒ– (12 種é¡è‰²)邊框,無填色 + + + + + 使用者應該嘗試全部三種濾é¡ï¼Œä¸¦ä¸”è§€å¯Ÿå°æ–¼ä¸åŒé¡žåž‹çš„輸入圖åƒç”¢ç”Ÿæ•ˆæžœçš„差異。總有æŸäº›åœ–片用其中一種濾é¡çš„æ•ˆæžœæ¯”其他兩種好。 - - + + - æç¹ªå¾Œï¼Œå»ºè­°ä½¿ç”¨è€…在輸出路徑上試著用 路徑 > 簡化 (Ctrl+L) 以減少節點數。這樣會讓 Potrace çš„è¼¸å‡ºçµæžœæ›´å®¹æ˜“ç·¨è¼¯ã€‚ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰ä¸€å¹…「è€äººå½ˆå‰ä»–ã€çš„典型æç¹ªï¼š + æç¹ªå¾Œï¼Œå»ºè­°ä½¿ç”¨è€…在輸出路徑上試著用 路徑 > 簡化 (Ctrl+L) 以減少節點數。這樣會讓 Potrace çš„è¼¸å‡ºçµæžœæ›´å®¹æ˜“ç·¨è¼¯ã€‚ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰ä¸€å¹…「è€äººå½ˆå‰ä»–ã€çš„典型æç¹ªï¼š - åŽŸå§‹åœ–åƒ - æç¹ªåœ–åƒ / 輸出路徑(1,551 個節點) - - - - + åŽŸå§‹åœ–åƒ + æç¹ªåœ–åƒ / 輸出路徑(1,551 個節點) + + + + 注æ„路徑中有é¾å¤§çš„節點數é‡ã€‚按 Ctrl+L 之後,這是典型的效果: - åŽŸå§‹åœ–åƒ - æç¹ªåœ–åƒ / 輸出路徑 - 已簡化(384 個節點) - - - - + åŽŸå§‹åœ–åƒ + æç¹ªåœ–åƒ / 輸出路徑 - 已簡化(384 個節點) + + + + 這表示有點近似和粗造,但是圖畫愈簡單愈容易編輯。記ä½ä½ å¾—åˆ°çš„ä¸æ˜¯åœ–åƒçš„精確æå¯«ï¼Œä½†ä½ å¯ä»¥ä½¿ç”¨é€™ä¸€çµ„曲線到你的繪畫中。 - + @@ -225,8 +223,8 @@ - - 使用 Ctrl+↑ å‘上æ²å‹•é é¢ + + 使用 Ctrl+↑ å‘上æ²å‹•é é¢ -- cgit v1.2.3 From f761fab19ad6e7f3152c900417a6a9c304ca613b Mon Sep 17 00:00:00 2001 From: chironsylvain Date: Wed, 17 Aug 2016 13:48:57 +0200 Subject: Translations. Merging lp:~chironsylvain/inkscape/translation-fr into lp:inkscape. (bzr r15068) --- packaging/win32/languages/French.nsh | 22 +++++++++++----------- po/fr.po | 12 ++++++------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packaging/win32/languages/French.nsh b/packaging/win32/languages/French.nsh index 05a42573d..172303d25 100644 --- a/packaging/win32/languages/French.nsh +++ b/packaging/win32/languages/French.nsh @@ -1,10 +1,10 @@ ;Language: French (1036, CP1252) -;By matiphas@free.fr, Nicolas Dufour +;By matiphas@free.fr, Nicolas Dufour , Sylvain Chiron ${LangFileString} CaptionDescription "Éditeur vectoriel SVG libre" -${LangFileString} LICENSE_BOTTOM_TEXT "$(^Name) est diffusé sous la licence publique générale (GPL) GNU. La licence est fournie ici pour information uniquement. $_CLICK" +${LangFileString} LICENSE_BOTTOM_TEXT "$(^Name) est mis à disposition sous les termes de la licence publique générale (GPL) GNU. La licence est fournie ici pour information uniquement. $_CLICK" ${LangFileString} DIFFERENT_USER "Inkscape a déjà été installé par l'utilisateur $0.$\r$\nSi vous continuez, l'installation pourrait devenir défectueuse !$\r$\nVeuillez vous connecter en tant que $0 et essayer à nouveau." ${LangFileString} WANT_UNINSTALL_BEFORE "$R1 a déjà été installé. $\nVoulez-vous supprimer la version précédente avant l'installation d'$(^Name) ?" -${LangFileString} OK_CANCEL_DESC "$\n$\nCliquer sur OK pour continuer ou CANCEL pour annuler." +${LangFileString} OK_CANCEL_DESC "$\n$\nCliquer sur OK pour continuer ou sur CANCEL pour annuler." ${LangFileString} NO_ADMIN "Vous n'avez pas les privilèges d'administration.$\r$\nL'installation d'Inkscape pour tous les utilisateurs pourrait devenir défectueuse.$\r$\nVeuillez décocher l'option « pour tous les utilisateurs »." ${LangFileString} NOT_SUPPORTED "Inkscape n'est pas exécutable sur Windows 95/98/Me !$\r$\nVeuillez consulter le site web officiel pour plus d'informations." ${LangFileString} Full "Complète" @@ -20,8 +20,8 @@ ${LangFileString} Alluser "Pour tous les utilisateurs" ${LangFileString} AlluserDesc "Installer cette application pour tous les utilisateurs de cet ordinateur" ${LangFileString} Desktop "Bureau" ${LangFileString} DesktopDesc "Créer un raccourci vers Inkscape sur le bureau" -${LangFileString} Startmenu "Menu Windows" -${LangFileString} StartmenuDesc "Créer une entrée Inkscape dans le menu Windows" +${LangFileString} Startmenu "Menu Démarrer" +${LangFileString} StartmenuDesc "Créer une entrée Inkscape dans le menu Démarrer" ${LangFileString} Quicklaunch "Barre des tâches" ${LangFileString} QuicklaunchDesc "Créer un raccourci vers Inkscape dans la barre des tâches" ${LangFileString} SVGWriter "Ouvrir les fichiers SVG avec Inkscape" @@ -44,10 +44,10 @@ ${LangFileString} lng_az "Az ${LangFileString} lng_be "Biélorusse" ${LangFileString} lng_bg "Bulgare" ${LangFileString} lng_bn "Bengali" -${LangFileString} lng_bn_BD "Bengali Bangladesh" +${LangFileString} lng_bn_BD "Bengali (Bangladesh)" ${LangFileString} lng_br "Breton" ${LangFileString} lng_ca "Catalan" -${LangFileString} lng_ca@valencia "Catalan valencien" +${LangFileString} lng_ca@valencia "Catalan (Valence)" ${LangFileString} lng_cs "Tchèque" ${LangFileString} lng_da "Danois" ${LangFileString} lng_de "Allemand" @@ -57,7 +57,7 @@ ${LangFileString} lng_en "Anglais" ${LangFileString} lng_en_AU "Anglais (Australie)" ${LangFileString} lng_en_CA "Anglais (Canada)" ${LangFileString} lng_en_GB "Anglais (Royaume-Uni)" -${LangFileString} lng_en_US@piglatin "Pig Latin" +${LangFileString} lng_en_US@piglatin "Pig latin" ${LangFileString} lng_eo "Espéranto" ${LangFileString} lng_es "Espagnol" ${LangFileString} lng_es_MX "Espagnol (Mexique)" @@ -83,9 +83,9 @@ ${LangFileString} lng_lv "Latvian" ${LangFileString} lng_mk "Macédonien" ${LangFileString} lng_mn "Mongol" ${LangFileString} lng_ne "Népalais" -${LangFileString} lng_nb "Norvégien Bokmal" +${LangFileString} lng_nb "Bokmål (Norvège)" ${LangFileString} lng_nl "Néerlandais" -${LangFileString} lng_nn "Norvégien Nynorsk" +${LangFileString} lng_nn "Nynorsk (Norvège)" ${LangFileString} lng_pa "Pendjabi" ${LangFileString} lng_pl "Polonais" ${LangFileString} lng_pt "Portugais" @@ -110,7 +110,7 @@ ${LangFileString} UInstOpt "Options de d ${LangFileString} UInstOpt1 "Choisissez parmi les options additionnelles" ${LangFileString} PurgePrefs "Conserver les préférences personnelles" ${LangFileString} UninstallLogNotFound "$INSTDIR\uninstall.log introuvable !$\r$\nVeuillez procéder à la désinstallation en nettoyant le dossier $INSTDIR manuellement." -${LangFileString} FileChanged "Le fichier $filename a été modifié après l'installation.$\r$\nSouhaitez-vous vraiment le supprimer ?" +${LangFileString} FileChanged "Le fichier $filename a été modifié après l'installation.$\r$\nVoulez-vous vraiment le supprimer ?" ${LangFileString} Yes "Oui" ${LangFileString} AlwaysYes "toujours répondre Oui" ${LangFileString} No "Non" diff --git a/po/fr.po b/po/fr.po index cb4a1fbc9..65401b1d6 100644 --- a/po/fr.po +++ b/po/fr.po @@ -20,7 +20,7 @@ msgstr "" "Project-Id-Version: inkscape\n" "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n" "POT-Creation-Date: 2016-06-08 09:06+0200\n" -"PO-Revision-Date: 2016-07-01 14:31+0200\n" +"PO-Revision-Date: 2016-07-17 00:29+0200\n" "Last-Translator: Sylvain Chiron \n" "Language-Team: français <>\n" "Language: fr_FR\n" @@ -15458,9 +15458,9 @@ msgid "" "Export each selected object into its own PNG file, using export hints if any " "(caution, overwrites without asking!)" msgstr "" -"Exporter chaque objet de la sélection dans son fichier PNG, en tenant compte " -"des indications d'export (attention, écrase les fichiers sans demander de " -"confirmation !)" +"Exporter chaque objet de la sélection dans son propre fichier PNG, en tenant " +"compte des indications d'export (attention, écrase les fichiers sans " +"demander de confirmation !)" #: ../src/ui/dialog/export.cpp:172 msgid "Hide a_ll except selected" @@ -28476,7 +28476,7 @@ msgstr "_Exporter au format PNG..." #: ../src/verbs.cpp:2961 msgid "Export this document or a selection as a PNG image" -msgstr "Exporter ce document ou une sélection en une image PNG" +msgstr "Exporter ce document ou une sélection au format PNG" #. Help #: ../src/verbs.cpp:2963 @@ -36373,7 +36373,7 @@ msgid "" "Creates a zip file containing pdfs or pngs of all slides of a JessyInk " "presentation." msgstr "" -"Crée un fichier zip contenant des PDF ou des PNG de toutes les diapositives " +"Crée un fichier ZIP contenant des PDF ou des PNG de toutes les diapositives " "de la présentation JessyInk." #: ../share/extensions/jessyInk_install.inx.h:1 -- cgit v1.2.3 From 444862338328799905452f4552f9ea630809281f Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Wed, 17 Aug 2016 20:47:37 +0200 Subject: Symlinks prevents to even check out the repository on some systems bzr: ERROR: Unable to create symlink 'setup/gui/inkscape.svg' on this platform (bzr r15069) --- setup/gui/inkscape.svg | 1 - 1 file changed, 1 deletion(-) delete mode 120000 setup/gui/inkscape.svg diff --git a/setup/gui/inkscape.svg b/setup/gui/inkscape.svg deleted file mode 120000 index 494db289d..000000000 --- a/setup/gui/inkscape.svg +++ /dev/null @@ -1 +0,0 @@ -../../share/branding/inkscape.svg \ No newline at end of file -- cgit v1.2.3 From 8ceb841ac7e661d0d13ce13b935da885fe5583a2 Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Wed, 17 Aug 2016 20:50:46 +0200 Subject: Add back icon (this time as a copy) (bzr r15070) --- setup/gui/inkscape.svg | 223 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 setup/gui/inkscape.svg diff --git a/setup/gui/inkscape.svg b/setup/gui/inkscape.svg new file mode 100644 index 000000000..617e66ef4 --- /dev/null +++ b/setup/gui/inkscape.svg @@ -0,0 +1,223 @@ + + +Inkscape Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + +Andy Fitzsimon + + + + +Andrew Michael Fitzsimon + + + + +Fitzsimon IT Consulting Pty Ltd + + +http://andy.fitzsimon.com.au +2006 + +Inkscape Logo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 57f595dad1c2b8eb1862ae8396613b33a4ed8854 Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Thu, 18 Aug 2016 23:35:06 +0200 Subject: Fix compilation error (https://inkscape.org/en/paste/9901/) (bzr r15071) --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 28ae6992f..004d96191 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -856,7 +856,7 @@ static int sp_common_main( int argc, char const **argv, GSList **flDest ) std::string charset; Glib::get_charset(charset); - bind_textdomain_codeset(GETTEXT_PACKAGE, charset); + bind_textdomain_codeset(GETTEXT_PACKAGE, charset.c_str()); poptContext ctx = poptGetContext(NULL, argc, argv, options, 0); poptSetOtherOptionHelp(ctx, _("[OPTIONS...] [FILE...]\n\nAvailable options:")); -- cgit v1.2.3 From 230c3e966f370c563e2ede394d336cb0b760d4f6 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Tue, 23 Aug 2016 22:49:43 +0100 Subject: Inkview: Use GOptionContext (bzr r15072) --- src/inkview.cpp | 114 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 60 insertions(+), 54 deletions(-) diff --git a/src/inkview.cpp b/src/inkview.cpp index b9447a94f..4dcaa247d 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -34,6 +34,8 @@ #include #include +#include + #include #include #include @@ -43,7 +45,6 @@ #include #include -#include #include "inkgc/gc-core.h" #include "preferences.h" @@ -66,9 +67,6 @@ #include "ui/icon-names.h" -extern char *optarg; -extern int optind, opterr; - /** * The main application window for the slideshow */ @@ -174,41 +172,56 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, return TRUE; } -int main (int argc, const char **argv) +/// List of all input filenames +static Glib::OptionGroup::vecustrings filenames; + +/// Input timer option +static int timer = 0; + +/** + * \brief Set of command-line options for Inkview + */ +class InkviewOptionsGroup : public Glib::OptionGroup { - if (argc == 1) { - usage(); +public: + InkviewOptionsGroup() + : + Glib::OptionGroup(_("Inkscape Options"), + _("Default program options")), + _entry_timer(), + _entry_args() + { + // Entry for the "timer" option + _entry_timer.set_short_name('t'); + _entry_timer.set_long_name("timer"); + _entry_timer.set_arg_description(_("NUM")); + add_entry(_entry_timer, timer); + + // Entry for the remaining non-option arguments + _entry_args.set_short_name('\0'); + _entry_args.set_long_name(G_OPTION_REMAINING); + _entry_args.set_arg_description(_("FILES...")); + + add_entry(_entry_args, filenames); } +private: + Glib::OptionEntry _entry_timer; + Glib::OptionEntry _entry_args; +}; + +int main (int argc, char **argv) +{ + Glib::OptionContext opt(_("Open SVG files")); + InkviewOptionsGroup grp; + opt.set_main_group(grp); + // Prevents errors like "Unable to wrap GdkPixbuf..." (in nr-filter-image.cpp for example) Gtk::Main::init_gtkmm_internals(); + Gtk::Main main_instance (argc, argv, opt); - Gtk::Main main_instance (&argc, const_cast(&argv)); - - int num_parsed_options = 0; SPSlideShow ss; - - // the list of arguments is in the net line - for (int i = 1; i < argc; i++) { - if ((argv[i][0] == '-')) { - if (!strcmp(argv[i], "--")) { - break; - } - else if ((!strcmp(argv[i], "-t"))) { - if (i + 1 >= argc) { - usage(); - } - ss.timer = atoi(argv[i+1]); - num_parsed_options = i+1; - i++; - } - else { - usage(); - } - } - } - - int i; + ss.timer=timer; bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); @@ -232,19 +245,24 @@ int main (int argc, const char **argv) Inkscape::Application::create(argv[0], true); //Inkscape::Application &inkscape = Inkscape::Application::instance(); - // starting at where the commandline options stopped parsing because - // we want all the files to be in the list - for (i = num_parsed_options + 1 ; i < argc; i++) { + if(filenames.empty()) + { + std::cout << opt.get_help(); + exit(EXIT_FAILURE); + } + + for(auto file : filenames) + { struct stat st; - if (stat (argv[i], &st) - || !S_ISREG (st.st_mode) - || (st.st_size < 64)) { - fprintf(stderr, "could not open file %s\n", argv[i]); + if (stat(file.c_str(), &st) + || !S_ISREG (st.st_mode) + || (st.st_size < 64)) { + fprintf(stderr, "could not open file %s\n", file.c_str()); } else { #ifdef WITH_INKJAR - if (is_jar(argv[i])) { - Inkjar::JarFileReader jar_file_reader(argv[i]); + if (is_jar(file.c_str())) { + Inkjar::JarFileReader jar_file_reader(file.c_str()); for (;;) { GByteArray *gba = jar_file_reader.get_next_file(); if (gba == NULL) { @@ -276,7 +294,7 @@ int main (int argc, const char **argv) } else { #endif /* WITH_INKJAR */ /* Append to list */ - ss.slides.push_back(strdup (argv[i])); + ss.slides.push_back(file); if (!ss.doc) { ss.doc = SPDocument::createNewDoc((ss.slides[ss.current]).c_str(), TRUE, false); @@ -487,18 +505,6 @@ static bool is_jar(char const *filename) } #endif /* WITH_INKJAR */ -static void usage() -{ - fprintf(stderr, - "Usage: inkview [OPTIONS...] [FILES ...]\n" - "\twhere FILES are SVG (.svg or .svgz)" -#ifdef WITH_INKJAR - " or archives of SVGs (.sxw, .jar)" -#endif - "\n"); - exit(1); -} - /* Local Variables: mode:c++ -- cgit v1.2.3 From cb2670616b3cfb41ee235f6505ddc9105604d74c Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Tue, 23 Aug 2016 23:55:16 +0100 Subject: Inkview: C++ify (bzr r15073) --- src/inkview.cpp | 145 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 81 insertions(+), 64 deletions(-) diff --git a/src/inkview.cpp b/src/inkview.cpp index 4dcaa247d..61017fc71 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -67,29 +67,64 @@ #include "ui/icon-names.h" +class SPSlideShow; + +static int sp_svgview_main_delete (GtkWidget *widget, + GdkEvent *event, + struct SPSlideShow *ss); + +static int sp_svgview_main_key_press (GtkWidget *widget, + GdkEventKey *event, + struct SPSlideShow *ss); + /** * The main application window for the slideshow */ class SPSlideShow : public Gtk::ApplicationWindow { + std::vector _slides; ///< List of filenames for each slide + int _current; ///< Index of the currently displayed slide + SPDocument *_doc; ///< The currently displayed slide + int _timer; + GtkWidget *_view; + public: - std::vector slides; ///< List of filenames for each slide - int current; ///< Index of the currently displayed slide - SPDocument *doc; ///< The currently displayed slide - GtkWidget *view; - int timer; - /// Current state of application (full-screen or windowed) bool is_fullscreen; - SPSlideShow() + /// Update the window title with current document name + void update_title() + { + set_title(_doc->getName()); + } + + SPSlideShow(std::vector &slides) : - slides(), - current(0), - doc(NULL), - view(NULL), - is_fullscreen(false) - {} + _slides(slides), + _current(0), + _doc(SPDocument::createNewDoc(_slides[0].c_str(), true, false)), + _view(NULL), + is_fullscreen(false), + _timer(0) + { + update_title(); + + set_default_size(MIN ((int)_doc->getWidth().value("px"), (int)gdk_screen_width() - 64), + MIN ((int)_doc->getHeight().value("px"), (int)gdk_screen_height() - 64)); + + g_signal_connect (G_OBJECT (gobj()), "delete_event", (GCallback) sp_svgview_main_delete, this); + g_signal_connect (G_OBJECT (gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, this); + + _doc->ensureUpToDate(); + _view = sp_svg_view_widget_new (_doc); + _doc->doUnref (); + SP_SVG_VIEW_WIDGET(_view)->setResize( false, _doc->getWidth().value("px"), _doc->getHeight().value("px") ); + gtk_widget_show (_view); + add(*Glib::wrap(_view)); + + show(); + } + void set_timer(int timer) {_timer = timer;} void control_show(); void show_next(); void show_prev(); @@ -118,7 +153,7 @@ static int sp_svgview_main_delete (GtkWidget */*widget*/, GdkEvent */*event*/, struct SPSlideShow */*ss*/) { - gtk_main_quit (); + Gtk::Main::quit(); return FALSE; } @@ -168,7 +203,7 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, break; } - ss->set_title(ss->doc->getName()); + ss->update_title(); return TRUE; } @@ -220,9 +255,6 @@ int main (int argc, char **argv) Gtk::Main::init_gtkmm_internals(); Gtk::Main main_instance (argc, argv, opt); - SPSlideShow ss; - ss.timer=timer; - bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); @@ -243,7 +275,6 @@ int main (int argc, char **argv) setlocale (LC_NUMERIC, "C"); Inkscape::Application::create(argv[0], true); - //Inkscape::Application &inkscape = Inkscape::Application::instance(); if(filenames.empty()) { @@ -251,6 +282,8 @@ int main (int argc, char **argv) exit(EXIT_FAILURE); } + std::vector valid_files; + for(auto file : filenames) { struct stat st; @@ -277,13 +310,13 @@ int main (int argc, char **argv) } } } else if (gba->len > 0) { - ss.doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data, - gba->len, - TRUE); + // Try opening the document + auto doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data, + gba->len, + TRUE); gchar *last_filename = jar_file_reader.get_last_filename(); - if (ss.doc) { - ss.slides.push_back(strdup(last_filename)); - (ss.doc)->setUri(last_filename); + if (doc) { + valid_files.push_back(strdup(last_filename)); } g_byte_array_free(gba, TRUE); g_free(last_filename); @@ -293,14 +326,12 @@ int main (int argc, char **argv) } } else { #endif /* WITH_INKJAR */ - /* Append to list */ - ss.slides.push_back(file); + auto doc = SPDocument::createNewDoc(file.c_str(), TRUE, false); - if (!ss.doc) { - ss.doc = SPDocument::createNewDoc((ss.slides[ss.current]).c_str(), TRUE, false); - if (!ss.doc) { - ++ss.current; - } + if(doc) + { + /* Append to list */ + valid_files.push_back(file); } #ifdef WITH_INKJAR } @@ -308,27 +339,13 @@ int main (int argc, char **argv) } } - if(!ss.doc) { + if(valid_files.empty()) { return 1; /* none of the slides loadable */ } - ss.set_title(ss.doc->getName() ); - ss.set_default_size(MIN ((int)(ss.doc)->getWidth().value("px"), (int)gdk_screen_width() - 64), - MIN ((int)(ss.doc)->getHeight().value("px"), (int)gdk_screen_height() - 64)); - - g_signal_connect (G_OBJECT (ss.gobj()), "delete_event", (GCallback) sp_svgview_main_delete, &ss); - g_signal_connect (G_OBJECT (ss.gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, &ss); - - (ss.doc)->ensureUpToDate(); - ss.view = sp_svg_view_widget_new (ss.doc); - (ss.doc)->doUnref (); - SP_SVG_VIEW_WIDGET(ss.view)->setResize( false, ss.doc->getWidth().value("px"), ss.doc->getHeight().value("px") ); - gtk_widget_show (ss.view); - ss.add(*Glib::wrap(ss.view)); - - ss.show(); - - gtk_main (); + SPSlideShow ss(valid_files); + ss.set_timer(timer); + main_instance.run(); return 0; } @@ -414,11 +431,11 @@ void SPSlideShow::normal_cursor() void SPSlideShow::set_document(SPDocument *doc, int current) { - if (doc && doc != this->doc) { + if (doc && doc != _doc) { doc->ensureUpToDate(); - reinterpret_cast(SP_VIEW_WIDGET_VIEW (view))->setDocument (doc); - this->doc = doc; - this->current = current; + reinterpret_cast(SP_VIEW_WIDGET_VIEW (_view))->setDocument (doc); + _doc = doc; + _current = current; } } @@ -430,11 +447,11 @@ void SPSlideShow::show_next() waiting_cursor(); SPDocument *doc = NULL; - while (!doc && (current < slides.size() - 1)) { - doc = SPDocument::createNewDoc ((slides[++current]).c_str(), TRUE, false); + while (!doc && (_current < _slides.size() - 1)) { + doc = SPDocument::createNewDoc ((_slides[++_current]).c_str(), TRUE, false); } - set_document(doc, current); + set_document(doc, _current); normal_cursor(); } @@ -446,11 +463,11 @@ void SPSlideShow::show_prev() waiting_cursor(); SPDocument *doc = NULL; - while (!doc && (current > 0)) { - doc = SPDocument::createNewDoc ((slides[--current]).c_str(), TRUE, false); + while (!doc && (_current > 0)) { + doc = SPDocument::createNewDoc ((_slides[--_current]).c_str(), TRUE, false); } - set_document(doc, current); + set_document(doc, _current); normal_cursor(); } @@ -463,8 +480,8 @@ void SPSlideShow::goto_first() SPDocument *doc = NULL; int current = 0; - while ( !doc && (current < slides.size() - 1)) { - doc = SPDocument::createNewDoc((slides[current++]).c_str(), TRUE, false); + while ( !doc && (current < _slides.size() - 1)) { + doc = SPDocument::createNewDoc((_slides[current++]).c_str(), TRUE, false); } set_document(doc, current - 1); @@ -480,9 +497,9 @@ void SPSlideShow::goto_last() waiting_cursor(); SPDocument *doc = NULL; - int current = slides.size() - 1; + int current = _slides.size() - 1; while (!doc && (current >= 0)) { - doc = SPDocument::createNewDoc((slides[current--]).c_str(), TRUE, false); + doc = SPDocument::createNewDoc((_slides[current--]).c_str(), TRUE, false); } set_document(doc, current + 1); -- cgit v1.2.3 From 8b2e34c50bf8c3548ea7e87e0999fcae6c02fd0d Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Thu, 25 Aug 2016 15:31:56 +0200 Subject: [Bug #1616730] Bump trunk version to 0.92+devel. Fixed bugs: - https://launchpad.net/bugs/1616730 (bzr r15074) --- CMakeLists.txt | 2 +- src/inkscape-x64.rc | 10 +++++----- src/inkscape.rc | 10 +++++----- src/inkview-x64.rc | 10 +++++----- src/inkview.rc | 10 +++++----- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac7dc6fdd..9bb022e86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(CMAKE_BUILD_TYPE_INIT "Release") project(inkscape) -set(INKSCAPE_VERSION 0.92pre1) +set(INKSCAPE_VERSION 0.92+devel) set(PROJECT_NAME inkscape) set(CMAKE_INCLUDE_CURRENT_DIR TRUE) diff --git a/src/inkscape-x64.rc b/src/inkscape-x64.rc index 2f4710a36..f5d3b5b99 100644 --- a/src/inkscape-x64.rc +++ b/src/inkscape-x64.rc @@ -3,8 +3,8 @@ APPLICATION_ICON ICON DISCARDABLE "../inkscape.ico" 1 24 DISCARDABLE "./inkscape-manifest-x64.xml" 1 VERSIONINFO - FILEVERSION 0,92,0,0 - PRODUCTVERSION 0,92,0,0 + FILEVERSION 0,93,0,0 + PRODUCTVERSION 0,93,0,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -13,11 +13,11 @@ BEGIN VALUE "Comments", "Published under the GNU GPL" VALUE "CompanyName", "inkscape.org" VALUE "FileDescription", "Inkscape" - VALUE "FileVersion", "0.92pre1" + VALUE "FileVersion", "0.92+devel" VALUE "InternalName", "Inkscape" - VALUE "LegalCopyright", "© 2014 Inkscape" + VALUE "LegalCopyright", "© 2016 Inkscape" VALUE "ProductName", "Inkscape" - VALUE "ProductVersion", "0.92pre1" + VALUE "ProductVersion", "0.92+devel" END END BLOCK "VarFileInfo" diff --git a/src/inkscape.rc b/src/inkscape.rc index 087c5862d..ddb55ac30 100644 --- a/src/inkscape.rc +++ b/src/inkscape.rc @@ -3,8 +3,8 @@ APPLICATION_ICON ICON DISCARDABLE "../inkscape.ico" 1 24 DISCARDABLE "./inkscape-manifest.xml" 1 VERSIONINFO - FILEVERSION 0,92,0,0 - PRODUCTVERSION 0,92,0,0 + FILEVERSION 0,93,0,0 + PRODUCTVERSION 0,93,0,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -13,11 +13,11 @@ BEGIN VALUE "Comments", "Published under the GNU GPL" VALUE "CompanyName", "inkscape.org" VALUE "FileDescription", "Inkscape" - VALUE "FileVersion", "0.92pre1" + VALUE "FileVersion", "0.92+devel" VALUE "InternalName", "Inkscape" - VALUE "LegalCopyright", "© 2014 Inkscape" + VALUE "LegalCopyright", "© 2016 Inkscape" VALUE "ProductName", "Inkscape" - VALUE "ProductVersion", "0.92pre1" + VALUE "ProductVersion", "0.92+devel" END END BLOCK "VarFileInfo" diff --git a/src/inkview-x64.rc b/src/inkview-x64.rc index 465de4af1..397d9710f 100644 --- a/src/inkview-x64.rc +++ b/src/inkview-x64.rc @@ -3,8 +3,8 @@ APPLICATION_ICON ICON DISCARDABLE "../inkscape.ico" 1 24 DISCARDABLE "./inkview-manifest-x64.xml" 1 VERSIONINFO - FILEVERSION 0,92,0,0 - PRODUCTVERSION 0,92,0,0 + FILEVERSION 0,93,0,0 + PRODUCTVERSION 0,93,0,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -13,11 +13,11 @@ BEGIN VALUE "Comments", "Published under the GNU GPL" VALUE "CompanyName", "inkscape.org" VALUE "FileDescription", "Inkview" - VALUE "FileVersion", "0.92pre1" + VALUE "FileVersion", "0.92+devel" VALUE "InternalName", "Inkview" - VALUE "LegalCopyright", "© 2014 Inkscape" + VALUE "LegalCopyright", "© 2016 Inkscape" VALUE "ProductName", "Inkview" - VALUE "ProductVersion", "0.92pre1" + VALUE "ProductVersion", "0.92+devel" END END BLOCK "VarFileInfo" diff --git a/src/inkview.rc b/src/inkview.rc index 34632bd14..5c439981a 100644 --- a/src/inkview.rc +++ b/src/inkview.rc @@ -3,8 +3,8 @@ APPLICATION_ICON ICON DISCARDABLE "../inkscape.ico" 1 24 DISCARDABLE "./inkview-manifest.xml" 1 VERSIONINFO - FILEVERSION 0,92,0,0 - PRODUCTVERSION 0,92,0,0 + FILEVERSION 0,93,0,0 + PRODUCTVERSION 0,93,0,0 BEGIN BLOCK "StringFileInfo" BEGIN @@ -13,11 +13,11 @@ BEGIN VALUE "Comments", "Published under the GNU GPL" VALUE "CompanyName", "inkscape.org" VALUE "FileDescription", "Inkview" - VALUE "FileVersion", "0.92pre1" + VALUE "FileVersion", "0.92+devel" VALUE "InternalName", "Inkview" - VALUE "LegalCopyright", "© 2014 Inkscape" + VALUE "LegalCopyright", "© 2016 Inkscape" VALUE "ProductName", "Inkview" - VALUE "ProductVersion", "0.92pre1" + VALUE "ProductVersion", "0.92+devel" END END BLOCK "VarFileInfo" -- cgit v1.2.3 From caadc219ec9987f65d94a1e8f8198c9ab3c08bf5 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 25 Aug 2016 22:40:33 +0100 Subject: Inkview: Remove support for obsolete SVG JAR archives (bzr r15075) --- .bzrignore | 1 - CMakeLists.txt | 1 - config.h.cmake | 3 - src/inkview.cpp | 59 ------ src/io/CMakeLists.txt | 2 - src/io/inkjar.cpp | 552 -------------------------------------------------- src/io/inkjar.h | 162 --------------- 7 files changed, 780 deletions(-) delete mode 100644 src/io/inkjar.cpp delete mode 100644 src/io/inkjar.h diff --git a/.bzrignore b/.bzrignore index 5bfe4946a..43db42f36 100644 --- a/.bzrignore +++ b/.bzrignore @@ -134,7 +134,6 @@ src/filters/makefile src/helper/makefile src/helper/sp-marshal.cpp src/helper/sp-marshal.h -src/inkjar/makefile src/inkscape src/inkscape-version.cpp src/inkview diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bb022e86..d928f2aac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,7 +56,6 @@ option(ENABLE_LCMS "Compile with LCMS support" ON) option(WITH_GNOME_VFS "Compile with support for Gnome VFS" ON) option(WITH_SVG2 "Compile with support for new SVG2 features" ON) option(WITH_LPETOOL "Compile with LPE Tool and experimental LPEs enabled" ON) -#option(WITH_INKJAR "Enable support for openoffice files (SVG jars)" ON) option(WITH_OPENMP "Compile with OpenMP support" ON) option(WITH_PROFILING "Turn on profiling" OFF) # Set to true if compiler/linker should enable profiling diff --git a/config.h.cmake b/config.h.cmake index 00d6fb8b3..637d49558 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -301,9 +301,6 @@ /* Build in SSL support for Inkboard */ #cmakedefine WITH_INKBOARD_SSL 1 -/* enable openoffice files (SVG jars) */ -#cmakedefine WITH_INKJAR 1 - /* Build in libcdr */ #cmakedefine WITH_LIBCDR 1 diff --git a/src/inkview.cpp b/src/inkview.cpp index 61017fc71..694869bf8 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -55,10 +55,6 @@ #include "svg-view-widget.h" #include "util/units.h" -#ifdef WITH_INKJAR -#include "io/inkjar.h" -#endif - #include "inkscape.h" #ifndef HAVE_BIND_TEXTDOMAIN_CODESET @@ -138,9 +134,6 @@ protected: int current); }; -#ifdef WITH_INKJAR -static bool is_jar(char const *filename); -#endif static void usage(); static GtkWidget *ctrlwin = NULL; @@ -292,40 +285,6 @@ int main (int argc, char **argv) || (st.st_size < 64)) { fprintf(stderr, "could not open file %s\n", file.c_str()); } else { - - #ifdef WITH_INKJAR - if (is_jar(file.c_str())) { - Inkjar::JarFileReader jar_file_reader(file.c_str()); - for (;;) { - GByteArray *gba = jar_file_reader.get_next_file(); - if (gba == NULL) { - char *c_ptr; - gchar *last_filename = jar_file_reader.get_last_filename(); - if (last_filename == NULL) - break; - if ((c_ptr = std::strrchr(last_filename, '/')) != NULL) { - if (*(++c_ptr) == '\0') { - g_free(last_filename); - continue; - } - } - } else if (gba->len > 0) { - // Try opening the document - auto doc = SPDocument::createNewDocFromMem ((const gchar *)gba->data, - gba->len, - TRUE); - gchar *last_filename = jar_file_reader.get_last_filename(); - if (doc) { - valid_files.push_back(strdup(last_filename)); - } - g_byte_array_free(gba, TRUE); - g_free(last_filename); - } else { - break; - } - } - } else { - #endif /* WITH_INKJAR */ auto doc = SPDocument::createNewDoc(file.c_str(), TRUE, false); if(doc) @@ -333,9 +292,6 @@ int main (int argc, char **argv) /* Append to list */ valid_files.push_back(file); } - #ifdef WITH_INKJAR - } - #endif } } @@ -507,21 +463,6 @@ void SPSlideShow::goto_last() normal_cursor(); } -#ifdef WITH_INKJAR -static bool is_jar(char const *filename) -{ - /* fixme: Check MIME type or something. /usr/share/misc/file/magic suggests that checking for - initial string "PK\003\004" in content should suffice. */ - size_t const filename_len = strlen(filename); - if (filename_len < 5) { - return false; - } - char const *extension = filename + filename_len - 4; - return ((memcmp(extension, ".jar", 4) == 0) || - (memcmp(extension, ".sxw", 4) == 0) ); -} -#endif /* WITH_INKJAR */ - /* Local Variables: mode:c++ diff --git a/src/io/CMakeLists.txt b/src/io/CMakeLists.txt index ef577b014..5ab48ab84 100644 --- a/src/io/CMakeLists.txt +++ b/src/io/CMakeLists.txt @@ -3,7 +3,6 @@ set(io_SRC base64stream.cpp bufferstream.cpp gzipstream.cpp - inkjar.cpp inkscapestream.cpp resource.cpp stringstream.cpp @@ -16,7 +15,6 @@ set(io_SRC base64stream.h bufferstream.h gzipstream.h - inkjar.h inkscapestream.h resource.h stringstream.h diff --git a/src/io/inkjar.cpp b/src/io/inkjar.cpp deleted file mode 100644 index 345455c4a..000000000 --- a/src/io/inkjar.cpp +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Copyright (C) 1999, 2000 Bryan Burns - * Copyright (C) 2004 Johan Ceuppens - * - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -/* - * TODO/FIXME: - * - configure #ifdefs should be enabled - * - move to cstdlib instead of stdlib.h etc. - * - remove exit functions - * - move to clean C++ code - * - windowsify - * - remove a few g_free/g_mallocs - * - unseekable files - * - move to LGPL by rewriting macros - * - crcs for compressed files - * - put in eof - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - - -//#ifdef STDC_HEADERS -//#endif - -//#ifdef HAVE_UNISTD_H -//#endif - -//#ifdef HAVE_SYS_PARAM_H -//#else -//#define MAXPATHLEN 1024 -//#endif - -//#ifdef HAVE_DIRENT_H -//#endif - -//#ifdef HAVE_FCNTL_H -#include -//#endif - -#include -#include -#include -#include -#include - -#include "inkjar.h" - -#include -#ifdef WORDS_BIGENDIAN - -#define L2BI(l) ((l & 0xff000000) >> 24) | \ -((l & 0x00ff0000) >> 8) | \ -((l & 0x0000ff00) << 8) | \ -((l & 0x000000ff) << 24); - -#define L2BS(l) ((l & 0xff00) >> 8) | ((l & 0x00ff) << 8); - -#endif - -namespace Inkjar { - -JarFile::JarFile(gchar const*new_filename) : - _file(NULL), - _filename(g_strdup(new_filename)), - _last_filename(NULL) -{} - -//fixme: the following should probably just return a const gchar* and not -// use strdup -gchar *JarFile::get_last_filename() const -{ - return (_last_filename != NULL ? g_strdup(_last_filename) : NULL); -} - -JarFile::~JarFile() -{ - if (_filename != NULL) - g_free(_filename); - if (_last_filename != NULL) - g_free(_last_filename); -} - -bool JarFile::init_inflation() -{ - memset(&_zs, 0, sizeof(z_stream)); - - _zs.zalloc = Z_NULL; - _zs.zfree = Z_NULL; - _zs.opaque = Z_NULL; - - if(inflateInit2(&_zs, -15) != Z_OK) { - fprintf(stderr,"error initializing inflation!\n"); - return false; - } - - return true; -} - -bool JarFile::open() -{ - if (_file != NULL) { - fclose(_file); - } - if ((_file = fopen(_filename, "r")) == NULL) { - fprintf(stderr, "open failed.\n"); - return false; - } - if (!init_inflation()) { - return false; - } - else { - return true; - } -} - -bool JarFile::close() -{ - if (_file != NULL && (fclose(_file) == 0)) { - inflateEnd(&_zs); - return true; - } - return false; -} - -bool JarFile::read_signature() -{ - guint8 *bytes = (guint8 *)g_malloc(sizeof(guint8) * 4); - if (!read(bytes, 4)) { - g_free(bytes); - return false; - } - - guint32 signature = UNPACK_UB4(bytes, 0); - g_free(bytes); - -#ifdef DEBUG - std::printf("signature is %x\n", signature); -#endif - - if (signature == 0x08074b50) { - //skip data descriptor - bytes = (guint8 *)g_malloc(sizeof(guint8) * 12); - if (!read(bytes, 12)) { - g_free(bytes); - return false; - } else { - g_free(bytes); - } - } else if (signature == 0x02014b50 || signature == 0x04034b50) { - return true; - } else { - return false; - } - return false; -} - -guint32 JarFile::get_crc(guint8 *bytes, guint16 flags) -{ - guint32 crc = 0; - //no data descriptor - if (!(flags & 0x0008)) { - crc = UNPACK_UB4(bytes, LOC_CRC); - -#ifdef DEBUG - std::printf("CRC from file is %x\n", crc); -#endif - } - - return crc; -} - -guint8 *JarFile::read_filename(guint16 filename_length) -{ - guint8 *filename = (guint8 *)g_malloc(sizeof(guint8) - * (filename_length+1)); - if (!read(filename, filename_length)) { - g_free(filename); - return NULL; - } - filename[filename_length] = '\0'; - -#ifdef DEBUG - std::printf("Filename is %s\n", filename); -#endif - - return filename; -} - -bool JarFile::check_compression_method(guint16 method, guint16 flags) -{ - return !(method != 8 && flags & 0x0008); -} - -GByteArray *JarFile::get_next_file_contents() -{ - guint8 *bytes; - GByteArray *gba = g_byte_array_new(); - - read_signature(); - - //get compressed size - bytes = (guint8 *)g_malloc(sizeof(guint8) * 30); - if (!read(bytes+4, 26)) { - g_free(bytes); - return NULL; - } - guint32 compressed_size = UNPACK_UB4(bytes, LOC_CSIZE); - guint16 filename_length = UNPACK_UB2(bytes, LOC_FNLEN); - guint16 eflen = UNPACK_UB2(bytes, LOC_EFLEN); - guint16 flags = UNPACK_UB2(bytes, LOC_EXTRA); - guint16 method = UNPACK_UB2(bytes, LOC_COMP); - - if (filename_length == 0) { - g_byte_array_free(gba, TRUE); - if (_last_filename != NULL) - g_free(_last_filename); - _last_filename = NULL; - g_free(bytes); - return NULL; - } - - -#ifdef DEBUG - std::printf("Compressed size is %u\n", compressed_size); - std::printf("Filename length is %hu\n", filename_length); - std::printf("Extra field length is %hu\n", eflen); - std::printf("Flags are %#hx\n", flags); - std::printf("Compression method is %#hx\n", method); -#endif - - guint32 crc = get_crc(bytes, flags); - - gchar *filename = (gchar *)read_filename(filename_length); - g_free(bytes); - - if (filename == NULL) - return NULL; - - if (_last_filename != NULL) - g_free(_last_filename); - _last_filename = filename; - - //check if this is a directory and skip - - char *c_ptr; - if ((c_ptr = std::strrchr(filename, '/')) != NULL) { - if (*(++c_ptr) == '\0') { - return NULL; - } - } - - if (!check_compression_method(method, flags)) { - std::fprintf(stderr, "error in jar file\n"); - return NULL; - } - - if (method == 8 || flags & 0x0008) { - unsigned int file_length = 0;//uncompressed file length - fseek(_file, eflen, SEEK_CUR); - guint8 *file_data = get_compressed_file(compressed_size, file_length, - crc, flags); - if (file_data == NULL) { - g_byte_array_free(gba, FALSE); - return NULL; - } - g_byte_array_append(gba, file_data, file_length); - } else if (method == 0) { - guint8 *file_data = get_uncompressed_file(compressed_size, crc, - eflen, flags); - - if (file_data == NULL) { - g_byte_array_free(gba, TRUE); - return NULL; - } - g_byte_array_append(gba, file_data, compressed_size); - } else { - fseek(_file, compressed_size+eflen, SEEK_CUR); - g_byte_array_free(gba, FALSE); - return NULL; - } - - - return gba; -} - -guint8 *JarFile::get_uncompressed_file(guint32 compressed_size, guint32 crc, - guint16 eflen, guint16 flags) -{ - GByteArray *gba = g_byte_array_new(); - unsigned int out_a = 0; - unsigned int in_a = compressed_size; - guint8 *bytes; - guint32 crc2 = 0; - - crc2 = crc32(crc2, NULL, 0); - - bytes = (guint8 *)g_malloc(sizeof(guint8) * RDSZ); - while(out_a < compressed_size){ - unsigned int nbytes = (in_a > RDSZ ? RDSZ : in_a); - - if (!(nbytes = read(bytes, nbytes))) { - g_free(bytes); - return NULL; - } - - crc2 = crc32(crc2, (Bytef*)bytes, nbytes); - - g_byte_array_append (gba, bytes, nbytes); - out_a += nbytes; - in_a -= nbytes; - -#ifdef DEBUG - std::printf("%u bytes written\n", out_a); -#endif - } - fseek(_file, eflen, SEEK_CUR); - g_free(bytes); - - if (!check_crc(crc, crc2, flags)) { - bytes = gba->data; - g_byte_array_free(gba, FALSE);//FALSE argument does not free actual data - return NULL; - } - - return bytes; -} - -int JarFile::read(guint8 *buf, unsigned int count) -{ - size_t nbytes; - if ((nbytes = fread(buf, 1, count, _file)) != count) { - fprintf(stderr, "read error\n"); - exit(1); - return 0; - } - return nbytes; -} - -/* FIXME: this could probably use ZlibBuffer */ -guint8 *JarFile::get_compressed_file(guint32 compressed_size, - unsigned int& file_length, - guint32 oldcrc, guint16 flags) -{ - if (compressed_size == 0) - return NULL; - - guint8 in_buffer[RDSZ]; - guint8 out_buffer[RDSZ]; - size_t nbytes; - unsigned int leftover_in = compressed_size; - GByteArray *gba = g_byte_array_new(); - - _zs.avail_in = 0; - guint32 crc = crc32(0, Z_NULL, 0); - - do { - if (!_zs.avail_in) { - nbytes = fread(in_buffer, 1, - (leftover_in < RDSZ ? leftover_in : RDSZ), _file); - - if(ferror(_file) != 0) { - fprintf(stderr, "jarfile read error"); - } - - _zs.avail_in = nbytes; - _zs.next_in = in_buffer; - crc = crc32(crc, in_buffer, _zs.avail_in); - leftover_in -= RDSZ; - } - _zs.next_out = out_buffer; - _zs.avail_out = RDSZ; - - int ret = inflate(&_zs, Z_NO_FLUSH); - if (RDSZ != _zs.avail_out) { - unsigned int tmp_len = RDSZ - _zs.avail_out; - guint8 *tmp_bytes = (guint8 *)g_malloc(sizeof(guint8) - * tmp_len); - memcpy(tmp_bytes, out_buffer, tmp_len); - g_byte_array_append(gba, tmp_bytes, tmp_len); - } - - if (ret == Z_STREAM_END) { - break; - } - if (ret != Z_OK) - std::printf("decompression error %d\n", ret); - } while (_zs.total_in < compressed_size); - - file_length = _zs.total_out; -#ifdef DEBUG - std::printf("done inflating\n"); - std::printf("%d bytes left over\n", _zs.avail_in); - std::printf("CRC is %x\n", crc); -#endif - - guint8 *ret_bytes; - if (check_crc(oldcrc, crc, flags) && gba->len > 0) - ret_bytes = gba->data; - else - ret_bytes = NULL; - g_byte_array_free(gba, FALSE); - - inflateReset(&_zs); - return ret_bytes; -} - -bool JarFile::check_crc(guint32 oldcrc, guint32 crc, guint16 flags) -{ - //fixme: does not work yet - - if(flags & 0x0008) { - guint8 *bytes = (guint8 *)g_malloc(sizeof(guint8) * 16); - if (!read(bytes, 16)) { - g_free(bytes); - return false; - } - - guint32 signature = UNPACK_UB4(bytes, 0); - g_free(bytes); - if(signature != 0x08074b50) { - fprintf(stderr, "missing data descriptor!\n"); - } - - crc = UNPACK_UB4(bytes, 4); - - } - if (oldcrc != crc) { -#ifdef DEBUG - std::fprintf(stderr, "Error! CRCs do not match! Got %x, expected %x\n", - oldcrc, crc); -#endif - } - return true; -} - -JarFile::JarFile(JarFile const& rhs) -{ - *this = rhs; -} - -JarFile& JarFile::operator=(JarFile const& rhs) -{ - if (this == &rhs) - return *this; - - _zs = rhs._zs;//fixme - if (_filename == NULL) - _filename = NULL; - else - _filename = g_strdup(rhs._filename); - if (_last_filename == NULL) - _last_filename = NULL; - else - _last_filename = g_strdup(rhs._last_filename); - _file = rhs._file; - - return *this; -} - - -///////////////////////// -// JarFileReader // -///////////////////////// - -GByteArray *JarFileReader::get_next_file() -{ - if (_state == CLOSED) { - _jarfile.open(); - _state = OPEN; - } - - return _jarfile.get_next_file_contents(); -} - -JarFileReader& JarFileReader::operator=(JarFileReader const& rhs) -{ - if (&rhs == this) - return *this; - - _jarfile = rhs._jarfile; - _state = rhs._state; - - return *this; -} - -/* - * If the filename gets reset, a jarfile object gets generated again, - * ready to be opened for reading. - */ -void JarFileReader::set_filename(gchar const *new_filename) -{ - _jarfile.close(); - _jarfile = JarFile(new_filename); -} - -void JarFileReader::set_jarfile(JarFile const& new_jarfile) -{ - _jarfile = new_jarfile; -} - -JarFileReader::JarFileReader(JarFileReader const& rhs) -{ - *this = rhs; -} - -} // namespace Inkjar - - -#if 0 //testing code -#include "jar.h" -/* - * This program writes all the files from a jarfile to stdout and inflates - * where needed. - */ -int main(int argc, char *argv[]) -{ - gchar *filename; - if (argc < 2) { - filename = "./ide.jar\0"; - } else { - filename = argv[1]; - } - - Inkjar::JarFileReader jar_file_reader(filename); - - for (;;) { - GByteArray *gba = jar_file_reader.get_next_file(); - if (gba == NULL) { - char *c_ptr; - gchar *last_filename = jar_file_reader.get_last_filename(); - if (last_filename == NULL) - break; - if ((c_ptr = std::strrchr(last_filename, '/')) != NULL) { - if (*(++c_ptr) == '\0') { - g_free(last_filename); - continue; - } - } - } else if (gba->len > 0) - ::write(1, gba->data, gba->len); - else - break; - } - return 0; -} -#endif -// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 : diff --git a/src/io/inkjar.h b/src/io/inkjar.h deleted file mode 100644 index d7de9ff4a..000000000 --- a/src/io/inkjar.h +++ /dev/null @@ -1,162 +0,0 @@ -#ifndef __INKJAR_JAR_H_ -#define __INKJAR_JAR_H_ -/* - * Copyright (C) 1999 Bryan Burns - * Copyright (C) 2004 Johan Ceuppens - * Released under GNU GPL, read the file 'COPYING' for more information - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#if defined(WIN32) || defined(__WIN32__) -# include -#endif - -#ifdef HAVE_ZLIB_H -# include -#endif - -#include - -#include -#include - -namespace Inkjar { - -unsigned const RDSZ = 4096; - -//#define DEBUG 1 //uncommment for debug messages - -enum JarFileReaderState {CLOSED, OPEN}; - -//fixme: The following will be removed -typedef uint8_t ub1; -typedef uint16_t ub2; -typedef uint32_t ub4; - -#define LOC_EXTRA 6 /* extra bytes */ -#define LOC_COMP 8 /* compression method */ -#define LOC_MODTIME 10 /* last modification time */ -#define LOC_MODDATE 12 /* last modification date */ -#define LOC_CRC 14 /* CRC */ -#define LOC_CSIZE 18 /* compressed size */ -#define LOC_USIZE 22 /* uncompressed size */ -#define LOC_FNLEN 26 /* filename length */ -#define LOC_EFLEN 28 /* extra-field length */ - -#define CEN_COMP 10 /* compression method */ -#define CEN_MODTIME 12 -#define CEN_MODDATE 14 -#define CEN_CRC 16 -#define CEN_CSIZE 20 -#define CEN_USIZE 24 -#define CEN_FNLEN 28 -#define CEN_EFLEN 30 -#define CEN_COMLEN 32 -#define CEN_OFFSET 42 - - -/* macros */ -#define PACK_UB4(d, o, v) d[o] = (ub1)((v) & 0x000000ff); \ - d[o + 1] = (ub1)(((v) & 0x0000ff00) >> 8); \ - d[o + 2] = (ub1)(((v) & 0x00ff0000) >> 16); \ - d[o + 3] = (ub1)(((v) & 0xff000000) >> 24) - -#define PACK_UB2(d, o, v) d[o] = (ub1)((v) & 0x00ff); \ - d[o + 1] = (ub1)(((v) & 0xff00) >> 8) - -#define UNPACK_UB4(s, o) (ub4)s[o] + (((ub4)s[o + 1]) << 8) +\ - (((ub4)s[o + 2]) << 16) + (((ub4)s[o + 3]) << 24) - -#define UNPACK_UB2(s, o) (ub2)s[o] + (((ub2)s[o + 1]) << 8) - - - -/* - * JarFile: - * - * This is a wrapper class for canonical jarfile functions like reading, - * writing, seeking etc. JarFile is a dumb class with no state information. - * - * All memory allocations are done with g_malloc. - */ -class JarFile { -public: - - JarFile() : _file(NULL), _filename(NULL), _last_filename(NULL) {} - virtual ~JarFile(); - JarFile(gchar const *new_filename); - - GByteArray *get_next_file_contents(); - gchar *get_last_filename() const; - bool open(); - bool close(); - int read(guint8 *buf, unsigned int count); - - JarFile(JarFile const &rhs); - JarFile &operator=(JarFile const &rhs); - -private: - - FILE *_file; // File descriptor - gchar *_filename; - z_stream _zs; - gchar *_last_filename; - - bool init_inflation(); - bool read_signature(); - guint32 get_crc(guint8 *bytes, guint16 flags); - guint8 *read_filename(guint16 filename_length); - bool check_compression_method(guint16 method, guint16 flags); - bool check_crc(guint32 oldcrc, guint32 crc, guint16 flags); - guint8 *get_compressed_file(guint32 compressed_size, - unsigned int &file_length, - guint32 oldcrc, guint16 flags); - guint8 *get_uncompressed_file(guint32 compressed_szie, guint32 crc, - guint16 eflen, guint16 flags); -}; // class JarFile - - -/* - * JarFileReader: - * - * This provides some smarter functions for operating on a jarfile object - * It should be able to grep for files or return the contents of a specific - * file. - */ - -class JarFileReader { -public: - - JarFileReader(gchar const *new_filename) - : _state(CLOSED), _jarfile(new_filename) {} - JarFileReader() : _state(CLOSED) {} - virtual ~JarFileReader() { if (_state == OPEN) _jarfile.close(); } - //fixme return types are incorrect - GByteArray *get_next_file();//fixme clean up return type - void set_filename(gchar const *new_filename); - void set_jarfile(JarFile const &new_jarfile); - gchar *get_last_filename() const { return _jarfile.get_last_filename(); }; - JarFileReader(JarFileReader const &rhs); - JarFileReader &operator=(JarFileReader const &rhs); -private: - JarFileReaderState _state; - JarFile _jarfile; - -}; // class JarFileReader - -} // namespace Inkjar -#endif // header guard - -/* - 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 : -- cgit v1.2.3 From 2e0b7a4f08c74d8bd326616b5d48b0d1c8614672 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 25 Aug 2016 23:24:46 +0100 Subject: Inkview: C++ify (bzr r15076) --- src/inkview.cpp | 103 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 49 deletions(-) diff --git a/src/inkview.cpp b/src/inkview.cpp index 694869bf8..434680884 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -38,11 +38,10 @@ #include #include +#include #include #include -// #include - #include #include @@ -93,33 +92,8 @@ public: set_title(_doc->getName()); } - SPSlideShow(std::vector &slides) - : - _slides(slides), - _current(0), - _doc(SPDocument::createNewDoc(_slides[0].c_str(), true, false)), - _view(NULL), - is_fullscreen(false), - _timer(0) - { - update_title(); - - set_default_size(MIN ((int)_doc->getWidth().value("px"), (int)gdk_screen_width() - 64), - MIN ((int)_doc->getHeight().value("px"), (int)gdk_screen_height() - 64)); - - g_signal_connect (G_OBJECT (gobj()), "delete_event", (GCallback) sp_svgview_main_delete, this); - g_signal_connect (G_OBJECT (gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, this); - - _doc->ensureUpToDate(); - _view = sp_svg_view_widget_new (_doc); - _doc->doUnref (); - SP_SVG_VIEW_WIDGET(_view)->setResize( false, _doc->getWidth().value("px"), _doc->getHeight().value("px") ); - gtk_widget_show (_view); - add(*Glib::wrap(_view)); - - show(); - } - + SPSlideShow(std::vector const &slides); + void set_timer(int timer) {_timer = timer;} void control_show(); void show_next(); @@ -134,9 +108,38 @@ protected: int current); }; +SPSlideShow::SPSlideShow(std::vector const &slides) + : + _slides(slides), + _current(0), + _doc(SPDocument::createNewDoc(_slides[0].c_str(), true, false)), + _view(NULL), + is_fullscreen(false), + _timer(0) +{ + update_title(); + + auto default_screen = Gdk::Screen::get_default(); + + set_default_size(MIN ((int)_doc->getWidth().value("px"), default_screen->get_width() - 64), + MIN ((int)_doc->getHeight().value("px"), default_screen->get_height() - 64)); + + g_signal_connect (G_OBJECT (gobj()), "delete_event", (GCallback) sp_svgview_main_delete, this); + g_signal_connect (G_OBJECT (gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, this); + + _doc->ensureUpToDate(); + _view = sp_svg_view_widget_new (_doc); + _doc->doUnref (); + SP_SVG_VIEW_WIDGET(_view)->setResize( false, _doc->getWidth().value("px"), _doc->getHeight().value("px") ); + gtk_widget_show (_view); + add(*Glib::wrap(_view)); + + show(); +} + static void usage(); -static GtkWidget *ctrlwin = NULL; +static Gtk::Window *ctrlwin = NULL; // Dummy functions to keep linker happy int sp_main_gui (int, char const**) { return 0; } @@ -190,7 +193,7 @@ static int sp_svgview_main_key_press (GtkWidget */*widget*/, case GDK_KEY_Escape: case GDK_KEY_q: case GDK_KEY_Q: - gtk_main_quit(); + Gtk::Main::quit(); break; default: break; @@ -283,7 +286,7 @@ int main (int argc, char **argv) if (stat(file.c_str(), &st) || !S_ISREG (st.st_mode) || (st.st_size < 64)) { - fprintf(stderr, "could not open file %s\n", file.c_str()); + std::cerr << "could not open file " << file << std::endl; } else { auto doc = SPDocument::createNewDoc(file.c_str(), TRUE, false); @@ -310,6 +313,8 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, GdkEvent */*event*/, void */*data*/) { + if(ctrlwin) delete ctrlwin; + ctrlwin = NULL; return FALSE; } @@ -320,45 +325,45 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, void SPSlideShow::control_show() { if (!ctrlwin) { - ctrlwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_resizable(GTK_WINDOW(ctrlwin), FALSE); - gtk_window_set_transient_for(GTK_WINDOW(ctrlwin), GTK_WINDOW(this->gobj())); - g_signal_connect(G_OBJECT (ctrlwin), "key_press_event", (GCallback) sp_svgview_main_key_press, this); - g_signal_connect(G_OBJECT (ctrlwin), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); - auto t = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); - gtk_container_add(GTK_CONTAINER(ctrlwin), t); + ctrlwin = new Gtk::Window(); + ctrlwin->set_resizable(false); + ctrlwin->set_transient_for(*this); + g_signal_connect(G_OBJECT (ctrlwin->gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, this); + g_signal_connect(G_OBJECT (ctrlwin->gobj()), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); + auto t = Gtk::manage(new Gtk::ButtonBox()); + ctrlwin->add(*t); auto btn_go_first = Gtk::manage(new Gtk::Button()); auto img_go_first = Gtk::manage(new Gtk::Image()); img_go_first->set_from_icon_name(INKSCAPE_ICON("go-first"), Gtk::ICON_SIZE_BUTTON); btn_go_first->set_image(*img_go_first); - gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_first->gobj())); + t->add(*btn_go_first); btn_go_first->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_first)); auto btn_go_prev = Gtk::manage(new Gtk::Button()); auto img_go_prev = Gtk::manage(new Gtk::Image()); img_go_prev->set_from_icon_name(INKSCAPE_ICON("go-previous"), Gtk::ICON_SIZE_BUTTON); btn_go_prev->set_image(*img_go_prev); - gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_prev->gobj())); + t->add(*btn_go_prev); btn_go_prev->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_prev)); auto btn_go_next = Gtk::manage(new Gtk::Button()); auto img_go_next = Gtk::manage(new Gtk::Image()); img_go_next->set_from_icon_name(INKSCAPE_ICON("go-next"), Gtk::ICON_SIZE_BUTTON); btn_go_next->set_image(*img_go_next); - gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_next->gobj())); + t->add(*btn_go_next); btn_go_next->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::show_next)); auto btn_go_last = Gtk::manage(new Gtk::Button()); auto img_go_last = Gtk::manage(new Gtk::Image()); img_go_last->set_from_icon_name(INKSCAPE_ICON("go-last"), Gtk::ICON_SIZE_BUTTON); btn_go_last->set_image(*img_go_last); - gtk_container_add(GTK_CONTAINER(t), GTK_WIDGET(btn_go_last->gobj())); + t->add(*btn_go_last); btn_go_last->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_last)); - gtk_widget_show_all(ctrlwin); + ctrlwin->show_all(); } else { - gtk_window_present(GTK_WINDOW(ctrlwin)); + ctrlwin->present(); } } @@ -369,10 +374,10 @@ void SPSlideShow::waiting_cursor() get_window()->set_cursor(waiting); if (ctrlwin) { - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), waiting->gobj()); + ctrlwin->get_window()->set_cursor(waiting); } - while(gtk_events_pending()) { - gtk_main_iteration(); + while(Gtk::Main::events_pending()) { + Gtk::Main::iteration(); } } @@ -380,7 +385,7 @@ void SPSlideShow::normal_cursor() { get_window()->set_cursor(); if (ctrlwin) { - gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(ctrlwin)), NULL); + ctrlwin->get_window()->set_cursor(); } } -- cgit v1.2.3 From 89375d1e62cb033ec870e9b8e7837437b71737e3 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Thu, 25 Aug 2016 23:58:15 +0100 Subject: Inkview: Make ctrlwin private (bzr r15077) --- src/inkview.cpp | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/inkview.cpp b/src/inkview.cpp index 434680884..7acaa83dd 100644 --- a/src/inkview.cpp +++ b/src/inkview.cpp @@ -76,11 +76,13 @@ static int sp_svgview_main_key_press (GtkWidget *widget, * The main application window for the slideshow */ class SPSlideShow : public Gtk::ApplicationWindow { +private: std::vector _slides; ///< List of filenames for each slide int _current; ///< Index of the currently displayed slide SPDocument *_doc; ///< The currently displayed slide int _timer; GtkWidget *_view; + Gtk::Window *_ctrlwin; ///< Window containing slideshow control buttons public: /// Current state of application (full-screen or windowed) @@ -101,6 +103,9 @@ public: void goto_first(); void goto_last(); + static int ctrlwin_delete (GtkWidget *widget, + GdkEvent *event, + void *data); protected: void waiting_cursor(); void normal_cursor(); @@ -115,7 +120,8 @@ SPSlideShow::SPSlideShow(std::vector const &slides) _doc(SPDocument::createNewDoc(_slides[0].c_str(), true, false)), _view(NULL), is_fullscreen(false), - _timer(0) + _timer(0), + _ctrlwin(NULL) { update_title(); @@ -139,7 +145,6 @@ SPSlideShow::SPSlideShow(std::vector const &slides) static void usage(); -static Gtk::Window *ctrlwin = NULL; // Dummy functions to keep linker happy int sp_main_gui (int, char const**) { return 0; } @@ -309,13 +314,14 @@ int main (int argc, char **argv) return 0; } -static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, - GdkEvent */*event*/, - void */*data*/) +int SPSlideShow::ctrlwin_delete (GtkWidget */*widget*/, + GdkEvent */*event*/, + void *data) { - if(ctrlwin) delete ctrlwin; + auto ss = reinterpret_cast(data); + if(ss->_ctrlwin) delete ss->_ctrlwin; - ctrlwin = NULL; + ss->_ctrlwin = NULL; return FALSE; } @@ -324,14 +330,14 @@ static int sp_svgview_ctrlwin_delete (GtkWidget */*widget*/, */ void SPSlideShow::control_show() { - if (!ctrlwin) { - ctrlwin = new Gtk::Window(); - ctrlwin->set_resizable(false); - ctrlwin->set_transient_for(*this); - g_signal_connect(G_OBJECT (ctrlwin->gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, this); - g_signal_connect(G_OBJECT (ctrlwin->gobj()), "delete_event", (GCallback) sp_svgview_ctrlwin_delete, NULL); + if (!_ctrlwin) { + _ctrlwin = new Gtk::Window(); + _ctrlwin->set_resizable(false); + _ctrlwin->set_transient_for(*this); + g_signal_connect(G_OBJECT (_ctrlwin->gobj()), "key_press_event", (GCallback) sp_svgview_main_key_press, this); + g_signal_connect(G_OBJECT (_ctrlwin->gobj()), "delete_event", (GCallback) SPSlideShow::ctrlwin_delete, this); auto t = Gtk::manage(new Gtk::ButtonBox()); - ctrlwin->add(*t); + _ctrlwin->add(*t); auto btn_go_first = Gtk::manage(new Gtk::Button()); auto img_go_first = Gtk::manage(new Gtk::Image()); @@ -361,9 +367,9 @@ void SPSlideShow::control_show() t->add(*btn_go_last); btn_go_last->signal_clicked().connect(sigc::mem_fun(*this, &SPSlideShow::goto_last)); - ctrlwin->show_all(); + _ctrlwin->show_all(); } else { - ctrlwin->present(); + _ctrlwin->present(); } } @@ -373,8 +379,8 @@ void SPSlideShow::waiting_cursor() auto waiting = Gdk::Cursor::create(display, Gdk::WATCH); get_window()->set_cursor(waiting); - if (ctrlwin) { - ctrlwin->get_window()->set_cursor(waiting); + if (_ctrlwin) { + _ctrlwin->get_window()->set_cursor(waiting); } while(Gtk::Main::events_pending()) { Gtk::Main::iteration(); @@ -384,8 +390,8 @@ void SPSlideShow::waiting_cursor() void SPSlideShow::normal_cursor() { get_window()->set_cursor(); - if (ctrlwin) { - ctrlwin->get_window()->set_cursor(); + if (_ctrlwin) { + _ctrlwin->get_window()->set_cursor(); } } -- cgit v1.2.3 From 1afdcf2f5ea71dc319f810203d0113e24a6bc1ff Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Sat, 27 Aug 2016 12:22:52 +0200 Subject: [Bug #1590529] Italian tutorials translation update (and new Elements tutorial translation). Fixed bugs: - https://launchpad.net/bugs/1590529 (bzr r15078) --- share/tutorials/tutorial-basic.it.svg | 564 ++++---- share/tutorials/tutorial-elements.it.svg | 674 ++++++++++ share/tutorials/tutorial-shapes.it.svg | 2048 ++++++++++++++++-------------- 3 files changed, 2036 insertions(+), 1250 deletions(-) create mode 100644 share/tutorials/tutorial-elements.it.svg diff --git a/share/tutorials/tutorial-basic.it.svg b/share/tutorials/tutorial-basic.it.svg index 54014cb88..10fb18f99 100644 --- a/share/tutorials/tutorial-basic.it.svg +++ b/share/tutorials/tutorial-basic.it.svg @@ -40,414 +40,414 @@ Ctrl+freccia giù per scorrere il documento - + ::BASE - + Questo tutorial mostra l'uso di base di Inkscape. Questo è un normale documento SVG ed è possibile aprirlo, modificarlo, copiarlo e salvarlo. - + Il tutorial di base si occupa della navigazione nell'ambiente grafico, della gestione dei documenti, degli strumenti di base, delle tecniche di selezione, della trasformazione degli oggetti selezionati, del raggruppamento, del riempimento e del contorno degli oggetti, del loro allineamento e del loro ordinamento lungo l'asse verticale. Per argomenti avanzati consulta gli altri tutorial del menu Aiuto. - - Navigazione nell'area di lavoro + + Navigazione nell'area di lavoro - + Ci sono molti modi per scorrere l'area di lavoro. Ad esempio tramite la tastiera con Ctrl+freccia (lo si può provare subito!). È possibile traslare il documento tenendo premuto il pulsante centrale del mouse, oppure semplicemente usando le barre di scorrimento (che si possono far apparire e scomparire premendo Ctrl+B). Si può anche usare la rotella del mouse per far scorrere la pagina verticalmente, oppure orizzontalmente premendo anche Maiusc. - - Ingrandimento + + Ingrandimento - + Il modo più semplice è quello di premere i tasti - e + (o =). Altrimenti si possono usare Ctrl+tasto centrale (del mouse) o Ctrl+tasto destro per ingrandire, Maiusc+tasto centrale o Maiusc+tasto destro per rimpicciolire, o anche ruotare la rotella mentre si tiene premuto il tasto Ctrl. Nella parte in basso a destra si trova un'area di testo in cui inserire con precisione il valore dell'ingrandimento in percentuale (premendo Invio successivamente). Inoltre si può usare lo strumento Ingranditore (nella barra degli strumenti sulla sinistra) che permette di ingrandire un'area selezionandola con il mouse. - + Inkscape mantiene anche una cronologia degli ingrandimenti usati nella sessione di lavoro corrente. Premi il tasto ` per tornare all'ingrandimento precedente e Maiusc+` per quello successivo. - - Strumenti + + Strumenti - + La barra verticale sulla sinistra mostra gli strumenti di disegno e di modifica. Nella parte superiore della finestra, sotto il menu, si trova la Barra dei comandi con i pulsanti dei comandi generali e la Barra dei controlli strumento con controlli specifici per ogni strumento. La Barra di stato, nella parte inferiore della finestra, mostra utili consigli e messaggi contestuali. - + Molte operazioni sono disponibili mediante scorciatoie da tastiera. Apri Aiuto > Scorciatoie con mouse e tastiera per vedere la lista completa. - - Creazione e gestione dei documenti + + Creazione e gestione dei documenti - + - Per creare un nuovo documento vuoto, si può usare File > Nuovo > Predefinito o premere Ctrl+N. Per creare un nuovo documento da uno dei modelli di Inkscape, si può usare File > Nuovo > Modelli... o premere Ctrl+Alt+N + Per creare un nuovo documento vuoto, si può usare File > Nuovo o premere Ctrl+N. Per creare un nuovo documento da uno dei modelli di Inkscape, si può usare File > Nuovo da modello... o premere Ctrl+Alt+N - + Per aprire un documento SVG esistente, usare File > Apri (Ctrl+O). Per salvare, usare File > Salva (Ctrl+S) o Salva come… (Maiusc+Ctrl+S) per salvare con un nuovo nome. (Inkscape può essere ancora instabile, è quindi importante ricordarsi di salvare spesso!) - + Inkscape usa il formato SVG (Scalable Vector Graphics) per i suoi file. SVG è uno standard aperto ampiamente supportato dai software di grafica. I file SVG sono basati su XML e possono essere modificati con qualunque editor di testo o XML (oltre che con Inkscape). Oltre a SVG, Inkscape può importare ed esportare diversi altri formati (EPS, PNG). - + Inkscape apre una finestra separata per ogni documento. È possibile spostarsi tra di loro mediante il proprio gestore di finestre (es. Alt+Tab), oppure usare la scorciatoia di Inkscape, Ctrl+Tab, che mostrerà ciclicamente tutte le finestre di documenti aperte. (Per far pratica prova a creare un nuovo documento e spostarti tra i due documenti) Nota: Inkscape gestisce queste finestre come le schede di un browser web, ciò significa che la scorciatoia Ctrl+Tab funziona solamente con i documenti eseguiti nello stesso processo. Se si aprono più file da un gestore file o si avviano più processi di Inkscape, questa non funzionerà. - - Creazione di forme + + Creazione di forme - + È tempo di qualche simpatica figura! Clicca sullo strumento Rettangolo nella barra (o premi F4) e trascina il mouse, sia qui che in un nuovo documento: - - - - - - - - - - - - + + + + + + + + + + + + Come si può vedere, i rettangoli in maniera predefinita sono blu, con un contorno nero, e completamente opaco. Si vedrà in seguito come cambiare questo comportamento. Con gli altri strumenti è possibile creare anche ellissi, stelle e spirali: - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Questi strumenti sono conosciuti come forme. Ogni forma presenta uno o più punti di modifica sotto forma di maniglie; si può provare a spostarli per vedere come le forme reagiscono. Il Pannello di controllo per gli strumenti di forma è un altro modo per modificare una figura; questi controlli modificano la figura selezionata (cioè quella che mostra i punti di modifica) e impostano i parametri predefiniti per le nuove figure. - + Per annullare l'ultima azione premere Ctrl+Z. (Se si cambia idea si può ripetere l'ultima azione annullata premendo Maiusc+Ctrl+Z.) - - Muovere, ridimensionare, ruotare + + Muovere, ridimensionare, ruotare - + Lo strumento più usato in Inkscape è il Selettore. Clicca sul primo tasto in alto sulla barra (quello con la freccia), o premi F1 o Spazio. Ora si può selezionare qualunque oggetto sull'area di lavoro. Prova a cliccare sul rettangolo qui sotto: - - + + Appariranno otto frecce modificatrici attorno all'oggetto. Ora è possibile: - - + + Muovere l'oggetto trascinandolo. (Premi Ctrl per limitare lo spostamento nelle sole direzioni orizzontale e verticale.) - - + + Ridimensionare l'oggetto cliccando sulle frecce e trascinando. (Premi Ctrl per mantenere le proporzioni tra altezza e larghezza.) - + Ora prova a cliccare nuovamente sul rettangolo. Le maniglie sono cambiate. Ora è possibile: - - + + Ruotare l'oggetto sempre cliccando e trascinando. (Premi Ctrl per ruotare di 15 gradi alla volta. Per cambiare centro di rotazione basta spostare la croce.) - - + + Distorcere l'oggetto trascinando le maniglie, tranne quelle in angolo. (Premi Ctrl per distorcere a scatti di 15 gradi.) - + Mentre si usa il Selettore, è anche possibile modificare i campi numerici nella barra di controllo (sopra la tela) per impostare valori esatti per le coordinate (X e Y) e le dimensioni (L e H) della selezione. - - Trasformazioni tramite i tasti + + Trasformazioni tramite i tasti - + Una delle caratteristiche peculiari di Inkscape è la sua grande usabilità da tastiera. Non c'è nulla che non si possa fare usando la tastiera, persino la trasformazione degli oggetti. - + Si può usare la tastiera per muovere (con i tasti freccia), ridimensionare (con i tasti < e >), ruotare (con i tasti [ e ]) gli oggetti. Normalmente il movimento e il ridimensionamento sono di 2 pixel, ma premendo Maiusc, diventano 10 volte superiori. Ctrl+> e Ctrl+< ridimensionano rispettivamente del 200% o 50% dall'originale. Le rotazioni sono normalmente di 15 gradi; premendo Ctrl diventano di 90 gradi. - + Tuttavia, le più utili sono le trasformazioni a livello pixel, che si fanno usando Alt insieme ai tasti di trasformazione precedenti. Per esempio Alt+freccia muoverà la selezione di un pixel dell'attuale zoom (cioè 1 pixel di schermo, da non confondere con l'unità px che è un'unita di lunghezza del SVG indipendente dall'ingrandimento). Questo significa che ingrandendo il disegno, facendo Alt+freccia si otterrà un movimento assoluto più piccolo che però apparirà ancora di un pixel sullo schermo. E' possibile posizionare un oggetto con precisione arbitraria semplicemente ingrandendo o rimpicciolendo a piacere. - + In maniera simile, Alt+> e Alt+< ridimensionano la selezione così che la sua dimensione visibile cambi di un pixel di schermo, mentre Alt+[ and Alt+] ruotano in modo tale che il punto più lontano dal centro si muova di un pixel di schermo. - + Attenzione: gli utenti Linux potrebbero non ottenere i risultati voluti con Alt+frecce e alcune altre combinazioni di tasti se il loro gestore di finestre intercetta tali eventi prima di Inkscape. Una soluzione veloce è quella di cambiare la configurazione del gestore di finestre. - - Selezioni multiple + + Selezioni multiple - + Si possono selezionare più oggetti contemporaneamente cliccando mentre si tiene premuto Maiusc. In alternativa si può cliccare e trascinare sugli oggetti che si vogliono selezionare; quest'ultima tecnica è detta selezione ad elastico (il puntatore crea un elastico quando viene spostato su uno spazio vuoto; premendo Maiusc prima di iniziare lo spostamento verrà creato sempre un elastico). Fai pratica selezionando tutti e tre i seguenti oggetti: - - - - + + + + Ora usa la selezione ad elastico (Maiusc+trascinamento o semplicemente trascinando) per selezionare le due ellissi ma non il rettangolo: - - - - + + + + Ogni singolo oggetto all'interno di una selezione mostra un contorno di selezione, solitamente una cornice rettangolare tratteggiata. Ciò permette di vedere cosa è selezionato e cosa non lo è. Per esempio, se si selezionano entrambe le ellissi e il rettangolo, senza i contorni sarebbe difficile capire se le ellissi sono selezionate o meno. - + Cliccando tenendo premuto Maiusc su un oggetto selezionato lo si esclude dalla selezione. Prova a selezionare tutti e tre gli oggetti precedenti ed escludere le ellissi usando Maiusc+clic. - + Premendo Esc vengono deselezionati tutti gli oggetti. Ctrl+A seleziona tutti gli oggetti nel livello corrente (se non sono stati creati ulteriori livelli, questo equivale a selezionare tutti gli oggetti nel documento). - - Raggruppamento + + Raggruppamento - + Parecchi oggetti possono essere combinati insieme a formare un gruppo. Questo si comporta come un unico oggetto quando lo si trasforma o lo si sposta. Qui sotto, i tre oggetti sulla sinistra sono indipendenti, mentre gli stessi tre oggetti sulla destra sono uniti in un gruppo. Prova a spostare il gruppo: - - - - + + + + - + Per creare un gruppo seleziona più oggetti e premi Ctrl+G. Per separare gli oggetti di un gruppo selezionalo e premi Ctrl+U. Anche i gruppi possono essere raggruppati allo stesso modo, in maniera ricorsiva, con profondità arbitraria. Tuttavia Ctrl+U separa solo l'ultimo livello di raggruppamento; per arrivare a separare i singoli oggetti occorrerà premere più volte. - + Non è comunque necessario separare gli oggetti di un gruppo per modificarli. Premendo Ctrl e cliccando sull'oggetto desiderato esso verrà selezionato e potrà essere modificato separatamente. Usando Maiusc+Ctrl+clic si possono modificare più oggetti (all'interno o meno di un gruppo) in selezioni multiple senza preoccuparsi dei raggruppamenti. Prova a muovere o trasformare singoli oggetti del gruppo sopra senza separarlo, prova poi a selezionarlo e deselezionarlo per vedere che esso è ancora un gruppo. - - Riempimento e contorni + + Riempimento e contorni - + - Molte delle funzioni di Inkscape sono disponibili mediante delle finestre di dialogo. Probabilmente il modo più semplice per colorare un oggetto è quello di aprire la finestra dei Campioni di colore dal menu Visualizza (o premere Maiusc+Ctrl+W), selezionare un oggetto e cliccare un campione per colorarlo (cambiarne il colore di riempimento). + Il modo più semplice per colorare un oggetto è quello di selezionarlo e cliccare su uno dei campioni nella paletta sotto l'area di lavoro (cambia il colore di riempimento). Oppure è possibile aprire la finestra dei Campioni dal menu Visualizza (o premere Maiusc+Ctrl+W), selezionare un oggetto e cliccare un campione per colorarlo (cambia il colore di riempimento). - + - + Più potente è la finestra di dialogo Riempimento e contorni raggiungibile dal menu Oggetto (o premendo Maiusc+Ctrl+F). Seleziona l'oggetto da colorare qui sotto e apri la finestra di dialogo. - - + + - + Noterai che questa finestra ha tre schede: Riempimento, Colore contorno, Stile contorno. La prima permette di modificare il riempimento (interno) dell'oggetto selezionato. Mediante i pulsanti appena sotto si può scegliere il tipo di riempimento: nessun riempimento (il bottone con la X), colore uniforme, gradiente lineare o radiale. Per la figura sopra, è attivato il pulsante del riempimento uniforme. - + - + Ancora sotto, si trova un insieme delle tavolozze colore (selettori), ciascuna nella propria scheda: RGB, CMYK, HSL, Ruota. Forse la più utile è quest'ultima, dove si può ruotare il triangolo per scegliere il colore e all'interno scegliere la luminosità. Tutte le tavolozze hanno un selettore per il canale alpha (opacità) per l'oggetto selezionato. - + - + Ogni volta che si seleziona un oggetto, il selettore di colore viene aggiornato per mostrare il riempimento e il contorno corrente (per selezioni multiple, viene mostrato il colore medio). Prova con queste figure o creane delle nuove: - - - - - - - - + + + + + + + + - + Usando la scheda Colore contorno, si può rimuovere il contorno dell'oggetto, o dargli qualsiasi colore o trasparenza: - - - - - - - - - + + + + + + + + + - + L'ultima scheda, Stile contorno, permette di modificare la larghezza e altri parametri del contorno: - - - - - - - - + + + + + + + + - + Infine, invece di un colore uniforme, si possono usare gradienti per il riempimento o per il contorno: @@ -488,42 +488,42 @@ - - - - - - - - + + + + + + + + - + Quando si passa da colore uniforme a gradiente, il nuovo gradiente appena creato usa il precedente colore, andando da trasparente a opaco. Usa lo strumento Gradiente (Ctrl+F1) per orientare le maniglie del gradiente, connesse da una linea che definisce la direzione e la lunghezza del gradiente. Quando una delle maniglie è selezionata (evidenziata in blu), la finestra di dialogo modifica il colore di quel passaggio invece del colore dell'intero oggetto selezionato. - + - + Un altro modo conveniente per cambiare colore ad un oggetto è mediante lo strumento Contagocce (F7). Cliccando in qualsiasi punto nel documento con questo strumento, si assegna il colore del punto cliccato al riempimento dell'oggetto selezionato (Maiusc+clic lo assegna al contorno). - - Duplicazione, allineamento, distribuzione + + Duplicazione, allineamento, distribuzione - + - + Una delle più comuni operazioni è la duplicazione di un oggetto (Ctrl+D). L'oggetto duplicato viene posizionato esattamente sopra l'originale ed è automaticamente selezionato, così da poterlo muovere direttamente con il mouse o le frecce. Per fare pratica, prova a creare una linea con delle copie di questo quadratino nero: - - + + - + È possibile che le copie del quadratino non siano perfettamente allineate. A questo punto è utile la finestra di dialogo Allineamento (Maiusc+Ctrl+A). Seleziona tutti i quadretti (usando Maiusc+clic o la selezione ad elastico), apri la finestra di dialogo e premi il pulsante “Centra sull'asse orizzontaleâ€, poi il pulsante “Distribuisce equamente la distanza orizzontale tra gli oggettiâ€. Gli oggetti ora sono ben allineati ed equidistanti. Qui c'è qualche altro esempio di allineamento e distribuzione: @@ -542,187 +542,187 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ordinamento verticale + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ordinamento verticale - + - + - Il termine ordinamento verticale si riferisce all'ordine dell'impilamento verticale degli oggetti in un disegno, cioè quali oggetti sono in primo piano e oscurano altri. I due comandi nel menu Oggetto, Sposta in cima (tasto Home) e Sposta in fondo (tasto End), servono a spostare gli aggetti selezionati alla sommità o sul fondo dell'ordinamento verticale del livello. Altri due comandi, Alza (PagSu) e Abbassa (PagGiù), spostano in alto o in basso la selezione di un passo alla volta rispetto ad un oggetto non selezionato (contano solo gli oggetti che si sovrappongono alla selezione; se nessun oggetto si sovrappone, Alza e Abbassa spostano rispettivamente in cima o in fondo). + Il termine ordinamento verticale si riferisce all'ordine dell'impilamento verticale degli oggetti in un disegno, cioè quali oggetti sono in primo piano e oscurano altri. I due comandi nel menu Oggetto, Sposta in cima (tasto Home) e Sposta in fondo (tasto End), servono a spostare gli oggetti selezionati alla sommità o sul fondo dell'ordinamento verticale del livello. Altri due comandi, Alza (PagSu) e Abbassa (PagGiù), spostano in alto o in basso la selezione di un passo alla volta rispetto ad un oggetto non selezionato (solo gli oggetti che si trovano più in alto, in base al loro riquadro di delimitazione). - + - + Fai pratica con i seguenti oggetti cambiando l'ordine verticale, in modo da portare alla sommità l'ellisse più a sinistra e sul fondo quella più a destra: - - - - - - - + + + + + + + - + Una scorciatoia molto utile per selezionare è il tasto Tab. Se non è selezionato nulla, con Tab si seleziona l'oggetto più in basso; altrimenti si seleziona l'oggetto appena sopra quello selezionato. Maiusc+Tab opera esattamente al contrario, partendo dal più in alto e procedendo sino al più in basso. Siccome gli oggetti creati vengono posizionati alla sommità, premendo Maiusc+Tab quando non è selezionato nulla, si selezionerà l'ultimo oggetto creato. Fai pratica con questi tasti usandoli sulla pila di ellissi sopra. - - Selezionare al di sotto e spostare + + Selezionare al di sotto e spostare - + - + Cosa fare se l'oggetto voluto è nascosto dietro gli altri? Si può vedere un oggetto dietro un altro se quest'ultimo è (parzialmente) trasparente, ma cliccando si selezionerà quello che sta sopra e non quello desiderato. - + - + Per questo serve Alt+clic. La prima volta esso seleziona l'oggetto sulla sommità, come farebbe un normale clic. Il successivo Alt+clic sullo stesso punto selezionerà quello subito al di sotto, poi quello sotto e così via. Perciò una serie di Alt+clic esegue un ciclo dall'alto al basso attraverso tutti gli oggetti lungo l'asse verticale individuato dal punto cliccato. Quando viene raggiunto l'oggetto più in basso, il successivo Alt+clic selezionerà nuovamente l'oggetto alla sommità. - + - + [Se sei su Linux, è possibile che Alt+clic non funzioni come ci si aspetta. Si potrebbe invece finire a spostare l'intera finestra di Inkscape. Questo accade perché il gestore di finestre usa Alt+clic per un'azione diversa. Un modo per sistemare questo comportamento è andare nelle configurazioni del proprio gestore e disabilitare questa opzione o mapparla sul tasto Meta (ossia il tasto Windows), affinché Inkscape e altre applicazioni possano usare liberamente il tasto Alt.] - + - + Ma una volta selezionato l'oggetto voluto, cosa si può fare con questo? Si possono usare i tasti per trasformarlo e trascinare le maniglie attorno alla selezione. Tuttavia, spostando l'oggetto stesso, si annullerà la selezione corrente e si selezionerà l'oggetto più in alto (questo perché l'operazione di trascinamento lavora sull'oggetto più in alto, ovvero quello subito al di sotto del cursore). Per spostare l'oggetto selezionato si tiene premuto Alt mentre si trascina. In questa maniera si sposterà la selezione corrente, in maniera indipendente da dove si trascina il mouse. - + - + Fai pratica con Alt+clic e Alt+trascinamento su queste due forme marroni sotto un rettangolo verde e trasparente: - - - - - Selezionare oggetti simili + + + + + Selezionare oggetti simili - + - + Inkscape può selezionare altri oggetti simili all'oggetto attualmente selezionato. Per esempio, se vuoi selezionare tutti i quadrati blu, selezionato il primo quadrato blu, usa Modifica > Seleziona stesso > Colore riempimento dal menù. Tutti gli oggetti con la stessa tonalità di blu sono ora selezionati. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Oltre a poter selezionare secondo il colore di riempimento, puoi selezionare più oggetti secondo colore contorno, stile contorno, riempimento & contorni, e tipo oggetto. - - Conclusione + + Conclusione - + - + Con questo si conclude il Tutorial di base. C'è molto più di questo in Inkscape, ma con le tecniche appena descritte è già possibile creare semplici ma utili disegni. Per argomenti più complicati, si consultino gli altri tutorial avanzati nel menu Aiuto > Lezioni. - + diff --git a/share/tutorials/tutorial-elements.it.svg b/share/tutorials/tutorial-elements.it.svg new file mode 100644 index 000000000..abdb2f386 --- /dev/null +++ b/share/tutorials/tutorial-elements.it.svg @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + Ctrl+freccia giù per scorrere il documento + + + + ::ELEMENTI DI GRAFICA + + + + + + + Questo tutorial mostra gli elementi e i principi di grafica normalmente insegnati ai nuovi studenti d'arte per poter comprendere le proprietà utilizzate nella produzione artistica. Questa lista non è esaustiva, quindi è consigliato aggiungere, rimuovere e combinare il materiale per rendere questo tutorial il più completo possibile. + + + + + Elementi + Principi + Colore + Linea + Forma + Spazio + Texture + Valore + Dimensione + Equilibrio + Contrasto + Enfasi + Proporzione + Motivo + Gradazione + Composizione + Panoramica + + Elementi di grafica + + + + + + + I seguenti elementi sono i blocchi fondamentali della progettazione grafica. + + + Linea + + + + + + + Una linea è definita come un segno con una lunghezza e una direzione, creata da un punto che si muove lungo una superficie. Una linea può variare in lunghezza, larghezza, direzione, curvatura e colore. La linea può essere bidimensionale (una matita su carta) o implicitamente tridimensionale. + + + + + + + + + + + + + + + Forma + + + + + + + Una figura piatta è una forma creata quando delle linee si incontrano per racchiudere uno spazio. Un cambiamento di colore o sfumatura può definire una forma. Le forme possono essere suddivise in diverse tipologie: geometriche (quadrato, triangolo, cerchio) e organiche (dal tracciato irregolare). + + + + + + + + + Dimensione + + + + + + + Questa si riferisce alle variazioni nelle proporzioni degli oggetti, linee o forme. Si ha una variazione di dimensioni in oggetti sia reali che immaginari. + + + GR + piccolo + + Spazio + + + + + + + Lo spazio è l'area vuota o aperta tra, intorno, sopra, sotto, o all'interno di oggetti. Le forme sono fatte dallo spazio intorno e dentro di loro. Lo spazio è spesso chiamato tridimensionale o bidimensionale. Lo spazio positivo è riempito da una forma. Lo spazio negativo circonda una forma. + + + + + + + Colore + + + + + + + Il colore è il carattere percepito da una superficie secondo la lunghezza d'onda della luce riflessa da essa. Il colore ha tre dimensioni: HUE (un'altra parola per il colore, indicato con il suo nome come il rosso o giallo), il valore (la sua luminosità o l'oscurità), l'intensità (la sua luminosità o opacità). + + + + + + + + + + + + + + + Texture + + + + + + + La texture è il modo in cui si sente una superficie al tatto (texture reale) o come appare (texture implicita). Le texture sono descritte con parole come ruvida, vellutata o ciottolosa. + + + + + + + + + + + + + + + + + + Valore + + + + + + + Il valore è quanto scuro o quanto chiaro appare qualcosa. Per cambiare il valore si aggiunge nero o bianco al colore. Il chiaroscuro usa dei valori che aumentano molto la differenza tra il chiaro e lo scuro della composizone. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Principi di grafica + + + + + + + I principi di utilizzo degli oggetti per la creazione di composizioni grafiche. + + + Equilibrio + + + + + + + L'equilibrio è una sensazione di equilibrio tra forme, colori, ecc. L'equilibrio può essere simmetrico o uniformemente bilanciato o asimmetrico e irregolarmente bilanciato. Oggetti, colori, texture, forme, ecc. possono essere utilizzate per creare un equilibrio nella composizione. + + + + + + + + + Contrasto + + + + + + + Il contrasto è l'affiancamento di oggetti ben differenti. + + + + + + + Enfasi + + + + + + + L'enfasi è utilizzata per rendere alcune parti del prodotto più visibili in modo da catturare l'attenzione. Il punto di interesse è l'area che colpisce maggiormante a prima vista. + + + + + + + + Proporzione + + + + + + + La proporzione descrive la dimensione, la posizione o la quantità di un oggetti rispetto ad un altro. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formica & 4WD + SVG creato da Andrew FitzsimonPer gentile concessione di Open Clip Art Libraryhttp://www.openclipart.org/ + + + + + + + + + + + + + + + + + + + + + + + + Motivo + + + + + + + Il motivo è creato ripetendo un oggetto (linea, forma o colore) più volte. + + + + + + + + + + + + + + + + Gradazione + + + + + + + La gradazione di dimensione e direzione produce una prospettiva lineare. La gradazione del colore da caldo a freddo e della tonalità da scura a chiara produce una prospettiva aerea. Dallo scuro al chiaro produce un effetto di profondità. Aggiunge quindi valore e movimento alla forma. + + + + + + + + + + + + + + + + + + + Composizione + + + + + + + La combinazione di vari oggetti per creare un insieme. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Bibliografia + + + + + + + Qui trovi la bibliografia utilizzata per la creazione del documento. + + + + + + + + http://www.makart.com/resources/artclass/EPlist.html + + + + + + + + + http://www.princetonol.com/groups/iad/Files/elements2.htm + + + + + + + + + http://www.johnlovett.com/test.htm + + + + + + + + + http://digital-web.com/articles/elements_of_design/ + + + + + + + + + http://digital-web.com/articles/principles_of_design/ + + + + + + + + Un ringraziamento a Linda Kim (http://www.coroflot.com/redlucite/) per l'aiuto (http://www.rejon.org/) nella creazione di questo tutorial, alla Open Clip Art Library (http://www.openclipart.org/) e alle persone che hanno realizzato il materiale. + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + Ctrl+freccia sù per scorrere il documento + + + + diff --git a/share/tutorials/tutorial-shapes.it.svg b/share/tutorials/tutorial-shapes.it.svg index 5e7a47889..6593000be 100644 --- a/share/tutorials/tutorial-shapes.it.svg +++ b/share/tutorials/tutorial-shapes.it.svg @@ -1,31 +1,22 @@ - - - + + + - - - + - - - - - - - - - - - - - - + + + + + + + - + image/svg+xml @@ -33,1003 +24,1124 @@ - - - - - - - - - - - - + + + + + + + + + + + - + + Ctrl+freccia giù per scorrere il documento + - - ::FORME + + ::FORME - - - - - + + + + + - Questo tutorial riguarda i quattro strumenti forma: Rettangolo, Ellisse, Stella e Spirale. Dimostreremo le capacità delle forme di Inkscape e mostreremo esempi di come e quando usarli. + Questo tutorial si occupa dei quattro strumenti forma: Rettangolo, Ellisse, Stella e Spirale. Verranno dimostrate le capacità delle forme di Inkscape, anche con esempi di come e quando usarle. - - - - + + + + - Usa Ctrl+Freccie, mouse scroll, o premi il pulsante medio per spostare la pagina. Per inforamzioni di base sugli oggetti, selezione, trasformazione, guarda il tutorial Base nel menu Help > Tutorials. + Usa Ctrl+freccie, lo scorrimento mouse, o tieni premuto il pulsante centrale per scorrere il documento. Per informazioni sulla creazione di base di oggetti, selezione, trasformazione, guarda il tutorial Base nel menu Aiuto > Lezioni. - - - - + + + + - Inkscape ha quattro strumenti forma versatili, ognuno capace di creare e modificare il proprio tipo di forma. Una forma è un oggetto modificabile in modi unici per quella forma, usando le maniglie e i parametri numerici che determinano la sua "apparenza". + Inkscape ha quattro strumenti forma versatili, ognuno capace di creare e modificare il proprio tipo di forma. Una forma è un oggetto modificabile in modi unici per quel tipo di forma, usando le maniglie trascinabili e i parametri numerici che determinano la sua apparenza. - - - - + + + + - Per esempio, con una stella puoi cambiare il numero di vertici, la loro lunghezza, l'angolo, la rotondità, etc. -- ma rimarrà sempre una stella. Una forma è "meno libera" di un semplice tracciato, ma è spesso più interessante e utile. Puoi sempre convertire una forma in un tracciato (Ctrl+Shift+C), ma non è possibile l'operazione inversa. + Per esempio, con una stella puoi cambiare il numero di vertici, la loro lunghezza, l'angolo, l'arrotondamento, ecc. — ma rimarrà sempre una stella. Una forma è “meno libera†di un semplice tracciato, ma è spesso più interessante e utile. Puoi sempre convertire una forma in un tracciato (Maiusc+Ctrl+C), ma non è possibile l'operazione inversa. - - - - + + + + - Gli strumenti forma sono Rettangolo, Ellisse, Stella e Spirale. Guardiamo prima come funzionano in generale; poi analizziamo ciascuno in dettaglio. + Gli strumenti forma sono Rettangolo, Ellisse, Stella e Spirale. Innanzitutto, guarderemo come funzionano in generale, poi analizzeremo ciascuno in dettaglio. - - Funzioni generali + + Suggerimenti generali - - - - + + + + - Per creare una nuova forma usare il mouse con il tasto destro premuto sull'area di lavoro (canvas), una volta selezionato lo strumento desiderato. La forma creata viene selezionata, mostrando le sue maniglie come piccoli diamanti bianchi, i quali ti permettono di modificarla spostando queste maniglie. + Una nuova forma si crea trascinando sull'area di lavoro con il tasto destro del mouse premuto con lo strumento desiderato. Una volta che la forma è stata creata (e quando viene selezionata), mostrerà le sue maniglie come piccoli diamanti bianchi, quadrati o rotondi (in base allo strumento) che, spostandole, permettono di modificare la forma. - - - - + + + + - Tutti e quattro i tipi di forma mostrano le stesse maniglie cosi come fanno i tracciati. Spostando il mouse su una maniglia, nella barra di stato appare ciciòhe la maniglia modifica quando viene spostata, semplicemente o premendo contemporaneamente un tasto modificatore. + Tutti e quattro i tipi di forma mostrano le stesse maniglie cosi come fanno i tracciati. Spostando il mouse su una maniglia, nella barra di stato appare ciciòhe la maniglia modifica quando viene spostata, semplicemente o premendo contemporaneamente un tasto modificatore. - - - - + + + + - Inoltre, nella barra dei controlli vengono mostrati i parametri dello strumento usato. Di solito ci sono pochi campi numerici e un pulsante per tornare ai valori preimpostati. Cliccando su una forma qualunque la barra dei controlli mostrerà i parametri relativi alla forma selezionata. + Inoltre, per ogni strumento forma vengono visualizzati i relativi parametri nella Barra dei controlli strumento (posizionata orizzontalmente sopra l'area di lavoro). Solitamente sono presenti dei campi numerici e pulsanti per reimpostare i valori predefiniti. Quando oggetti del tipo dello strumento attualmente in uso sono selezionati, la modifica dei parametri della barra dei controlli modifica gli stessi oggetti. - - - - + + + + - Ogni cambiamento fatto ai parametri di un tipo di forma vengono ricordati e usati quando si crea la prossima forma di quel tipo. Per esempio, dopo aver cambiato il numero di vertici di una stella, la nuova stella avrà questo numero di vertici. Inoltre, anche i parametri modificati dalla barra dei controlli per una forma vengono memorizzati e usati per la successiva forma dello stesso tipo. + Qualsiasi modifica applicata nella barra dei controlli viene ricordata e utilizzata per il prossimo oggetto disegnato con lo stesso strumento. Per esempio, dopo aver modificato il numero dei vertici di una stella, le nuove stelle avranno lo stesso numero di vertici. Inoltre, selezionando un oggetto vengono aggiornati i parametri nella barra dei controlli impostandoli quindi per le successive forme. - - - - + + + + - Gli strumenti forma possono selezionare un oggetto mediante click su essi. Ctrl+click (selezionare in gruppo) e Alt+Click (seleziona sotto). Esc per togliare la selezionare. + Quando uno strumento forma è in uso, è possibile selezionare un oggetto con un Clic. Ctrl+Clic (seleziona in un gruppo) e Alt+Clic (seleziona sotto) sono funzionanti come con lo strumento Selettore. Esc deseleziona. - - Rettangoli + + Rettangoli - - - - - - Un rettangolo è il pipiùemplice ststrumentoa forse il pipiùommune nel disegno e nelle illustrazioni. Inkscape tenta di rendere la creazione e la modifica dei rettangoli la pipiùacile e conveniente possibile. - - - - - - - Passa allo strumento rettangolo con F4 o cliccando il suo pulsante nella barra degli strumenti. Disegna un rettangolo accanto a questo blu: - - - - - - - - Ora, lasciando questo strumento, sposta la selezione da un rettangolo all'altro cliccando su essi. - - - - - - - Scorciatoie: - - - - - - - - Con Ctrl, disegni un quadrato o un rettangolo con rapporto intero (2:1, 3:1, etc.). - - - - - - - - Con Shift, disegni attorno al punto di partenza. - - - - - - - Come puoi vedere, il rettangolo selezionato mostra tre maniglie in tre dei suoi angoli. In realtà sono quattro maniglie, ma due di loro sono sovrapposte se il rettangolo non è arrotondato. Queste sono appunto le maniglie di arrotondamento, le altre due sono di ridimensionamento. - - - - - - - Occupiamoci delle maniglie di arrotondamento. Spostane una verso ggiù Tutti e quattro gli angoli del rettangolo diventano rotondi, e diventa visibile la seconda maniglia -- sta nell'originale posizione del vertice. Se vuoi vertici arrotondati questo è tutto quello che devi fare. Se vuoi vertici ppiùarrotondati lungo un lato piuttosto che l'altro, sposta l'altra maniglia verso destra. - - - - - - - Qui, i primi due rettangoli hanno angoli circolari e le altre due hanno vertici ellittici: - - Elliptic rounded corners - Circular rounded corners - - - - - - - - - - Clicca con lo strumento rettangolo sulle figure e osserva come sono posizionate le maniglie. - - - - - - - Spesso, il raggio e la forma dei vertici deve essere costante all'interno della composizione, anche se la dimensione dei rettangoli è differente (pensa a diagrammi con rettangoli arrotondati di divera dimensione). Con Inkscape è facile. Passa allo strumento SSelettore nella barra dei controlli, trovi un gruppo di pulsanti, il secondo da sinistra mostra due angoli concentrici arrotondati. Questo decide se gli angoli arrotondati vengono scalati quando il rettagolo è scalato oppure no. - - - - - - - Per esempio, qui l'originale rettangolo rosso è duplicato e ridimensionato parecchie volte, in maniera differente, con il pulsante 'Scala angoli arrotondati' in posizione off: - - Scaling rounded rectangles with "Scale rounded corners" OFF - - - - - - - - - - - - - - Nota come la dimensione e la forma degli angoli è la stessa in tutti i rettangoli, cosi che gli arrotondamenti si allineano esattamente nell'angolo superiore sinistro dove tutti si incontrano. Tutti i rettangoli blu con contorno a punti sono stati ottenuti da quello rosso soltanto usando le maniglie del SSelettore senza dover modificare le maniglie di arrotondamento di ogni singola figura. - - - - - - - Per confronto, qui è mostrata la stessa composizione ma ora creata con il pulsante 'Scala angoli arrotondati' in posizione on: - - Scaling rounded rectangles with "Scale rounded corners" ON - - - - - - - - - - - - - - Ora gli angoli sono diversi come i rettangoli a cui appartengono, e non c'è più l'esatto incontro dei vertici nell'angolo superiore sinistro (iingrandisciper vederlo). Questo è lo stesso risultato che puoi ottenere convertendo la forma in tracciato (Ctrl+Shift+C) e ridimensionandolo come tracciato. - - - - - - - Qualche scorciatoia per le maniglie di arrotondamento del rettangolo: - - - - - - - - Spostale premendo Ctrl per rendere uguali gli altri raggi (arrotondamento circolare). - - - - - - - - Ctrl+click per rendere uguali gli altri raggi senza spostare. - - - - - - - - Shift+click per annullare l'arrotondamento. - - - - - - - La barra dei controlli del rettangolo mostra il raggio di arrotondamento verticale (Ry) e orizzontale (Rx) per il rettangolo selezionato; puoi cambiare i valori per modificare l'arrotondamento in maniera precisa in qualunque unità di misura. Il pulsante 'non arrotondato' fa quello che dice -- rimuove l'arrotondamento al rettangolo(i) selezionato. - - - - - - - Un importante vantaggio di questi controlli è che hanno effetto su tutti i rettangoli selezionati. Per esempio, se vuoi cambiare tutti i rettangoli nel livello corrente, con Ctrl+A selezioni tutto e poi modifica i parametri nella barra dei controlli. Tutti gli oggetti selezionati che non sono rettangoli verranno ignorati - solo i rettangoli verranno cambiati. - - - - - - - Ora occupiamoci delle maniglie di ridimensionamento del rettangolo. Potresti chiederti, a cosa servono, se possiamo ridimensionare il rettangolo con il Selettore. - - - - - - - Il problema del Selettore che la nozione di orizzontale e verticale è relativa a quella della pagina. Al contrario, le maniglie del rettangolo scalano il rettangolo lungo i suoi lati, anche se esso è arrotondato o deformato. Per esempio, prova a ridimensionare prima con il Selettore poi con le maniglie del Rettangolo: - - - - - - - - Visto che le maniglie di ridimensionamento sono due , potrai scalare il rettangolo nelle sue due direzioni o muoverlo lungo i suoi lati. I raggi di arrotondamento verranno preservati durante queste modifiche. - - - - - - - Scorciatoie per le maniglie di ridimensionamento: + + + + + + Un rettangolo è la forma più semplice e probabilmente la più comune nei design e nelle illustrazioni. Inkscape cerca di rendere la creazione e la modifica dei rettangoli la più semplice possibile. + + + + + + + Puoi passare allo strumento Rettangolo con F4 o cliccando sull'icona nella barra degli strumenti. Prova a disegnare un nuovo rettangolo accanto a quello blu qui sotto: + + disegna qui + + + + + + + Successivamente, senza deselezionare lo strumento rettangolo, cambia selezione da un rettangolo all'altro cliccando su di essi. + + + + + + + Scorciatoie per il disegno di rettangoli: + + + + + + + + Con Ctrl, disegna un quadrato o un rettangolo con rapporto intero (2:1, 3:1, ecc.). + + + + + + + + Con Maiusc, disegna attorno al punto di inizio disegno. + + + + + + + Come si può vedere, il rettangolo selezionato (il rettangolo appena disegnato è ancora attivo) mostra tre maniglie su tre vertici della forma. In realtà sono presenti quattro maniglie, ma due (sul lato alto destro) sono sovrapposte nel caso in cui il rettangolo non sia arrotondato. Queste sono le maniglie di arrotondamento, le altre sue (in alto a sinistra e in basso a destra) sono maniglie di ridimensionamento. + + + + + + + Innanzitutto osserviamo le maniglie di arrotondamento. Trascinando una maniglia verso il basso, tutti e quattro i lati del rettangolo vegono arrotondati mentre la seconda maniglia rimane ferma nella posizione originale. Se si vogliono degli angoli arrotondati, questo è sufficiente. Se si vogliono degli angoli arrotondati maggiormente lungo un lato, è necessario muovere la seconda maniglia verso sinistra. + + + + + + + Qui sotto, i primi due rettangoli hanno angoli arrotondati circolari, mentre gli altri due hanno angoli arrotondati ellittici: + + Angoli arrotondati ellittici + Angoli arrotondati circolari + + + + + + + + + + Sempre con lo strumento rettangolo, puoi provare a selezionare uno dei rettangoli qui sopra e osservare le loro maniglie di arrotondamento. + + + + + + + Spesso, il raggio di arrotondamento e la dimensione del rettangolo devono rimanere costanti all'interno di una composizione, anche se le dimensioni dei rettangoli differiscono. Passando allo strumento Selettore, sono presenti quattro pulsanti raggruppati, di questi il secondo da sinistra mostra due angoli arrotondati concentrici. Con questo è possibile controllare il ridimensionamento degli angoli arrotondati durante il ridimensionamento del rettangolo. + + + + + + + Per esempio, il rettangolo qui sotto è duplicato e ridimensionato varie volte, verso l'alto e verso il basso, con proporzioni differenti, mantenendo l'adattamento degli angoli arrotondati disattivato: + + Ridimensionamento rettangoli arrotondati con adattamento degli angoli arrotondati disattivata + + + + + + + + + + + + + + Si può notare come la dimensione e la forma degli angoli arrotondati sia la stessa in tutti i rettangoli, in modo da allineare esattamente gli angoli nel lato in alto a destra. Tutti i rettangoli tratteggiati sono ottenuti dal rettangolo originale rosso ridimensionando con lo strumento Selettore, senza alcuna modifica alle maniglie di arrotondamento. + + + + + + + Come paragone, qui sotto abbiamo la stessa composizione creata con l'adattamento degli angoli arrotondati attivata: + + Ridimensionamento rettangoli arrotondati con adattamento degli angoli arrotondati attivata + + + + + + + + + + + + + + Ora gli angoli arrotondati, così come i rettangoli, differiscono tra loro e in alto a destra non sono più allineati. Questo è lo stesso risultato (visibile) che si otterrebbe convertendo il rettangolo originale in un tracciato (Ctrl+Maiusc+C) e ridimensionandolo. + + + + + + + Qui sono elencate le scorciatoie per le maniglie di arrotondamento di un rettangolo: + + + + + + + + Trascina con Ctrl per rendere l'altro raggio uguale (arrotondamento circolare). + + + + + + + + Ctrl+Clicper rendere l'altro raggio uguale senza trascinare. + + + + + + + + Maiusc+Clic per rimuovere l'arrotondamento. + + + + + + + Avrete notato che la barra dei controlli strumento rettangolo mostra i raggi orizzontale (Rx) e verticale (Ry) di arrotondamento per il rettangolo selezionato e consente di impostare con precisione utilizzando qualsiasi unità di lunghezza. Il pulsante non arrotondato rimuove l'arrotondamento dai rettangoli selezionati. + + + + + + + Un importante caratteristica di questi controlli è che possono modificare più rettangoli contemporaneamente. Per esempio, se si desidera modificare tutti i rettangoli nel livello, basta premere Ctrl + A (Seleziona tutto) e impostare i parametri che necessari nella barra dei controlli. Nel caso in cui vengano selezionati oggetti che non siano rettangoli, questi saranno ignorati, solo i rettangoli verranno modificati. + + + + + + + Ora diamo un'occhiata alle maniglie di ridimensionamento di un rettangolo. Ci si potrebbe chiedere il motivo della loro utilità quando è possibile ridimensionare il rettangolo con il Selettore. + + + + + + + La limitazione dello strumento Selettore è il movimento orizzontale e verticale che rimane sempre relativo alla pagina del documento. Al contrario, le maniglie di ridimensionamento di un rettangolo ridimensionano lungo i lati del rettangolo, anche se il rettangolo viene ruotato o inclinato. Per esempio, prova a ridimensionare il rettangolo qui sotto prima con il Selettore e successivamente con le maniglie dello strumento Rettangolo: + + + + + + + + Poiché le maniglie di ridimensionamento sono due, è possibile ridimensionare il rettangolo in qualsiasi direzione o anche spostarlo lungo i suoi lati. Le maniglie di ridimensionamento mantengono sempre i raggi di arrotondamento. + + + + + + + Qui sono elencate le scorciatoie per le maniglie di ridimensionamento: - - - - - - - Sposta premendo Ctrl per mantenere le proporzioni dell'altezza, della larghezza o del rapporto larghezza/altezza del rettangolo (sempre nelle coordinate proprie del rettangolo). + + + + + + + Trascinando con Ctrl si può ridimensionare a scatti lungo i lati o la diagonale del rettangolo. In altre parole, Ctrl conserva la larghezza o altezza o il rapporto larghezza/altezza del rettangolo (ancora una volta, in un proprio sistema di coordinate che può essere ruotato o inclinato). - - - - - - Qui troviamo lo stesso rettangolo, con le linee tratteggiate che indicano e direzioni lungo le quali può essere ridimensionato premendo il Ctrl (prova): + + + + + + Qui sotto è posizionato lo stesso rettangolo, con delle linee tratteggiate che mostrano le direzioni lungo le quali il ridimensionamento viene effettuato trascinando con Ctrl: - - - - - - + + + + + + - - - - - - - Inclinando e ruotando un rettangolo, duplicandolo e ridimensionandolo con le maniglie, possiamo creare facilmente delle composizioni 3D: - - 3 originalrectangles - Several rectanglescopied and resizedby handles,mostly with Ctrl - - - - - - - - - - - - - - - - - - - - - - - - - - Qui troviamo qualche altro esempio di composizione di rettangoli, che include arrotondamento e riempimenti con gradiente: - - - - - + + Snapping of rectangle - resize handles with Ctrl + + + + + + Duplicando e ridimensionando lo stesso rettangolo con le maniglie di ridimensionamento è possibile creare composizioni 3D: + + + + + + + + + + + + + + + + + + + + + + 3 rettangoli originali + Vari rettangoli copiati e ridimensionati con le maniglie e il pulsante Ctrl + + + + + + Qui sono presenti alcuni esempi di composizioni di rettangoli con angoli arrotondati e riempimenti a gradiente: + + + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - Ellissi + + + + + + + + + + + + + + + + + + + + + + + + Ellissi - - - - - - Lo strumento Ellisse (F5) può creare ellissi e cerchi, che possono diventare segmenti o archi. Le sscorciatoiedi disegno sono le stesse di quelle dello strumento rettangolo: - - - - - - - - Con Ctrl, disegni un cerchio o un ellisse con un rapporto fissato (2:1, 3:1, etc.). - - - - - - - - Con Shift, disegni attorno al punto di partenza. - - - - - - - Esploriamo le maniglie di una ellisse Seleziona questa: - - - - - - - - Nuovamente, vedi tre maniglie iniziali, che in realtà sono quattro. La maniglia ppiùa destra son due maniglie sovraposte che ti permettono di aprire l'ellisse. Sposta questa maniglia, vedi ora la quarta maniglia, per ottenere una grande verietà di grafici a torta o archi: - - - - - - - - - - - - - - Per ottenere un segmento (un arco più due raggi), sposta la maniglia mantenendo il puntatore fuori dall'ellisse, per creare archi sposta mantenendolo interno all'ellisse. Sopra, ci sono 4 segmenti sulla sinistra e 3 archi sulla destra. Nota che gli archi sono figure aperte, infatti il contorno manca tra la fine e l'inzio dell'arco. Puoi rendertene conto rimuovendo il riempimento, lasciando solo il contorno: - - - - - - 15 - + + + + + + Lo strumento Ellisse (F5) permette di disegnare ellissi e cerchi, che possono diventare segmenti o archi. Le scorciatoie di disegno sono le stesse di quelle dello strumento Rettangolo: + + + + + + + + Con Ctrl, si disegna un cerchio o un ellisse con un rapporto fissato (2:1, 3:1, ecc.). + + + + + + + + Con Maiusc, disegna attorno al punto di inizio disegno. + + + + + + + Diamo un'occhiata alle maniglie di un ellisse. Seleziona qui sotto: + + + + + + + + Di nuovo, sono visibili tre maniglie anche se effettivamente ne sono presenti quattro. Due si sovrappongono sulla destra e permettono di "aprire" l'ellisse. Trascinando la maniglia sulla destra e successivamente trascinando quella sottostante si ottengono forme a torta o segmenti di arco: + + + + + + + + + + + + + + Per ottenere un segmento (un arco con i due raggi), trascina verso l'esterno dell'ellisse. Per ottenere un arco, trascina verso l'interno. Sopra sono presenti 4 segmenti a sinistra e 3 archi a destra. Gli archi sono delle forme aperte, quindi il contorno scorre lungo l'ellisse ma non so chiude. Si può osservare semplicemente rimuovendo il colore di riempimento, lasciando solo il colore di contorno: + + + + + + 15 + - - - - - - - - - - - - - - - - - - - - - - - - - Notare il gruppo di segmenti stretti simili ad una ventola, sulla sinistra. E facile crearli usando l'angolo a scatti della maniglia premendo Ctrl. Vediamo le sscorciatoiedella maniglia arco/segmento: - - - - - - - - Premendo Ctrl, l'angolo scatta di 15° mentre viene spostata la maniglia. - - - - - - - - Shift+click per fare l'ellisse intera (nessun arco o segmento). - - - - - - - La grandezza dello scatto dell'angolo può essere cambiato nelle Preferenze di Inkscape (scheda scatti). - - - - - - - Le altre due maniglie dell'ellisse sono usate per ridimensionarla attorno al suo centro. Le loro sscorciatoiesono simili a quelle per le maniglie dello strumento Rettangolo: - - - - - - - - Sposta premendo Ctrl per creare una circonferenza (i due raggi saranno uguali). - - - - - - - - Ctrl+click percreare una circonferenza senza spostare. - - - - - - - Come le maniglie dello strumento Rettangolo, quelle dell'ellisse regolano la larghezza e l'altezza dell'ellisse nelle sue cooordinate. Significa che una ellisse ruotata o schiacciata può facilmente essere stirata lungo i suoi assi originali rimanendo ruotata o schiacciata. Prova a ridimensionare una di queste ellissi mediante le sue maniglie: - - - - - - - - - Stelle + Segmenti + Archi + + + + + + + + + + + + + + + + + + + + + + + + + L'effetto "ventola" sulla sinistra è ottenuto mediante l'angolo a scatti della maniglia con Ctrl. Qui sono elencate le scorciatoie per le maniglie dell'ellisse: + + + + + + + + Con Ctrl, aggancia la maniglia ogni 15 gradi durante il trascinamento. + + + + + + + + Maiusc+Clic per rendere l'ellise come una forma intera (non arco o segmento). + + + + + + + L'angolo di aggancio può essere modificato nelle Preferenze di Inkscape (in Comportamento > Scatti). + + + + + + + Le altre due maniglie sono utilizzate per ridimensionare l'ellisse attorno al suo centro. Le scorciatoie di queste maniglie sono simili a quelle per gli angoli arrotondati di un rettangolo: + + + + + + + + Trascina con Ctrl per disegnare un cerchio (rende i raggi uguali). + + + + + + + + Ctrl+Clic per disegnare un cerchio senza trascinare. + + + + + + + Come per le maniglie di ridimensionamento di un rettangolo, le maniglie dell'ellisse modificano l'altezza e la larghezza nel proprio sistema di riferimento. Ciò significa che un'ellisse ruotata o inclinata può essere semplicemente allungata o stretta lungo gli assi originali mantenendo la rotazione o l'inclinazione. Puoi provare a ridimensionare una delle sottostanti ellissi con le loro maniglie: + + + + + + + + + Stelle - - - - - - Le stelle sono gli oggetti piu complessi e interessanti di Inkscape. Se vuoi stupire i tuoi amici con Inkscape, mettili a giocare con lo strumento Stella. E un intratenimento coinvolgente -- una vera e porpria droga! + + + + + + Le stelle sono le forme più complesse in Inkscape. - - - - - - Lo strumento Stella può creare due tipi di oggetti simili ma distinti: stelle e poligoni. Una stella ha due maniglie, la cui posizione definisce la lunghezza e la forma dei vertici; un poligono ha soltanto una maniglia che semplicemente ruota e ridimensiona il poligono: + + + + + + Lo strumento stella può disegnare due oggetti differenti: stelle e poligoni. Una stella ha due maniglie le cui posizioni definiscono la lunghezza e la forma dei propri vertici. Un poligono ha solo una maniglia che, se trascinata, ruota e ridimensiona il poligono: - - - - - - + + + Stella + + + + Poligono + + + + + - Nell barra dei controlli dello strumento Stella, troviamo per primo un selettore che cambia la stella nel poligono corrispondente e viceversa. Dopo troviamo un campo dove inseriamo il numero di vertici della stella o del poligono. Questo parametro è configurabile solo in questa barra. Il range permesso è da 3 (ovviamente) a 1024, ma non provare un numero molto grande (diciamo 200) se il tuo computer è lento. + Nella barra dei controlli dello strumento Stella, i primi due pulsanti controllano il tipo di forma disegnata (poligono regolare o stella). Successivamente è presente un campo numerico che imposta il numero di vertici della stella o del poligono. Questo parametro è modificabile solo nella barra dei controlli. Il numero di vertici può variare da 3 a 1024, anche se non è consigliato eccedere (oltre 200) se il computer è lento. - - - - + + + + - Quando disegni una nuova stella o poligono, + Durante il disegno di una nuova stella o poligono, - - - - - + + + + + - Sposta la maniglia premendo Ctrl per far scattare l'angolo di 15° alla volta. + Trascina con Ctrl per agganciare l'angolo ogni intervallo di 15 gradi. - - - - + + + + - Naturalmente, una stella è una forma molto interessante (sebbene i poligoni siano spesso piu utili in pratica). Le due maniglie della stalla hanno due funzioni leggermente differenti. La prima (quella che si trova inizialmente su un vertice) rende i raggi piu lunghi o piu corti, ma quando la ruoti (attorno al centro della stella) l'altra maniglia ruota insieme ad essa. Questi significa che non potrai rendere obliqui i vertici della stella con questa maniglia. + Le due maniglie della stella hanno delle funzioni leggermente differenti. La prima maniglia (inizialmente sul vertice, cioè su un angolo convesso della stella) modifica la lunghezza del raggio, ma applicando una rotazione (rispetto al centro della forma) l'altra maniglia ruota concordemente. Ciò significa che non è possibile inclinare i raggi della stella con questa maniglia. - - - - - - L'altra maniglia (inizialmente in un angolo concavo tra due vertici) è libera di mouversi sia radialmente che tangenzialmente senza modificare la posizione dell'altra maniglia. (In effetti, questa maniglia può diventare un vertice muovendola più lontana dal centro rispetto all'altra maniglia). Questa maniglia puo quindi rendere obliqui i vertici della stella, ottenendo ogni sorta di cristalli, fiocchi di neve, porcospini, mandalas: - - - - - - - - - - - - - - - - Se vuoi soltanto una semplice stella, puoi rendere la maniglia che rende obliqui i vertici come l'altra maniglia: - - - - - - - - Spostando premendo Ctrl i raggi della stella rimangono strettamente radiali (non obliqui). - - - - - - - - Ctrl+click per rendere la stella normale senza spostarla. - - - - - - - La barra di controllo ha un utile campo di immissione relativo alla maniglia di spostamento, il rapporto raggio permette di decidere il rapporto tra la distanza delle due maniglie dal centro. - - - - - - - Inkscape possiede altri due trucchi. In geometria, un poligono è una forma con bordi diritti e angoli definiti. Nel mondo reale, comunque, sono presenti vari gradi di curvatura e rotondità -- e Inkscape puo fare anche questo. Una stella o un poligono arrottondati funzionano in maniera leggermente differente da un rettangolo arrotondato. Non devi usare una maniglia apposita, ma: - - - - - - - - Shift mentre sposti una maniglia tangenzialmente attorno alla stella o al poligono. - - - - - - - - Shift+click su una maniglia per rimuovere l'arrotondamento. - - - - - - - Tangenzialmente significa in direzione perpendicolare alla direzione del centro. Se ruoti una maniglia con Shift in senso antiorario attorno al centro, ottieni una rotondità positiva; ruotando in senso orario, ottieni una rotondità negativa. (L'esempio di sotto mostra una rotondità negativa) - - - - - - - Qui confrontiamo un quadrato arrotondato (mediante lo strumento Retangolo) con un poligono a quattro lati arrotondato (mediante lo strumento Stella): - - - - - - - - Come puoi vedere, mentre un rettangolo arrotondato ha segmenti diritti come lati e vertici circolari (generalmente ellittici), un poligono o una stella non ha nessuna linea diritta; la sua curvatura varia dal massimo (negli angoli) al minimo (a metà tra i vertici). Inkscape fa questo semplicemente aggungendo delle tangenti ad ogni nodo della forma (puoi vederle se converti la forma in un tracciato e lo esamini con lo strumento Nodo). - - - - - - - Il parametro Arrotondamento nella barra di controllo è il rapporto tra la lunghezza di queste tangenti e la lunghezza dei lati del poligono/stella ai quali sono adiacenti. Questo parametro puo essere negativo, che inverte la direzione delle tangenti. I valori da circa 0.2 a 0.4 danno un arrotondamento come quello che ti aspetteresti, normale; altri valori producono bellissime, intricate e inprevedibili figure. Una stella con grande valore di arrotondamento puo diventare molto particolare, piu di quanto riusciresti a fare solo posizionando le maniglie. Di seguito ci sono alcuni esempi: - - - - - - - - - - - - - - - - - - - - - - - - - Se vuoi che i vertici della stella siano netti ma quelli concavi siano rotondi, o vice versa, lo fai facilmente creando un offset (Ctrl+J): - - Original star - Linked offset, inset - Linked offset, outset - - - - - - - - - Un modo è quello di spostare le maniglie premendo Shift. - - - - - - - Per imitare meglio le forme reali, Inscape può rendere casuali le sue stelle e poligoni (rendendoli storti in maniera casuale). Una leggera casualità rende le stelle meno regolari, piu umane, spesso divertenti; una forte casualità crea delle forme molto stravaganti. La rotondità rimane invariata utilizzando contemporaneamente la casualità. Qui ci sono le scorciatoie: - - - - - - - - Alt mentre sposti una maniglia tangenzialmente per aggiungere casualità al poligono o alla stella. - - - - - - - - Alt+click su una maniglia per rimuovere la casualità. - - - - - - - Quando disegni o modifichi la posizione delle maniglie di una stella "casualizata", essa tremera poiche ogni unica posizione delle sue maniglie corrisponde ad un unica forma casuale. Quindi, muovendo una maniglia senza Alt cambi forma senza cambiare valore di casualità, mentre spostando con Alt mantieni la forma ma cambi valore di casualità. Di seguito ci sono delle stelle i cui parametri sono esattamente gli stessi, ma ognuna e modificata mouvendo leggermente la posizione delle proprie maniglie (valore di casualità pari a 0.1): - - - - - - - - - - - - Qui invece abbiamo la stella centrale del precedente gruppo, con livelo di casualità che varia da -0.2 a 0.2: - - - - - - - - - - - - Premi Alt mentre sposti la maniglia della stella di mezzo e osserva come si modifica rispetto alle sue vicine -- e oltre. - - - - - - - Probabilmente troverai tu stesso il modo di utilizzare queste stelle cosi deformate, ma io amo particolarmente le forme a macchia di inchiostro e i grandi e ruvidi pianeti con paesaggi fantastici: - - - - - - - - - - - - Spirali - - - - - + + + + - Lo strumento spirale di Inkscape è molto versatile, e sebbebne non sia affascinante come quello stella, è qualche volta molto utile. Un spirale, come una stella, è disegnata dal centro; mentre disegni o modifichi, + L'altra maniglia (inizialmente sull'angolo concavo tra due vertici) è libera di muoversi radialmente e tangenzialmente, senza influenzare la maniglia al vertice. (Infatti questa maniglia può anch'essa divenire un vertice muovendola più lontana dall'altra maniglia rispetto al centro). Questa maniglia può distorcere le punte della stella per ottenere varie forme: - - - - - - - Muovi premendo Ctrl+drag per far scattare l'angolo di 15 gradi alla volta. - - - - - - - Una volta disegnata, la spirale ha due maniglie ai suoi estremi. Entrambe le maniglie, quando vengono spostate, arrotolano o srotolano la spirale (aumenta o diminuisce il numero di giri. Altre scorciattoie: - - - - - - - Per la maniglia esterna: - - - - - - - - Sposta premendo Shift per scalare/ruotare attorno al centro (senza variare il numero di spire). - - - - - - - - Sposta premendo Alt per bloccare il raggio mentre arrotoli o srotoli. - - - - - - - Per la maniglia interna: - - - - - - - - Sposta verticalmente con Alt per convergere o divergere. - - - - - - - - Alt+click per tornare alla divergenza predefinita. - - - - - - - - Shift+click per muovere la maniglia al centro. - - - - - - - La divergenza di una spirale è la misura della non linearità delle sue spire. Quando è uguale a 1, la spirale è uniforme; quando è minore di 1 (spostando con Alt verso l'esterno), la spirale è piu densa in periferia; quando è più grande di 1 (spostando con Alt verso l'interno), la spirale è piu densa verso il centro: - - - - - - - - - - - - Il numero massimo di spire è di 1024. - - - - - - - Come l'ellisse è utile per creare archi (linee di curvatura costante), lo strumento Spirale è utile per creare lurve di curvatura variabile lentamente. Confrontate con la curva dello strumento Pennino, un arco o una spirale è spesso più conveniente perchè tu puoi allungarlo o accorciarlo spostando un maniglia lungo la curva senza variare la sua forma. Inoltre, mentre una spirale è normalmente disegnata senza riempimento, puoi aggiungerlo e rimuovere il contorno per ottenere interessanti effetti. - - - - - - - - - - - - - - - - - - - - - - - - - - - In particolare usando un contorno a puntini - si combina cosi la concentrazione della forma con la spaziatura uniforme dei segni (punti o linee), ottenendo bellisimi effetti tessuto: - - - - - - Conclusioni - - - - - + + + + + + + + + + + + + - Gli strumenti forma di Inkscape sono molto potenti. Impara i loro trucchi e gioca con loro a tuo piacimento -- questo ti ripagerà quando fai un lavoro di disegno, perche usando le forme invece dei tracciati spesso si velocizza l lavoro e si facilita la modifica. Se hai qualunque idea per ulteriori miglioramenti, ti prego di contattare gli sviluppatori. + Se si vuole una stella semplice e regolare senza nessun effetto, è possibile rendere il comportamento della distorsione come quella non deformata: - - - + + + + + + + Trascinando con Ctrl per mantenere il raggio della stella strettamente radiale (senza distorsione). + + + + + + + + Ctrl+Clic per rimuovere la distorsione senza trascinare. + + + + + + + Come ulteriore funzionalità per il trascinamento delle maniglie, la Barra degli strumenti offre il campo Rapporto raggi che definisce il rapporto tra la distanza delle due maniglie dal centro. + + + + + + + Inkscape offre due ulteriori funzionalità. Geometricamente, un poligono è una forma con lati diritti e angoli appuntiti. Ciò nonostante spesso è utile avere vari gradi di curvatura e arrotondamento e Inkscape è in grado di fare questo. L'arrotondamento di una stella o un poligono funziona in maniera lievemente differente che per i rettangoli. Non vengono utilizzate maniglie dedicate, bensì + + + + + + + + Maiusc+Trascina una maniglia tangenzialmente per arrotondare la stella o il poligono. + + + + + + + + Maiusc+Clic su una maniglia per rimuovere l'arrotondamento. + + + + + + + "Tangenzialmente" significa in una direzione perpendicolare al centro. Se si "ruota" una maniglia con Maiusc in senso antiorario attorno al centro, si ottiene un arrotondamento positivo. Nel senso antiorario invece si ottiene un arrotondamento negativo. (Sotto sono presenti esempi di arrotondamento negativo). + + + + + + + Qui sotto sono paragonati un rettangolo (strumento Rettangolo) e un poligono a 4 lati (strumento Stella) arrotondati: + + + + Poligono arrotondato + + + + Rettangolo arrotondato + + + + + + + As you can see, while a rounded rectangle has straight line segments in its sides and +circular (generally, elliptic) roundings, a rounded polygon or star has no straight +lines at all; its curvature varies smoothly from the maximum (in the corners) to the +minimum (mid-way between the corners). Inkscape does this simply by adding collinear +Bezier tangents to each node of the shape (you can see them if you convert the shape to +path and examine it in Node tool). + + + + + + + + The Rounded parameter which you can adjust in the Controls bar is the +ratio of the length of these tangents to the length of the polygon/star sides to which +they are adjacent. This parameter can be negative, which reverses the direction of +tangents. The values of about 0.2 to 0.4 give “normal†rounding of the kind you would +expect; other values tend to produce beautiful, intricate, and totally unpredictable +patterns. A star with a large roundedness value may reach far beyond the positions of +its handles. Here are a few examples, each indicating its roundedness value: + + + + + + + + + + + + + + + + 0.25 + 0.25 + 0.25 + 0.37 + + 0.43 + 3.00 + -3.00 + + 0.41 + 5.43 + 1.85 + 0.21 + -3.00 + + -0.43 + + -8.94 + + 0.39 + + + + + + If you want the tips of a star to be sharp but the concaves smooth or vice versa, this +is easy to do by creating an offset (Ctrl+J) +from the star: + + + + + + Original star + Linked offset, inset + Linked offset, outset + + + + + + Shift+dragging star handles in Inkscape is one of the finest pursuits +known to man. But it can get better still. + + + + + + + + To closer imitate real world shapes, Inkscape can randomize (i.e. +randomly distort) its stars and polygons. Slight randomization makes a star less +regular, more humane, often funny; strong randomization is an exciting way to obtain a +variety of crazily unpredictable shapes. A rounded star remains smoothly rounded when +randomized. Here are the shortcuts: + + + + + + + + + Alt+drag a handle tangentially to randomize the star or polygon. + + + + + + + + + Alt+click a handle to remove randomization. + + + + + + + + As you draw or handle-drag-edit a randomized star, it will “tremble†because each unique +position of its handles corresponds to its own unique randomization. So, moving a handle +without Alt re-randomizes the shape at the same randomization level, while Alt-dragging +it keeps the same randomization but adjusts its level. Here are stars whose parameters +are exactly the same, but each one is re-randomized by very slightly moving its handle +(randomization level is 0.1 throughout): + + + + + + + + + + + + + And here is the middle star from the previous row, with the randomization level varying +from -0.2 to 0.2: + + + +0.2 + +0.1 + 0 + -0.1 + -0.2 + + + + + + + + + + + Alt+drag a handle of the middle star in this row and observe as it +morphs into its neighbors on the right and left — and beyond. + + + + + + + + You will probably find your own applications for randomized stars, but I am especially +fond of rounded amoeba-like blotches and large roughened planets with fantastic +landscapes: + + + + + + + + + + + + + Spirali + + + + + + + Inkscape's spiral is a versatile shape, and though not as immersing as the star, +it is sometimes very useful. A spiral, like a star, is drawn from the center; while +drawing as well as while editing, + + + + + + + + + Ctrl+drag to snap angle to 15 degree increments. + + + + + + + + Once drawn, a spiral has two handles at its inner and outer ends. Both handles, when +simply dragged, roll or unroll the spiral (i.e. “continue†it, changing the number of +turns). Other shortcuts: + + + + + + + + Outer handle: + + + + + + + + + Shift+drag to scale/rotate around center (no rolling/unrolling). + + + + + + + + + Alt+drag to lock radius while rolling/unrolling. + + + + + + + + Inner handle: + + + + + + + + + Alt+drag vertically to converge/diverge. + + + + + + + + + Alt+click to reset divergence. + + + + + + + + + Shift+click to move the inner handle to the center. + + + + + + + + The divergence of a spiral is the measure of nonlinearity of its +winds. When it is equal to 1, the spiral is uniform; when it is less than 1 +(Alt+drag upwards), the spiral is denser on the periphery; when it +is greater than 1 (Alt+drag downwards), the spiral is denser +towards the center: + + + 0.2 + 0.5 + 6 + 2 + 1 + + + + + + + + + + + The maximum number of spiral turns is 1024. + + + + + + + + Just as the Ellipse tool is good not only for ellipses but also for arcs (lines of +constant curvature), the Spiral tool is useful for making curves of smoothly +varying curvature. Compared to a plain Bezier curve, an arc or a spiral is +often more convenient because you can make it shorter or longer by dragging a handle +along the curve without affecting its shape. Also, while a spiral is normally drawn +without fill, you can add fill and remove stroke for interesting effects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + Especially interesting are spirals with dotted stroke — they combine the smooth +concentration of the shape with regular equispaced marks (dots or dashes) for beautiful +moire effects: + + + + + + + Conclusioni + + + + + + + Inkscape's shape tools are very powerful. Learn their tricks and play with them at your +leisure — this will pay off when you do your design work, because using shapes +instead of simple paths often makes vector art faster to create and easier to modify. If +you have any ideas for further shape improvements, please contact the developers. + + + + + + + + + + + + - + image/svg+xml @@ -1037,20 +1149,20 @@ - - - - - - - - - - + + + + + + + + + + - + + Ctrl+freccia sù per scorrere il documento + - rettangoloarrotondato - poligonoarrotondato -- cgit v1.2.3 From 44d1206c0e63d47eb87a7e6723bf1028ba16ffdd Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Sat, 27 Aug 2016 12:45:34 +0200 Subject: [Bug #1417923] Fixing issues with titles. Fixed bugs: - https://launchpad.net/bugs/1417923 (bzr r15079) --- share/tutorials/tutorial-advanced.be.svg | 417 +++++------ share/tutorials/tutorial-advanced.de.svg | 4 +- share/tutorials/tutorial-advanced.el.svg | 289 ++++---- share/tutorials/tutorial-advanced.es.svg | 421 +++++------ share/tutorials/tutorial-advanced.eu.svg | 419 +++++------ share/tutorials/tutorial-advanced.fa.svg | 428 +++++------ share/tutorials/tutorial-advanced.hu.svg | 417 +++++------ share/tutorials/tutorial-advanced.id.svg | 417 +++++------ share/tutorials/tutorial-advanced.it.svg | 289 ++++---- share/tutorials/tutorial-advanced.ja.svg | 417 +++++------ share/tutorials/tutorial-advanced.nl.svg | 415 +++++------ share/tutorials/tutorial-advanced.pl.svg | 419 +++++------ share/tutorials/tutorial-advanced.ru.svg | 417 +++++------ share/tutorials/tutorial-advanced.sk.svg | 455 ++++++------ share/tutorials/tutorial-advanced.sl.svg | 417 +++++------ share/tutorials/tutorial-advanced.svg | 284 +++---- share/tutorials/tutorial-advanced.vi.svg | 419 +++++------ share/tutorials/tutorial-advanced.zh_CN.svg | 417 +++++------ share/tutorials/tutorial-advanced.zh_TW.svg | 276 +++---- share/tutorials/tutorial-basic.be.svg | 718 +++++++++--------- share/tutorials/tutorial-basic.ca.svg | 747 +++++++++---------- share/tutorials/tutorial-basic.da.svg | 668 ++++++++--------- share/tutorials/tutorial-basic.de.svg | 480 ++++++------ share/tutorials/tutorial-basic.el.svg | 579 ++++++++------- share/tutorials/tutorial-basic.eo.svg | 714 +++++++++--------- share/tutorials/tutorial-basic.es.svg | 668 ++++++++--------- share/tutorials/tutorial-basic.eu.svg | 690 ++++++++--------- share/tutorials/tutorial-basic.fa.svg | 692 +++++++++--------- share/tutorials/tutorial-basic.gl.svg | 716 +++++++++--------- share/tutorials/tutorial-basic.hu.svg | 716 +++++++++--------- share/tutorials/tutorial-basic.id.svg | 694 +++++++++--------- share/tutorials/tutorial-basic.ja.svg | 690 ++++++++--------- share/tutorials/tutorial-basic.nl.svg | 714 +++++++++--------- share/tutorials/tutorial-basic.nn.svg | 720 +++++++++--------- share/tutorials/tutorial-basic.pl.svg | 716 +++++++++--------- share/tutorials/tutorial-basic.ru.svg | 716 +++++++++--------- share/tutorials/tutorial-basic.sk.svg | 749 ++++++++++--------- share/tutorials/tutorial-basic.sl.svg | 692 +++++++++--------- share/tutorials/tutorial-basic.svg | 571 +++++++-------- share/tutorials/tutorial-basic.vi.svg | 716 +++++++++--------- share/tutorials/tutorial-basic.zh_CN.svg | 716 +++++++++--------- share/tutorials/tutorial-basic.zh_TW.svg | 498 ++++++------- share/tutorials/tutorial-calligraphy.be.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.de.svg | 2 +- share/tutorials/tutorial-calligraphy.el.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.es.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.eu.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.fa.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.hu.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.id.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.ja.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.nl.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.pl.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.ru.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.sk.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.sl.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.vi.svg | 658 ++++++++--------- share/tutorials/tutorial-calligraphy.zh_TW.svg | 652 ++++++++--------- share/tutorials/tutorial-elements.be.svg | 392 +++++----- share/tutorials/tutorial-elements.el.svg | 324 ++++---- share/tutorials/tutorial-elements.es.svg | 396 +++++----- share/tutorials/tutorial-elements.eu.svg | 396 +++++----- share/tutorials/tutorial-elements.fa.svg | 396 +++++----- share/tutorials/tutorial-elements.hu.svg | 396 +++++----- share/tutorials/tutorial-elements.id.svg | 396 +++++----- share/tutorials/tutorial-elements.ja.svg | 396 +++++----- share/tutorials/tutorial-elements.nl.svg | 394 +++++----- share/tutorials/tutorial-elements.pl.svg | 396 +++++----- share/tutorials/tutorial-elements.ru.svg | 396 +++++----- share/tutorials/tutorial-elements.sk.svg | 396 +++++----- share/tutorials/tutorial-elements.sl.svg | 396 +++++----- share/tutorials/tutorial-elements.svg | 324 ++++---- share/tutorials/tutorial-elements.zh_TW.svg | 318 ++++---- share/tutorials/tutorial-interpolate.be.svg | 244 +++--- share/tutorials/tutorial-interpolate.de.svg | 2 +- share/tutorials/tutorial-interpolate.el.svg | 152 ++-- share/tutorials/tutorial-interpolate.hu.svg | 656 ++++++++--------- share/tutorials/tutorial-interpolate.ja.svg | 244 +++--- share/tutorials/tutorial-interpolate.nl.svg | 656 ++++++++--------- share/tutorials/tutorial-interpolate.pl.svg | 656 ++++++++--------- share/tutorials/tutorial-interpolate.ru.svg | 244 +++--- share/tutorials/tutorial-interpolate.sk.svg | 682 ++++++++--------- share/tutorials/tutorial-interpolate.svg | 152 ++-- share/tutorials/tutorial-interpolate.vi.svg | 656 ++++++++--------- share/tutorials/tutorial-interpolate.zh_TW.svg | 146 ++-- share/tutorials/tutorial-shapes.be.svg | 16 +- share/tutorials/tutorial-shapes.de.svg | 16 +- share/tutorials/tutorial-shapes.el.svg | 16 +- share/tutorials/tutorial-shapes.gl.svg | 16 +- share/tutorials/tutorial-shapes.hu.svg | 16 +- share/tutorials/tutorial-shapes.id.svg | 16 +- share/tutorials/tutorial-shapes.ja.svg | 702 +++++++++--------- share/tutorials/tutorial-shapes.nl.svg | 16 +- share/tutorials/tutorial-shapes.pl.svg | 16 +- share/tutorials/tutorial-shapes.ru.svg | 18 +- share/tutorials/tutorial-shapes.sk.svg | 16 +- share/tutorials/tutorial-shapes.sl.svg | 16 +- share/tutorials/tutorial-shapes.zh_CN.svg | 702 +++++++++--------- share/tutorials/tutorial-shapes.zh_TW.svg | 702 +++++++++--------- share/tutorials/tutorial-tips.be.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.el.svg | 671 +++++++++-------- share/tutorials/tutorial-tips.es.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.eu.svg | 775 ++++++++++---------- share/tutorials/tutorial-tips.fa.svg | 761 +++++++++---------- share/tutorials/tutorial-tips.hu.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.id.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.it.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.ja.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.nl.svg | 772 +++++++++---------- share/tutorials/tutorial-tips.pl.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.ru.svg | 775 ++++++++++---------- share/tutorials/tutorial-tips.sk.svg | 814 ++++++++++----------- share/tutorials/tutorial-tips.sl.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.svg | 647 ++++++++-------- share/tutorials/tutorial-tips.vi.svg | 774 ++++++++++---------- share/tutorials/tutorial-tips.zh_TW.svg | 540 +++++++------- share/tutorials/tutorial-tracing-pixelart.el.svg | 72 +- share/tutorials/tutorial-tracing-pixelart.fr.svg | 74 +- share/tutorials/tutorial-tracing-pixelart.nl.svg | 140 ++-- share/tutorials/tutorial-tracing-pixelart.svg | 72 +- .../tutorials/tutorial-tracing-pixelart.zh_TW.svg | 66 +- share/tutorials/tutorial-tracing.be.svg | 94 +-- share/tutorials/tutorial-tracing.el.svg | 102 +-- share/tutorials/tutorial-tracing.es.svg | 150 ++-- share/tutorials/tutorial-tracing.eu.svg | 150 ++-- share/tutorials/tutorial-tracing.fa.svg | 94 +-- share/tutorials/tutorial-tracing.fr.svg | 102 +-- share/tutorials/tutorial-tracing.gl.svg | 150 ++-- share/tutorials/tutorial-tracing.hu.svg | 150 ++-- share/tutorials/tutorial-tracing.id.svg | 150 ++-- share/tutorials/tutorial-tracing.ja.svg | 150 ++-- share/tutorials/tutorial-tracing.nl.svg | 148 ++-- share/tutorials/tutorial-tracing.pl.svg | 148 ++-- share/tutorials/tutorial-tracing.ru.svg | 150 ++-- share/tutorials/tutorial-tracing.sk.svg | 156 ++-- share/tutorials/tutorial-tracing.sl.svg | 150 ++-- share/tutorials/tutorial-tracing.svg | 102 +-- share/tutorials/tutorial-tracing.vi.svg | 150 ++-- share/tutorials/tutorial-tracing.zh_TW.svg | 96 +-- 140 files changed, 30927 insertions(+), 30237 deletions(-) diff --git a/share/tutorials/tutorial-advanced.be.svg b/share/tutorials/tutorial-advanced.be.svg index 329f2c433..2650cc347 100644 --- a/share/tutorials/tutorial-advanced.be.svg +++ b/share/tutorials/tutorial-advanced.be.svg @@ -36,103 +36,103 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - + ::ПÐГЛЫБЛЕÐЫ -Ð±ÑƒÐ»Ñ Ð±Ñк, buliabyak@users.sf.net Ñ– josh andler, scislac@users.sf.net - - + + + ГÑты падручнік аxоплівае капіÑваньне/ÑžÑтаўку, праўленьне вузлоў, рыÑаваньне ад рукі й крывых БÑзье, маніпулÑваньне шлÑхамі, лÑÒ‘Ñ–Ñ‡Ð½Ñ‹Ñ Ð°Ð¿Ñрацыі, зрухі, ÑпрашчÑньне й інÑтрумÑнт «ТÑкÑт». - - + + - ВыкарыÑтоўвайце Ctrl+ÑтрÑлкі, кола мышы, ці перацÑгваньне ÑÑÑ€ÑднÑй кнопкай мышы, каб пракручваць гÑтую Ñтаронку долу. ÐÑновы ÑтварÑньнÑ, вылучÑÐ½ÑŒÐ½Ñ Ð¹ ператварÑÐ½ÑŒÐ½Ñ Ð°Ð±'ектаў глÑдзіце Ñž «ÐÑновах» у Даведка > Падручнікі. + ВыкарыÑтоўвайце Ctrl+ÑтрÑлкі, кола мышы, ці перацÑгваньне ÑÑÑ€ÑднÑй кнопкай мышы, каб пракручваць гÑтую Ñтаронку долу. ÐÑновы ÑтварÑньнÑ, вылучÑÐ½ÑŒÐ½Ñ Ð¹ ператварÑÐ½ÑŒÐ½Ñ Ð°Ð±'ектаў глÑдзіце Ñž «ÐÑновах» у Даведка > Падручнікі. - - СпоÑабы ÑžÑтаўкі + + СпоÑабы ÑžÑтаўкі - - + + - ПаÑÑŒÐ»Ñ Ñ‚Ð°Ð³Ð¾, Ñк вы ÑкапіÑвалі колькі аб'ектаў з дапамогай Ctrl+C ці выразалі Ñ–Ñ… з дапамогай Ctrl+X, звычайны загад УÑтавіць (Ctrl+V) уÑтаўлÑе ÑкапіÑÐ²Ð°Ð½Ñ‹Ñ Ð°Ð±'екты Ñž тое меÑца, дзе знаходзіцца курÑор, а калі курÑор па-за межамі вакна, то Ñž ÑÑÑ€Ñдзіну вакна дакумÑнту. Тым Ð½Ñ Ð¼ÐµÐ½Ñˆ, аб'екты Ñž буфÑры абмену ÑžÑÑ‘ ÑÑˆÑ‡Ñ Ð¿Ð°Ð¼Ñтаюць меÑца, адкуль былі ÑкапіÑваныÑ, Ñ– Ñ–Ñ… можна ÑžÑтавіць назад загадам УÑтавіць на меÑца (Ctrl+Alt+V). + ПаÑÑŒÐ»Ñ Ñ‚Ð°Ð³Ð¾, Ñк вы ÑкапіÑвалі колькі аб'ектаў з дапамогай Ctrl+C ці выразалі Ñ–Ñ… з дапамогай Ctrl+X, звычайны загад УÑтавіць (Ctrl+V) уÑтаўлÑе ÑкапіÑÐ²Ð°Ð½Ñ‹Ñ Ð°Ð±'екты Ñž тое меÑца, дзе знаходзіцца курÑор, а калі курÑор па-за межамі вакна, то Ñž ÑÑÑ€Ñдзіну вакна дакумÑнту. Тым Ð½Ñ Ð¼ÐµÐ½Ñˆ, аб'екты Ñž буфÑры абмену ÑžÑÑ‘ ÑÑˆÑ‡Ñ Ð¿Ð°Ð¼Ñтаюць меÑца, адкуль былі ÑкапіÑваныÑ, Ñ– Ñ–Ñ… можна ÑžÑтавіць назад загадам УÑтавіць на меÑца (Ctrl+Alt+V). - - + + - Іншы загад, УÑтавіць Ñтыль (Shift+Ctrl+V), ужывае Ñтыль (першага) аб'екту Ñž буфÑры абмену да бÑгучага вылучÑньнÑ. ГÑтак уÑтаўлены «Ñтыль» уключае ÑžÑе наÑтройкі запаўненьнÑ, контуру й шрыфта, але Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ñƒ, памер ці Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼Ñтры, ÑпÑÑ†Ñ‹Ñ„Ñ–Ñ‡Ð½Ñ‹Ñ Ð´Ð»Ñ Ñ„Ñ–Ò‘ÑƒÑ€, Ñ‚Ð°ÐºÑ–Ñ Ñк, напрыклад, колькаÑьць промнÑÑž у зоркі. + Іншы загад, УÑтавіць Ñтыль (Shift+Ctrl+V), ужывае Ñтыль (першага) аб'екту Ñž буфÑры абмену да бÑгучага вылучÑньнÑ. ГÑтак уÑтаўлены «Ñтыль» уключае ÑžÑе наÑтройкі запаўненьнÑ, контуру й шрыфта, але Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ñƒ, памер ці Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼Ñтры, ÑпÑÑ†Ñ‹Ñ„Ñ–Ñ‡Ð½Ñ‹Ñ Ð´Ð»Ñ Ñ„Ñ–Ò‘ÑƒÑ€, Ñ‚Ð°ÐºÑ–Ñ Ñк, напрыклад, колькаÑьць промнÑÑž у зоркі. - - + + - Ð¯ÑˆÑ‡Ñ Ð°Ð´Ð·Ñ–Ð½ набор загадаў уÑтаўкі, УÑтавіць памер, мÑнÑе памер вылучÑньнÑ, каб ён быў роўны пажаданаму атрыбуту памеру аб'екту Ñž буфÑры. ÐÑьць некалькі загадаў уÑтаўкі памеру, а менавіта: «УÑтавіць памер», «УÑтавіць шырыню», «УÑтавіць вышыню», «УÑтавіць памер пааÑобку», «УÑтавіць шырыню пааÑобку» й «УÑтавіць вышыню пааÑобку». + Ð¯ÑˆÑ‡Ñ Ð°Ð´Ð·Ñ–Ð½ набор загадаў уÑтаўкі, УÑтавіць памер, мÑнÑе памер вылучÑньнÑ, каб ён быў роўны пажаданаму атрыбуту памеру аб'екту Ñž буфÑры. ÐÑьць некалькі загадаў уÑтаўкі памеру, а менавіта: «УÑтавіць памер», «УÑтавіць шырыню», «УÑтавіць вышыню», «УÑтавіць памер пааÑобку», «УÑтавіць шырыню пааÑобку» й «УÑтавіць вышыню пааÑобку». - - + + - УÑтавіць памер зьмÑнÑе памер уÑÑго вылучÑньнÑ, каб ён адпавÑдаў агульнаму памеру аб'ектаў буфÑру абмену. УÑтавіць шырыню/УÑтавіць вышыню зьмÑнÑе памер па гарызанталі/вÑртыкалі, каб ён адпавÑдаў шырыні/вышыні аб'ектаў у буфÑры. ГÑÑ‚Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ зважаюць на Ñтан замку прапарцыйнаÑьці зьмÑÐ½ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼ÐµÑ€Ñƒ на кіроўнай панÑлі «Вылучальніка» (між палÑмі Ш Ñ– Ð’), такім чынам, калі замок націÑнуты, то іншы вымер вылучанага аб'екта зьмÑнÑецца прапарцыйна, калі не, то іншы вымер не зьмÑнÑецца. Загады, што ўтрымліваюць «пааÑобку», працуюць падобна вышÑйапіÑаным загадам, але Ñны зьмÑнÑюць памер кожнага аÑобнага аб'екту Ñž вылучÑньні, каб ён адпавÑдаў памеру/шырыні/вышыні аб'ектаў у буфÑры. + УÑтавіць памер зьмÑнÑе памер уÑÑго вылучÑньнÑ, каб ён адпавÑдаў агульнаму памеру аб'ектаў буфÑру абмену. УÑтавіць шырыню/УÑтавіць вышыню зьмÑнÑе памер па гарызанталі/вÑртыкалі, каб ён адпавÑдаў шырыні/вышыні аб'ектаў у буфÑры. ГÑÑ‚Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ зважаюць на Ñтан замку прапарцыйнаÑьці зьмÑÐ½ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼ÐµÑ€Ñƒ на кіроўнай панÑлі «Вылучальніка» (між палÑмі Ш Ñ– Ð’), такім чынам, калі замок націÑнуты, то іншы вымер вылучанага аб'екта зьмÑнÑецца прапарцыйна, калі не, то іншы вымер не зьмÑнÑецца. Загады, што ўтрымліваюць «пааÑобку», працуюць падобна вышÑйапіÑаным загадам, але Ñны зьмÑнÑюць памер кожнага аÑобнага аб'екту Ñž вылучÑньні, каб ён адпавÑдаў памеру/шырыні/вышыні аб'ектаў у буфÑры. - - + + БуфÑÑ€ абмену агульны Ð´Ð»Ñ ÑžÑёй ÑÑ‹ÑÑ‚Ñмы, можна капіÑваць/уÑтаўлÑць аб'екты між рознымі аÑобнікамі Inkscape, а такÑама між Inkscape Ñ– іншымі праґрамамі (ÑÐºÑ–Ñ Ð¿Ð°Ð´Ñ‚Ñ€Ñ‹Ð¼Ð»Ñ–Ð²Ð°ÑŽÑ†ÑŒ працу з SVG у буфÑры абмену). - - РыÑаваньне шлÑхоў ад рукі й правільных шлÑхоў + + РыÑаваньне шлÑхоў ад рукі й правільных шлÑхоў - - + + ÐайпраÑьцейшы шлÑÑ… Ñтварыць адвольную фіґуру — нарыÑаваць Ñе ад рукі інÑтрумÑнтам «Ðловак» (F6): - - - - - - - - - - - + + + + + + + + + + + Калі хочаце больш Ð¿Ñ€Ð°Ð²Ñ–Ð»ÑŒÐ½Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹, то карыÑтайцеÑÑ Ñ–Ð½ÑтрумÑнтам «ÐÑадка» («БÑзье») (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Пры рыÑаваньні ад рукі ці крывых БÑзье вылучаны шлÑÑ… паказвае Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÑ–Ñ ÐºÐ²Ð°Ð´Ñ€Ð°Ñ‚Ð½Ñ‹Ñ Ñкары Ð»Ñ Ð°Ð±Ð¾Ð´Ð²ÑƒÑ… канцоў. ГÑÑ‚Ñ‹Ñ Ñкары дазвалÑюць працÑгнуць гÑты шлÑÑ… (рыÑуючы ад аднаго Ñкара) ці закрыць Ñго (рыÑуючы ад аднаго Ñкара да другога) замеÑÑ‚ ÑтварÑÐ½ÑŒÐ½Ñ Ð½Ð¾Ð²Ð°Ð³Ð°. - - Праўка шлÑхоў + + Праўка шлÑхоў - - + + У адрозьненьне ад фіґур, Ñтвораных інÑтрумÑнтамі фіґур, «Ðловак» Ñ– «ÐÑадка» Ñтвараюць тое, што называецца шлÑхамі. ШлÑÑ… — гÑта паÑьлÑдоўнаÑьць прамых адрÑзкаў лініі Ñ–/ці крывых БÑзье, ÑкіÑ, Ñк любы іншы аб'ект Inkscape, могуць мець Ð»ÑŽÐ±Ñ‹Ñ ÑžÐ»Ð°ÑьціваÑьці Ð·Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ Ð¹ контуру. Ðле, у адрозьненьне ад фіґур, шлÑÑ… можна адвольна правіць празь перацÑгваньне Ñгоных вузлоў (а Ð½Ñ Ñ‚Ð¾Ð»ÑŒÐºÑ– прадвызначаных ручак) ці наўпроÑÑ‚ перацÑгваючы адрÑзак шлÑха. Вылучыце гÑты шлÑÑ… Ñ– пераключыцеÑÑ Ð½Ð° інÑтрумÑнт «Вузел» (F2): - - - + + + Ð’Ñ‹ пабачыце колькі шÑрых квадратаў — вузлоў шлÑха. ГÑÑ‚Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹ можна вылучыць пÑтрыкнуўшы, Shift+пÑтрыкнуўшы ці пацÑгнуўшы «ґумовую Ñтужку» — дакладна Ñк аб'екты, Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Â«Ð’Ñ‹Ð»ÑƒÑ‡Ð°Ð»ÑŒÐ½Ñ–ÐºÐ°Ð¼Â». ТакÑама можна пÑтрыкнуць па адрÑзку шлÑха, каб аўтаматычна вылучыць ÑÑƒÐ¼ÐµÐ¶Ð½Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹. Ð’Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹ ÑтановÑцца падÑьвечанымі й паказваюць Ñ–Ñ…Ð½Ñ‹Ñ Ñ€ÑƒÑ‡ÐºÑ– вузлоў — адну ці дзьве Ð¼Ð°Ð»Ñ‹Ñ Ð°ÐºÑ€ÑƒÐ¶Ñ‹Ð½Ñ‹, Ð·Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð· кожным вылучаным вузлом прамой лініÑй. КлÑвіша ! інвÑртуе вылучÑньне вузлоў у бÑгучых падшлÑхах (г.зн. падшлÑхах з прынамÑÑ– адным вылучаным вузлом), Alt+! інвÑртуе ва ÑžÑім шлÑху. - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,296 +214,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + ТакÑама можна цалкам ўцÑгнуць ручку вузла Ctrl+пÑтрыкнуўшы па ёй. Калі Ñž двух Ñумежных вузлоў ручкі ўцÑгнутыÑ, то адрÑзак шлÑху між імі — прамы. Каб выштурхнуць уцÑгнуты вузел Shift+пацÑгніце прÑч ад вузла. - - ПадшлÑÑ…Ñ– й ÑпалучÑньне + + ПадшлÑÑ…Ñ– й ÑпалучÑньне - - + + ШлÑÑ… можа ўтрымліваць больш за адзін падшлÑÑ…. ПадшлÑÑ… — гÑта паÑьлÑдоўнаÑьць вузлоў, злучаных між Ñабой. (Таму, калі шлÑÑ… мае больш за адзін падшлÑÑ…, Ð½Ñ ÑžÑе ÑÐ³Ð¾Ð½Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹ злучаныÑ.) Унізе зьлева тры падшлÑÑ…Ñ– адноÑÑцца да аднаго Ñкладанага шлÑха, Ñ‚Ð°ÐºÑ–Ñ Ð¶ тры падшлÑÑ…Ñ– Ñправа — Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: - - - - - - + + + + + + Заўважце, што Ñкладаны шлÑÑ… — гÑта Ð½Ñ Ñ‚Ð¾Ðµ ж, што ґрупа. ГÑта адзін аб'ект, Ñкі можна вылучыць толькі цалкам. Калі вылучыце левы аб'ект уверÑе, Ñ– пераключыцеÑÑ Ð½Ð° «Вузел», то пабачыце вузлы на ÑžÑÑ–Ñ… трох падшлÑхах. Ð Ñправа можна правіць вузлы толькі на адным шлÑху за раз. - - + + - Inkscape можа Спалучаць шлÑÑ…Ñ– Ñž Ñкладаны шлÑÑ… (Ctrl+K) Ñ– Разьбіваць Ñкладаны шлÑÑ… на аÑÐ¾Ð±Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ– (Shift+Ctrl+K). ПаÑпрабуйце гÑÑ‚Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ з прыкладамі ўверÑе. Паколькі аб'ект можа мець толькі адно запаўненьне й контур, то новы Ñкладаны шлÑÑ… атрымоўвае Ñтыль першага (Ñамага ніжнÑга Ñž z-парадку) аб'екту пры ÑпалучÑньні. + Inkscape можа Спалучаць шлÑÑ…Ñ– Ñž Ñкладаны шлÑÑ… (Ctrl+K) Ñ– Разьбіваць Ñкладаны шлÑÑ… на аÑÐ¾Ð±Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ– (Shift+Ctrl+K). ПаÑпрабуйце гÑÑ‚Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ з прыкладамі ўверÑе. Паколькі аб'ект можа мець толькі адно запаўненьне й контур, то новы Ñкладаны шлÑÑ… атрымоўвае Ñтыль першага (Ñамага ніжнÑга Ñž z-парадку) аб'екту пры ÑпалучÑньні. - - + + Пры ÑпалучÑньні шлÑхоў з запаўненьнем, ÑÐºÑ–Ñ Ð½Ð°ÐºÐ»Ð°Ð´Ð²Ð°ÑŽÑ†Ñ†Ð°, запаўненьне звычайна зьнікае Ñž абÑÑгах, дзе шлÑÑ…Ñ– накладваюцца: - - - + + + ГÑта найлÑгчÑйшы ÑпоÑаб Ñтварыць аб'ект зь дзіркай. Больш Ð¼Ð°Ð³ÑƒÑ‚Ð½Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ шлÑхоў глÑзіце Ñž «ЛÑґічных апÑрацыÑх» унізе. - - ПератварÑньне Ñž шлÑÑ… + + ПератварÑньне Ñž шлÑÑ… - - + + Любую фіґуру ці Ñ‚ÑкÑтавы аб'ект можна ператварыць у шлÑÑ… (Shift+Ctrl+C). ГÑтае дзеÑньне не зьмÑнÑе выглÑду аб'екта, але прыбірае уÑе магчымаÑьці, улаÑÑŒÑ†Ñ–Ð²Ñ‹Ñ Ñгонаму тыпу (г.зн. вы больш Ð½Ñ Ð·Ð¼Ð¾Ð¶Ð°Ñ†Ðµ закруглÑць куты праÑтакутніка ці правіць Ñ‚ÑкÑÑ‚), замеÑÑ‚ гÑтага вы зможаце правіць ÑÐ³Ð¾Ð½Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹. ВоÑÑŒ дзьве зоркі — Ð»ÐµÐ²Ð°Ñ Ð¿Ð°ÐºÑ–Ð½ÑƒÑ‚Ð°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð°Ð¹, а Ð¿Ñ€Ð°Ð²Ð°Ñ Ð¿ÐµÑ€Ð°Ñ‚Ð²Ð¾Ñ€Ð°Ð½Ð°Ñ Ñž шлÑÑ…. ПераключыцеÑÑ Ð½Ð° «Вузел», вылучыце Ñ–Ñ… Ñ– параўнайце Ñ–Ñ…Ð½Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñьці праўкі: - - - - + + + + Больш за тое, можна ператварыць у шлÑÑ… («абрыÑ») контур любога аб'екту. Унізе першы аб'ект — Ñпачатны шлÑÑ… (без запаўненьнÑ, з чорным контурам), а другі — вынік загаду Контур у шлÑÑ… (чорнае запаўненьне, бÑз контуру): - - - - ЛÑÒ‘Ñ–Ñ‡Ð½Ñ‹Ñ Ð°Ð¿Ñрацыі + + + + ЛÑÒ‘Ñ–Ñ‡Ð½Ñ‹Ñ Ð°Ð¿Ñрацыі - - + + Загады Ñž мÑню «ШлÑх» дазвалÑюць Ñпалучаць два ці болей аб'ектаў з дапамогай лÑґічных апÑрацый: - Ð¡Ð¿Ð°Ñ‡Ð°Ñ‚Ð½Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹ - Ðб'Ñднаньне (Ctrl++) - РознаÑьць (Ctrl+-) - ПераÑÑчÑньне(Ctrl+*) - ВыключÑньне(Ctrl+^) - ДзÑленьне(Ctrl+/) - Ðдразаньне шлÑху(Ctrl+Alt+/) - - - - - - - - - - - (ніз Ð¼Ñ–Ð½ÑƒÑ Ð²ÐµÑ€Ñ…) - - + Ð¡Ð¿Ð°Ñ‡Ð°Ñ‚Ð½Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹ + Ðб'Ñднаньне (Ctrl++) + РознаÑьць (Ctrl+-) + ПераÑÑчÑньне(Ctrl+*) + ВыключÑньне(Ctrl+^) + ДзÑленьне(Ctrl+/) + Ðдразаньне шлÑху(Ctrl+Alt+/) + + + + + + + + + + + (ніз Ð¼Ñ–Ð½ÑƒÑ Ð²ÐµÑ€Ñ…) + + - Скароты клÑвіÑтуры Ð´Ð»Ñ Ð³Ñтых загадаў робÑць намінку на арытмÑÑ‚Ñ‹Ñ‡Ð½Ñ‹Ñ Ð°Ð½Ð°Ð»ÑÒ‘Ñ– лÑґічных апÑрацый (аб'Ñднаньне — Ñкладаньне, рознаÑьць — адніманьне, Ñ– г.д.). Загады РознаÑьць Ñ– ВыключÑньне можна выкарыÑтоўваць толькі з двума аб'ектамі, Ñ–Ð½ÑˆÑ‹Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐ²Ð°ÑŽÑ†ÑŒ любую колькаÑьць аб'ектаў адразу. Вынік заўжды атрымоўвае Ñтыль верхнÑга аб'екта. + Скароты клÑвіÑтуры Ð´Ð»Ñ Ð³Ñтых загадаў робÑць намінку на арытмÑÑ‚Ñ‹Ñ‡Ð½Ñ‹Ñ Ð°Ð½Ð°Ð»ÑÒ‘Ñ– лÑґічных апÑрацый (аб'Ñднаньне — Ñкладаньне, рознаÑьць — адніманьне, Ñ– г.д.). Загады РознаÑьць Ñ– ВыключÑньне можна выкарыÑтоўваць толькі з двума аб'ектамі, Ñ–Ð½ÑˆÑ‹Ñ Ð°Ð¿Ñ€Ð°Ñ†Ð¾ÑžÐ²Ð°ÑŽÑ†ÑŒ любую колькаÑьць аб'ектаў адразу. Вынік заўжды атрымоўвае Ñтыль верхнÑга аб'екта. - - + + - Вынік ВыключÑÐ½ÑŒÐ½Ñ Ð²Ñ‹Ð³Ð»Ñдае падобным на вынік СпалучÑÐ½ÑŒÐ½Ñ (гл. вышÑй), але адрозьненьне Ñž тым, што ВыключÑньне дадае Ð´Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹ там, дзе пераÑÑкаюцца ÑÐ¿Ð°Ñ‡Ð°Ñ‚Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–. РознаÑьць між ДзÑленьнем Ñ– Ðдразаньнем шлÑху Ñž тым, што першы разразае ўвеÑÑŒ ніжні аб'ект шлÑхам верхнÑга аб'екту, а апошні адразае толькі контур ніжнÑга аб'екту й прыбірае запаўненьне (гÑта зручна Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð·Ð°Ð½ÑŒÐ½Ñ Ð½Ð° кавалкі контураў без запаўненьнÑ). + Вынік ВыключÑÐ½ÑŒÐ½Ñ Ð²Ñ‹Ð³Ð»Ñдае падобным на вынік СпалучÑÐ½ÑŒÐ½Ñ (гл. вышÑй), але адрозьненьне Ñž тым, што ВыключÑньне дадае Ð´Ð°Ð´Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹ там, дзе пераÑÑкаюцца ÑÐ¿Ð°Ñ‡Ð°Ñ‚Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–. РознаÑьць між ДзÑленьнем Ñ– Ðдразаньнем шлÑху Ñž тым, што першы разразае ўвеÑÑŒ ніжні аб'ект шлÑхам верхнÑга аб'екту, а апошні адразае толькі контур ніжнÑга аб'екту й прыбірае запаўненьне (гÑта зручна Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð·Ð°Ð½ÑŒÐ½Ñ Ð½Ð° кавалкі контураў без запаўненьнÑ). - - СьціÑканьне й раÑьцÑгваньне + + СьціÑканьне й раÑьцÑгваньне - - + + - Inkscape можа павÑлічыць Ñ– зьменшыць фіґуру Ð½Ñ Ñ‚Ð¾Ð»ÑŒÐºÑ– зьмÑненьнем памеру, але такÑама зрушваючы кожны пункт шлÑха аб'екта пÑрпÑндыкулÑрна шлÑху. ÐÐ´Ð¿Ð°Ð²ÐµÐ´Ð½Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ называюцца СьціÑканьнем (Ctrl+() Ñ– РаÑьцÑгваньнем (Ctrl+)). Унізе паказаны Ñпачатны шлÑÑ… (чырвоны) Ñ– колькі шлÑхоў, атрыманых ÑьціÑканьнем ці раÑьцÑгваньнем Ñго: + Inkscape можа павÑлічыць Ñ– зьменшыць фіґуру Ð½Ñ Ñ‚Ð¾Ð»ÑŒÐºÑ– зьмÑненьнем памеру, але такÑама зрушваючы кожны пункт шлÑха аб'екта пÑрпÑндыкулÑрна шлÑху. ÐÐ´Ð¿Ð°Ð²ÐµÐ´Ð½Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ называюцца СьціÑканьнем (Ctrl+() Ñ– РаÑьцÑгваньнем (Ctrl+)). Унізе паказаны Ñпачатны шлÑÑ… (чырвоны) Ñ– колькі шлÑхоў, атрыманых ÑьціÑканьнем ці раÑьцÑгваньнем Ñго: - - - - - - - - - + + + + + + + + + - ПроÑÑ‚Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ СьціÑнуць Ñ– РаÑьцÑгнуць Ñтвараюць шлÑÑ…Ñ– (ператвараючы Ñпачатны аб'ект у шлÑÑ…, калі трÑба). ЧаÑта зручней карыÑтацца загадам Дынамічны зрух (Ctrl+J), Ñкі Ñтварае аб'ект з ручкай (падобнай на ручку фіґуры), ÑÐºÑ–Ñ ÐºÑ–Ñ€ÑƒÐµ адлеглаÑьцю зруху. Вылучыце аб'ект унізе, пераключыцеÑÑ Ð½Ð° «Вузел» Ñ– пацÑгніце ручку, каб зразумець думку: + ПроÑÑ‚Ñ‹Ñ Ð·Ð°Ð³Ð°Ð´Ñ‹ СьціÑнуць Ñ– РаÑьцÑгнуць Ñтвараюць шлÑÑ…Ñ– (ператвараючы Ñпачатны аб'ект у шлÑÑ…, калі трÑба). ЧаÑта зручней карыÑтацца загадам Дынамічны зрух (Ctrl+J), Ñкі Ñтварае аб'ект з ручкай (падобнай на ручку фіґуры), ÑÐºÑ–Ñ ÐºÑ–Ñ€ÑƒÐµ адлеглаÑьцю зруху. Вылучыце аб'ект унізе, пераключыцеÑÑ Ð½Ð° «Вузел» Ñ– пацÑгніце ручку, каб зразумець думку: - - - + + + Такі аб'ект дынамічнага зруху памÑтае Ñпачатны шлÑÑ…, таму не «пагаршаецца», калі вы зьмÑнÑеце адлеглаÑьць зруху зноў Ñ– зноў. Калі такі аб'ект больш Ð½Ñ Ñ‚Ñ€Ñба правіць, Ñго заўжды можна ператварыць у шлÑÑ…. - - + + Больш зручным зьÑўлÑецца злучаны зрух, Ñкі падобны на дынамічны, але злучаны зь іншым шлÑхам, Ñкі заÑтаецца прыдатным да праўкі. Ðдзін выточны шлÑÑ… можа мець любую колькаÑьць злучаных зрухаў. Унізе выточны шлÑÑ… чырвоны, адзін зрух, злучаны зь ім, мае чорны контур, але Ð½Ñ Ð¼Ð°Ðµ запаўненьнÑ, а іншы мае чорнае запаўненьне, але Ð½Ñ Ð¼Ð°Ðµ контуру. - - + + - Вылучыце чырвоны аб'ект Ñ– папраўце ÑÐ³Ð¾Ð½Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹, паназірайце Ñк адказваюць на гÑта абодва Ð·Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ñ€ÑƒÑ…Ñ–. ЦÑпер вылучыце любы зрух Ñ– пацÑгніце ÑÐ³Ð¾Ð½Ñ‹Ñ Ñ€ÑƒÑ‡ÐºÑ–, каб зьмÑніць Ñ€Ð°Ð´Ñ‹ÑŽÑ Ð·Ñ€ÑƒÑ…Ñƒ. ÐарÑшце, занатуйце Ñк пераÑоўваньне ці ператварÑньне крыніцы пераÑоўвае ÑžÑе ÑÐ³Ð¾Ð½Ñ‹Ñ Ð·Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð·Ñ€ÑƒÑ…Ñ–, Ñ– Ñк можна пераÑоўваць ці ператвараць зрухі незалежна, не гублÑючы іхнай ÑувÑзі з крыніцай. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - СпрашчÑньне + + СпрашчÑньне - - + + - У першую чаргу загад СпроÑьціць (Ctrl+L) выкарыÑтоўваецца каб зьменшыць колькаÑьць вузлоў на шлÑху, амаль захоўваючы Ñгоную форму. ГÑта можа прыдаÑца Ð´Ð»Ñ ÑˆÐ»Ñхоў, Ñтвораных «Ðлоўкам», бо ён чаÑам Ñтварае больш вузлоў, чым трÑба. Унізе Ð»ÐµÐ²Ð°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð° ÑÑ‚Ð²Ð¾Ñ€Ð°Ð½Ð°Ñ Ð°Ð´ рукі, а Ð¿Ñ€Ð°Ð²Ð°Ñ â€” ÑÐ³Ð¾Ð½Ð°Ñ ÑÐ¿Ñ€Ð¾ÑˆÑ‡Ð°Ð½Ð°Ñ ÐºÐ¾Ð¿Ñ–Ñ. Спачатны шлÑÑ… мае 28 вузлоў, а Ñпрошчаны 17 (што значыць, што зь ім праÑьцей працаваць з «Вузлом») Ñ– ён больш гладкі. + У першую чаргу загад СпроÑьціць (Ctrl+L) выкарыÑтоўваецца каб зьменшыць колькаÑьць вузлоў на шлÑху, амаль захоўваючы Ñгоную форму. ГÑта можа прыдаÑца Ð´Ð»Ñ ÑˆÐ»Ñхоў, Ñтвораных «Ðлоўкам», бо ён чаÑам Ñтварае больш вузлоў, чым трÑба. Унізе Ð»ÐµÐ²Ð°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð° ÑÑ‚Ð²Ð¾Ñ€Ð°Ð½Ð°Ñ Ð°Ð´ рукі, а Ð¿Ñ€Ð°Ð²Ð°Ñ â€” ÑÐ³Ð¾Ð½Ð°Ñ ÑÐ¿Ñ€Ð¾ÑˆÑ‡Ð°Ð½Ð°Ñ ÐºÐ¾Ð¿Ñ–Ñ. Спачатны шлÑÑ… мае 28 вузлоў, а Ñпрошчаны 17 (што значыць, што зь ім праÑьцей працаваць з «Вузлом») Ñ– ён больш гладкі. - - - - + + + + - Узровень ÑпрашчÑÐ½ÑŒÐ½Ñ (Ñкі называецца парог) залежыць ад памеру вылучÑньнÑ. Таму, калі вылучыце шлÑÑ… разам зь нейкім вÑлікім аб'ектам, ён будзе Ñпрошчаны аґрÑÑіўней, чым калі б вы вылучылі толькі Ñам шлÑÑ…. Больш за тое, загад СпроÑьціць — паÑкораны. ГÑта значыць, што калі націÑьніце Ctrl+L некалькі разоў у хуткай паÑьлÑдоўнаÑьці (не пазьней Ñк праз 0,5 ÑÑкунд адна ад адной), парог будзе павÑлічвацца з кожным выклікам. (Калі зробіце іншае ÑпрашчÑньне паÑÑŒÐ»Ñ Ð¿Ð°ÑžÐ·Ñ‹, парог вернецца да Ñвайго прадвызначанага значÑньнÑ.) КарыÑтаючыÑÑ Ð¿Ð°ÑкарÑньнем лёгка выкарыÑтоўваць патрÑбны ўзровень ÑпрашчÑньнÑ, патрÑбны Ñž кожным аÑобным выпадку. + Узровень ÑпрашчÑÐ½ÑŒÐ½Ñ (Ñкі называецца парог) залежыць ад памеру вылучÑньнÑ. Таму, калі вылучыце шлÑÑ… разам зь нейкім вÑлікім аб'ектам, ён будзе Ñпрошчаны аґрÑÑіўней, чым калі б вы вылучылі толькі Ñам шлÑÑ…. Больш за тое, загад СпроÑьціць — паÑкораны. ГÑта значыць, што калі націÑьніце Ctrl+L некалькі разоў у хуткай паÑьлÑдоўнаÑьці (не пазьней Ñк праз 0,5 ÑÑкунд адна ад адной), парог будзе павÑлічвацца з кожным выклікам. (Калі зробіце іншае ÑпрашчÑньне паÑÑŒÐ»Ñ Ð¿Ð°ÑžÐ·Ñ‹, парог вернецца да Ñвайго прадвызначанага значÑньнÑ.) КарыÑтаючыÑÑ Ð¿Ð°ÑкарÑньнем лёгка выкарыÑтоўваць патрÑбны ўзровень ÑпрашчÑньнÑ, патрÑбны Ñž кожным аÑобным выпадку. - - + + - Ðпроч Ð·Ð³Ð»Ð°Ð´Ð¶Ð²Ð°Ð½ÑŒÐ½Ñ Ð»Ñ–Ð½Ñ–Ð¹ ад рукі, СпрашчÑньне можна выкарыÑтоўваць Ð´Ð»Ñ Ñ€Ð¾Ð·Ð½Ñ‹Ñ… творчых ÑÑ„Ñктаў. ЧаÑта Ð²ÑƒÐ³Ð»Ð°Ð²Ð°Ñ‚Ð°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð° выйграе ад невÑлічкага ÑпрашчÑньнÑ, Ñкое надае больш жыцьцёвую форму Ñпачатнай фіґуры, згладжваючы воÑÑ‚Ñ€Ñ‹Ñ ÐºÑƒÑ‚Ñ‹ й надаючы вельмі Ð½Ð°Ñ‚ÑƒÑ€Ð°Ð»ÑŒÐ½Ñ‹Ñ ÑкажÑньні, чаÑам ÑтыльныÑ, а чаÑам ÑьмешныÑ. ВоÑÑŒ прыклад фіґуры зь бібліÑÑ‚Ñкі відарыÑаў, ÑÐºÐ°Ñ Ð²Ñ‹Ð³Ð»Ñдае нашмат лепей паÑÑŒÐ»Ñ Ð¡Ð¿Ñ€Ð°ÑˆÑ‡ÑньнÑ: + Ðпроч Ð·Ð³Ð»Ð°Ð´Ð¶Ð²Ð°Ð½ÑŒÐ½Ñ Ð»Ñ–Ð½Ñ–Ð¹ ад рукі, СпрашчÑньне можна выкарыÑтоўваць Ð´Ð»Ñ Ñ€Ð¾Ð·Ð½Ñ‹Ñ… творчых ÑÑ„Ñктаў. ЧаÑта Ð²ÑƒÐ³Ð»Ð°Ð²Ð°Ñ‚Ð°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð° выйграе ад невÑлічкага ÑпрашчÑньнÑ, Ñкое надае больш жыцьцёвую форму Ñпачатнай фіґуры, згладжваючы воÑÑ‚Ñ€Ñ‹Ñ ÐºÑƒÑ‚Ñ‹ й надаючы вельмі Ð½Ð°Ñ‚ÑƒÑ€Ð°Ð»ÑŒÐ½Ñ‹Ñ ÑкажÑньні, чаÑам ÑтыльныÑ, а чаÑам ÑьмешныÑ. ВоÑÑŒ прыклад фіґуры зь бібліÑÑ‚Ñкі відарыÑаў, ÑÐºÐ°Ñ Ð²Ñ‹Ð³Ð»Ñдае нашмат лепей паÑÑŒÐ»Ñ Ð¡Ð¿Ñ€Ð°ÑˆÑ‡ÑньнÑ: - Спачатку - Лёгкае ÑпрашчÑньне - ÐÒ‘Ñ€ÑÑіўнае ÑпрашчÑньне - - - - - СтварÑньне Ñ‚ÑкÑту + Спачатку + Лёгкае ÑпрашчÑньне + ÐÒ‘Ñ€ÑÑіўнае ÑпрашчÑньне + + + + + СтварÑньне Ñ‚ÑкÑту - - + + Inkscape здольны Ñтвараць Ð´Ð¾ÑžÐ³Ñ–Ñ Ð¹ ÑÐºÐ»Ð°Ð´Ð°Ð½Ñ‹Ñ Ñ‚ÑкÑты. Ðднак такÑама ён даволі зручны Ð´Ð»Ñ ÑтварÑÐ½ÑŒÐ½Ñ ÐºÐ°Ñ€Ð¾Ñ‚ÐºÑ–Ñ… Ñ‚ÑкÑтавых аб'ектаў, такіх Ñк загалоўкі, банÑры, лÑґатыпы, пазнакі й загалоўкі дыÑґрамаў Ñ– г.д. ГÑты разьдзел — толькі Ð±Ð°Ð·Ð°Ð²Ñ‹Ñ ÑžÐ²Ð¾Ð´Ð·Ñ–Ð½Ñ‹ Ñž магчымаÑьці Inkscape па працы з Ñ‚ÑкÑтам. - - + + Стварыць Ñ‚ÑкÑтавы аб'ект вельмі проÑта: пераключыцеÑÑ Ð½Ð° інÑтрумÑнт «ТÑкÑт» (F8), пÑтрыкніце дзе-небудзь па дакумÑнце й пішыце Ñ‚ÑкÑÑ‚. Каб зьмÑніць ґарнітуру, Ñтыль, кеґль Ñ– раўнаваньне адкрыйце дыÑлёґ «ТÑкÑÑ‚ Ñ– шрыфт» (Shift+Ctrl+T). ГÑты дыÑлёґ такÑам мае ўкладку, дзе можна правіць вылучаны Ñ‚ÑкÑтавы аб'ект, чаÑам гÑта зручней, чым правіць Ñго адразу на палатне (у прыватнаÑьці, гÑÑ‚Ð°Ñ ÑžÐºÐ»Ð°Ð´ÐºÐ° ўмее правÑраць правапіÑ). - - + + Як Ñ– Ñ–Ð½ÑˆÑ‹Ñ Ñ–Ð½ÑтрумÑнты, «ТÑкÑт» можа вылучаць аб'екты Ñвайго ўлаÑнага віду — Ñ‚ÑкÑÑ‚Ð°Ð²Ñ‹Ñ Ð°Ð±'екты — таму можаце пÑтрыкнуць курÑорам любы Ñ‚ÑкÑÑ‚ Ñ– адразу правіць Ñго (напрыклад, гÑты абзац). - - + + Ðдна з найчаÑьцейшых апÑрацый з Ñ‚ÑкÑтам у Ñ‚ÑкÑтавым дызайне — Ñ€ÑґулÑваньне адлеглаÑьцÑÑž між літарамі й радкамі. Як заўжды, Inkscape мае клÑвіÑÑ‚ÑƒÑ€Ð½Ñ‹Ñ Ñкароты. Калі правіце Ñ‚ÑкÑÑ‚, клÑвішы Alt+< Ñ– Alt+> зьмÑнÑюць Ð¼Ñ–Ð¶Ð»Ñ–Ñ‚Ð°Ñ€Ð½Ñ‹Ñ Ñ–Ð½Ñ‚Ñрвалы Ñž бÑгучым радку так, што Ð°Ð³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð´Ð°ÑžÐ¶Ñ‹Ð½Ñ Ñ€Ð°Ð´ÐºÑƒ мÑнÑецца на 1 пікÑÑль пры бÑгучым маштабе (параўнайце з «Вылучальнікам», дзе Ñ‚Ñ‹Ñ Ð¶ клÑвішы робÑць аднапікÑÑльнае зьмÑненьне памеру). Як правіла, калі кеґль шрыфта Ñž Ñ‚ÑкÑтавым аб'екце большы за прадвызначаны, будзе добра, калі ÑьціÑнуць літары крыху шчыльней, чым прадвызначана. ВоÑÑŒ прыклад: - Спачатку - Міжлітарны інтÑрвал зьменшаны - Inspiration - Inspiration - - + Спачатку + Міжлітарны інтÑрвал зьменшаны + Inspiration + Inspiration + + СьціÑнуты варыÑнт выглÑдае крыху лепей, але ÑžÑÑ‘ ÑÑˆÑ‡Ñ Ð½Ðµ ідÑальна: адлеглаÑьці між літарамі не аднаÑтайныÑ, напрыклад, «a» Ñ– «t» задалёкіÑ, а «t» и «i» заблізкіÑ. Ð’ÐµÐ»Ñ–Ñ‡Ñ‹Ð½Ñ Ñ‚Ð°ÐºÐ¾Ð³Ð° кепÑкага кернінґу (аÑабліва бачнага пры вÑлікіх кеґлÑÑ…) Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ñž нізкаÑкаÑных шрыфтах, чым у выÑокаÑкаÑных, зрÑшты, у любым радку Ñ‚ÑкÑту зь любым шрыфтом можна адшукаць пары літар, Ñкім не пашкодзіць паправіць кернінґ. - - + + У Inkscape Ñ‚Ð°ÐºÑ–Ñ Ð²Ñ‹Ð¿Ñ€Ð°ÑžÐ»ÐµÐ½ÑŒÐ½Ñ– вельмі проÑтыÑ. ПроÑта паÑтаўце Ñ‚ÑкÑтавы курÑор між раздражнÑючымі літарамі й націÑьніце Alt+ÑтрÑлкі, каб паÑунуць літары Ñправа ад курÑору. ВоÑÑŒ той жа загаловак ізноў, цÑпер з ручным выпраўленьнем адлеглаÑьцÑÑž між літарамі: - Міжлітарны інтÑрвал зьменшаны, ручны кернінґ некаторых літар - Inspiration - - + Міжлітарны інтÑрвал зьменшаны, ручны кернінґ некаторых літар + Inspiration + + У дадатак да Ð·Ñ€ÑƒÑˆÐ²Ð°Ð½ÑŒÐ½Ñ Ð»Ñ–Ñ‚Ð°Ñ€ па гарызантамі з дапамогай Alt+Улева ці Alt+Управа, Ñ–Ñ… можна паÑунуць па вÑртыкалі, выкарыÑтоўваючы Alt+Уверх ці Alt+Уніз: - Inspiration - - + Inspiration + + Ð’Ñдома ж, можна проÑта ператварыць Ñ‚ÑкÑÑ‚ у шлÑÑ… (Shift+Ctrl+C) Ñ– пераÑунуць літары Ñк Ð·Ð²Ñ‹Ñ‡Ð°Ð¹Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–. Тым Ð½Ñ Ð¼ÐµÐ½Ñˆ, зручней трымаць Ñ‚ÑкÑÑ‚ Ñк Ñ‚ÑкÑÑ‚, тады Ñго й далей можна правіць ці зьмÑнÑць шрыфты не прыбіраючы кернінґу й інтÑрвалаў, Ñ– ÑÑˆÑ‡Ñ Ñ‘Ð½ займае нашмат меней праÑторы Ñž захаваным файле. ÐÐ´Ð·Ñ–Ð½Ð°Ñ Ð¿Ñ€Ð°Ð±Ð»ÐµÐ¼Ð° з падыходам «тÑкÑÑ‚ Ñк Ñ‚ÑкÑт» — гÑта тое, што патрÑбна ÑžÑталёўваць Ñпачатны шрыфт на любой ÑÑ‹ÑÑ‚Ñме, дзе гÑты дакумÑнт SVG будзе адкрыты. - - + + ÐналÑґічна міжлітарнаму інтÑрвалу Ñ€Ñґулюецца інтÑрліньÑж (міжрадковы інтÑрвал) у шматрадковых Ñ‚ÑкÑтах. ÐаціÑьніце клÑвішу Ctrl+Alt+< Ñ– Ctrl+Alt+> у любым параґрафе гÑтага падручніка, каб зьменшыць ці павÑлічыць інтÑрліньÑж гÑтак, каб Ð°Ð³ÑƒÐ»ÑŒÐ½Ð°Ñ Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ñ‚ÑкÑтавага аб'екту зьмÑнілаÑÑ Ð½Ð° 1 пікÑÑль пры бÑгучым маштабе. Як Ñ– Ñž «Вылучальніку», націÑканьне Shift зь любым інтÑрвалам ці кернінґам дае Ñž 10 разоў больш вынік, чым бÑз Shift. - - РÑдактар XML + + РÑдактар XML - - + + Вельмі магутным зьÑўлÑецца інÑтрумÑнт Inkscape «РÑдактар XML» (Shift+Ctrl+X). Ðн паказвае ÑžÑÑ‘ дрÑва XML дакумÑнту, заўжды адлюÑтроўваючы Ñгоны бÑгучы Ñтан. Ð’Ñ‹ можаце правіць рыÑунак Ñ– назіраць за адпаведнымі зьменамі Ñž дрÑве XML. Больш за тое, вы можаце правіць любы Ñ‚ÑкÑÑ‚, ÑлемÑнт ці атрыбут у Ñ€Ñдактары XML Ñ– назіраць вынік гÑтага на палатне. ГÑта найлепшы інÑтрумÑнт, Ñкі толькі можна ÑžÑвіць, Ð´Ð»Ñ Ñ–Ð½Ñ‚Ñрактыўнага вывучÑÐ½ÑŒÐ½Ñ SVG, Ñ– ён дазвалÑе рабіць штукі, Ð½ÐµÐ¼Ð°Ð³Ñ‡Ñ‹Ð¼Ñ‹Ñ Ð· дапамогай звычайных інÑтрумÑнтаў. - - Ð’Ñ‹Ñновы + + Ð’Ñ‹Ñновы - - + + - ГÑты падручнік паказаў толькі малую чаÑтку ÑžÑÑ–Ñ… магчымаÑьцÑÑž Inkscape. Мы ÑпадзÑёмÑÑ, што вы атрымалі ад Ñго аÑалоду. ÐÑ Ð±Ð¾Ð¹Ñ†ÐµÑÑ ÑкÑпÑрымÑнтаваць й дзÑліцца Ñваімі творамі. Калі лаÑка, наведайце www.inkscape.org, калі шукаеце болей інфармацыі, апошнюю вÑÑ€ÑÑ–ÑŽ, дапамогу карыÑтальнікаў ці ÑупольнаÑьці раÑпрацоўнікаў. + ГÑты падручнік паказаў толькі малую чаÑтку ÑžÑÑ–Ñ… магчымаÑьцÑÑž Inkscape. Мы ÑпадзÑёмÑÑ, што вы атрымалі ад Ñго аÑалоду. ÐÑ Ð±Ð¾Ð¹Ñ†ÐµÑÑ ÑкÑпÑрымÑнтаваць й дзÑліцца Ñваімі творамі. Калі лаÑка, наведайце www.inkscape.org, калі шукаеце болей інфармацыі, апошнюю вÑÑ€ÑÑ–ÑŽ, дапамогу карыÑтальнікаў ці ÑупольнаÑьці раÑпрацоўнікаў. - + @@ -533,8 +538,8 @@ rotated/scaled to match. - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць diff --git a/share/tutorials/tutorial-advanced.de.svg b/share/tutorials/tutorial-advanced.de.svg index beff5e51e..cd5b465ff 100644 --- a/share/tutorials/tutorial-advanced.de.svg +++ b/share/tutorials/tutorial-advanced.de.svg @@ -43,7 +43,7 @@ ::FORTGESCHRITTENE BENUTZUNG -Bulia Byak (buliabyak@users.sf.net) und Josh Andler (scislac@users.sf.net) + @@ -341,7 +341,7 @@ Bulia Byak (buliabyak@users.sf.net) und Josh Andler (scislac@users.sf.net) - Wählen Sie das rote Objekt und bearbeiten Sie seine Knoten. Sehen Sie, wie sich beide verbundene Versätze anpassen? Jetzt wählen Sie einen Versatz und ziehen an seinem Anfasser, um den Versatzabstand anzupassen. Beobachten Sie, wie ein Verschieben des Ursprungspfades alle seine verbundenen Versatzobjekte bewegt, und wie Sie die Versatzobjekte unabhängig bewegen oder verändern können, ohne dass sie ihre Verbindung zum Ursprungspfad verlieren. + Wählen Sie das rote Objekt und bearbeiten Sie es mit dem Knotenwerkzeug. Achten Sie dabei darauf, wie sich die beiden verbundene Versatzobjekte verhalten. Jetzt wählen Sie ein Versatzobjekt aus und ziehen an seinem Anfasser, um den Versatzabstand anzupassen. Beachten Sie, dass Sie die Versatzobjekte unabhängig bewegen oder verändern können, ohne dass sie ihre Verbindung zum Ursprungspfad verlieren. diff --git a/share/tutorials/tutorial-advanced.el.svg b/share/tutorials/tutorial-advanced.el.svg index f8cf305b3..3938248a3 100644 --- a/share/tutorials/tutorial-advanced.el.svg +++ b/share/tutorials/tutorial-advanced.el.svg @@ -40,440 +40,445 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - + ::ΠΡΟΧΩΡΗΜΈÎΟ -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + Αυτό το μάθημα καλÏπτει αντιγÏαφή/επικόλληση, επεξεÏγασία κόμβων, σχεδίαση ελεÏθεÏη και bezier, χειÏισμός μονοπατιοÏ, boole, μετατοπίσεις, απλοποίηση και εÏγαλείο κειμένου. - + ΧÏήση Ctrl+βέλη, Ï„Ïοχός Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï Î® σÏÏσιμο μεσαίου Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï Î³Î¹Î± κÏλιση της σελίδας Ï€Ïος τα κάτω. Για τα βασικά της δημιουÏγίας αντικειμένου, επιλογής και μετασχηματισμοÏ, δείτε το βασικό μάθημα στο Βοήθεια > Μαθήματα. - - Τεχνικές επικόλλησης + + Τεχνικές επικόλλησης - + Μετά την αντιγÏαφή μεÏικών αντικειμένων με Ctrl+C ή αποκοπή με Ctrl+X, η κανονική εντολή Επικόλληση (Ctrl+V) επικολλά τα αντιγÏαμμένα αντικείμενα ακÏιβώς κάτω από το δÏομέα του ποντικιοÏ, εάν ο δÏομέας είναι εκτός παÏαθÏÏου, στο κέντÏο του παÏαθÏÏου εγγÏάφου. Όμως, τα αντικείμενα στο Ï€ÏόχειÏο θυμοÏνται ακόμα την αÏχική θέση από την οποία αντιγÏάφηκαν και μποÏοÏν να επικολληθοÏν πίσω εκεί με Επικκόληση επιτόπου (Ctrl+Alt+V). - + Μια άλλη εντολή, Επικόλληση μοÏφοποίησης (Shift+Ctrl+V), εφαÏμόζει τη μοÏφοποίηση του (Ï€Ïώτου) αντικειμένου στο Ï€ÏόχειÏο στην Ï„Ïέχουσα επιλογή. Η έτσι επικολλημένη “μοÏφοποίηση†πεÏιλαμβάνει το γέμισμα, την πινελιά και Ïυθμίσεις γÏαμματοσειÏών, αλλά όχι το μέγεθος, σχήμα ή ειδικές παÏαμέτÏους στον Ï„Ïπο σχήματος, όπως ο αÏιθμός κοÏυφών αστεÏιοÏ. - + Ένα ακόμα σÏνολο εντολών επικόλλησης, Επικόλληση μεγέθους, κλιμακώνει την επιλογή ώστε να ταιÏιάζει το επιθυμητό μέγεθος του γνωÏίσματος των αντικειμένων Ï€ÏοχείÏου. ΥπάÏχει ένας αÏιθμός εντολών για το μέγεθος της επικόλλησης και είναι ως εξής: μέγεθος επικόλλησης, πλάτος επικόλλησης, Ïψος επικόλλησης, επικόλληση μεγέθους ξεχωÏιστά, επικόλληση πλάτους ξεχωÏιστά και επικόλληση Ïψους ξεχωÏιστά. - + Η Επικόλληση μεγέθους κλιμακώνει τη συνολική επιλογή για να ταιÏιάζει με το συνολικό μέγεθος των αντικειμένων Ï€ÏοχείÏου. Η Επικόλληση πλάτους/Επικόλληση Ïψους κλιμακώνει τη συνολική επιλογή οÏιζόντια/κάθετα για να ταιÏιάζει το πλάτος/Ïψος των αντικειμένων Ï€ÏοχείÏου. Αυτές οι εντολές διατηÏοÏν το λόγο κλιμάκωσης στη γÏαμμή ελέγχων επιλογέα εÏγαλείου (Î¼ÎµÏ„Î±Î¾Ï Ï€ÎµÎ´Î¯Ï‰Î½ πλάτους και Ïψους), έτσι ώστε όταν το κλείδωμα πιέζεται, η άλλη διάσταση του επιλεγμένου αντικειμένου κλιμακώνεται κατά την ίδια αναλογία. Αλλιώς η άλλη διάσταση παÏαμένει αμετάβλητη. Οι εντολές που πεÏιέχουν “ξεχωÏιστά†δουλεÏουν παÏόμοια με τις πιο πάνω πεÏιγÏαφείσες εντολές, εκτός από την κλιμάκωση κάθε επιλεγμένου αντικειμένου ξεχωÏιστά για να ταιÏιάξει σε μέγεθος/πλάτος/Ïψος των αντικειμένων Ï€ÏοχείÏου. - + Το Ï€ÏόχειÏο είναι για όλο το σÏστημα - μποÏείτε να αντιγÏάψετε/επικολλήσετε αντικείμενα Î¼ÎµÏ„Î±Î¾Ï Î´Î¹Î±Ï†Î¿Ïετικών στιγμιοτÏπων του Inkscape καθώς και Î¼ÎµÏ„Î±Î¾Ï Inkscape και άλλων εφαÏμογών (οι οποίες Ï€Ïέπει να είναι ικανές να χειÏιστοÏν SVG στο Ï€ÏόχειÏο για να το χÏησιμοποιήσουν). - - Σχεδίαση ελεÏθεÏων γÏαμμών και κανονικά μονοπάτια + + Σχεδίαση ελεÏθεÏων γÏαμμών και κανονικά μονοπάτια - + Ο πιο απλός Ï„Ïόπος δημιουÏγίας ενός ελεÏθεÏου σχήματος είναι η σχεδίαση του χÏησιμοποιώντας το εÏγαλείο μολÏβι (ελεÏθεÏων γÏαμμών) (F6): - - - - - - - - - - + + + + + + + + + + Εάν θέλετε πιο κανονικά σχήματα, χÏησιμοποιείστε το εÏγαλείο πένα (Bezier) (Shift+F6): - - - - - - - - - - + + + + + + + + + + Με το εÏγαλείο πένα κάθε πάτημα δημιουÏγεί έναν Î¿Î¾Ï ÎºÏŒÎ¼Î²Î¿ χωÏίς λαβές καμπÏλης, έτσι μια σειÏά πατημάτων παÏάγει μια ακολουθία τμημάτων ευθειών γÏαμμών. Πάτημα και σÏÏσιμο δημιουÏγεί έναν ομαλό κόμβο Bezier με δÏο συγγÏαμμικές αντίθετες λαβές. Πατήστε Shift ενώ σÏÏετε μια λαβή για να πεÏιστÏέψετε μόνο μια λαβή και να καθοÏίσετε την άλλη. Ως συνήθως, το Ctrl πεÏιοÏίζει την κατεÏθυνση είτε του τμήματος της Ï„Ïέχουσας γÏαμμής ή των λαβών Bezier σε αυξήσεις 15 μοιÏών. Πατήστε Enter για ολοκλήÏωση της γÏαμμής, Esc για ακÏÏωση της. Για να ακυÏώσετε μόνο το τελευταίο τμήμα της ατελείωτης γÏαμμής, πατήστε Backspace. - + Στα εÏγαλεία ελεÏθεÏων γÏαμμών και bezier, το Ï„Ïέχον επιλεγμένο μονοπάτι εμφανίζει μικÏά τετÏάγωνα άγκυÏες και στα δÏο άκÏα. Αυτές οι άγκυÏες σας επιτÏέπουν να συνεχίσετε αυτό το μονοπάτι (σχεδιάζοντας από μία από τις άγκυÏες) ή να το κλείσετε (σχεδιάζοντας από τη μία άγκυÏα στην άλλη) αντί για δημιουÏγία νέου μονοπατιοÏ. - - ΅ΕπεξεÏγασία μονοπατιών + + ΅ΕπεξεÏγασία μονοπατιών - + Αντίθετα με τα σχήματα που δημιουÏγήθηκαν από εÏγαλεία σχημάτων, τα εÏγαλεία πένας και Î¼Î¿Î»Ï…Î²Î¹Î¿Ï Î´Î·Î¼Î¹Î¿Ï…ÏγοÏν αυτό που λέγεται μονοπάτια. Ένα μονοπάτι είναι μια σειÏά τμημάτων ευθειών γÏαμμών και/ή καμπυλών Bezier που, όπως κάθε άλλο αντικείμενο Inkscape, μποÏεί να έχει ελεÏθεÏο γέμισμα και ιδιότητες πινελιάς. Αλλά αντίθετα με ένα σχήμα, ένα μονοπάτι μποÏεί να επεξεÏγαστεί σÏÏοντας ελεÏθεÏα οποιοδήποτε κόμβο του (όχι μόνο τις Ï€ÏοκαθοÏισμένες λαβές) ή σÏÏοντας άμεσα ένα τμήμα του μονοπατιοÏ. Επιλέξτε αυτό το μονοπάτι και μεταβείτε στο εÏγαλείο κόμβων (F2): - - + + Θα δείτε έναν αÏιθμό γκÏι τετÏαγώνων κόμβων στο μονοπάτι. Αυτοί οι κόμβοι μποÏοÏν να επιλεγοÏν με κλικ, Shift+κλικ ή σÏÏσιμοενός λάστιχου - ακÏιβώς όπως τα αντικείμενα επιλέγονται από το εÏγαλείο επιλογής. ΜποÏείτε επίσης να πατήσετε ένα τμήμα Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Î³Î¹Î± αυτόματη επιλογή των γειτονικών κόμβων. Οι επιλεγμένοι κόμβοι τονίζονται και εμφανίζουν τις λαβές κόμβων τους - έναν ή δÏο μικÏοÏÏ‚ κÏκλους συνδεμένους με κάθε επιλεγμένο κόμβο με ευθείες γÏαμμές. Το πλήκτÏο ! αντιστÏέφει την επιλογή κόμβου στα Ï„Ïέχοντα υπομονοπάτια (δηλ. υπομονοπάτια με τουλάχιστον έναν επιλεγμένο κόμβο). Alt+! αντιστÏέφει το συνολικό μονοπάτι. - + Τα μονοπάτια επεξεÏγάζονται με σÏÏσιμο των κόμβων τους, λαβών κόμβων ή άμεσα σÏÏοντας ένα τμήμα μονοπατιοÏ. (Δοκιμάστε να σÏÏετε μεÏικοÏÏ‚ κόμβους, λαβές και τμήματα Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Ï„Î¿Ï… πιο πάνω μονοπατιοÏ.) Το Ctrl δουλεÏει ως συνήθως πεÏιοÏίζοντας την κίνηση και την πεÏιστÏοφή. Τα πλήκτÏα βέλους, τα πλήκτÏα Tab, τα πλήκτÏα [, ], <, > με τους Ï„Ïοποποιητές τους όλα δουλεÏουν όπως και στον επιλογέα, αλλά εφαÏμόζονται σε κόμβους αντί για αντικείμενα. ΜποÏείτε να Ï€Ïοσθέσετε κόμβους οπουδήποτε σε ένα μονοπάτι είτε διπλοπατώντας ή με Ctrl+Alt+Click στην επιθυμητή θέση. - + ΜποÏείτε να διαγÏάψετε κόμβους με Del ή Ctrl+Alt+πάτημα. Όταν διαγÏάφετε κόμβους γίνεται Ï€Ïοσπάθεια διατήÏησης του σχήματος του μονοπατιοÏ, εάν επιθυμείτε οι λαβές των γειτονικών κόμβων να ανακληθοÏν (να μην διατηÏήσουν το σχήμα) μποÏείτε να διαγÏάψετε με Ctrl+Del. Επιπλέον, μποÏείτε να διπλασιάσετε (Shift+D) τους επιλεγμένους κόμβους. Το μονοπάτι μποÏεί να σπάσει (Shift+B) στους επιλεγμένους κόμβους ή εάν επιλέξετε δÏο τελικοÏÏ‚ κόμβους σε ένα μονοπάτι, μποÏείτε να τους ενώσετε (Shift+J). - + Ένας κόμβος μποÏεί να γίνει απότομος (Shift+C), που σημαίνει ότι οι δυο του λαβές μποÏοÏν να μετακινηθοÏν ανεξάÏτητα σε κάθε γωνία Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚, ομαλός (Shift+S), που σημαίνει ότι οι λαβές του είναι πάντοτε στην ίδια ευθεία γÏαμμή (συγγÏαμμικές) και συμμετÏικός (Shift+Y), που είναι το ίδιο όπως ομαλός, αλλά οι λαβές έχουν επίσης το ίδιο μήκος, καθώς και αυτόματη εξομάλυνση (Shift+A), ένας ειδικός κόμβος που Ïυθμίζει αυτόματα τις λαβές του κόμβου και πεÏιβάλλει τους κόμβους αυτόματης εξομάλυνσης για να διατηÏήσει μια ομαλή καμπÏλη. Όταν εναλλάσσετε τον Ï„Ïπο του κόμβου, μποÏείτε να διατηÏήσετε τη θέση μιας από τις δÏο λαβές αιωÏώντας το ποντίκι σας από πάνω του, έτσι που μόνο η άλλη λαβή να πεÏιστÏέφεται/κλιμακώνεται για να ταιÏιάξει. - + Επίσης, μποÏείτε να ανακαλέσετε μια λαβή κόμβου μαζί με το Ctrl+click σ' αυτό. Εάν δÏο γειτονικοί κόμβοι έχουν τις λαβές τους ανακαλεσμένες, το τμήμα Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚ είναι μια ευθεία γÏαμμή. Για απόσπαση των ανακαλεσμένων κόμβων, Shift+σÏÏσιμο μακÏιά από τον κόμβο. - - Υπομονοπάτια και συνδυασμός + + Υπομονοπάτια και συνδυασμός - + Ένα αντικείμενο Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Î¼Ï€Î¿Ïεί να πεÏιέχει πεÏισσότεÏα από ένα υπομονοπάτια. Ένα υπομονοπάτι είναι μια σειÏά κόμβων συνδεμένων Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚. (Συνεπώς, εάν ένα μονοπάτι έχει πεÏισσότεÏα από ένα υπομονοπάτια, δεν συνδέονται όλοι οι κόμβοι του.) Κάτω αÏιστεÏά, Ï„Ïία υπομονοπάτια ανήκουν σε ένα μονό σÏνθετο μονοπάτι. Τα ίδια Ï„Ïία υπομονοπάτια στα δεξιά είναι ανεξάÏτητα αντικείμενα μονοπατιοÏ: - - - - - + + + + + Σημειώστε ότι ένα σÏνθετο μονοπάτι δεν είναι το ίδιο όπως μια ομάδα. Είναι ένα απλό αντικείμενο που είναι επιλέξιμο ως σÏνολο. Εάν επιλέξετε το πάνω αÏιστεÏÏŒ αντικείμενο και εναλλάξετε το εÏγαλείο κόμβου, θα δείτε κόμβους να εμφανίζονται και στα Ï„Ïία υπομονοπάτια. Στα δεξιά, μποÏείτε να επεξεÏγαστείτε κόμβο μόνο ενός Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Ï„Î· φοÏά. - + Το Inkscape μποÏεί να συνδυάσει μονοπάτια σε ένα σÏνθετο μονοπάτι (Ctrl+K) και να διασπάσει ένα σÏνθετο μονοπάτι σε ξεχωÏιστά μονοπάτια (Shift+Ctrl+K). Δοκιμάστε αυτές τις εντολές στα πιο πάνω παÏαδείγματα. Î‘Ï†Î¿Ï Î­Î½Î± αντικείμενο μποÏεί να έχει μόνο ένα γέμισμα και πινελιά, ένα νέο σÏνθετο μονοπάτι παίÏνει τη μοÏφοποίηση του Ï€Ïώτου (χαμηλότατου στη διάταξη-z) αντικειμένου που συνδυάζεται. - + Όταν συνδυάζετε επικαλυπτόμενα μονοπάτια με γέμισμα, συνήθως το γέμισμα θα εξαφανιστεί στις πεÏιοχές όπου τα μονοπάτια επικαλÏπτονται: - - + + Αυτός είναι ο πιο εÏκολος Ï„Ïόπος για δημιουÏγία αντικειμένων με Ï„ÏÏπες σε αυτά. Για πεÏισσότεÏο ισχυÏές εντολές μονοπατιοÏ, δείτε “πÏάξεις Boole†πιο κάτω. - - ΜετατÏοπή σε μονοπάτι + + ΜετατÏοπή σε μονοπάτι - + Κάθε σχήμα ή αντικείμενο κειμένου μποÏεί να μετατÏαπεί σε μονοπάτι (Shift+Ctrl+C). Αυτή η λειτουÏγία δεν αλλάζει την εμφάνιση του αντικειμένου, αλλά αφαιÏεί όλες τις ειδικές δυνατότητες του Ï„Ïπου του (Ï€.χ. δεν μποÏείτε να στÏογγυλέψετε τις γωνίες του οÏθογωνίου ή να επεξεÏγαστείτε το κείμενο πια). Αντίθετα τώÏα μποÏείτε να επεξεÏγαστείτε τους κόμβους του. Εδώ είναι δÏο αστέÏια - το αÏιστεÏÏŒ κÏατά ένα σχήμα και το δεξί μετατÏέπεται σε μονοπάτι. Εναλλάξτε το εÏγαλείο κόμβου και συγκÏίνετε την επεξεÏγασιμότητά τους όταν επιλέγονται: - - - + + + Επιπλέον, μποÏείτε να μετατÏέψετε σε μονοπάτι (“πεÏίγÏαμμαâ€) την πινελιά κάθε αντικειμένου. Πιο κάτω, το Ï€Ïώτο αντικείμενο είναι το αÏχικό μονοπάτι (χωÏίς γέμισμα, μαÏÏη πινελιά), ενώ το δεÏτεÏο είναι το αποτέλεσμα της εντολής Πινελιά σε μονοπάτι (μαÏÏο γέμισμα, χωÏίς πινελιά): - - - - ΠÏάξεις Boole + + + + ΠÏάξεις Boole - + Οι εντολές στο Î¼ÎµÎ½Î¿Ï Î¼Î¿Î½Î¿Ï€Î¬Ï„Î¹ σας επιτÏέπουν να συνδυάσετε δÏο ή πεÏισσότεÏα αντικείμενα χÏησιμοποιώντας τις Ï€Ïάξεις boole: - ΑÏχικά σχήματα - Ένωση (Ctrl++) - ΔιαφοÏά (Ctrl+-) - Τομή(Ctrl+*) - Αποκλεισμός(Ctrl+^) - ΔιαίÏεση(Ctrl+/) - Αποκοπή μονοπατιοÏ(Ctrl+Alt+/) - - - - - - - - - - - (πυθμένας μείον κοÏυφή) - + ΑÏχικά σχήματα + Ένωση (Ctrl++) + ΔιαφοÏά (Ctrl+-) + Τομή(Ctrl+*) + Αποκλεισμός(Ctrl+^) + ΔιαίÏεση(Ctrl+/) + Αποκοπή μονοπατιοÏ(Ctrl+Alt+/) + + + + + + + + + + + (πυθμένας μείον κοÏυφή) + Οι συντομεÏσεις πληκτÏολογίου για αυτές τις εντολές αναφέÏονται στους αÏιθμητικοÏÏ‚ ανάλογους των Ï€Ïάξεων boole (ένωση είναι Ï€Ïόσθεση, διαφοÏά είναι αφαίÏεση, κλ.). Οι εντολές ΔιαφοÏά and αποκλεισμός μποÏοÏν να εφαÏμοστοÏν μόνο σε δÏο επιλεγμένα αντικείμενα. Άλλες Ï€Ïάξεις μποÏοÏν να επεξεÏγαστοÏν οποιοδήποτε αÏιθμό αντικειμένων μονομιάς. Το αποτέλεσμα πάντοτε δέχεται τη μοÏφοποίηση του κάτω αντικειμένου. - + Το αποτέλεσμα της εντολής Αποκλεισμός φαίνεται παÏόμοιο με Συνδυασμό (δείτε πιο πάνω), αλλά διαφέÏει στο ότι ο Αποκλεισμός Ï€Ïοσθέτει επιπλέον κόμβους, όπου τα αÏχικά μονοπάτια τέμνονται. Η διαφοÏά Î¼ÎµÏ„Î±Î¾Ï Î”Î¹Î±Î¯Ïεσης and ΚατακεÏματισμός Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï ÎµÎ¯Î½Î±Î¹ ότι το Ï€Ïώτο αποκόπτει το συνολικό κάτω αντικείμενο με το μονοπάτι του άνω αντικειμένου, ενώ το δεÏτεÏο αποκόπτει την πινελιά του κάτω αντικειμένου και αφαιÏεί κάθε γέμισμα (αυτό είναι βολικό για αποκοπή πινελιών χωÏίς γέμισμα σε κομμάτια). - - ΣυÏÏίκνωση και επέκταση + + ΣυÏÏίκνωση και επέκταση - + Το Inkscape μποÏεί να επεκτείνει και να συÏÏικνώσει σχήματα όχι μόνο κλιμακώνοντας, αλλά επίσης με μετατόπιση του Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï ÎµÎ½ÏŒÏ‚ αντικειμένου, δηλαδή μετατοπίζοντας το κάθετα στο μονοπάτι σε κάθε σημείο. Οι αντίστοιχες εντολές καλοÏνται ΣυÏÏίκνωση (Ctrl+() και Επέκταση (Ctrl+)). Το εμφανιζόμενο πιο κάτω είναι το αÏχικό μονοπάτι (κόκκινο) και ένας αÏιθμός μονοπατιών συÏÏίκνωσης και επέκτασης από αυτό το αÏχικό: - - - - - - - - + + + + + + + + Οι επίπεδες εντολές ΣυÏÏίκνωση και Επέκταση παÏάγουν μονοπάτια (μετατÏέποντας το αÏχικό αντικείμενο σε μονοπάτι εάν δεν είναι ήδη μονοπάτι). Συχνά πιο βολική είναι η Δυναμική μετατόπιση (Ctrl+J), που δημιουÏγεί ένα αντικείμενο με συÏόμενη λαβή (παÏόμοια με τη λαβή σχήματος) που ελέγχει την απόσταση μετατόπισης. Επιλέξτε το αντικείμενο πιο κάτω, εναλλαγή σε εÏγαλείο κόμβων και σÏÏσιμο της λαβής του για να πάÏετε μια ιδέα: - - + + Τέτοιο αντικείμενο δυναμικής μετατόπισης θυμίζει το αÏχικό μονοπάτι, έτσι δεν “υποβαθμίζειâ€, όταν αλλάζετε την απόσταση μετατόπισης ξανά και ξανά. Όταν δεν χÏειάζεται να είναι Ïυθμίσιμο πια, μποÏείτε πάντοτε να μετατÏέψετε ένα αντικείμενο μετατόπισης σε μονοπάτι. - + Ακόμα πιο βολική είναι μια Συνδεδεμένη μετατόπιση, που είναι παÏόμοια με τη δυναμική ποικιλία, αλλά είναι συνδεμένη με ένα άλλο μονοπάτι που παÏαμένει επεξεÏγάσιμο. ΜποÏείτε να έχετε οποιοδήποτε αÏιθμό συνδεμένων μετατοπίσεων για ένα πηγαίο μονοπάτι. ΠαÏακάτω, το πηγαίο μονοπάτι είναι κόκκινο, μια συνδεμένη μετατόπιση σε αυτό έχει μαÏÏη πινελιά χωÏίς γέμισμα και η άλλη μαÏÏο γέμισμα χωÏίς πινελιά. - + - Επιλέξτε το κόκκινο αντικείμενο και επεξεÏγασθείτε το κόμβο του. ΠαÏακολουθείστε πώς συμπεÏιφέÏονται και οι δυο συνδεμένες μετατοπίσεις. ΤώÏα επιλέξτε οποιαδήποτε από τις μετατοπίσεις και σÏÏτε τη λαβή του για να Ïυθμίσετε την ακτίνα μετατόπισης. Τελικά, σημειώστε πώς μετακινείται ή μετασχηματίζονται οι πηγαίες κινήσεις όλων των αντικειμένων μετακινήσεις που είναι συνδεμένα με αυτό και πώς μποÏείτε να μετακινήσετε ή να μετασχηματίσετε τα αντικείμενα μετατόπισης ανεξάÏτητα χωÏίς απώλεια της σÏνδεσης τους με την πηγή. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Απλοποίηση + + Απλοποίηση - + Η κÏÏια χÏήση της εντολής Απλοποίηση (Ctrl+L) μειώνει τον αÏιθμό των κόμβων στο μονοπάτι, ενώ σχεδόν διατηÏεί το σχήμα του. Αυτό μποÏεί να είναι χÏήσιμο για μονοπάτια που δημιουÏγήθηκαν με το εÏγαλείο μολυβιοÏ, Î±Ï†Î¿Ï Î±Ï…Ï„ÏŒ το εÏγαλείο μεÏικές φοÏές δημιουÏγεί πεÏισσότεÏους κόμβους από τους αναγκαίους. Πιο κάτω, το αÏιστεÏÏŒ σχήμα είναι όπως δημιουÏγήθηκε με το εÏγαλείο ελεÏθεÏου χεÏÎ¹Î¿Ï ÎºÎ±Î¹ το δεξί είναι ένα αντίγÏαφο που απλοποιήθηκε. Το αÏχικό μονοπάτι έχει 28 κόμβους, ενώ το απλοποιημένο έχει 17 (που σημαίνει Ï€Î¿Î»Ï Ï€Î¹Î¿ εÏκολη δουλειά με το εÏγαλείο κόμβων) και είναι πιο ομαλό. - - - + + + Το ποσό της απλοποίησης (αποκαλοÏμενο κατώφλι) εξαÏτάται από το μέγεθος της επιλογής. Συνεπώς, εάν επιλέξετε ένα μονοπάτι μαζί με μεÏικά μεγαλÏτεÏα αντικείμενα, θα απλοποιηθεί πιο επιθετικά παÏά εάν επιλέξετε αυτό το μονοπάτι μόνο του. Επιπλέον, η εντολή Απλοποίηση είναι επιταχυνόμενη. Αυτό σημαίνει ότι εάν πατήσετε Ctrl+L πολλές φοÏές σε γÏήγοÏη διαδοχή (έτσι ώστε οι κλήσεις να είναι σε 0,5 δευτεÏόλεπτα Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚), το κατώφλι αυξάνεται για κάθε κλήση. (Εάν κάνετε μια άλλη απλοποίηση μετά από διακοπή, το κατώφλι είναι πίσω στην αÏχική του τιμή.) Κάνοντας χÏήση της επιτάχυνσης, είναι εÏκολο να εφαÏμόσετε το ακÏιβές ποσό απλοποίησης που χÏειαζόσαστε για κάθε πεÏίπτωση. - + ΠέÏα από την εξομάλυνση των πινελιών ελεÏθεÏου χεÏιοÏ, η Απλοποίηση μποÏεί να χÏησιμοποιηθεί για ποικίλα δημιουÏγικά εφέ. Συχνά, ένα σχήμα που είναι ανελαστικό και γεωμετÏικό επωφελείται από κάποιο ποσό απλοποίησης που δημιουÏγεί ωÏαίες γενικεÏσεις όπως στη ζωή της αÏχικής μοÏφής - αναμιγνÏοντας απότομες γωνίες και εισάγοντας Ï€Î¿Î»Ï Ï†Ï…ÏƒÎ¹ÎºÎ­Ï‚ παÏαμοÏφώσεις, μεÏικές φοÏές με στιλ και μεÏικές φοÏές ολότελα αστείες. Îα ένα παÏάδειγμα σχήματος εικόνας που φαίνεται Ï€Î¿Î»Ï Ï€Î¹Î¿ ωÏαίο μετά από απλοποίηση: - ΑÏχικό - ΕλαφÏιά απλοποίηση - Έντονη απλοποίηση - - - - - ΔημιουÏγία κειμένου + ΑÏχικό + ΕλαφÏιά απλοποίηση + Έντονη απλοποίηση + + + + + ΔημιουÏγία κειμένου - + Το Inkscape μποÏεί να δημιουÏγήσει μεγάλα και σÏνθετα κείμενα. Όμως, είναι επίσης βολικό για δημιουÏγία μικÏών αντικειμένων κειμένου όπως κεφαλίδες, λάβαÏα, λογότυπα, ετικέτες διαγÏαμμάτων και λεζάντες κλ. Αυτή η ενότητα είναι μια Ï€Î¿Î»Ï Î²Î±ÏƒÎ¹ÎºÎ® εισαγωγή στις δυνατότητες κειμένου του Inkscape. - + Η δημιουÏγία ενός αντικειμένου κειμένου είναι τόσο απλή όπως η εναλλαγή στο εÏγαλείο κειμένου (F8), πατήστε κάπου στο έγγÏαφο και τυπώστε το κείμενο σας. Για να αλλάξετε οικογένεια γÏαμματοσειÏάς, μοÏφοποίηση, μέγεθος και ευθυγÏάμμιση, ανοίξτε το διάλογο κειμένου και γÏαμματοσειÏάς (Shift+Ctrl+T). Αυτός ο διάλογος έχει επίσης μια καÏτέλα εισόδου κειμένου, όπου μποÏείτε να επεξεÏγαστήτε το επιλεγμένο αντικείμενο κειμένου - σε μεÏικές πεÏιπτώσεις ίσως να είναι πιο βολικό παÏά να το επεξεÏγαστήτε στον καμβά (ειδικά, αυτή η καÏτέλα υποστηÏίζει τον οÏθογÏαφικό έλεγχο καθώς πληκτÏολογείτε). - + Όπως άλλα εÏγαλεία, το εÏγαλείο κειμένου μποÏεί να επιλέξει αντικείμενα του Ï„Ïπου του - αντικείμενα κειμένου - έτσι μποÏείτε να πατήσετε για επιλογή και τοποθέτηση του δÏομέα σε οποιοδήποτε υπάÏχον αντικείμενο κειμένου (όπως αυτή η παÏάγÏαφος). - + Μια από τις πιο συνηθισμένες λειτουÏγίες στο σχεδιασμό κειμένου είναι η ÏÏθμιση διάκενου Î¼ÎµÏ„Î±Î¾Ï Î³Ïαμμάτων και γÏαμμών. Όπως πάντοτε, το Inkscape παÏέχει συντομεÏσεις πληκτÏολογίου για αυτό. Όταν επεξεÏγαζόσαστε κείμενο, τα πλήκτÏα Alt+< και Alt+> αλλάζουν το διάκενο γÏαμμάτων στην Ï„Ïέχουσα γÏαμμή ενός αντικειμένου κειμένου, έτσι ώστε το συνολικό μήκος της γÏαμμής να αλλάζει κατά ένα εικονοστοιχείο στην Ï„Ïέχουσα εστίαση (συγκÏίνετε με το εÏγαλείο επιλογέα, όπου τα ίδια πλήκτÏα κάνουν κλιμάκωση αντικειμένου του μεγέθους εικονοστοιχείου). Ως κανόνας, εάν το μέγεθος της γÏαμματοσειÏάς στο αντικείμενο κειμένου είναι μεγαλÏτεÏο από το Ï€Ïοεπιλεγμένο, είναι πιθανή η ωφέλεια από τη συμπίεση των γÏαμμάτων πιο κοντά από το Ï€Ïοεπιλεγμένο. Î™Î´Î¿Ï Î­Î½Î± παÏάδειγμα: - ΑÏχικό - Μείωση διάκενου γÏαμμάτων - Έμπνευση - Έμπνευση - + ΑÏχικό + Μείωση διάκενου γÏαμμάτων + Έμπνευση + Έμπνευση + Η πιο σφικτή παÏαλλαγή δείχνει λίγο καλÏτεÏα ως κεφαλίδα, αλλά δεν είναι ακόμα τέλεια: οι αποστάσεις Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ γÏαμμάτων δεν είναι ομοιόμοÏφες, για παÏάδειγμα “a†και “t†είναι υπεÏβολικά μακÏιά, ενώ “t†και “i†είναι Ï€Î¿Î»Ï ÎºÎ¿Î½Ï„Î¬. Ο αÏιθμός τέτοιων κακών πυκνώσεων (ειδικά οÏατών σε μεγάλα μεγέθη γÏαμματοσειÏών) είναι μεγαλÏτεÏος σε χαμηλής ποιότητας γÏαμματοσειÏές παÏά σε υψηλής ποιότητας. Όμως, σε κάθε αλφαÏιθμητικό και σε κάθε γÏαμματοσειÏά θα βÏείτε Ï€Ïοφανώς ζεÏγη γÏαμμάτων που επωφελοÏνται από Ïυθμίσεις Ï€Ïκνωσης. - + Το Inkscape κάνει αυτές τις Ïυθμίσεις Ï€Ïαγματικά εÏκολες. Απλά μετακινήστε το δÏομέα επεξεÏγασίας κειμένου Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ Ï€Ïοβληματικών χαÏακτήÏων και χÏησιμοποιήστε Alt+βέλη για μετακίνηση των γÏαμμάτων δεξιά από το δÏομέα. Εδώ είναι η ίδια επικεφαλίδα ξανά, αυτή τη φοÏά με χειÏοκίνητες Ïυθμίσεις για οπτικά ομοιόμοÏφη τοποθέτηση γÏαμμάτων: - Μείωση διάκενου γÏαμμάτων, μεÏικά ζευγάÏια γÏαμμάτων πυκνώθηκαν χειÏοκίνητα - Έμπνευση - + Μείωση διάκενου γÏαμμάτων, μεÏικά ζευγάÏια γÏαμμάτων πυκνώθηκαν χειÏοκίνητα + Έμπνευση + ΠέÏα από τη μετακίνηση γÏαμμάτων οÏιζόντια με Alt+αÏιστεÏÏŒ βέλος ή Alt+δεξί βέλος, μποÏείτε επίσης να τα μετακινήσετε κάθετα χÏησιμοποιώντας Alt+επάνω βέλος ή Alt+κάτω βέλος: - Έμπνευση - + Έμπνευση + Φυσικά θα μποÏοÏσατε απλά να μετατÏέψετε το κείμενο σας σε μονοπάτι (Shift+Ctrl+C) και να μετακινήσετε τα γÏάμματα ως κανονικά αντικείμενα μονοπατιοÏ. Όμως, είναι Ï€Î¿Î»Ï Ï€Î¹Î¿ βολικό να κÏατήσετε το κείμενο ως κείμενο - παÏαμένει επεξεÏγάσιμο, μποÏείτε να δοκιμάσετε διαφοÏετικές γÏαμματοσειÏές χωÏίς αφαίÏεση πυκνώσεων και διακένων και παίÏνει Ï€Î¿Î»Ï Î»Î¹Î³ÏŒÏ„ÎµÏο χώÏο στο αποθηκευμένο αÏχείο. Το μόνο μειονέκτημα της Ï€Ïοσέγγισης “κειμένου ως κειμένου†είναι ότι χÏειάζεται να έχετε την αÏχική γÏαμματοσειÏά εγκαταστημένη σε οποιοδήποτε σÏστημα θα θέλατε να ανοίξετε αυτό το έγγÏαφο SVG. - + ΠαÏόμοια με το διάκενο γÏαμμάτων, μποÏείτε επίσης να Ïυθμίσετε διάκενο γÏαμμών σε αντικείμενα κειμένου πολλαπλών γÏαμμών. Δοκιμάστε τα πλήκτÏα Ctrl+Alt+< και Ctrl+Alt+> σε οποιαδήποτε παÏάγÏαφο σε αυτό το μάθημα για να τα τοποθετήσετε μέσα ή έξω, έτσι ώστε το συνολικό Ïψος του αντικειμένου κειμένου να αλλάζει κατά 1 εικονοστοιχείο στην Ï„Ïέχουσα εστίαση. Όπως στο επιλογέα, πατώντας Shift με οποιαδήποτε συντόμευση διακένου ή Ï€Ïκνωσης παÏάγεται 10 φοÏές μεγαλÏτεÏο αποτέλεσμα από ότι χωÏίς Shift. - - ΕπεξεÏγαστής XML + + ΕπεξεÏγαστής XML - + Το πιο δυνατό εÏγαλείο του Inkscape είναι ο επεξεÏγαστής XML (Shift+Ctrl+X). Εμφανίζει το συνολικό δένδÏο XML του εγγÏάφου, αντανακλώντας πάντοτε την Ï„Ïέχουσα κατάσταση του. ΜποÏείτε να επεξεÏγαστείτε το σχέδιο σας και να παÏακολουθήσετε τις αντίστοιχες αλλαγές στο δένδÏο XML. Επιπλέον, μποÏείτε να επεξεÏγαστείτε οποιοδήποτε κείμενο, στοιχείο ή γνωÏίσματα κόμβων στον επεξεÏγαστή XML και να δείτε το αποτέλεσμα στον καμβά σας. Αυτό είναι το άÏιστο φανταστικό εÏγαλείο για διαδÏαστική μάθηση του SVG και σας επιτÏέπει να κάνετε κόλπα που θα ήταν αδÏνατα με κανονικά εÏγαλεία επεξεÏγασίας. - - ΣυμπέÏασμα + + ΣυμπέÏασμα - + Αυτό το μάθημα δείχνει μόνο ένα μικÏÏŒ μέÏος των δυνατοτήτων του Inkscape. Ελπίζουμε να το απολαÏσετε. Μην φοβόσαστε να πειÏαματιστείτε και να μοιÏαστείτε τις δημιουÏγίες σας. ΠαÏακαλώ επισκεφτείτε www.inkscape.org για πεÏισσότεÏες πληÏοφοÏίες, τελευταίες εκδόσεις και βοήθεια από κοινότητες χÏηστών και Ï€ÏογÏαμματιστών. - + diff --git a/share/tutorials/tutorial-advanced.es.svg b/share/tutorials/tutorial-advanced.es.svg index 351b9f42e..f42d2edec 100644 --- a/share/tutorials/tutorial-advanced.es.svg +++ b/share/tutorials/tutorial-advanced.es.svg @@ -36,63 +36,63 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::AVANZADO -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + + Este tutorial cubre los siguientes temas: copiar/pegar, edición de nodos, dibujo de curvas bezier y a mano alzada, manipulación de rutas, booleanos, desvio, simplificación y herramienta texto. - - + + - Use Ctrl+flechas, ruedad del ratón o arrastran con botón central del ratón para situar la página. Para las bases acerca de la creación de objetos, selección y transformación, observe el tutorial básico en Ayuda > Tutoriales. + Use Ctrl+flechas, ruedad del ratón o arrastran con botón central del ratón para situar la página. Para las bases acerca de la creación de objetos, selección y transformación, observe el tutorial básico en Ayuda > Tutoriales. - - Técnicas de pegado + + Técnicas de pegado - - + + - Después de que usted copia algún(os) objeto(s) mediante Ctrl+C o corta mediante Ctrl+X, el comando regular Pegar (Ctrl+V) pega el/los objeto(s) copiados, bajo el cursor del ratón o cursor o si el cursor se encuentra fuera de la ventana, en el centro de la ventana del documento. Sin embargo, el/los objeto(s) en el portapapeles aún recuerdan el lugar original donde fue(ron) copiado(s) y usted puede copiarlos de nuevo en ese lugar mediante Pegar en el sitio (Ctrl+Alt+V). + Después de que usted copia algún(os) objeto(s) mediante Ctrl+C o corta mediante Ctrl+X, el comando regular Pegar (Ctrl+V) pega el/los objeto(s) copiados, bajo el cursor del ratón o cursor o si el cursor se encuentra fuera de la ventana, en el centro de la ventana del documento. Sin embargo, el/los objeto(s) en el portapapeles aún recuerdan el lugar original donde fue(ron) copiado(s) y usted puede copiarlos de nuevo en ese lugar mediante Pegar en el sitio (Ctrl+Alt+V). - - + + - Otro comando, Pegar estilo (Mayus+Ctrl+V), aplica el estilo del (primer) objeto en el portapapeles a la selección actual. Así el "estilo" pegado incluye la configuración de relleno, trazo y fuente, pero no la forma, tamaño o parámetros específicos de un tipo de forma, tales como el número de puntas de una estrella. + Otro comando, Pegar estilo (Mayus+Ctrl+V), aplica el estilo del (primer) objeto en el portapapeles a la selección actual. Así el "estilo" pegado incluye la configuración de relleno, trazo y fuente, pero no la forma, tamaño o parámetros específicos de un tipo de forma, tales como el número de puntas de una estrella. - - + + - Yet another set of paste commands, Paste Size, scales the selection + Yet another set of paste commands, Paste Size, scales the selection to match the desired size attribute of the clipboard object(s). There are a number of commands for pasting size and are as follows: Paste Size, Paste Width, Paste Height, Paste Size Separately, Paste Width Separately, and Paste Height Separately. - - + + - Paste Size scales the whole selection to match the overall size of the clipboard -object(s). Paste Width/Paste Height scale the + Paste Size scales the whole selection to match the overall size of the clipboard +object(s). Paste Width/Paste Height scale the whole selection horizontally/vertically so that it matches the width/height of the clipboard object(s). These commands honor the scale ratio lock on the Selector Tool controls bar (between W and H fields), so @@ -103,8 +103,8 @@ they scale each selected object separately to make it match the size/width/heigh of the clipboard object(s). - - + + @@ -113,43 +113,43 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - Dibujando a mano alzada y trazos regulares + + Dibujando a mano alzada y trazos regulares - - + + La forma más sencilla para crear formas arbitrarias es dibujar usando la herramienta Lapiz (dibujar líneas a mano alzada) (F6): - - - - - - - - - - - + + + + + + + + + + + Si desea figuras más regulares, use la herramienta Pluma (Bezier) (Mayus+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -163,26 +163,26 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + En ambas herramientas, el trazo actualmente seleccionado muestra una pequeña ancla cuadrada en ambos finales. Estas anclas le permiten continuar este trazo (mediante arrastrado desde uno de las anclas) o cierrelo (mediante arrastrado de una ancla a la otra) en vez de crear una nueva. - - Editando trazos + + Editando trazos - - + + Diferente a las formas creadas con la herramienta Forma, las herramientas Pluma y Lápiz crean lo que es denominado trazos. Un trazo es una secuencia de segmentos de línea recta y/o como las curvas Bezier, como cualquier otro objeto de Inkscape, puede tener unas propiedades arbitrarias de relleno y borde. Pero diferente a una forma, un trazo puede ser editado mediante arrastrado libre de cualquiera de sus nodos (y no sólo mediante manejadores predeterminados). Seleccione este trazo y active la herramienta Nodo (F2): - - - + + + @@ -197,8 +197,8 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on selected node); Alt+! inverts in the entire path. - - + + @@ -210,8 +210,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -223,8 +223,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -240,61 +240,61 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Usted, también puede retraer completamente el manejador de un nodo mediante Ctrl+click sobre él. Si dos nodos adyacentes poseen sus manejadores retraidos, el segmento de trazo entre ellos es una línea recta. Para salir del nodo retraido, haga Mayus+drag lejos del nodo. - - Subtrazos y combinación + + Subtrazos y combinación - - + + Un objeto trazo puede contener más de un subtrazo. Un subtrazo es una secuencia de nodos concetados entre si. (Por lo tanto, si un trazo tiene más de un subtrazo no todos los nodos están conectados.) Abajo a la izquierda, tres subtrazos pertenecen a un trazo simple compuesto; los mismos tres subtrazos den la derecha son objetos de trazo independientes: - - - - - - + + + + + + Note que un trazo compuesto no es lo mismo que un grupo. Es un objeto sencillo el cual es sólo seleccionable como uno entero. Si usted selecciona el objeto de la izquierda a continuación y tome la herramienta nodo, podrá observar los nodos mostrados en los tres subtrazos. En la derecha, puede solo editar-nodos sobre un solo trazo a la vez. - - + + - Inkscape puede Combinar trazos en un trazo compuesto (Ctrl+K) y Separar un trazo compuesto en trazos separados (Mayus+Ctrl+K). Intente estos comandos sobre los ejemplos de a continuación. Desde que un objeta solo posea un relleno y estilo de trazo, un nuevo trazo compuesto toma el estilo del primer (menores en orden-z) objeto siendo combinado. + Inkscape puede Combinar trazos en un trazo compuesto (Ctrl+K) y Separar un trazo compuesto en trazos separados (Mayus+Ctrl+K). Intente estos comandos sobre los ejemplos de a continuación. Desde que un objeta solo posea un relleno y estilo de trazo, un nuevo trazo compuesto toma el estilo del primer (menores en orden-z) objeto siendo combinado. - - + + Cuando combina trazos superpuestos con relleno, usualmente el relleno puede desaparecer en las áreas donde el trazo se superpone: - - - + + + Este es el modo más sencillo para crear objetos con agujeros en el. Para comandos de trazo más poderosos, observe "Operaciones Booleanas" más adelante. - - Convirtiendo a trazo + + Convirtiendo a trazo - - + + @@ -306,167 +306,172 @@ nodes. Here are two stars - the left one is kept a shape and the right one is converted to path. Switch to node tool and compare their editability when selected: - - - - + + + + Además, usted puede convertir a trazo ("delineado") el Borde de cualquier objeto. Adelante, el primer objeto es el trazo original (sin relleno, borde negro), mientras que el segundo es el resultado del comando Borde a Trazo (relleno negro, sin borde): - - - - Operaciones booleanas + + + + Operaciones booleanas - - + + Los comandos en el menú Trazo le permiten combinar dos o más objetos usando operaciones booleanas: - Original shapes - Union (Ctrl++) - Difference (Ctrl+-) - Intersection(Ctrl+*) - Exclusion(Ctrl+^) - Division(Ctrl+/) - Cut Path(Ctrl+Alt+/) - - - - - - - - - - - (bottom minus top) - - + Original shapes + Union (Ctrl++) + Difference (Ctrl+-) + Intersection(Ctrl+*) + Exclusion(Ctrl+^) + Division(Ctrl+/) + Cut Path(Ctrl+Alt+/) + + + + + + + + + + + (bottom minus top) + + - Los atajos por teclado para estos comandos hacen alusión a los análogos aritméticos de las operaciones booleanas (union es adición, diferencia es sustracción, etc.). Los comandos Diferencia y Exclusión sólo pueden ser aplicados a dos objetos seleccionados; otros pueden procesar cualquier número de objetos a la vez. El resultado siempre recibe el estilo del objeto del fondo. + Los atajos por teclado para estos comandos hacen alusión a los análogos aritméticos de las operaciones booleanas (union es adición, diferencia es sustracción, etc.). Los comandos Diferencia y Exclusión sólo pueden ser aplicados a dos objetos seleccionados; otros pueden procesar cualquier número de objetos a la vez. El resultado siempre recibe el estilo del objeto del fondo. - - + + - El resultado del comando Exclusión se parece a Combinar (observe adelante), pero es diferente a Exclusion en el hecho que este último agrega nodos donde estaban las intersecciones de trazos originales. La diferencia entre División y Cortar Trazo radica en que el primero de ellos corta completamente el objeto del fondo por el trazo del objeto de la parte superior, mientras el último solo corta el borde del objeto del fondo y remueve cualquier relleno (esto es conveniente para cortado en piezas de bordes sin-relleno). + El resultado del comando Exclusión se parece a Combinar (observe adelante), pero es diferente a Exclusion en el hecho que este último agrega nodos donde estaban las intersecciones de trazos originales. La diferencia entre División y Cortar Trazo radica en que el primero de ellos corta completamente el objeto del fondo por el trazo del objeto de la parte superior, mientras el último solo corta el borde del objeto del fondo y remueve cualquier relleno (esto es conveniente para cortado en piezas de bordes sin-relleno). - - Reducir y ampliar + + Reducir y ampliar - - + + - Inkscape puede expandir y contraer formas no solo mediante escalado, también puede mediante desvio de trazo de un objeto, i.e. desplazándolo perpendicularmente al trazo de cada punto. Los comandos correspondientes son llamados Ampliar (Ctrl+() y Reducir (Ctrl+)). Mostrados adelante como el trazo original (rojo) y un número de trazos ampliados y reducidos del original: + Inkscape puede expandir y contraer formas no solo mediante escalado, también puede mediante desvio de trazo de un objeto, i.e. desplazándolo perpendicularmente al trazo de cada punto. Los comandos correspondientes son llamados Ampliar (Ctrl+() y Reducir (Ctrl+)). Mostrados adelante como el trazo original (rojo) y un número de trazos ampliados y reducidos del original: - - - - - - - - - + + + + + + + + + - Los comandos directos Ampliar y Reducir producen trazos (convirtiendo el objeto original a trazo si aún no es trazo ). Muchas veces, más conveniente es Desvío Dinamico (Ctrl+J) el cual crea un objeto con manejadores arrastrables (similar al manejador de formas) contralando la distancia de desviado. Seleccione el objeto de abajo, cambie a la herramienta nodo y arrastre su manejador para obtener una idea: + Los comandos directos Ampliar y Reducir producen trazos (convirtiendo el objeto original a trazo si aún no es trazo ). Muchas veces, más conveniente es Desvío Dinamico (Ctrl+J) el cual crea un objeto con manejadores arrastrables (similar al manejador de formas) contralando la distancia de desviado. Seleccione el objeto de abajo, cambie a la herramienta nodo y arrastre su manejador para obtener una idea: - - - + + + Como un objeto desviado dinámicamente recuerda el trazo original, este no "degrada" cuando usted cambia la distancia de desviado una y otra vez. Cuando usted no lo requiere ajustar más, siempre puede volver a convertir un objeto desviado a trazo. - - + + Aún más conveniente es el Desvío Enlazado, el cual es similar a la variedad dinámica pero es conectado a otro trazo el cual se mantiene editable. Usted puede tener cualquier número de desvíos enlazadas para un trazo fuente. Adelante, el trazo fuente es rojo, un desvío enlazado a este tiene borde negro y no posee relleno, el otro posee relleno negro y no tiene borde. - - + + - Seleccione el objeto rojo y edit nodos; observe como ambas desviaciones enlazadas resoinden. Ahora seleccione cualquiera de las desviaciones y arrastre sus manejadores para ajustar el radio de desviación. Finalmente, note como moviendo o transformando el fuente mueve todos los objetos desviados enlazados a el y como usted puede mover o transformar objetos desviados independientemente sin perder su conexión con el fuente. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Simplificación + + Simplificación - - + + - El uso principal del comando Simplificar (Ctrl+L) es reducir el número de nodos de un trazo mientras casi preserve su forma. Esto puede ser útil para trazos creados mediante la herramienta Lápiz, ya que la herramienta en ocasiones crea más nodos de los ncesarios. Adelante, la forma en la izquierda es creada mediante la herramienta nano alzada y la de la derecha es una copia pero simplifiacada. El trazo original tiene 28 nodos, mientras que el simplificado posee 17 (lo cual significa que es mucho más sencillo de trabajar con la herramienta Nodo) y es más suave. + El uso principal del comando Simplificar (Ctrl+L) es reducir el número de nodos de un trazo mientras casi preserve su forma. Esto puede ser útil para trazos creados mediante la herramienta Lápiz, ya que la herramienta en ocasiones crea más nodos de los ncesarios. Adelante, la forma en la izquierda es creada mediante la herramienta nano alzada y la de la derecha es una copia pero simplifiacada. El trazo original tiene 28 nodos, mientras que el simplificado posee 17 (lo cual significa que es mucho más sencillo de trabajar con la herramienta Nodo) y es más suave. - - - - + + + + - El monto de la simplificación (llamado umbral) depende del tamaño de la selección. Por lo tanto, si usted selecciona un trazo a lo largo con algún objeto grande, este será simplificado más agresivamente que si usted selecciona ese trazo pero solo. Además, el comando Simplificar es acelerado. Esto indica que si usted presiona Ctrl+L en múltiples ocasiones en una suseción rápida (o sea que la llamada sea en 0.5 seg entre cada uno). El umbral es incrementado en cada llamado. (Si hace otro Simplificar después de una pausa, el umbral es devuelto a su valor por defecto.) Haciendo uso de la aceleración, es fácil de aplicar para el monto exacto de simplificación que usted requiere en cada caso. + El monto de la simplificación (llamado umbral) depende del tamaño de la selección. Por lo tanto, si usted selecciona un trazo a lo largo con algún objeto grande, este será simplificado más agresivamente que si usted selecciona ese trazo pero solo. Además, el comando Simplificar es acelerado. Esto indica que si usted presiona Ctrl+L en múltiples ocasiones en una suseción rápida (o sea que la llamada sea en 0.5 seg entre cada uno). El umbral es incrementado en cada llamado. (Si hace otro Simplificar después de una pausa, el umbral es devuelto a su valor por defecto.) Haciendo uso de la aceleración, es fácil de aplicar para el monto exacto de simplificación que usted requiere en cada caso. - - + + - Besides smoothing freehand strokes, Simplify can be used for various + Besides smoothing freehand strokes, Simplify can be used for various creative effects. Often, a shape which is rigid and geometric benefits from some amount of simplification that creates cool life-like generalizations of the original form - melting sharp corners and introducing very natural distortions, sometimes stylish and sometimes plain funny. Here's an example of a clipart shape that looks much nicer after -Simplify: +Simplify: - Original - Slight simplification - Aggressive simplification - - - - - Creando texto + Original + Slight simplification + Aggressive simplification + + + + + Creando texto - - + + Inkscape es capaz de crear textos largos y complejos. Sin embargo, esto el algo muy conveniente para la creación de textos pequeños como cabeceras, banners, logos, etiquetas de diagramas y captura, etc. Esta sección es una introducción muy básica acerca de las capacidades de texto de Inkscape. - - + + Crear un texto es tan sencillo como cambiar a la herramienta de Texto (F8), dando click donde en el documento y escribiendo su texto. Para cambiar la familia de fuente, estilo, tamaño y alineación, abra el dialogo Texto y Fuente (Mayus+Ctrl+T). Este dialogo tambien tiene una pestaña de entreda de texto donde usted puede editar el objeto de texto seleccionado - en algunas situaciones, esto puede ser más conveniente que editar sobre la pizarra (en particular, esta etiqueta soporta revisión de como-usted-escribe). - - + + @@ -475,43 +480,43 @@ objects -so you can click to select and position the cursor in any existing text object (such as this paragraph). - - + + Una de las operaciones más comunes en el diseño de texto es el ajustar el espaceado entre letras y líneas. Como siempre, Inkscape provee atajos por teclado para esto. Cuando se encuentra editando texto, las teclas Alt+< y Alt+> cambian el espaceado de letras en la línea actual de un objeto de texto, así que la longitud total de las líneas cambian en 1 pixel en la visualización actual (compare con la herramienta Selector donde la misma tecla hace un excalado de objeto tamaño-pixel). Como una regla, si el tamaño de fuente en un objeto de texto es más largo que el por defecto, se notará un apretujado de letras un poco más ajustado que el por defecto. Aquí un ejemplo: - Original - Letter spacing decreased - Inspiration - Inspiration - - + Original + Letter spacing decreased + Inspiration + Inspiration + + Las variantes de ajustados parecen un poco mejor que un encabezado, pero aún no es perfecto: las distancias entre letras no son uniformes, por ejemplo la "a" y la "t" están muy separadas mientra que la "t" y la "i" están muy cerca. El monto de de dicho kern erroneo (especialmente visible en tamaños de fuente grandes) es mayor en fuentes de baja calidad que en las otras de buena calidad; sin embargo, en cualquier cadena de texto y en cualquier fuente probablemente buscará un par de letras que puedan beneficiar el ajuste del espaceado. - - + + Inkscape hace estos ajustes de una manera muy sencilla. Tan sólo mueva su cursor de edición de texto entre los caracteres mal espaceados y use Alt+flechas para mover las letras a partir del cursor. He aquí el mismo encabezado de nuevo, en esta ocasión con ajuste manuales para un posisionado de letras visualmente uniforme: - Letter spacing decreased, some letter pairs manually kerned - Inspiration - - + Letter spacing decreased, some letter pairs manually kerned + Inspiration + + Adicionalmente, para movimiento horizontal de letras es mediante Alt+Izquierda o Alt+Derecha, también puede moverlas verticalmente mediante Alt+Arriba o Alt+Abajo: - Inspiration - - + Inspiration + + @@ -523,34 +528,34 @@ disadvantage to the “text as text†approach is that you need to have the ori installed on any system where you want to open that SVG document. - - + + Similar al espaceado de letras, usted también puede ajustar espaceado de línea en objetos de texto multi-línea. Intente las teclas Ctrl+Alt+< y Ctrl+Alt+> sobre cualquier parrafo en este tutorial para espacearlo dentro o fuera así que la altura total de los objetos de texto cambian en 1 pixel en el zoom actual. Como en Selección, presionando Mayus con cualquier atajo de espaceado o kern produce efectos 10 veces más grande que sin el Mayus. - - Editor XML + + Editor XML - - + + Las última herramienta poderosa de XML es el editor XML (Mayus+Ctrl+X). Este muestra todo el arbol XML del documento, simpre refleja su actual estado. Usted puede editar sus dibujos y observar los cambios correspondientes en el arbol XML. Además, usted puede editar cualquier texto, elemento o atributo de nodos en el editor de XML y observe el resultado en su pizarra. Esta es la mejor herramienta imaginable para aprender interactivamente SVG y este le permite hacer trucos que pueden ser imposibles con herramientas regulares de edición. - - Conclusión + + Conclusión - - + + - este tutorial muestra solo una pequeña parte de las capacidades de Inkscape. Esperamos que lo haya divertido. No tema experimentar y dividir lo que crea. Por favor visite www.inkscape.org para más información, últimas versiones y ayuda para usuarios y la comunidad de desarrolladores. + este tutorial muestra solo una pequeña parte de las capacidades de Inkscape. Esperamos que lo haya divertido. No tema experimentar y dividir lo que crea. Por favor visite www.inkscape.org para más información, últimas versiones y ayuda para usuarios y la comunidad de desarrolladores. - + @@ -580,8 +585,8 @@ installed on any system where you want to open that SVG document. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-advanced.eu.svg b/share/tutorials/tutorial-advanced.eu.svg index de0ff9873..9e073ea7c 100644 --- a/share/tutorials/tutorial-advanced.eu.svg +++ b/share/tutorials/tutorial-advanced.eu.svg @@ -36,61 +36,61 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::AURRERATUA -bulia byak, buliabyak@users.sf.net eta josh andler, scislac@users.sf.net - - + + + Tutorial honek kopiatu/itsatsi, nodoen edizioa, pultsuan eta bezier marrazketa, bideen eraldaketa, boolearrak, desplazamenduak, sinplifikazioa eta testu tresna lantzen ditu. - - + + - Ctrl-geziak, saguaren gurpila edo Erdiko botoiarekin arrastatzea erabili orrian beheruntz mugitzeko Objektuen sorrera, hautatze eta eraldaketen oinarrientzako, begiratu Oinarrizko tutoriala Laguntza > Tutorialak menuan. + Ctrl-geziak, saguaren gurpila edo Erdiko botoiarekin arrastatzea erabili orrian beheruntz mugitzeko Objektuen sorrera, hautatze eta eraldaketen oinarrientzako, begiratu Oinarrizko tutoriala Laguntza > Tutorialak menuan. - - Itsasteko teknikak + + Itsasteko teknikak - - + + - Hainbat objektu kopiatu Ktrl+C edo ebaki Ktrl+X ondoren, Itsatsi komandoak (Ktrl+V) kopiatutako objektuak kurtsorearen azpian itsasten ditu. Kurtsorea leihotik kanpo baldin badago dokumentu-leihoaren erdian kopiatuko ditu. Hala ere, arbelean dauden objektuak jatorrizko kokapena gogoratzen dute, eta bertan itsats ditzazkezu Itsatsi lekuan komandoaren bidez (Ktrl+Alt+V). + Hainbat objektu kopiatu Ktrl+C edo ebaki Ktrl+X ondoren, Itsatsi komandoak (Ktrl+V) kopiatutako objektuak kurtsorearen azpian itsasten ditu. Kurtsorea leihotik kanpo baldin badago dokumentu-leihoaren erdian kopiatuko ditu. Hala ere, arbelean dauden objektuak jatorrizko kokapena gogoratzen dute, eta bertan itsats ditzazkezu Itsatsi lekuan komandoaren bidez (Ktrl+Alt+V). - - + + - Beste komando batek, Itsatsi estiloak (Shift+Ktrl+V) uneko hautapenari arbelean dagoen (lehengo) objektuaren estiloa aplikatuko dio. Horrela itsatsitako “estiloaâ€k betetzea, trazaketa, eta letra-tipoa aldatzen ditu, baina ez itxura, tamaina, edo forma baten parametro konkretuak (izar baten erpin kopurua, adibidez). + Beste komando batek, Itsatsi estiloak (Shift+Ktrl+V) uneko hautapenari arbelean dagoen (lehengo) objektuaren estiloa aplikatuko dio. Horrela itsatsitako “estiloaâ€k betetzea, trazaketa, eta letra-tipoa aldatzen ditu, baina ez itxura, tamaina, edo forma baten parametro konkretuak (izar baten erpin kopurua, adibidez). - - + + - Itsasteko beste komandoetako bat, Itsatsi tamaina, hautapena eskalatzen du arbelean dauden objektuen tamainarekin bat egiteko. Tamaina itsasteko komando anitz daude: Itsatsi tamaina, Itsatsi zabalera, Itsatsi altuera, Itsatsi tamaina bereiztuta, Itsatsi altuera bereiztuta eta Itsatsi zabalera bereiztuta. + Itsasteko beste komandoetako bat, Itsatsi tamaina, hautapena eskalatzen du arbelean dauden objektuen tamainarekin bat egiteko. Tamaina itsasteko komando anitz daude: Itsatsi tamaina, Itsatsi zabalera, Itsatsi altuera, Itsatsi tamaina bereiztuta, Itsatsi altuera bereiztuta eta Itsatsi zabalera bereiztuta. - - + + - Itsatsi tamainak hautapen osoa eskalatzen du arbelean dauden objektuen batazbesteko tamainara. Itsatsi zabalera eta Itsatsi altuera komandoek hautapen osoa eskalatzen dute horizontalki edo bertikalki arbelean dauden objektuen zabalera edo altueretara. Komando hauek eskalatze proportzionaleko blokeoa errespetatzen dute. Kontrol hau hautapen-tresnaren kontrol-barran dago (Z eta A eremuen artean). Blokeoa ixten bada hautapeneko beste dimentsioak proportzio berean eskalatuko dira; bestela ez dira beste dimentsioak aldatzen. “Bereiztuta†duten komandoek goiko komandoen antzera funtzionatzen dute, baina hautapeneko objektu bakoitza bereiztuta eskalatuko ditu arbeleko objektuen tamaina/zabalera/altueretara + Itsatsi tamainak hautapen osoa eskalatzen du arbelean dauden objektuen batazbesteko tamainara. Itsatsi zabalera eta Itsatsi altuera komandoek hautapen osoa eskalatzen dute horizontalki edo bertikalki arbelean dauden objektuen zabalera edo altueretara. Komando hauek eskalatze proportzionaleko blokeoa errespetatzen dute. Kontrol hau hautapen-tresnaren kontrol-barran dago (Z eta A eremuen artean). Blokeoa ixten bada hautapeneko beste dimentsioak proportzio berean eskalatuko dira; bestela ez dira beste dimentsioak aldatzen. “Bereiztuta†duten komandoek goiko komandoen antzera funtzionatzen dute, baina hautapeneko objektu bakoitza bereiztuta eskalatuko ditu arbeleko objektuen tamaina/zabalera/altueretara - - + + @@ -99,43 +99,43 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - Pultsuan marrazten eta bide erregularrak + + Pultsuan marrazten eta bide erregularrak - - + + Itxura arbitrariodun formak sortzeko modurik errezena Arkatza (pultsuan) tresna (F6) da: - - - - - - - - - - - + + + + + + + + + + + Forma erregularragoak nahi izanez gero, Luma (Bezier) tresna (Shift+F6) erabili: - - - - - - - - - - - + + + + + + + + + + + @@ -149,26 +149,26 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Bai pultsuan bai bezier tresnekin, unean hautatuta dagoen bideak bi aingura karratu txiki erakusten ditu hasieran eta bukaeran. Aingura hauek bidea jarraitzea (ainguretako batetik marraztuz) edo ixtea (aingura batetik bestera marraztuz) ahalbidetzen dute, bide berri bat sortu ordez. - - Bideak editatzen + + Bideak editatzen - - + + Formen tresnekin sortutako formak ez bezala, Arkatza eta Luma tresnek bideak sortzen dituzte. Bide bat lerro zuzenen eta/edo Bezier kurben sekuentzia bat da, Inkscape-ko beste edozein objektu bezala betetze eta trazatze propietate arbitrarioak izan ditzaketenak. Bide bat editatu daiteke edozein nodo (ez bakarrik defektuzko heldulekuak) nahi bezala arrastatuz edo zuzenean bidearen segmentu bat arrastatuz. Hautatu bide hau eta Nodo tresna aukeratu (F2): - - - + + + @@ -183,8 +183,8 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on selected node); Alt+! inverts in the entire path. - - + + @@ -196,8 +196,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -209,8 +209,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -226,61 +226,61 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Nodo baten helduleku bat uzkurtu daiteke bere gainean Ktrl+klik eginez. Ondoz ondoko bi nodoen heldulekuak uzkurtu badaude, nodoen arteko segmentua lerro zuzena izango da. Uzkurtutako heldulekua ateratzeko, Shift+arrastatu nodotik kanpo. - - Azpibideak eta konbinatzea + + Azpibideak eta konbinatzea - - + + Bide objektu batek azpibide bat baino gehiago izan ditzake. Azpibide bat elkarren artean lotuta dauden nodoen sekuentzia da. (Beraz, bide batek azpibide bat baino gehiago baldin badu ez dira nodo guztiak konektatuta egongo). Azpi-ezkerraldeko hiru azpibideak bide bakarrean daude; eskuinaldeko hiru azpibideak bide ezberdinetan daude: - - - - - - + + + + + + Kontutan hartu bide konposatu bat ez dela talde baten berdina. Objektu bakarra da bere osotasunean hautatu behar dena. Ezkerreko objektua hautatu eta nodo tresnara joanda, nodoak agertuko dira hiru azpibideetan. Eskuinekoan, ordea, bide bakarreko nodoak editatu ahalko dituzu aldi bakoitzean. - - + + - Inkscape-k bideak Konbinatu ditzake bide konposatu bat (Ktrl+K) sortzeko eta bide konposatu bat Banandu dezake bide ezberdinetan (Shift+Ktrl+K). Frogratu komando hauek goiko adibideekin. Objektu batek betetze eta trazatze bat bakarrik izan dezakenez, bide konposatu batek lehenbiziko (z-ordenean guztien azpian dagoen) bidearen estiloa hartuko du. + Inkscape-k bideak Konbinatu ditzake bide konposatu bat (Ktrl+K) sortzeko eta bide konposatu bat Banandu dezake bide ezberdinetan (Shift+Ktrl+K). Frogratu komando hauek goiko adibideekin. Objektu batek betetze eta trazatze bat bakarrik izan dezakenez, bide konposatu batek lehenbiziko (z-ordenean guztien azpian dagoen) bidearen estiloa hartuko du. - - + + Beteta dauden eta teilakatzen diren bideak konbinatzean, orokorrean teilakatutako azaleran betetzea desagertuko da: - - - + + + Barnean zuloak dituzten objektuak sortzeko modurik errazena da hau. Bide komando ahaltsuagoentzako begiratu "Eragiketa boolearrak" beherago. - - Objektua bide + + Objektua bide - - + + @@ -292,167 +292,172 @@ nodes. Here are two stars - the left one is kept a shape and the right one is converted to path. Switch to node tool and compare their editability when selected: - - - - + + + + Horrez gain, edozein objekturen trazua bide batean bihur daiteke ("eskema"). Azpian, lehenbiziko objektua jatorrizko bidea da (betetzerik ez, trazu beltza), bigarrena Trazua bide komandoaren ondorioa da (betetze beltza, trazurik ez): - - - - Eragiketa boolearrak + + + + Eragiketa boolearrak - - + + Bidea menuko komandoek bi objektu edo gehiago eragiketa boolearren bidez konbinatzea ahalbidetzen dute: - Jatorrizko formak - Bilketa (Ktrl++) - Diferentzia (Ktrl+-) - Ebakidura(Ktrl+*) - Esklusioa(Ktrl+^) - Zatiketa(Ktrl+/) - Ebaki bidea(Ktrl+Alt+/) - - - - - - - - - - - (azpikoari goikoa kendu) - - + Jatorrizko formak + Bilketa (Ktrl++) + Diferentzia (Ktrl+-) + Ebakidura(Ktrl+*) + Esklusioa(Ktrl+^) + Zatiketa(Ktrl+/) + Ebaki bidea(Ktrl+Alt+/) + + + + + + + + + + + (azpikoari goikoa kendu) + + - Komando hauen lasterbideak eragiketa boolearren aritmetikako baliokideetan oinarrituta daude (bilketa gehiketa da, diferentzia kenketa, eta abar.).Diferentzia eta Esklusioa komandoak bi objektuei bakarrik aplika daitezke; besteak nahi beste objektuekin lan egin dezakete aldi bakoitzean. Emaitzak beti azpiko objektuaren estiloa hartzen dute. + Komando hauen lasterbideak eragiketa boolearren aritmetikako baliokideetan oinarrituta daude (bilketa gehiketa da, diferentzia kenketa, eta abar.).Diferentzia eta Esklusioa komandoak bi objektuei bakarrik aplika daitezke; besteak nahi beste objektuekin lan egin dezakete aldi bakoitzean. Emaitzak beti azpiko objektuaren estiloa hartzen dute. - - + + - Esklusioa komandoaren emaitza Konbinaturen oso antzekoa da (gorago ikusi), baina Esklusioak nodo berriak gehitzen ditu jatorrizko bideen ebakiduretan. Zatiketa eta Ebaki bidea komandoen arteko ezberdintasuna lehenbizikoak azpiko objektu osoa mozten duela da, bigarrenak azpiko objektuaren trazua mozten duelarik betetzea kenduz (betetzerik gabeko trazuak zatietan mozteko aproposa). + Esklusioa komandoaren emaitza Konbinaturen oso antzekoa da (gorago ikusi), baina Esklusioak nodo berriak gehitzen ditu jatorrizko bideen ebakiduretan. Zatiketa eta Ebaki bidea komandoen arteko ezberdintasuna lehenbizikoak azpiko objektu osoa mozten duela da, bigarrenak azpiko objektuaren trazua mozten duelarik betetzea kenduz (betetzerik gabeko trazuak zatietan mozteko aproposa). - - Laburtu eta luzatu + + Laburtu eta luzatu - - + + - Eskalatzeaz aparte, Inkscape-ek formak hedatu eta uzkurtu ditzake objektuaren bidea desplazatuz, hau da, puntu bakoitza bidearekiko perpendikularki desplazatuz. Dagozkien komandoak Laburtu (Ktrl+() eta Luzatu (ktrl+)) dira. Azpian jatorrizko bidea (gorriz) eta jatorrizkoarekiko luzatu eta laburtutako bide batzuk ikus daitezke. + Eskalatzeaz aparte, Inkscape-ek formak hedatu eta uzkurtu ditzake objektuaren bidea desplazatuz, hau da, puntu bakoitza bidearekiko perpendikularki desplazatuz. Dagozkien komandoak Laburtu (Ktrl+() eta Luzatu (ktrl+)) dira. Azpian jatorrizko bidea (gorriz) eta jatorrizkoarekiko luzatu eta laburtutako bide batzuk ikus daitezke. - - - - - - - - - + + + + + + + + + - Laburtu eta Luzatu komando hutsek bideak sortzen dituzte (jatorrizko objektua bidea bihurtuz lehendik ez izatekotan). Askotan erabilgarriagoa da Desplazamendu dinamikoa (Ktrl+J), objektu berria sortzen duena, desplazamenduaren distantzia kontrolatzeko heldulekuekin (formen heldulekuen antzera). Hautatu azpiko objektua, nodo tresnara aldatu eta bere heldulekua arrastatu idea egiteko: + Laburtu eta Luzatu komando hutsek bideak sortzen dituzte (jatorrizko objektua bidea bihurtuz lehendik ez izatekotan). Askotan erabilgarriagoa da Desplazamendu dinamikoa (Ktrl+J), objektu berria sortzen duena, desplazamenduaren distantzia kontrolatzeko heldulekuekin (formen heldulekuen antzera). Hautatu azpiko objektua, nodo tresnara aldatu eta bere heldulekua arrastatu idea egiteko: - - - + + + desplazamendu dinamikodun objektu hauek jatorrizko bidea gogoratzen dute, "degradatzen" ez direlarik desplazamenduaren distantzia behin eta berriz aldatzean. Berriro doitu nahi ez izatekotan objektua bide bihur dezakezu beti. - - + + Oraindik erabilgarriago desplazamendu estekatua da, desplazamendu dinamikoaren antzekoa dena baina edita daitekeen beste bide bati estekatuta dagoena. Jatorrizko bide bakoitzeko nahi beste desplazamendu estekatu izan ditzakezu. Azpian, jatorrizko bidea gorria da, desplazamendu estekatu batek trazu beltza du eta ez dago beteta, bestea beltzez beteta dago eta ez du trazurik. - - + + - Objektu gorria hautatu eta bere nodoak editatu; ikusi estekatutako objektuak nola erantzuten duten. Hautatu orain estekatutako objektu bat eta arrastatu bere heldulekua desplazamenduaren erradioa doitzeko. Azkenik, ohartu nola jatorrizko objektua mugitzean esteketatutako objektuak ere mugitzen diren. Ohartu baita ere nola estekatutako objektuak askeki mugi edo transforma daitezkeen jatorrizkoarekiko lotura galdu gabe. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Soilketa + + Soilketa - - + + - Soildu (Ktrl+L) komandoaren erabilpen nagusia bide baten nodo kopurua txikitzea da, ahal bezala bere forma mantenduz. Erabilgarria izan daiteke Arkatza tresnarekin sortutako bideentzat, tresna honek batzutan behar baino nodo gehiago sortzen dituelako. Azpian, ezkerreko forma arkatzarekin sortu da eta eskuinekoa soildutako kopia bat da. Jatorrizko bideak 28 nodo ditu, soildutakoak 17 (nodo tresnarekiin lan egiteko askoz errezagoa delarik). Gainera leunagoa da. + Soildu (Ktrl+L) komandoaren erabilpen nagusia bide baten nodo kopurua txikitzea da, ahal bezala bere forma mantenduz. Erabilgarria izan daiteke Arkatza tresnarekin sortutako bideentzat, tresna honek batzutan behar baino nodo gehiago sortzen dituelako. Azpian, ezkerreko forma arkatzarekin sortu da eta eskuinekoa soildutako kopia bat da. Jatorrizko bideak 28 nodo ditu, soildutakoak 17 (nodo tresnarekiin lan egiteko askoz errezagoa delarik). Gainera leunagoa da. - - - - + + + + - Soiltzearen zenbatekoa (atalase izenekoa) hautapenaren tamainaren araberakoa da. Honela, bide bat eta objektu handiago bat hautatuz gero, bidea bakarrik hautatzean baino gehiago soilduko da. Are gehiago, Soildu komandoa azeleratua da. Honek esan nahi du Ktrl+L behin baino gehiagotan eta azkar sakatuz gero (deien arteko tartea 0.5 segundo baino gutxiagokoa bada) atalasea dei bakoitzean handitzen joango da. (Geldiune baten ondoren beste Soiltze bat egiten baduzu, atalasea lehenetsitako baliora itzuliko da.) Azelerazioaz baliatuz erraza da soiltze zehatz bat lortzea kasu bakoitzeko. + Soiltzearen zenbatekoa (atalase izenekoa) hautapenaren tamainaren araberakoa da. Honela, bide bat eta objektu handiago bat hautatuz gero, bidea bakarrik hautatzean baino gehiago soilduko da. Are gehiago, Soildu komandoa azeleratua da. Honek esan nahi du Ktrl+L behin baino gehiagotan eta azkar sakatuz gero (deien arteko tartea 0.5 segundo baino gutxiagokoa bada) atalasea dei bakoitzean handitzen joango da. (Geldiune baten ondoren beste Soiltze bat egiten baduzu, atalasea lehenetsitako baliora itzuliko da.) Azelerazioaz baliatuz erraza da soiltze zehatz bat lortzea kasu bakoitzeko. - - + + - Besides smoothing freehand strokes, Simplify can be used for various + Besides smoothing freehand strokes, Simplify can be used for various creative effects. Often, a shape which is rigid and geometric benefits from some amount of simplification that creates cool life-like generalizations of the original form - melting sharp corners and introducing very natural distortions, sometimes stylish and sometimes plain funny. Here's an example of a clipart shape that looks much nicer after -Simplify: +Simplify: - Jatorrizkoa - Sinplifikatze leuna - Sinplifikatze zakarra - - - - - Testua sortzen + Jatorrizkoa + Sinplifikatze leuna + Sinplifikatze zakarra + + + + + Testua sortzen - - + + Inkscape testu luze eta konplexuak sortzeko gai da. Hala ere, oso erabilgarria da burukoak, banner-ak, logoak, diagramen etiketak, epigrafeak eta abar bezalako testu txikiak sortzeko. Atal hau Inkscape-ren idazteko ahalmenen oinarrizko sarrera bat da. - - + + Testu objektuak sortzea oso erraza da: Testu tresna (F8) hautatu, dokumentuan nonbait klikatu eta zure testua idatzi. Letra-tipoen familia, estiloa, tamaina eta lerrokatzea aldatzeko ireki Testua eta letra-tipoa dialogoa (Shift+Ktrl+T). Dialogo honek hautatutako testu objektuaren edukia aldatzeko fitxa bat du - batzutan erabilgarriagoa izan daiteke oihalean zuzenean editatzea baino (zehazki, fitxak idatzi ahala ortografia zuzentzea ahalbidetzen du). - - + + @@ -461,43 +466,43 @@ objects -so you can click to select and position the cursor in any existing text object (such as this paragraph). - - + + Testu diseinuan ohizko eragiketa bat hizki eta lerroen arteko tartea fintzea da. Beti bezala, honetarako Inkscape-k teklatu bidezko lasterbideak eskaintzen ditu. Testua objektu bat editatzen egonda, Alt+< eta Alt+> teklek uneko lerroko hizkien arteko tartea aldatzen dute, lerroaren luzera osoa uneko zoomarekiko pixel batean aldatuz (Hautapen tresnarekin alderatuta, tekla berdinek pixelka eskalatzen dute). Gida bezela, testu objektu bateko letra-tipoaren tamaina lehenetsitako balioa baino handiago bada, ziur aski hizkiak defektuzkoa baino apur bat estuagoak egitea onuragarria izango da. Hona hemen adibide bat: - Jatorrizkoa - Hizki arteko tartea murriztua - Inspiration - Inspiration - - + Jatorrizkoa + Hizki arteko tartea murriztua + Inspiration + Inspiration + + Bertsio estuagoak itxura hobea du izenburu gisa, baina oraindik ez da perfektua: hizkien arteko tarteak ez dira uniformeak, adibidez “a†eta “t†oso urrun daude elkarrengandik, “t†eta “i†hurbilegi dauden bitartean. Karaktere-tarte txar hauen kopurua (letra-mota tamaina handietan bereziki) handiagoa da kalitate gutxiko letra-motetan kalitate handikoetan baino; hala ere, edozein testu eta edozein letra-tiporekin karaktere-tartea fintzeaz onuratuko diren hizki bikoteak topa daitezke. - - + + Inkscape-k finketa hauek asko errazten ditu. Nahikoa da kurtsorea konpondu nahi diren karakteren artean jartzea eta Alt+geziak erabiltzea kurtsoretik eskuinera dauden hizkiak mugitzeko. Hona berriz ere izenburu berdina, hizkien arteko tarte uniformearekin eskuzko doiketa burutu ostean: - Letren arteko tartea txikituta, letra bikote batzuen karaktere-tartea doituta - Inspiration - - + Letren arteko tartea txikituta, letra bikote batzuen karaktere-tartea doituta + Inspiration + + Hizkiak Alt+Ezkerra eta Alt+Eskuina erabiliz horizontalki mugitzeaz aparte, bertikalki mugitzea badago Alt+Gora edo Alt+Behera erabiliz: - Inspiration - - + Inspiration + + @@ -509,34 +514,34 @@ disadvantage to the “text as text†approach is that you need to have the ori installed on any system where you want to open that SVG document. - - + + Hizkien arteko tartea bezala, lerroen arteko tartea ere findu daiteke lerro anitzetako objektuetan. Tutorial honetako edozein parrafotan Ktrl+Alt+< eta Ktrl+Alt+> teklak frogatu tartea oraingo zoomaren pixel batean txikitu edo handitzeko. Hautatzailearekin bezala, Shift sakatuz tarteentzako edo karaktere-tarteentzako lasterbideen efektua 10 aldiz handiagoa izango da. - - XML editorea + + XML editorea - - + + Inkscape-ren erabateko tresna poteretsua XML editorea (Shift+Ktrl+X) da. Dokumentuaren XML zuhaitz osoa erakusten du, beti oraingo egoerarekiko eguneratuta. Zure marrazkia edita dezakezu eta XML zuhaitzan aldaketak aztertu. Gainera, XML editorean edozein testu, elementu edo nodoen atributuak alda ditzakezu eta ohialean emaitzak ikusi. SVG interaktiboki ikasteko tresnarik hoberena da, eta editatzeko tresna ohizkoekin burutu ezin diren trikimailuak ahalbidetzen ditu. - - Ondorioak + + Ondorioak - - + + - Tutorial honek Inkscape-ko ahalmenen zati txiki bat baino ez du erakusten. Gustoko izatea espero dugu. Ez beldurrik izan esperimentatu eta sortutakoa partekatzeaz. Bisitatu mesedez www.inkscape.org informazio gehiagorako, azken bertsioetarako eta erabiltzaile eta garatzaile tadeen laguntzarako. + Tutorial honek Inkscape-ko ahalmenen zati txiki bat baino ez du erakusten. Gustoko izatea espero dugu. Ez beldurrik izan esperimentatu eta sortutakoa partekatzeaz. Bisitatu mesedez www.inkscape.org informazio gehiagorako, azken bertsioetarako eta erabiltzaile eta garatzaile tadeen laguntzarako. - + @@ -566,8 +571,8 @@ installed on any system where you want to open that SVG document. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-advanced.fa.svg b/share/tutorials/tutorial-advanced.fa.svg index c2d04f493..cf2a630c1 100644 --- a/share/tutorials/tutorial-advanced.fa.svg +++ b/share/tutorials/tutorial-advanced.fa.svg @@ -36,16 +36,16 @@ - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید - + ::ADVANCED -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + + @@ -53,62 +53,62 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net drawing, path manipulation, booleans, offsets, simplification, and text tool. - - + + Use Ctrl+arrows, mouse wheel, or middle button drag to scroll the page down. For basics of object creation, selection, and -transformation, see the Basic tutorial in Help > Tutorials. +transformation, see the Basic tutorial in Help > Tutorials. - - Pasting techniques + + Pasting techniques - - + + After you copy some object(s) by Ctrl+C or cut by -Ctrl+X, the regular Paste command +Ctrl+X, the regular Paste command (Ctrl+V) pastes the copied object(s) right under the mouse cursor or, if the cursor is outside the window, to the center of the document window. However, the object(s) in the clipboard still remember the original place from which they were -copied, and you can paste back there by Paste in Place +copied, and you can paste back there by Paste in Place (Ctrl+Alt+V). - - + + - Another command, Paste Style (Shift+Ctrl+V), + Another command, Paste Style (Shift+Ctrl+V), applies the style of the (first) object on the clipboard to the current selection. The “style†thus pasted includes all the fill, stroke, and font settings, but not the shape, size, or parameters specific to a shape type, such as the number of tips of a star. - - + + - Yet another set of paste commands, Paste Size, scales the selection + Yet another set of paste commands, Paste Size, scales the selection to match the desired size attribute of the clipboard object(s). There are a number of commands for pasting size and are as follows: Paste Size, Paste Width, Paste Height, Paste Size Separately, Paste Width Separately, and Paste Height Separately. - - + + - Paste Size scales the whole selection to match the overall size of the clipboard -object(s). Paste Width/Paste Height scale the + Paste Size scales the whole selection to match the overall size of the clipboard +object(s). Paste Width/Paste Height scale the whole selection horizontally/vertically so that it matches the width/height of the clipboard object(s). These commands honor the scale ratio lock on the Selector Tool controls bar (between W and H fields), so @@ -119,8 +119,8 @@ they scale each selected object separately to make it match the size/width/heigh of the clipboard object(s). - - + + @@ -129,11 +129,11 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - Drawing freehand and regular paths + + Drawing freehand and regular paths - - + + @@ -141,34 +141,34 @@ handle SVG on the clipboard to use this). Pencil (freehand) tool (F6): - - - - - - - - - - - + + + + + + + + + + + If you want more regular shapes, use the Pen (Bezier) tool (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -182,8 +182,8 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + @@ -194,11 +194,11 @@ only the last segment of an unfinished line, press new one. - - Editing paths + + Editing paths - - + + @@ -210,9 +210,9 @@ properties. But unlike a shape, a path can be edited by freely dragging any of i path and switch to the Node tool (F2): - - - + + + @@ -227,8 +227,8 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on selected node); Alt+! inverts in the entire path. - - + + @@ -240,8 +240,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -253,8 +253,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -270,8 +270,8 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + @@ -281,11 +281,11 @@ retracted, the path segment between them is a straight line. To pull out the ret node, Shift+drag away from the node. - - Subpaths and combining + + Subpaths and combining - - + + @@ -295,12 +295,12 @@ subpath, not all of its nodes are connected.) Below left, three subpaths belong single compound path; the same three subpaths on the right are independent path objects: - - - - - - + + + + + + @@ -310,20 +310,20 @@ will see nodes displayed on all three subpaths. On the right, you can only node- path at a time. - - + + - Inkscape can Combine paths into a compound path -(Ctrl+K) and Break Apart a compound path into + Inkscape can Combine paths into a compound path +(Ctrl+K) and Break Apart a compound path into separate paths (Shift+Ctrl+K). Try these commands on the above examples. Since an object can only have one fill and stroke, a new compound path gets the style of the first (lowest in z-order) object being combined. - - + + @@ -331,9 +331,9 @@ the style of the first (lowest in z-order) object being combined. in the areas where the paths overlap: - - - + + + @@ -341,11 +341,11 @@ in the areas where the paths overlap: commands, see “Boolean operations†below. - - Converting to path + + Converting to path - - + + @@ -357,10 +357,10 @@ nodes. Here are two stars - the left one is kept a shape and the right one is converted to path. Switch to node tool and compare their editability when selected: - - - - + + + + @@ -370,13 +370,13 @@ second one is the result of the Stroke to Path command (black fill, no stroke): - - - - Boolean operations + + + + Boolean operations - - + + @@ -384,89 +384,89 @@ no stroke): boolean operations: - Original shapes - Union (Ctrl++) - Difference (Ctrl+-) - Intersection(Ctrl+*) - Exclusion(Ctrl+^) - Division(Ctrl+/) - Cut Path(Ctrl+Alt+/) - - - - - - - - - - - (bottom minus top) - - + Original shapes + Union (Ctrl++) + Difference (Ctrl+-) + Intersection(Ctrl+*) + Exclusion(Ctrl+^) + Division(Ctrl+/) + Cut Path(Ctrl+Alt+/) + + + + + + + + + + + (bottom minus top) + + The keyboard shortcuts for these commands allude to the arithmetic analogs of the boolean operations (union is addition, difference is subtraction, etc.). The -Difference and Exclusion commands can only apply +Difference and Exclusion commands can only apply to two selected objects; others may process any number of objects at once. The result always receives the style of the bottom object. - - + + - The result of the Exclusion command looks similar to -Combine (see above), but it is different in that -Exclusion adds extra nodes where the original paths intersect. The -difference between Division and Cut Path is that + The result of the Exclusion command looks similar to +Combine (see above), but it is different in that +Exclusion adds extra nodes where the original paths intersect. The +difference between Division and Cut Path is that the former cuts the entire bottom object by the path of the top object, while the latter only cuts the bottom object's stroke and removes any fill (this is convenient for cutting fill-less strokes into pieces). - - Inset and outset + + Inset and outset - - + + Inkscape can expand and contract shapes not only by scaling, but also by offsetting an object's path, i.e. by displacing it perpendicular to the path in each point. The corresponding commands are called -Inset (Ctrl+() and Outset +Inset (Ctrl+() and Outset (Ctrl+)). Shown below is the original path (red) and a number of paths inset or outset from that original: - - - - - - - - - + + + + + + + + + - The plain Inset and Outset commands produce paths + The plain Inset and Outset commands produce paths (converting the original object to path if it's not a path yet). Often, more convenient -is the Dynamic Offset (Ctrl+J) which creates an +is the Dynamic Offset (Ctrl+J) which creates an object with a draggable handle (similar to a shape's handle) controlling the offset distance. Select the object below, switch to the node tool, and drag its handle to get an idea: - - - + + + @@ -475,8 +475,8 @@ does not “degrade†when you change the offset distance again and again. When need it to be adjustable anymore, you can always convert an offset object back to path. - - + + @@ -487,32 +487,32 @@ offset linked to it has black stroke and no fill, the other has black fill and n stroke. - - + + Select the red object and node-edit it; watch how both linked offsets respond. Now select any of the offsets and drag its handle to adjust the offset radius. Finally, note -how moving or transforming the source moves all offset objects linked to it, and how you + how you can move or transform the offset objects independently without losing their connection with the source. - + - - Simplification + + Simplification - - + + - The main use of the Simplify command (Ctrl+L) is + The main use of the Simplify command (Ctrl+L) is reducing the number of nodes on a path while almost preserving its shape. This may be useful for paths created by the Pencil tool, since that tool sometimes creates more nodes than necessary. Below, the left shape is as created by the @@ -521,17 +521,17 @@ nodes, while the simplified one has 17 (which means it is much easier to work wi node tool) and is smoother. - - - - + + + + The amount of simplification (called the threshold) depends on the size of the selection. Therefore, if you select a path along with some larger object, it will be simplified more aggressively than if you select that path -alone. Moreover, the Simplify command is +alone. Moreover, the Simplify command is accelerated. This means that if you press Ctrl+L several times in quick succession (so that the calls are within 0.5 sec from each other), the threshold is increased on each call. (If you do another Simplify after a @@ -539,30 +539,30 @@ pause, the threshold is back to its default value.) By making use of the acceler is easy to apply the exact amount of simplification you need for each case. - - + + - Besides smoothing freehand strokes, Simplify can be used for various + Besides smoothing freehand strokes, Simplify can be used for various creative effects. Often, a shape which is rigid and geometric benefits from some amount of simplification that creates cool life-like generalizations of the original form - melting sharp corners and introducing very natural distortions, sometimes stylish and sometimes plain funny. Here's an example of a clipart shape that looks much nicer after -Simplify: +Simplify: - Original - Slight simplification - Aggressive simplification - - - - - Creating text + Original + Slight simplification + Aggressive simplification + + + + + Creating text - - + + @@ -572,8 +572,8 @@ labels and captions, etc. This section is a very basic introduction into Inkscap text capabilities. - - + + @@ -585,8 +585,8 @@ situations, it may be more convenient than editing it right on the canvas (in particular, that tab supports as-you-type spell checking). - - + + @@ -595,8 +595,8 @@ objects -so you can click to select and position the cursor in any existing text object (such as this paragraph). - - + + @@ -610,12 +610,12 @@ a text object is larger than the default, it will likely benefit from squeezing a bit tighter than the default. Here's an example: - Original - Letter spacing decreased - Inspiration - Inspiration - - + Original + Letter spacing decreased + Inspiration + Inspiration + + @@ -627,8 +627,8 @@ any text string and in any font you will probably find pairs of letters that wil benefit from kerning adjustments. - - + + @@ -638,10 +638,10 @@ of the cursor. Here is the same heading again, this time with manual adjustments for visually uniform letter positioning: - Letter spacing decreased, some letter pairs manually kerned - Inspiration - - + Letter spacing decreased, some letter pairs manually kerned + Inspiration + + @@ -650,9 +650,9 @@ for visually uniform letter positioning: Alt+Up or Alt+Down: - Inspiration - - + Inspiration + + @@ -664,8 +664,8 @@ disadvantage to the “text as text†approach is that you need to have the ori installed on any system where you want to open that SVG document. - - + + @@ -677,11 +677,11 @@ As in Selector, pressing Shift with any produces 10 times greater effect than without Shift. - - XML editor + + XML editor - - + + @@ -694,20 +694,20 @@ interactively, and it allows you to do tricks that would be impossible with regu editing tools. - - Conclusion + + Conclusion - - + + This tutorial shows only a small part of all capabilities of Inkscape. We hope you -enjoyed it. Don't be afraid to experiment and share what you create. Please visit www.inkscape.org for more information, latest +enjoyed it. Don't be afraid to experiment and share what you create. Please visit www.inkscape.org for more information, latest versions, and help from user and developer communities. - + @@ -737,8 +737,8 @@ versions, and help from user and developer communities. - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید diff --git a/share/tutorials/tutorial-advanced.hu.svg b/share/tutorials/tutorial-advanced.hu.svg index 94c4ddecc..b922269e6 100644 --- a/share/tutorials/tutorial-advanced.hu.svg +++ b/share/tutorials/tutorial-advanced.hu.svg @@ -36,103 +36,103 @@ - - A Ctrl+le nyíl segít a lapozásban + + A Ctrl+le nyíl segít a lapozásban - + ::HALADÓ -bulia byak, buliabyak@users.sf.net és josh andler, scislac@users.sf.net - - + + + Ebben a részben szóba kerül a másolás és beillesztés, a szabadkézi vonalak és Bézier-görbék rajzolása, az útvonalak kezelése, a logikai műveletek, a peremeltolás, az egyszerűsítés és a szövegfeldolgozás. - - + + - A Ctrl+nyíl billentyű, az egérgörgÅ‘ vagy az egér középsÅ‘ gombja segít a lapozásban. Ha az objektumkészítés alapjairól, a kijelölésrÅ‘l vagy az átalakításról szeretne olvasni, javasoljuk a Segítség > IsmertetÅ‘k menübÅ‘l a Bevezetést. + A Ctrl+nyíl billentyű, az egérgörgÅ‘ vagy az egér középsÅ‘ gombja segít a lapozásban. Ha az objektumkészítés alapjairól, a kijelölésrÅ‘l vagy az átalakításról szeretne olvasni, javasoljuk a Segítség > IsmertetÅ‘k menübÅ‘l a Bevezetést. - - Beillesztési módszerek + + Beillesztési módszerek - - + + - A másolt (Ctrl+C) vagy kivágott (Ctrl+X) objektumokat a szokásos Beillesztés paranccsal (Ctrl+V) az egérkurzor alá illesztheti be, vagy középre, ha a kurzor a rajzterületen kívül van. A vágólapon levÅ‘ objektum emlékszik az eredeti pozíciójára is, ahonnan másolta, és a Beillesztés a megfelelÅ‘ helyre paranccsal (Ctrl+Alt+V) oda is be lehet illeszteni. + A másolt (Ctrl+C) vagy kivágott (Ctrl+X) objektumokat a szokásos Beillesztés paranccsal (Ctrl+V) az egérkurzor alá illesztheti be, vagy középre, ha a kurzor a rajzterületen kívül van. A vágólapon levÅ‘ objektum emlékszik az eredeti pozíciójára is, ahonnan másolta, és a Beillesztés a megfelelÅ‘ helyre paranccsal (Ctrl+Alt+V) oda is be lehet illeszteni. - - + + - Arra is lehetÅ‘sége van, hogy a Stílus beillesztése paranccsal (Shift+Ctrl+V) a vágólapon levÅ‘ (elsÅ‘) objektum stílusát állítsa be az éppen kijelölt objektumra. Az így beillesztett „stílus†magába foglalja a kitöltés-, a körvonal- és a betűbeállításokat, de a formát, a méretet vagy az alakzatfüggÅ‘ beállításokat, mint például egy csillag ágainak a száma, nem. + Arra is lehetÅ‘sége van, hogy a Stílus beillesztése paranccsal (Shift+Ctrl+V) a vágólapon levÅ‘ (elsÅ‘) objektum stílusát állítsa be az éppen kijelölt objektumra. Az így beillesztett „stílus†magába foglalja a kitöltés-, a körvonal- és a betűbeállításokat, de a formát, a méretet vagy az alakzatfüggÅ‘ beállításokat, mint például egy csillag ágainak a száma, nem. - - + + - A Méret beillesztése parancsokkal a kijelölés megfelelÅ‘ méretét a vágólapon levÅ‘ objektumokéhoz igazíthatja. A következÅ‘ lehetÅ‘ségek közül választhat: Méret beillesztése, Szélesség beillesztése, Magasság beillesztése, Méret beillesztése egyenként, Szélesség beillesztése egyenként, Magasság beillesztése egyenként. + A Méret beillesztése parancsokkal a kijelölés megfelelÅ‘ méretét a vágólapon levÅ‘ objektumokéhoz igazíthatja. A következÅ‘ lehetÅ‘ségek közül választhat: Méret beillesztése, Szélesség beillesztése, Magasság beillesztése, Méret beillesztése egyenként, Szélesség beillesztése egyenként, Magasság beillesztése egyenként. - - + + - A Méret beillesztése az egész kijelölés méretét igazítja a vágólapon levÅ‘ objektumok teljes méretéhez. A Szélesség beillesztése vagy Magasság beillesztése az egész kijelölés szélességét vagy magasságát igazítja a vágólapi objektumokéhoz. Ezek a parancsok figyelembe veszik a KijelölÅ‘ eszköz EszközvezérlÅ‘sávjának méretarányt zároló beállítását (a Sz és a M között találja), így ha ez a zárolás be van kapcsolva, akkor a kijelölt objektum a másik dimenzióban is arányosan méretezÅ‘dik; egyébként pedig változatlan marad. Az „egyenként†parancsok a fentiekhez hasonlóan működnek, kivéve hogy minden kijelölt objektum külön-külön igazodik a vágólapon levÅ‘ mérethez vagy szélességhez vagy magassághoz. + A Méret beillesztése az egész kijelölés méretét igazítja a vágólapon levÅ‘ objektumok teljes méretéhez. A Szélesség beillesztése vagy Magasság beillesztése az egész kijelölés szélességét vagy magasságát igazítja a vágólapi objektumokéhoz. Ezek a parancsok figyelembe veszik a KijelölÅ‘ eszköz EszközvezérlÅ‘sávjának méretarányt zároló beállítását (a Sz és a M között találja), így ha ez a zárolás be van kapcsolva, akkor a kijelölt objektum a másik dimenzióban is arányosan méretezÅ‘dik; egyébként pedig változatlan marad. Az „egyenként†parancsok a fentiekhez hasonlóan működnek, kivéve hogy minden kijelölt objektum külön-külön igazodik a vágólapon levÅ‘ mérethez vagy szélességhez vagy magassághoz. - - + + A vágólapot az egész rendszer eléri – objektumokat nem csak különbözÅ‘ Inkscape-példányok között lehet másolni, hanem az Inkscape és más alkalmazások között is (feltéve, hogy a kérdéses alkalmazás képes SVG-t fogadni a vágólapról). - - Szabadkézi és szabályos útvonalak rajzolása + + Szabadkézi és szabályos útvonalak rajzolása - - + + TetszÅ‘leges vonalakat legegyszerűbben a Ceruza (szabadkézi) eszközzel (F6) lehet rajzolni: - - - - - - - - - - - + + + + + + + + + + + Szabályosabb vonalak a Toll (Bézier) eszközzel (Shift+F6) rajzolhatók: - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Egy kijelölt szabadkézi vonal vagy Bézier-görbe két végén kicsi, négyzet alakú horgonyokat láthat. Ezek lehetÅ‘vé teszik a vonal folytatását (valamelyik horgonytól kezdve) vagy lezárását (a két horgony összekötése révén). - - Útvonalak szerkesztése + + Útvonalak szerkesztése - - + + Az alakzateszközök alakzataival szemben a Ceruza és a Toll eszköz útvonalakat hoz létre. Az útvonal egyenes szakaszokból és Bézier-görbékbÅ‘l állhat, és a többi Inkscape-objektumhoz hasonlóan tetszÅ‘leges kitöltése és körvonala lehet. Viszont az alakzatokkal ellentétben az útvonal (nem elÅ‘re meghatározott fogantyúkkal, hanem) a szabadon mozgatható csomópontjaival vagy egy szakaszának közvetlen mozgatásával szerkeszthetÅ‘. Jelölje ki az alábbi útvonalat, majd váltson a Csomópont eszközre (F2): - - - + + + Néhány négyzet alakú csomópontot láthat az útvonalon. Ezek a csomópontok kijelölhetÅ‘k kattintással, Shift+kattintással vagy körberajzolással – akárcsak az objektumok a KijelölÅ‘ eszközzel. Két csomópont a köztük levÅ‘ útvonalra kattintva automatikusan kijelölhetÅ‘. A kijelölt csomópontokat eltérÅ‘ színnel jelzi a program, és ilyenkor megjelennek a hozzájuk tartozó csomópont-vezérlÅ‘elemek is – egy vagy két kör alakú fogantyú, melyeket egyenes vonal köt össze a csomópontjukkal. A ! billentyű megfordítja az aktuális al-útvonalakon (vagyis az olyan al-útvonalakon, melyeken legalább egy csomópont ki van jelölve) levÅ‘ csomópontok kijelöltségét; az Alt+! az egész útvonalon teszi ugyanezt. - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,296 +214,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + A csomópont-vezérlÅ‘elemek teljesen visszahúzhatók a rajtuk való Ctrl+kattintással. Ha két szomszédos csomópont vezérlÅ‘i vissza vannak húzva, akkor a köztük levÅ‘ útvonalszakasz egyenes. A visszahúzott vezérlÅ‘k Shift+húzással mozgathatók el a csomóponttól. - - Al-útvonalak és kombinálás + + Al-útvonalak és kombinálás - - + + Egy útvonalobjektum több al-útvonalból is állhat. Az al-útvonal egymással összekötött csomópontok sorozatát jelenti. (Ezért az egynél több al-útvonalból álló útvonalnak soha sincs minden csomópontja összekötve egymással.) Lent, a bal oldalon egy három al-útvonalból álló útvonal, míg a jobb oldalon három ugyanilyen al-útvonal mint három, egymástól független útvonalobjektum látható: - - - - - - + + + + + + Az összetett útvonal nem ugyanaz, mint a csoport, hanem önálló objektum, csak egészként lehet kijelölni. Ha a fenti, bal oldali objektumot kijelöli, akkor a Csomópont eszközre váltva mindhárom al-útvonal csomópontjai láthatóvá válnak. A jobb oldalon viszont egyidejűleg csak az egyik útvonal szerkeszthetÅ‘. - - + + - LehetÅ‘ség van útvonalak Összevonására (Ctrl+K) és összevont útvonalak Szétbontására (Shift+Ctrl+K) is. Próbálja ki ezeket a parancsokat a fenti példákon. Mivel egy objektumnak csak egyféle kitöltése és körvonala lehet, útvonalak összevonásakor az új objektum az összevonásban szereplÅ‘ elsÅ‘ (a z tengelyen legalsó) objektum stílusát örökli. + LehetÅ‘ség van útvonalak Összevonására (Ctrl+K) és összevont útvonalak Szétbontására (Shift+Ctrl+K) is. Próbálja ki ezeket a parancsokat a fenti példákon. Mivel egy objektumnak csak egyféle kitöltése és körvonala lehet, útvonalak összevonásakor az új objektum az összevonásban szereplÅ‘ elsÅ‘ (a z tengelyen legalsó) objektum stílusát örökli. - - + + Egymást részben fedÅ‘, kitöltéssel bíró útvonalak összevonásakor a fedésben levÅ‘ területeken rendszerint eltűnik a kitöltés: - - - + + + Ez a legegyszerűbb módja lyukas objektumok készítésének. További hasznos, útvonalakkal kapcsolatos parancsokról a késÅ‘bb következÅ‘ „Logikai műveletek†című fejezetben olvashat. - - Útvonallá alakítás + + Útvonallá alakítás - - + + Bármely alakzat vagy szövegobjektum útvonallá alakítható (Shift+Ctrl+C). Ez a művelet nem változtat semmit az objektum megjelenésén, de megszüntet minden, az adott objektumtípushoz tartozó adottságot (vagyis például egy téglalapot ezután nem lehet a sarkainál lekerekíteni, egy szöveget szerkeszteni); viszont a csomópontjaival módosíthatóvá válik. Ãme két csillag – a bal oldalon egy alakzat, a jobb oldalon egy útvonallá alakított objektum. Váltson a Csomópont eszközre, és hasonlítsa össze, hogy a két objektum miként szerkeszthetÅ‘: - - - - + + + + Ráadásul bármely objektum körvonala útvonallá alakítható. Lent az elsÅ‘ objektum az eredeti útvonal (kitöltés nélküli, fekete körvonallal), a második pedig a Körvonal átalakítása útvonallá parancs eredményét mutatja (fekete kitöltéssel, körvonal nélkül): - - - - Logikai műveletek + + + + Logikai műveletek - - + + Az Útvonal menü ezen parancsai lehetÅ‘vé teszik két vagy több objektum kombinálását logikai műveletekkel: - Az eredeti alakzatok - Unió (Ctrl++) - Különbség (Ctrl+-) - Metszet(Ctrl+*) - Kizárás(Ctrl+^) - Felosztás(Ctrl+/) - Útvonal elvágása(Ctrl+Alt+/) - - - - - - - - - - - (alsó mínusz felsÅ‘) - - + Az eredeti alakzatok + Unió (Ctrl++) + Különbség (Ctrl+-) + Metszet(Ctrl+*) + Kizárás(Ctrl+^) + Felosztás(Ctrl+/) + Útvonal elvágása(Ctrl+Alt+/) + + + + + + + + + + + (alsó mínusz felsÅ‘) + + - A parancsok billentyűkombinációi a műveletek számtani megfelelÅ‘ire utalnak (az unió az összeadásnak, a különbség a kivonásnak felel meg stb.). A Különbség és a Kizárás parancs csak két kijelölt objektummal hajtható végre; a többi műveletnél tetszÅ‘leges az objektumok száma. Az eredmény mindig a legalsó objektum stílusát örökli. + A parancsok billentyűkombinációi a műveletek számtani megfelelÅ‘ire utalnak (az unió az összeadásnak, a különbség a kivonásnak felel meg stb.). A Különbség és a Kizárás parancs csak két kijelölt objektummal hajtható végre; a többi műveletnél tetszÅ‘leges az objektumok száma. Az eredmény mindig a legalsó objektum stílusát örökli. - - + + - A Kizárás és az Összevonás látszólag ugyanolyan eredményt ad, de abban különböznek, hogy a Kizárás az eredeti útvonalak metszéspontjainál külön csomópontokat hoz létre. A Felosztás abban különbözik az Útvonal elvágása parancstól, hogy míg az elÅ‘bbi az egész alsó objektumot elvágja a felsÅ‘ körvonalával, addig az utóbbi az alsó objektum körvonalát vágja el, és megszüntet minden kitöltést (így kitöltés nélküli körvonalak feldarabolására alkalmas). + A Kizárás és az Összevonás látszólag ugyanolyan eredményt ad, de abban különböznek, hogy a Kizárás az eredeti útvonalak metszéspontjainál külön csomópontokat hoz létre. A Felosztás abban különbözik az Útvonal elvágása parancstól, hogy míg az elÅ‘bbi az egész alsó objektumot elvágja a felsÅ‘ körvonalával, addig az utóbbi az alsó objektum körvonalát vágja el, és megszüntet minden kitöltést (így kitöltés nélküli körvonalak feldarabolására alkalmas). - - Zsugorítás és nyújtás + + Zsugorítás és nyújtás - - + + - Az Inkscape-ben nemcsak átméretezéssel lehet zsugorítani és nyújtani, hanem egy objektum útvonalának peremeltolásával is, azaz elmozdítva merÅ‘legesen az útvonal minden pontjában. A megfelelÅ‘ parancsok a Zsugorítás (Ctrl+() és a Nyújtás (Ctrl+)). Az alábbi rajzon az eredeti útvonal (piros) mellett néhány, abból zsugorítással vagy nyújtással kapott útvonal látható. + Az Inkscape-ben nemcsak átméretezéssel lehet zsugorítani és nyújtani, hanem egy objektum útvonalának peremeltolásával is, azaz elmozdítva merÅ‘legesen az útvonal minden pontjában. A megfelelÅ‘ parancsok a Zsugorítás (Ctrl+() és a Nyújtás (Ctrl+)). Az alábbi rajzon az eredeti útvonal (piros) mellett néhány, abból zsugorítással vagy nyújtással kapott útvonal látható. - - - - - - - - - + + + + + + + + + - A Zsugorítás és a Nyújtás parancs útvonalat eredményez (vagyis az eredeti objektumot útvonallá alakítja, ha az nem az volna). Sokszor megfelelÅ‘bb lehet a Dinamikus perem (Ctrl+J), mely egy mozgatható (az alakzatokéhoz hasonló) fogantyúval rendelkezÅ‘ objektumot hoz létre, s ezzel a fogantyúval szabályozható a peremeltolás mértéke. Hogy jobban érthetÅ‘ legyen, jelölje ki az alábbi objektumot, majd a Csomópont eszközzel próbálja mozgatni a fogantyút: + A Zsugorítás és a Nyújtás parancs útvonalat eredményez (vagyis az eredeti objektumot útvonallá alakítja, ha az nem az volna). Sokszor megfelelÅ‘bb lehet a Dinamikus perem (Ctrl+J), mely egy mozgatható (az alakzatokéhoz hasonló) fogantyúval rendelkezÅ‘ objektumot hoz létre, s ezzel a fogantyúval szabályozható a peremeltolás mértéke. Hogy jobban érthetÅ‘ legyen, jelölje ki az alábbi objektumot, majd a Csomópont eszközzel próbálja mozgatni a fogantyút: - - - + + + Egy ilyen peremobjektum mindig emlékszik az eredeti útvonalra, így az nem fog „romlaniâ€, miközben Ön újra és újra változtatja a peremeltolás mértékét. Ha már nincs szükség további módosításra, a peremobjektum bármikor útvonallá alakítható. - - + + Még kényelmesebben használható a kapcsolt perem. Ez a dinamikus változathoz hasonló, de egy másik útvonalhoz van kapcsolva, mely eközben szerkeszthetÅ‘ marad. Egy útvonalhoz tetszÅ‘leges számú kapcsolt perem tartozhat. Az alábbi rajzon a piros az eredeti útvonal, melyhez egy fekete körvonalas, kitöltés nélküli és egy fekete kitöltéses, körvonal nélküli peremobjektum van kapcsolva. - - + + - Jelölje ki a piros objektumot, és módosítsa a csomópontjait; figyelje a hatást a két kapcsolt peremen. Aztán jelölje ki valamelyik peremet, és a fogantyújával változtassa az eltérés mértékét. Végül figyelje meg, hogy az eredeti objektum mozgatása vagy átalakítása hogyan mozgatja a kapcsolt objektumokat, és hogyan tudja szabadon mozgatni vagy átalakítani a kapcsolt objektumokat anélkül, hogy elveszítenék kapcsolatukat az eredetivel. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Egyszerűsítés + + Egyszerűsítés - - + + - Az Egyszerűsítés (Ctrl+L) parancs oly módon csökkenti az útvonalakon levÅ‘ csomópontok számát, hogy mindeközben az útvonal alakja majdnem változatlan marad. Hasznos például a Ceruza eszközzel rajzolt útvonalakhoz, mivel ez az eszköz hajlamos a szükségesnél több csomópontot létrehozni. Az alábbi rajzok közül a bal oldali egy szabadkézi útvonal, a jobb oldali ennek egy másolata, amelyet egyszerűsítettünk. Az eredeti útvonalon 28 csomópont van, az egyszerűsítetten 17 (ami sokkal könnyebbé teszi a további szerkesztését a Csomópont eszközzel), és láthatóan egyenletesebb is. + Az Egyszerűsítés (Ctrl+L) parancs oly módon csökkenti az útvonalakon levÅ‘ csomópontok számát, hogy mindeközben az útvonal alakja majdnem változatlan marad. Hasznos például a Ceruza eszközzel rajzolt útvonalakhoz, mivel ez az eszköz hajlamos a szükségesnél több csomópontot létrehozni. Az alábbi rajzok közül a bal oldali egy szabadkézi útvonal, a jobb oldali ennek egy másolata, amelyet egyszerűsítettünk. Az eredeti útvonalon 28 csomópont van, az egyszerűsítetten 17 (ami sokkal könnyebbé teszi a további szerkesztését a Csomópont eszközzel), és láthatóan egyenletesebb is. - - - - + + + + - Az egyszerűsítés mértéke (amit küszöbnek hívunk) függ a kijelölés méretétÅ‘l. Ãgy ha az útvonal mellett a kijelölés néhány nagyobb objektumot is tartalmaz, az egyszerűsítés erÅ‘teljesebb lesz, mint ha csak az útvonal lenne kijelölve. Ezenfelül az Egyszerűsítés parancs gyorsuló, ami annyit tesz, hogy ha gyors egymásutánban nyomja le néhányszor a Ctrl+L billentyűket (a lenyomások fél másodpercen belül követik egymást), a küszöb minden lenyomásra növekszik. (Egy szünet után következÅ‘ újabb Egyszerűsítés parancs már újra az alapértelmezett küszöbértékre áll vissza.) A megfelelÅ‘ mértékű egyszerűsítés mindig könnyedén elérhetÅ‘ a gyorsulás által. + Az egyszerűsítés mértéke (amit küszöbnek hívunk) függ a kijelölés méretétÅ‘l. Ãgy ha az útvonal mellett a kijelölés néhány nagyobb objektumot is tartalmaz, az egyszerűsítés erÅ‘teljesebb lesz, mint ha csak az útvonal lenne kijelölve. Ezenfelül az Egyszerűsítés parancs gyorsuló, ami annyit tesz, hogy ha gyors egymásutánban nyomja le néhányszor a Ctrl+L billentyűket (a lenyomások fél másodpercen belül követik egymást), a küszöb minden lenyomásra növekszik. (Egy szünet után következÅ‘ újabb Egyszerűsítés parancs már újra az alapértelmezett küszöbértékre áll vissza.) A megfelelÅ‘ mértékű egyszerűsítés mindig könnyedén elérhetÅ‘ a gyorsulás által. - - + + - A szabadkézi rajzok simítása mellett kreatív hatások elérésére is alkalmas az Egyszerűsítés. Egy rideg, geometrikus forma gyakran lazábbá, életszerűbbé tehetÅ‘ egyszerűsítéssel – az éles kiugrások lágyítása és a természetes torzítások néha elegáns, néha egyszerűen csak különös hatást keltenek. Példaként álljon itt egy clipart, amely sokkal tetszetÅ‘sebb Egyszerűsítés után: + A szabadkézi rajzok simítása mellett kreatív hatások elérésére is alkalmas az Egyszerűsítés. Egy rideg, geometrikus forma gyakran lazábbá, életszerűbbé tehetÅ‘ egyszerűsítéssel – az éles kiugrások lágyítása és a természetes torzítások néha elegáns, néha egyszerűen csak különös hatást keltenek. Példaként álljon itt egy clipart, amely sokkal tetszetÅ‘sebb Egyszerűsítés után: - Eredeti - Csekély egyszerűsítés - ErÅ‘teljes egyszerűsítés - - - - - Szövegek kezelése + Eredeti + Csekély egyszerűsítés + ErÅ‘teljes egyszerűsítés + + + + + Szövegek kezelése - - + + Az Inkscape alkalmas hosszabb, összetett szövegek készítésére, mindamellett kisebb szövegobjektumokhoz – mint például a címfeliratok, logók, diagramfeliratok, képaláírások stb. – szintén nagyon jól használható. Ez a rész bemutatja az Inkscape szövegkezelÅ‘ képességeinek az alapjait. - - + + Egy szövegobjektum létrehozása mindössze abból áll, hogy kiválasztja a Szöveg eszközt (F8), valahol a dokumentumba kattint, majd begépeli a szöveget. A betűcsalád, ‑stílus, ‑méret és az igazítás beállítása a Szöveg és betűtípus párbeszédablakban (Shift+Ctrl+T) végezhetÅ‘ el. Egy szövegbeviteli mezÅ‘t tartalmazó lap is van ebben az ablakban, ahol a szövegobjektumot szerkeszteni lehet – bizonyos esetekben ez alkalmasabb a kijelölt szövegobjektum módosítására, mint a rajzvászon (fÅ‘leg azért, mert ez a lap biztosítja a gépelés közbeni helyesírás-ellenÅ‘rzést). - - + + A Szöveg eszközzel a többi eszközhöz hasonlóan ki lehet jelölni a neki megfelelÅ‘ objektumtípust – jelen esetben a szöveg típusút –, így egy már létezÅ‘ szövegre kattintva az kijelölhetÅ‘, és a szövegkurzor elhelyezhetÅ‘ benne (akár ebben bekezdésben is). - - + + Az egyik leggyakoribb szövegszerkesztÅ‘ művelet a betűk és a sorok közének igazítása. Mint általában, az Inkscape ezekhez a műveletekhez is kínál billentyűkombinációkat. Szöveg szerkesztése közben az Alt+< és az Alt+> az aktuális sorban úgy változtatja a betűközt, hogy a sor teljes hossza 1 pixellel változzon az aktuális nagyítás mellett (mint a KijelölÅ‘ eszköz esetében, ahol ugyanezek a billentyűk a pixelméretű átméretezésre használatosak). Ãltalában az alapértelmezettnél nagyobb betűméret az alapértelmezettnél kicsit nagyobb összehúzást enged meg. Ãme egy példa: - Eredeti - Csökkentett betűközök - Inspiration - Inspiration - - + Eredeti + Csökkentett betűközök + Inspiration + Inspiration + + A szorosabbá tett változat egy kicsivel jobban mutat, de így sem tökéletes: a betűk közti távolság nem egyenletes, például az „a†és a „t†között túl nagy, a „t†és az „i†között túl kicsi a távolság. Az ilyen alávágási hiba (különösen nagyobb betűméretnél feltűnÅ‘) mértéke a rosszabb minÅ‘ségű betűkészleteknél számottevÅ‘bb; de a legtöbb szövegnél bármely betűkészlet esetében találhat olyan betűpárokat, ahol javít az eredményen a kézi alávágás. - - + + Az Inkscape-ben ezeket a kézi alávágásokat igazán könnyű megvalósítani. Csak vigye a szövegkurzort azon két betű közé, ahol a betűközt igazítani szeretné, majd az Alt+nyíl billentyűkkel mozgathatja a kurzortól jobbra levÅ‘ betűket. Itt látható az elÅ‘zÅ‘ címfelirat, ezúttal azonban kézi alávágást alkalmaztunk, hogy a betűközök egyformának tűnjenek: - Csökkentett betűközök, néhány betű esetében kézi alávágással - Inspiration - - + Csökkentett betűközök, néhány betű esetében kézi alávágással + Inspiration + + Azontúl, hogy az Alt+Jobbra és az Alt+Balra vízszintesen igazít, az Alt+Fel és az Alt+Le billentyűkkel függÅ‘leges irányba is mozgathatók a betűk: - Inspiration - - + Inspiration + + Természetesen a szöveg is útvonallá alakítható (Shift+Ctrl+C), és így a betűket úgy mozgathatja, ahogy az útvonalakat szokás. Mindamellett sokkal jobb a szöveget szövegobjektumnak megtartani – így megmarad szerkeszthetÅ‘nek, kipróbálhat rá többféle betűkészletet a kézi alávágások eltávolítása nélkül, és mentéskor kevesebb helyet is igényel. Egyetlen hátránya a „szöveg mint szöveg†megközelítésnek, hogy az eredeti betűkészletnek minden olyan rendszeren rendelkezésre kell állnia, ahol az SVG-dokumentumot meg szeretné nyitni. - - + + A betűközök igazításához hasonlóan a sorok közötti távolság is változtatható egy többsoros szövegobjektumban. A sorköz csökkentésére vagy növelésére próbálja ki a Ctrl+Alt+< vagy a Ctrl+Alt+> billentyűket ezen dokumentum bármely bekezdésén. Ezekkel a parancsokkal a bekezdés teljes magassága az aktuális nagyítás szerinti 1 pixelenként igazítható. Akárcsak a KijelölÅ‘ eszköz esetében, a Shift nyomva tartása mellett bármely betű- vagy sorközigazító billentyűparancs tízszeres hatással működik. - - Az XML-szerkesztÅ‘ + + Az XML-szerkesztÅ‘ - - + + A végsÅ‘kig használható ki az Inkscape minden tudása az XML-szerkesztÅ‘vel (Shift+Ctrl+X), melyben a dokumentum teljes XML-szerkezete láthatóvá válik, mindig az aktuális állapotot tükrözve. Egy rajz szerkesztése közben megfigyelhetÅ‘, ahogy az XML-szerkezet ezzel összhangban változik. SÅ‘t, az XML-szerkesztÅ‘ben is módosíthatja bármelyik szöveget, elemet vagy tulajdonságot, és rögtön láthatja a vásznon az eredményt. Ez az elképzelhetÅ‘ legjobb útja az SVG interaktív megismerésének, és arra is lehetÅ‘séget ad, hogy olyan módosításokat végezzen a rajzon, amilyenekre a szokásos szerkesztÅ‘eszközök nem képesek. - - Zárszó + + Zárszó - - + + - Ez az ismertetÅ‘ csak egy kis részét mutatta be az Inkscape képességeinek. Reméljük, hogy hasznosnak találta. Ne féljen kísérletezni, és megosztani az alkotásait másokkal. Látogasson el a www.inkscape.org címre, ahol további információkat és a program legutóbbi verzióját is megtalálja, továbbá segítséget kaphat a felhasználói és a fejlesztÅ‘i közösségtÅ‘l. + Ez az ismertetÅ‘ csak egy kis részét mutatta be az Inkscape képességeinek. Reméljük, hogy hasznosnak találta. Ne féljen kísérletezni, és megosztani az alkotásait másokkal. Látogasson el a www.inkscape.org címre, ahol további információkat és a program legutóbbi verzióját is megtalálja, továbbá segítséget kaphat a felhasználói és a fejlesztÅ‘i közösségtÅ‘l. - + @@ -533,8 +538,8 @@ rotated/scaled to match. - - A Ctrl+fel nyíl segít a lapozásban + + A Ctrl+fel nyíl segít a lapozásban diff --git a/share/tutorials/tutorial-advanced.id.svg b/share/tutorials/tutorial-advanced.id.svg index d9570fe6f..39e913bcc 100644 --- a/share/tutorials/tutorial-advanced.id.svg +++ b/share/tutorials/tutorial-advanced.id.svg @@ -36,103 +36,103 @@ - - Gunakan Ctrl+panah bawah untuk menggulung + + Gunakan Ctrl+panah bawah untuk menggulung - + ::ADVANCED -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + + Tutorial ini membahas copy/paste, mengedit node, menggambar dengan freehand dan bezier, manipulasi path (jalur), offset, simplification, dan text tool. - - + + - Gunakan Ctrl+arrows. roda tetikus, atau seret dengan tombol tengah untuk menggulung halaman kebawah. Untuk dasar pemmbuatan obyek, seleksi, dan transformmasi, bacalah tutorial Dasar melalui Help > Tutorials. + Gunakan Ctrl+arrows. roda tetikus, atau seret dengan tombol tengah untuk menggulung halaman kebawah. Untuk dasar pemmbuatan obyek, seleksi, dan transformmasi, bacalah tutorial Dasar melalui Help > Tutorials. - - Tehnik menempel + + Tehnik menempel - - + + - Setelah anda menyalin sebuah obyek atau lebih dengan Ctrl+C atau memotongnya dengan Ctrl+X, perintah Paste (Ctrl+V) akan menempel obyek yang disalin atau lebih tersebut tepat dibawah kursor tetikus, atau, jika kursor berada diluar jendela aplikasi, akan ditempel di tengah jendela aplikasi. Walau begitu, obyek yang berada didalam clipboard (masih diingat oleh aplikasi lewat memorinya) masih mengingat posisi asalnya dimana mereka disalin, dan anda bisa menempel balik pada posisi tersebut dengan perintah Paste in Place (Ctrl+Alt+V). + Setelah anda menyalin sebuah obyek atau lebih dengan Ctrl+C atau memotongnya dengan Ctrl+X, perintah Paste (Ctrl+V) akan menempel obyek yang disalin atau lebih tersebut tepat dibawah kursor tetikus, atau, jika kursor berada diluar jendela aplikasi, akan ditempel di tengah jendela aplikasi. Walau begitu, obyek yang berada didalam clipboard (masih diingat oleh aplikasi lewat memorinya) masih mengingat posisi asalnya dimana mereka disalin, dan anda bisa menempel balik pada posisi tersebut dengan perintah Paste in Place (Ctrl+Alt+V). - - + + - Perintah lain, Paste Style (Shift+Ctrl+V), akan menmpel hanya style dari obyek (pertama) pada clipboard ke apapun yang anda pilih. â€Style†tersebut meliputi fill (isi), stroke (garis pinggir) dan font, tapi tidak dengan bentuk, ukuran, atau parameter yang spesifik terhadap tipe shape, misalnya jumlah jari sebuah bintang. + Perintah lain, Paste Style (Shift+Ctrl+V), akan menmpel hanya style dari obyek (pertama) pada clipboard ke apapun yang anda pilih. â€Style†tersebut meliputi fill (isi), stroke (garis pinggir) dan font, tapi tidak dengan bentuk, ukuran, atau parameter yang spesifik terhadap tipe shape, misalnya jumlah jari sebuah bintang. - - + + - Perintah lain lagi, Paste Size, akan menskala seleksi untuk menyesuaikan dengan atribut ukuran dari obyek pada clipboard. Terdapat banyak jumlah perintah untuk menempel ukuran misalnya: Paste Size, Paste Width, Paste Height, Paste Size Separately, Paste Width Separately, dan Paste Height Separately. + Perintah lain lagi, Paste Size, akan menskala seleksi untuk menyesuaikan dengan atribut ukuran dari obyek pada clipboard. Terdapat banyak jumlah perintah untuk menempel ukuran misalnya: Paste Size, Paste Width, Paste Height, Paste Size Separately, Paste Width Separately, dan Paste Height Separately. - - + + - Paste Size menskala ulang seluruh seleksi untuk menyesuaikan dengan ukuran rata-rata dari obyek pada clipboard. Paste Width/Paste Height menskala seluruk seleksi secara horisontal/vertikal sehingga akan sesuai dengan lebar/tinggi dari obyek pada clipboard. Perintah-perintah ini tunduk pada rasio skala pada control bar Selector Tool (diantara daerah W dan H), sehingga saat rasio skala tersebut dikunci, dimensi lain dari obyek yang terseleksi akan diskala pada proporsi yang sama; jika tidak, dimensi lain tersebut tidak berubah. Perintah tersebut memiliki kerja yang terpisah tetapi mirip seperti perintah yang dijelaskan diatas, kecuali mereka menskala obyek terpilih secara terpisah untuk membuatnya sesuai dengan ukuran/lebar/tinggi dari obyek pada clipboard. + Paste Size menskala ulang seluruh seleksi untuk menyesuaikan dengan ukuran rata-rata dari obyek pada clipboard. Paste Width/Paste Height menskala seluruk seleksi secara horisontal/vertikal sehingga akan sesuai dengan lebar/tinggi dari obyek pada clipboard. Perintah-perintah ini tunduk pada rasio skala pada control bar Selector Tool (diantara daerah W dan H), sehingga saat rasio skala tersebut dikunci, dimensi lain dari obyek yang terseleksi akan diskala pada proporsi yang sama; jika tidak, dimensi lain tersebut tidak berubah. Perintah tersebut memiliki kerja yang terpisah tetapi mirip seperti perintah yang dijelaskan diatas, kecuali mereka menskala obyek terpilih secara terpisah untuk membuatnya sesuai dengan ukuran/lebar/tinggi dari obyek pada clipboard. - - + + Clipboard adalah system-wide - anda bisa menyalin/menempel obyek antar instansi Inkscape yang berbeda, termasuk antara Inkscape dengan aplikasi lainnya (yang tentu saja harus bisa menggunakan SVG pada clipboard). - - Menggambar freehand dan regular path + + Menggambar freehand dan regular path - - + + Cara paling mudah untuk menciptakan bentuk arbitrary adalah menggambarnya menggunakan Pencil (freehand) tool (F6): - - - - - - - - - - - + + + + + + + + + + + Jika anda ingin bentuk lebih regular, gunakan Pen (Bezier) tool (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Baik pada tool freehand maupun bezier, path (jalur) yang diseleksi akan menampilkan anchor (jangkar) berupa persegi kecil di tiap akhirnya. Anchor ini membuat anda bisa melanjutkan jalur tersebut (dengan menggambar dari salah satu anchor) atau menutupnya (dengan menggambar dari satu anchor ke yang lain) ketimbang membuat yang baru. - - Mengedit path (jalur) + + Mengedit path (jalur) - - + + Tidak seperti sebuah shape (bentuk) yang diciptakan dengan shape tool, Pen dan Pencil akan menciptakan path. Sebuah path (jalur) adalah sekuen dari beberapa garis lurus dan/atau lengkungan Bezier yang, seperti obyek Inkscape lainnya, bisa memliki opsi fill (isi) dan stroke (garis pinggir). Tetapi tidak seperti sebuah shape, sebuah path bisa diedit dengan menyeret bebas node mana saja (bukan hanya handlenya) atau dengan menyeret langsung sebuah segmen dari path. Pilih path ini dan berpindahlah ke Node tool (F2) - - - + + + Anda akan melihat beberapa node persegi abu-abu pada path tersebut. Node-node ini bisa dipilih dengan klik, Shift+klik, atau dengan menyeret rubberband - sama seperti obyek yang dipilih dengan Selector tool. Anda juga bisa mengklik sebuah segmen path untuk otomatis memilih node tersebut. Node yang dipilih akan tersorot dan menampilkan node handlenya - satu atau dua lingkaran kecil yang bersambung dengan masing-masing node melalui garis lurus. Tombol ! membali node yang dipilih pada subpath (subpath dengan paling sedikit satu node yang terseleksi); Alt+! membalik keseluruhan path. - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,299 +214,304 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Anda juga bisa melepas (retract) handle sebuah node bersamaan dengan Ctrl+klik. Juka dua node adjacent dilepas handlenya, segmen path diantara mereka menjadi sebuah garis lurus. Untuk menarik keluar node tersebut, gunakan Shift+seret keluar dari node. - - Subpaths dan menggabung + + Subpaths dan menggabung - - + + Sebuah obyek path bisa saja memiliki lebih dari satu subpath. Sebuah subpath adalah runtutan beberapa node yang saling tersambung. (Sehingga, jika sebuah path memiliki lebih dari satu subpath, tidak semua nodenya tersambung.) Kiri bawah, tiga subpath milik sebuah path compound; tiga subpath yang sama di sebelah kanan adalah obyek path independen. - - - - - - + + + + + + Ingatlah bahwa sebuah path compound tidaklah sama seperti grup. Ia hanyalah obyek tersendiri yang hanya bisa diseleksi sebagai keseluruhan. Jika anda memilih obyek kiri dan berpindah ke node tool, anda akan melihat node ditampilkan pada tiga subpath. Untuk yang kiri, anda hanya bisa mengedit satu path dalam satu waktu. - - + + - Inkscape bisa menggabung (Combine path menjadi path compound (Ctrl+K) dan memisahkan (Break Apart) sebuah path compound menjadi path terpisah (Shift+Ctrl+K). Cobalah perintah-perintah tersebut pada contoh ini. Dikarenakan sebuah obyek hanya bisa memiliki satu fill dan satu stroke, sebuah path compound akan mengikuti gaya dari obyek pertama yang digabung (yang terbawah di z-order). + Inkscape bisa menggabung (Combine path menjadi path compound (Ctrl+K) dan memisahkan (Break Apart) sebuah path compound menjadi path terpisah (Shift+Ctrl+K). Cobalah perintah-perintah tersebut pada contoh ini. Dikarenakan sebuah obyek hanya bisa memiliki satu fill dan satu stroke, sebuah path compound akan mengikuti gaya dari obyek pertama yang digabung (yang terbawah di z-order). - - + + Saat anda menggabung path yang overlap dengan fill, terkadang fillnya akan hilang di area dimana terjadi overlap: - - - + + + Ini adalah cara paling mudah untuk membuat sebuah obyek yang berlubang. Untuk perintah yang lebih mantap, lihatlah “Operasi Boolean†dibawah. - - Mengkonversi ke path + + Mengkonversi ke path - - + + Sebuah bentuk atau obyek teks bisa dikonversi ke path (converted to path) dengan Shift+Ctrl+C. Operasi ini tidak mengubah tampilah dari obyek tetapi menghilangkan semua kemampuan spesifik dari tipe tersebut (mis. anda tidak bisa melengkungkan sudut dari sebuah persegi atau mengedit teks tersebut lagi); tetapi, sekarang anda bisa mengedit nodenya. Berikut dua bintang (stars) - yang sebelah kiri tetap sebagai shape, dan yang kanan sudah dikonversi ke path. Berpindahlah ke node tool dan bandingkan apa yang bisa diedit. - - - - + + + + Terlebih, anda bisa mengkonversi stroke sebuah obyek menjadi path. Dibawah, obyek pertama adalah path asal (tanpa fill, stroke hitam), dan yang kedua adalah hasil dari perintah Stroke to Path (fill hitam, tanpa stroke): - - - - Operasi Boolean + + + + Operasi Boolean - - + + Perintah di Path menu membuat anda bisa menggabung dua atau lebih obyek menggunakan operasi bolean (boolean operations): - Bentuk asal - Penyatuan (Ctrl++) - Beda (Ctrl+-) - Perpotongan(Ctrl+*) - Eksklusi(Ctrl+^) - Pembagian(Ctrl+/) - Jalur potong(Ctrl+Alt+/) - - - - - - - - - - - (bawah tanpa atas) - - + Bentuk asal + Penyatuan (Ctrl++) + Beda (Ctrl+-) + Perpotongan(Ctrl+*) + Eksklusi(Ctrl+^) + Pembagian(Ctrl+/) + Jalur potong(Ctrl+Alt+/) + + + + + + + + + + + (bawah tanpa atas) + + - Shortcut keyboard untuk perintah tersebut berdasarkan analogi dari perintah boolean (penyatuan adalah penambahan, perbedaan adalah subtraksi, dst.). Perintah Difference dan Exclusion hanya bisa digunakan pada dua obyek terpilih; lainnya bisa digunakan pada berapapun. Hasilnya selalu mendapatkan gaya dari obyek terbawah. + Shortcut keyboard untuk perintah tersebut berdasarkan analogi dari perintah boolean (penyatuan adalah penambahan, perbedaan adalah subtraksi, dst.). Perintah Difference dan Exclusion hanya bisa digunakan pada dua obyek terpilih; lainnya bisa digunakan pada berapapun. Hasilnya selalu mendapatkan gaya dari obyek terbawah. - - + + - Hasil dari perintah Exclusion mirip dengan Combine, tetapi perbedaanya adalah perintah Exclusion menambahkan node extra dimana path originalnya berpotongan. Perbedaan Division dan Cuth Path adalah yang pertama memotong seluruh obyek bawah berdasarkan path dari obyek diatas, sedangkan yang satunya hanya memotong stroke dan menghilangkan seluruh fill obyek paling bawah. + Hasil dari perintah Exclusion mirip dengan Combine, tetapi perbedaanya adalah perintah Exclusion menambahkan node extra dimana path originalnya berpotongan. Perbedaan Division dan Cuth Path adalah yang pertama memotong seluruh obyek bawah berdasarkan path dari obyek diatas, sedangkan yang satunya hanya memotong stroke dan menghilangkan seluruh fill obyek paling bawah. - - Inset dan outset + + Inset dan outset - - + + - Inkscape bisa mengembangkan dan mengatur shape tidak hanya dengan menskala tapi juga dengan offsetting pada obyek path, misalnya dengan mengganti garis lurus sejalur sudunya ke path di setiap titik. Perintah tersebut dinamakan Inset (Ctrl+() dan Outset (Ctrl+)). Berikut ditampilkan path asalnya (merah) dan beberapa path inset dan outset dari path asal tersebut: + Inkscape bisa mengembangkan dan mengatur shape tidak hanya dengan menskala tapi juga dengan offsetting pada obyek path, misalnya dengan mengganti garis lurus sejalur sudunya ke path di setiap titik. Perintah tersebut dinamakan Inset (Ctrl+() dan Outset (Ctrl+)). Berikut ditampilkan path asalnya (merah) dan beberapa path inset dan outset dari path asal tersebut: - - - - - - - - - + + + + + + + + + - Perintah Inset dan Outset standar akan menghasilkan path (mengkonversi obyek asal menjadi path jika itu belum menjadi path). Yang lebih sering dibutuhkan adalah Dynamic Offset (Ctrl+J) yang menciptakan obyek yang handlenya bisa diseret (mirip seperti handle shape) yang mengatur jarak offset. Pilihlah obyek dibawah, berpindahlah ke node tool, dan seret handlenya untuk memahami cara kerjanya: + Perintah Inset dan Outset standar akan menghasilkan path (mengkonversi obyek asal menjadi path jika itu belum menjadi path). Yang lebih sering dibutuhkan adalah Dynamic Offset (Ctrl+J) yang menciptakan obyek yang handlenya bisa diseret (mirip seperti handle shape) yang mengatur jarak offset. Pilihlah obyek dibawah, berpindahlah ke node tool, dan seret handlenya untuk memahami cara kerjanya: - - - + + + Sebuah obyek dengan dynamic offset mengingat path asalnya, sehingga ia tidak akan â€turun derajat†saat anda mengubah-ubah jarak offsetnya. Saat anda tidak lagi membutuhkan untuk mengaturnya, anda bisa langsung mengkonversinya kembali ke path. - - + + Satu lagi, linked offset, yang mirip dengan dynamic tapi ia tersambung ke path lain yang tetap bisa diedit. Anda bisa memiliki berapapun linked offset untuk sebuah source path. Dibawah, source path berwarna merah, satu di-offset link sehingga memiliki stroke hitam tanpa fill, satunya memiliki fill hitam tanpa stroke. - - + + - Pilih obyek merah dan editlah nodenya; perhatikan bagaimana setiap linked offset merespon. Sekarang, pilihlah offset mana saja kemudian seret handlenya untuk mengatur radius offset. Akhirnya, perhatikan bagaimana memindahkan atau mentransformasi source path akan meminahkan dan mentransformasi pula obyek yang tersambung dengannya. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Simplification (Penyederhanaan) + + Simplification (Penyederhanaan) - - + + - Kegunaan utama dari perintah Simplify (Ctrl+L) adalah mengurangi jumlah onde dalam sebuah path sambil hampir tetap tidak merubah shape (bentuk). Ini akan berguna untuk path yang dihasilkan dengan Pencil tool, dikarenakan tool tersebut menghasilkan node lebih banyak dari yang dibutuhkan. Dibawah, shape kiri dihasilkan dengan freehand tool, dan yang kanan yang sudah disederhanakan. + Kegunaan utama dari perintah Simplify (Ctrl+L) adalah mengurangi jumlah onde dalam sebuah path sambil hampir tetap tidak merubah shape (bentuk). Ini akan berguna untuk path yang dihasilkan dengan Pencil tool, dikarenakan tool tersebut menghasilkan node lebih banyak dari yang dibutuhkan. Dibawah, shape kiri dihasilkan dengan freehand tool, dan yang kanan yang sudah disederhanakan. - - - - + + + + - Jumlah simplification (penyederhanaan) atau dikenal juga dengan threshold bergantung dari ukuruan dari seleksi. Dengan demikian, jika anda memilih sebuah path dengan sebuah obyek yang lebih besar, penyederhanaannya akan lebih agresif. Terlebih, perintah Simplify bisa diakselerasi. Artinya, jika anda menekan Ctrl+L beberapa kali dalam jeda yang singkat, threshold akan bertambah. (Jika anda melakukan penyederhanaan setelah sedikit jeda, thresholdnya akan kembali ke nilai asal.) Dengan menggunakan fitur akselerasi ini, anda akan mudah mengaplikasikan nilai penyederhanaan yang tepat untuk tiap kasus. + Jumlah simplification (penyederhanaan) atau dikenal juga dengan threshold bergantung dari ukuruan dari seleksi. Dengan demikian, jika anda memilih sebuah path dengan sebuah obyek yang lebih besar, penyederhanaannya akan lebih agresif. Terlebih, perintah Simplify bisa diakselerasi. Artinya, jika anda menekan Ctrl+L beberapa kali dalam jeda yang singkat, threshold akan bertambah. (Jika anda melakukan penyederhanaan setelah sedikit jeda, thresholdnya akan kembali ke nilai asal.) Dengan menggunakan fitur akselerasi ini, anda akan mudah mengaplikasikan nilai penyederhanaan yang tepat untuk tiap kasus. - - + + - Disamping menghaluskan stroke freehand, Simplify bisa digunakan untuk banyak efek kreatif. Sering, sebuah shape yang kaku dan geometrik butuh sedikit penyederhanaan yang membuatnya kelihatan keren dan hidup ketimbang bentuk aslinya - menghaluskan sudut dan menampilkan distorsi natural, kadang gaya kadang lucu. Berikut contoh dari shape clipart yang terlihat lebih indah setelah menggunakan Simplify: + Disamping menghaluskan stroke freehand, Simplify bisa digunakan untuk banyak efek kreatif. Sering, sebuah shape yang kaku dan geometrik butuh sedikit penyederhanaan yang membuatnya kelihatan keren dan hidup ketimbang bentuk aslinya - menghaluskan sudut dan menampilkan distorsi natural, kadang gaya kadang lucu. Berikut contoh dari shape clipart yang terlihat lebih indah setelah menggunakan Simplify: - Asal - Penyederhanaan ringan - Penyederhanaan agresif - - - - - Mebuat teks + Asal + Penyederhanaan ringan + Penyederhanaan agresif + + + + + Mebuat teks - - + + Inkscape mampu menghasilkan teks yang panjang dan kompleks. Juga untuk obyek tulisan kecil seperti heading, banner, logo, label diagram dan caption, dsbg. Bagian ini akan membahas pengenalan dasar dari kemampuan tersebut. - - + + Menghasilkan sebuah obyek teks sangat mudah. Berpindahlah ke Text tool (F8), klik dimana saja pada dokumen, dan ketik teksnya. Untuk merubah font, gaya, besar, dan perataan, bukalah dialog Text and Font (Shift+Ctrl+T). Dialog tersebut juga memiliki daerah masukan teks dimana anda bisa mengedit obyek teks yang diseleksi - pada beberapa kasus, lebih mudah ketimbang mengedit langsung di kanvas (tambahan, disana juga terdapat pengecek ejaan saat anda menulis). - - + + Seperti tool yang lain, Text tool bisa menyeleksi langsung tipe obyeknya - obyek teks -sehingga anda bisa langsung mengklik obyek teks apapun yang tampil (misalnya paragraf ini). - - + + Salah satu operasi yang umum untuk desain teks adalah mengatur jarak antar kata dan baris. Tentu saja Inkscape memiliki shortcut keyboard untuk ini. Saat anda mengedit teks, tombol Alt+< dan Alt+> merubah letter spacing di baris dari sebuah obyek teks, sehingga panjang total dari baris tersebut berubah 1 piksel dari tingkat zum saat itu (bandingkan dengan Selector tool dimana tombol yang sama merubah ukuran obyek). Aturannya, jika ukuran font dalam obyek teks lebih besar dari bawaannya, ia akan diuntungkan dengan meremas kata lebih sempit. Berikut contohnya: - Asal - Jarak dikurangi - Inspirasi - Inspirasi - - + Asal + Jarak dikurangi + Inspirasi + Inspirasi + + Varian yang lebih sempit terlihat lebih baik untuk heading, tapi belum sempurna: jaraknya tidak seragam, contohnya “a†dan “t†terlalu jauh dan “t†dan “i terlalu dekat. Jumlah yang kurang bagus ini akan tampak lebih jelas pada font dengan kualitas rendah. Meskipun begitu, anda pasti menemukan pasangan dari huruf yang membuat pengaturan kerning menguntungkan.†- - + + Inkscape membuat pengaturan ini sangat mudah. Pindahkan cursor diantara karakter dan gunakan Alt+arrows untuk memindahkannya. Sekali lagi, ini heading yang sama, tetapi kali ini diatur manual posisinya: - Jarak dikurangi, beberapa diatur ulang manual - Inspirasi - - + Jarak dikurangi, beberapa diatur ulang manual + Inspirasi + + Selain mengaturnya secara horisontal dengan Alt+Kiri atau Alt+kanan, anda juga bisa memindahkannya secara vertikal dengan Alt+Atas atau Alt+Bawah: - Inspirasi - - + Inspirasi + + Anda bisa saja mengkonversi teks menjadi path (Shift+Ctrl+C) dan memindahkannya perhuruf sebagai obyek normal. Meskipun begitu, akan lebih menguntungkan untuk membiarkannya sebagai teks - bisa tetap diubah, bisa diganti fontnya, dan ukuran file tidak besar. Kekurangannya hanayalah anda butuh font aslinya terpasang pada sistem komputer yang digunakan untuk membuka dokumen SVG tersebut. - - + + Mirip dengan letter spacing, anda juga bisa mengatur line spacing sebuah obyek teks. Coba gunakan Ctrl+Alt+< dan Ctrl+Alt+> pada paragraf manapun di tutorial ini sehingga tinggi normalnya berubah 1 piksel pada tingkat zum sekarang. Seperti pada Selector, menekan Shift akan memperkuatnya 10 kali lipat. - - Pengedit XML + + Pengedit XML - - + + Tool paling dahsyat dari Inkscape adalah Pengedit XMLnya (Shift+Ctrl+X). Ia menampilkan seluruh pohon XML dari dokumen, dan selalu merefleksikan keadaan saat itu. Anda bisa mengedit atau menggambar sambil melihat perubahan pada pohon XML. Terlebih, anda bisa mengedit teks, elemen, node atribut, apapun pada pengedit XML dan melihat perubahannya di kanvas. Inilah alat paling bagus yang bisa dibayangkan untuk mempelajari SVG secara interaktif, dan memberikan anda akses untuk melakukan trik yang tidak mungkin dilakukan dengan alat pengedit lainnya. - - Akhir + + Akhir - - + + This tutorial shows only a small part of all capabilities of Inkscape. We hope you -enjoyed it. Don't be afraid to experiment and share what you create. Please visit www.inkscape.org for more information, latest +enjoyed it. Don't be afraid to experiment and share what you create. Please visit www.inkscape.org for more information, latest versions, and help from user and developer communities. - + @@ -536,8 +541,8 @@ versions, and help from user and developer communities. - - Gunakan Ctrl+panah atas untuk menggulung + + Gunakan Ctrl+panah atas untuk menggulung diff --git a/share/tutorials/tutorial-advanced.it.svg b/share/tutorials/tutorial-advanced.it.svg index 7be2d1fcf..753c0b472 100644 --- a/share/tutorials/tutorial-advanced.it.svg +++ b/share/tutorials/tutorial-advanced.it.svg @@ -40,440 +40,445 @@ Ctrl+freccia giù per scorrere il documento - + ::AVANZATO -Bulia Byak, buliabyak@users.sf.net e Josh Andler, scislac@users.sf.net - + + Questo tutorial tratterà di copia/incolla, modifica dei nodi, disegno a mano libera e con penna, manipolazione di tracciati, strumenti booleani, proiezione, semplificazione e testo. - + Usa Ctrl+freccie, lo scroll o trascina con il pulsante centrale per far scorrere la pagina. Per la creazione di oggetti, selezioni e trasformazioni, guarda la lezione di base in Aiuto > Lezioni. - - Tecniche di incollaggio + + Tecniche di incollaggio - + Dopo aver copiato degli oggetti con Ctrl+C o tagliato con Ctrl+X, il normale comando Incolla (Ctrl+V) incolla l'oggetto copiato proprio sotto il puntatore o, se questo è fuori dalla finestra, al centro della finestra del documento. Comunque, gli oggetti copiati possono essere incollati nella posizione originale mediante il comando Incolla in origine (Ctrl+Alt+V). - + Un altro comando, Incolla stile (Maiusc+Ctrl+V), applica lo stile del primo oggetto nella clipboard alla selezione corrente. Lo stile incollato comprende tutto il riempimento, il contorno, e le proprietà dei font, ma non la forma, la dimensione, o i parametri specifici del tipo di forma, come il numero di punte della stella. - + Un altro comando, Incolla dimensione, ridimensiona la selezione rendendola uguale alla dimensione dell'oggetto copiato nella clipboard. Ci sono più comandi per incollare la dimensione: Incolla dimensione, Incolla larghezza, Incolla altezza, Incolla dimensione separatamente, Incolla larghezza separatamente, Incolla altezza separatamente. - + Incolla dimensione ridimensiona l'intera selezione rendendola uguale alla dimensione dell'oggetto copiato nella clipboard. Incolla larghezza/altezza ridimensiona l'intera selezione orizzontalmente/verticalmente in modo da eguagliare la larghezza/altezza dell'oggetto nella clipboard. Questi comandi rispettano il blocco sul rapporto di scala che si trova nella barra di controllo dello strumento Selezione (tra i campi L e H), così che quando questo è attivo, l'altra dimensione viene ridimensionata automaticamente per rispettare il rapporto di scala; altrimenti l'altra dimensione rimane inalterata. I comandi seguiti da “separatamente†funzionano in modo simile ai precedenti comandi, eccetto che loro modificano ogni oggetto selezionato separatamente per eguagliare dimensione/larghezza/altezza dell'oggetto nella clipboard. - + La clipboard può essere usata per copiare/incollare oggetti tra varie istanze di Inkscape e altre applicazioni (che devono essere in grado di gestire i file SVG nella clipboard per usare questa funzione). - - Disegno a mano libera e percorsi regolari + + Disegno a mano libera e percorsi regolari - + Il modo più facile per creare una forma arbitraria è disegnare usando lo strumento Pastello (a mano libera, F6): - - - - - - - - - - + + + + + + + + + + Se vuoi delle forme più regolari, usa lo strumento Penna (Bezier, Maiusc+F6): - - - - - - - - - - + + + + + + + + + + Con lo strumento Penna, ogni clic crea un nodo spigoloso senza nessuna maniglia di curvatura, quindi una sequenza di clic produce una serie di segmenti rettilinei. Cliccando e spostando si crea un nodo Bezier curvo con due maniglie collineari opposte. Premi Maiusc durante il trascinamento di una maniglia per ruotare solo una maniglia e fissare l'altra. Al solito, Ctrl limita la direzione del segmento o delle maniglie di incrementi di 15 gradi. Premendo Invio la linea viene finalizzata, Esc la cancella. Per cancellare solo l'ultimo segmento di una linea non conclusa, premi Backspace. - + In entrambi gli strumenti, il tracciato attualmente selezionato mostra piccole ancore quadrate alle estremità. Queste ancore permettono di continuare questo percorso (disegnando da un ancora ad un altra) invece di crearne una nuova. - - Modificare i tracciati + + Modificare i tracciati - + A differenza degli strumenti che creano forme, gli strumenti Penna e Pastello creano dei tracciati. Un tracciato è una sequenza di segmenti rettilinei e/o curve Bezier che, come ogni altro oggetto di Inkscape, possono avere qualunque riempimento e contorno. Ma, contrariamente alle forme, un percorso può essere modificato trascinando liberamente ognuno dei suoi nodi (non soltanto con le maniglie predefinite) o direttamente trascinando un segmento del tracciato. Seleziona questo tracciato e abilita allo strumento Nodo (F2): - - + + Puoi vedere dei quadretti grigi, i nodi, sul tracciato. Questi nodi possono essere selezionati con un clic, Maiusc+clic, o trascinando una selezione ad elastico - esattamente come gli oggetti selezionati dallo strumento Selettore. Puoi anche cliccare un segmento per selezionare automaticamente i nodi adiacenti. I nodi selezionati vengono evidenziati e mostrano le maniglie dei nodi - uno o due piccoli cerchi connessi al nodo selezionato tramite linee diritte. Il tasto ! inverte la selezione dei nodi nel sottotracciato(i) corrente (cioè il sottotracciato(i) con almeno un nodo selezionato); Alt+! inverte nell'intero tracciato. - + I tracciati sono modificati trascinando i loro nodi, le maniglie dei nodi, o direttamente un segmento. (Prova a spostare qualche nodo, maniglia, e segmenti del precedente tracciato.) Ctrl funziona come al solito per limitare i movimenti e la rotazione. I tasti frecce, Tab, [ e ], < e > con i loro tasti modificatori funzionano come per lo strumento Selettore, ma si applicano ai nodi invece che agli oggetti. Puoi aggiungere nodi ovunque sul tracciato mediante un doppio clic o con Ctrl+Alt+clic nel punto desiderato. - + Puoi eliminare i nodi con Canc o Ctrl+Alt+clic. Quando elimini i nodi il tracciato proverà a mantenere la sua forma. Se vuoi che le maniglie mantengano la posizione (non mantenendo però la forma), eliminali con Ctrl+Canc. Inoltre, puoi duplicare (Maiusc+D) un nodo duplicato. Il tracciato può essere rotto (Maiusc+B) tra i nodi selezionati, oppure se selezioni due nodi separati su un tracciato, puoi unirli con Maiusc+J. - + Un nodo può essere angolare (Maiusc+C), ciò significa che le sue due maniglie si possono muovere indipendentemente formando un angolo qualunque tra loro; oppure curvo (Maiusc+S), ciò significa che le maniglie sono sempre sulla stessa linea retta (collineari); o simmetrico (Maiusc+Y), che è come quello curvo, ma le maniglie hanno anche la stessa lunghezza; e curvo automatico (Maiusc+A), un nodo speciale che automaticamente modifica le maniglie del nodo e dei nodi curvi automatici adiacenti per mantenere una curva morbida. Quando passi da un certo tipo ad un altro, puoi mantenere la posizione di una delle due maniglie, mantenendo il puntatore su quella desiderata, così l'altra viene modificata per essere uguale a questa. - + Inoltre, puoi ritrarre le maniglie insieme mediante Ctrl+clic. Se due nodi adiacenti hanno le loro maniglie ritratte, il tracciato tra loro sarà una linea dritta. Per estrarre le maniglie usa Maiusc+trascinamento dal nodo verso l'esterno. - - Sottotracciati e Combinazione + + Sottotracciati e Combinazione - + Un oggetto tracciato può contenere più di un sottotracciato. Un sottotracciato è una sequenza di nodi connessi tra loro. (Perciò se un tracciato ha più sottotracciati, non tutti i suoi nodi saranno connessi.) Sotto, a sinistra, ci sono tre sottotracciati che appartengono ad un unico tracciato composto; gli stessi tre sottotracciati sulla destra sono oggetti tracciati indipendenti: - - - - - + + + + + Nota che un tracciato composto non è come un gruppo. Esso è un singolo oggetto che è selezionabile solo interamente. Se selezioni l'oggetto sulla sinistra e passi allo strumento Nodo, vedrai i nodi su tutti e tre i sottotracciati. Sulla sinistra, puoi vedere i nodi di un solo tracciato alla volta, non tutti assieme. - + Inkscape può Combinare tracciati in un tracciato cambinato (Ctrl+K) e Separare un tracciato in tracciati indipendenti (Maiusc+Ctrl+K). Prova questi comandi sull'esempio precedente. Visto che un oggetto può avere solo un contorno e un riempimento, un nuovo tracciato composto avrà lo stesso stile del primo (il più basso in ordine verticale) oggetto una volta combinato. - + Quando combini tracciati con riempimento sovrapponendoli, di solito il riempimento sparirà nell'area dove i tracciati si sovrappongono: - - + + Questo è il modo più facile per creare oggetti con dei buchi nel loro interno. Di seguito troverai la descrizione di comandi piu potenti, le “Operazioni Booleaneâ€. - - Convertire in tracciati + + Convertire in tracciati - + Qualunque forma e oggetto di testo può essere convertito in tracciato (Maiusc+Ctrl+C). Questa operazione non cambia l'aspetto dell'oggetto ma toglie tutte le abilità specifiche al suo tipo (ad esempio non si possono arrotondare gli angoli di un rettangolo o cambiare il testo); invece, puoi ora modificare i suoi nodi. Qui ci sono due stelle - quella di sinistra è una forma mentre l'altra è stata convertita in tracciato. Passa allo strumento Nodo e confronta ciò che puoi modificare: - - - + + + Inoltre, puoi convertire in tracciato il contorno di qualunque oggetto. Sotto, il primo oggetto è un tracciato (senza riempimento, contorno nero), mentre il secondo è il risultato del comando Da contorno a tracciato (riempimento nero, nessun contorno): - - - - Operazioni Booleane + + + + Operazioni Booleane - + I comandi nel menu Tracciato ti permettono di combinare due o più oggetti usando le operazioni booleane: - Forme originali - Unione (Ctrl++) - Differenza (Ctrl+-) - Intersezione(Ctrl+*) - Esclusione(Ctrl+^) - Divisione(Ctrl+/) - Taglia tracciato(Ctrl+Alt+/) - - - - - - - - - - - (inferiore meno superiore) - + Forme originali + Unione (Ctrl++) + Differenza (Ctrl+-) + Intersezione(Ctrl+*) + Esclusione(Ctrl+^) + Divisione(Ctrl+/) + Taglia tracciato(Ctrl+Alt+/) + + + + + + + + + + + (inferiore meno superiore) + Le scorciatoie da tastiera per questi comandi alludono alle operazioni matematiche analoghe di quelle booleane (l'unione è l'addizione, la differenza è la sottrazione, etc.). La Differenza e l'Esclusione possono essere applicate solo a due oggetti selezionati; le altre possono essere applicate ad un numero maggiore di oggetti allo stesso tempo. Il risultato riceve sempre lo stile dell'oggetto che sta sotto. - + Il risultato dell'Esclusione appare simile al comando Combina (vedi sopra), ma è differente perché nell'Esclusione aggiunge ulteriori nodi dove gli originali tracciati si intersecano. La differenza tra Divisione e Taglia tracciato è che la prima taglia l'intero oggetto di sotto mediante il tracciato dell'oggetto sopra, mentre la seconda taglia solo il contorno dell'oggetto di sotto e rimuove qualunque riempimento (questo è conveniente per tagliare contorni senza riempimento in pezzi). - - Intrudi e Estrudi + + Intrudi e Estrudi - + Inkscape può espandere e contrarre una forma non solo scalandola, ma anche tracciando il contorno dell'oggetto disponendolo perpendicolare al percorso in ogni punto. I corrispondenti comandi sono chiamati Intrudi (Ctrl+() e Estrudi (Ctrl+)). Di seguito è mostrato l'originale tracciato (rosso) e un numero di percorsi di intrusione o di estrusione dall'originale: - - - - - - - - + + + + + + + + Il semplice Intrudi e Estrudi produce tracciati (convertendo l'originale oggetto in tracciato, se non lo era). Spesso, è più conveniente la Proiezione dinamica (Ctrl+J) che crea un oggetto con una maniglia spostabile (simile ad una maniglia della forma) che regola la distanza di proiezione. Seleziona il seguente oggetto, passa allo strumento Nodo e sposta la sua maniglia per capire: - - + + Un oggetto con proiezione dinamica ricorda il tracciato originale, così non “degrada†quando cambi la distanza di proiezione di volta in volta. Quando non hai più bisogno che sia modificabile, puoi sempre convertire nuovamente questo tipo di oggetto in tracciato. - + Ancora più conveniente è una proiezione collegata, che è simile alla precedente ma è connessa ad un altro tracciato che rimane modificabile. Puoi avere qualunque numero di proiezioni collegate per un tracciato sorgente. Sotto, il tracciato sorgente è rosso, una proiezione collegata a quello ha il controllo nero e nessun riempimento, gli altri hanno riempimento nero e nessun contorno. - + - Seleziona l'oggetto rosso e modificalo; guarda come entrambe le proiezioni collegate rispondono. Ora seleziona una delle proiezioni e sposta la sua maniglia per sistemare il raggio di proiezione. Infine, nota come muovendo o trasformando il sorgente muovi tutti gli oggetti proiettati connessi a quello, e come puoi muovere o trasformare gli oggetti proiettati indipendentemente senza perdere il loro collegamento con il sorgente. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Semplificazione + + Semplificazione - + Il principale uso del comando Semplificazione (Ctrl+L) è ridurre il numero di nodi di un tracciato mantenendo quasi la stessa forma. Questo può essere utile per tracciati creati con lo strumento Penna, visto che lo strumento qualche volta crea più nodi del necessario. Sotto, la forma di sinistra è creata a mano libera, e quella di destra è una copia semplificata. Il tracciato originale ha 28 nodi, mentre quello semplificato ne ha 17 (significa che è più facile lavorare con lo strumento Nodo) ed è più curvilinea. - - - + + + La quantità di semplificazione (chiamata soglia) dipende dalla dimensione della selezione. Perciò, se selezioni un tracciato con qualche oggetto più grande, sarà semplificato più aggressivamente di quando selezioni solo il tracciato. Inoltre, il comando Semplifica è accelerato. Questo significa che premendo Ctrl+L parecchie volte in rapida successione (circa mezzo secondo), la soglia viene aumentate ad ogni chiamata. (Se semplifichi dopo una pausa, la soglia torna al valore predefinito.) Facendo uso dell'accelerazione, è facile applicare l'esatta quantità di semplificazione di cui hai bisogno in ogni situazione. - + Oltre a smussare i tracciati a mano libera, Semplifica può essere usato per vari effetti creativi. Spesso, una forma che è rigida e geometrica migliora con qualche semplificazione poiché crea un effetto che la rende più reale della forma originale - arrotonda i bordi e introduce una distorsione naturale, talvolta elegante o simpatica. Qui sotto c'è un esempio di forma che appare molto più carina dopo la Semplificazione: - Originale - Semplificazione leggera - Semplificazione considerevole - - - - - Creare Testo + Originale + Semplificazione leggera + Semplificazione considerevole + + + + + Creare Testo - + Inkscape è capace di creare testi lunghi e completi. Comunque, è anche conveniente per creare piccoli oggetti di testo come titoli, striscioni, loghi, etichette etc. Questa sezione è un'introduzione alle capacità di testo di Inkscape. - + La creazione di testo è semplice quanto selezionare lo strumento Testo (F8), cliccare in qualche punto sul documento e digitare il tuo testo. Per cambiare il tipo di carattere, lo stile, la dimensione, l'allineamento, apri la finestra di dialogo Testo e carattere (Maiusc+Ctrl+T). Quella finestra ha anche una area di testo dove puoi modificare l'oggetto di testo selezionato - in qualche occasione può essere più conveniente di modificarlo direttamente sul documento (in particolare, l'area di testo supporta il controllo della scrittura). - + Come gli altri strumenti, quello di Testo può selezionare gli oggetti del suo tipo - oggetti di testo - così puoi cliccare per selezionare e posizionare il cursore in qualunque oggetto di testo creato (come questo paragrafo). - + Una delle più comuni operazioni sul testo è la regolazione dello spazio tra lettere e linee. Come sempre, Inkscape fornisce una scorciatoia per fare questo. Quando stai modificando del testo, Alt+< e Alt+> cambiano la spaziatura tra le lettere nella linea corrente del testo, così che la lunghezza totale della linea cambia di 1 pixel all'attuale ingrandimento (confronta lo strumento Seleziona dove la stessa combinazione di tasti scala l'oggetto di un pixel alla volta). Come di norma, se la grandezza del carattere nel testo è più largo dell'originale, può migliorare se avviciniamo un pò le lettere tra loro. Vediamo un esempio: - Originale - Spaziatura diminuita - Ispirazione - Ispirazione - + Originale + Spaziatura diminuita + Ispirazione + Ispirazione + La versione modificata sembra migliore come titolo, ma non è ancora perfetta: la distanza tra le lettere non è uniforme, per esempio la “i†e la “o†sono troppo distanti mentre la “a†e la “z†sono troppo vicine. La quantità di tali regolazioni nei caratteri (specialmente visibile con caratteri di grande dimensione) è maggiore in quelli di bassa qualità rispetto a quelli di alta qualità; comunque, in ogni linea di testo e in ogni carattere potrai trovare copie di lettere che migliorano se avvicinate. - + Inkscape rende semplici queste regolazioni. Muovi il tuo cursore tra i caratteri da regolare e usa Alt+freccia per muovere le lettere a destra del cursore. Qui si trova lo stesso testo, questa volta con una regolazione manuale delle lettere per rendere più uniforme il posizionamento delle lettere: - Spaziatura diminuita, alcune lettere spostate a mano - Ispirazione - + Spaziatura diminuita, alcune lettere spostate a mano + Ispirazione + Oltre a spostare le lettere orizzontalmente mediante Alt+destra o Alt+sinistra, puoi spostare le lettere verticalmente usando Alt+su o Alt+giu: - Ispirazione - + Ispirazione + Certamente puoi convertire il testo in tracciato (Maiusc+Ctrl+C) e muovere le lettere come se fossero tracciati. Comunque, è molto più conveniente mantenere il testo come tale - rimanendo così sempre modificabile, puoi provare differenti caratteri senza rimuovere le regolazioni, e occupa molto meno spazio nel file salvato. Il solo svantaggio è che avrai bisogno di avere il carattere originale installato su tutti i sistemi nei quali vorrai aprire quel documento SVG. - + In modo simile, potrai regolare lo spazio tra le linee in un testo con molte linee. Prova Ctrl+Alt+< e Ctrl+Alt+> su ogni paragrafo in questo tutorial per regolare lo spazio tra le linee, aumentando o diminuendo di 1 pixel la lunghezza totale dell'oggetto di testo all'ingrandimento corrente. Come nel Selettore, premendo Maiusc insieme alla combinazione di tasti per spaziare o regolare la distanza tra lettere produce un effetto più grande di 10 volte. - - Editor XML + + Editor XML - + L'ultimo potente strumento di Inkscape è l'editor di XML (Maiusc+Ctrl+X). Questo mostra l'intero albero XML del documento, che rispecchia sempre il suo attuale stato. Puoi modificare il tuo disegno e guardare il corrispondente cambiamento nell'albero XML. Inoltre, puoi modificare qualunque testo, elemento o nodo nell'editor XML e vedere il risultato sull'area di lavoro. Questo è il migliore strumento immaginabile per imparare SVG interattivamente, e permette di eseguire qualche trucco che non potresti fare con i normali strumenti. - - Conclusioni + + Conclusioni - + Questo tutorial mostra solo una piccola parte delle capacità di Inkscape. Speriamo che ti sia divertito. Non aver timore di sperimentare e condividere ciò che crei. Ricorda di visitare www.inkscape.org per avere più informazioni, ultime versioni e aiuto dalla comunità di utenti e sviluppatori. - + diff --git a/share/tutorials/tutorial-advanced.ja.svg b/share/tutorials/tutorial-advanced.ja.svg index 5f83622e0..0be62fb95 100644 --- a/share/tutorials/tutorial-advanced.ja.svg +++ b/share/tutorials/tutorial-advanced.ja.svg @@ -36,103 +36,103 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::上級 -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + + ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã‚³ãƒ”ー/貼り付ã‘ã€ãƒŽãƒ¼ãƒ‰ã®ç·¨é›†ã€ãƒ•リーãƒãƒ³ãƒ‰ãŠã‚ˆã³ãƒ™ã‚¸ã‚¨æ›²ç·šã€ãƒ‘スæ“作ã€ãƒ–ーリアン演算ã€ã‚ªãƒ•セットã€ç°¡ç•¥åŒ–ã€ãŠã‚ˆã³ãƒ†ã‚­ã‚¹ãƒˆãƒ„ールã«ã¤ã„ã¦è§£èª¬ã—ã¦ã„ã¾ã™ã€‚ - - + + - Ctrl+矢å°ã€ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã€ã¾ãŸã¯ 中央ボタンを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚° を使ã£ã¦ãƒšãƒ¼ã‚¸ã‚’スクロールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚基本的ãªã‚ªãƒ–ジェクトã®ä½œæˆã€é¸æŠžã€å¤‰å½¢ã«ã¤ã„ã¦ã¯ã€ãƒ˜ãƒ«ãƒ— > ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« ã‹ã‚‰åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’ã”覧ãã ã•ã„。 + Ctrl+矢å°ã€ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã€ã¾ãŸã¯ 中央ボタンを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚° を使ã£ã¦ãƒšãƒ¼ã‚¸ã‚’スクロールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚基本的ãªã‚ªãƒ–ジェクトã®ä½œæˆã€é¸æŠžã€å¤‰å½¢ã«ã¤ã„ã¦ã¯ã€ãƒ˜ãƒ«ãƒ— > ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« ã‹ã‚‰åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’ã”覧ãã ã•ã„。 - - 貼り付ã‘テクニック + + 貼り付ã‘テクニック - - + + - ã‚るオブジェクトをコピー (Ctrl+C) ã¾ãŸã¯åˆ‡ã‚Šå–り (Ctrl+X) ã—ãŸå¾Œã€é€šå¸¸ã®è²¼ã‚Šä»˜ã‘コマンド (Ctrl+V) ã¯ãƒžã‚¦ã‚¹ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã«ã€ã‚‚ã—カーソルãŒã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®å¤–ã«ã‚れã°ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®ä¸­å¿ƒã«ã‚ªãƒ–ジェクトを貼り付ã‘ã¾ã™ã€‚ãŸã ã—ã€ã‚¯ãƒªãƒƒãƒ—ボードã«ã‚るオブジェクトã¯ã‚³ãƒ”ーã—ã¦ããŸå…ƒã®ä½ç½®ã‚’記憶ã—ã¦ã„ã‚‹ã®ã§ã€åŒã˜å ´æ‰€ã«è²¼ã‚Šä»˜ã‘ (Ctrl+Alt+V) ã§ãã®ä½ç½®ã«è²¼ã‚Šä»˜ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ + ã‚るオブジェクトをコピー (Ctrl+C) ã¾ãŸã¯åˆ‡ã‚Šå–り (Ctrl+X) ã—ãŸå¾Œã€é€šå¸¸ã®è²¼ã‚Šä»˜ã‘コマンド (Ctrl+V) ã¯ãƒžã‚¦ã‚¹ã‚«ãƒ¼ã‚½ãƒ«ã®ä¸‹ã«ã€ã‚‚ã—カーソルãŒã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®å¤–ã«ã‚れã°ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã®ä¸­å¿ƒã«ã‚ªãƒ–ジェクトを貼り付ã‘ã¾ã™ã€‚ãŸã ã—ã€ã‚¯ãƒªãƒƒãƒ—ボードã«ã‚るオブジェクトã¯ã‚³ãƒ”ーã—ã¦ããŸå…ƒã®ä½ç½®ã‚’記憶ã—ã¦ã„ã‚‹ã®ã§ã€åŒã˜å ´æ‰€ã«è²¼ã‚Šä»˜ã‘ (Ctrl+Alt+V) ã§ãã®ä½ç½®ã«è²¼ã‚Šä»˜ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - - + + - 別ã®ã‚³ãƒžãƒ³ãƒ‰ã€ã‚¹ã‚¿ã‚¤ãƒ«ã‚’貼り付㑠(Shift+Ctrl+V) ã¯ã€ã‚¯ãƒªãƒƒãƒ—ボード内㮠(最åˆã®) オブジェクトã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’ç¾åœ¨ã®é¸æŠžã‚ªãƒ–ジェクトã«é©ç”¨ã—ã¾ã™ã€‚“スタイルâ€ã¨ã¯ã€ãƒ•ィルã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã€ãƒ•ォント設定ã®ã™ã¹ã¦ã§ã™ãŒã€å½¢çжã€ã‚µã‚¤ã‚ºã€ãŠã‚ˆã³æ˜Ÿå½¢ã®é ‚点数ã®ã‚ˆã†ãªã‚·ã‚§ã‚¤ãƒ—タイプã«å›ºæœ‰ã®ãƒ‘ラメーターã¯å«ã¾ã‚Œã¾ã›ã‚“。 + 別ã®ã‚³ãƒžãƒ³ãƒ‰ã€ã‚¹ã‚¿ã‚¤ãƒ«ã‚’貼り付㑠(Shift+Ctrl+V) ã¯ã€ã‚¯ãƒªãƒƒãƒ—ボード内㮠(最åˆã®) オブジェクトã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’ç¾åœ¨ã®é¸æŠžã‚ªãƒ–ジェクトã«é©ç”¨ã—ã¾ã™ã€‚“スタイルâ€ã¨ã¯ã€ãƒ•ィルã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã€ãƒ•ォント設定ã®ã™ã¹ã¦ã§ã™ãŒã€å½¢çжã€ã‚µã‚¤ã‚ºã€ãŠã‚ˆã³æ˜Ÿå½¢ã®é ‚点数ã®ã‚ˆã†ãªã‚·ã‚§ã‚¤ãƒ—タイプã«å›ºæœ‰ã®ãƒ‘ラメーターã¯å«ã¾ã‚Œã¾ã›ã‚“。 - - + + - ãã®ä»–ã®è²¼ã‚Šä»˜ã‘コマンド㫠サイズを貼り付㑠ãŒã‚りã€é¸æŠžã‚ªãƒ–ジェクトã®ã‚µã‚¤ã‚ºã‚’クリップボードオブジェクトã®ã‚µã‚¤ã‚ºå±žæ€§ã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚サイズを貼り付ã‘るコマンドã«ã¯ã€ã‚µã‚¤ã‚ºã‚’貼り付ã‘ã€å¹…を貼り付ã‘ã€é«˜ã•を貼り付ã‘ã€ã‚µã‚¤ã‚ºã‚’個別ã«è²¼ã‚Šä»˜ã‘ã€å¹…を個別ã«è²¼ã‚Šä»˜ã‘ã€ãŠã‚ˆã³é«˜ã•を個別ã«è²¼ã‚Šä»˜ã‘ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ + ãã®ä»–ã®è²¼ã‚Šä»˜ã‘コマンド㫠サイズを貼り付㑠ãŒã‚りã€é¸æŠžã‚ªãƒ–ジェクトã®ã‚µã‚¤ã‚ºã‚’クリップボードオブジェクトã®ã‚µã‚¤ã‚ºå±žæ€§ã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚サイズを貼り付ã‘るコマンドã«ã¯ã€ã‚µã‚¤ã‚ºã‚’貼り付ã‘ã€å¹…を貼り付ã‘ã€é«˜ã•を貼り付ã‘ã€ã‚µã‚¤ã‚ºã‚’個別ã«è²¼ã‚Šä»˜ã‘ã€å¹…を個別ã«è²¼ã‚Šä»˜ã‘ã€ãŠã‚ˆã³é«˜ã•を個別ã«è²¼ã‚Šä»˜ã‘ãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ - - + + - サイズを貼り付㑠ã¯é¸æŠžã‚ªãƒ–ジェクト全体をクリップボードオブジェクト全体ã®ã‚µã‚¤ã‚ºã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚幅を貼り付ã‘/高ã•を貼り付㑠ã¯é¸æŠžã‚ªãƒ–ジェクト全体ã®å¹…/高ã•をクリップボードオブジェクトã®å¹…/高ã•ã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚ã“れらコマンドã¯é¸æŠžãƒ„ールコントロールãƒãƒ¼ã®ç¸¦æ¨ªæ¯”をロック (å¹…ã¨é«˜ã•ã®é–“ã«ã‚るボタン) ã«æ‹˜æŸã•れã¾ã™ã€‚ã™ãªã‚ã¡ã€ãƒ­ãƒƒã‚¯ã•れãŸå ´åˆã¯é¸æŠžã‚ªãƒ–ジェクトã®å¹…ã¨é«˜ã•ã®æ¯”率ã¯ç¶­æŒã•れã¤ã¤æ‹¡å¤§ç¸®å°ã•れã€ãƒ­ãƒƒã‚¯ã•れã¦ã„ãªã‘れã°é¸æŠžã‚ªãƒ–ジェクトã®å¹…ã¨é«˜ã•ã®æ¯”率ã¯ä¿è¨¼ã•れã¾ã›ã‚“。“…を個別ã«è²¼ã‚Šä»˜ã‘â€ã¨æ›¸ã‹ã‚ŒãŸã‚³ãƒžãƒ³ãƒ‰ã®å‹•作ã¯ä¸Šè¨˜ã®ã‚³ãƒžãƒ³ãƒ‰ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€é¸æŠžã‚ªãƒ–ジェクトãれãžã‚Œã‚’個別ã«ã‚¯ãƒªãƒƒãƒ—ボードオブジェクトã®ã‚µã‚¤ã‚º/å¹…/高ã•ã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚ + サイズを貼り付㑠ã¯é¸æŠžã‚ªãƒ–ジェクト全体をクリップボードオブジェクト全体ã®ã‚µã‚¤ã‚ºã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚幅を貼り付ã‘/高ã•を貼り付㑠ã¯é¸æŠžã‚ªãƒ–ジェクト全体ã®å¹…/高ã•をクリップボードオブジェクトã®å¹…/高ã•ã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚ã“れらコマンドã¯é¸æŠžãƒ„ールコントロールãƒãƒ¼ã®ç¸¦æ¨ªæ¯”をロック (å¹…ã¨é«˜ã•ã®é–“ã«ã‚るボタン) ã«æ‹˜æŸã•れã¾ã™ã€‚ã™ãªã‚ã¡ã€ãƒ­ãƒƒã‚¯ã•れãŸå ´åˆã¯é¸æŠžã‚ªãƒ–ジェクトã®å¹…ã¨é«˜ã•ã®æ¯”率ã¯ç¶­æŒã•れã¤ã¤æ‹¡å¤§ç¸®å°ã•れã€ãƒ­ãƒƒã‚¯ã•れã¦ã„ãªã‘れã°é¸æŠžã‚ªãƒ–ジェクトã®å¹…ã¨é«˜ã•ã®æ¯”率ã¯ä¿è¨¼ã•れã¾ã›ã‚“。“…を個別ã«è²¼ã‚Šä»˜ã‘â€ã¨æ›¸ã‹ã‚ŒãŸã‚³ãƒžãƒ³ãƒ‰ã®å‹•作ã¯ä¸Šè¨˜ã®ã‚³ãƒžãƒ³ãƒ‰ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€é¸æŠžã‚ªãƒ–ジェクトãれãžã‚Œã‚’個別ã«ã‚¯ãƒªãƒƒãƒ—ボードオブジェクトã®ã‚µã‚¤ã‚º/å¹…/高ã•ã«ã‚ã‚ã›ã¦æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚ - - + + クリップボードã¯ã‚·ã‚¹ãƒ†ãƒ ãƒ¯ã‚¤ãƒ‰ã§ã™ã€‚ç•°ãªã‚‹ Inkscape インスタンス間やã€Inkscape ã¨ä»–ã®ã‚¢ãƒ—リケーションã¨ã®é–“ã§ã‚ªãƒ–ジェクトã®ã‚³ãƒ”ー/貼り付ã‘ãŒè¡Œãˆã¾ã™ (クリップボード㧠SVG を扱ãˆã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ãªã‘れã°ãªã‚Šã¾ã›ã‚“)。 - - フリーãƒãƒ³ãƒ‰æ›²ç·šã¨è¦å‰‡çš„ãªãƒ‘ス + + フリーãƒãƒ³ãƒ‰æ›²ç·šã¨è¦å‰‡çš„ãªãƒ‘ス - - + + ä»»æ„ã®å›³å½¢ã‚’作る最も簡å˜ãªæ–¹æ³•ã¯ã€é‰›ç­† (フリーãƒãƒ³ãƒ‰) ツール (F6) を使ã£ã¦æãã“ã¨ã§ã™: - - - - - - - - - - - + + + + + + + + + + + ã‚‚ã—ã€ã‚‚ã£ã¨è¦å‰‡çš„ãªç·šã‚’æããŸã‘れã°ã€ãƒšãƒ³ (ベジエ) ツール (Shift+F6) を使ã„ã¾ã™: - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + フリーãƒãƒ³ãƒ‰ã§ã‚‚ベジエã§ã‚‚ã€ç¾åœ¨é¸æŠžã•れã¦ã„るパスã¯ä¸¡ç«¯ã«å°ã•ãªã‚¢ãƒ³ã‚«ãƒ¼ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ã“れらã®ã‚¢ãƒ³ã‚«ãƒ¼ã‹ã‚‰ã€æ–°ã—ã„線を作る代ã‚りã«ãƒ‘スã®ç¶™ç¶š (アンカーã®ä¸€æ–¹ã‹ã‚‰æç”»ã™ã‚‹) ã‚„ã€é–‰ã˜ã‚‹ (一方ã®ã‚¢ãƒ³ã‚«ãƒ¼ã‹ã‚‰ã‚‚ã†ä¸€æ–¹ã«ç·šã‚’æã) ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - - パスã®ç·¨é›† + + パスã®ç·¨é›† - - + + シェイプツールã§ä½œã‚‰ã‚ŒãŸã‚·ã‚§ã‚¤ãƒ—ã¨ç•°ãªã‚Šã€ãƒšãƒ³ãƒ„ールã¨é‰›ç­†ãƒ„ールã¯ãƒ‘スを作りã¾ã™ã€‚パスã¨ã„ã†ã®ã¯ä¸€é€£ã®ç›´ç·šã‚»ã‚°ãƒ¡ãƒ³ãƒˆãŠã‚ˆã³/ã¾ãŸã¯ãƒ™ã‚¸ã‚¨æ›²ç·šã‹ã‚‰ãªã£ã¦ãŠã‚Šã€ä»–ã® Inkscape オブジェクトã¨åŒæ§˜ã«ä»»æ„ã®ãƒ•ィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯å±žæ€§ã‚’æŒã¤ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€ã‚·ã‚§ã‚¤ãƒ—ã¨ç•°ãªã‚Šãƒ‘ス㯠(所定ã®ãƒãƒ³ãƒ‰ãƒ«ã®ã¿ãªã‚‰ãš) ノードをドラッグã™ã‚‹ã“ã¨ã§è‡ªç”±ã«ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ãƒ‘ã‚¹ã‚’é¸æŠžã—ã¦ãƒŽãƒ¼ãƒ‰ãƒ„ール (F2) ã«åˆ‡ã‚Šæ›¿ãˆã¦ã¿ã¾ã—ょã†: - - - + + + ã„ãã¤ã‚‚ã®ç°è‰²ã§æ­£æ–¹å½¢ã® ノード ãŒãƒ‘スã«ä¸Šã«è¦‹ãˆã‚‹ã§ã—ょã†ã€‚ã“れらノード㯠クリックã€Shift+クリックã€ã‚ã‚‹ã„ã¯ãƒ©ãƒãƒ¼ãƒãƒ³ãƒ‰ã§ ドラッグ ã—ã¦é¸æŠžã§ãã¾ã™ — オブジェクトã¯é¸æŠžãƒ„ールã«ã‚ˆã‚‹å ´åˆã¨åŒã˜ã‚ˆã†ã«é¸æŠžã•れã¾ã™ã€‚ã¾ãŸã€ãƒ‘スセグメントをクリックã™ã‚‹ã¨ã€è‡ªå‹•çš„ã«éš£æŽ¥ã™ã‚‹ãƒŽãƒ¼ãƒ‰ãŒé¸æŠžã•れã¾ã™ã€‚é¸æŠžã•れãŸãƒŽãƒ¼ãƒ‰ã¯ãƒã‚¤ãƒ©ã‚¤ãƒˆè¡¨ç¤ºã•れã€ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ç›´ç·šã§ã¤ãªãŒã‚ŒãŸ 1 ã¤ã‚‚ã—ã㯠2 ã¤ã®å††å½¢ã®ãƒŽãƒ¼ãƒ‰ãƒãƒ³ãƒ‰ãƒ«ãŒè¡¨ç¤ºã•れã¾ã™ã€‚! キーã§ç¾åœ¨ã®ã‚µãƒ–パス (1 個以上ã®ãƒŽãƒ¼ãƒ‰ãŒé¸æŠžã•れãŸã‚µãƒ–パス) 内ã§é¸æŠžãƒŽãƒ¼ãƒ‰ã‚’å転ã—ã¾ã™ã€‚Alt+! ã§ãƒ‘ス全体ã§å転ã—ã¾ã™ã€‚ - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,296 +214,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + ã¾ãŸã€ãƒãƒ³ãƒ‰ãƒ«ã®ä¸Šã§ Ctrl+クリック ã™ã‚‹ã¨ãƒŽãƒ¼ãƒ‰ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’完全ã«å¼•ã£è¾¼ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã‚‚ã— 2 ã¤ã®è¿‘接ã™ã‚‹ãƒŽãƒ¼ãƒ‰ã®ãƒãƒ³ãƒ‰ãƒ«ãŒå¼•ã£è¾¼ã‚“ã§ã„る㨠2 ã¤ã®ãƒŽãƒ¼ãƒ‰é–“ã®ãƒ‘スセグメントã¯ç›´ç·šã«ãªã‚Šã¾ã™ã€‚ãƒãƒ³ãƒ‰ãƒ«ã®å¼•ã£è¾¼ã‚“ã ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ãƒãƒ³ãƒ‰ãƒ«ã‚’引ã出ã™ã«ã¯ãƒŽãƒ¼ãƒ‰ã‹ã‚‰ Shift+ドラッグ ã§è¡Œãˆã¾ã™ã€‚ - - サブパスã¨çµåˆ + + サブパスã¨çµåˆ - - + + パスオブジェクト㯠1 ã¤ä»¥ä¸Šã®ã‚µãƒ–パスをå«ã‚“ã§ã„ã¾ã™ã€‚サブパスã¨ã¯ä¸€é€£ã®ãƒŽãƒ¼ãƒ‰ãŒæŽ¥ç¶šã•れãŸã‚‚ã®ã®ã“ã¨ã§ã™ (ã‚‚ã—パス㌠1 ã¤ä»¥ä¸Šã®ã‚µãƒ–パスをæŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®ãƒŽãƒ¼ãƒ‰ãŒé€£çµã—ã¦ã„る訳ã§ã¯ã‚りã¾ã›ã‚“)。下ã®å·¦å›³ã§ã¯ 1 ã¤ã®è¤‡åˆãƒ‘ス㫠3 ã¤ã®ã‚µãƒ–パスãŒå±žã—ã¦ã„ã¾ã™ã€‚å³å›³ã¯åŒã˜ã‚µãƒ–パス㌠3 ã¤ã®ç‹¬ç«‹ã—ãŸãƒ‘スオブジェクトã«ãªã£ã¦ã„ã¾ã™: - - - - - - + + + + + + 複åˆãƒ‘スã¯ã‚°ãƒ«ãƒ¼ãƒ—ã¨ã¯é•ã†ã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。複åˆãƒ‘スã¯å…¨ä½“ã¨ã—ã¦é¸æŠžã§ãる一ã¤ã®ã‚ªãƒ–ジェクトã§ã™ã€‚左図ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãƒŽãƒ¼ãƒ‰ãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ã€3 ã¤ã®ã‚µãƒ–パスãŒè¡¨ç¤ºã•れるã®ãŒåˆ†ã‹ã‚‹ã§ã—ょã†ã€‚å³å›³ã‚’é¸æŠžã™ã‚‹ã¨ 1 度㫠1 ã¤ã®ãƒ‘スã®ãƒŽãƒ¼ãƒ‰ç·¨é›†ã—ã‹ã§ãã¾ã›ã‚“。 - - + + - Inkscape ã¯ãƒ‘スをçµåˆã—ã¦è¤‡åˆãƒ‘スã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (Ctrl+K)。ã¾ãŸã€è¤‡åˆãƒ‘スを分解ã—ã¦ç‹¬ç«‹ã—ãŸãƒ‘スã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ (Shift+Ctrl+K)。上図ã®ä¾‹ã«ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã‚’試ã—ã¦ã¿ã¦ãã ã•ã„。1 ã¤ã®ã‚ªãƒ–ジェクト㯠1 ã¤ã®ãƒ•ィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã—ã‹æŒã¦ãªã„ãŸã‚ã€è¤‡åˆãƒ‘ã‚¹ã¯æœ€åˆ (Z 軸順åºã§æœ€èƒŒé¢) ã®ã‚ªãƒ–ジェクトã®ã‚¹ã‚¿ã‚¤ãƒ«ã«ãªã‚Šã¾ã™ã€‚ + Inkscape ã¯ãƒ‘スをçµåˆã—ã¦è¤‡åˆãƒ‘スã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (Ctrl+K)。ã¾ãŸã€è¤‡åˆãƒ‘スを分解ã—ã¦ç‹¬ç«‹ã—ãŸãƒ‘スã«ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ (Shift+Ctrl+K)。上図ã®ä¾‹ã«ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã‚’試ã—ã¦ã¿ã¦ãã ã•ã„。1 ã¤ã®ã‚ªãƒ–ジェクト㯠1 ã¤ã®ãƒ•ィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã—ã‹æŒã¦ãªã„ãŸã‚ã€è¤‡åˆãƒ‘ã‚¹ã¯æœ€åˆ (Z 軸順åºã§æœ€èƒŒé¢) ã®ã‚ªãƒ–ジェクトã®ã‚¹ã‚¿ã‚¤ãƒ«ã«ãªã‚Šã¾ã™ã€‚ - - + + フィルãŒè¨­å®šã•れã€é‡ãªã£ã¦ã„るパスをçµåˆã™ã‚‹ã¨ã€é€šå¸¸ã€é‡ãªã£ã¦ã„る部分ã®ãƒ•ã‚£ãƒ«ãŒæ¶ˆãˆã¾ã™: - - - + + + ã“れã¯ã€ç©´ã®ã‚るオブジェクトを作る最も簡å˜ãªæ–¹æ³•ã§ã™ã€‚ã•らã«å¼·åŠ›ãªãƒ‘スコマンドã«ã¤ã„ã¦ã¯ã€å¾Œè¿°ã®â€œãƒ–ーリアン演算â€ã‚’ã”覧ãã ã•ã„。 - - パスã«å¤‰æ› + + パスã«å¤‰æ› - - + + ã‚らゆるシェイプやテキストオブジェクトã¯ãƒ‘スã«å¤‰æ› (Shift+Ctrl+C) ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®å¤‰æ›ã¯ã‚ªãƒ–ジェクトã®è¦‹ãŸç›®ã¯å¤‰åŒ–ã•ã›ãšã«ã‚ªãƒ–ジェクトã®ç¨®é¡žå›ºæœ‰ã®æƒ…報を削除㗠(例ãˆã°ã€çŸ©å½¢ã®è§’を丸ã‚ãŸã‚Šãƒ†ã‚­ã‚¹ãƒˆã‚’編集ã™ã‚‹ã“ã¨ã¯ã§ããªããªã‚Šã¾ã™)ã€ä»£ã‚りã«ã€ãƒŽãƒ¼ãƒ‰ã®ç·¨é›†ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ã“ã“ã« 2 ã¤ã®æ˜Ÿå½¢ãŒã‚りã¾ã™ã€‚å·¦ã¯ã‚·ã‚§ã‚¤ãƒ—ã®ã¾ã¾ã§ã™ãŒã€å³ã¯ãƒ‘スã«å¤‰æ›ã•れã¦ã„ã¾ã™ã€‚ノードツールã«åˆ‡ã‚Šæ›¿ãˆã€é¸æŠžã—ãŸã¨ãã®ç·¨é›†æ€§ã‚’比較ã—ã¦ã¿ã¾ã—ょã†: - - - - + + + + ãã®ä¸Šã€ã©ã‚“ãªã‚ªãƒ–ジェクトã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã‚‚パス (“輪郭â€) ã«å¤‰æ›ã§ãã¾ã™ã€‚ä¸‹ã®æœ€åˆã®ã‚ªãƒ–ジェクトã¯å…ƒã®ãƒ‘ス (フィルãªã—ã€é»’ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯)ã€ä¸€æ–¹ 2 番目ã®ã‚ªãƒ–ジェクトã¯â€œãƒ‘スã«å¤‰æ›â€ã‚³ãƒžãƒ³ãƒ‰ã®çµæžœ (フィルãŒé»’ã§ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã—) ã§ã™: - - - - ブーリアン演算 + + + + ブーリアン演算 - - + + パスメニューã«ã‚るコマンドã§ã€2 個以上ã®ã‚ªãƒ–ジェクトをブーリアン演算ã§çµåˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: - オリジナルã®ã‚·ã‚§ã‚¤ãƒ— - çµ±åˆ (Ctrl++) - 差分 (Ctrl+-) - 交差(Ctrl+*) - 排他(Ctrl+^) - 分割(Ctrl+/) - パスをカット(Ctrl+Alt+/) - - - - - - - - - - - (背é¢å´ã‹ã‚‰å‰é¢å´ã‚’引ã) - - + オリジナルã®ã‚·ã‚§ã‚¤ãƒ— + çµ±åˆ (Ctrl++) + 差分 (Ctrl+-) + 交差(Ctrl+*) + 排他(Ctrl+^) + 分割(Ctrl+/) + パスをカット(Ctrl+Alt+/) + + + + + + + + + + + (背é¢å´ã‹ã‚‰å‰é¢å´ã‚’引ã) + + - ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ä»£æ•°æ¼”ç®—ã¨ãƒ–ーリアン演算ã«é¡žä¼¼ã•ã›ã¦é–¢é€£ä»˜ã‘られã¦ã„ã¾ã™ (çµ±åˆã¯åŠ æ³•ã€å·®åˆ†ã¯æ¸›æ³•ç­‰)ã€‚å·®åˆ†ã¨æŽ’ä»–ã‚³ãƒžãƒ³ãƒ‰ã¯é¸æŠžã—ãŸã‚ªãƒ–ジェクト㌠2 ã¤ã®ã¨ãã«ã®ã¿é©ç”¨ã§ãã€ãã®ä»–ã¯ä¸€åº¦ã«ã„ãã¤ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ã‚‚処ç†ã§ãã¾ã™ã€‚çµæžœã¯å¸¸ã«æœ€èƒŒé¢ã®ã‚ªãƒ–ジェクトã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’å—ã‘ç¶™ãŽã¾ã™ã€‚ + ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã®ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ä»£æ•°æ¼”ç®—ã¨ãƒ–ーリアン演算ã«é¡žä¼¼ã•ã›ã¦é–¢é€£ä»˜ã‘られã¦ã„ã¾ã™ (çµ±åˆã¯åŠ æ³•ã€å·®åˆ†ã¯æ¸›æ³•ç­‰)ã€‚å·®åˆ†ã¨æŽ’ä»–ã‚³ãƒžãƒ³ãƒ‰ã¯é¸æŠžã—ãŸã‚ªãƒ–ジェクト㌠2 ã¤ã®ã¨ãã«ã®ã¿é©ç”¨ã§ãã€ãã®ä»–ã¯ä¸€åº¦ã«ã„ãã¤ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ã‚‚処ç†ã§ãã¾ã™ã€‚çµæžœã¯å¸¸ã«æœ€èƒŒé¢ã®ã‚ªãƒ–ジェクトã®ã‚¹ã‚¿ã‚¤ãƒ«ã‚’å—ã‘ç¶™ãŽã¾ã™ã€‚ - - + + - 排他ã®çµæžœã¯çµ±åˆ (上図をå‚ç…§) ã®çµæžœã«ä¼¼ã¦ã„ã¾ã™ãŒã€æŽ’ä»–ã¯é‡ãªã‚Šåˆã£ãŸéƒ¨åˆ†ã«ãƒŽãƒ¼ãƒ‰ã‚’追加ã™ã‚‹ã¨ã“ã‚ãŒç•°ãªã£ã¦ã„ã¾ã™ã€‚分割ã¨ãƒ‘スをカットã¯ã€å‰è€…ãŒä¸‹ã®ã‚ªãƒ–ジェクトã®ã™ã¹ã¦ã‚’上ã®ã‚ªãƒ–ジェクトã§åˆ‡æ–­ã™ã‚‹ã®ã«å¯¾ã—ã€å¾Œè€…ã¯ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®ã¿ã‚’切断ã—フィルをå–り除ãã¨ã“ã‚ãŒç•°ãªã‚Šã¾ã™ (フィルã®ãªã„ストロークをã°ã‚‰ã°ã‚‰ã«ã™ã‚‹ã®ã«ä¾¿åˆ©)。 + 排他ã®çµæžœã¯çµ±åˆ (上図をå‚ç…§) ã®çµæžœã«ä¼¼ã¦ã„ã¾ã™ãŒã€æŽ’ä»–ã¯é‡ãªã‚Šåˆã£ãŸéƒ¨åˆ†ã«ãƒŽãƒ¼ãƒ‰ã‚’追加ã™ã‚‹ã¨ã“ã‚ãŒç•°ãªã£ã¦ã„ã¾ã™ã€‚分割ã¨ãƒ‘スをカットã¯ã€å‰è€…ãŒä¸‹ã®ã‚ªãƒ–ジェクトã®ã™ã¹ã¦ã‚’上ã®ã‚ªãƒ–ジェクトã§åˆ‡æ–­ã™ã‚‹ã®ã«å¯¾ã—ã€å¾Œè€…ã¯ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®ã¿ã‚’切断ã—フィルをå–り除ãã¨ã“ã‚ãŒç•°ãªã‚Šã¾ã™ (フィルã®ãªã„ストロークをã°ã‚‰ã°ã‚‰ã«ã™ã‚‹ã®ã«ä¾¿åˆ©)。 - - インセットã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆ + + インセットã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆ - - + + - Inkscape ã¯æ‹¡å¤§ç¸®å°ã ã‘ã§ã¯ãªãオブジェクトã®ãƒ‘スをオフセットã™ã‚‹ã“ã¨ã§ã‚‚形状を拡張ã€åŽç¸®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šãƒ‘ス上ã®ã™ã¹ã¦ã®ç‚¹ã‚’垂直方å‘ã«ç§»å‹•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚相当ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚¤ãƒ³ã‚»ãƒƒãƒˆ (Ctrl+() ã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆ (Ctrl+)) ã§ã™ã€‚下ã®å›³ã¯ã€å…ƒã«ãªã‚‹ãƒ‘ス (赤) ã¨ãã“ã‹ã‚‰ã®ã„ãã¤ã‹ã®ã‚¤ãƒ³ã‚»ãƒƒãƒˆã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆã‚’作æˆã—ãŸä¾‹ã§ã™: + Inkscape ã¯æ‹¡å¤§ç¸®å°ã ã‘ã§ã¯ãªãオブジェクトã®ãƒ‘スをオフセットã™ã‚‹ã“ã¨ã§ã‚‚形状を拡張ã€åŽç¸®ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¤ã¾ã‚Šãƒ‘ス上ã®ã™ã¹ã¦ã®ç‚¹ã‚’垂直方å‘ã«ç§»å‹•ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚相当ã™ã‚‹ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚¤ãƒ³ã‚»ãƒƒãƒˆ (Ctrl+() ã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆ (Ctrl+)) ã§ã™ã€‚下ã®å›³ã¯ã€å…ƒã«ãªã‚‹ãƒ‘ス (赤) ã¨ãã“ã‹ã‚‰ã®ã„ãã¤ã‹ã®ã‚¤ãƒ³ã‚»ãƒƒãƒˆã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆã‚’作æˆã—ãŸä¾‹ã§ã™: - - - - - - - - - + + + + + + + + + - 普通ã®ã‚¤ãƒ³ã‚»ãƒƒãƒˆã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã¯ãƒ‘スを生æˆã—ã¾ã™ (å…ƒã®ã‚ªãƒ–ジェクトãŒãƒ‘スã«ãªã£ã¦ã„ãªã„å ´åˆã«ã¯ãƒ‘スã«å¤‰æ›ã™ã‚‹)。ã¨ãã«ã¯ã€ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ã‚ªãƒ•セット (Ctrl+J) ãŒä¾¿åˆ©ã§ã™ã€‚ダイナミックオフセットã¯ã‚ªãƒ•セットã®è·é›¢ã‚’制御ã™ã‚‹ãŸã‚ã®ãƒ‰ãƒ©ãƒƒã‚°ã§ãã‚‹ãƒãƒ³ãƒ‰ãƒ« (シェイプã®ãƒãƒ³ãƒ‰ãƒ«ã«ä¼¼ã¦ã„ã‚‹) ã‚’å‚™ãˆãŸã‚ªãƒ–ジェクトを作りã¾ã™ã€‚下ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ãƒŽãƒ¼ãƒ‰ãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã—ã¦ç†è§£ã—ã¦ã¿ã¾ã—ょã†: + 普通ã®ã‚¤ãƒ³ã‚»ãƒƒãƒˆã¨ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆã‚³ãƒžãƒ³ãƒ‰ã¯ãƒ‘スを生æˆã—ã¾ã™ (å…ƒã®ã‚ªãƒ–ジェクトãŒãƒ‘スã«ãªã£ã¦ã„ãªã„å ´åˆã«ã¯ãƒ‘スã«å¤‰æ›ã™ã‚‹)。ã¨ãã«ã¯ã€ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ã‚ªãƒ•セット (Ctrl+J) ãŒä¾¿åˆ©ã§ã™ã€‚ダイナミックオフセットã¯ã‚ªãƒ•セットã®è·é›¢ã‚’制御ã™ã‚‹ãŸã‚ã®ãƒ‰ãƒ©ãƒƒã‚°ã§ãã‚‹ãƒãƒ³ãƒ‰ãƒ« (シェイプã®ãƒãƒ³ãƒ‰ãƒ«ã«ä¼¼ã¦ã„ã‚‹) ã‚’å‚™ãˆãŸã‚ªãƒ–ジェクトを作りã¾ã™ã€‚下ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ãƒŽãƒ¼ãƒ‰ãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã—ã¦ç†è§£ã—ã¦ã¿ã¾ã—ょã†: - - - + + + ã“ã®ã™ã°ã‚‰ã—ã„ダイナミックオフセットオブジェクトã¯å…ƒã®å½¢ã‚’覚ãˆã¦ã„ã‚‹ã®ã§ã€ä½•度オフセットã®è·é›¢ã‚’変更ã—ã¦ã‚‚形状ãŒâ€œãªã¾ã‚‹â€ã“ã¨ãŒã‚りã¾ã›ã‚“。変更å¯èƒ½ãªçŠ¶æ…‹ã«ã—ã¦ãŠãå¿…è¦ãŒãªããªã‚Œã°ã€ã“ã®ã‚ªãƒ•セットオブジェクトをã„ã¤ã§ãƒ‘スã«å¤‰æ›ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - - + + ã•らã«ã‚‚ã£ã¨ä¾¿åˆ©ãªã®ã¯ãƒªãƒ³ã‚¯ã—ãŸã‚ªãƒ•セットã§ã™ã€‚ã“れã¯ãƒ€ã‚¤ãƒŠãƒŸãƒƒã‚¯ã‚ªãƒ•セットã®å¤‰æ›´ã«ä¼¼ã¦ã„ã¾ã™ãŒã€ä»–ã®ç·¨é›†å¯èƒ½ãªãƒ‘スã«çµåˆã—ã¦ã„ã¾ã™ã€‚1 ã¤ã®å…ƒã«ãªã‚‹ãƒ‘スã«å¯¾ã—ã¦ã„ãã¤ã§ã‚‚リンクã—ãŸã‚ªãƒ•セットを作æˆã§ãã¾ã™ã€‚下ã®å…ƒã«ãªã‚‹èµ¤ã„パスã«ã¯ãƒ•ィルãªã—ã®é»’ã„ストロークã¨ã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã—ã®é»’ã„フィルãŒã‚りã¾ã™ã€‚ - - + + - 赤ã„ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãƒŽãƒ¼ãƒ‰ç·¨é›†ã‚’ã—ã¦ã¿ã¾ã—ょã†ã€‚ã©ã®ã‚ˆã†ã«ä¸¡æ–¹ã®ãƒªãƒ³ã‚¯ã—ãŸã‚ªãƒ•セットãŒå¤‰åŒ–ã™ã‚‹ã‹è¦‹ã¦ãã ã•ã„。ãã—ã¦ã€ã‚ªãƒ•ã‚»ãƒƒãƒˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—オフセット値を変化ã•ã›ã‚‹ãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã—ã¦ãã ã•ã„。最後ã«ã€å…ƒã®ã‚ªãƒ–ジェクトを変形ã—ãŸã¨ãã«ã€ãƒªãƒ³ã‚¯ã—ã¦ã„るオブジェクトãŒã©ã®ã‚ˆã†ã«å‹•ã„ãŸã‹ã€ã©ã†ã‚„れã°å…ƒã®ã‚ªãƒ–ジェクトã¨ã®çµåˆã‚’切らã•ãšã«ã‚ªãƒ•セットオブジェクトを独立ã—ã¦å¤‰å½¢ã€ç§»å‹•ã§ãã‚‹ã‹ã«æ³¨ç›®ã—ã¦ãã ã•ã„。 + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - 簡略化 + + 簡略化 - - + + - パスã®ç°¡ç•¥åŒ–コマンド㮠(Ctrl+L) ã®ä¸»ãªåˆ©ç”¨æ–¹æ³•ã¯ã€å½¢çŠ¶ã‚’ã»ã¼ç¶­æŒã—ã¤ã¤ãƒ‘スã®ãƒŽãƒ¼ãƒ‰æ•°ã‚’減らã™ã“ã¨ã§ã™ã€‚ã“れã¯é‰›ç­†ãƒ„ールã§ä½œæˆã—ãŸãƒ‘ã‚¹ã«æœ‰åйã§ã™ã€‚ãªãœãªã‚‰é‰›ç­†ãƒ„ãƒ¼ãƒ«ã¯æ™‚ã«å¿…è¦ä»¥ä¸Šã®ãƒŽãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹ã‹ã‚‰ã§ã™ã€‚下ã®å·¦ã®å›³ã¯ãƒ•リーãƒãƒ³ãƒ‰ãƒ„ールã§ä½œæˆã—ãŸã‚‚ã®ã€å³ã®ãƒ‘スã¯å·¦ã®ãƒ‘スをコピーã—ã¦ç°¡ç•¥åŒ–ã—ãŸã‚‚ã®ã§ã™ã€‚å…ƒã®ãƒ‘ス㯠28 ノードã‚りã¾ã™ãŒã€ç°¡ç•¥åŒ–ã—ãŸæ–¹ã¯ 17 ノードã§ã‚ˆã‚Šæ»‘らã‹ã«ãªã£ã¦ã„ã¾ã™ (ã“れã¯ãƒŽãƒ¼ãƒ‰ãƒ„ールã§ã®ä½œæ¥­ãŒæ¥½ã«ãªã‚‹ã“ã¨ã‚’æ„味ã—ã¦ã„ã¾ã™)。 + パスã®ç°¡ç•¥åŒ–コマンド㮠(Ctrl+L) ã®ä¸»ãªåˆ©ç”¨æ–¹æ³•ã¯ã€å½¢çŠ¶ã‚’ã»ã¼ç¶­æŒã—ã¤ã¤ãƒ‘スã®ãƒŽãƒ¼ãƒ‰æ•°ã‚’減らã™ã“ã¨ã§ã™ã€‚ã“れã¯é‰›ç­†ãƒ„ールã§ä½œæˆã—ãŸãƒ‘ã‚¹ã«æœ‰åйã§ã™ã€‚ãªãœãªã‚‰é‰›ç­†ãƒ„ãƒ¼ãƒ«ã¯æ™‚ã«å¿…è¦ä»¥ä¸Šã®ãƒŽãƒ¼ãƒ‰ã‚’生æˆã™ã‚‹ã‹ã‚‰ã§ã™ã€‚下ã®å·¦ã®å›³ã¯ãƒ•リーãƒãƒ³ãƒ‰ãƒ„ールã§ä½œæˆã—ãŸã‚‚ã®ã€å³ã®ãƒ‘スã¯å·¦ã®ãƒ‘スをコピーã—ã¦ç°¡ç•¥åŒ–ã—ãŸã‚‚ã®ã§ã™ã€‚å…ƒã®ãƒ‘ス㯠28 ノードã‚りã¾ã™ãŒã€ç°¡ç•¥åŒ–ã—ãŸæ–¹ã¯ 17 ノードã§ã‚ˆã‚Šæ»‘らã‹ã«ãªã£ã¦ã„ã¾ã™ (ã“れã¯ãƒŽãƒ¼ãƒ‰ãƒ„ールã§ã®ä½œæ¥­ãŒæ¥½ã«ãªã‚‹ã“ã¨ã‚’æ„味ã—ã¦ã„ã¾ã™)。 - - - - + + + + - 簡略化ã®åº¦åˆã„ (ã—ãã„値ã¨å‘¼ã°ã‚Œã‚‹) ã¯é¸æŠžã‚ªãƒ–ジェクトã®å¤§ãã•ã«ä¾å­˜ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚‚ã—大ãã„ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ²¿ã£ãŸãƒ‘ã‚¹ã‚’é¸æŠžã—ãŸã‚‰ã€ãれã¯ä¸€ã¤ã®ãƒ‘ã‚¹ã‚’é¸æŠžã—ãŸå ´åˆã‚ˆã‚Šç©æ¥µçš„ã«ç°¡ç•¥åŒ–ã—ãªãã¦ã¯ãªã‚‰ãªã„ã¨è¨€ã†ã“ã¨ã§ã™ã€‚ã•らã«ã€ç°¡ç•¥åŒ–コマンドã¯åŠ é€Ÿã—ã¾ã™ã€‚ ã‚‚ã— Ctrl+L を何回も連続ã—ã¦æŠ¼ã—ãŸã‚‰ (å„呼ã³å‡ºã—ã®é–“隔㌠0.5 秒以内ã«ãªã‚‹ãらã„)ã€ã—ãã„値ã¯å‘¼ã³å‡ºã—ã”ã¨ã«å¤§ãããªã‚Šã¾ã™ (一度休んã ã‚ã¨ã«æ¬¡ã®å‘¼ã³å‡ºã—ã‚’ã™ã‚‹ã¨ã—ãã„å€¤ã¯æ—¢å®šã®å€¤ã«ã‚‚ã©ã‚Šã¾ã™)。加速ã™ã‚‹ã“ã¨ã§ã€å€‹ã€…ã®å ´åˆã«å¿œã˜ã¦å¿…è¦ãªé‡ã®ç°¡ç•¥åŒ–ã‚’ç°¡å˜ã«é©ç”¨ã§ãã¾ã™ã€‚ + 簡略化ã®åº¦åˆã„ (ã—ãã„値ã¨å‘¼ã°ã‚Œã‚‹) ã¯é¸æŠžã‚ªãƒ–ジェクトã®å¤§ãã•ã«ä¾å­˜ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€ã‚‚ã—大ãã„ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã«æ²¿ã£ãŸãƒ‘ã‚¹ã‚’é¸æŠžã—ãŸã‚‰ã€ãれã¯ä¸€ã¤ã®ãƒ‘ã‚¹ã‚’é¸æŠžã—ãŸå ´åˆã‚ˆã‚Šç©æ¥µçš„ã«ç°¡ç•¥åŒ–ã—ãªãã¦ã¯ãªã‚‰ãªã„ã¨è¨€ã†ã“ã¨ã§ã™ã€‚ã•らã«ã€ç°¡ç•¥åŒ–コマンドã¯åŠ é€Ÿã—ã¾ã™ã€‚ ã‚‚ã— Ctrl+L を何回も連続ã—ã¦æŠ¼ã—ãŸã‚‰ (å„呼ã³å‡ºã—ã®é–“隔㌠0.5 秒以内ã«ãªã‚‹ãらã„)ã€ã—ãã„値ã¯å‘¼ã³å‡ºã—ã”ã¨ã«å¤§ãããªã‚Šã¾ã™ (一度休んã ã‚ã¨ã«æ¬¡ã®å‘¼ã³å‡ºã—ã‚’ã™ã‚‹ã¨ã—ãã„å€¤ã¯æ—¢å®šã®å€¤ã«ã‚‚ã©ã‚Šã¾ã™)。加速ã™ã‚‹ã“ã¨ã§ã€å€‹ã€…ã®å ´åˆã«å¿œã˜ã¦å¿…è¦ãªé‡ã®ç°¡ç•¥åŒ–ã‚’ç°¡å˜ã«é©ç”¨ã§ãã¾ã™ã€‚ - - + + - フリーãƒãƒ³ãƒ‰æ›²ç·šã‚’滑らã‹ã«ã™ã‚‹ä»–ã«ã€ç°¡ç•¥åŒ–ã¯æ§˜ã€…ãªå‰µé€ çš„効果ã¨ã—ã¦ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ã€‚時ã¨ã—ã¦ã€ã‚る程度ã®ç°¡ç•¥åŒ–ã¯ç¡¬ã„幾何学的ãªå…ƒã®å½¢çжã®è§’ã‚’ãªã‚らã‹ã™ã‚‹ã“ã¨ã§è‡ªç„¶ãªæ­ªã¿ã‚’加ãˆã€ç”Ÿç‰©çš„ãªå°è±¡ã‚’生ã¿å‡ºã™åŠ¹æžœã‚’ä¸Žãˆã¾ã™ã€‚ã¨ãã«ãれã¯ã‚¹ã‚¿ã‚¤ãƒªãƒƒã‚·ãƒ¥ã§ã‚りã€ã¨ãã«ãれã¯é¢ç™½å‘³ã‚’帯ã³ã¾ã™ã€‚以下ã¯ã‚¯ãƒªãƒƒãƒ—アートã®è¦‹ãŸç›®ãŒç°¡ç•¥åŒ–ã«ã‚ˆã£ã¦ã‚ˆããªã£ãŸä¾‹ã§ã™: + フリーãƒãƒ³ãƒ‰æ›²ç·šã‚’滑らã‹ã«ã™ã‚‹ä»–ã«ã€ç°¡ç•¥åŒ–ã¯æ§˜ã€…ãªå‰µé€ çš„効果ã¨ã—ã¦ä½¿ã†ã“ã¨ãŒã§ãã¾ã™ã€‚時ã¨ã—ã¦ã€ã‚る程度ã®ç°¡ç•¥åŒ–ã¯ç¡¬ã„幾何学的ãªå…ƒã®å½¢çжã®è§’ã‚’ãªã‚らã‹ã™ã‚‹ã“ã¨ã§è‡ªç„¶ãªæ­ªã¿ã‚’加ãˆã€ç”Ÿç‰©çš„ãªå°è±¡ã‚’生ã¿å‡ºã™åŠ¹æžœã‚’ä¸Žãˆã¾ã™ã€‚ã¨ãã«ãれã¯ã‚¹ã‚¿ã‚¤ãƒªãƒƒã‚·ãƒ¥ã§ã‚りã€ã¨ãã«ãれã¯é¢ç™½å‘³ã‚’帯ã³ã¾ã™ã€‚以下ã¯ã‚¯ãƒªãƒƒãƒ—アートã®è¦‹ãŸç›®ãŒç°¡ç•¥åŒ–ã«ã‚ˆã£ã¦ã‚ˆããªã£ãŸä¾‹ã§ã™: - オリジナル - å°‘ã—簡略化 - ç©æ¥µçš„ã«ç°¡ç•¥åŒ– - - - - - テキストã®ä½œæˆ + オリジナル + å°‘ã—簡略化 + ç©æ¥µçš„ã«ç°¡ç•¥åŒ– + + + + + テキストã®ä½œæˆ - - + + Inkscape ã¯é•·ãã¦è¤‡é›‘ãªãƒ†ã‚­ã‚¹ãƒˆã‚’作æˆã§ãã¾ã™ãŒã€è¦‹å‡ºã—ã€ãƒãƒŠãƒ¼ã€ãƒ­ã‚´ã€å›³è¡¨ã€æ³¨é‡ˆãã®ä»–ã®å°ã•ãªã‚ªãƒ–ジェクトを作るã®ã«ã‚‚éžå¸¸ã«ä¾¿åˆ©ã§ã™ã€‚ã“ã®ç« ã§ã¯ã¨ã¦ã‚‚基本的㪠Inkscape ã®ãƒ†ã‚­ã‚¹ãƒˆæ©Ÿèƒ½ã«ã¤ã„ã¦ç´¹ä»‹ã—ã¾ã™ã€‚ - - + + テキストオブジェクトã®ä½œæˆã¯ç°¡å˜ã§ã™ã€‚テキストツールã«åˆ‡ã‚Šæ›¿ãˆ (F8)ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã©ã“ã‹ã‚’クリックã—ã¦ãƒ†ã‚­ã‚¹ãƒˆã‚’打ã¡è¾¼ã‚€ã ã‘ã§ã™ã€‚フォントファミリã€ã‚¹ã‚¿ã‚¤ãƒ«ã€ã‚µã‚¤ã‚ºã€ä½ç½®æƒãˆã®å¤‰æ›´ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆã¨ãƒ•ォントダイアログ (Shift+Ctrl+T) ã‚’é–‹ãã¾ã™ã€‚ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã«ã¯ãƒ†ã‚­ã‚¹ãƒˆå…¥åŠ›ã‚¿ãƒ–ãŒã‚りã€é¸æŠžã—ãŸã‚ªãƒ–ジェクトã®ãƒ†ã‚­ã‚¹ãƒˆã‚’変更ã§ãã¾ã™ã€‚ã“れã¯ã‚­ãƒ£ãƒ³ãƒã‚¹ä¸Šã§ç›´æŽ¥ç·¨é›†ã‚’行ã†ã‚ˆã‚Šä¾¿åˆ©ãªå ´åˆãŒã‚りã¾ã™ (特ã«ã€ã“ã®ã‚¿ãƒ–ã¯ã‚¹ãƒšãƒ«ãƒã‚§ãƒƒã‚¯æ©Ÿèƒ½ã‚’ã‚‚ã£ã¦ã„ã¾ã™)。 - - + + ä»–ã®ãƒ„ールã¨åŒæ§˜ã«ã€ãƒ†ã‚­ã‚¹ãƒˆãƒ„ールã¯â€œãƒ†ã‚­ã‚¹ãƒˆã‚ªãƒ–ジェクトâ€ã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã®ã§ã€æ—¢å­˜ã®ãƒ†ã‚­ã‚¹ãƒˆã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—カーソルを置ãã“ã¨ãŒã§ãã¾ã™ (ã“ã®æ®µè½ã®ã‚ˆã†ã«)。 - - + + テキストデザインã§ã‚‚ã£ã¨ã‚‚ä¸€èˆ¬çš„ãªæ“ä½œã¯æ–‡å­—é–“ã¨è¡Œé–“を調節ã™ã‚‹ã“ã¨ã§ã™ã€‚ã„ã¤ã‚‚ã®ã‚ˆã†ã« Inkscape ã¯ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚’用æ„ã—ã¦ã„ã¾ã™ã€‚テキストを編集ã™ã‚‹ã¨ãã€Alt+< 㨠Alt+> キーã§ãƒ†ã‚­ã‚¹ãƒˆã‚ªãƒ–ジェクトã®ç¾åœ¨ã®è¡Œã®æ–‡å­—間隔を変更ã—ã€æ–‡å­—列ã®å…¨é•·ã¯ç¾åœ¨ã®ã‚ºãƒ¼ãƒ ãƒ¬ãƒ™ãƒ«ä¸Šã§ã® 1 ピクセル分ãšã¤å¤‰æ›´ã•れã¾ã™ (é¸æŠžãƒ„ãƒ¼ãƒ«ãŒåŒã˜ã‚­ãƒ¼ã§ãƒ”クセルå˜ä½ã§ã‚ªãƒ–ジェクトを拡大縮å°ã™ã‚‹ã®ã¨æ¯”ã¹ã¦ã¿ã¦ãã ã•ã„)。一般的ã«ã€ã‚‚ã—テキストオブジェクトã®ãƒ•ォントサイズãŒãƒ‡ãƒ•ォルトより大ãã„å ´åˆã«ã¯ã€æ–‡å­—é–“éš”ã¯ãƒ‡ãƒ•ォルトより少ã—ç‹­ã‚ãŸæ–¹ãŒã„ã„æ„Ÿã˜ã«ãªã‚Šã¾ã™ã€‚例を示ã—ã¾ã™: - オリジナル - æ–‡å­—é–“éš”ã‚’ç¸®å° - Inspiration - Inspiration - - + オリジナル + æ–‡å­—é–“éš”ã‚’ç¸®å° + Inspiration + Inspiration + + 文字間隔を狭ã‚ã‚‹ã¨è¦‹å‡ºã—用ã«ã¯ã¡ã‚‡ã£ã¨è‰¯ããªã£ãŸã‚ˆã†ã§ã™ãŒã€ã¾ã å®Œç’§ã§ã¯ã‚りã¾ã›ã‚“。文字間隔ãŒå‡ä¸€ãªã®ã§ã™ã€‚例ãˆã°â€œaâ€ã¨â€œtâ€ã®é–“ã¯é›¢ã‚ŒéŽãŽã¦ã„ã‚‹ã—ã€â€œtâ€ã¨â€œiâ€ã®é–“ã¯ç‹­ã™ãŽã¾ã™ã€‚ã“ã®ã‚ˆã†ãªã¾ãšã„文字間隔㯠(特ã«å¤§ããªãƒ•ォントサイズã«ãŠã„ã¦) 低å“ä½ã®ãƒ•ォントã§å¤§ããã€é«˜å“ä½ã®ãƒ•ォントã§ã¯å°ã•ããªã‚Šã¾ã™ã€‚ã—ã‹ã—ã€ãŠãらãã©ã‚“ãªãƒ•ォントã®ã©ã‚“ãªæ–‡å­—列ã«ã‚‚ã€ã‚«ãƒ¼ãƒ‹ãƒ³ã‚°ã®èª¿æ•´ã‚’ã™ã‚‹ã¨è‰¯ããªã‚‹æ–‡å­—ã®çµ„ã¿åˆã‚ã›ã¨ã„ã†ãŒã‚ã‚‹ã§ã—ょã†ã€‚ - - + + Inkscape ã¯ã“ã®èª¿ç¯€ã‚’実ã«ç°¡å˜ã«å®Ÿè¡Œã—ã¾ã™ã€‚カーソルを気ã«å…¥ã‚‰ãªã„文字ã®é–“ã«ç§»å‹•ã—㦠Alt+矢å°ã‚­ãƒ¼ã§ã‚«ãƒ¼ã‚½ãƒ«ã®å³å´ã®æ–‡å­—ã‚’å‹•ã‹ã™ã ã‘ã§ã™ã€‚ã¾ãŸåŒã˜è¦‹å‡ºã—を見ã¦ã¿ã¾ã—ょã†ã€‚ä»Šåº¦ã¯æ‰‹ä½œæ¥­ã§æ–‡å­—ã®ä½ç½®ãŒå‡ç­‰ã«ãªã‚‹ã‚ˆã†ã«èª¿æ•´ã—ãŸã‚‚ã®ã§ã™: - 文字間隔を縮å°ã€ä¸€éƒ¨ã®æ–‡å­—間を手動ã§èª¿æ•´ - Inspiration - - + 文字間隔を縮å°ã€ä¸€éƒ¨ã®æ–‡å­—間を手動ã§èª¿æ•´ + Inspiration + + 加ãˆã¦ã€ Alt+å·¦ 㨠Alt+å³ ã‚­ãƒ¼ã§æ–‡å­—を水平方å‘ã«ã‚·ãƒ•トã§ãã€Alt+上 㨠Alt+下 キーã§åž‚ç›´æ–¹å‘ã«ã‚·ãƒ•トã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - Inspiration - - + Inspiration + + ã‚‚ã¡ã‚ã‚“ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’パスã«å¤‰æ› (Shift+Ctrl+C) ã—ã¦ã€ãƒ‘スã¨ã—ã¦å‹•ã‹ã™ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ã—ã‹ã—ã€ãƒ†ã‚­ã‚¹ãƒˆã¯ãƒ†ã‚­ã‚¹ãƒˆã®ã¾ã¾ã§ç·¨é›†å¯èƒ½ã«ã—ã¦ãŠãæ–¹ãŒã‚ˆã‚Šä¾¿åˆ©ã§ã™ã€‚カーニングã®å‰Šé™¤ã‚„文字間ã®èª¿æ•´ã‚’æ–½ã—ã¦ã„ãªã„ã•ã¾ã–ã¾ãªãƒ•ォントã§è©¦ã—ã¦ã¿ã‚‹ã¨ã€ãƒ†ã‚­ã‚¹ãƒˆã¯ä¿å­˜ãƒ•ァイルãŒã¨ã¦ã‚‚å°ã•ããªã‚‹ã®ãŒã‚ã‹ã‚Šã¾ã™ã€‚テキストをテキストã®ã¾ã¾ã«ã—ã¦ãŠãã“ã¨ã®å”¯ä¸€ã®æ¬ ç‚¹ã¯ã€SVG ドキュメントを開ãã‚らゆるシステムã«ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ãƒ•ォントをインストールã—ã¦ãŠãå¿…è¦ãŒã‚ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚ - - + + 文字間隔ã®èª¿ç¯€ã¨ä¼¼ã¦ã€è¤‡æ•°è¡Œã®ãƒ†ã‚­ã‚¹ãƒˆã‚ªãƒ–ジェクトã®è¡Œé–“ã®èª¿ç¯€ã‚‚行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ Ctrl+Alt+< 㨠Ctrl+Alt+> キーã§ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ä¸­ã®ã©ã®æ®µè½ã®é«˜ã•ã§ã‚‚ç¾åœ¨ã®ã‚ºãƒ¼ãƒ ãƒ¬ãƒ™ãƒ«ã§ 1 ピクセルã”ã¨ã«èª¿æ•´ã§ãã‚‹ã“ã¨ã‚’試ã—ã¦ã¿ã¾ã—ょã†ã€‚é¸æŠžãƒ„ãƒ¼ãƒ«ã¨åŒæ§˜ã€Shift を押ã™ã“ã¨ã§èª¿æ•´ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚‚ 10 å€ã®å€¤ã§å¤‰åŒ–ã—ã¾ã™ã€‚ - - XML エディター + + XML エディター - - + + Inkscape ã«ãŠã‘る究極ã®å¼·åŠ›ãªãƒ„ール㯠XML エディター (Shift+Ctrl+X) ã§ã™ã€‚XML エディターã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã® XML ツリー全体を表示ã—ã€ç¾åœ¨ã®çŠ¶æ…‹ãŒå¸¸ã«å映ã•れã€çµµã‚’編集ã—ã¦ã€ç›¸å½“ã™ã‚‹ XML ツリーã®å¤‰åŒ–を見るã“ã¨ãŒã§ãã¾ã™ã€‚ã•らã«ã€XML エディター上ã§ã€ãƒ†ã‚­ã‚¹ãƒˆã€è¦ç´ ã€å±žæ€§ãƒŽãƒ¼ãƒ‰ã‚’編集ã—ã¦ã‚­ãƒ£ãƒ³ãƒã‚¹ã§ãã®çµæžœã‚’確èªã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“れ㯠SVG を対話的ã«å­¦ã¶ãŸã‚ã®æƒ³åƒã—ã†ã‚‹æœ€é«˜ã®ãƒ„ールã§ã‚りã€é€šå¸¸ã®ç·¨é›†ãƒ„ールã§ã¯ã§ããªã„ワザを使ã†ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - - 最後㫠+ + 最後㫠- - + + - ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ Inkscape ã®æ©Ÿèƒ½ã®ã”ã一部ã«ã¤ã„ã¦ã®ã¿ç´¹ä»‹ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’楽ã—ã‚“ã§ã„ãŸã ã‘ãŸãªã‚‰å¹¸ã„ã§ã™ã€‚実験ã™ã‚‹ã“ã¨ã‚’æã‚Œãšã€ä½œã‚Šå‡ºã—ãŸã‚‚ã®ã¯å…±æœ‰ã—ã¾ã—ょã†ã€‚www.inkscape.org を訪れã¦ã‚ˆã‚Šå¤šãã®æƒ…å ±ã¨ã€æœ€æ–°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨é–‹ç™ºè€…ã‹ã‚‰ã®ãƒ˜ãƒ«ãƒ—ã«è§¦ã‚Œã¦ã¿ã¦ãã ã•ã„。 + ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ Inkscape ã®æ©Ÿèƒ½ã®ã”ã一部ã«ã¤ã„ã¦ã®ã¿ç´¹ä»‹ã—ã¦ã„ã¾ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’楽ã—ã‚“ã§ã„ãŸã ã‘ãŸãªã‚‰å¹¸ã„ã§ã™ã€‚実験ã™ã‚‹ã“ã¨ã‚’æã‚Œãšã€ä½œã‚Šå‡ºã—ãŸã‚‚ã®ã¯å…±æœ‰ã—ã¾ã—ょã†ã€‚www.inkscape.org を訪れã¦ã‚ˆã‚Šå¤šãã®æƒ…å ±ã¨ã€æœ€æ–°ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨é–‹ç™ºè€…ã‹ã‚‰ã®ãƒ˜ãƒ«ãƒ—ã«è§¦ã‚Œã¦ã¿ã¦ãã ã•ã„。 - + @@ -533,8 +538,8 @@ rotated/scaled to match. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-advanced.nl.svg b/share/tutorials/tutorial-advanced.nl.svg index 3e444b242..05ed5b5cf 100644 --- a/share/tutorials/tutorial-advanced.nl.svg +++ b/share/tutorials/tutorial-advanced.nl.svg @@ -36,103 +36,103 @@ - Gebruik Ctrl+pijl omlaag om te scrollen + Gebruik Ctrl+pijl omlaag om te scrollen handleiding - + ::GEAVANCEERD -Bulia Byak (buliabyak@users.sf.net) en Josh Andler (scislac@users.sf.net) - - + + + Deze handleiding behandelt kopiëren/plakken, knooppunten wijzigen, tekenen uit de vrije hand, Bezier-tekenen, padmanipulatie, booleaanse bewerkingen, offsets, vereenvoudiging en het tekstgereedschap. - - + + - Gebruik Ctrl+Pijltjestoetsen, muiswiel of middenmuisknop om naar beneden te scrollen. Voor de basis van objecten maken, selectie en transformatie, zie de Basishandleiding in Help > Handleidingen. + Gebruik Ctrl+Pijltjestoetsen, muiswiel of middenmuisknop om naar beneden te scrollen. Voor de basis van objecten maken, selectie en transformatie, zie de Basishandleiding in Help > Handleidingen. - - Plaktechnieken + + Plaktechnieken - - + + - Na het kopiëren van objecten met Ctrl+C of knippen met Ctrl+X, plakt de reguliere opdracht Plakken (Ctrl+V) de gekopieerde objecten rechtsonder de muiscursor of, indiende cursor zich buiten het venster bevindt, in het midden van het documentvenster. Echter, de objecten op het klembord onthouden nog steeds de originele plaats vanwaar ze gekopieerd werden zodat je ze daar terug kan plakken met Op positie plakken (Ctrl+Alt+V). + Na het kopiëren van objecten met Ctrl+C of knippen met Ctrl+X, plakt de reguliere opdracht Plakken (Ctrl+V) de gekopieerde objecten rechtsonder de muiscursor of, indiende cursor zich buiten het venster bevindt, in het midden van het documentvenster. Echter, de objecten op het klembord onthouden nog steeds de originele plaats vanwaar ze gekopieerd werden zodat je ze daar terug kan plakken met Op positie plakken (Ctrl+Alt+V). - - + + - Een andere opdracht, Stijl plakken (Shift+Ctrl+V), past de stijl van het (eerste) object op het klembord toe op de huidige selecte. De geplakte “stijl†bevat de instellingen voor vulling, lijn en lettertype, maar niet voor vorm, grootte of vormspecifieke parameters, zoals het aantal stralen van een ster. + Een andere opdracht, Stijl plakken (Shift+Ctrl+V), past de stijl van het (eerste) object op het klembord toe op de huidige selecte. De geplakte “stijl†bevat de instellingen voor vulling, lijn en lettertype, maar niet voor vorm, grootte of vormspecifieke parameters, zoals het aantal stralen van een ster. - - + + - Nog een andere set plakopdrachten, Grootte plakken, schaalt de selectie naar de gewenste grootte van de klembordobject(en). Er zijn verschillende opdrachten voor het plakken van de grootte: Grootte plakken, Breedte plakken, Hoogte plakken, Grootte apart plakken, Breedte apart plakken en Hoogte apart plakken. + Nog een andere set plakopdrachten, Grootte plakken, schaalt de selectie naar de gewenste grootte van de klembordobject(en). Er zijn verschillende opdrachten voor het plakken van de grootte: Grootte plakken, Breedte plakken, Hoogte plakken, Grootte apart plakken, Breedte apart plakken en Hoogte apart plakken. - - + + - Grootte plakken schaalt de volledige selectie naar de totale grootte van de klembordobject(en). Breedte plakken/Hoogte plakken schaalt de volledige selectie horizontaal/verticaal naar de breedte/hoogte van de klembordobject(en). Deze opdrachten houden rekening met het slot op de hoogte/breedte verhouding in de gereedschapsdetailsbalk van het selectiegereedschap (tussen de velden B en H). Wanneer het slot is ingedrukt, zal de andere dimensie van het geselecteerde object in dezelfde mate geschaald worden; zoniet blijft de andere dimensie onveranderd. De opdrachten met “apart†werken op dezelfde wijze, behalve dat ze elk object afzonderlijk schalen naar de grootte/breedte/hoogte van de klembordobject(en). + Grootte plakken schaalt de volledige selectie naar de totale grootte van de klembordobject(en). Breedte plakken/Hoogte plakken schaalt de volledige selectie horizontaal/verticaal naar de breedte/hoogte van de klembordobject(en). Deze opdrachten houden rekening met het slot op de hoogte/breedte verhouding in de gereedschapsdetailsbalk van het selectiegereedschap (tussen de velden B en H). Wanneer het slot is ingedrukt, zal de andere dimensie van het geselecteerde object in dezelfde mate geschaald worden; zoniet blijft de andere dimensie onveranderd. De opdrachten met “apart†werken op dezelfde wijze, behalve dat ze elk object afzonderlijk schalen naar de grootte/breedte/hoogte van de klembordobject(en). - - + + Het klembord is systeembreed - je kan objecten niet alleen kopiëren/plakken tussen verschillende Inkscape vensters, maar ook tussen Inkscape en andere toepassingen (die SVG moeten kunnen afhandelen om dit te gebruiken). - - Uit de vrije hand en regelmatige paden tekenen + + Uit de vrije hand en regelmatige paden tekenen - - + + De eenvoudigste weg om een arbitraire vorm te maken, is deze (uit de vrije hand) te tekenen met het Potloodgereedschap (F6): - - - - - - - - - - - + + + + + + + + + + + Indien je meer regelmatige vormen wil, gebruik dan het gereedschap Pen (Bezier) (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Zowel bij het uit de vrije hand tekenen als het Bezier-gereedschap vertonen de geselecteerde paden kleine vierkante ankers op beide uiteinden. Deze ankers laten je toe om dit pad te verlengen (door vanaf een anker te tekenen) of sluiten (door van een anker naar een ander te tekenen) in plaats van een nieuw pad te maken. - - Paden bewerken + + Paden bewerken - - + + In tegenstelling met vormen gemaakt met de vormgereedschappen, creëren de gereedschappen Pen en Potlood paden. Een pad is een sequentie van rechte lijnsegmenten en/of Bezier curves die, zoals elk ander Inkscape object, arbitraire vullings- en lijneigenschappen kunnen hebben. Maar in tegenstelling met een vorm kan een pad bewerkt worden door het vrij verslepen van een van zijn knooppunten (geen voorgedefinieerde handvatten) of het direct slepen van een segment van het pad. Selecteer dit pad en ga over naar het Knooppunt-gereedschap (F2): - - - + + + Je zal een aantal grijze vierkante knooppunten op het pad zien. Deze knooppunten kunnen geselecteerd worden door klikken, Shift+klikken of het trekken van een elastiek - net zoals het selecteren objecten met het selectiegereedschap. Je kan ook op een padsegment klikken om automatisch de aanpalende knooppunten te selecteren. Geselecteerde knooppunten lichten op en tonen kun knooppunthandvatten - een of twee kleine cirkels op lijnstukken aan elk knooppunt. De toets ! inverteert de knooppuntselectie in de huidige subpad(en) (subpaden met tenminste één geselecteerd knooppunt); Alt+! inverteert het volledige pad. - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,296 +214,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Verder kan je knooppunthandvatten terugtrekken door erop te Ctrl+klikken. Indien de handvatten van twee opeenvolgende knooppunten teruggetrokken zijn, is het padsegment ertussen een rechte lijn. Shift+sleep een knooppunt om een teruggetrokken handvat uit te trekken. - - Subpaden en combineren + + Subpaden en combineren - - + + Een pad kan meerdere subpaden bevatten. Een subpad is een sequentie van verbonden knooppunten. (Indien bijgevolg een pad meer dan een subpad bevat, zijn niet alle knooppunten met elkaar verbonden.) Onderaan links behoren de drie subpaden tot één samengesteld pad; de drie zelfde subpaden rechts zijn onafhankelijke paden: - - - - - - + + + + + + Noteer dat een samengesteld pad niet hetzelfde is als een groep. Het is één object dat slechts selecteerbaar is als geheel. Indien je het object links selecteert en overschakelt naar het knooppuntengereedschap, zal je knooppunten zien op alle drie de subpaden. Rechts kan je de knooppunten van slechts één pad per keer bewerken. - - + + - Inkscape kan paden Combineren in een samengesteld pad (Ctrl+K) en een samengesteld pad Opdelen in verschillende paden (Shift+Ctrl+K). Probeer deze opdrachten op bovenstaande voorbeelden. Aangezien een object maar één vulling en lijn kan bevatten, krijgt een nieuw samengesteld pad de stijl van het eerste (laagste in z-volgorde) object. + Inkscape kan paden Combineren in een samengesteld pad (Ctrl+K) en een samengesteld pad Opdelen in verschillende paden (Shift+Ctrl+K). Probeer deze opdrachten op bovenstaande voorbeelden. Aangezien een object maar één vulling en lijn kan bevatten, krijgt een nieuw samengesteld pad de stijl van het eerste (laagste in z-volgorde) object. - - + + Wanneer je overlappende paden met vulling combineert, zal de vulling meestal verdwijnen waar de paden overlappen: - - - + + + Dit is de eenvoudigste wijze om objecten te maken met gaten. Voor krachtigere padopdrachten, zie hieronder bij “Booleaanse opdrachtenâ€. - - Converteren naar pad + + Converteren naar pad - - + + Elke vorm of tekstobject kan omgezet worden naar een pad (Shift+Ctrl+C). Deze operatie verandert het uiterlijk van het object niet, maar verwijdert alle vormspecifieke eigenschappen (je kan bijvoorbeeld de hoeken van een rechthoek niet afronden of tekst wijzigen). Daarentegen kan je nu zijn knooppunten wijzigen. Hier zijn twee sterren - de linkse is een vorm en de rechtse is geconverteerd naar een pad. Ga naar het knooppuntengereedschap en vergelijk de bewerkbaarheid bij selectie: - - - - + + + + Bovendien kan je de lijn van elk object converteren naar een pad (“omlijningâ€). Hieronder is het eerste object het originele pad (zonder vulling, zwarte lijn), terwijl het tweede het resultaat is van de opdracht Lijn naar pad (zwarte vulling, geen lijn): - - - - Booleaanse opdrachten + + + + Booleaanse opdrachten - - + + De opdrachten in het menu Paden laten je twee of meer objecten combineren door middel van booleaanse opdrachten: - Originele vormen - Vereniging (Ctrl++) - Verschil (Ctrl+-) - Overlap(Ctrl+*) - Uitsluiten(Ctrl+^) - Splitsen(Ctrl+/) - Pad versnijden(Ctrl+Alt+/) - - - - - - - - - - - (onder min boven) - - + Originele vormen + Vereniging (Ctrl++) + Verschil (Ctrl+-) + Overlap(Ctrl+*) + Uitsluiten(Ctrl+^) + Splitsen(Ctrl+/) + Pad versnijden(Ctrl+Alt+/) + + + + + + + + + + + (onder min boven) + + - De toetsenbordcombinaties voor deze opdrachten vertonen overeenkomsten met de wiskundige analogen van de operaties (vereniging is optelling, verschil is aftrekken, etc.). De opdrachten Verschil en Uitsluiten kunnen enkel op twee geselecteerde objecten toegepast worden, andere op een variabel aantal objecten. Het resultaat krijgt telkens de stijl van het onderste object. + De toetsenbordcombinaties voor deze opdrachten vertonen overeenkomsten met de wiskundige analogen van de operaties (vereniging is optelling, verschil is aftrekken, etc.). De opdrachten Verschil en Uitsluiten kunnen enkel op twee geselecteerde objecten toegepast worden, andere op een variabel aantal objecten. Het resultaat krijgt telkens de stijl van het onderste object. - - + + - Het resultaat van de opdracht Uitsluiten is gelijkaardig aan Combineren (zie hierboven), maar het verschil is dat Uitsluiten extra knooppunten toevoegt waar originele paden kruisen. Het verschil tussen Splitsen en Pad versnijden is dat het eerste het volledige bodemobject knipt van het pad van het bovenliggende object, waar het tweede enkel de lijn van het onderste object knipt en vulling verwijdert (dit is handig voor het snijden van vullingsloze lijnen in stukken). + Het resultaat van de opdracht Uitsluiten is gelijkaardig aan Combineren (zie hierboven), maar het verschil is dat Uitsluiten extra knooppunten toevoegt waar originele paden kruisen. Het verschil tussen Splitsen en Pad versnijden is dat het eerste het volledige bodemobject knipt van het pad van het bovenliggende object, waar het tweede enkel de lijn van het onderste object knipt en vulling verwijdert (dit is handig voor het snijden van vullingsloze lijnen in stukken). - - Vernauwen en verwijden + + Vernauwen en verwijden - - + + - Inkscape kan vormen vernauwen en verwijden, niet alleen door schalen, maar ook door verplaatsen van het pad van een object, bijvoorbeeld door verplaatsing loodrecht op het pad in elk punt. De overeenkomstige opdrachten zijn Vernauwen (Ctrl+() en Verwijden (Ctrl+)). Hieronder is het originele pad (rood) en een aantal vernauwde en verwijdde paden: + Inkscape kan vormen vernauwen en verwijden, niet alleen door schalen, maar ook door verplaatsen van het pad van een object, bijvoorbeeld door verplaatsing loodrecht op het pad in elk punt. De overeenkomstige opdrachten zijn Vernauwen (Ctrl+() en Verwijden (Ctrl+)). Hieronder is het originele pad (rood) en een aantal vernauwde en verwijdde paden: - - - - - - - - - + + + + + + + + + - De ruwe opdrachten Vernauwen en Verwijden maken paden (het origineel object wordt een pad indien het nog geen pad is). Bijgevolg is de Dynamische offset (Ctrl+J) vaak handiger dat een object maakt met een versleepbaar handvat (vergelijkbaar met een handvat van een vorm) dat de verplaatsing bepaalt. Selecteer het onderstaande object, ga naar het knooppuntengereedschap en versleep het handvat om een idee te krijgen: + De ruwe opdrachten Vernauwen en Verwijden maken paden (het origineel object wordt een pad indien het nog geen pad is). Bijgevolg is de Dynamische offset (Ctrl+J) vaak handiger dat een object maakt met een versleepbaar handvat (vergelijkbaar met een handvat van een vorm) dat de verplaatsing bepaalt. Selecteer het onderstaande object, ga naar het knooppuntengereedschap en versleep het handvat om een idee te krijgen: - - - + + + Zo'n 'dynamische offset'-object onthoudt het origineel pad, zodat het niet “degradeert†wanneer je de verplaatsingsafstand keer op keer aanpast. Wanneer je de aanpasbaarheid niet meer nodig hebt, kan je het 'dynamische offset'-object altijd terug converteren naar een pad. - - + + Nog handiger is een gekoppelde offset, die gelijkaardig is aan de dynamische offset, maar verbonden is met een ander pad dat bewerkbaar blijft. Je kan een willekeurig aantal gekoppelde offsets hebben voor één bronpad. Hieronder is het bronpad rood, één gekoppelde offset heeft een zwarte lijn en geen vulling, de andere heeft zwarte vulling en geen lijn. - - + + - Selecteer het rode object en bewerk zijn knooppunten: zie hoe beide gelinkte offsets veranderen. Selecteer nu een van de gekoppelde offsets en versleep zijn handvat om de offsetafstand aan te passen. Noteer tot slot hoe het verplaatsen of transformeren van de bron alle gelinkte objecten verplaatst en hoe je de gelinkte objecten onafhankelijk verplaatst of transformeert zonder de connectie met de bron te verliezen. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Vereenvoudigen + + Vereenvoudigen - - + + - De belangrijkste toepassing van de opdracht Vereenvoudigen (Ctrl+L) is het reduceren van het aantal knooppunten van een pad, maar met zo goed mogelijk behoud van de vorm. Dit kan bruikbaar zijn voor paden gemaakt met het Potlood, aangezien dat gereedschap soms meer knooppunten maakt dan nodig. Hieronder is de linkse vorm getekend uit de vrije hand en de rechtse is een vereenvoudigde kopie. Het originele pad bevat 28 knooppunten waar het vereenvoudigde pad er 17 heeft (dit betekent dat het veel eenvoudiger is om mee te werken in het knooppuntengereedschap) en gladder is. + De belangrijkste toepassing van de opdracht Vereenvoudigen (Ctrl+L) is het reduceren van het aantal knooppunten van een pad, maar met zo goed mogelijk behoud van de vorm. Dit kan bruikbaar zijn voor paden gemaakt met het Potlood, aangezien dat gereedschap soms meer knooppunten maakt dan nodig. Hieronder is de linkse vorm getekend uit de vrije hand en de rechtse is een vereenvoudigde kopie. Het originele pad bevat 28 knooppunten waar het vereenvoudigde pad er 17 heeft (dit betekent dat het veel eenvoudiger is om mee te werken in het knooppuntengereedschap) en gladder is. - - - - + + + + - De mate van vereenvoudigen (de grenswaarde genoemd) hangt af van de grootte van de selectie. Indien je bijgevolg een pad samen met een groter object selecteert, zal het meer aggressief vereenvoudigd worden dan wanneer je het pad alleen selecteert. De opdracht Vereenvoudigen is bovendien versneld. Dit betekent dat wanneer je verschillende keren snel achtereen ( 0.5 sec) op Ctrl+L drukt, de grenswaarde elke keer verhoogt. (Indien je opnieuw vereenvoudigt na een kleine pauze, is de grenswaarde opnieuw de standaardwaarde.) Door gebruik te maken van de versnelling, is het eenvoudig om de juiste hoeveelheid vereenvoudiging toe te passen voor elke situatie. + De mate van vereenvoudigen (de grenswaarde genoemd) hangt af van de grootte van de selectie. Indien je bijgevolg een pad samen met een groter object selecteert, zal het meer aggressief vereenvoudigd worden dan wanneer je het pad alleen selecteert. De opdracht Vereenvoudigen is bovendien versneld. Dit betekent dat wanneer je verschillende keren snel achtereen ( 0.5 sec) op Ctrl+L drukt, de grenswaarde elke keer verhoogt. (Indien je opnieuw vereenvoudigt na een kleine pauze, is de grenswaarde opnieuw de standaardwaarde.) Door gebruik te maken van de versnelling, is het eenvoudig om de juiste hoeveelheid vereenvoudiging toe te passen voor elke situatie. - - + + - Behalve het glad maken van vrij getekende lijnen, kan Vereenvoudigen gebruikt worden voor diverse creatieve effecten. Een vorm die rigide en geometrische is, heeft vaak voordeel bij een bepaalde mate van vereenvoudiging voor coole realistische veralgemeningen van het origineel - afronden van scherpe hoeken en introduceren van natuurlijke vervormingen, soms stijlvol en soms gewoon grappig. Hier is een voorbeeld van een clipart vorm die veel leuker oogt na Vereenvoudigen: + Behalve het glad maken van vrij getekende lijnen, kan Vereenvoudigen gebruikt worden voor diverse creatieve effecten. Een vorm die rigide en geometrische is, heeft vaak voordeel bij een bepaalde mate van vereenvoudiging voor coole realistische veralgemeningen van het origineel - afronden van scherpe hoeken en introduceren van natuurlijke vervormingen, soms stijlvol en soms gewoon grappig. Hier is een voorbeeld van een clipart vorm die veel leuker oogt na Vereenvoudigen: - Origineel - Lichte vereenvoudiging - Agressieve vereenvoudiging - - - - - Maken van tekst + Origineel + Lichte vereenvoudiging + Agressieve vereenvoudiging + + + + + Maken van tekst - - + + Inkscape kan lange en complexe teksten maken. Echter, het is tevens handig om kleine tekstobjecten te maken zoals, hoofdingen, banners, logo's, labels, onderschriften, etc. Deze sectie geeft een korte introductie in Inkscape's tekstmogelijkheden. - - + + Een tekstobject maken is zo eenvoudig als het openen van het tekstgereedschap (F8), ergens in het document te klikken en je tekst te typen. Open het dialoogvenster Tekst en lettertype om lettertypefamilie, stijl, grootte en uitlijning te veranderen (Shift+Ctrl+T). Dit dialoogvenster bevat ook een tabblad voor wijziging van de tekst van het geselecteerde object - in sommige situaties is dit handiger dan direct bewerken op het canvas (in het bijzonder ondersteund deze tab spellingscontrole tijdens het typen). - - + + Zoals andere gereedschappen kan het tekstgereedschap objecten van het eigen type selecteren - tekstobjecten - zo kan je klikken om te selecteren en de cursor te positioneren in een bestaand tekstobject (zoals deze paragraaf). - - + + Een van de meest voorkomende handelingen in tekstontwerp is het aanpassen van de afstand tussen letters en lijnen. Zoals gewoonlijk heeft Inkscape hiervoor sneltoetsen. Tijdens het wijzigen van tekst veranderen Alt+< en Alt+> de letterafstand in de huidige lijn van het tekstobject zodat de totale lengte van de lijn verandert met 1 pixel bij de huidige zoom (vergelijk met het selectiegereedschap waar dezelfde toetsen schalen op pixelniveau). Indien de lettergrootte in een tekstobject groter is dan standaard, zal het algemeen gunstig zijn om letters dichter opeen te plaatsen dan normaal. Zie hier een voorbeeld: - Origineel - Letterafstand verminderd - Inspiratie - Inspiratie - - + Origineel + Letterafstand verminderd + Inspiratie + Inspiratie + + De smallere variant ziet er beter uit als een hoofding, maar het is nog steeds niet perfect: de afstanden tussen letters zijn niet uniform. Bijvoorbeeld, de “a†en “t†staan te ver van elkaar, terwijl “t†en “i†te dicht opeen staan. Het aantal slechte tekenspatiëringen (vooral zichtbaar in hoge lettertypegroottes) is groter bij lettertypes van lage kwaliteit dan bij hoge kwaliteitslettertypes. Echter, in elke tekst en bij elk lettertype, zal je wellicht letterparen vinden die voordeel ondervinden van aanpassingen in de tekenspatiëring. - - + + Inkscape maakt deze aanpassingen echt eenvoudig. Verplaats je cursor in tekstbewerkingsmodus tussen de bewuste tekens en gebruik Alt+pijltjestoetsen om de letters rechts van de cursor te verplaatsen. Hier is dezelfde hoofding, deze keer met manuele aanpassingen voor visueel uniforme tekenpositionering. - Letterafstand verminderd, voor enkele letterparen manueel - Inspiratie - - + Letterafstand verminderd, voor enkele letterparen manueel + Inspiratie + + Naast letters horizontaal verplaatsen met Alt+Links of Alt+Rechts, kan je ze ook verticaal verplaatsen met Alt+Omhoog of Alt+omlaag: - Inspiratie - - + Inspiratie + + Je kan natuurlijk je tekst gewoon omzetten naar een pad (Shift+Ctrl+C) en de letters verplaatsen als een reguliere paden. Het is echter handiger om tekst als tekst te behouden - het blijft bewerkbaar. Je kan verschillende lettertypes proberen zonder de tekenspatiëring te verwijderen en neemt het minder plaats in in het bewaarde bestand. Het enige nadeel van de “tekst als tekstâ€-benadering is dat je het originele lettertype geïnstalleerd moet hebben op elk systeem waarop je het SVG-document wil openen. - - + + Gelijkaardig aan de tekenspatiëring kan je de regelafstand in meerlijnige tekstobjecten aanpassen. Probeer Ctrl+Alt+< en Ctrl+Alt+> op eender welke paragraaf in deze handleiding om de totale hoogte van het tekstobject te verlagen/verhogen met 1 pixel bij de huidige zoom. - - XML-editor + + XML-editor - - + + Het ultieme gereedschap van Inkscape is de XML-editor (Shift+Ctrl+X). Het toont de volledige XML-boom van het document en geeft altijd de huidige status weer. Je kan je tekening bewerken en de overeenkomstige veranderingen in de XML-boom zien. Bovendien kan je teksten, objecten of attributen wijzigen inde XML-boom en het resultaat zien op het canvas. Dit is het beste gereedschap om SVG op interactieve wijze te leren en het laat je toe om trucs toe te passen die onmogelijk zijn met reguliere bewerkingsprogramma's. - - Conclusie + + Conclusie - - + + - Deze handleiding toont slechts een kleine fractie van alle mogelijkheden van Inkscape. We hopen dat je het tof vond. Aarzel niet om te experimenteren en te delen wat je maakt. Bezoek www.inkscape.org a.u.b. voor meer informatie, de laatste versies en help van de gebruikers- en ontwikkelgemeenschap. + Deze handleiding toont slechts een kleine fractie van alle mogelijkheden van Inkscape. We hopen dat je het tof vond. Aarzel niet om te experimenteren en te delen wat je maakt. Bezoek www.inkscape.org a.u.b. voor meer informatie, de laatste versies en help van de gebruikers- en ontwikkelgemeenschap. - + @@ -533,8 +538,8 @@ rotated/scaled to match. - - Gebruik Ctrl+pijl omhoog om te scrollen + + Gebruik Ctrl+pijl omhoog om te scrollen diff --git a/share/tutorials/tutorial-advanced.pl.svg b/share/tutorials/tutorial-advanced.pl.svg index 49beaaf11..9ae7b60ad 100644 --- a/share/tutorials/tutorial-advanced.pl.svg +++ b/share/tutorials/tutorial-advanced.pl.svg @@ -36,103 +36,103 @@ - - Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć + + Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - + ::ZAAWANSOWANY -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + + Ten poradnik opisuje techniki kopiowania/wklejania, edycjÄ™ wÄ™złów, rysowanie za pomocÄ… ołówka i pióra, manipulowanie Å›cieżkami, operacje logiczne, odsuniÄ™cia, uproszczenia i narzÄ™dzie tekstu. - - + + - Aby przewinąć stronÄ™ w dół, użyj kombinacji klawiszy [ Ctrl+strzaÅ‚ki ], rolki myszy lub przewijaj stronÄ™ pÅ‚ynnie Å›rodkowym przyciskiem myszy. Podstawowe sposoby tworzenia, zaznaczania i przeksztaÅ‚cania obiektów zostaÅ‚y omówione w poradniku „Podstawy†dostÄ™pnym z poziomu menu „Pomoc Poradniki + Aby przewinąć stronÄ™ w dół, użyj kombinacji klawiszy [ Ctrl+strzaÅ‚ki ], rolki myszy lub przewijaj stronÄ™ pÅ‚ynnie Å›rodkowym przyciskiem myszy. Podstawowe sposoby tworzenia, zaznaczania i przeksztaÅ‚cania obiektów zostaÅ‚y omówione w poradniku „Podstawy†dostÄ™pnym z poziomu menu „Pomoc Poradniki - - Techniki wklejania + + Techniki wklejania - - + + - Po skopiowaniu obiektów za pomocÄ… skrótu klawiaturowego [ Ctrl+C ] bÄ…dź wyciÄ™ciu poprzez [ Ctrl+X ], za pomocÄ… polecenia „Wklej†[ Ctrl+V ] obiekty te można umieÅ›cić w obszarze roboczym. ZostanÄ… one wklejone pod kursorem myszy lub – jeżeli kursor znajdowaÅ‚ siÄ™ poza oknem – na Å›rodku dokumentu. Obiekty znajdujÄ…ce siÄ™ w schowku pamiÄ™tajÄ… poÅ‚ożenie, z którego byÅ‚y kopiowane, możliwe wiÄ™c jest wklejenie ich w to samo miejsce za pomocÄ… polecenia „Wklej w miejscu pochodzenia†[ Ctrl+Alt+V ]. + Po skopiowaniu obiektów za pomocÄ… skrótu klawiaturowego [ Ctrl+C ] bÄ…dź wyciÄ™ciu poprzez [ Ctrl+X ], za pomocÄ… polecenia „Wklej†[ Ctrl+V ] obiekty te można umieÅ›cić w obszarze roboczym. ZostanÄ… one wklejone pod kursorem myszy lub – jeżeli kursor znajdowaÅ‚ siÄ™ poza oknem – na Å›rodku dokumentu. Obiekty znajdujÄ…ce siÄ™ w schowku pamiÄ™tajÄ… poÅ‚ożenie, z którego byÅ‚y kopiowane, możliwe wiÄ™c jest wklejenie ich w to samo miejsce za pomocÄ… polecenia „Wklej w miejscu pochodzenia†[ Ctrl+Alt+V ]. - - + + - Polecenie „Wklej styl†[ Shift+Ctrl+V ] przydziela styl pierwszego obiektu znajdujÄ…cego siÄ™ w schowku aktualnemu zaznaczeniu. Wklejony styl zawiera ustawienia konturu, wypeÅ‚nienia i czcionki, ale nie zawiera ksztaÅ‚tu, rozmiaru czy parametrów specyficznych dla danego typu obiektu, jak na przykÅ‚ad liczba ramion gwiazdy. + Polecenie „Wklej styl†[ Shift+Ctrl+V ] przydziela styl pierwszego obiektu znajdujÄ…cego siÄ™ w schowku aktualnemu zaznaczeniu. Wklejony styl zawiera ustawienia konturu, wypeÅ‚nienia i czcionki, ale nie zawiera ksztaÅ‚tu, rozmiaru czy parametrów specyficznych dla danego typu obiektu, jak na przykÅ‚ad liczba ramion gwiazdy. - - + + - Inne polecenie – „Wklej rozmiar†pozwala skalować zaznaczenie, tak by dopasować je do obiektu znajdujÄ…cego siÄ™ w schowku. Istnieje wiele poleceÅ„ sÅ‚użących wklejaniu rozmiaru. Polecenia te to: „Wklej rozmiarâ€, „Wklej szerokośćâ€, „Wklej wysokośćâ€, „Wklej rozmiar oddzielnieâ€, „Wklej szerokość oddzielnie†i „Wklej wysokość oddzielnieâ€. + Inne polecenie – „Wklej rozmiar†pozwala skalować zaznaczenie, tak by dopasować je do obiektu znajdujÄ…cego siÄ™ w schowku. Istnieje wiele poleceÅ„ sÅ‚użących wklejaniu rozmiaru. Polecenia te to: „Wklej rozmiarâ€, „Wklej szerokośćâ€, „Wklej wysokośćâ€, „Wklej rozmiar oddzielnieâ€, „Wklej szerokość oddzielnie†i „Wklej wysokość oddzielnieâ€. - - + + - Polecenie „Wklej rozmiar†skaluje caÅ‚e zaznaczenie, by dopasować je do rozmiaru obiektu w schowku. „Wklej szerokośćâ€/„Wklej wysokość†– skaluje caÅ‚e zaznaczenie w poziomie/pionie, aby dopasować je do szerokoÅ›ci/wysokoÅ›ci obiektu znajdujÄ…cego siÄ™ w schowku. Polecenia te respektujÄ… blokadÄ™ zachowania proporcji, znajdujÄ…cÄ… siÄ™ na pasku poleceÅ„ narzÄ™dzia „Wskaźnik†(pomiÄ™dzy polami Szer. i Wys.), tak wiÄ™c przy włączonej blokadzie drugi wymiar jest skalowany proporcjonalnie do pierwszego. JeÅ›li blokada nie jest włączona – skalowany jest jeden wymiar, a drugi pozostaje niezmieniony. Polecenia zawierajÄ…ce w nazwie sÅ‚owo „oddzielnie†dziaÅ‚ajÄ… podobnie do wyżej opisanych, z tym wyjÄ…tkiem, że skalujÄ… każdy zaznaczony obiekt oddzielnie, tak aby dopasowaÅ‚ siÄ™ do rozmiaru/szerokoÅ›ci/wysokoÅ›ci obiektu znajdujÄ…cego siÄ™ w schowku. + Polecenie „Wklej rozmiar†skaluje caÅ‚e zaznaczenie, by dopasować je do rozmiaru obiektu w schowku. „Wklej szerokośćâ€/„Wklej wysokość†– skaluje caÅ‚e zaznaczenie w poziomie/pionie, aby dopasować je do szerokoÅ›ci/wysokoÅ›ci obiektu znajdujÄ…cego siÄ™ w schowku. Polecenia te respektujÄ… blokadÄ™ zachowania proporcji, znajdujÄ…cÄ… siÄ™ na pasku poleceÅ„ narzÄ™dzia „Wskaźnik†(pomiÄ™dzy polami Szer. i Wys.), tak wiÄ™c przy włączonej blokadzie drugi wymiar jest skalowany proporcjonalnie do pierwszego. JeÅ›li blokada nie jest włączona – skalowany jest jeden wymiar, a drugi pozostaje niezmieniony. Polecenia zawierajÄ…ce w nazwie sÅ‚owo „oddzielnie†dziaÅ‚ajÄ… podobnie do wyżej opisanych, z tym wyjÄ…tkiem, że skalujÄ… każdy zaznaczony obiekt oddzielnie, tak aby dopasowaÅ‚ siÄ™ do rozmiaru/szerokoÅ›ci/wysokoÅ›ci obiektu znajdujÄ…cego siÄ™ w schowku. - - + + Schowek jest szerokosystemowy, co oznacza, że można kopiować/wklejać obiekty pomiÄ™dzy różnymi egzemplarzami Inkscape 'a, a także pomiÄ™dzy Inkscape'em i innymi programami. Jedyny warunek – programy te muszÄ… obsÅ‚ugiwać format SVG. - - Rysowanie Å›cieżek odrÄ™cznych i regularnych + + Rysowanie Å›cieżek odrÄ™cznych i regularnych - - + + NajÅ‚atwiejszym sposobem utworzenia dowolnego ksztaÅ‚tu jest narysowanie go za pomocÄ… narzÄ™dzia „Ołówek†(rysunek odrÄ™czny) [ F6 ]: - - - - - - - - - - - + + + + + + + + + + + Jeżeli potrzebujesz bardziej regularnych ksztaÅ‚tów, użyj narzÄ™dzia „Pióro†(krzywe Beziera) [ Shit+F6 ]: - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Na obu koÅ„cach aktualnie zaznaczonej – narysowanej zarówno narzÄ™dziem „Ołówekâ€, jak i „Pióro†– Å›cieżki, wyÅ›wietlane sÄ… niewielkie znaczniki w postaci kwadratów. PozwalajÄ… one kontynuować Å›cieżkÄ™ przez dalsze rysowanie linii poczÄ…wszy od jednego ze znaczników lub zakoÅ„czyć jÄ… poprzez poprowadzenie linii od jednego znacznika do drugiego. - - Edytowanie Å›cieżek + + Edytowanie Å›cieżek - - + + W odróżnieniu od ksztaÅ‚tów tworzonych za pomocÄ… narzÄ™dzi ksztaÅ‚tu, obiekty tworzone poprzez „Pióro†i „Ołówek†nazywamy Å›cieżkami. Åšcieżka to sekwencja prostych odcinków i/lub krzywych Beziera, która, tak jak inne obiekty, może mieć wypeÅ‚nienie i kontur. Jednak w przeciwieÅ„stwie do ksztaÅ‚tu, Å›cieżka może być edytowana poprzez swobodne przeciÄ…ganie dowolnego jej wÄ™zÅ‚a (nie tylko wczeÅ›niej ustalonych uchwytów) lub segmentu. Zaznacz tÄ™ Å›cieżkÄ™ i wybierz narzÄ™dzie „Edycja wÄ™złów†[ F2 ]: - - - + + + Zobaczysz na niej dużą ilość szarych, kwadratowych wÄ™złów. Można je zaznaczać za pomocÄ… klikniÄ™cia, kombinacji [ Shift+klikniÄ™cie ] lub poprzez zaznaczenie elastyczne – dokÅ‚adnie tak samo, jak sÄ… zaznaczane obiekty za pomocÄ… narzÄ™dzia „Wskaźnikâ€. W celu zaznaczenia przylegÅ‚ych wÄ™złów, należy kliknąć segment Å›cieżki. Zaznaczone wÄ™zÅ‚y zostanÄ… wówczas wyróżnione i wyÅ›wietlone wraz z uchwytami – jednym lub dwoma maÅ‚ymi kółeczkami połączonymi z każdym zaznaczonym wÄ™zÅ‚em liniÄ… prostÄ…. Klawisz [ ! ] odwraca zaznaczenie wÄ™złów w aktualnej subÅ›cieżce tj. takiej, która ma zaznaczony co najmniej jeden wÄ™zeÅ‚; skrót [ Alt+! ] odwraca zaznaczenie w caÅ‚ej Å›cieżce. - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,296 +214,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Można wycofać uchwyt wÄ™zÅ‚a za pomocÄ… kombinacji [ Ctrl+klikniÄ™cie na uchwycie ]. Jeżeli uchwyty przylegÅ‚ych wÄ™złów zostaÅ‚y wycofane, fragment Å›cieżki pomiÄ™dzy nimi przechodzi w liniÄ™ prostÄ…. Kombinacja [ Shift+ciÄ…gniÄ™cie ] na zewnÄ…trz wÄ™zÅ‚a pozwala na wyciÄ…gniÄ™cie wycofanych wÄ™złów. - - SubÅ›cieżki i łączenie Å›cieżek + + SubÅ›cieżki i łączenie Å›cieżek - - + + Åšcieżka może zawierać kilka subÅ›cieżek. SubÅ›cieżka jest sekwencjÄ… wÄ™złów połączonych ze sobÄ…. Z tego powodu, jeÅ›li Å›cieżka posiada wiÄ™cej niż jednÄ… subÅ›cieżkÄ™, nie wszystkie jej wÄ™zÅ‚y sÄ… połączone. PoÅ‚ożone poniżej, po lewej stronie, trzy subÅ›cieżki sÄ… częściÄ… pojedynczej, zÅ‚ożonej Å›cieżki. Takie same trzy subÅ›cieżki po prawej sÄ… niezależnymi Å›cieżkami obiektów: - - - - - - + + + + + + Zauważ, że Å›cieżka zÅ‚ożona nie jest tym samym co grupa. To pojedynczy obiekt, który można zaznaczyć tylko jako caÅ‚ość. JeÅ›li zaznaczysz obiekt po lewej stronie i włączysz narzÄ™dzie „Edycja wÄ™złówâ€, zobaczysz, że wÄ™zÅ‚y wyÅ›wietlÄ… siÄ™ na wszystkich trzech subÅ›cieżkach. W obiekcie po prawej możesz w tym samym czasie edytować tylko jednÄ… Å›cieżkÄ™. - - + + - Inkscape potrafi łączyć Å›cieżki w Å›cieżkÄ™ zÅ‚ożonÄ… [ Ctrl+K ] oraz rozdzielać Å›cieżkÄ™ zÅ‚ożonÄ… na pojedyncze Å›cieżki [ Shift+Ctrl+K ]. Wypróbuj te polecenia na powyższych przykÅ‚adach. Ponieważ obiekt może mieć tylko jedno wypeÅ‚nienie i kontur, nowa zÅ‚ożona Å›cieżka otrzymuje styl pierwszego (najniżej poÅ‚ożonego w stosie) łączonego obiektu. + Inkscape potrafi łączyć Å›cieżki w Å›cieżkÄ™ zÅ‚ożonÄ… [ Ctrl+K ] oraz rozdzielać Å›cieżkÄ™ zÅ‚ożonÄ… na pojedyncze Å›cieżki [ Shift+Ctrl+K ]. Wypróbuj te polecenia na powyższych przykÅ‚adach. Ponieważ obiekt może mieć tylko jedno wypeÅ‚nienie i kontur, nowa zÅ‚ożona Å›cieżka otrzymuje styl pierwszego (najniżej poÅ‚ożonego w stosie) łączonego obiektu. - - + + Podczas łączenia nakÅ‚adajÄ…cych siÄ™, wypeÅ‚nionych Å›cieżek wypeÅ‚nienie zwykle znika w obszarach, w których Å›cieżki siÄ™ przesÅ‚aniajÄ…: - - - + + + To najÅ‚atwiejszy sposób, by tworzyć obiekty z dziurami. Omówienie bardziej zaawansowanych poleceÅ„ Å›cieżek znajduje siÄ™ w akapicie „Operacje logiczneâ€. - - PrzeksztaÅ‚canie w Å›cieżkÄ™ + + PrzeksztaÅ‚canie w Å›cieżkÄ™ - - + + Dowolny ksztaÅ‚t lub obiekt tekstowy można przeksztaÅ‚cić w Å›cieżkÄ™ [ Shift+Ctrl+C ]. Ta operacja nie zmienia wyglÄ…du obiektu, ale usuwa wszystkie wÅ‚aÅ›ciwoÅ›ci charakterystyczne dla danego typu tj. nie można już zaokrÄ…glać narożników prostokÄ…ta lub edytować tekstu. Zamiast tego możliwa jest edycja wÄ™złów. Oto dwie gwiazdy: ta po lewej jest ksztaÅ‚tem, ta po prawej natomiast gwiazdÄ… przeksztaÅ‚conÄ… w Å›cieżkÄ™. Włącz narzÄ™dzie „Edycja wÄ™złów†i porównaj możliwoÅ›ci ich edycji: - - - - + + + + - Co wiÄ™cej, możliwe jest przeksztaÅ‚cenie w Å›cieżkÄ™ konturu dowolnego obiektu. Pierwszy z poniżej poÅ‚ożonych obiektów jest oryginalnÄ… Å›cieżkÄ… (brak wypeÅ‚nienia, czarny kontur), podczas gdy ten po prawej (czarne wypeÅ‚nienie, brak konturu) jest wynikiem zastosowania polecenia „Kontur w Å›cieżkÄ™â€: + Co wiÄ™cej, możliwe jest przeksztaÅ‚cenie w Å›cieżkÄ™ konturu dowolnego obiektu. Pierwszy z poniżej poÅ‚ożonych obiektów jest oryginalnÄ… Å›cieżkÄ… (brak wypeÅ‚nienia, czarny kontur), podczas gdy ten po prawej (czarne wypeÅ‚nienie, brak konturu) jest wynikiem zastosowania polecenia „Kontur w Å›cieżkÄ™â€: - - - - Operacje logiczne + + + + Operacje logiczne - - + + UżywajÄ…c operacji logicznych znajdujÄ…cych siÄ™ w menu „Ścieżka†można połączyć dwa lub wiÄ™cej obiektów: - Oryginalne ksztaÅ‚ty - Suma [ Ctrl++ ] - Różnica [ Ctrl+- ] - Część wspólna[ Ctrl+* ] - Wykluczenie[ Ctrl+^ ] - PodziaÅ‚[ Ctrl+/ ] - RozciÄ™cie Å›cieżki[ Ctrl+Alt+/ ] - - - - - - - - - - - (dół minus góra) - - + Oryginalne ksztaÅ‚ty + Suma [ Ctrl++ ] + Różnica [ Ctrl+- ] + Część wspólna[ Ctrl+* ] + Wykluczenie[ Ctrl+^ ] + PodziaÅ‚[ Ctrl+/ ] + RozciÄ™cie Å›cieżki[ Ctrl+Alt+/ ] + + + + + + + + + + + (dół minus góra) + + - Skróty klawiaturowe dla tych operacji nawiÄ…zujÄ… do arytmetycznych odpowiedników operacji logicznych (suma to dodawanie, różnica to odejmowanie, itd.). Polecenia „Różnica†i „Wykluczenie†można zastosować tylko do dwóch zaznaczonych obiektów. PozostaÅ‚e polecenia mogÄ… przetwarzać dowolnÄ… liczbÄ™ obiektów na raz. Obiekt wynikowy zawsze otrzymuje styl obiektu znajdujÄ…cego siÄ™ na samym dole. + Skróty klawiaturowe dla tych operacji nawiÄ…zujÄ… do arytmetycznych odpowiedników operacji logicznych (suma to dodawanie, różnica to odejmowanie, itd.). Polecenia „Różnica†i „Wykluczenie†można zastosować tylko do dwóch zaznaczonych obiektów. PozostaÅ‚e polecenia mogÄ… przetwarzać dowolnÄ… liczbÄ™ obiektów na raz. Obiekt wynikowy zawsze otrzymuje styl obiektu znajdujÄ…cego siÄ™ na samym dole. - - + + - Wynik dziaÅ‚ania polecenia „Wykluczenie†jest podobny do wyniku polecenia „Suma (zobacz powyżej), różni siÄ™ jednak tym, że „Wykluczenie†dodaje dodatkowe wÄ™zÅ‚y w miejscu przeciÄ™cia siÄ™ oryginalnych Å›cieżek. Różnica pomiÄ™dzy poleceniami „Podział†i „RozciÄ™cie Å›cieżki†jest taka, że pierwsze polecenie przecina dolny obiekt Å›cieżkÄ… górnego obiektu, podczas gdy drugie przecina kontur dolnego obiektu, usuwajÄ…c wypeÅ‚nienie – jest to wygodny sposób na rozdzielanie niewypeÅ‚nionych konturów na kawaÅ‚ki. + Wynik dziaÅ‚ania polecenia „Wykluczenie†jest podobny do wyniku polecenia „Suma (zobacz powyżej), różni siÄ™ jednak tym, że „Wykluczenie†dodaje dodatkowe wÄ™zÅ‚y w miejscu przeciÄ™cia siÄ™ oryginalnych Å›cieżek. Różnica pomiÄ™dzy poleceniami „Podział†i „RozciÄ™cie Å›cieżki†jest taka, że pierwsze polecenie przecina dolny obiekt Å›cieżkÄ… górnego obiektu, podczas gdy drugie przecina kontur dolnego obiektu, usuwajÄ…c wypeÅ‚nienie – jest to wygodny sposób na rozdzielanie niewypeÅ‚nionych konturów na kawaÅ‚ki. - - Odsuwanie Å›cieżki + + Odsuwanie Å›cieżki - - + + - Inkscape potrafi poszerzać i pomniejszać ksztaÅ‚ty nie tylko za pomocÄ… skalowania, lecz także przy użyciu odsuniÄ™cia Å›cieżki obiektu, tj. przemieszczajÄ…c go prostopadle do Å›cieżki w każdym punkcie. KorespondujÄ…ce ze sobÄ… polecenia nazywajÄ… siÄ™ „OdsuÅ„ do wewnÄ…trz†[ Ctrl+( ] i „OdsuÅ„ na zewnÄ…trz†[ Ctrl+) ]. Poniżej pokazano oryginalnÄ… Å›cieżkÄ™ (czerwona) i wiele Å›cieżek odsuniÄ™tych, utworzonych ze Å›cieżki oryginalnej: + Inkscape potrafi poszerzać i pomniejszać ksztaÅ‚ty nie tylko za pomocÄ… skalowania, lecz także przy użyciu odsuniÄ™cia Å›cieżki obiektu, tj. przemieszczajÄ…c go prostopadle do Å›cieżki w każdym punkcie. KorespondujÄ…ce ze sobÄ… polecenia nazywajÄ… siÄ™ „OdsuÅ„ do wewnÄ…trz†[ Ctrl+( ] i „OdsuÅ„ na zewnÄ…trz†[ Ctrl+) ]. Poniżej pokazano oryginalnÄ… Å›cieżkÄ™ (czerwona) i wiele Å›cieżek odsuniÄ™tych, utworzonych ze Å›cieżki oryginalnej: - - - - - - - - - + + + + + + + + + - ZwykÅ‚e polecenia „OdsuÅ„ do wewnÄ…trz†i „OdsuÅ„ na zewnÄ…trz†tworzÄ… Å›cieżki, konwertujÄ…c oryginalny obiekt w Å›cieżkÄ™ – jeżeli jeszcze niÄ… nie jest. CzÄ™sto wygodniejsze jest „dynamiczne odsuniÄ™cie†[ Ctrl+J ], które tworzy obiekt z uchwytem do przeciÄ…gania (podobnym do uchwytu ksztaÅ‚tu), kontrolujÄ…cym wielkość odsuniÄ™cia. Zaznacz poniższy obiekt, wybierz narzÄ™dzie „Edycja wÄ™złów†i przeciÄ…gnij uchwyt: + ZwykÅ‚e polecenia „OdsuÅ„ do wewnÄ…trz†i „OdsuÅ„ na zewnÄ…trz†tworzÄ… Å›cieżki, konwertujÄ…c oryginalny obiekt w Å›cieżkÄ™ – jeżeli jeszcze niÄ… nie jest. CzÄ™sto wygodniejsze jest „dynamiczne odsuniÄ™cie†[ Ctrl+J ], które tworzy obiekt z uchwytem do przeciÄ…gania (podobnym do uchwytu ksztaÅ‚tu), kontrolujÄ…cym wielkość odsuniÄ™cia. Zaznacz poniższy obiekt, wybierz narzÄ™dzie „Edycja wÄ™złów†i przeciÄ…gnij uchwyt: - - - + + + Takie dynamiczne odsuniÄ™cie obiektu zapamiÄ™tuje oryginalnÄ… Å›cieżkÄ™, wiÄ™c nie „zniszczy†jej, kiedy ponownie zmienisz wielkość odsuniÄ™cia. Jeżeli nie ma już potrzeby regulowania odsuniÄ™cia, można przeksztaÅ‚cić odsuniÄ™cie obiektu z powrotem w Å›cieżkÄ™. - - + + Jeszcze wygodniejsze jest odsuniÄ™cie połączone, podobne do dynamicznego, ale połączone z innÄ… Å›cieżkÄ…, którÄ… można edytować. Można mieć wiele odsunięć połączonych dla jednej źródÅ‚owej Å›cieżki. W poniższym przykÅ‚adzie źródÅ‚owa Å›cieżka jest czerwona, jedno połączone z niÄ… odsuniÄ™cie posiada czarny kontur i nie jest wypeÅ‚nione, drugie ma czarne wypeÅ‚nienie i brak konturu. - - + + - Zaznacz czerwony obiekt i edytuj go za pomocÄ… narzÄ™dzia „Edycja wÄ™złówâ€, obserwujÄ…c, jak oba odsuniÄ™cia połączone siÄ™ zachowujÄ…. Zaznacz teraz jedno z odsunięć i przeciÄ…gnij jego uchwyt, by dostosować promieÅ„ odsuniÄ™cia. Zauważ, że przesuwanie lub przeksztaÅ‚canie źródÅ‚a przesuwa wszystkie odsuniÄ™te obiekty z nim połączone, oraz że można przesuwać lub przeksztaÅ‚cać odsuniÄ™te obiekty niezależnie, bez utraty połączenia ze źródÅ‚em. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Upraszczanie + + Upraszczanie - - + + - Głównym zastosowaniem polecenia „Uprość†[ Ctrl+L ] jest redukcja liczby wÄ™złów Å›cieżki z zachowaniem ksztaÅ‚tu. Funkcja ta może być użyteczna w przypadku Å›cieżek stworzonych przy pomocy narzÄ™dzia „Ołówekâ€, ponieważ narzÄ™dzie to tworzy czasami wiÄ™cej wÄ™złów niż jest to konieczne. KsztaÅ‚t znajdujÄ…cy siÄ™ poniżej, po lewej stronie utworzono za pomocÄ… ołówka, natomiast po prawej stronie jest kopiÄ…, którÄ… poddano procesowi uproszczenia. Oryginalna Å›cieżka ma 28 wÄ™złów, podczas gdy uproszczona 17, co oznacza, że Å‚atwiej pracować z niÄ… narzÄ™dziem „Edycja wÄ™złów†i dodatkowo jest ona gÅ‚adsza. + Głównym zastosowaniem polecenia „Uprość†[ Ctrl+L ] jest redukcja liczby wÄ™złów Å›cieżki z zachowaniem ksztaÅ‚tu. Funkcja ta może być użyteczna w przypadku Å›cieżek stworzonych przy pomocy narzÄ™dzia „Ołówekâ€, ponieważ narzÄ™dzie to tworzy czasami wiÄ™cej wÄ™złów niż jest to konieczne. KsztaÅ‚t znajdujÄ…cy siÄ™ poniżej, po lewej stronie utworzono za pomocÄ… ołówka, natomiast po prawej stronie jest kopiÄ…, którÄ… poddano procesowi uproszczenia. Oryginalna Å›cieżka ma 28 wÄ™złów, podczas gdy uproszczona 17, co oznacza, że Å‚atwiej pracować z niÄ… narzÄ™dziem „Edycja wÄ™złów†i dodatkowo jest ona gÅ‚adsza. - - - - + + + + - Liczba uproszczeÅ„, zwana progiem, zależy od rozmiaru zaznaczenia – im wiÄ™ksze zaznaczenie, tym wiÄ™ksza liczba uproszczeÅ„. Dlatego Å›cieżka zaznaczona wraz z dużym obiektem zostanie uproszczona znacznie bardziej, niż gdyby zaznaczono samÄ… Å›cieżkÄ™. Ponadto polecenie „Uprość†akumuluje siÄ™. Oznacza to, że jeżeli skrót [ Ctrl+L ] zostanie użyty kilka razy w krótkich odstÄ™pach czasu (co 0,5 sekundy), próg zwiÄ™kszy siÄ™ za każdym wywoÅ‚aniem polecenia. JeÅ›li nastÄ™pne uproszczenie zostanie wykonane po przerwie, próg powróci do domyÅ›lnej wartoÅ›ci. Z pomocÄ… akumulacji można Å‚atwo zastosować dokÅ‚adnÄ… liczbÄ™ uproszczeÅ„, jaka jest potrzebna w danym przypadku. + Liczba uproszczeÅ„, zwana progiem, zależy od rozmiaru zaznaczenia – im wiÄ™ksze zaznaczenie, tym wiÄ™ksza liczba uproszczeÅ„. Dlatego Å›cieżka zaznaczona wraz z dużym obiektem zostanie uproszczona znacznie bardziej, niż gdyby zaznaczono samÄ… Å›cieżkÄ™. Ponadto polecenie „Uprość†akumuluje siÄ™. Oznacza to, że jeżeli skrót [ Ctrl+L ] zostanie użyty kilka razy w krótkich odstÄ™pach czasu (co 0,5 sekundy), próg zwiÄ™kszy siÄ™ za każdym wywoÅ‚aniem polecenia. JeÅ›li nastÄ™pne uproszczenie zostanie wykonane po przerwie, próg powróci do domyÅ›lnej wartoÅ›ci. Z pomocÄ… akumulacji można Å‚atwo zastosować dokÅ‚adnÄ… liczbÄ™ uproszczeÅ„, jaka jest potrzebna w danym przypadku. - - + + - Oprócz wygÅ‚adzania odrÄ™cznie rysowanych krzywych, polecenie „Uprość†może być wykorzystane do tworzenia różnorodnych ciekawych efektów. CzÄ™sto geometryczny ksztaÅ‚t o prostych, ostrych krawÄ™dziach zyskuje na uproszczeniu, które – stapiajÄ…c ostre narożniki i wstawiajÄ…c bardzo naturalne znieksztaÅ‚cenia, czasem stylowe, a czasem po prostu zabawne – tworzy bardziej realistyczne uogólnienie jego pierwotnej formy. Oto przykÅ‚ad grafiki, która wyglÄ…da o wiele lepiej po uproszczeniu: + Oprócz wygÅ‚adzania odrÄ™cznie rysowanych krzywych, polecenie „Uprość†może być wykorzystane do tworzenia różnorodnych ciekawych efektów. CzÄ™sto geometryczny ksztaÅ‚t o prostych, ostrych krawÄ™dziach zyskuje na uproszczeniu, które – stapiajÄ…c ostre narożniki i wstawiajÄ…c bardzo naturalne znieksztaÅ‚cenia, czasem stylowe, a czasem po prostu zabawne – tworzy bardziej realistyczne uogólnienie jego pierwotnej formy. Oto przykÅ‚ad grafiki, która wyglÄ…da o wiele lepiej po uproszczeniu: - OryginaÅ‚ - delikatne uproszczenie - mocne uproszczenie - - - - - Tworzenie tekstu + OryginaÅ‚ + delikatne uproszczenie + mocne uproszczenie + + + + + Tworzenie tekstu - - + + Przy pomocy programu Inkscape można tworzyć dÅ‚ugie i zÅ‚ożone teksty. Za pomocÄ… Inkscape'a można też bardzo Å‚atwo tworzyć maÅ‚e obiekty tekstowe, takie jak: nagłówki, banery, logotypy, diagramy, etykiety, podpisy, itp. Ta część poradnika zawiera podstawowe wprowadzenie do funkcji tekstowych Inkscape'a. - - + + Tworzenie tekstu jest proste - wystarczy włączyć narzÄ™dzie „Tekst†[ F8 ], kliknąć gdzieÅ› w dokumencie i wpisać treść. Aby zmienić rodzinÄ™ czcionek, styl, rozmiar i wyrównanie, należy otworzyć okno dialogowe „Tekst i czcionka†[ Shift+Ctrl+T ]. W oknie tym znajduje siÄ™ karta „Tekstâ€, gdzie możliwe jest edytowanie zaznaczonego obiektu tekstowego – w niektórych sytuacjach może być to wygodniejsze niż edycja bezpoÅ›rednio w obszarze roboczym, chociażby dlatego, że w tej karcie dziaÅ‚a sprawdzanie pisowni. - - + + Tak jak w przypadku innych narzÄ™dzi, narzÄ™dzie „Tekst†potrafi zaznaczać obiekty wÅ‚asnego typu – obiekty tekstowe. Zatem można kliknąć dowolny, istniejÄ…cy obiekt tekstowy (taki jak ten akapit), by go zaznaczyć i umieÅ›cić w nim kursor. - - + + JednÄ… z najczęściej wykonywanych operacji w trakcie tworzenia obiektów tekstowych jest regulacja Å›wiateÅ‚ miÄ™dzyliterowych (odstÄ™pów miÄ™dzy literami) i miÄ™dzywierszowych (odstÄ™pów miÄ™dzy wierszami). Operacja zmiany odstÄ™pów pomiÄ™dzy dwoma znakami nazywana jest kerningiem. Rozróżniamy kerning ujemny (tzw. podcinanie) czyli dosuwanie do siebie znaków, które wyglÄ…dajÄ… na nienaturalnie oddalone i dodatni – odsuwanie od siebie znaków sprawiajÄ…cych wrażenie zbyt „ściÅ›niÄ™tych†tzn. poÅ‚ożonych zbyt blisko siebie. Drugim sposobem regulacji Å›wiateÅ‚ miÄ™dzyliterowych jest tracking, czyli równomierne odsuwanie, lub przysuwanie do siebie znaków w ciÄ…gu tekstu. Inkscape posiada skróty klawiaturowe przypisane do tych operacji. Podczas edycji tekstu skróty [ Alt+< ] i [ Alt+> ] zmieniajÄ… odstÄ™p miÄ™dzy literami w aktywnym wierszu obiektu tekstowego tak, że caÅ‚kowita dÅ‚ugość wiersza w aktualnym powiÄ™kszeniu zmienia siÄ™ o 1 piksel (porównaj z narzÄ™dziem „Wskaźnikâ€, gdzie te same klawisze wykonujÄ… skalowanie o rozmiarze piksela). Z reguÅ‚y, jeżeli rozmiar czcionki w obiekcie tekstowym jest wiÄ™kszy niż domyÅ›lny, prawdopodobnie bÄ™dzie korzystniej, jeÅ›li odstÄ™p miÄ™dzy literami zostanie nieco zmniejszony. Oto przykÅ‚ad: - OryginaÅ‚ - zmniejszone odlegÅ‚oÅ›ci miÄ™dzy literami - Inspiracja - Inspiracja - - + OryginaÅ‚ + zmniejszone odlegÅ‚oÅ›ci miÄ™dzy literami + Inspiracja + Inspiracja + + Wariant ze zmniejszonymi odstÄ™pami pomiÄ™dzy literami wyglÄ…da lepiej jako nagłówek, ale wciąż nie jest idealny. OdlegÅ‚oÅ›ci pomiÄ™dzy literami nie sÄ… jednakowe – na przykÅ‚ad litery „a†i „t†sÄ… za daleko od siebie, a „t†i „i†sÄ… zbyt blisko. W czcionkach o niskiej jakoÅ›ci liczba zÅ‚ych odstÄ™pów – widocznych szczególnie w czcionkach o dużych rozmiarach – jest wiÄ™ksza niż w czcionkach o wysokiej jakoÅ›ci. Zapewne w dowolnym ciÄ…gu tekstu i dowolnej czcionce znajdziesz pary liter, które zyskajÄ… na manipulacji kerningiem. - - + + Wykonanie kerningu w programie Inkscape jest bardzo Å‚atwe. Wystarczy ustawić kursor tekstowy pomiÄ™dzy literami sprawiajÄ…cymi problemy i użyć skrótu [ Alt+strzaÅ‚ki ], aby odsunąć litery od kursora w kierunku zgodnym z użytym klawiszem strzaÅ‚ki. Oto ten sam nagłówek, tym razem dopasowany rÄ™cznie w celu osiÄ…gniÄ™cia wizualnego, jednolitego pozycjonowania liter: - Zmniejszona przestrzeÅ„ miÄ™dzy literami, w niektórych parach liter rÄ™czny kerning - Inspiracja - - + Zmniejszona przestrzeÅ„ miÄ™dzy literami, w niektórych parach liter rÄ™czny kerning + Inspiracja + + Dodatkowo, oprócz przesuwania znaków w poziomie za pomocÄ… skrótu [ Alt+strzaÅ‚ka w lewo ] lub [ Alt+strzaÅ‚ka w prawo ], znaki można również przesunąć w pionie, używajÄ…c skrótu [ Alt+strzaÅ‚ka w górÄ™ ], bÄ…dź [ Alt+strzaÅ‚ka w dół ]: - Inspiracja - - + Inspiracja + + OczywiÅ›cie, zawsze można po prostu skonwertować tekst w Å›cieżkÄ™ [ Shift+Ctrl+C ] i przesunąć litery jak regularne Å›cieżki obiektów. Jednakże o wiele wygodniejsze jest zachowanie tekstu jako obiektu tekstowego – można go edytować, wypróbować różne czcionki bez usuwania kerningu oraz odstÄ™pów, a jednoczeÅ›nie zajmuje on o wiele mniej miejsca w zapisanym pliku. JedynÄ… wadÄ… tego rozwiÄ…zania jest to, że na każdej platformie systemowej, na której chce siÄ™ otworzyć ten dokument SVG, trzeba mieć zainstalowanÄ… oryginalnÄ… czcionkÄ™. - - + + Podobnie jak w przypadku regulacji odstÄ™pu miÄ™dzy literami, można w wielowierszowym obiekcie tekstowym wyregulować odstÄ™py miÄ™dzy wierszami. Wypróbuj skróty klawiaturowe [ Ctrl+Alt+< ] i [ Ctrl+Alt+> ] w dowolnym akapicie tego poradnika, by powiÄ™kszyć bÄ…dź zmniejszyć te odstÄ™py, tak aby caÅ‚kowita wysokość obiektu tekstowego zmieniaÅ‚a siÄ™ o jeden piksel w aktualnym powiÄ™kszeniu. Podobnie jak w narzÄ™dziu „Wskaźnikâ€, naciÅ›niÄ™cie klawisza [ Shift ] z dowolnym skrótem powodujÄ…cym zmianÄ™ kerningu lub trackingu sprawi, że efekt zwiÄ™kszy siÄ™ 10-krotnie. - - Edytor XML + + Edytor XML - - + + Potężnym narzÄ™dziem Inkscape'a jest edytor XML [ Shift+Ctrl+X ]. WyÅ›wietla on caÅ‚e drzewo XML dokumentu, zawsze odzwierciedlajÄ…c jego aktualny stan. Można edytować rysunek i obserwować korespondujÄ…ce z nimi zmiany w drzewie XML. Co wiÄ™cej, w edytorze XML możliwe jest edytowanie dowolnego tekstu, elementu bÄ…dź atrybutu wÄ™zÅ‚a i obserwowanie wyniku w obszarze roboczym. To najlepsze narzÄ™dzie, jakie można sobie wyobrazić do interaktywnej nauki SVG - pozwala wykonać rzeczy, które byÅ‚yby niemożliwe do zrobienia za pomocÄ… zwykÅ‚ych narzÄ™dzi edycji. - - Podsumowanie + + Podsumowanie - - + + - Ten poradnik pokazuje tylko niewielkÄ… część wszystkich możliwoÅ›ci Inkscape'a. Mamy nadziejÄ™, że ci siÄ™ spodobaÅ‚. Nie obawiaj siÄ™ eksperymentować i dzielić z innymi tym, co stworzyÅ‚eÅ›. Aby uzyskać wiÄ™cej informacji, najnowsze wersje programu i pomoc ze strony spoÅ‚ecznoÅ›ci użytkowników i deweloperów, odwiedź witrynÄ™ www.inkscape.org. + Ten poradnik pokazuje tylko niewielkÄ… część wszystkich możliwoÅ›ci Inkscape'a. Mamy nadziejÄ™, że ci siÄ™ spodobaÅ‚. Nie obawiaj siÄ™ eksperymentować i dzielić z innymi tym, co stworzyÅ‚eÅ›. Aby uzyskać wiÄ™cej informacji, najnowsze wersje programu i pomoc ze strony spoÅ‚ecznoÅ›ci użytkowników i deweloperów, odwiedź witrynÄ™ www.inkscape.org. - + @@ -533,8 +538,8 @@ rotated/scaled to match. - - Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć + + Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć diff --git a/share/tutorials/tutorial-advanced.ru.svg b/share/tutorials/tutorial-advanced.ru.svg index c72d6bb65..5dab2bd82 100644 --- a/share/tutorials/tutorial-advanced.ru.svg +++ b/share/tutorials/tutorial-advanced.ru.svg @@ -36,103 +36,103 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - + ::ПРОДВИÐУТЫЙ КУРС -bulia byak, buliabyak@users.sf.net и Josh Andler, scislac@users.sf.net - - + + + Ð’ Ñтом разделе учебника раÑÑказываетÑÑ Ð¾ том, как копировать и вÑтавлÑть объекты, изменÑть узлы, риÑовать произвольные линии и кривые Безье, производить логичеÑкие операции Ñ ÐºÐ¾Ð½Ñ‚ÑƒÑ€Ð°Ð¼Ð¸, упрощать их и работать Ñ Ð¸Ð½Ñтрументом набора текÑта. - - + + - ИÑпользуйте Ctrl+Ñтрелки, колеÑо мыши или перемещение Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ Ñредней клавишей мыши Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра текÑта. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ… знаний о Ñоздании объектов, их выделении и изменении их форм Ñмотрите урок «ОÑновы» в меню Справка > Учебник. + ИÑпользуйте Ctrl+Ñтрелки, колеÑо мыши или перемещение Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ Ñредней клавишей мыши Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра текÑта. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ… знаний о Ñоздании объектов, их выделении и изменении их форм Ñмотрите урок «ОÑновы» в меню Справка > Учебник. - - СпоÑобы вÑтавки + + СпоÑобы вÑтавки - - + + - ПоÑле того как вы Ñкопируете какой-нибудь объект, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ctrl+C, или вырежете его при помощи Ctrl+X, Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «ВÑтавить» (Ctrl+V) вÑтавит Ñкопированный объект(Ñ‹) точно под курÑор мыши или, еÑли курÑор находитÑÑ Ð·Ð° пределами окна, в центр документа. ВмеÑте Ñ Ñ‚ÐµÐ¼, находÑщийÑÑ Ð² буфере обмена объект «помнит» Ñвоё иÑходное меÑтоположение. Ð‘Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñтому, его можно вÑтавить обратно, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ «ВÑтавить на меÑто» (Ctrl+Alt+V). + ПоÑле того как вы Ñкопируете какой-нибудь объект, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ctrl+C, или вырежете его при помощи Ctrl+X, Ð¾Ð±Ñ‹Ñ‡Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° «ВÑтавить» (Ctrl+V) вÑтавит Ñкопированный объект(Ñ‹) точно под курÑор мыши или, еÑли курÑор находитÑÑ Ð·Ð° пределами окна, в центр документа. ВмеÑте Ñ Ñ‚ÐµÐ¼, находÑщийÑÑ Ð² буфере обмена объект «помнит» Ñвоё иÑходное меÑтоположение. Ð‘Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñтому, его можно вÑтавить обратно, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñƒ «ВÑтавить на меÑто» (Ctrl+Alt+V). - - + + - Команда «ВÑтавить Ñтиль» (Shift+Ctrl+V) применÑет Ñтиль (первого) объекта из буфера к выбранному в данным момент объекту или группе объектов. Стиль включает в ÑÐµÐ±Ñ Ð·Ð°Ð»Ð¸Ð²ÐºÑƒ, обводку и параметры шрифта, но не размер и не параметры фигуры (такие как количеÑтво вершин в звезде и Ñ‚.п.). + Команда «ВÑтавить Ñтиль» (Shift+Ctrl+V) применÑет Ñтиль (первого) объекта из буфера к выбранному в данным момент объекту или группе объектов. Стиль включает в ÑÐµÐ±Ñ Ð·Ð°Ð»Ð¸Ð²ÐºÑƒ, обводку и параметры шрифта, но не размер и не параметры фигуры (такие как количеÑтво вершин в звезде и Ñ‚.п.). - - + + - Ещё одна группа команд — «ВÑтавить размер» — маÑштабирует выделение до его ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ Ñкопированного объекта. ДоÑтупны Ñледующие команды: «ВÑтавить размер», «ВÑтавить ширину», «ВÑтавить выÑоту», «ВÑтавить размер раздельно», «ВÑтавить ширину раздельно» и «ВÑтавить выÑоту раздельно». + Ещё одна группа команд — «ВÑтавить размер» — маÑштабирует выделение до его ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼ Ñкопированного объекта. ДоÑтупны Ñледующие команды: «ВÑтавить размер», «ВÑтавить ширину», «ВÑтавить выÑоту», «ВÑтавить размер раздельно», «ВÑтавить ширину раздельно» и «ВÑтавить выÑоту раздельно». - - + + - Команда «ВÑтавить размер» подгонÑет размер Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ размер Ñкопированного объекта (или объектов). Команда «ВÑтавить ширину/выÑоту» маÑштабирует вÑÑ‘ выделение по горизонтали или вертикали до ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð¾Ð¹ или выÑотой Ñкопированного объекта (объектов). Эти команды учитывают фактор запертоÑти ÑÐ¾Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ñторон в панели наÑтроек инÑтрумента Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (между полÑми Ш и Ð’). ПоÑтому, когда Ñоотношение Ñторон заперто, выбранный объект маÑштабируетÑÑ Ñ Ñохранением пропорций; в противном Ñлучае Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ñторона не менÑетÑÑ. Команды, Ñодержащие в названии «раздельно», работают точно так же, Ñ Ñ‚Ð¾Ð¹ лишь разницей, что каждый объект маÑштабируетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾ до ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼/шириной/выÑотой объекта (объектов) в буфере обмена. + Команда «ВÑтавить размер» подгонÑет размер Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ размер Ñкопированного объекта (или объектов). Команда «ВÑтавить ширину/выÑоту» маÑштабирует вÑÑ‘ выделение по горизонтали или вертикали до ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð¾Ð¹ или выÑотой Ñкопированного объекта (объектов). Эти команды учитывают фактор запертоÑти ÑÐ¾Ð¾Ñ‚Ð½Ð¾ÑˆÐµÐ½Ð¸Ñ Ñторон в панели наÑтроек инÑтрумента Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (между полÑми Ш и Ð’). ПоÑтому, когда Ñоотношение Ñторон заперто, выбранный объект маÑштабируетÑÑ Ñ Ñохранением пропорций; в противном Ñлучае Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ñторона не менÑетÑÑ. Команды, Ñодержащие в названии «раздельно», работают точно так же, Ñ Ñ‚Ð¾Ð¹ лишь разницей, что каждый объект маÑштабируетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾ до ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð¼/шириной/выÑотой объекта (объектов) в буфере обмена. - - + + Ð’ Inkscape иÑпользуетÑÑ ÑиÑтемный буфер обмена, поÑтому вы можете переноÑить объекты как между разными копиÑми Inkscape, так и из Inkscape в другое приложение и обратно (при уÑловии, что Ñто другое приложение поддерживает SVG в буфере обмена). - - РиÑование произвольных линий и кривых Безье + + РиÑование произвольных линий и кривых Безье - - + + ПроÑтейший путь Ñоздать произвольную фигуру — нариÑовать её при помощи карандаша («РиÑовать произвольные контуры» в меню Ñлева (F6)): - - - - - - - - - - - + + + + + + + + + + + ЕÑли хотите получить более правильные фигуры, иÑпользуйте перо (инÑтрумент «РиÑовать кривые Безье и прÑмые линии» в меню Ñлева (Shift+F6)): - - - - - - - - - - - + + + + + + + + + + + @@ -146,33 +146,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Ð’ обоих раÑÑмотренных инÑтрументах выбранный контур Ñодержит маленькие квадратики, ÑкорÑ, на обоих концах контура. Они позволÑÑŽÑ‚ продолжить Ñтот контур (риÑÑƒÑ Ð¾Ñ‚ одного из Ñкорей) или закрыть контур (риÑÑƒÑ Ð¾Ñ‚ ÑÐºÐ¾Ñ€Ñ Ð´Ð¾ ÑкорÑ). - - Редактирование контуров + + Редактирование контуров - - + + Ð’ отличие от фигур, Ñозданных инÑтрументами фигур, перо и карандаш Ñоздают так называемые контуры. Контур — Ñто поÑледовательноÑть отрезков прÑмых линий и/или кривых Безье, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÐºÐ°Ðº и любой другой объект в Inkscape может иметь ÑобÑтвенные параметры заливки и обводки. Ð’ отличие от фигур контур может Ñвободно редактироватьÑÑ Ñмещением любого из его узлов (а не только предуÑтановленных рычагов) или перетаÑкиванием его Ñегмента. Выберите Ñтот контур и включите инÑтрумент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð² (F2): - - - + + + Ð’Ñ‹ увидите неÑколько Ñерых квадратов на контуре — узлов. Эти узлы могут быть выбраны разными ÑпоÑобами: щелчком мыши, Shift+щелчок или Ñ‚ÑнущимÑÑ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸ÐµÐ¼Â â€” точно так же, как объекты выделÑÑŽÑ‚ÑÑ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ инÑтрументом выделениÑ. Ð’Ñ‹ также можете щёлкнуть мышью по Ñегменту контура Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого выбора ÑоÑедних узлов. Выбранные узлы ÑтановÑÑ‚ÑÑ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼Ð¸ и показывают Ñвои рычаги — один или два кружка, Ñоединённых Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ узлом отрезком прÑмой линии. Клавиша ! обращает выделение узлов в текущем Ñубконтуре (или Ñубконтурах, Ñ‚.е. Ñубконтурах Ñ ÐºÐ°Ðº минимум одним выбранным узлом); Alt+! обращает веÑÑŒ контур. - - + + @@ -184,8 +184,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -197,8 +197,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -214,296 +214,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Ð’Ñ‹ также можете втÑгивать рычаги в узел при помощи комбинации Ctrl+щелчок на рычаге. ЕÑли рычаги у двух ÑоÑедних узлов втÑнуты, Ñтот Ñегмент пути будет отрезком прÑмой линии. Чтобы вытащить рычаги наружу, нужно нажать Shift+перемещение и потÑнуть рычаг в Ñторону от узла. - - Субконтуры и их объединение + + Субконтуры и их объединение - - + + Объект контура может ÑоÑтоÑть из более чем одного Ñубконтура (subpath). Субконтур — Ñто поÑледовательноÑть Ñоединённых друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ узлов. ПоÑтому, еÑли у контура больше одного Ñубконтура, то не вÑе узлы контура Ñоединены друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼. Внизу Ñлева контур ÑоÑтоит из трёх Ñубконтуров, такие же три Ñубконтура Ñправа ÑвлÑÑŽÑ‚ÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимыми объектами-контурами: - - - - - - + + + + + + Ðо контур, ÑоÑтоÑщий из Ñубконтуров, не ÑвлÑетÑÑ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð¹ объектов. Это единый объект, выделÑемый как целое. ЕÑли выбрать левый верхний объект и включить инÑтрумент правки узлов, то узлы отобразÑÑ‚ÑÑ Ð½Ð° вÑех трёх Ñубконтурах. Справа же можно редактировать только один из контуров. - - + + - Inkscape может объединÑть контуры в ÑоÑтавной контур (Ctrl+K) и разбить ÑоÑтавной контур на отдельные контуры (Shift+Ctrl+K). Опробуйте Ñти команды на приведённых выше примерах. ПоÑкольку параметры заливки и обводки у объекта индивидуальны, новообъединённый контур берёт параметры первого объекта из Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (нижнего по оÑи Z). + Inkscape может объединÑть контуры в ÑоÑтавной контур (Ctrl+K) и разбить ÑоÑтавной контур на отдельные контуры (Shift+Ctrl+K). Опробуйте Ñти команды на приведённых выше примерах. ПоÑкольку параметры заливки и обводки у объекта индивидуальны, новообъединённый контур берёт параметры первого объекта из Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (нижнего по оÑи Z). - - + + Когда объединÑÑŽÑ‚ÑÑ Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ð²Ð°ÑŽÑ‰Ð¸Ðµ друг друга контуры Ñ Ð·Ð°Ð»Ð¸Ð²ÐºÐ¾Ð¹, в меÑтах Ð¿ÐµÑ€ÐµÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð·Ð°Ð»Ð¸Ð²ÐºÐ° иÑчезает: - - - + + + Это проÑтейший ÑпоÑоб Ñоздавать объекты Ñ Ð´Ñ‹Ñ€ÐºÐ°Ð¼Ð¸ внутри. Более мощные команды по работе Ñ ÐºÐ¾Ð½Ñ‚ÑƒÑ€Ð°Ð¼Ð¸ опиÑаны чуть ниже в разделе «ЛогичеÑкие операции». - - Оконтуривание (преобразование в контур) + + Оконтуривание (преобразование в контур) - - + + Ð›ÑŽÐ±Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° или текÑтовый объект могут быть преобразованы в контур (оконтурены) (Shift+Ctrl+C). Эта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ менÑет видимоÑть объекта, но менÑет вÑе его ÑпецифичеÑкие ÑвойÑтва (Ñ‚.е. вы не можете округлить углы прÑмоугольника или редактировать текÑÑ‚), и теперь вам доÑтупно редактирование их узлов. Ðиже изображены две звезды: Ð»ÐµÐ²Ð°Ñ ÑвлÑетÑÑ Ñ„Ð¸Ð³ÑƒÑ€Ð¾Ð¹, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº Ð¿Ñ€Ð°Ð²Ð°Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð° в контур. ПереключитеÑÑŒ на инÑтрумент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð² и, выбрав объекты, Ñравните их возможноÑти: - - - - + + + + Кроме того, вы можете преобразовывать в контур обводку любого объекта. Первый объект внизу — проÑто контур (без заливки Ñ Ñ‡Ñ‘Ñ€Ð½Ð¾Ð¹ обводкой), второй же — результат дейÑÑ‚Ð²Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ Оконтурить обводку (результат — Ñ‡Ñ‘Ñ€Ð½Ð°Ñ Ð·Ð°Ð»Ð¸Ð²ÐºÐ° без обводки): - - - - ЛогичеÑкие операции + + + + ЛогичеÑкие операции - - + + Команды в меню Контур позволÑÑŽÑ‚ вам объединÑть два и более объекта, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð»Ð¾Ð³Ð¸Ñ‡ÐµÑкие операции: - ИÑходные фигуры - Сумма (Ctrl++) - РазноÑть (Ctrl+-) - ПереÑечение(Ctrl+*) - ИÑключение(Ctrl+^) - Разделить(Ctrl+/) - Разрезать контур(Ctrl+Alt+/) - - - - - - - - - - - (низ Ð¼Ð¸Ð½ÑƒÑ Ð²ÐµÑ€Ñ…) - - + ИÑходные фигуры + Сумма (Ctrl++) + РазноÑть (Ctrl+-) + ПереÑечение(Ctrl+*) + ИÑключение(Ctrl+^) + Разделить(Ctrl+/) + Разрезать контур(Ctrl+Alt+/) + + + + + + + + + + + (низ Ð¼Ð¸Ð½ÑƒÑ Ð²ÐµÑ€Ñ…) + + - Короткие имена Ñтих операций ÑÑылаютÑÑ Ð½Ð° арифметичеÑкие аналоги булевых дейÑтвий (Ñумма, разноÑть и Ñ‚.п.). Команды «РазноÑть» и «ИÑключающее ИЛИ» могут применÑтьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к двум выбранным объектам, другие команды могут применÑтьÑÑ Ðº любому количеÑтву объектов. Получаемый объект вÑегда иÑпользует параметры ÑÑ‚Ð¸Ð»Ñ (заливки и обводки) нижнего объекта. + Короткие имена Ñтих операций ÑÑылаютÑÑ Ð½Ð° арифметичеÑкие аналоги булевых дейÑтвий (Ñумма, разноÑть и Ñ‚.п.). Команды «РазноÑть» и «ИÑключающее ИЛИ» могут применÑтьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к двум выбранным объектам, другие команды могут применÑтьÑÑ Ðº любому количеÑтву объектов. Получаемый объект вÑегда иÑпользует параметры ÑÑ‚Ð¸Ð»Ñ (заливки и обводки) нижнего объекта. - - + + - ИÑпользование команды «ИÑключающее ИЛИ» выглÑдит похожим на команду «Объединить» (Ñм. выше), но разница заключаетÑÑ Ð² том, что «ИÑключающее ИЛИ» добавлÑет узлы в меÑтах переÑÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ… контуров. Разница между командами «Разделить» и «Разрезать контур» ÑоÑтоит в том, что Ð¿ÐµÑ€Ð²Ð°Ñ Ñ€Ð°Ð·Ñ€ÐµÐ·Ð°ÐµÑ‚ целоÑтноÑть нижнего объекта контуром верхнего объекта, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ñ€ÐµÐ¶ÐµÑ‚ только обводку нижнего объекта и убирает заливку (Ñто удобно Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ Ð¾Ð±Ð²Ð¾Ð´Ð¾Ðº незалитых объектов). + ИÑпользование команды «ИÑключающее ИЛИ» выглÑдит похожим на команду «Объединить» (Ñм. выше), но разница заключаетÑÑ Ð² том, что «ИÑключающее ИЛИ» добавлÑет узлы в меÑтах переÑÐµÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð·Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ… контуров. Разница между командами «Разделить» и «Разрезать контур» ÑоÑтоит в том, что Ð¿ÐµÑ€Ð²Ð°Ñ Ñ€Ð°Ð·Ñ€ÐµÐ·Ð°ÐµÑ‚ целоÑтноÑть нижнего объекта контуром верхнего объекта, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº Ð²Ñ‚Ð¾Ñ€Ð°Ñ Ñ€ÐµÐ¶ÐµÑ‚ только обводку нижнего объекта и убирает заливку (Ñто удобно Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÐ·Ð°Ð½Ð¸Ñ Ð¾Ð±Ð²Ð¾Ð´Ð¾Ðº незалитых объектов). - - Ð’Ñ‚Ñгивание и вытÑгивание + + Ð’Ñ‚Ñгивание и вытÑгивание - - + + - Inkscape может Ñжимать и раÑÑ‚Ñгивать фигуры не только менÑÑ Ð¸Ñ… размер, но и при помощи ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÑƒÑ€Ð° объекта, Ñ‚.е. ÑÐ¼ÐµÑ‰Ð°Ñ Ð¸Ñ… перпендикулÑрно контуру в каждой точке. СоответÑтвующие команды называютÑÑ Â«Ð’Ñ‚Ñнуть» (Ctrl+() и «ВытÑнуть» (Ctrl+)). Ðа риÑунке ниже в качеÑтве примера изображён изначальный контур (краÑный) и неÑколько вытÑнутых и втÑнутых копий: + Inkscape может Ñжимать и раÑÑ‚Ñгивать фигуры не только менÑÑ Ð¸Ñ… размер, но и при помощи ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚ÑƒÑ€Ð° объекта, Ñ‚.е. ÑÐ¼ÐµÑ‰Ð°Ñ Ð¸Ñ… перпендикулÑрно контуру в каждой точке. СоответÑтвующие команды называютÑÑ Â«Ð’Ñ‚Ñнуть» (Ctrl+() и «ВытÑнуть» (Ctrl+)). Ðа риÑунке ниже в качеÑтве примера изображён изначальный контур (краÑный) и неÑколько вытÑнутых и втÑнутых копий: - - - - - - - - - + + + + + + + + + - Сами команды «ВтÑнуть» и «ВытÑнуть» проÑто Ñоздают контуры (Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·ÑƒÑ Ð¸Ð·Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ объект в путь, еÑли он не ÑвлÑетÑÑ Ñ‚Ð°ÐºÐ¾Ð²Ñ‹Ð¼). Чаще, более удобным ÑвлÑетÑÑ Ð¸Ñпользование команды «ДинамичеÑÐºÐ°Ñ Ð²Ñ‚Ñжка» (Ctrl+J). Эта команда Ñоздаёт объект Ñ Ñ€Ñ‹Ñ‡Ð°Ð³Ð¾Ð¼ (узел, как у обычных фигур), который контролирует раÑÑтоÑние ÑмещениÑ. Чтобы понÑть, что к чему, выберите нижний объект, переключитеÑÑŒ на инÑтрумент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð² и подвигайте рычаг: + Сами команды «ВтÑнуть» и «ВытÑнуть» проÑто Ñоздают контуры (Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·ÑƒÑ Ð¸Ð·Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¹ объект в путь, еÑли он не ÑвлÑетÑÑ Ñ‚Ð°ÐºÐ¾Ð²Ñ‹Ð¼). Чаще, более удобным ÑвлÑетÑÑ Ð¸Ñпользование команды «ДинамичеÑÐºÐ°Ñ Ð²Ñ‚Ñжка» (Ctrl+J). Эта команда Ñоздаёт объект Ñ Ñ€Ñ‹Ñ‡Ð°Ð³Ð¾Ð¼ (узел, как у обычных фигур), который контролирует раÑÑтоÑние ÑмещениÑ. Чтобы понÑть, что к чему, выберите нижний объект, переключитеÑÑŒ на инÑтрумент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð² и подвигайте рычаг: - - - + + + Подобный объект Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкой втÑжкой запоминает изначальный контур, так что не бойтеÑь — он не «поломаетÑÑ» от ваших Ñмещений. ЕÑли вам больше не нужно, чтобы объект был корректируем, вы вÑегда можете преобразовать его обратно в контур. - - + + Ещё одна ÑƒÐ´Ð¾Ð±Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Â â€” Ñто «СвÑÐ·Ð°Ð½Ð½Ð°Ñ Ð²Ñ‚Ñжка», ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñхожа Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸Ñ‡ÐµÑкой, но отличаетÑÑ Ñ‚ÐµÐ¼, что ÑвÑзанные контуры оÑтаютÑÑ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÐµÐ¼Ñ‹Ð¼Ð¸. Ð’Ñ‹ можете иметь Ñколь угодно большое количеÑтво ÑвÑзанных втÑжек от одного иÑходного контура. Ðиже показан контур-иÑточник (краÑный), одна из привÑзанных втÑжек имеет чёрную обводку без заливки, другаÑ — чёрную заливку без обводки. - - + + - Выберите краÑный объект и подвигайте его узлы; понаблюдайте за реакцией привÑзанных объектов. Теперь выберите один из привÑзанных объектов и подвигайте рычаг. Ð’ заключение обратите внимание на поведение привÑзанных объектов в момент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñточника и на то, что раздельное редактирование привÑзанных объектов оÑтавлÑет их привÑзанными к иÑточнику. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Упрощение + + Упрощение - - + + - ОÑновное применение команды «УпроÑтить» (Ctrl+L) — Ñто Ñокращение количеÑтва узлов у контура при Ñохранении его иÑходной фигуры (по возможноÑти). Это может быть полезным Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚ÑƒÑ€Ð¾Ð², Ñозданных карандашом, так как карандаш иногда Ñоздаёт Ñлишком много узлов. Ð›ÐµÐ²Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° на нижнем риÑунке Ñоздана при помощи карандаша, а праваÑ — Ñто ÐºÐ¾Ð¿Ð¸Ñ Ð»ÐµÐ²Ð¾Ð¹ Ñ Ð¿Ð¾Ñледующим упрощением. У иÑходного контура было 28 узлов, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº упрощённый контур глаже и Ñодержит вÑего 17 узлов (Ñто упрощает работу Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð¼ при редактировании узлов). + ОÑновное применение команды «УпроÑтить» (Ctrl+L) — Ñто Ñокращение количеÑтва узлов у контура при Ñохранении его иÑходной фигуры (по возможноÑти). Это может быть полезным Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚ÑƒÑ€Ð¾Ð², Ñозданных карандашом, так как карандаш иногда Ñоздаёт Ñлишком много узлов. Ð›ÐµÐ²Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° на нижнем риÑунке Ñоздана при помощи карандаша, а праваÑ — Ñто ÐºÐ¾Ð¿Ð¸Ñ Ð»ÐµÐ²Ð¾Ð¹ Ñ Ð¿Ð¾Ñледующим упрощением. У иÑходного контура было 28 узлов, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº упрощённый контур глаже и Ñодержит вÑего 17 узлов (Ñто упрощает работу Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð¼ при редактировании узлов). - - - - + + + + - КоличеÑтво упрощений (так называемый порог) завиÑит от размера выделениÑ. Следовательно, еÑли вы выберете путь одновременно Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ объектом, то контур будет упрощатьÑÑ Ñ€ÐµÐ·Ñ‡Ðµ, нежели еÑли бы он был выбран один. Более того, команда УпроÑтить уÑкорÑемаÑ. Это значит, что еÑли быÑтро (один раз в полÑекунды) нажимать Ctrl+L неÑколько раз подрÑд, порог ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ñ‚ÑÑ (поÑле небольшой паузы порог ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ð½Ñ‘Ñ‚ÑÑ Ð² изначальное значение). С иÑпользованием Ñтого уÑÐºÐ¾Ñ€Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ легко получить необходимое упрощение в каждом конкретном Ñлучае. + КоличеÑтво упрощений (так называемый порог) завиÑит от размера выделениÑ. Следовательно, еÑли вы выберете путь одновременно Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð¼ объектом, то контур будет упрощатьÑÑ Ñ€ÐµÐ·Ñ‡Ðµ, нежели еÑли бы он был выбран один. Более того, команда УпроÑтить уÑкорÑемаÑ. Это значит, что еÑли быÑтро (один раз в полÑекунды) нажимать Ctrl+L неÑколько раз подрÑд, порог ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ñ‚ÑÑ (поÑле небольшой паузы порог ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ð½Ñ‘Ñ‚ÑÑ Ð² изначальное значение). С иÑпользованием Ñтого уÑÐºÐ¾Ñ€Ð¸Ñ‚ÐµÐ»Ñ Ð¾Ñ‡ÐµÐ½ÑŒ легко получить необходимое упрощение в каждом конкретном Ñлучае. - - + + - Помимо ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ñ€Ð°Ð½Ð´Ð°ÑˆÐ½Ñ‹Ñ… линий команда УпроÑтить может быть иÑпользована Ð´Ð»Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… творчеÑких Ñффектов. ЗачаÑтую, ÑƒÐ³Ð»Ð¾Ð²Ð°Ñ‚Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° выигрывает от небольшого упрощениÑ, Ð¿Ñ€Ð¸Ð¾Ð±Ñ€ÐµÑ‚Ð°Ñ Ð±Ð¾Ð»ÐµÐµ жизненную форму за Ñчёт натурального иÑкажениÑ, Ñглаживающего оÑтрые углы и Ñоздающего когда Ñтильный, а когда и проÑто забавный Ñффект. Ðиже приведён пример, в котором картинка поÑле иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ УпроÑтить выглÑдит значительно лучше: + Помимо ÑÐ³Ð»Ð°Ð¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ñ€Ð°Ð½Ð´Ð°ÑˆÐ½Ñ‹Ñ… линий команда УпроÑтить может быть иÑпользована Ð´Ð»Ñ Ñ€Ð°Ð·Ð½Ñ‹Ñ… творчеÑких Ñффектов. ЗачаÑтую, ÑƒÐ³Ð»Ð¾Ð²Ð°Ñ‚Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° выигрывает от небольшого упрощениÑ, Ð¿Ñ€Ð¸Ð¾Ð±Ñ€ÐµÑ‚Ð°Ñ Ð±Ð¾Ð»ÐµÐµ жизненную форму за Ñчёт натурального иÑкажениÑ, Ñглаживающего оÑтрые углы и Ñоздающего когда Ñтильный, а когда и проÑто забавный Ñффект. Ðиже приведён пример, в котором картинка поÑле иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ УпроÑтить выглÑдит значительно лучше: - Оригинал - Лёгкое упрощение - Серьёзное упрощение - - - - - Создание текÑта + Оригинал + Лёгкое упрощение + Серьёзное упрощение + + + + + Создание текÑта - - + + Inkscape умеет Ñоздавать длинные и Ñложные текÑты, но также прекраÑно подходит Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ¸Ñ… текÑтовых объектов, вроде баннеров, логотипов, диаграмм, Ñтикеток, заголовков и Ñ‚.п. Этот раздел урока даёт начальные Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ возможноÑÑ‚ÑÑ… инÑтрумента Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ñ‚ÐµÐºÑтом. - - + + Создать текÑтовый объект так же легко, как выбрать инÑтрумент Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼ (кнопка Ñлева «Создавать и править текÑтовые объекты» (F8)). Щёлкните мышью по любой облаÑти документа и введите текÑÑ‚. ЕÑть два ÑпоÑоба изменить шрифт, его Ñтиль, размер и наклон. Первый, наиболее очевидный — выделить текÑÑ‚ и изменить его параметры через панель наÑтроек инÑтрумента ТекÑÑ‚. Второй — открыть диалог ТекÑÑ‚ и шрифт (Shift+Ctrl+T). Ð’ Ñтом диалоге еÑть вкладка ТекÑÑ‚, в которой вы можете редактировать выбранный текÑÑ‚. Иногда Ñто удобнее, чем редактировать его в рамке на холÑте (заÑлуживает отдельного Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ñ‚Ð¾, что в Ñтом окне работает автоматичеÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ° орфографии). - - + + Как и другие инÑтрументы, инÑтрумент ТекÑÑ‚ может выбирать объекты Ñвоего типа — текÑтовые объекты — поÑтому, вы можете щелчком мыши выбрать текÑтовый объект и, уÑтановив курÑор, начать изменÑть текÑÑ‚ (например, Ñтот абзац). - - + + Одно из Ñамых обыкновенных дейÑтвий в текÑтовом дизайне  — Ñто регулирование раÑÑтоÑÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ буквами и линиÑми. Ð’ Inkscape Ð´Ð»Ñ Ñтого еÑть горÑчие клавиши. Ð’ момент Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑта нажатие Alt+< и Alt+> изменит межÑимвольный интервал на Ñтой линии текÑтового объекта, так что длина линии изменитÑÑ Ð½Ð° один пикÑел Ñтого маÑштаба (как и при работе Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼Ð¸ выделениÑми, Ñти кнопки отвечают за попикÑельное изменение размера). Как правило, еÑли кегль шрифта больше изначального, небольшое Ñужение раÑÑтоÑÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ буквами украÑит внешний вид документа. Вот пример: - Оригинал - МежÑимвольное раÑÑтоÑние уменьшено - Вдохновение - Вдохновение - - + Оригинал + МежÑимвольное раÑÑтоÑние уменьшено + Вдохновение + Вдохновение + + Суженный вариант выглÑдит немного лучше, но по прежнему не идеально: межÑимвольное раÑÑтоÑние не одинаково, например буквы "a" и "t" Ñлишком далеки друг от друга, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº "t" и "i" Ñлишком близки. КоличеÑтво подобных изъÑнов (оÑобенно заметных при больших кеглÑÑ… шрифта) больше у шрифтов низкого качеÑтва, нежели чем у шрифтов выÑокого качеÑтва. Ðо, чеÑтно говорÑ, в любом текÑте Ñ Ð»ÑŽÐ±Ñ‹Ð¼ шрифтом вы, вероÑтно, найдёте пары букв, кернинг которых можно было бы улучшить. - - + + Ð’ Inkscape вноÑить подобные коррекции дейÑтвительно проÑто. ПомеÑтите курÑор текÑтового инÑтрумента между раздражающими Ñимволами и иÑпользуйте Alt+Ñтрелки Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð±ÑƒÐºÐ² Ñправа от курÑора. Ðиже показан тот же заголовок, но уже Ñ Ñ€ÑƒÑ‡Ð½Ð¾Ð¹ коррекцией: - МежÑимвольное раÑÑтоÑние уменьшено, кернинг некоторых пар Ñимволов изменён вручную - Вдохновение - - + МежÑимвольное раÑÑтоÑние уменьшено, кернинг некоторых пар Ñимволов изменён вручную + Вдохновение + + Ð’ дополнение к горизонтальному Ñмещению Ñимволов комбинациÑми Alt+Ð»ÐµÐ²Ð°Ñ Ñтрелка или Alt+Ð¿Ñ€Ð°Ð²Ð°Ñ Ñтрелка вы также можете Ñмещать Ñимволы по вертикали комбинациÑми Alt+верхнÑÑ Ñтрелка или Alt+нижнÑÑ Ñтрелка: - Вдохновение - - + Вдохновение + + Конечно, вы можете преобразовать Ñвой текÑÑ‚ в контур (Shift+Ctrl+C) и передвигать буквы как обычные объекты контура. Ðо разумнее оÑтавлÑть текÑÑ‚ текÑтом: он будет редактируемым, вы Ñможете Ñменить шрифт, не терÑÑ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¹ вручную кернинг, да и Ñам текÑÑ‚ занимает меньше меÑта в Ñохранённом файле. ЕдинÑтвенный Ð¼Ð¸Ð½ÑƒÑ ÑоÑтоит в том, что необходимо иметь иÑходный шрифт в каждой ÑиÑтеме, где Ñтот документ SVG будет открыт. - - + + Подобно регулированию межÑимвольного интервала вы можете регулировать межÑтрочный интервал в многоÑтрочных текÑтовых объектах. Опробуйте комбинации клавиш Ctrl+Alt+< и Ctrl+Alt+> на любом из абзацев Ñтого учебника. Заметим, что от каждого Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¾Ð±Ñ‰Ð°Ñ Ð´Ð»Ð¸Ð½Ð° текÑтового объекта менÑетÑÑ Ð½Ð° один пикÑел Ñтого маÑштаба. Как и при обычном выделении, нажатие Shift Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸ÐµÐ¹ клавиш, менÑющих межÑтрочный или межÑимвольный интервалы, увеличивает Ñмещение в 10 раз. - - Редактор XML + + Редактор XML - - + + Самый мощный инÑтрумент Inkscape — Ñто XML-редактор (Shift+Ctrl+X). Он полноÑтью отображает XML-дерево документа, вÑегда Ð¾Ñ‚Ñ€Ð°Ð¶Ð°Ñ Ñ€ÐµÐ°Ð»ÑŒÐ½Ð¾Ðµ ÑоÑтоÑние. Ð’Ñ‹ можете редактировать Ñвои риÑунки и Ñмотреть на Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² дереве XML. Более того, вы можете редактировать любой текÑÑ‚, Ñлемент или атрибут узла в XML-редакторе и видеть результат дейÑтвий на холÑте. Это лучший инÑтрумент, какой только можно предÑтавить Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ð³Ð¾ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸Ñ SVG, и он позволÑет выполнÑть такие хитроÑти, которые не Ñделать обычными инÑтрументами Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. - - Заключение + + Заключение - - + + - Этот раздел учебника раÑÑказал лишь о малой чаÑти возможноÑтей Inkscape. Мы надеемÑÑ, что чтение было увлекательным. Ðе бойтеÑÑŒ ÑкÑпериментировать и показывать Ñвои работы. ПожалуйÑта, заходите на www.inkscape.org за дополнительной информацией, Ñвежими верÑиÑми программы и помощью ÑообщеÑтва пользователей и разработчиков. + Этот раздел учебника раÑÑказал лишь о малой чаÑти возможноÑтей Inkscape. Мы надеемÑÑ, что чтение было увлекательным. Ðе бойтеÑÑŒ ÑкÑпериментировать и показывать Ñвои работы. ПожалуйÑта, заходите на www.inkscape.org за дополнительной информацией, Ñвежими верÑиÑми программы и помощью ÑообщеÑтва пользователей и разработчиков. - + @@ -533,9 +538,9 @@ rotated/scaled to match. - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх diff --git a/share/tutorials/tutorial-advanced.sk.svg b/share/tutorials/tutorial-advanced.sk.svg index 6be1ca5c5..4a0d24cd1 100644 --- a/share/tutorials/tutorial-advanced.sk.svg +++ b/share/tutorials/tutorial-advanced.sk.svg @@ -36,474 +36,449 @@ - - Na posunutie Äalej použite Ctrl+šípka dolu + + Na posunutie Äalej použite Ctrl+šípka dolu - + ::POKROÄŒILÉ -bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - - + + + Tento návod pokrýva kopírovanie a vkladanie, upravovanie uzlov, kreslenie voľnou rukou a bézierovych kriviek, manipuláciu s cestami, logické operácie, posunutie a nástroj Text. - - + + - Stránku môžete posúvaÅ¥ Äalej pomocou Ctrl+šípok, kolieska myÅ¡i alebo Å¥ahaním stredným tlaÄidlom myÅ¡i. Základy vytvárania, vyberania a transformácií objektov nájdete v návode Základy, kam sa dostanete z ponuky Pomocník > Návody. + Stránku môžete posúvaÅ¥ Äalej pomocou Ctrl+šípok, kolieska myÅ¡i alebo Å¥ahaním stredným tlaÄidlom myÅ¡i. Základy vytvárania, vyberania a transformácií objektov nájdete v návode Základy, kam sa dostanete z ponuky Pomocník > Návody. - - Techniky vkladania + + Techniky vkladania - - + + - Po tom, Äo skopírujete niektoré z objektov pomocou Ctrl+C alebo vystrihnete pomocou Ctrl+X, príkazom VložiÅ¥ (Ctrl+V) prilepíte skopírované objekty na miesto, kde sa nachádza ukazovateľ myÅ¡i alebo ak je tento mimo okna, do stredu okna dokumentu. AvÅ¡ak objekt v schránke si stále pamätá pôvodné miesto, odkiaľ bol skopírovaný a môžete ho tam prilepiÅ¥ späť pomocou VložiÅ¥ na miesto (Ctrl+Alt+V). + Po tom, Äo skopírujete niektoré z objektov pomocou Ctrl+C alebo vystrihnete pomocou Ctrl+X, príkazom VložiÅ¥ (Ctrl+V) prilepíte skopírované objekty na miesto, kde sa nachádza ukazovateľ myÅ¡i alebo ak je tento mimo okna, do stredu okna dokumentu. AvÅ¡ak objekt v schránke si stále pamätá pôvodné miesto, odkiaľ bol skopírovaný a môžete ho tam prilepiÅ¥ späť pomocou VložiÅ¥ na miesto (Ctrl+Alt+V). - - + + - Iný príkaz, VložiÅ¥ Å¡týl (Shift+Ctrl+V), použije Å¡týl (prvého) objektu zo schránky na aktuálny výber. Takto vložený „štýl“ zahŕňa výplň, Å¥ah a nastavenia písma, ale nie tvar, veľkosÅ¥ Äi parametre Å¡pecifické danému typu tvaru, ako napríklad poÄet lúÄov hviezdy. + Iný príkaz, VložiÅ¥ Å¡týl (Shift+Ctrl+V), použije Å¡týl (prvého) objektu zo schránky na aktuálny výber. Takto vložený „štýl“ zahŕňa výplň, Å¥ah a nastavenia písma, ale nie tvar, veľkosÅ¥ Äi parametre Å¡pecifické danému typu tvaru, ako napríklad poÄet lúÄov hviezdy. - - + + - ÄŽalÅ¡ia skupina príkazov na vloženie, VložiÅ¥ veľkosÅ¥, mení veľkosÅ¥ výberu tak, aby zodpovedala veľkosti objektu v schránke. Pre vkladanie veľkosti je niekoľko príkazov: VložiÅ¥ veľkosÅ¥, VložiÅ¥ šírku, VložiÅ¥ výšku, VložiÅ¥ veľkosÅ¥ samostatne, VložiÅ¥ výšku samostatne, VložiÅ¥ šírku samostatne. + ÄŽalÅ¡ia skupina príkazov na vloženie, VložiÅ¥ veľkosÅ¥, mení veľkosÅ¥ výberu tak, aby zodpovedala veľkosti objektu v schránke. Pre vkladanie veľkosti je niekoľko príkazov: VložiÅ¥ veľkosÅ¥, VložiÅ¥ šírku, VložiÅ¥ výšku, VložiÅ¥ veľkosÅ¥ samostatne, VložiÅ¥ výšku samostatne, VložiÅ¥ šírku samostatne. - - + + - VložiÅ¥ veľkosÅ¥ mení veľkosÅ¥ celého výberu tak, aby zodpovedala celkovej veľkosti objektov v schránke. VložiÅ¥ šírku/VložiÅ¥ výšku menia veľkosÅ¥ celého výberu vodorovne resp. zvisle tak, aby zodpovedala celkovej veľkosti objektov v schránke. Tieto príkazy ctia prepínaÄ zachovania pomeru na Ovládacom paneli nástroja Výber (medzi poľami Å  a V), takže keÄ je zámok stlaÄený, druhý rozmer objektu sa mení v rovnakom pomere, inak sa druhý rozmer nemení. Príkazy, ktoré majú v názve „samostatne“, fungujú podobne ako tie hore opísané, ibaže menia mierku každého z objektov samostatne tak, aby zodpovedali veľkosti/výške/šírke objektov v schránke. + VložiÅ¥ veľkosÅ¥ mení veľkosÅ¥ celého výberu tak, aby zodpovedala celkovej veľkosti objektov v schránke. VložiÅ¥ šírku/VložiÅ¥ výšku menia veľkosÅ¥ celého výberu vodorovne resp. zvisle tak, aby zodpovedala celkovej veľkosti objektov v schránke. Tieto príkazy ctia prepínaÄ zachovania pomeru na Ovládacom paneli nástroja Výber (medzi poľami Å  a V), takže keÄ je zámok stlaÄený, druhý rozmer objektu sa mení v rovnakom pomere, inak sa druhý rozmer nemení. Príkazy, ktoré majú v názve „samostatne“, fungujú podobne ako tie hore opísané, ibaže menia mierku každého z objektov samostatne tak, aby zodpovedali veľkosti/výške/šírke objektov v schránke. - - + + Schránka funguje v rámci celého systému - môžete kopírovaÅ¥ a vkladaÅ¥ objekty medzi rôznymi inÅ¡tanciami Inkscape a inými aplikáciami (ktoré musia byÅ¥ schopné pracovaÅ¥ so SVG v schránke). - - Kreslenie voľnou rukou a bežné cesty + + Kreslenie voľnou rukou a bežné cesty - - + + Najjednoduchší spôsob ako vytvoriÅ¥ ľubovoľný tvar je nakresliÅ¥ ho nástrojom Ceruzka (kreslenie voľnou rukou, F6): - - - - - - - - - - - + + + + + + + + + + + Ak chcete pravidelnejÅ¡ie tvary, použite nástroj Pero (bézierove krivky, Shift+F6): - - - - - - - - - - - + + + + + + + + + + + - With the Pen tool, each click creates a sharp node without any curve -handles, so a series of clicks produces a sequence of straight line segments. -click and drag creates a smooth Bezier node with two collinear opposite -handles. Press Shift while dragging out a handle to rotate only one -handle and fix the other. As usual, Ctrl limits the direction of either -the current line segment or the Bezier handles to 15 degree increments. Pressing -Enter finalizes the line, Esc cancels it. To cancel -only the last segment of an unfinished line, press Backspace. - + S nástrojom Pero každým kliknutím vytvoríte ostrý uzol bez úchopov kriviek, takže postupnosÅ¥ kliknutí vytvorí postupnosÅ¥ úseÄiek. Kliknutím a Å¥ahaním vytvoríte hladký bézierov uzol s dvomi kolineárnymi úchopmi oproti sebe. StlaÄte Shift poÄas vyÅ¥ahovania úchopu, Äím otoÄíte iba jeden z úchopov a zafixujete ten druhý. Ako zvyÄajne, Ctrl obmedzuje smer každej z vytváraných úseÄiek alebo bézierovych úchopov na násobky 15 stupňov. StlaÄením Enter ukonÄíte Äiaru, pomocou Esc ju zrušíte. Ak chcete zruÅ¡iÅ¥ iba posledný úsek nedokonÄenej Äiary, stlaÄte Backspace. - - + + Pri kreslení voľnou rukou aj pri kreslení bézierovych kriviek sú na momentálne vybranej ceste zobrazené malé Å¡tvorcové kotvy. Tieto kotvy vám umožňujú pokraÄovaÅ¥ v ceste (kreslením z jednej z kotiev) alebo ju uzavrieÅ¥ (kreslením od jednej kotvy k druhej) namiesto vytvorenia novej cesty. - - Upravovanie ciest + + Upravovanie ciest - - + + Na rozdiel od tvarov vytvorených pomocou nástrojov tvarov nástroje Pero a Ceruzka vytvárajú to, Äo sa nazýva cesty. Cesta je postupnosÅ¥ úseÄiek a/alebo bézierovych kriviek, ktoré môžu maÅ¥, ako akýkoľvek iný objekt v Inkscape, ľubovoľné vlastnosti výplne a Å¥ahu. Ale na rozdiel od tvarov, cestu je možné voľne upravovaÅ¥ Å¥ahaním ktoréhokoľvek z jej uzlov (nie iba preddefinované úchopy) alebo priamo Å¥ahaním úseku cesty. Vyberte túto cestu a vyberte nástroj Uzol (F2): - - - + + + Na ceste uvidíte niekoľko Å¡edých Å¡tvorcových uzlov. Tieto uzly je možné vybraÅ¥ kliknutím, Shift+kliknutím alebo Å¥ahaním gumovej pásky - presne rovnako ako sa vyberajú objekty pomocou nástroja Výber. Tiež môžete kliknúť na úsek cesty, Äím sa automaticky vyberú priľahlé uzly. Vybrané uzly sa vysvietia a zobrazia sa ich úchopy uzlov - jeden alebo dva malé krúžky pripojené ku každému vybranému uzlu priamymi Äiarami. Kláves ! invertuje výber uzlov na aktuálnej podceste (t.j. podcesty s aspoň jedným vybraným uzlom); Alt+! invertuje celú cestu. - - + + - Paths are edited by dragging their nodes, node handles, or directly -dragging a path segment. (Try to drag some nodes, handles, and path segments of the -above path.) Ctrl works as usual to restrict movement and rotation. The arrow -keys, Tab, [, ], <, > keys with their modifiers all work just as they do in selector, -but apply to nodes instead of objects. You can add nodes anywhere on a path by -either double clicking or by Ctrl+Alt+click at the desired location. - + Cesty sa upravujú Å¥ahaním za ich úchopy, úchopy uzlov alebo Å¥ahaním úseku cesty. (Skúste Å¥ahaÅ¥ úchopy, úchopy uzlov a úseky hore oznaÄenej cesty.) Ctrl funguje ako obyÄajne na obmedzenie pohybu a otáÄania. Klávesy šípok,Tab, [, ], < a > aj so svojimi modifikátormi fungujú rovnako ako pri nástroji Výber, ale operácie sa týkajú uzlov namiesto objektov. Kdekoľvek na ceste môžete pridávaÅ¥ uzly buÄ dvojitým kliknutím alebo Ctrl+Alt+kliknutím na požadované miesto. - - + + - You can delete nodes with Del or Ctrl+Alt+click. When -deleting nodes it will try to retain the shape of the path, if you desire for the -handles of the adjacent nodes to be retracted (not retaining the shape) you can -delete with Ctrl+Del. Additionally, you can duplicate (Shift+D) -selected nodes. The path can be broken (Shift+B) at the selected nodes, or if you -select two endnodes on one path, you can join them (Shift+J). - + Uzly môžete zmazaÅ¥ pomocou klávesu Del alebo Ctrl+Alt+kliknutím. KeÄ zmažete uzol, Inkscape sa pokúsi zachovaÅ¥ tvar cesty. Ak chcete, aby sa úchopy priľahlých uzlov stiahli (aby sa tvar nezachoval), vykonajte zmazanie s Ctrl+Del. Naviac môžete zdvojovaÅ¥ (Shift+D) vybrané uzly. Cesty je možné rozdeliÅ¥ (Shift+B) vo zvolených uzloch alebo ak vyberiete dva koncové uzly cesty, môžete ich spojiÅ¥ (Shift+J). - - + + - A node can be made cusp (Shift+C), which means -its two handles can move independently at any angle to each other; -smooth (Shift+S), which means its handles are -always on the same straight line (collinear); symmetric -(Shift+Y), which is the same as smooth, but the handles also have the -same length; and auto-smooth (Shift+A), a special -node that automatically adjusts the handles of the node and surrounding auto-smooth nodes -to maintain a smooth curve. When you switch the type of node, you can preserve the position -of one of the two handles by hovering your mouse over it, so that only the other handle is -rotated/scaled to match. - + Z uzla je možné vytvoriÅ¥ hrotové ovládanie (Shift+C), Äo znamená, že jeho dva úchopy sa môžu pohybovaÅ¥ nezávisle na uhle medzi nimi; hladké (Shift+S), Äo znamená, že jeho dva úchopy sú vždy na jednej rovnej Äiare (kolineárne); symetrické (Shift+Y), Äo je to isté ako hladké, ale úchopy majú aj rovnakú dĺžku; a auto-hladké (Shift+A), Äo je Å¡peciálny uzol, ktorý automaticky prispôsobí úchopy uzla a okolné auto-hladké uzly tak, aby bola zachovaná hladká krivka. KeÄ prepnete typ uzla, môžete zachovaÅ¥ polohu jedného z dvoch úchopov tým, že nad ňou podržíte myÅ¡, takže iba druhý úchop sa otoÄí alebo sa zmení jeho dĺžka. - - + + Tiež môžete celkom stiahnuÅ¥ úchop uzla tým, že naň Ctrl+kliknete. Ak majú dva susediace uzly stiahnuté úchopy, úsek cesty medzi nimi je rovná úseÄka. Stiahnutý úchop uzla môžete vytiahnuÅ¥ Shift+Å¥ahaním z uzla. - - Podcesty a kombinovanie + + Podcesty a kombinovanie - - + + Objekt cesty môže obsahovaÅ¥ viac ako jednu podcestu. Podcesta je postupnosÅ¥ navzájom spojených uzlov. (Preto ak má cesta viac ako jednu podcestu, nie vÅ¡etky jej uzly sú navzájom spojené.) Dolu vľavo patria tri podcesty jednej zloženej ceste. Rovnaké tri podcesty vpravo sú nezávislé objekty ciest. - - - - - - + + + + + + VÅ¡imnite si, že zložená cesta nie je to isté ako skupina. Je to jediný objekt, ktorý je možné vybraÅ¥ iba ako celok. KeÄ vyberiete objekt vľavo hore a vyberiete nástroj Uzol, uvidíte uzly zobrazené na vÅ¡etkých troch podcestách. Napravo môžete upravovaÅ¥ po uzly iba jednej cesty naraz. - - + + - Inkscape dokáže KombinovaÅ¥ cesty do zloženej cesty (Ctrl+K) a RozdeliÅ¥ zloženú cestu na samostatné cesty (Shift+Ctrl+K). Skúste si tieto príkazy na príkladoch vyššie. KeÄže objekt môže maÅ¥ iba jednu výplň a Å¥ah, nová zložená cesta prevezme Å¡týl prvého (najnižšieho vo vertikálnom poradí) z kombinovaných objektov. + Inkscape dokáže KombinovaÅ¥ cesty do zloženej cesty (Ctrl+K) a RozdeliÅ¥ zloženú cestu na samostatné cesty (Shift+Ctrl+K). Skúste si tieto príkazy na príkladoch vyššie. KeÄže objekt môže maÅ¥ iba jednu výplň a Å¥ah, nová zložená cesta prevezme Å¡týl prvého (najnižšieho vo vertikálnom poradí) z kombinovaných objektov. - - + + KeÄ skombinujete prekrývajúce sa cesty výplňou, zvyÄajne sa výplň stratí v oblastiach, kde sa cesty prekrývajú: - - - + + + Toto je najjednoduchší spôsob ako vytváraÅ¥ objekty s dierami. VýkonnejÅ¡ie príkazy na prácu s cestami nájdete v Äasti „logické operácie“. - - Konvertovanie na cestu + + Konvertovanie na cestu - - + + Akýkoľvek tvar alebo textový objekt je možné konvertovaÅ¥ na cestu (Shift+Ctrl+C). Táto operácia nemení vzhľad objektu, ale odstraňuje vÅ¡etky možnosti Å¡pecifické pre jeho typ (napr. nemôžete zaobľovaÅ¥ rohy obdĺžnika alebo upravovaÅ¥ text). Namiesto toho teraz môžete upravovaÅ¥ jeho uzly. Tu sú dve hviezdy - tá vľavo je tvar a tá vpravo je konvertovaná na cestu. Vyberte nástroj Uzol a porovnajte, ako je možné ich upravovaÅ¥, keÄ sú vybrané: - - - - + + + + Naviac môžete konvertovaÅ¥ na cestu („obrys“) Å¥ah akéhokoľvek objektu. Prvý objekt dolu je pôvodná cesta (bez výplne, Äierny Å¥ah), zatiaľ Äo druhá je výsledkom príkazu Ťah na cestu (Äierna výplň, žiadny Å¥ah): - - - - Logické operácie + + + + Logické operácie - - + + Príkazy v ponuke Cesta vám umožňujú kombinovaÅ¥ dva alebo viac objektov pomocou logických operácií: - Pôvodné tvary - Zjednotenie (Ctrl++) - Rozdiel (Ctrl+-) - Prienik(Ctrl+*) - VylúÄenie(Ctrl+^) - Rozdelenie(Ctrl+/) - OrezaÅ¥ cestu(Ctrl+Alt+/) - - - - - - - - - - - (vrch mínus spodok) - - + Pôvodné tvary + Zjednotenie (Ctrl++) + Rozdiel (Ctrl+-) + Prienik(Ctrl+*) + VylúÄenie(Ctrl+^) + Rozdelenie(Ctrl+/) + OrezaÅ¥ cestu(Ctrl+Alt+/) + + + + + + + + + + + (vrch mínus spodok) + + - Klávesové skratky týchto príkazov pripomínajú aritmetické náprotivky logických operácií (zjednotenie je súÄet, rozdiel je odÄítanie atÄ.). Rozdiel a VylúÄenie je možné použiÅ¥ iba na dva vybrané objekty. Ostatné operácie dokážu spracovaÅ¥ ľubovoľný poÄet naraz vybraných objektov. Výsledok vždy bude maÅ¥ Å¡týl spodného objektu. + Klávesové skratky týchto príkazov pripomínajú aritmetické náprotivky logických operácií (zjednotenie je súÄet, rozdiel je odÄítanie atÄ.). Rozdiel a VylúÄenie je možné použiÅ¥ iba na dva vybrané objekty. Ostatné operácie dokážu spracovaÅ¥ ľubovoľný poÄet naraz vybraných objektov. Výsledok vždy bude maÅ¥ Å¡týl spodného objektu. - - + + - Výsledok príkazu VylúÄenie vyzerá podobne ako KombinovaÅ¥ (pozri vyššie), ale líšia sa v tom, že VylúÄenie pridáva ÄalÅ¡ie uzly tam, kde sa pôvodné cesty pretínajú. Rozdiel medzi príkazmi Rozdelenie a OrezaÅ¥ cestu je taký, že prvý z nich vyreže celý spodný objekt podľa cesty vrchného objektu, kým druhý iba vyreže Å¥ah spodného objektu a odstráni jeho výplň (to je vhodné na rezanie Å¥ahov bez výplne na Äasti). + Výsledok príkazu VylúÄenie vyzerá podobne ako KombinovaÅ¥ (pozri vyššie), ale líšia sa v tom, že VylúÄenie pridáva ÄalÅ¡ie uzly tam, kde sa pôvodné cesty pretínajú. Rozdiel medzi príkazmi Rozdelenie a OrezaÅ¥ cestu je taký, že prvý z nich vyreže celý spodný objekt podľa cesty vrchného objektu, kým druhý iba vyreže Å¥ah spodného objektu a odstráni jeho výplň (to je vhodné na rezanie Å¥ahov bez výplne na Äasti). - - Posun dnu a posun von + + Posun dnu a posun von - - + + - Inkscape dokáže zväÄÅ¡ovaÅ¥ a zmenÅ¡ovaÅ¥ tvary nielen zmenou mierky, ale aj posunutím cesty objektu, t.j. jej posunutím kolmo na pôvodnú cestu v každom bode. Zodpovedajúce príkazy sa nazývajú Posunúť cestu dnu (Ctrl+() a Posunúť cestu von (Ctrl+)). Dolu je zobrazená pôvodná cesta (Äervená) a niekoľko ciest posunutých dnu aj von z pôvodnej cesty: + Inkscape dokáže zväÄÅ¡ovaÅ¥ a zmenÅ¡ovaÅ¥ tvary nielen zmenou mierky, ale aj posunutím cesty objektu, t.j. jej posunutím kolmo na pôvodnú cestu v každom bode. Zodpovedajúce príkazy sa nazývajú Posunúť cestu dnu (Ctrl+() a Posunúť cestu von (Ctrl+)). Dolu je zobrazená pôvodná cesta (Äervená) a niekoľko ciest posunutých dnu aj von z pôvodnej cesty: - - - - - - - - - + + + + + + + + + - Výsledkom Äistých príkazov Posun cesty dnu a Posun cesty von sú cesty (prevedenie pôvodného objektu na cestu, ak to eÅ¡te nie je cesta). ÄŒasto je pohodlnejší príkaz Dynamický posun (Ctrl+J), ktorý vytvorí objekt s úchopom, za ktorý možno Å¥ahaÅ¥ (podobný ako úchop tvaru), Äím sa ovláda vzdialenosÅ¥ posunutia. Vyberte objekt dolu, prepnite na nástroj Uzol a Å¥ahajte jeho úchop, aby ste o tom získali predstavu: + Výsledkom Äistých príkazov Posun cesty dnu a Posun cesty von sú cesty (prevedenie pôvodného objektu na cestu, ak to eÅ¡te nie je cesta). ÄŒasto je pohodlnejší príkaz Dynamický posun (Ctrl+J), ktorý vytvorí objekt s úchopom, za ktorý možno Å¥ahaÅ¥ (podobný ako úchop tvaru), Äím sa ovláda vzdialenosÅ¥ posunutia. Vyberte objekt dolu, prepnite na nástroj Uzol a Å¥ahajte jeho úchop, aby ste o tom získali predstavu: - - - + + + Taký dynamicky posunutý objekt si pamätá pôvodnú cestu, takže sa jeho kvalita nemení, keÄ znova a znova zmeníte vzdialenosÅ¥ posunu. KeÄ už viac nepotrebujete, aby sa dala nastavovaÅ¥, môžete vždy previesÅ¥ posunutý objekt naspäť na cestu. - - + + EÅ¡te pohodlnejÅ¡ie je použiÅ¥ Prepojený posun, ktorý sa podobá na ten dynamický, ale je prepojený s inou cestou, ktorú je naÄalej možné upravovaÅ¥. Na jednu zdrojovú cestu môžete maÅ¥ ľubovoľný poÄet prepojených posunov. Dolu je zdrojová cesta Äervenou, jeden s ňou prepojený posun má Äierny Å¥ah a je bez výplne, druhý má Äiernu výplň a je bez Å¥ahu. - - + + - Vyberte Äervený objekt a upravujte jeho uzly. Sledujte, ako na to reagujú oba prepojené posuny. Teraz vyberte ktorýkoľvek z posunov a posuňte jeho úchop, aby ste zmenili posunutie. Nakoniec si vÅ¡imnite, ako posúvanie a zmeny zdrojového objektu menia vÅ¡etky objekty s ním prepojené a ako môžete posúvaÅ¥ a meniÅ¥ posunuté objekty nezávisle bez toho, aby sa stratilo ich prepojenie so zdrojom. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - ZjednoduÅ¡enie + + ZjednoduÅ¡enie - - + + - Hlavné využitie príkazu ZjednoduÅ¡iÅ¥ (Ctrl+L) je redukcia poÄtu uzlov cesty, zatiaľ Äo sa takmer zachová jej tvar. To môže byÅ¥ užitoÄné pri cestách vytvorených pomocou nástroja Ceruzka, keÄže tento nástroj niekedy vytvára viac uzlov ako je nevyhnutné. Tvar vľavo dolu je vytvorený nástrojom kreslenie voľnou rukou a vpravo je jeho kópia po zjednoduÅ¡ení. Pôvodná cesta má 28 uzlov, kým zjednoduÅ¡ená má 17 (Äo znamená, že je omnoho jednoduchÅ¡ie pracovaÅ¥ s nástrojom Uzol) a je hladÅ¡ia. + Hlavné využitie príkazu ZjednoduÅ¡iÅ¥ (Ctrl+L) je redukcia poÄtu uzlov cesty, zatiaľ Äo sa takmer zachová jej tvar. To môže byÅ¥ užitoÄné pri cestách vytvorených pomocou nástroja Ceruzka, keÄže tento nástroj niekedy vytvára viac uzlov ako je nevyhnutné. Tvar vľavo dolu je vytvorený nástrojom kreslenie voľnou rukou a vpravo je jeho kópia po zjednoduÅ¡ení. Pôvodná cesta má 28 uzlov, kým zjednoduÅ¡ená má 17 (Äo znamená, že je omnoho jednoduchÅ¡ie pracovaÅ¥ s nástrojom Uzol) a je hladÅ¡ia. - - - - + + + + - Množstvo zjednoduÅ¡enia (nazývané prah) závisí na veľkosti výberu. Preto ak vyberiete cestu spolu s nejakým väÄším objektom, bude zjednoduÅ¡ená násilnejÅ¡ie, ako keby ste tú cestu vybrali samostatne. Naviac príkaz ZjednoduÅ¡iÅ¥ bude zrýchlený. To znamená, že ak stlaÄíte Ctrl+L niekoľkokrát v rýchlom slede za sebou (tak, že sú od seba do 0,5 sekundy), pri každom spustení sa zvýši hodnota prahu. (Ak spustíte ÄalÅ¡ie zjednoduÅ¡enie po prestávke, prah bude maÅ¥ znova svoju Å¡tandardnú hodnotu.) Pomocou zrýchľovania je jednoduché aplikovaÅ¥ presnú mieru zjednoduÅ¡enia, akú potrebujete pre daný prípad. + Množstvo zjednoduÅ¡enia (nazývané prah) závisí na veľkosti výberu. Preto ak vyberiete cestu spolu s nejakým väÄším objektom, bude zjednoduÅ¡ená násilnejÅ¡ie, ako keby ste tú cestu vybrali samostatne. Naviac príkaz ZjednoduÅ¡iÅ¥ bude zrýchlený. To znamená, že ak stlaÄíte Ctrl+L niekoľkokrát v rýchlom slede za sebou (tak, že sú od seba do 0,5 sekundy), pri každom spustení sa zvýši hodnota prahu. (Ak spustíte ÄalÅ¡ie zjednoduÅ¡enie po prestávke, prah bude maÅ¥ znova svoju Å¡tandardnú hodnotu.) Pomocou zrýchľovania je jednoduché aplikovaÅ¥ presnú mieru zjednoduÅ¡enia, akú potrebujete pre daný prípad. - - + + - Okrem vyhladzovania Å¥ahu voľnou rukou je možné príkaz ZjednoduÅ¡iÅ¥ použiÅ¥ na rôzne tvorivé efekty. ÄŒasto je výhodné do istej miery zjednoduÅ¡iÅ¥ tvar, ktorý je pevný a geometrický, Äím sa dosahuje životu podobnejÅ¡ie zovÅ¡eobecnenie pôvodného tvaru - roztopenie ostrých rohov a zavedenie veľmi prirodzených zakrivení, niekedy Å¡týlových a niekedy zhola zábavných. Tu je príklad klipartového tvaru, ktorý vyzerá oveľa krajÅ¡ie po ZjednoduÅ¡ení: + Okrem vyhladzovania Å¥ahu voľnou rukou je možné príkaz ZjednoduÅ¡iÅ¥ použiÅ¥ na rôzne tvorivé efekty. ÄŒasto je výhodné do istej miery zjednoduÅ¡iÅ¥ tvar, ktorý je pevný a geometrický, Äím sa dosahuje životu podobnejÅ¡ie zovÅ¡eobecnenie pôvodného tvaru - roztopenie ostrých rohov a zavedenie veľmi prirodzených zakrivení, niekedy Å¡týlových a niekedy zhola zábavných. Tu je príklad klipartového tvaru, ktorý vyzerá oveľa krajÅ¡ie po ZjednoduÅ¡ení: - Pôvodné - Mierne zjednoduÅ¡enie - Agresívne zjednoduÅ¡enie - - - - - Tvorba textu + Pôvodné + Mierne zjednoduÅ¡enie + Agresívne zjednoduÅ¡enie + + + + + Tvorba textu - - + + Inkscape dokáže tvoriÅ¥ dlhé a komplexné texty. Je vÅ¡ak tiež pohodlné tvoriÅ¥ malé textové objekty ako nadpis, logo, oznaÄenia v diagrame a pod. Táto ÄasÅ¥ je veľmi základný úvod do textových schopností Inkscape. - - + + Tvorba textového objektu je jednoduchá - staÄí vybraÅ¥ nástroj Text (F8), kliknúť niekde v dokumente a zaÄaÅ¥ písaÅ¥ text. Rodinu, Å¡týl, veľkosÅ¥ a zarovnanie textu môžete zmeniÅ¥ po otvorení dialógu Text a písmo (Shift+Ctrl+T). Dialóg má tiež záložku na zadanie textu, kde môžete upravovaÅ¥ vybraný textový objekt - v niektorých situáciách to môže byÅ¥ pohodlnejÅ¡ie ako jeho upravovanie priamo na plátne (obzvlášť výhodná je podpora kontroly pravopisu poÄas písania na tejto záložke). - - + + Ako ostatné nástroje aj nástroj Text dokáže vyberaÅ¥ objekty svojho typu - textové objekty - takže môžete kliknutím vybraÅ¥ a umiestniÅ¥ textový kurzor v akomkoľvek existujúcom textovom objekte (ako odstavec textu). - - + + Jednou z najbežnejších operácií pri návrhu je nastavenie rozostupov medzi písmenami a riadkami. Ako vždy, Inkscape má na to klávesovú skratku. KeÄ upravujete text, klávesy Alt+< a Alt+> menia rozostupy písmen na aktuálnom riadku textového objektu, takže sa celková dĺžka riadku zmení o jeden pixel pri momentálnom priblížení (porovnaj s nástrojom Výber, kde rovnaké klávesy slúžia na zmenu veľkosti objektu o jeden pixel). Je pravidlom, že ak je veľkosÅ¥ písma v textovom objekte väÄÅ¡ia ako Å¡tandardná, bude pravdepodobne lepÅ¡ie stlaÄiÅ¥ písmená k sebe viac ako je Å¡tandardné. Tu je príklad: - Pôvodné - ZmenÅ¡ené rozostupy písmen - Inspiration - Inspiration - - + Pôvodné + ZmenÅ¡ené rozostupy písmen + Inspiration + Inspiration + + Zhustený variant vyzerá o nieÄo lepÅ¡ie ako nadpis, ale stále nie je dokonalý: vzdialenosti medzi písmenami nie sú rovnomerné, napríklad „a“ a „t“ sú od seba príliÅ¡ Äaleko, zatiaľ Äo „t“ a „i“ sú príliÅ¡ blízko. Množstvo takýchto zlých dvojíc (obzvlášť sú viditeľné pri veľkých veľkostiach písma) je väÄÅ¡ie v písmach nízkej kvality. AvÅ¡ak v každom textovom reÅ¥azci a písme asi nájdete páry písmen, ktorých vzdialenosÅ¥ by sa hodilo doladiÅ¥. - - + + Inkscape skutoÄne zjednoduÅ¡uje takéto úpravy. Jednoducho presuňte svoj kurzor na úpravu textu medzi problematické znaky a pomocou Alt+šípok posuňte písmená vpravo od kurzora. Tu je opäť rovnaký nadpis, tentokrát s ruÄným doladením vizuálnej rovnomernosti rozostupov písmen: - ZmenÅ¡ené rozostupy písmen, niektoré dvojice písmen ruÄne spojené (kerning) - Inspiration - - + ZmenÅ¡ené rozostupy písmen, niektoré dvojice písmen ruÄne spojené (kerning) + Inspiration + + Okrem vodorovného posúvania písmen pomocou Alt+vľavo a Alt+vpravo, ich tiež môžete posúvaÅ¥ zvisle pomocou Alt+hore a Alt+dolu: - Inspiration - - + Inspiration + + Samozrejme, mohli by ste tiež len konvertovaÅ¥ text na cestu (Shift+Ctrl+C) a posunúť písmená ako obyÄajné objekty cesty. Je vÅ¡ak omnoho pohodlnejÅ¡ie ponechaÅ¥ text textom - naÄalej je možné ho upravovaÅ¥, môžete vyskúšaÅ¥ rozliÄné písma bez toho, aby ste priÅ¡li o manuálne doladenie rozostupov písmen a zaberá menej miesta v uloženom súbore. Jedinou nevýhodou prístupu ponechania „textu textom“ je, že musíte maÅ¥ nainÅ¡talované pôvodné písmo na každom systéme, kde chcete SVG dokument otvoriÅ¥. - - + + Podobne ako rozostupy písmen môžete tiež doladiÅ¥ rozostupy riadkov vo viacriadkových textových objektoch. Skúste klávesy Ctrl+Alt+< a Ctrl+Alt+> na akomkoľvek odstavci tohto návodu, Äím zmenšíte alebo zväÄšíte rozostupy, takže sa celková výška textového objektu zmení o jeden pixel pri aktuálnom priblížení. Rovnako ako pri nástroji výber stlaÄením klávesu Shift spolu s ľubovoľnou skratkou na zmenu rozostupu dostanete 10-násobný úÄinok ako bez klávesu Shift. - - XML editor + + XML editor - - + + NajlepÅ¡ie vybaveným nástrojom Inkscape je XML editor (Shift+Ctrl+X). Zobrazuje celý XML strom dokumentu vždy v aktuálnom stave. Môžete upravovaÅ¥ svoju kresbu a sledovaÅ¥ zodpovedajúce zmeny v XML strome. Naviac môžete upravovaÅ¥ akýkoľvek text, element alebo atribút v XML editore a vidieÅ¥ výsledok na plátne. Je to najlepší predstaviteľný nástroj na interaktívne nauÄenie SVG. Tiež umožňuje robiÅ¥ triky, ktoré by boli s bežnými nástrojmi na úpravu nemožné. - - Záver + + Záver - - + + - Tento návod predstavil iba malú ÄasÅ¥ schopností Inkscape. Dúfame, že sa vám páÄil. Nebojte sa experimentovaÅ¥ a podeľte sa o svoje výtvory. Prosím, navÅ¡tívte www.inkscape.org, kde získate viac informácií, najnovÅ¡iu verziu a pomoc od komunity používateľov a vývojárov. + Tento návod predstavil iba malú ÄasÅ¥ schopností Inkscape. Dúfame, že sa vám páÄil. Nebojte sa experimentovaÅ¥ a podeľte sa o svoje výtvory. Prosím, navÅ¡tívte www.inkscape.org, kde získate viac informácií, najnovÅ¡iu verziu a pomoc od komunity používateľov a vývojárov. - + @@ -533,8 +508,8 @@ rotated/scaled to match. - - Na posunutie späť použite Ctrl+šípka hore + + Na posunutie späť použite Ctrl+šípka hore diff --git a/share/tutorials/tutorial-advanced.sl.svg b/share/tutorials/tutorial-advanced.sl.svg index 079975453..dae5df155 100644 --- a/share/tutorials/tutorial-advanced.sl.svg +++ b/share/tutorials/tutorial-advanced.sl.svg @@ -36,61 +36,61 @@ - - Uporabite Ctrl+puÅ¡Äica navzdol za drsenje + + Uporabite Ctrl+puÅ¡Äica navzdol za drsenje - + ::NAPREDNE TEHNIKE -bulia byak, buliabyak@users.sf.net in josh andler, scislac@users.sf.net - - + + + Ta vodiÄ zajema urejanje oblike in vozliÅ¡Ä, prostoroÄno risanje in risanje krivulj bezier, urejanje poti, matematiÄne operacije, zamikanje, poenostavljanje, uporabo besedil. - - + + - Pomikajte se navzdol s Ctrl+smerniki, miÅ¡kinim koleÅ¡Äkom ali potegom s srednjim gumbom. Za osnove ustvarjanja predmetov, izbiranje in preoblikovanje si oglejte osnovnega vodiÄa v PomoÄ > VodiÄi. + Pomikajte se navzdol s Ctrl+smerniki, miÅ¡kinim koleÅ¡Äkom ali potegom s srednjim gumbom. Za osnove ustvarjanja predmetov, izbiranje in preoblikovanje si oglejte osnovnega vodiÄa v PomoÄ > VodiÄi. - - Metode lepljenja + + Metode lepljenja - - + + - Potem ko ste nekaj predmetov skopirali (Ctrl+C) ali izrezali (Ctrl+X) na odložiÅ¡Äe, jih lahko z obiÄajnim ukazom prilepi (Ctrl+V) vlepite pod miÅ¡kin kazalec, ali v srediÅ¡Äe okna, Äe je kazalec izven njega. Predmeti na odložiÅ¡Äu si sicer zapomnijo svoja izvirna mesta, kamor jih lahko vplepite z ukazom Prilepi naravnost (Ctrl+Alt+V). + Potem ko ste nekaj predmetov skopirali (Ctrl+C) ali izrezali (Ctrl+X) na odložiÅ¡Äe, jih lahko z obiÄajnim ukazom prilepi (Ctrl+V) vlepite pod miÅ¡kin kazalec, ali v srediÅ¡Äe okna, Äe je kazalec izven njega. Predmeti na odložiÅ¡Äu si sicer zapomnijo svoja izvirna mesta, kamor jih lahko vplepite z ukazom Prilepi naravnost (Ctrl+Alt+V). - - + + - S kombinacijo Shift+Ctrl+V lahko prilepite slog, torej slog prvega predmeta z odložiÅ¡Äa uporabite na trenutno izbranem. "Slog" obsega vse nastavitve polnjenja, poteze in pisave, ne pa lastnosti znaÄilnih za posamezne like, kot je na primer Å¡tevilo kotov veÄkotnika. + S kombinacijo Shift+Ctrl+V lahko prilepite slog, torej slog prvega predmeta z odložiÅ¡Äa uporabite na trenutno izbranem. "Slog" obsega vse nastavitve polnjenja, poteze in pisave, ne pa lastnosti znaÄilnih za posamezne like, kot je na primer Å¡tevilo kotov veÄkotnika. - - + + - Drug nabor ukazov, Prilepi velikost, spremeni merilo izbire, da ta ustreza želenemu atributu velikosti predmetov na odložiÅ¡Äu. Obstaja veÄ ukazov za lepljenje velikosti: Prilepi velikost, Prilepi Å¡irino, Prilepi viÅ¡ino, Prilepi velikost loÄeno, Prilepi Å¡irino loÄeno in Prilepi viÅ¡ino loÄeno. + Drug nabor ukazov, Prilepi velikost, spremeni merilo izbire, da ta ustreza želenemu atributu velikosti predmetov na odložiÅ¡Äu. Obstaja veÄ ukazov za lepljenje velikosti: Prilepi velikost, Prilepi Å¡irino, Prilepi viÅ¡ino, Prilepi velikost loÄeno, Prilepi Å¡irino loÄeno in Prilepi viÅ¡ino loÄeno. - - + + - Prilepi velikost spremeni merilo celega izbora, da se ta ujema s skupno velikostjo predmetov na odložiÅ¡Äu. Prilepi Å¡irino/Prilepi viÅ¡ino spremenita merilo celi izbiri vodoravno/navpiÄno, da se ta ujema s Å¡irino/viÅ¡ino predmetov na odložiÅ¡Äu. Ti ukazi spoÅ¡tujejo zaklep razmerja stranic na nadzorni vrstici Izbirnika (med poljema Å  in V), tako da je ob pritisnjeni kljuÄavnici drugi dimenziji izbranega predmeta spremenjeno merilo v enaki meri; sicer ostane druga dimenzija nespremenjena. Ukazi, ki vsebujejo Å¡e “loÄenoâ€, delujejo podobno zgoraj opisanim ukazom, le da spremenijo merilo vsakemu izbranemu predmetu posebej, da se ujema z velikostjo/Å¡irino/viÅ¡ino predmetov na odložiÅ¡Äu. + Prilepi velikost spremeni merilo celega izbora, da se ta ujema s skupno velikostjo predmetov na odložiÅ¡Äu. Prilepi Å¡irino/Prilepi viÅ¡ino spremenita merilo celi izbiri vodoravno/navpiÄno, da se ta ujema s Å¡irino/viÅ¡ino predmetov na odložiÅ¡Äu. Ti ukazi spoÅ¡tujejo zaklep razmerja stranic na nadzorni vrstici Izbirnika (med poljema Å  in V), tako da je ob pritisnjeni kljuÄavnici drugi dimenziji izbranega predmeta spremenjeno merilo v enaki meri; sicer ostane druga dimenzija nespremenjena. Ukazi, ki vsebujejo Å¡e “loÄenoâ€, delujejo podobno zgoraj opisanim ukazom, le da spremenijo merilo vsakemu izbranemu predmetu posebej, da se ujema z velikostjo/Å¡irino/viÅ¡ino predmetov na odložiÅ¡Äu. - - + + @@ -99,43 +99,43 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - Risanje prostoroÄnih in obiÄajnih Ärt + + Risanje prostoroÄnih in obiÄajnih Ärt - - + + Najlažji naÄin za stvaritev poljubne oblike je, da jo nariÅ¡ete z orodjem za prostoroÄno risanje - svinÄnikom (F6): - - - - - - - - - - - + + + + + + + + + + + Za pravilnejÅ¡e oblike je orodje za bezier krivulje - pero (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -149,26 +149,26 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + V obeh orodjih pritisk na "a" pokaže sidra prikaza na obeh koncih izbrane poti, tako da jo lahko nadaljujete, namesto da zaÄenjate novo; ali pa jo zakljuÄite, tako da povežete nasprotni sidri. - - Urejanje poti + + Urejanje poti - - + + Za razliko od orodij, ki ustvarijo like, orodji za prostoroÄno risanje in risanje krivulj ustvarita tako imenovane poti. Pot je zaporedje odsekov Ärt ali krivulj, ki ima - kot vsak drug predmet - poljubno polnilo in obris. V nasprotju z liki lahko poti preurejamo tako, da poljubno premikamo katerakoli vozliÅ¡Äa, ne le vnaprej doloÄenih roÄic. Izberite naslednjo pot z izbirnikom in nato izberite orodje za urejanje vozliÅ¡Ä (F2): - - - + + + @@ -183,8 +183,8 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on selected node); Alt+! inverts in the entire path. - - + + @@ -196,8 +196,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -209,8 +209,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -226,61 +226,61 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + RoÄico vozliÅ¡Äa lahko tudi popolnoma skrajÅ¡ate s Ctrl+klikom nanjo. ÄŒe dvema sosednjima vozliÅ¡Äema skrajÅ¡ate roÄici, postane odsek poti med njima ravna Ärta. ÄŒe želite spet izvleÄi roÄico, jo Shift+potegnite iz vozliÅ¡Äa. - - Podpoti in združevanje + + Podpoti in združevanje - - + + Pot lahko obsega veÄ podpoti. Podpot je zaporedje povezanih vozliÅ¡Ä. Tako ni treba, da so vsa vozliÅ¡Äa v poti povezana. Tri podpoti spodaj levo pripadajo eni sestavljeni poti; iste tri podpoti na desni so neodvisni predmeti: - - - - - - + + + + + + Vendar pa sestavljena pot ni isto kot skupina. Je enoten predmet, izberemo ga lahko le v celoti. ÄŒe izberete zgornji levi predmet in preklopite na orodje za vozliÅ¡Äa, boste videli vozliÅ¡Äa po vseh treh podpoteh. Na desni lahko urejate le vsako pot posebej. - - + + - Inkscape zna sestaviti poti v sestavljeno pot (Ctrl+K) in razstaviti sestavljeno pot v loÄene podpoti (Shift+Ctrl+K). Poskusite te ukaze na gornjih primerih. Ker ima predmet lahko le eno polnilo in obrobo, dobi sestavljena pot slog prvega, tj. najnižjega predmeta. + Inkscape zna sestaviti poti v sestavljeno pot (Ctrl+K) in razstaviti sestavljeno pot v loÄene podpoti (Shift+Ctrl+K). Poskusite te ukaze na gornjih primerih. Ker ima predmet lahko le eno polnilo in obrobo, dobi sestavljena pot slog prvega, tj. najnižjega predmeta. - - + + ÄŒe sestavljate prekrivajoÄe poti s polnilom, bo na mestih, kjer se poti prekrivajo, polnilo izginilo: - - - + + + To je najlažji naÄin za ustvarjanje objektov z luknjami. Za moÄnejÅ¡e operacije s potmi si oglejte "MatematiÄne operacije" spodaj. - - Pretvarjanje v poti + + Pretvarjanje v poti - - + + @@ -292,167 +292,172 @@ nodes. Here are two stars - the left one is kept a shape and the right one is converted to path. Switch to node tool and compare their editability when selected: - - - - + + + + Å e veÄ, tudi vsaka poteza je lahko obrisana, tj. pretvorjena v pot ("obris"). Prvi predmet spodaj je izvirna pot (brez polnila, Ärna Ärta), drugi pa je pretvorjen v pot (Ärno polnilo, brez obrisa) z ukazom Poteza v pot: - - - - MatematiÄne operacije + + + + MatematiÄne operacije - - + + Ukazi v meniju Pot vam omogoÄajo sestavljanje dveh ali veÄ predmetov z matematiÄnimi operacijami: - Izvorni liki - Unija (Ctrl++) - Razlika (Ctrl+-) - Presek(Ctrl+*) - IzkljuÄitev(Ctrl+^) - Delitev(Ctrl+/) - Izreži pot(Ctrl+Alt+/) - - - - - - - - - - - (dno minus vrh) - - + Izvorni liki + Unija (Ctrl++) + Razlika (Ctrl+-) + Presek(Ctrl+*) + IzkljuÄitev(Ctrl+^) + Delitev(Ctrl+/) + Izreži pot(Ctrl+Alt+/) + + + + + + + + + + + (dno minus vrh) + + - Bližnjice za te ukaze spominjajo na aritmetiÄni pomen teh matematiÄnih operacij (Unija je dodajanje, Razlika je odÅ¡tevanje,...). Razlika in Odvzem delujeta le na dveh izbranih predmetih, ostali pa na poljubnem Å¡tevilu predmetov hkrati. Rezultat vedno prevzame slog najnižjega predmeta. + Bližnjice za te ukaze spominjajo na aritmetiÄni pomen teh matematiÄnih operacij (Unija je dodajanje, Razlika je odÅ¡tevanje,...). Razlika in Odvzem delujeta le na dveh izbranih predmetih, ostali pa na poljubnem Å¡tevilu predmetov hkrati. Rezultat vedno prevzame slog najnižjega predmeta. - - + + - Rezultat Odvzema spominja na Sestavljanje (glej zgoraj), a doda vozliÅ¡Äa na mestih, kjer se poti sekajo. Razlika med Deljenjem in Izrezom poti je, da Deljenje izreže celoten spodnji predmet po poti zgornjega, Izrez poti pa izreže le obris spodnjega predmeta in odstrani polnilo (to je prikladno za razrez nezapolnjenih potez na koÅ¡Äke). + Rezultat Odvzema spominja na Sestavljanje (glej zgoraj), a doda vozliÅ¡Äa na mestih, kjer se poti sekajo. Razlika med Deljenjem in Izrezom poti je, da Deljenje izreže celoten spodnji predmet po poti zgornjega, Izrez poti pa izreže le obris spodnjega predmeta in odstrani polnilo (to je prikladno za razrez nezapolnjenih potez na koÅ¡Äke). - - RazÅ¡irjenje in zožanje + + RazÅ¡irjenje in zožanje - - + + - Inkscape zna tudi brez raztegovanja razÅ¡iriti in zožati oblike. To naredi z zamikanjem predmetove poti, t.j. vzporednim premikom vsake toÄke poti. Ustrezna ukaza sta RazÅ¡iri (Ctrl+() in Zožaj (Ctrl+)). Spodaj vidite izvirno pot (rdeÄa) in veÄ poti, ki so razÅ¡irjenja ali zožanja: + Inkscape zna tudi brez raztegovanja razÅ¡iriti in zožati oblike. To naredi z zamikanjem predmetove poti, t.j. vzporednim premikom vsake toÄke poti. Ustrezna ukaza sta RazÅ¡iri (Ctrl+() in Zožaj (Ctrl+)). Spodaj vidite izvirno pot (rdeÄa) in veÄ poti, ki so razÅ¡irjenja ali zožanja: - - - - - - - - - + + + + + + + + + - ObiÄajna raba teh ukazov ustvari pot (in pretvori tudi izvorni predmet v pot). Pogosteje nam koristi DinamiÄni zamik (Ctrl+J), ki ustvari predmet s premiÄno roÄico, ki nadzoruje razdaljo odmika. Izberite spodnji predmet, preklopite na orodje za vozliÅ¡Äa in preknite roÄice: + ObiÄajna raba teh ukazov ustvari pot (in pretvori tudi izvorni predmet v pot). Pogosteje nam koristi DinamiÄni zamik (Ctrl+J), ki ustvari predmet s premiÄno roÄico, ki nadzoruje razdaljo odmika. Izberite spodnji predmet, preklopite na orodje za vozliÅ¡Äa in preknite roÄice: - - - + + + Predmet, ki je dinamiÄen zamik svojega izvirnika, si zapomni izvorno pot, tako da se natanÄnost ne izgublja z veÄkratnim spreminjanjem. Ko ste konÄali, ga lahko vedno pretvorite nazaj v pot. - - + + Å e bolj udoben je povezan zamik, ki deluje podobno kot dinamiÄen, le da je povezan z neko drugo potjo, ki pa jo lahko Å¡e vedno urejate. Iz ene izvorne poti lahko ustvarite praktiÄno neomejeno Å¡tevilo povezanih zamikov. Spodaj vidite rdeÄo izvorno pot in en povezan zamik s Ärnim polnilom in brez obrisa, ter drugi povezan zamik brez polnila s Ärno Ärto. - - + + - Izberite rdeÄi predmet in mu spremenite vozliÅ¡Äa. Opazujte spreminjanje povezanih predmetov. Izberite kakega od njiju in mu prilagodite zamik. Poskusite tudi premakniti izvirnik - povezani zamiki mu sledijo, hkrati pa jih lahko loÄeno premikate ali preoblikujete. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - Poenostavljanje + + Poenostavljanje - - + + - Glavna uporaba ukaza Poenostavi (Ctrl+L) je zmanjÅ¡anje Å¡tevila vozliÅ¡Ä na poti, ob približnem ohranjanju oblike. To je koristno pri prostoroÄnih poteh, ki so vÄasih bolj zapletene, kot bi bilo treba. Spodaj levo je oblika narisana prostoroÄno, desno pa njen poenostavljeni dvojnik. Izvirna pot ima 28 vozliÅ¡Ä, poenostavljena pa 17. Poenostavljena je zato gladkejÅ¡a in lažje ji urejamo vozliÅ¡Äa. + Glavna uporaba ukaza Poenostavi (Ctrl+L) je zmanjÅ¡anje Å¡tevila vozliÅ¡Ä na poti, ob približnem ohranjanju oblike. To je koristno pri prostoroÄnih poteh, ki so vÄasih bolj zapletene, kot bi bilo treba. Spodaj levo je oblika narisana prostoroÄno, desno pa njen poenostavljeni dvojnik. Izvirna pot ima 28 vozliÅ¡Ä, poenostavljena pa 17. Poenostavljena je zato gladkejÅ¡a in lažje ji urejamo vozliÅ¡Äa. - - - - + + + + KoliÄina poenostavljanja (ali grobost) je odvisna od velikosti izbire. Zato bo, Äe izberete pot, skupaj s kakim veÄjim predmetom, ta agresivneje poenostavljena, kot Äe bi jo izbrali samo. Ta ukaz je tudi pospeÅ¡en. To pomeni, da Äe veÄkrat zaporedoma in s kratkimi presledki (manj kot pol sekunde) pritisnete Ctrl+L, bo agresivnost vsakiÄ veÄja. Po krajÅ¡em premoru bo agresivnost spet privzeta. Z uporabo poseÅ¡evanja je enostavna natanÄna uporaba poenostavljanja. - - + + - Besides smoothing freehand strokes, Simplify can be used for various + Besides smoothing freehand strokes, Simplify can be used for various creative effects. Often, a shape which is rigid and geometric benefits from some amount of simplification that creates cool life-like generalizations of the original form - melting sharp corners and introducing very natural distortions, sometimes stylish and sometimes plain funny. Here's an example of a clipart shape that looks much nicer after -Simplify: +Simplify: - Izvirnik - Rahlo poenostavljanje - Agresivno poenostavljanje - - - - - Ustvarjanje besedil + Izvirnik + Rahlo poenostavljanje + Agresivno poenostavljanje + + + + + Ustvarjanje besedil - - + + Inkscape je sposoben urejati daljÅ¡a in zapletena besedila, hkrati pa je priroÄen pri ustvarjanju kratkih besednih predmetov, kot so naslovi, oglasi, logotipi, diagrami, nalepke,... V tem delu bomo na kratko predstavili te možnosti. - - + + Ustvarjanje besedilnega predmeta je enostavno - izberete orodje za besedila (F8), kliknete nekam v dokument in piÅ¡ete. Za spreminjanje pisave, sloga in velikosti odprite pogovorno okno Besedilo in pisava (Shift+Ctrl+T). Tam lahko besedilo tudi piÅ¡ete v posebno okence, kar je vÄasih lažje, kot pa neposredno na platno (Äe niÄ drugega, to okence podpira kopiranje in lepljenje iz sistemskega odložiÅ¡Äa, ter sprotno preverjanje Ärkovanja). - - + + @@ -461,43 +466,43 @@ objects -so you can click to select and position the cursor in any existing text object (such as this paragraph). - - + + Ena pogostejÅ¡ih operacij pri oblikovanju besedila je popravljanje razmikov med Ärkami in Ärtami. Kot vedno imamo tudi za to priroÄne bližnjice: Alt+< in Alt+>. S tem spremenite razmik med Ärkami v trenutni vrstici tako, da se dolžina vrstice spremeni za eno toÄko pri trenutnem pogledu. VeÄina besedil z velikostjo pisave veÄjo od obiÄajne izgleda bolje, Äe jo malce stisnemo. Tu imamo primer: - Izvirnik - Razmik med Ärkami zmanjÅ¡an - Navdih - Navdih - - + Izvirnik + Razmik med Ärkami zmanjÅ¡an + Navdih + Navdih + + Stisnjena razliÄica bi bila boljÅ¡i naslov, a Å¡e vedno ni popolna: presledki med Ärkami niso enakomerni. "a" in "t" sta recimo predaleÄ narazen, medtem ko sta "t" in "i" preblizu. KoliÄina takÅ¡nih slabih presledkov je odvisna od kakovosti uporabljene pisave, a celo pri najboljÅ¡ih boste naÅ¡li pare Ärk, ki jih bo potrebno popraviti. - - + + V Inkscapu je to enostavno; enostavno premaknite kazalec za urejanje besedila med željeni Ärki in uporabite Alt+smerne tipke, da premaknete Ärko na desni od kazalca. Å e enkrat isti naslov, to pot z roÄno popravljenimi razmaki: - Razmik med Ärkami zmanjÅ¡an, nekateri pari Ärk roÄno spodsekani - Navdih - - + Razmik med Ärkami zmanjÅ¡an, nekateri pari Ärk roÄno spodsekani + Navdih + + Poleg premikanja Ärk levo in desno z ukazi Alt+levo ali Alt+desno jih lahko zamaknete tudi gor in dol, Äe pritisnete Alt+gor ali Alt+dol. Poskusite te kombinacije na kateremkoli odstavku tega vodiÄa. - Navdih - - + Navdih + + @@ -509,34 +514,34 @@ disadvantage to the “text as text†approach is that you need to have the ori installed on any system where you want to open that SVG document. - - + + Podobno kot razmik med Ärkami lahko prilagajate tudi razmik med vrsticami. Poskusite Ctrl+Alt+< in Ctrl+Alt+> na kateremkoli odstavku tega vodiÄa. S tem spremenite razmike tako, da se celotna viÅ¡ina predmeta spremeni za 1 toÄko pri trenutnem pogledu. Kot tudi pri Izbirniku, hkratno držanje Shifta podeseteri uÄinek. - - Urejevalnik XML + + Urejevalnik XML - - + + Inkscapovo najmoÄnejÅ¡e orodje je Urejevalnik XML (Shift+Ctrl+X). Prikazuje celotno XML drevo dokumenta in vedno odraža trenutno stanje. V njem lahko urejate vaÅ¡o risbo in opazujete spremembe, lahko pa v njem tudi prilagajate lastnosti in rezultat takoj vidite na platnu. To je tudi najboljÅ¡e orodje za spoznavanje SVGja, saj omogoÄa nekatere trike, ki jih ne morete opraviti z obiÄajnimi orodji. - - ZakljuÄek + + ZakljuÄek - - + + - Ta vodiÄ pokaže le del vseh zmogljivosti Inkscapa. Upamo, da vam je bil vÅ¡eÄ. Ne bojte se eksperimentiranja in svoje stvaritve delite z drugimi. Za veÄ informacij, najnovejÅ¡e razliÄice in nadaljno pomoÄ s strani uporabnikov in razvijalcev obiÅ¡Äite www.inkscape.org. + Ta vodiÄ pokaže le del vseh zmogljivosti Inkscapa. Upamo, da vam je bil vÅ¡eÄ. Ne bojte se eksperimentiranja in svoje stvaritve delite z drugimi. Za veÄ informacij, najnovejÅ¡e razliÄice in nadaljno pomoÄ s strani uporabnikov in razvijalcev obiÅ¡Äite www.inkscape.org. - + @@ -566,8 +571,8 @@ installed on any system where you want to open that SVG document. - - Uporabite Ctrl+puÅ¡Äica navzgor za drsenje + + Uporabite Ctrl+puÅ¡Äica navzgor za drsenje diff --git a/share/tutorials/tutorial-advanced.svg b/share/tutorials/tutorial-advanced.svg index 506196331..cda930c11 100644 --- a/share/tutorials/tutorial-advanced.svg +++ b/share/tutorials/tutorial-advanced.svg @@ -40,11 +40,11 @@ Use Ctrl+down arrow to scroll - + ::ADVANCED -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + @@ -53,7 +53,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net drawing, path manipulation, booleans, offsets, simplification, and text tool. - + @@ -63,10 +63,10 @@ drag to scroll the page down. For basics of object creation, selectio transformation, see the Basic tutorial in Help > Tutorials. - - Pasting techniques + + Pasting techniques - + @@ -80,7 +80,7 @@ copied, and you can paste back there by Paste (Ctrl+Alt+V). - + @@ -91,7 +91,7 @@ applies the style of the (first) object on the clipboard to the current selectio size, or parameters specific to a shape type, such as the number of tips of a star. - + @@ -102,7 +102,7 @@ of commands for pasting size and are as follows: Paste Size, Paste Width, Paste Paste Size Separately, Paste Width Separately, and Paste Height Separately. - + @@ -119,7 +119,7 @@ they scale each selected object separately to make it match the size/width/heigh of the clipboard object(s). - + @@ -129,10 +129,10 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - Drawing freehand and regular paths + + Drawing freehand and regular paths - + @@ -141,16 +141,16 @@ handle SVG on the clipboard to use this). Pencil (freehand) tool (F6): - - - - - - - - - - + + + + + + + + + + @@ -158,16 +158,16 @@ Pencil (freehand) tool (F6): If you want more regular shapes, use the Pen (Bezier) tool (Shift+F6): - - - - - - - - - - + + + + + + + + + + @@ -182,7 +182,7 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - + @@ -194,10 +194,10 @@ only the last segment of an unfinished line, press new one. - - Editing paths + + Editing paths - + @@ -210,8 +210,8 @@ properties. But unlike a shape, a path can be edited by freely dragging any of i path and switch to the Node tool (F2): - - + + @@ -227,7 +227,7 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on selected node); Alt+! inverts in the entire path. - + @@ -240,7 +240,7 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - + @@ -253,7 +253,7 @@ selected nodes. The path can be broken (Shift+BShift+J). - + @@ -270,7 +270,7 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - + @@ -281,10 +281,10 @@ retracted, the path segment between them is a straight line. To pull out the ret node, Shift+drag away from the node. - - Subpaths and combining + + Subpaths and combining - + @@ -295,11 +295,11 @@ subpath, not all of its nodes are connected.) Below left, three subpaths belong single compound path; the same three subpaths on the right are independent path objects: - - - - - + + + + + @@ -310,7 +310,7 @@ will see nodes displayed on all three subpaths. On the right, you can only node- path at a time. - + @@ -322,7 +322,7 @@ examples. Since an object can only have one fill and stroke, a new compound path the style of the first (lowest in z-order) object being combined. - + @@ -331,8 +331,8 @@ the style of the first (lowest in z-order) object being combined. in the areas where the paths overlap: - - + + @@ -341,10 +341,10 @@ in the areas where the paths overlap: commands, see “Boolean operations†below. - - Converting to path + + Converting to path - + @@ -357,9 +357,9 @@ nodes. Here are two stars - the left one is kept a shape and the right one is converted to path. Switch to node tool and compare their editability when selected: - - - + + + @@ -370,12 +370,12 @@ second one is the result of the Stroke to Path command (black fill, no stroke): - - - - Boolean operations + + + + Boolean operations - + @@ -384,25 +384,25 @@ no stroke): boolean operations: - Original shapes - Union (Ctrl++) - Difference (Ctrl+-) - Intersection(Ctrl+*) - Exclusion(Ctrl+^) - Division(Ctrl+/) - Cut Path(Ctrl+Alt+/) - - - - - - - - - - - (bottom minus top) - + Original shapes + Union (Ctrl++) + Difference (Ctrl+-) + Intersection(Ctrl+*) + Exclusion(Ctrl+^) + Division(Ctrl+/) + Cut Path(Ctrl+Alt+/) + + + + + + + + + + + (bottom minus top) + @@ -414,7 +414,7 @@ to two selected objects; others may process any number of objects at once. The r always receives the style of the bottom object. - + @@ -428,10 +428,10 @@ only cuts the bottom object's stroke and removes any fill (this is convenie cutting fill-less strokes into pieces). - - Inset and outset + + Inset and outset - + @@ -444,14 +444,14 @@ to the path in each point. The corresponding commands are called inset or outset from that original: - - - - - - - - + + + + + + + + @@ -464,8 +464,8 @@ distance. Select the object below, switch to the node tool, and drag its handle an idea: - - + + @@ -475,7 +475,7 @@ does not “degrade†when you change the offset distance again and again. When need it to be adjustable anymore, you can always convert an offset object back to path. - + @@ -487,27 +487,27 @@ offset linked to it has black stroke and no fill, the other has black fill and n stroke. - + Select the red object and node-edit it; watch how both linked offsets respond. Now select any of the offsets and drag its handle to adjust the offset radius. Finally, note -how moving or transforming the source moves all offset objects linked to it, and how you + how you can move or transform the offset objects independently without losing their connection with the source. - + - - Simplification + + Simplification - + @@ -521,9 +521,9 @@ nodes, while the simplified one has 17 (which means it is much easier to work wi node tool) and is smoother. - - - + + + @@ -539,7 +539,7 @@ pause, the threshold is back to its default value.) By making use of the acceler is easy to apply the exact amount of simplification you need for each case. - + @@ -552,16 +552,16 @@ sometimes plain funny. Here's an example of a clipart shape that looks much Simplify: - Original - Slight simplification - Aggressive simplification - - - - - Creating text + Original + Slight simplification + Aggressive simplification + + + + + Creating text - + @@ -572,7 +572,7 @@ labels and captions, etc. This section is a very basic introduction into Inkscap text capabilities. - + @@ -585,7 +585,7 @@ situations, it may be more convenient than editing it right on the canvas (in particular, that tab supports as-you-type spell checking). - + @@ -595,7 +595,7 @@ objects -so you can click to select and position the cursor in any existing text object (such as this paragraph). - + @@ -610,11 +610,11 @@ a text object is larger than the default, it will likely benefit from squeezing a bit tighter than the default. Here's an example: - Original - Letter spacing decreased - Inspiration - Inspiration - + Original + Letter spacing decreased + Inspiration + Inspiration + @@ -627,7 +627,7 @@ any text string and in any font you will probably find pairs of letters that wil benefit from kerning adjustments. - + @@ -638,9 +638,9 @@ of the cursor. Here is the same heading again, this time with manual adjustments for visually uniform letter positioning: - Letter spacing decreased, some letter pairs manually kerned - Inspiration - + Letter spacing decreased, some letter pairs manually kerned + Inspiration + @@ -650,8 +650,8 @@ for visually uniform letter positioning: Alt+Up or Alt+Down: - Inspiration - + Inspiration + @@ -664,7 +664,7 @@ disadvantage to the “text as text†approach is that you need to have the ori installed on any system where you want to open that SVG document. - + @@ -677,10 +677,10 @@ As in Selector, pressing Shift with any produces 10 times greater effect than without Shift. - - XML editor + + XML editor - + @@ -694,10 +694,10 @@ interactively, and it allows you to do tricks that would be impossible with regu editing tools. - - Conclusion + + Conclusion - + @@ -707,7 +707,7 @@ enjoyed it. Don't be afraid to experiment and share what you create. Please versions, and help from user and developer communities. - + diff --git a/share/tutorials/tutorial-advanced.vi.svg b/share/tutorials/tutorial-advanced.vi.svg index 49f98fcdd..4d1775d06 100644 --- a/share/tutorials/tutorial-advanced.vi.svg +++ b/share/tutorials/tutorial-advanced.vi.svg @@ -36,61 +36,61 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::NÂNG CAO -bulia byak, buliabyak@users.sf.net và josh andler, scislac@users.sf.net - - + + + Bài hướng dẫn này đỠcập đến thao tác chép và dán, sá»­a nốt, nét vẽ tá»± do và cung bezier, xá»­ lý đưá»ng nét, các phép tập hợp, đối tượng co rút/mở rá»™ng, đơn giản hoá, và công cụ văn bản. - - + + - Dùng Ctrl+mÅ©i tên, xoay chuá»™t, hoặc kéo nút giữa chuá»™t để cuá»™n trang xuống dưới. Äể xem các thao tác tạo đối tượng, chá»n và chuyển dạng cÆ¡ bản, hãy xem bài hướng dẫn CÆ¡ bản trong Trợ giúp > Hướng dẫn. + Dùng Ctrl+mÅ©i tên, xoay chuá»™t, hoặc kéo nút giữa chuá»™t để cuá»™n trang xuống dưới. Äể xem các thao tác tạo đối tượng, chá»n và chuyển dạng cÆ¡ bản, hãy xem bài hướng dẫn CÆ¡ bản trong Trợ giúp > Hướng dẫn. - - Các kỹ thuật dán + + Các kỹ thuật dán - - + + - Sau khi dùng Ctrl+C hoặc Ctrl+X để cắt hay chép má»™t vài đối tượng, lệnh Dán (Ctrl+V) sẽ dán đối tượng đã chép vào vị trí nằm dưới con trá», hoặc vào giữa tài liệu nếu con trá» nằm ngoài cá»­a sổ Inkscape. Tuy vậy, trong bảng nháp vẫn có thông tin vá» vị trí ban đầu cá»§a các đối tượng đã cắt/chép, và bạn có thể dán chúng lại vào chá»— cÅ© bằng lệnh Dán tại chá»— cÅ© (Ctrl+Alt+V). + Sau khi dùng Ctrl+C hoặc Ctrl+X để cắt hay chép má»™t vài đối tượng, lệnh Dán (Ctrl+V) sẽ dán đối tượng đã chép vào vị trí nằm dưới con trá», hoặc vào giữa tài liệu nếu con trá» nằm ngoài cá»­a sổ Inkscape. Tuy vậy, trong bảng nháp vẫn có thông tin vá» vị trí ban đầu cá»§a các đối tượng đã cắt/chép, và bạn có thể dán chúng lại vào chá»— cÅ© bằng lệnh Dán tại chá»— cÅ© (Ctrl+Alt+V). - - + + - Má»™t lệnh khác, Dán kiểu dáng (Shift+Ctrl+V), áp dụng kiểu dáng cá»§a đối tượng đầu tiên trong bảng nháp cho vùng chá»n hiện thá»i. “Kiểu dáng†được dán vào bao gồm màu tô, nét viá»n, phông chữ, nhưng không bao gồm hình dáng, kích cỡ hoặc các tham số đặc trưng cho má»™t loại hình dáng, như số đỉnh cá»§a hình sao chả hạn. + Má»™t lệnh khác, Dán kiểu dáng (Shift+Ctrl+V), áp dụng kiểu dáng cá»§a đối tượng đầu tiên trong bảng nháp cho vùng chá»n hiện thá»i. “Kiểu dáng†được dán vào bao gồm màu tô, nét viá»n, phông chữ, nhưng không bao gồm hình dáng, kích cỡ hoặc các tham số đặc trưng cho má»™t loại hình dáng, như số đỉnh cá»§a hình sao chả hạn. - - + + - Má»™t tập hợp các lệnh khác nữa, Dán kích cỡ, co giãn vùng chá»n cho giống kích thước cá»§a các đối tượng trong bảng nháp. Có má»™t số lệnh để dán kích thước như sau: Dán Kích cỡ, Dán chiá»u rá»™ng, Dán Chiá»u cao, Dán riêng Kích cỡ, Dán riêng chiá»u rá»™ng, và Dán riêng chiá»u cao. + Má»™t tập hợp các lệnh khác nữa, Dán kích cỡ, co giãn vùng chá»n cho giống kích thước cá»§a các đối tượng trong bảng nháp. Có má»™t số lệnh để dán kích thước như sau: Dán Kích cỡ, Dán chiá»u rá»™ng, Dán Chiá»u cao, Dán riêng Kích cỡ, Dán riêng chiá»u rá»™ng, và Dán riêng chiá»u cao. - - + + - Dán kích cỡ co giãn toàn bá»™ vùng chá»n cho giống kích thước tổng hợp cá»§a tất cả các đối tượng trong bảng nháp. Dán chiá»u rá»™ng/Dán chiá»u cao chỉnh lại chiá»u rá»™ng/chiá»u cao cá»§a vùng chá»n cho giống chiá»u rá»™ng/cao cá»§a đối tượng trong bảng nháp. Những lệnh này khi được dùng lúc đối tượng bị khoá tỉ lệ (nút khoá nằm trên thanh Äiá»u khiển Công cụ cá»§a công cụ Chá»n được nhấn) thì cả chiá»u rá»™ng lẫn chiá»u cao Ä‘á»u sẽ thay đổi phù hợp để đảm bảo giữ nguyên tỉ lệ các chiá»u. Các lệnh có chữ "riêng" cÅ©ng có chức năng tương tá»± thế, nhưng chúng co giãn riêng từng đối tượng sao cho giống vá»›i kích cỡ trong bảng nháp. + Dán kích cỡ co giãn toàn bá»™ vùng chá»n cho giống kích thước tổng hợp cá»§a tất cả các đối tượng trong bảng nháp. Dán chiá»u rá»™ng/Dán chiá»u cao chỉnh lại chiá»u rá»™ng/chiá»u cao cá»§a vùng chá»n cho giống chiá»u rá»™ng/cao cá»§a đối tượng trong bảng nháp. Những lệnh này khi được dùng lúc đối tượng bị khoá tỉ lệ (nút khoá nằm trên thanh Äiá»u khiển Công cụ cá»§a công cụ Chá»n được nhấn) thì cả chiá»u rá»™ng lẫn chiá»u cao Ä‘á»u sẽ thay đổi phù hợp để đảm bảo giữ nguyên tỉ lệ các chiá»u. Các lệnh có chữ "riêng" cÅ©ng có chức năng tương tá»± thế, nhưng chúng co giãn riêng từng đối tượng sao cho giống vá»›i kích cỡ trong bảng nháp. - - + + @@ -99,43 +99,43 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - Vẽ nét tá»± do và các đưá»ng nét chính quy + + Vẽ nét tá»± do và các đưá»ng nét chính quy - - + + Cách dá»… nhất để tạo má»™t hình dạng bất kỳ là dùng công cụ Bút chì (vẽ tá»± do) (F6): - - - - - - - - - - - + + + + + + + + + + + Nếu bạn muốn vẽ các nét chính quy, hãy dùng công cụ Bút (Bezier) (Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -149,26 +149,26 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + Trong cả 2 công cụ Bút và Bút chì, đưá»ng nét Ä‘ang được chá»n sẽ có những Ä‘iểm neo nhá» hình vuông ở 2 đầu. Những Ä‘iểm neo này cho phép bạn vẽ tiếp nét này (bằng cách vẽ từ má»™t trong các Ä‘iểm neo) hoặc đóng nét lại (bằng cách vẽ từ Ä‘iểm neo này đến Ä‘iểm neo còn lại) thay vì tạo ra má»™t nét má»›i. - - Chỉnh sá»­a đưá»ng nét + + Chỉnh sá»­a đưá»ng nét - - + + Trong khi các công cụ hình dạng tạo ra các hình dáng, thì công cụ Bút và Bút chì tạo ra những đưá»ng nét. Má»™t đưá»ng nét là má»™t chuá»—i các Ä‘oạn thẳng hoặc/và cung Bezier, cÅ©ng giống như các đối tượng Inkscape khác, có thiết lập màu tô và nét tuỳ ý. Nhưng không giống như má»™t hình dạng, ta có thể sá»­a các đưá»ng nét má»™t cách tuỳ ý bằng cách di chuyển các nút cá»§a nó ra chá»— khác (hình dạng chỉ có các chốt nhất định để ta di chuyển), hoặc trá»±c tiếp kéo má»™t Ä‘oạn trong đưá»ng nét. Chá»n đưá»ng nét này và chuyển sang công cụ Nút (F2): - - - + + + @@ -183,8 +183,8 @@ inverts node selection in the current subpath(s) (i.e. subpaths with at least on selected node); Alt+! inverts in the entire path. - - + + @@ -196,8 +196,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -209,8 +209,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -226,61 +226,61 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + Bạn cÅ©ng có thể rụt chốt vào để xoá 2 tay đòn cá»§a 1 nút bằng Ctrl+bấm chuá»™t lên 1 chốt. Nếu 2 nút liá»n nhau Ä‘á»u bị rụt chốt vào, Ä‘oạn giữa chúng sẽ là Ä‘oạn thẳng. Äể kéo tay đòn ra khá»i nút chưa có tay đòn, hãy Shift+kéo chuá»™t từ giữa nút ra ngoài. - - ÄÆ°á»ng nét thành phần + + ÄÆ°á»ng nét thành phần - - + + Má»™t nét có thể có nhiá»u nét thành phần. Má»™t đưá»ng nét thành phần là má»™t chuá»—i các nút được nối lại vá»›i nhau. Nếu má»™t đưá»ng nét có nhiá»u hÆ¡n 1 nét thành phần có thể có các nút không được nối vá»›i nhau. Trong hình dưới, bên trái là 3 nét con trong 1 nét phức và bên phải là 3 nét độc lập: - - - - - - + + + + + + Lưu ý rằng má»™t đưá»ng nét phức (có nhiá»u nét thành phần) không giống như 1 nhóm. Äó là 1 đối tượng duy nhất, mà bạn chỉ có thể chá»n toàn bá»™ chứ không thể chá»n rá»i rạc từng đưá»ng nét thành phần được. Nếu bạn chá»n đối tượng bên trái khi dùng công cụ Nút, bạn sẽ thấy các nút xuất hiện trên cả 3 nét thành phần, trong khi vá»›i hình bên phải, bạn chỉ có thể chá»n riêng từng nét để chỉnh sá»­a. - - + + - Inkscape cho phép bạn Kết hợp (Ctrl+K) nhiá»u đưá»ng nét thành má»™t nét phức, hoặc Ngắt ra (Shift+Ctrl+K) để chuyển nét thành phần thành nét độc lập. Hãy dùng thá»­ 2 lệnh này vá»›i hình mẫu ở trên. Vì má»—i đối tượng chỉ có thể có 1 màu tô và nét viá»n, nên đưá»ng nét phức được kết hợp lại sẽ có kiểu dáng cá»§a đối tượng đầu tiên (thứ tá»± z thấp nhất). + Inkscape cho phép bạn Kết hợp (Ctrl+K) nhiá»u đưá»ng nét thành má»™t nét phức, hoặc Ngắt ra (Shift+Ctrl+K) để chuyển nét thành phần thành nét độc lập. Hãy dùng thá»­ 2 lệnh này vá»›i hình mẫu ở trên. Vì má»—i đối tượng chỉ có thể có 1 màu tô và nét viá»n, nên đưá»ng nét phức được kết hợp lại sẽ có kiểu dáng cá»§a đối tượng đầu tiên (thứ tá»± z thấp nhất). - - + + Khi bạn kết hợp các nét phá»§ lên nhau, thưá»ng thưá»ng thì chá»— che lấp nhau đó sẽ không có màu tô: - - - + + + Äây là cách dá»… nhất để tạo má»™t đối tượng có các khoen trống trên đó. Äể biết thêm vá» các lệnh xá»­ lý nét mạnh hÆ¡n, hãy xem phần “Các phép logic†dưới đây. - - Chuyển thành đưá»ng nét + + Chuyển thành đưá»ng nét - - + + @@ -292,167 +292,172 @@ nodes. Here are two stars - the left one is kept a shape and the right one is converted to path. Switch to node tool and compare their editability when selected: - - - - + + + + - HÆ¡n nữa, bạn có thể chuyển nét viá»n cá»§a đối tượng thành đưá»ng nét. Hình dưới, đối tượng bên trái là má»™t đưá»ng nét nguyên bản (không tô màu, viá»n Ä‘en) trong khi đối tượng thứ 2 là kết quả cá»§a lệnh Nét viá»n sang đưá»ng nét (Ctrl+Alt+C) (tô màu Ä‘en, không có viá»n): + HÆ¡n nữa, bạn có thể chuyển nét viá»n cá»§a đối tượng thành đưá»ng nét. Hình dưới, đối tượng bên trái là má»™t đưá»ng nét nguyên bản (không tô màu, viá»n Ä‘en) trong khi đối tượng thứ 2 là kết quả cá»§a lệnh Nét viá»n sang đưá»ng nét (Ctrl+Alt+C) (tô màu Ä‘en, không có viá»n): - - - - Các phép toán tập hợp + + + + Các phép toán tập hợp - - + + Các lệnh trong trình đơn ÄÆ°á»ng nét cho phép bạn kết hợp 2 hoặc nhiá»u đối tượng lại bằng các phép toán tập hợp: - Hình gốc - Hợp (Ctrl++) - Hiệu (Ctrl+-) - Giao(Ctrl+*) - Loại trừ(Ctrl+^) - Chia(Ctrl+/) - Cắt đưá»ng nét(Ctrl+Alt+/) - - - - - - - - - - - (bottom minus top) - - + Hình gốc + Hợp (Ctrl++) + Hiệu (Ctrl+-) + Giao(Ctrl+*) + Loại trừ(Ctrl+^) + Chia(Ctrl+/) + Cắt đưá»ng nét(Ctrl+Alt+/) + + + + + + + + + + + (bottom minus top) + + - Các phím tắt bàn phím cho những lệnh này liên quan đến các phép số há»c tương ứng vá»›i các phép tập hợp đó (phép hợp tương ứng vá»›i phép cá»™ng, phép hiệu tương ứng vá»›i phép trừ..) Lệnh Hiệu và Loại trừ chỉ có thể hoạt động nếu bạn chá»n 2 đối tượng; vá»›i các lệnh khác, bạn có thể chá»n bao nhiêu đối tượng cÅ©ng được. Kết quả trả vá» luôn có kiểu dáng cá»§a đối tượng thấp nhất trong lá»›p. + Các phím tắt bàn phím cho những lệnh này liên quan đến các phép số há»c tương ứng vá»›i các phép tập hợp đó (phép hợp tương ứng vá»›i phép cá»™ng, phép hiệu tương ứng vá»›i phép trừ..) Lệnh Hiệu và Loại trừ chỉ có thể hoạt động nếu bạn chá»n 2 đối tượng; vá»›i các lệnh khác, bạn có thể chá»n bao nhiêu đối tượng cÅ©ng được. Kết quả trả vá» luôn có kiểu dáng cá»§a đối tượng thấp nhất trong lá»›p. - - + + - Kết quả cá»§a phép Loại trừ tương đối giống vá»›i phép Hợp (xem phần trên), nhưng khác nhau ở chá»— phép Loại trừ thêm các nút má»›i tại những vùng giao nhau. Sá»± khác biệt giữa phép Chia và Cắt đưá»ng nét là phép Chia chia toàn bá»™ đối tượng nằm dưới cùng cho nét cá»§a đối tượng nằm trên cùng, trong khi lệnh Cắt đưá»ng dẫn chỉ chia đưá»ng viá»n cá»§a đối tượng nằm dưới cùng và xóa tất cả các màu tô (dùng lệnh này để cắt các đối tượng không có màu tô thành từng phần nhá»). + Kết quả cá»§a phép Loại trừ tương đối giống vá»›i phép Hợp (xem phần trên), nhưng khác nhau ở chá»— phép Loại trừ thêm các nút má»›i tại những vùng giao nhau. Sá»± khác biệt giữa phép Chia và Cắt đưá»ng nét là phép Chia chia toàn bá»™ đối tượng nằm dưới cùng cho nét cá»§a đối tượng nằm trên cùng, trong khi lệnh Cắt đưá»ng dẫn chỉ chia đưá»ng viá»n cá»§a đối tượng nằm dưới cùng và xóa tất cả các màu tô (dùng lệnh này để cắt các đối tượng không có màu tô thành từng phần nhá»). - - Co rút và mở rá»™ng hình + + Co rút và mở rá»™ng hình - - + + - Inkscape không những có thể mở rá»™ng và thu nhá» hình dạng bằng co giãn tỉ lệ, mà còn cung cấp các phép dá»i hình lên đối tượng, tức là di chuyển từng Ä‘iểm trên nét theo hướng vuông góc vá»›i tiếp tuyến cá»§a nét tại Ä‘iểm đó. Các lệnh tương ứng được gá»i là Dá»i vào (Ctrl+() (dịch nét vào trong) và Dá»i ra (Ctrl+)) (dịch nét ra ngoài). Hình dưới đây là hình gốc (màu Ä‘á») và các đưá»ng được dịch vào và ra từ nó: + Inkscape không những có thể mở rá»™ng và thu nhá» hình dạng bằng co giãn tỉ lệ, mà còn cung cấp các phép dá»i hình lên đối tượng, tức là di chuyển từng Ä‘iểm trên nét theo hướng vuông góc vá»›i tiếp tuyến cá»§a nét tại Ä‘iểm đó. Các lệnh tương ứng được gá»i là Dá»i vào (Ctrl+() (dịch nét vào trong) và Dá»i ra (Ctrl+)) (dịch nét ra ngoài). Hình dưới đây là hình gốc (màu Ä‘á») và các đưá»ng được dịch vào và ra từ nó: - - - - - - - - - + + + + + + + + + - Các lệnh Dá»i vào và Dá»i ra tạo ra các đưá»ng nét (chuyển đối tượng gốc thành đưá»ng nét nếu nó là hình dạng). Thông thưá»ng, bạn hay dùng lệnh Dá»i hình động (Ctrl+J) để tạo ra má»™t đối tượng có độ dá»i hình Ä‘iá»u chỉnh được bằng 1 chốt kéo (tương tá»± như đối tượng hình dạng). Chá»n đối tượng bên dưới, chuyển sang công cụ Nút, và kéo chốt Ä‘iá»u khiển cá»§a nó để thá»±c hành: + Các lệnh Dá»i vào và Dá»i ra tạo ra các đưá»ng nét (chuyển đối tượng gốc thành đưá»ng nét nếu nó là hình dạng). Thông thưá»ng, bạn hay dùng lệnh Dá»i hình động (Ctrl+J) để tạo ra má»™t đối tượng có độ dá»i hình Ä‘iá»u chỉnh được bằng 1 chốt kéo (tương tá»± như đối tượng hình dạng). Chá»n đối tượng bên dưới, chuyển sang công cụ Nút, và kéo chốt Ä‘iá»u khiển cá»§a nó để thá»±c hành: - - - + + + Má»™t đối tượng dá»i hình động như vậy luôn nhá»› đưá»ng nét gốc là như thế nào, nên nó không “xuống cấp†khi bạn thay đổi nhiá»u lần khoảng cách dịch chuyển. Khi bạn không cần Ä‘iá»u chỉnh khoảng cách này nữa, bạn luôn có thể chuyển má»™t đối tượng dá»i hình vỠđưá»ng nét gốc. - - + + Tương tá»± như phép dá»i hình động, đối tượng dá»i hình liên kết là đối tượng dá»i hình động, được nối vá»›i 1 đưá»ng nét khác. Bạn có thể có nhiá»u đối tượng dá»i hình liên kết từ cùng 1 nét nguồn. Hình dưới đây, đưá»ng nét nguồn được tô màu Ä‘á», 1 đối tượng dá»i hình liên kết có màu Ä‘en và không có màu tô, còn má»™t nét khác có màu Ä‘en nhưng không cos nét viá»n. - - + + - Chá»n đối tượng màu đỠvà sá»­a lại các nút cá»§a nó; hãy xem các đối tượng dá»i hình liên kết vá»›i nó thay đổi ra sao. Giá» hãy chá»n má»™t trong 2 đối tượng dá»i hình và thay đổi lại khoảng cách dịch. Cuối cùng, hãy xem lúc di chuyển và chuyển dạng đối tượng nguồn, các đối tượng liên kết sẽ như thế nào, và ngược lại, đối tượng dịch hình có được phép thay đổi tá»± do không. + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - ÄÆ¡n giản hoá + + ÄÆ¡n giản hoá - - + + - Tác dụng chính cá»§a lệnh ÄÆ¡n giản hoá (Ctrl+L) là giảm số nút có trên 1 đưá»ng nét trong khi hầu như giữ cho hình dạng đưá»ng nét là không đổi. Lệnh này rất hữu ích khi bạn dùng công cụ Bút chì để tạo nét, vì công cụ đó thưá»ng tạo ra nhiá»u nét hÆ¡n là bạn mong đợi. Ở dưới, hình bên trái được tạo bằng công cụ Bút chì, còn bên phải là bản sao cá»§a nó đã được đơn giản hoá. ÄÆ°á»ng nét gốc có 28 nút, trong khi đưá»ng nét được đơn giản hoá có 17 nút (dÄ© nhiên, làm việc vá»›i 17 nút sẽ dá»… hÆ¡n) và mịn hÆ¡n. + Tác dụng chính cá»§a lệnh ÄÆ¡n giản hoá (Ctrl+L) là giảm số nút có trên 1 đưá»ng nét trong khi hầu như giữ cho hình dạng đưá»ng nét là không đổi. Lệnh này rất hữu ích khi bạn dùng công cụ Bút chì để tạo nét, vì công cụ đó thưá»ng tạo ra nhiá»u nét hÆ¡n là bạn mong đợi. Ở dưới, hình bên trái được tạo bằng công cụ Bút chì, còn bên phải là bản sao cá»§a nó đã được đơn giản hoá. ÄÆ°á»ng nét gốc có 28 nút, trong khi đưá»ng nét được đơn giản hoá có 17 nút (dÄ© nhiên, làm việc vá»›i 17 nút sẽ dá»… hÆ¡n) và mịn hÆ¡n. - - - - + + + + Mức độ (hay ngưỡng) st trong mCtrl+Lli - - + + - Besides smoothing freehand strokes, Simplify can be used for various + Besides smoothing freehand strokes, Simplify can be used for various creative effects. Often, a shape which is rigid and geometric benefits from some amount of simplification that creates cool life-like generalizations of the original form - melting sharp corners and introducing very natural distortions, sometimes stylish and sometimes plain funny. Here's an example of a clipart shape that looks much nicer after -Simplify: +Simplify: - Gốc - ÄÆ¡n giản hoá nhẹ - ÄÆ¡n giản hoá mạnh - - - - - Tạo văn bản + Gốc + ÄÆ¡n giản hoá nhẹ + ÄÆ¡n giản hoá mạnh + + + + + Tạo văn bản - - + + Inkscape cho phép bạn tạo ra các văn bản dài và phức tạp. DÄ© nhiên, bạn có thể tạo ra các văn bản nhá» như tiêu Ä‘á», khẩu hiệu, biểu hình (logo), nhãn biểu đồ và phụ Ä‘á»... Phần này sẽ giá»›i thiệu các khả năng xá»­ lý văn bản cÆ¡ bản cá»§a Inkscape - - + + Tạo má»™t đối tượng văn bản cÅ©ng đơn giản như tạo má»™t hình dạng: chuyển sang công cụ Văn bản (F8), bấm vào vị trí cần đặt văn bản và gõ ná»™i dung Ä‘oạn văn vào. Äể thay đổi nhóm phông, hãy dùng há»™p thoại Văn bản và Phông chữ (Shift+Ctrl+T). Há»™p thoại này cÅ©ng có 1 ô cho bạn sá»­a lại đối tượng văn bản Ä‘ang chá»n - trong má»™t số trưá»ng hợp, làm theo cách này sẽ hay hÆ¡n là sá»­a văn bản ngay trên khung vẽ (đặc biệt, ô này có chức năng kiểm tra chính tả nữa!) - - + + @@ -461,43 +466,43 @@ objects -so you can click to select and position the cursor in any existing text object (such as this paragraph). - - + + Má»™t trong những thao tác hay thá»±c hiện khi làm việc vá»›i văn bản là thay đổi khoảng cách giữa chữ và dòng. Inkscape cung cấp các phím tắt bàn phím để làm những thao tác này. Khi sá»­a văn bản, Alt+< và Alt+> thay đổi khoảng cách chữ trên dòng hiện tại cá»§a đối tượng văn bản, sao cho chiá»u dài tổng cá»§a dòng sẽ tăng hoặc giảm 1 Ä‘iểm ảnh ở mức thu phóng hiện tại (so sánh vá»›i công cụ Chá»n khi các phím đó làm chức năng co giãn đối tượng ở mức Ä‘iểm ảnh). Do vậy, nếu kích thước phông lá»›n hÆ¡n mặc định, thì mức độ co giãn khoảng cách giữa các chữ sẽ nhá» Ä‘i. Ví dụ: - Gốc - Giảm khoảng cách chữ - Sá»± sáng tạo - Sá»± sáng tạo - - + Gốc + Giảm khoảng cách chữ + Sá»± sáng tạo + Sá»± sáng tạo + + Chữ trên chưa thá»±c sá»± hoàn hảo: khoảng cách giữa các chữ là không đồng Ä‘á»u. Ví dụ, chữ “a†và “t†quá xa nhau trong khi “t†và “i†lại quá gần. Khoảng cách giữa các chữ không đồng Ä‘á»u (đặc biệt khi ta dùng phông chữ lá»›n) hay xuất hiện khi ta dùng phông chữ kém chất lượng; tuy nhiên, trong chuá»—i văn bản bất kỳ, ta có thể gặp 1 cặp chữ cần Ä‘iá»u chỉnh lại khoảng cách. - - + + Inkscape cho phép ta dá»… dàng sá»­a khoảng cách giữa 2 chữ. Chỉ việc di chuyển con trá» văn bản tá»›i giữa các con chữ và dùng Alt+mÅ©i tên để di chuyển các con chữ bên phải con trá». Dưới đây vẫn là ná»™i dung tiêu đỠở trên, nhưng đã được chỉnh lại khoảng cách chữ để cho phù hợp hÆ¡n: - Giảm khoảng cách giữa các chữ, tá»± sắp xếp khoảng cách má»™t số cặp chữ - Sá»± sáng tạo - - + Giảm khoảng cách giữa các chữ, tá»± sắp xếp khoảng cách má»™t số cặp chữ + Sá»± sáng tạo + + Ngoài việc dịch chữ sang ngang bằng phím Alt+mÅ©i tên trái hoặc Alt+mÅ©i tên phải, bạn còn có thể dịch chữ theo chiá»u dá»c bằng Alt+mÅ©i tên lên hoặc Alt+mÅ©i tên xuống: - Sá»± sáng tạo - - + Sá»± sáng tạo + + @@ -509,34 +514,34 @@ disadvantage to the “text as text†approach is that you need to have the ori installed on any system where you want to open that SVG document. - - + + Tương tá»± như thay đổi khoảng cách giữa các chữ, thay đổi khoảng cách dòng trong đối tượng văn bản có nhiá»u dòng bằng tổ hợp Ctrl+Alt+< và Ctrl+Alt+> cho Ä‘oạn văn bất kỳ trong bài hướng dẫn này để chiá»u cao cá»§a đối tượng văn bản tăng hay giảm 1 Ä‘iểm ảnh ở mức thu phóng hiện tại. Giống như công cụ Chá»n, nhấn Shift kết hợp vá»›i thao tác tăng giảm khoảng cách sẽ cho hiệu quả gấp 10 lần lúc không giữ Shift. - - Bá»™ sá»­a XML + + Bá»™ sá»­a XML - - + + Công cụ toàn năng nhất cá»§a Inkscape là bá»™ sá»­a XML (Shift+Ctrl+X). Nó hiển thị toàn bá»™ cây XML cá»§a tài liệu Ä‘ang mở, và luôn cập nhật khi có sá»± thay đổi trong tài liệu. Bạn có thể dùng nó để sá»­a lại bản vẽ cá»§a mình. HÆ¡n thế, bạn có thể sá»­a văn bản, các thành phần và tính chất cá»§a chúng kết hợp vá»›i việc quan sát hình biểu diá»…n trên vùng vẽ. Äây là công cụ hay nhất để há»c SVG theo cách tương tác, và nó cho phép bạn làm nhiá»u tác vụ mà bạn sẽ không thể thá»±c hiện từ các lệnh trên trình đơn. - - Kết luận + + Kết luận - - + + - Bài hướng dẫn này giá»›i thiệu cho bạn má»™t phần nhá» những khả năng cá»§a Inkscape. Chúng tôi hi vá»ng rằng bạn thích nó. Hãy thá»­ nghiệm và chia sẻ những tác phẩm cá»§a bạn vá»›i má»i ngưá»i. Xin hãy đến www.inkscape.org để tìm thêm thông tin, lấy vá» phiên bản má»›i nhất, và các trợ giúp cho ngưá»i dùng cÅ©ng như cho lập trình viên trong cá»™ng đồng Inkscape. + Bài hướng dẫn này giá»›i thiệu cho bạn má»™t phần nhá» những khả năng cá»§a Inkscape. Chúng tôi hi vá»ng rằng bạn thích nó. Hãy thá»­ nghiệm và chia sẻ những tác phẩm cá»§a bạn vá»›i má»i ngưá»i. Xin hãy đến www.inkscape.org để tìm thêm thông tin, lấy vá» phiên bản má»›i nhất, và các trợ giúp cho ngưá»i dùng cÅ©ng như cho lập trình viên trong cá»™ng đồng Inkscape. - + @@ -566,8 +571,8 @@ installed on any system where you want to open that SVG document. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-advanced.zh_CN.svg b/share/tutorials/tutorial-advanced.zh_CN.svg index 8df01840e..10854752f 100644 --- a/share/tutorials/tutorial-advanced.zh_CN.svg +++ b/share/tutorials/tutorial-advanced.zh_CN.svg @@ -36,61 +36,61 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::高级 -bulia byak, buliabyak@users.sf.net ï¼› josh andler, scislac@users.sf.net - - + + + 本教程包括:å¤åˆ¶/粘贴ã€èŠ‚ç‚¹ç¼–è¾‘ã€æ‰‹ç»˜å’ŒBezier曲线ã€è·¯å¾„æ“作ã€å¸ƒå°”æ“作ã€åç§»ã€ç®€åŒ–ã€ä»¥åŠæ–‡æœ¬å·¥å…·ã€‚ - - + + - 通过Ctrl+arrows, 滚轮, 或者 中键拖动 将绘图页é¢å‘下å·åŠ¨ã€‚ç»˜å›¾å¯¹è±¡çš„åˆ›å»ºã€é€‰æ‹©ã€å˜æ¢ç­‰åŸºæœ¬æ“作,请å‚考帮助Help > 教程Tutorials中的基础教程。 + 通过Ctrl+arrows, 滚轮, 或者 中键拖动 将绘图页é¢å‘下å·åŠ¨ã€‚ç»˜å›¾å¯¹è±¡çš„åˆ›å»ºã€é€‰æ‹©ã€å˜æ¢ç­‰åŸºæœ¬æ“作,请å‚考帮助Help > 教程Tutorials中的基础教程。 - - 粘贴æ“作 + + 粘贴æ“作 - - + + - 当用Ctrl+Cå¤åˆ¶å¯¹è±¡æˆ–Ctrl+X剪切对象åŽï¼Œé€šå¸¸çš„粘贴Paste命令(Ctrl+V)å°†å¤åˆ¶çš„对象粘贴到鼠标光标处,如果光标在绘图窗å£å¤–,则粘贴到文档窗å£çš„中心。实际上,剪贴æ¿ä¸­çš„对象ä»ç„¶è®°ç€å®ƒçš„原始ä½ç½®ï¼Œä½ å¯ä»¥ç”¨åŽŸä½ç²˜è´´Paste in Place将它粘回原始ä½ç½®(Ctrl+Alt+V)。 + 当用Ctrl+Cå¤åˆ¶å¯¹è±¡æˆ–Ctrl+X剪切对象åŽï¼Œé€šå¸¸çš„粘贴Paste命令(Ctrl+V)å°†å¤åˆ¶çš„对象粘贴到鼠标光标处,如果光标在绘图窗å£å¤–,则粘贴到文档窗å£çš„中心。实际上,剪贴æ¿ä¸­çš„对象ä»ç„¶è®°ç€å®ƒçš„原始ä½ç½®ï¼Œä½ å¯ä»¥ç”¨åŽŸä½ç²˜è´´Paste in Place将它粘回原始ä½ç½®(Ctrl+Alt+V)。 - - + + - å¦ä¸€ä¸ªç²˜è´´å‘½ä»¤ï¼Œç²˜è´´æ ·å¼Paste Style(Shift+Ctrl+V),将å¤åˆ¶å¯¹è±¡çš„æ ·å¼åº”用到所选对象。样å¼åŒ…括:填充ã€è½®å»“ã€ä»¥åŠå­—体设置,但ä¸åŒ…括形状ã€å¤§å°ã€ä»¥åŠä¸Žè¯¥å½¢çŠ¶ç›¸å…³çš„å‚æ•°ï¼Œå¦‚星形的角数等。 + å¦ä¸€ä¸ªç²˜è´´å‘½ä»¤ï¼Œç²˜è´´æ ·å¼Paste Style(Shift+Ctrl+V),将å¤åˆ¶å¯¹è±¡çš„æ ·å¼åº”用到所选对象。样å¼åŒ…括:填充ã€è½®å»“ã€ä»¥åŠå­—体设置,但ä¸åŒ…括形状ã€å¤§å°ã€ä»¥åŠä¸Žè¯¥å½¢çŠ¶ç›¸å…³çš„å‚æ•°ï¼Œå¦‚星形的角数等。 - - + + - 命令粘贴大å°Paste Size,将å¤åˆ¶å¯¹è±¡çš„大å°åº”用到所选对象上。该命令包括:粘贴大å°ã€å®½åº¦ã€é«˜åº¦ï¼Œä»¥åŠåˆ†åˆ«ç²˜è´´å¤§å°ã€å®½åº¦ã€é«˜åº¦ã€‚ + 命令粘贴大å°Paste Size,将å¤åˆ¶å¯¹è±¡çš„大å°åº”用到所选对象上。该命令包括:粘贴大å°ã€å®½åº¦ã€é«˜åº¦ï¼Œä»¥åŠåˆ†åˆ«ç²˜è´´å¤§å°ã€å®½åº¦ã€é«˜åº¦ã€‚ - - + + - 粘贴大å°Paste Size将全部选择的总大å°ç¼©æ”¾åˆ°å‰ªè´´æ¿ä¸­å¯¹è±¡çš„æ€»å¤§å°ã€‚粘贴宽度Paste Width/粘贴高度Paste Heightåˆ™ä»…å½±å“æ°´å¹³å’Œç«–ç›´æ–¹å‘ä¸Šçš„å°ºå¯¸ã€‚è¿™äº›å‘½ä»¤ä¾æ®å¤åˆ¶å¯¹è±¡çš„长宽比是å¦é”定(选择工具控制æ ï¼ŒWå’ŒH的中间),如果å¤åˆ¶å¯¹è±¡çš„长宽比é”定,目标对象的å¦å¤–一个方å‘上的尺寸将根æ®è¯¥æ¯”例自动缩放;å¦åˆ™ï¼Œå¦ä¸€ä¸ªæ–¹å‘çš„å°ºå¯¸å°†ä¸æ”¹å˜ã€‚带有“分别Separatelyâ€çš„相应命令也是类似的,ä¸åŒä¹‹å¤„在于将æ¯ä¸ªé€‰æ‹©å¯¹è±¡éƒ½åˆ†åˆ«ç¼©æ”¾ä»¥é€‚应å¤åˆ¶çš„对象。 + 粘贴大å°Paste Size将全部选择的总大å°ç¼©æ”¾åˆ°å‰ªè´´æ¿ä¸­å¯¹è±¡çš„æ€»å¤§å°ã€‚粘贴宽度Paste Width/粘贴高度Paste Heightåˆ™ä»…å½±å“æ°´å¹³å’Œç«–ç›´æ–¹å‘ä¸Šçš„å°ºå¯¸ã€‚è¿™äº›å‘½ä»¤ä¾æ®å¤åˆ¶å¯¹è±¡çš„长宽比是å¦é”定(选择工具控制æ ï¼ŒWå’ŒH的中间),如果å¤åˆ¶å¯¹è±¡çš„长宽比é”定,目标对象的å¦å¤–一个方å‘上的尺寸将根æ®è¯¥æ¯”例自动缩放;å¦åˆ™ï¼Œå¦ä¸€ä¸ªæ–¹å‘çš„å°ºå¯¸å°†ä¸æ”¹å˜ã€‚带有“分别Separatelyâ€çš„相应命令也是类似的,ä¸åŒä¹‹å¤„在于将æ¯ä¸ªé€‰æ‹©å¯¹è±¡éƒ½åˆ†åˆ«ç¼©æ”¾ä»¥é€‚应å¤åˆ¶çš„对象。 - - + + @@ -99,43 +99,43 @@ instances as well as between Inkscape and other applications (which must be able handle SVG on the clipboard to use this). - - 手绘和规则路径 + + 手绘和规则路径 - - + + 创建任æ„形状的最简å•的方法是使用铅笔(手绘)工具(F6): - - - - - - - - - - - + + + + + + + + + + + 对于更规则一些的形状,å¯ä»¥ç”¨é’¢ç¬”(Bezier)工具(Shift+F6): - - - - - - - - - - - + + + + + + + + + + + @@ -149,33 +149,33 @@ the current line segment or the Bezier handles to 15 degree increments. Pressing only the last segment of an unfinished line, press Backspace. - - + + 在手绘和bezier工具模å¼ä¸‹ï¼Œé€‰ä¸­è·¯å¾„的两端都会显示一个方形的锚点anchors,在这些锚点上å¯ä»¥ç»§ç»­ç»˜å›¾ï¼Œä»Žè€Œå»¶é•¿è·¯å¾„,或使其å°é—­ï¼ˆä»Žä¸€ä¸ªé”šç‚¹ç”»åˆ°å¦ä¸€ä¸ªé”šç‚¹ï¼‰ï¼Œè€Œä¸äº§ç”Ÿæ–°çš„路径。 - - 编辑路径 + + 编辑路径 - - + + 形状工具创建的是形状,而钢笔和铅笔工具创建的是路径。路径由直线和Bezier曲线构æˆï¼Œåƒå…¶ä»–对象一样,路径也å¯ä»¥è®¾ç½®ä»»æ„类型的填充和轮廓属性。但与形状ä¸åŒçš„æ˜¯ï¼Œä¿®æ”¹è·¯å¾„æ—¶å¯ä»¥éšæ„调整节点和(直线或曲线)æ®µï¼Œè€Œä¸æ˜¯é¢„先设置好的控制柄。切æ¢åˆ°èŠ‚ç‚¹å·¥å…·(F2),然åŽé€‰æ‹©ä¸‹é¢çš„路径: - - - + + + 你会看到路径上有一些ç°è‰²çš„æ–¹å½¢èŠ‚ç‚¹ã€‚é€šè¿‡ç‚¹å‡»ã€Shift+ç‚¹å‡»ã€æˆ–拖出弹性选框,æ¥é€‰æ‹©è¿™äº›èŠ‚ç‚¹ï¼Œä¸Žé€‰æ‹©å™¨å·¥å…·æ‹¾å–对象完全相åŒã€‚也å¯ä»¥å•击路径中的一段æ¥é€‰æ‹©ç›¸é‚»çš„节点。选中的节点将高亮显示,并出现节点控制柄:一个或两个与该节点相连的å°åœ†åœˆã€‚!键在当å‰å­è·¯å¾„范围内å选节点(å­è·¯å¾„上至少选中一个节点)ï¼›Alt+!在整个路径范围内å选节点。 - - + + @@ -187,8 +187,8 @@ but apply to nodes instead of objects. You can add nodes anywhere on a path by either double clicking or by Ctrl+Alt+click at the desired location. - - + + @@ -200,8 +200,8 @@ selected nodes. The path can be broken (Shift+BShift+J). - - + + @@ -217,296 +217,301 @@ of one of the two handles by hovering your mouse over it, so that only the other rotated/scaled to match. - - + + 通过Ctrl+click控制柄,å¯ä»¥å°†èŠ‚ç‚¹çš„æŽ§åˆ¶æŸ„æ”¶å›žï¼ˆåˆ°èŠ‚ç‚¹ä¸Šï¼‰ï¼Œå¦‚æžœç›¸é‚»ä¸¤ä¸ªèŠ‚ç‚¹çš„æŽ§åˆ¶æŸ„éƒ½è¢«æ”¶å›žï¼Œå®ƒä»¬ä¸­é—´å°†å˜ä¸ºç›´çº¿ã€‚在节点上Shift+dragå¯ä»¥å°†æŽ§åˆ¶æŸ„釿–°æ‹‰å‡ºã€‚ - - å­è·¯å¾„å’Œç»“åˆ + + å­è·¯å¾„å’Œç»“åˆ - - + + 一个路径å¯ä»¥åŒ…嫿•°ä¸ªå­è·¯å¾„subpath。æ¯ä¸ªå­è·¯å¾„中的节点互相连接,å­è·¯å¾„与å­è·¯å¾„之间则是断开的。左下图,三个å­è·¯å¾„组åˆä¸ºä¸€ä¸ªè·¯å¾„,å³ä¸‹å›¾ä¸­åˆ™äº’相独立,å„自为一个路径: - - - - - - + + + + + + è¦æ³¨æ„的是,å¤åˆè·¯å¾„å¹¶ä¸ç­‰åŒäºŽç¾¤ç»„,它是一个å•独的对象。如果你选中左上的对象,然åŽåˆ‡æ¢åˆ°èŠ‚ç‚¹å·¥å…·ï¼Œå°†ä¼šçœ‹åˆ°ï¼Œä¸‰ä¸ªå­è·¯å¾„上的节点都显现出æ¥ï¼Œè€Œåœ¨å³ä¾§ï¼Œæ¯æ¬¡åªèƒ½é€‰ä¸­ä¸€ä¸ªè·¯å¾„进行节点编辑。 - - + + - 通过对几个路径进行结åˆCombineå¯ä»¥å½¢æˆä¸€ä¸ªå¤åˆè·¯å¾„(Ctrl+K),也å¯ä»¥å°†ä¸€ä¸ªå¤åˆè·¯å¾„分解为几个独立的路径 (Shift+Ctrl+K)。在上图中练习一下。由于一个对象åªèƒ½æœ‰ä¸€ç§å¡«å……和轮廓样å¼ï¼Œç»“åˆåŽçš„å¤åˆè·¯å¾„å°†ç»§æ‰¿ç¬¬ä¸€ä¸ªå¯¹è±¡ï¼ˆå¤„äºŽå æ”¾æ¬¡åºçš„底层)的属性。 + 通过对几个路径进行结åˆCombineå¯ä»¥å½¢æˆä¸€ä¸ªå¤åˆè·¯å¾„(Ctrl+K),也å¯ä»¥å°†ä¸€ä¸ªå¤åˆè·¯å¾„分解为几个独立的路径 (Shift+Ctrl+K)。在上图中练习一下。由于一个对象åªèƒ½æœ‰ä¸€ç§å¡«å……和轮廓样å¼ï¼Œç»“åˆåŽçš„å¤åˆè·¯å¾„å°†ç»§æ‰¿ç¬¬ä¸€ä¸ªå¯¹è±¡ï¼ˆå¤„äºŽå æ”¾æ¬¡åºçš„底层)的属性。 - - + + 在åˆå¹¶æœ‰å¡«å……的路径时,如果路径之间有é‡å åŒºåŸŸï¼Œåˆå¹¶åŽï¼Œé‡å éƒ¨åˆ†çš„填充将消失: - - - + + + 这是创建内部有孔的形状的最简å•的方法。路径工具的高级æ“作请å‚考下é¢çš„“布尔æ“作â€ã€‚ - - 转æ¢ä¸ºè·¯å¾„ + + 转æ¢ä¸ºè·¯å¾„ - - + + 任何的形状和文本都å¯ä»¥è½¬ä¸ºè·¯å¾„ (Shift+Ctrl+C)。转æ¢ä¸æ”¹å˜å¯¹è±¡çš„外观,但对象原本所具有的特殊编辑方å¼ï¼ˆä¾‹å¦‚çŸ©å½¢å€’åœ†ï¼Œæ”¹å˜æ–‡æœ¬å†…容等)都将ä¸å¤å­˜åœ¨ï¼Œè€Œå˜ä¸ºç”¨èŠ‚ç‚¹å·¥å…·è¿›è¡Œç¼–è¾‘ã€‚è¿™é‡Œæœ‰ä¸¤ä¸ªæ˜Ÿå½¢ï¼Œå·¦è¾¹çš„ä¸€ä¸ªæ˜¯å½¢çŠ¶ï¼Œå³è¾¹çš„å·²ç»è½¬ä¸ºè·¯å¾„,切æ¢åˆ°èŠ‚ç‚¹å·¥å…·æ¨¡å¼ï¼Œé€‰æ‹©è¿™ä¸¤ä¸ªå¯¹è±¡ï¼Œçœ‹çœ‹ä»–们的区别: - - - - + + + + 而且,任何对象的轮廓stroke都å¯ä»¥è½¬æ¢ä¸ºè·¯å¾„(“outlineâ€)。下图中第一个是原始路径(无填充,黑色轮廓),第二个是执行轮廓转为路径Stroke to PathåŽï¼ˆé»‘色填充,无轮廓): - - - - 布尔æ“作 + + + + 布尔æ“作 - - + + 路径Pathèœå•中命令å¯ä»¥å°†å¤šä¸ªè·¯å¾„以布尔æ“作boolean operations的方å¼ç»“åˆåˆ°ä¸€èµ·ï¼š - 原始形状 - åˆå¹¶Union (Ctrl++) - 相å‡Difference (Ctrl+-) - 交集Intersection(Ctrl+*) - 排除Exclusion(Ctrl+^) - 分割Division(Ctrl+/) - 剪切路径Cut Path(Ctrl+Alt+/) - - - - - - - - - - - (底部å‡åŽ»é¡¶éƒ¨) - - + 原始形状 + åˆå¹¶Union (Ctrl++) + 相å‡Difference (Ctrl+-) + 交集Intersection(Ctrl+*) + 排除Exclusion(Ctrl+^) + 分割Division(Ctrl+/) + 剪切路径Cut Path(Ctrl+Alt+/) + + + + + + + + + + + (底部å‡åŽ»é¡¶éƒ¨) + + - 布尔æ“作对应的快æ·é”®ä¹Ÿä¸Žç›¸åº”çš„è¿ç®—相适应(åˆå¹¶union对应加å·ï¼Œç›¸å‡difference对应å‡å·ï¼Œç­‰)。命令相å‡Differenceå’Œ 排除Exclusion åªé’ˆå¯¹ä¸¤ä¸ªè·¯å¾„,其它æ“作å¯ä»¥åº”ç”¨äºŽä»»æ„æ•°é‡çš„对象。æ“作åŽçš„对象总是ä¿ç•™å‚与æ“作的底层对象的样å¼ã€‚ + 布尔æ“作对应的快æ·é”®ä¹Ÿä¸Žç›¸åº”çš„è¿ç®—相适应(åˆå¹¶union对应加å·ï¼Œç›¸å‡difference对应å‡å·ï¼Œç­‰)。命令相å‡Differenceå’Œ 排除Exclusion åªé’ˆå¯¹ä¸¤ä¸ªè·¯å¾„,其它æ“作å¯ä»¥åº”ç”¨äºŽä»»æ„æ•°é‡çš„对象。æ“作åŽçš„对象总是ä¿ç•™å‚与æ“作的底层对象的样å¼ã€‚ - - + + - 排除Exclusion 与结åˆCombine æ“作有些类似,åªä¸è¿‡ï¼ŒæŽ’除Exclusion 在原始对象相交的地方添加节点。分割Division å’Œ 剪切路径Cut Path命令的区别在于å‰è€…用顶层路径将底层路径完全剪切,而åŽè€…åªå‰ªåˆ‡è½®å»“,填充则完全完全删除(适用于将ä¸ç”¨å¡«å……的轮廓分为数段)。 + 排除Exclusion 与结åˆCombine æ“作有些类似,åªä¸è¿‡ï¼ŒæŽ’除Exclusion 在原始对象相交的地方添加节点。分割Division å’Œ 剪切路径Cut Path命令的区别在于å‰è€…用顶层路径将底层路径完全剪切,而åŽè€…åªå‰ªåˆ‡è½®å»“,填充则完全完全删除(适用于将ä¸ç”¨å¡«å……的轮廓分为数段)。 - - 嵌入与扩展 + + 嵌入与扩展 - - + + - Inscapeä¸ä»…å¯ä»¥é€šè¿‡ç¼©æ”¾ï¼Œä¹Ÿå¯ä»¥é€šè¿‡åç§»offsettingæ¥æ‰©å±•和收缩形状,å³å°†è·¯å¾„上的点沿法线方å‘移动。相应的命令为:嵌入Inset (Ctrl+() å’Œ 扩展Outset (Ctrl+))。下图中给出了原始路径(红色)以åŠé€šè¿‡åµŒå…¥å’Œæ‰©å±•产生的新路径: + Inscapeä¸ä»…å¯ä»¥é€šè¿‡ç¼©æ”¾ï¼Œä¹Ÿå¯ä»¥é€šè¿‡åç§»offsettingæ¥æ‰©å±•和收缩形状,å³å°†è·¯å¾„上的点沿法线方å‘移动。相应的命令为:嵌入Inset (Ctrl+() å’Œ 扩展Outset (Ctrl+))。下图中给出了原始路径(红色)以åŠé€šè¿‡åµŒå…¥å’Œæ‰©å±•产生的新路径: - - - - - - - - - + + + + + + + + + - 正常情况下,嵌入Inset 和扩展Outset命令生æˆçš„å¯¹è±¡æ˜¯è·¯å¾„ï¼ˆå¦‚æžœåŽŸå§‹å¯¹è±¡ä¸æ˜¯è·¯å¾„,将先转为路径)。通常,更方便的命令是动æ€åç§»Dynamic Offset (Ctrl+J),通过一个拖动控制柄(åŒå½¢çŠ¶çš„æŽ§åˆ¶æŸ„ç±»ä¼¼ï¼‰æ¥æŽ§åˆ¶åç§»é‡ã€‚选中下é¢çš„对象,切æ¢åˆ°èŠ‚ç‚¹å·¥å…·ï¼Œæ‹–åŠ¨æŽ§åˆ¶æŸ„åˆ°ä¸€ä¸ªåˆé€‚çš„ä½ç½®ï¼š + 正常情况下,嵌入Inset 和扩展Outset命令生æˆçš„å¯¹è±¡æ˜¯è·¯å¾„ï¼ˆå¦‚æžœåŽŸå§‹å¯¹è±¡ä¸æ˜¯è·¯å¾„,将先转为路径)。通常,更方便的命令是动æ€åç§»Dynamic Offset (Ctrl+J),通过一个拖动控制柄(åŒå½¢çŠ¶çš„æŽ§åˆ¶æŸ„ç±»ä¼¼ï¼‰æ¥æŽ§åˆ¶åç§»é‡ã€‚选中下é¢çš„对象,切æ¢åˆ°èŠ‚ç‚¹å·¥å…·ï¼Œæ‹–åŠ¨æŽ§åˆ¶æŸ„åˆ°ä¸€ä¸ªåˆé€‚çš„ä½ç½®ï¼š - - - + + + è¿™ç§åЍæ€å移对象dynamic offset object会记录原始ä½ç½®ï¼Œå¤šæ¬¡è°ƒæ•´å移时ä¸ä¼šäº§ç”Ÿé€€åŒ–(degrade)。如果ä¸éœ€è¦å†è°ƒæ•´ï¼Œå¯ä»¥å°†å移对象转为路径。 - - + + 也许,更有效的是关è”åç§»linked offset,与动æ€å移类似,但原始对象ä»ç„¶ä¿ç•™ï¼Œå¹¶ä¸”å¯ä»¥ç¼–辑。一个原始对象å¯ä»¥æœ‰å¤šä¸ªå…³è”å移。下图中,原始对象是红色的,其中一个关è”å移轮廓是黑色的,没有填充,å¦ä¸€ä¸ªæœ‰é»‘色填充,但没有轮廓。 - - + + - 选择红色的对象,编辑其节点,观察关è”å移对象的å˜åŒ–。选择关è”对象,拖动控制柄,调节åç§»é‡ã€‚你会注æ„到,移动和改å˜åŽŸå§‹å¯¹è±¡å½±å“到关è”å移对象,而åç§»å¯¹è±¡çš„ç§»åŠ¨å’Œå˜æ¢æ˜¯ç‹¬ç«‹çš„ï¼ŒåŒæ—¶ä¿æŒå’Œæºå¯¹è±¡çš„链接关系。 + Select the red object and node-edit it; watch how both linked offsets respond. Now +select any of the offsets and drag its handle to adjust the offset radius. Finally, note + how you +can move or transform the offset objects independently without losing their connection +with the source. + - + - - 简化 + + 简化 - - + + - 简化Simplify (Ctrl+L)命令在尽é‡ä¿æŒå½¢çŠ¶çš„æƒ…å†µä¸‹å‡å°‘路径上的节点。铅笔工具创建的对象,节点数目往往过多,需è¦è¿™ä¸ªå·¥å…·æ¥ç®€åŒ–。下图中,左侧的形状是通过手绘工具创建的,å³ä¾§æ˜¯ç®€åŒ–åŽçš„。原始对象有28个节点,简化åŽåªæœ‰17个(节点工具编辑时更容易一些),而且更平滑。 + 简化Simplify (Ctrl+L)命令在尽é‡ä¿æŒå½¢çŠ¶çš„æƒ…å†µä¸‹å‡å°‘路径上的节点。铅笔工具创建的对象,节点数目往往过多,需è¦è¿™ä¸ªå·¥å…·æ¥ç®€åŒ–。下图中,左侧的形状是通过手绘工具创建的,å³ä¾§æ˜¯ç®€åŒ–åŽçš„。原始对象有28个节点,简化åŽåªæœ‰17个(节点工具编辑时更容易一些),而且更平滑。 - - - - + + + + - 简化的程度(称为阈值threshold)å–决于选区的大å°ã€‚æ‰€ä»¥ï¼Œå¦‚æžœé€‰æ‹©è·¯å¾„çš„åŒæ—¶ä¹Ÿé€‰æ‹©äº†è¾ƒå¤§å¯¹è±¡ï¼Œç®€åŒ–çš„ç¨‹åº¦å°†æ›´å¤§ã€‚å¹¶ä¸”ï¼Œç®€åŒ–çš„é€Ÿåº¦å°†åŠ å¿«ã€‚ä¹Ÿå°±æ˜¯æ‰€ï¼Œå¦‚æžœè¿žç€æŒ‰å‡ æ¬¡Ctrl+L(间隔ä¸è¶…过0.5ç§’ï¼‰ï¼Œæ¯æ¬¡ç®€åŒ–çš„é˜ˆå€¼å°†é€’å¢žã€‚ï¼ˆå¦‚æžœç­‰ä¸€ä¼šå†æ‰§è¡Œï¼Œé˜ˆå€¼åˆä¼šè¿˜åŽŸåŽŸå§‹å¤§å°ã€‚ï¼‰é€šè¿‡è¿™ç§æ–¹æ³•å¯ä»¥æ¯”较精确地控制简化的程度。 + 简化的程度(称为阈值threshold)å–决于选区的大å°ã€‚æ‰€ä»¥ï¼Œå¦‚æžœé€‰æ‹©è·¯å¾„çš„åŒæ—¶ä¹Ÿé€‰æ‹©äº†è¾ƒå¤§å¯¹è±¡ï¼Œç®€åŒ–çš„ç¨‹åº¦å°†æ›´å¤§ã€‚å¹¶ä¸”ï¼Œç®€åŒ–çš„é€Ÿåº¦å°†åŠ å¿«ã€‚ä¹Ÿå°±æ˜¯æ‰€ï¼Œå¦‚æžœè¿žç€æŒ‰å‡ æ¬¡Ctrl+L(间隔ä¸è¶…过0.5ç§’ï¼‰ï¼Œæ¯æ¬¡ç®€åŒ–çš„é˜ˆå€¼å°†é€’å¢žã€‚ï¼ˆå¦‚æžœç­‰ä¸€ä¼šå†æ‰§è¡Œï¼Œé˜ˆå€¼åˆä¼šè¿˜åŽŸåŽŸå§‹å¤§å°ã€‚ï¼‰é€šè¿‡è¿™ç§æ–¹æ³•å¯ä»¥æ¯”较精确地控制简化的程度。 - - + + - 除了平滑手绘对象,简化命令还å¯ä»¥äº§ç”Ÿè®¸å¤šåˆ›é€ æ€§çš„æ•ˆæžœã€‚显得尖é”和呆æ¿çš„对象ç»è¿‡ç®€åŒ–ç»å¸¸åŽäº§ç”Ÿæ›´æŸ”和的效果:é”è§’å˜å¾—平滑,引入更自然的å˜å½¢æ•ˆæžœï¼Œæ˜¾å¾—æ›´ç”ŸåŠ¨ï¼Œæ›´æœ‰é£Žæ ¼ã€‚ä¸‹é¢æ˜¯ä¸€ä¸ªå‰ªè´´ç”»å¯¹è±¡ç»è¿‡ç®€åŒ–åŽçš„æ•ˆæžœï¼š + 除了平滑手绘对象,简化命令还å¯ä»¥äº§ç”Ÿè®¸å¤šåˆ›é€ æ€§çš„æ•ˆæžœã€‚显得尖é”和呆æ¿çš„对象ç»è¿‡ç®€åŒ–ç»å¸¸åŽäº§ç”Ÿæ›´æŸ”和的效果:é”è§’å˜å¾—平滑,引入更自然的å˜å½¢æ•ˆæžœï¼Œæ˜¾å¾—æ›´ç”ŸåŠ¨ï¼Œæ›´æœ‰é£Žæ ¼ã€‚ä¸‹é¢æ˜¯ä¸€ä¸ªå‰ªè´´ç”»å¯¹è±¡ç»è¿‡ç®€åŒ–åŽçš„æ•ˆæžœï¼š - 原始的 - 轻微简化 - 严é‡ç®€åŒ– - - - - - 创建文本 + 原始的 + 轻微简化 + 严é‡ç®€åŒ– + + + + + 创建文本 - - + + Inkscapeå¯ä»¥åˆ›å»ºå¤æ‚的文本。也å¯ä»¥å¾ˆæ–¹ä¾¿åœ°ç»˜åˆ¶ç®€çŸ­çš„æ–‡å­—对象,例如标题,标识,标语,æµç¨‹å›¾ç­‰ä¸­çš„æ–‡å­—。本节介ç»Inkscape中文本工具的基本功能。 - - + + 切æ¢åˆ°æ–‡æœ¬å·¥å…·(F8),在页é¢ä¸Šçš„ä»»æ„ä½ç½®ç‚¹å‡»ï¼Œç„¶åŽè¾“å…¥æ–‡å­—ã€‚æ‰“å¼€æ–‡æœ¬å’Œå­—ä½“å¯¹è¯æ¡†Text and Font dialog(Shift+Ctrl+T),å¯ä»¥ä¿®æ”¹æ–‡å­—的字体,样å¼ï¼Œå¤§å°å’Œå¯¹é½æ–¹å¼ã€‚è¿™ä¸ªå¯¹è¯æ¡†é‡Œä¹Ÿæœ‰ä¸€ä¸ªæ–‡å­—输入框,å¯ä»¥ä¿®æ”¹é€‰ä¸­çš„æ–‡æœ¬çš„å†…å®¹ã€‚åœ¨è¿™ä¸ªå¯¹è¯æ¡†é‡Œè¾“入文本å¯èƒ½æ¯”åœ¨ç”»å¸ƒä¸Šæ›´æ–¹ä¾¿ï¼ˆè€Œä¸”æ”¯æŒæ‹¼å†™æ£€æŸ¥ï¼‰ã€‚ - - + + åƒå…¶å®ƒå·¥å…·ä¸€æ ·ï¼Œæ–‡æœ¬å·¥å…·æ¨¡å¼ä¸‹å¯ä»¥é€‰æ‹©å…¶è‡ªèº«ç±»åž‹çš„对象——文本对象——点击选择,将输入光标放到文本中的任æ„ä½ç½®ï¼ˆæ¯”如这个段è½ï¼‰ã€‚ - - + + 文本编辑中常用的一个æ“作是调整文字间è·å’Œè¡Œé—´è·ï¼ŒInkscapeä¸­åŒæ ·æœ‰å¯¹åº”的键盘æ“作方å¼ã€‚当编辑文本时,Alt+< å’ŒAlt+>改å˜å½“å‰è¡Œçš„å­—é—´è·letter spacing,该行的长度在当å‰ç¼©æ”¾çº§åˆ«ä¸Šæ¯æ¬¡æ”¹å˜ä¸€ä¸ªåƒç´ ï¼ˆé€‰æ‹©å·¥å…·ä¸­ï¼ŒåŒæ ·ç”¨è¿™äº›é”®å®žçްåƒç´ çº§åˆ«çš„缩放)。通常,如果字体比默认的大,字间è·ç´§å‡‘ä¸€äº›çœ‹èµ·æ¥æ›´å调。例如: - 原始的 - å­—é—´è·å‡å°ï¼Œ - Inspiration - Inspiration - - + 原始的 + å­—é—´è·å‡å°ï¼Œ + Inspiration + Inspiration + + ç´§å‡‘ä¸€äº›çš„ä½œä¸ºæ ‡é¢˜çœ‹èµ·æ¥æ›´å¥½ä¸€äº›ï¼Œä½†ä»ç„¶ä¸æ˜¯å¾ˆå®Œç¾Žï¼šå­—é—´è·å¹¶ä¸ä¸€è‡´ï¼Œä¾‹å¦‚,“a"å’Œ"t"的间隔比"t"å’Œ"i"的间è·å¤§ã€‚åœ¨ä¸€äº›è´¨é‡æ¯”较差的字体中,(尤其是字体比较大的情况下)这ç§ä¸å‡è¡¡çš„紧排更明显;但是,ä¸ç®¡ä»»ä½•å­—ä½“ï¼Œæ€»ä¼šå­˜åœ¨è¿™ç§æ–‡æœ¬ç»„åˆï¼Œéœ€è¦æ‰‹å·¥è°ƒæ•´æ¾ç´§ã€‚ - - + + 在Inkscapeä¸­è°ƒæ•´èµ·æ¥æ˜¯å¾ˆæ–¹ä¾¿çš„,将光标放到需è¦è°ƒæ•´çš„两个字符的中间,Alt+arrows键移动光标å³ä¾§çš„æ–‡å­—。与上é¢ç›¸åŒçš„æ–‡å­—,手动调整字符间è·åŽï¼š - å­—é—´è·å‡å°ï¼ŒæŸäº›å­—之间手工调节 - Inspiration - - + å­—é—´è·å‡å°ï¼ŒæŸäº›å­—之间手工调节 + Inspiration + + 除了Alt+Left å’ŒAlt+Right将文字左å³ç§»åŠ¨ï¼ŒAlt+Up å’Œ Alt+Down也å¯ä»¥å°†æ–‡å­—上下移动: - Inspiration - - + Inspiration + + 当然也å¯ä»¥å°†æ–‡å­—转为路径(Shift+Ctrl+C),并将字符åƒè·¯å¾„ä¸€æ ·ç§»åŠ¨ã€‚ä½†æ˜¯ï¼Œè®©å…¶ä¿æŒä¸ºæ–‡å­—无疑是更好的选择,ä¸ä»…å¯ä»¥ç¼–辑,改å˜å­—体时也ä¸ä¼šä¸¢å¤±é—´è·ï¼Œæ–‡ä»¶çš„体积也更å°ã€‚ä¿ç•™ä¸ºæ–‡æœ¬çš„唯一缺点是,当你将该SVG文件拿到别的计算机上打开时,这个机å­ä¸Šå¿…须安装有相应的字体。 - - + + 与字间è·ç±»ä¼¼ï¼Œåœ¨å¤šè¡Œæ–‡æœ¬ä¸­ä¹Ÿå¯ä»¥è°ƒæ•´è¡Œé—´è·line spacingã€‚åœ¨æœ¬æ•™ç¨‹çš„ä»»æ„æ®µè½ä¸­ï¼ŒCtrl+Alt+< å’ŒCtrl+Alt+>æ¥å¢žå¤§å’Œç¼©å°è¡Œé—´è·ï¼Œæ¯æ¬¡è°ƒæ•´ï¼Œæ•´ä¸ªæ–‡æœ¬çš„高度在当å‰ç¼©æ”¾çº§åˆ«ä¸Šæ”¹å˜ä¸€ä¸ªåƒç´ ã€‚与选择工具类似,é…åˆShift键,行间è·å’Œå­—é—´è·çš„è°ƒæ•´é‡æ‰©å¤§åå€ã€‚ - - XML编辑器 + + XML编辑器 - - + + Inkscape中的终æžå·¥å…·æ˜¯XML编辑器(Shift+Ctrl+X),å¯ä»¥å®žæ—¶æ˜¾ç¤ºæ•´ä¸ªæ–‡æ¡£çš„XML树形图。修改绘图时,你å¯ä»¥æ³¨æ„一下XML树形图中的å˜åŒ–。也å¯ä»¥åœ¨XML编辑器中修改文本ã€å…ƒç´ æˆ–者节点属性,然åŽåœ¨ç”»å›¾ä¸ŠæŸ¥çœ‹æ•ˆæžœã€‚这是一个éžå¸¸å½¢è±¡åŒ–的学习SVGæ ¼å¼çš„交互å¼å·¥å…·ã€‚并且å¯ä»¥å®žçŽ°ä¸€äº›é€šå¸¸çš„ç¼–è¾‘å·¥å…·æ— æ³•å®Œæˆçš„功能。 - - å°ç»“ + + å°ç»“ - - + + - 这个教程åªå±•示了Inkscape功能的一å°éƒ¨åˆ†ï¼Œæˆ‘ä»¬å¸Œæœ›ä½ èƒ½å–œæ¬¢ã€‚æ¬¢è¿ŽæŽ¢ç´¢å®ƒçš„åŠŸèƒ½ï¼Œå±•ç¤ºä½ çš„çµæ„Ÿã€‚更多信æ¯ï¼Œæœ€æ–°ç‰ˆæœ¬ï¼Œä»¥åŠå¯»æ±‚用户社区的帮助,请登录www.inkscape.org。 + 这个教程åªå±•示了Inkscape功能的一å°éƒ¨åˆ†ï¼Œæˆ‘ä»¬å¸Œæœ›ä½ èƒ½å–œæ¬¢ã€‚æ¬¢è¿ŽæŽ¢ç´¢å®ƒçš„åŠŸèƒ½ï¼Œå±•ç¤ºä½ çš„çµæ„Ÿã€‚更多信æ¯ï¼Œæœ€æ–°ç‰ˆæœ¬ï¼Œä»¥åŠå¯»æ±‚用户社区的帮助,请登录www.inkscape.org。 - + @@ -536,8 +541,8 @@ rotated/scaled to match. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-advanced.zh_TW.svg b/share/tutorials/tutorial-advanced.zh_TW.svg index f25962f81..ed58a46ea 100644 --- a/share/tutorials/tutorial-advanced.zh_TW.svg +++ b/share/tutorials/tutorial-advanced.zh_TW.svg @@ -51,429 +51,429 @@ 這篇教學內容涵蓋複製/貼上ã€ç¯€é»žç·¨è¼¯ã€æ‰‹ç¹ªå’Œè²èŒ²æ›²ç·šã€è·¯å¾‘é‹ç”¨ã€å¸ƒæž—é‹ç®—ã€åç§»ã€ç°¡åŒ–和文字工具。 - + 使用 Ctrl+æ–¹å‘éµã€æ»‘鼠滾輪 或 æŒ‰è‘—æ»‘é¼ ä¸­éµæ‹–曳 å¯å‘下æ²å‹•é é¢ã€‚關於建立ã€é¸å–和改變物件的基本方法,請閱讀 說明 > 指導手冊 中的基本教學。 - - 剪貼技巧 + + 剪貼技巧 - + 你用 Ctrl+C 複製或用 Ctrl+X 剪下一些物件後,普通的 貼上 指令 (Ctrl+V) 會在滑鼠游標正下方貼上複製的物件,如果游標ä¸åœ¨è¦–窗內,會將複製物件貼在文件視窗的中心ä½ç½®ã€‚ä¸éŽï¼Œåœ¨å‰ªè²¼ç°¿ä¸­çš„ç‰©ä»¶è¢«è¤‡è£½æ™‚ä»æœƒè¨˜ä½åŽŸå§‹ä½ç½®ï¼Œä¸”ä½ å¯ä»¥ç”¨ åŒä½ç½®è²¼ä¸Š (Ctrl+Alt+V) 貼回到那裡。 - + å¦ä¸€å€‹æŒ‡ä»¤ - è²¼ä¸Šæ¨£å¼ (Shift+Ctrl+V) 套用在剪貼簿上的 (第一個) 物件樣å¼åˆ°ç›®å‰çš„é¸å–。被套用的樣å¼åŒ…括全部的填色ã€é‚Šæ¡†å’Œå­—型設定,但ä¸åŒ…å«å½¢ç‹€ã€å¤§å°æˆ–æŒ‡å®šå½¢ç‹€é¡žåž‹çš„åƒæ•¸ï¼Œä¾‹å¦‚星形的尖角數目。 - + åˆå¦ä¸€å€‹è²¼ä¸ŠæŒ‡ä»¤ - 貼上尺寸,縮放é¸å–的物件使其與剪貼簿物件的尺寸屬性相åŒã€‚下列為一些貼上尺寸的指令:貼上尺寸ã€è²¼ä¸Šå¯¬åº¦ã€è²¼ä¸Šé«˜åº¦ã€åˆ†åˆ¥è²¼ä¸Šå°ºå¯¸ã€åˆ†åˆ¥è²¼ä¸Šå¯¬åº¦å’Œåˆ†åˆ¥è²¼ä¸Šé«˜åº¦ã€‚ - + 貼上尺寸 會縮放整個é¸å–å€ä½¿å…¶èˆ‡å‰ªè²¼ç°¿ç‰©ä»¶æ•´é«”大å°ç›¸åŒã€‚貼上寬度/貼上高度 會水平/垂直縮放整個é¸å–å€å› è€Œå®ƒæœƒèˆ‡å‰ªè²¼ç°¿ç‰©ä»¶çš„寬度/高度相åŒã€‚這些指令éµå¾ªæ–¼é¸å–工具控制列上(W å’Œ H 之間的地方)的縮放比例鎖定,所以當鎖定被按下時,會以等比例縮放é¸å–物件的其他尺寸;å¦å‰‡å…¶ä»–尺寸沒有變化。此指令包å«ã€Œå€‹åˆ¥ã€è™•ç†é¡žä¼¼æ–¼ä¸Šè¿°çš„æŒ‡ä»¤ï¼Œé™¤äº†å®ƒå€‘個別使æ¯å€‹é¸å–物件縮放為與剪貼簿物件的大å°/寬度/高度相åŒã€‚ - + 剪貼簿是全系統範åœçš„ - ä½ å¯ä»¥åœ¨ä¸åŒçš„ Inkscape 實例之間複製/貼上物件,也å¯ä»¥åœ¨ Inkscape 和其他應用程å¼ä¹‹é–“ (此應用程å¼å¿…須能處ç†å‰ªè²¼ç°¿ä¸Šçš„ SVG æ‰å¯ä½¿ç”¨)。 - - 手繪和è¦å‰‡è·¯å¾‘ + + 手繪和è¦å‰‡è·¯å¾‘ - + 製作一個任æ„形狀最簡單的方法是使用鉛筆 (手繪) 工具 (F6) 繪製: - - - - - - - - - - + + + + + + + + + + å¦‚æžœä½ æƒ³è¦æ›´å¤šè¦å‰‡çš„形狀,使用筆 (è²èŒ²æ›²ç·š) 工具 (Shift+F6): - - - - - - - - - - + + + + + + + + + + ç”¨ç­†å·¥å…·æ¯æ¬¡ 點擊 會建立一個無任何曲線控制柄的尖銳節點,所以一連串點擊會產生一æ¢ç›´ç·šç·šæ®µçš„串連。點擊並拖曳 會建立一個帶有兩個å°ç«‹æ–¼åŒä¸€ç›´ç·šä¸Šçš„æŽ§åˆ¶é»žçš„平滑è²èŒ²æ›²ç·šç¯€é»žã€‚ç•¶æ‹–ä½ä¸€å€‹æŽ§åˆ¶é»žæ™‚按 Shift å¯åªæ—‹è½‰å–®å€‹æŽ§åˆ¶é»žä¸¦å›ºå®šå¦ä¸€å€‹ã€‚Ctrl åƒå¾€å¸¸ä¸€æ¨£å¯é™åˆ¶ç›®å‰ç·šæ®µæˆ–è²èŒ²æ›²ç·šæŽ§åˆ¶é»žæ–¹ä½çš„增加é‡ç‚º 15 度。按 Enter 以完æˆä¸¦çµæŸæ­¤ç›´ç·šï¼ŒæŒ‰ Esc å¯å–消它。按 Backspace å¯åªå–消未完æˆç›´ç·šçš„æœ€å¾Œç·šæ®µã€‚ - + ä¸è«–用手繪或è²èŒ²æ›²ç·šå·¥å…·ï¼Œç›®å‰é¸å–的路徑於兩å´ç«¯é»žæœƒé¡¯ç¤ºæ–¹å½¢çš„å°éŒ¨é»žã€‚這些錨點讓你å¯ç¹¼çºŒé€™å€‹è·¯å¾‘ (從其中一個錨點開始繪製) 或關閉它 (從其中一個錨點繪製到å¦ä¸€å€‹)ï¼Œè€Œä¸æ˜¯å»ºç«‹ä¸€å€‹æ–°çš„路徑。 - - 編輯路徑 + + 編輯路徑 - + 用形狀工具建立ä¸åŒçš„形狀,筆和鉛筆工具建立的æ±è¥¿ç¨±ç‚ºè·¯å¾‘。路徑是直線線段和(或)è²èŒ²æ›²ç·šçš„串連,åƒä»»ä½•å…¶ä»– Inkscape 物件一樣會有任æ„填色和邊框屬性。但是ä¸åŒçš„形狀ã€è·¯å¾‘å¯ä»¥è—‰ç”±ä»»æ„拖動它的節點(ä¸åƒ…é å®šç¾©çš„æŽ§åˆ¶é»ž)或直接拖動路徑的線段來編輯。é¸å–這個路徑並切æ›ç‚ºç¯€é»žå·¥å…· (F2): - - + + 你會看到路徑上有許多ç°è‰²æ–¹å½¢ç¯€é»žã€‚這些節點å¯ä»¥è—‰ç”±é»žæ“Šä¾†é¸å–,Shift+點擊 或用拖曳一個é¸å–框 — å°±åƒæ˜¯ç”¨é¸å–工具鏿“‡ç‰©ä»¶ä¸€æ¨£ã€‚你也å¯ä»¥é»žæ“Šè·¯å¾‘線段自動é¸å–相鄰的節點。é¸å–的節點會變明亮並且顯示它們的節點控制柄 — 一個或兩個å°åœ“形由直線連接å„個é¸å–的節點。! 按éµå¯å轉目å‰å­è·¯å¾‘上é¸å–的節點 (å³å«æœ‰æœ€å¾Œé¸å–的節點的å­è·¯å¾‘)ï¼›Alt+! å¯å轉整個路徑。 - + 路徑å¯è—‰ç”±æ‹–曳它們的節點ã€ç¯€é»žæŽ§åˆ¶æŸ„或直接拖動路徑線段進行編輯。(試著拖動上é¢è·¯å¾‘çš„ä¸€äº›ç¯€é»žã€æŽ§åˆ¶æŸ„å’Œè·¯å¾‘ç·šæ®µã€‚) Ctrl 的作用與往常一樣å¯é™åˆ¶ç§»å‹•é‡å’Œæ—‹è½‰é‡ã€‚æ–¹å‘éµã€Tabã€[ã€]ã€<ã€> 按éµçš„全部作用都與在é¸å–å™¨æ™‚ä¸€æ¨£ï¼Œä½†å¥—ç”¨åˆ°ç¯€é»žè€Œä¸æ˜¯ç‰©ä»¶ã€‚ä½ å¯ä»¥è—‰ç”±é»žæ“Šå…©æ¬¡æˆ– Ctrl+Alt+點擊 想è¦çš„ä½ç½®æ–¼è·¯å¾‘上任何地方增加節點。 - + ä½ å¯ä»¥ç”¨ Del 或 Ctrl+Alt+點擊 刪除節點。當刪除節點時會試著維æŒè·¯å¾‘的形狀,如果你渴望撤銷相鄰節點的控制柄,那麼å¯ä»¥ç”¨ Ctrl+Del 刪除。å¦å¤–,你å¯ä»¥å†è£½ (Shift+D) é¸å–的節點。於é¸å–數個節點上的路徑å¯ä»¥è¢«æ‹†é–‹ (Shift+B),或者如果你é¸å–路徑上兩個端點節點,你å¯ä»¥åˆä½µå®ƒå€‘ (Shift+J)。 - + 節點å¯ä»¥è®Šç‚ºå°–è§’ (Shift+C)ï¼Œé€™è¡¨ç¤ºå®ƒçš„å…©å€‹æŽ§åˆ¶æŸ„å½¼æ­¤ä¹‹é–“å¯æ–¼ä»»ä½•角度å„自移動;平滑 (Shift+S) è¡¨ç¤ºå®ƒçš„æŽ§åˆ¶é»žç¸½ä¿æŒåœ¨åŒä¸€ç›´ç·šä¸Š (共線);而å°ç¨± (Shift+Y) åŒæ–¼å¹³æ»‘,但控制柄還具有相åŒçš„長度。當你切æ›ç¯€é»žçš„類型時,你å¯ä»¥å°‡æ»‘é¼ åœç•™åœ¨å…¶ä¸­ä¸€å€‹æŽ§åˆ¶é»žä¸Šé¢ä½¿å…¶ç¶­æŒåŽŸä¾†çš„ä½ç½®ï¼Œæ‰€ä»¥åªæœ‰å¦ä¸€å€‹æŽ§åˆ¶é»žæœƒé…åˆæ—‹è½‰/縮放。 - + åŒæ¨£åœ°ä½ ç”¨ Ctrl+點擊 節點的控制點å¯ä»¥æ’¤éŠ·å®ƒã€‚å¦‚æžœç›¸é„°çš„å…©å€‹ç¯€é»žå·²æ’¤éŠ·ä»–å€‘çš„æŽ§åˆ¶é»žï¼Œç¯€é»žä¹‹é–“çš„è·¯å¾‘ç·šæ®µæœƒè®Šæˆç›´ç·šã€‚從節點 Shift+拖曳離開 坿¢å¾©å·²æ’¤éŠ·çš„ç¯€é»žã€‚ - - å­è·¯å¾‘å’Œåˆä½µ + + å­è·¯å¾‘å’Œåˆä½µ - + 一個路徑物件å¯èƒ½åŒ…å«å¤šå€‹å­è·¯å¾‘。å­è·¯å¾‘是節點連接å¦ä¸€å€‹ç¯€é»žçš„串連。(因此,如果路徑有多個å­è·¯å¾‘ï¼Œä¸¦ä¸æ˜¯æ‰€æœ‰çš„節點都連接在一起。) 下é¢å·¦é‚Šçš„三個路徑屬於單一複åˆè·¯å¾‘;於å³é‚Šç›¸åŒçš„三個路徑是ç¨ç«‹çš„路徑物件: - - - - - + + + + + 注æ„那個複åˆè·¯å¾‘ä¸åŒæ–¼ç¾¤çµ„ã€‚å®ƒæ˜¯å–®ä¸€å€‹ç‰©ä»¶ï¼Œåªæ˜¯æ•´å€‹éƒ½å¯é¸å–。如果你é¸å–上é¢å·¦é‚Šçš„物件並切æ›ç‚ºç¯€é»žå·¥å…·ï¼Œä½ æœƒçœ‹åˆ°ç¯€é»žé¡¯ç¤ºåœ¨å…¨éƒ¨ä¸‰å€‹å­è·¯å¾‘上。在å³é‚Šçš„,你åªèƒ½ä¸€æ¬¡ç·¨è¼¯ä¸€å€‹è·¯å¾‘上的節點。 - + Inkscape å¯ä»¥åˆä½µæ•¸å€‹è·¯å¾‘為一個複åˆè·¯å¾‘ (Ctrl+K) 和打散一個複åˆè·¯å¾‘變為分開的數個路徑 (Shift+Ctrl+K)。在上é¢çš„範例嘗試這些指令。由於一個物件åªèƒ½æœ‰ä¸€ç¨®å¡«è‰²å’Œé‚Šæ¡†ï¼Œä¸€å€‹æ–°çš„複åˆè·¯å¾‘會使用åˆä½µå‰ç¬¬ä¸€å€‹(排列在最下層)物件的樣å¼ã€‚ - + ç•¶ä½ åˆä½µæœ‰å¡«è‰²çš„é‡ç–Šè·¯å¾‘時,通常在路徑é‡ç–Šåœ°æ–¹çš„填色會消失: - - + + 這個是製作帶有孔洞的物件最簡單的方法。看下é¢çš„「布林é‹ç®—ã€æ®µè½å¯äº†è§£æ›´å¤šå¼·å¤§çš„路徑指令。 - - è½‰æ›æˆè·¯å¾‘ + + è½‰æ›æˆè·¯å¾‘ - + 任何形狀或文字物件都å¯è½‰æ›æˆè·¯å¾‘ (Shift+Ctrl+C)。這個æ“ä½œä¸æœƒæ”¹è®Šç‰©ä»¶çš„外觀,但是會移除原本類型的全部特性 (例如你ä¸å†èƒ½å°‡çŸ©å½¢çš„邊角圓角化或編輯文字)ï¼›å–而代之地,你ç¾åœ¨å¯ä»¥ç·¨è¼¯å®ƒçš„ç¯€é»žã€‚ä¸‹é¢æœ‰å…©å€‹æ˜Ÿå½¢ — å·¦é‚Šçš„ä»æ˜¯å½¢ç‹€è€Œå³é‚Šçš„æ˜¯å·²ç¶“è½‰æ›æˆè·¯å¾‘。切æ›åˆ°ç¯€é»žå·¥å…·ä¸¦æ¯”較é¸å–時它們的編輯特性: - - - + + + 此外,你å¯ä»¥å°‡ä»»ä½•物件的邊框轉æ›ç‚ºè·¯å¾‘ (“輪廓â€)。下é¢çš„第一個物件是原本的路徑 (無填色,黑色邊框),第二個是使用邊框轉æˆè·¯å¾‘æŒ‡ä»¤çš„çµæžœ (黑色填色,無邊框): - - - - 布林é‹ç®— + + + + 布林é‹ç®— - + 在路徑é¸å–®ä¸­çš„這個指令讓你用布林é‹ç®—åˆä½µå…©å€‹æˆ–多個物件: - 原始形狀 - 相加 (Ctrl++) - 減去 (Ctrl+-) - 交集(Ctrl+*) - 排除(Ctrl+^) - 除法(Ctrl+/) - 剪切(Ctrl+Alt+/) - - - - - - - - - - - 下層減去上層 - + 原始形狀 + 相加 (Ctrl++) + 減去 (Ctrl+-) + 交集(Ctrl+*) + 排除(Ctrl+^) + 除法(Ctrl+/) + 剪切(Ctrl+Alt+/) + + + + + + + + + + + 下層減去上層 + 這些指令的éµç›¤å¿«æ·éµæ˜¯é‡å°å¸ƒæž—é‹ç®—的類比算法 (相加是è¯é›†ã€æ¸›åŽ»æ˜¯å·®é›†...ç­‰)。相減和排除指令åªèƒ½å¥—ç”¨åˆ°å…©å€‹å·²é¸æ“‡çš„物件;其他的å¯ä»¥ä¸€æ¬¡è™•ç†å¤šå€‹ç‰©ä»¶ã€‚çµæžœéƒ½æ˜¯å‘ˆç¾ä¸‹å±¤ç‰©ä»¶çš„æ¨£å¼ã€‚ - + ä½¿ç”¨æŽ’é™¤æŒ‡ä»¤çš„çµæžœçœ‹èµ·ä¾†åƒæ˜¯åˆä½µ(如上),但它的差別在於排除會在原來的路徑交差點增加é¡å¤–的節點。除法和剪切之間的ä¸åŒæ˜¯å‰è€…以最上層物件切去整個下層物件,而後者åªåˆ‡åŽ»ä¸‹å±¤ç‰©ä»¶çš„é‚Šæ¡†ä¸¦åŽ»æŽ‰ä»»ä½•å¡«è‰² (這個å°å°‡ç„¡å¡«è‰²çš„邊框切割æˆç¢Žç‰‡å¾ˆæ–¹ä¾¿)。 - - 內縮和外擴 + + 內縮和外擴 - + Inkscape ä¸åªå¯ç”¨ç¸®æ”¾ä¾†æ“´å¼µå’Œæ”¶ç¸®å½¢ç‹€ï¼Œä¹Ÿå¯è—‰ç”±åç§»ç‰©ä»¶çš„è·¯å¾‘é”æˆæ•ˆæžœï¼Œå³æ¯å€‹é»žä»¥åž‚直於路徑方å‘ç§»å‹•ã€‚å°æ‡‰çš„æŒ‡ä»¤å稱為內縮 (Ctrl+() 和外擴 (Ctrl+))。下é¢é™³åˆ—的是原始路徑 (紅色) 和一些由原路徑經éŽå…§ç¸®æˆ–外擴的路徑: - - - - - - - - + + + + + + + + 簡單的內縮和外擴指令產生這些路徑 (å¦‚æžœåŽŸç‰©ä»¶ä¸æ˜¯è·¯å¾‘先將它轉æˆè·¯å¾‘)。通常動態åç§» (Ctrl+J) 更方便些,å¯è£½ä½œå‡ºä¸€å€‹å¸¶æœ‰å¯æŽ§åˆ¶åç§»è·é›¢çš„æŽ§åˆ¶æŸ„的物件。é¸å–下é¢çš„物件,切æ›åˆ°ç¯€é»žå·¥å…·ä¸¦æ‹–動它的控制點來了解這功能: - - + + 上述的動態å移物件會記ä½åŽŸæœ¬è·¯å¾‘ï¼Œæ‰€ä»¥ç•¶ä½ ä¸€éåˆä¸€é的改變åç§»è·é›¢æ™‚å®ƒä¸æœƒå—到「æå®³ã€ã€‚ç•¶ä½ ä¸éœ€è¦å†åšä»»ä½•調整時,你å¯å°‡å移物件轉æ›å›žè·¯å¾‘。 - + 還有更方便的連çµå移,類似於動態變化但是連çµåˆ°å¦ä¸€å€‹å°šå¾…編輯的路徑。一個來æºè·¯å¾‘坿œ‰å¤šå€‹é€£çµå移。下é¢ç´…色的是來æºè·¯å¾‘,它的連çµå移是黑色邊框且無填色,其他的是黑色填色而無邊框。 - + é¸å–紅色物件並編輯它的節點;觀察連çµå移跟著怎樣變化。ç¾åœ¨é¸å–任一個å移並拖動它的控制柄以調整åç§»åŠå¾‘。最後,注æ„ç§»å‹•æˆ–æ”¹è®Šä¾†æºæ™‚所有連çµå移是如何跟著變動,而在ä¸å¤±åŽ»å®ƒå€‘èˆ‡ä¾†æºçš„é€£çµæƒ…形下你能夠如何ç¨è‡ªåœ°ç§»å‹•或改變å移物件。 - + - - 簡化 + + 簡化 - + 簡化指令 (Ctrl+L) 主è¦ç”¨æ–¼æ¸›å°‘路徑的節點數目並且盡å¯èƒ½ä¿æŒåŽŸä¾†çš„å½¢ç‹€ã€‚é€™å€‹å°ç”¨é‰›ç­†å·¥å…·è£½ä½œçš„路徑很有用,因為鉛筆工具有時候會製作ä¸å¿…è¦çš„節點。下é¢å·¦é‚Šçš„形狀是用手繪工具製作的,而å³é‚Šé‚£ä¸€å€‹æ˜¯ç¶“éŽç°¡åŒ–çš„çµæžœã€‚原始路徑有 28 個節點,而簡化éŽçš„åªæœ‰ 17 個 (這表示用節點工具進行編輯會更容易) 且外觀更平滑。 - - - + + + 簡化的程度 (稱為臨界值) 決定在é¸å–物件的大å°ã€‚因此,如果你é¸å–一個路徑和一些較大的物件,那麼路徑簡化的程度會大於åªå–®ç¨é¸å–路徑時。å¦å¤–,簡化指令具有加速性。這表示如果你連續快速按 Ctrl+L 數次 (æ¯æ¬¡é–“éš”å°æ–¼ 0.5 ç§’)ï¼Œé‚£éº¼æ¯æ¬¡å‘¼å«æŒ‡ä»¤éƒ½æœƒå¢žåŠ è‡¨ç•Œå€¼ã€‚(如果你暫åœä¸€ä¸‹å†åŸ·è¡Œç°¡åŒ–,臨界值會回到é è¨­å€¼ã€‚) éˆæ´»é‹ç”¨åŠ é€Ÿç‰¹æ€§ï¼Œå¯è®“你輕易地ä¾ç…§ä¸åŒéœ€æ±‚套用準確的簡化程度。 - + 除了平滑手繪的邊框以外,簡化還å¯ç”¨æ–¼å„ç¨®å‰µæ„æ•ˆæžœã€‚通常形狀是死æ¿çš„,而æŸäº›ç¨‹åº¦ç°¡åŒ–幾何形狀的好處是å¯å‰µä½œå‡ºå¾ˆæ£’的生動外觀 — 柔化形狀的邊角而產生éžå¸¸è‡ªç„¶çš„æ‰­æ›²ï¼Œæ™‚而æµè¡Œæ™‚å°šï¼Œæ™‚è€Œç°¡æ¨¸æœ‰è¶£ã€‚ä¸‹é¢æœ‰ä¸€å€‹ç¾Žå·¥åœ–案形狀的例å­ï¼Œç¶“éŽç°¡åŒ–後使外觀變得很漂亮: - 原本的 - 輕微簡化 - 高度簡化 - - - - - 建立文字 + 原本的 + 輕微簡化 + 高度簡化 + + + + + 建立文字 - + Inkscape å¯ä»¥è£½ä½œé•·ç¯‡å¹…且複雜的文章。ä¸éŽä¹Ÿå¯ä»¥æ¥µç‚ºæ–¹ä¾¿åœ°è£½ä½œå°‘è¨±æ–‡å­—çš„ç‰©ä»¶ï¼Œè«¸å¦‚æ¨™é¡Œã€æ——å¹Ÿã€æ¨™èªŒã€åœ–表標籤和說明...等。這å°ç¯€å°‡ä»‹ç´¹åŸºæœ¬çš„ Inkscape 文字功能。 - + 建立文字物件和切æ›åˆ°æ–‡å­—工具 (F8) 一樣簡單。點擊文件中æŸå€‹åœ°æ–¹ä¸¦è¼¸å…¥ä½ è¦çš„æ–‡å­—。開啟文字和字型å°è©±çª— (Shift+Ctrl+T) å¯è®Šæ›´å­—åž‹ã€æ¨£å¼ã€å¤§å°å’Œå°é½Šã€‚æ­¤å°è©±çª—也有文字輸入欄分é ï¼Œä½ å¯ä»¥åœ¨é‚£è£¡ç·¨è¼¯æ–‡å­—物件 - 在æŸäº›æƒ…形下它會比在畫布上編輯還方便 (å°¤å…¶é€™å€‹åˆ†é æ”¯æ´æ‹¼å­—檢查功能)。 - + åƒå…¶ä»–工具一樣,文字工具能é¸å–æ“æœ‰ã€Œæ–‡å­—物件ã€é¡žåž‹çš„物件,所以你å¯ä»¥é»žæ“Šä¾†é¸å–以åŠå°‡æ¸¸æ¨™æ”¾ç½®åœ¨ä»»ä½•ç¾æœ‰çš„æ–‡å­—物件 (比如本段è½)。 - + 文字排版常見的æ“作之一就是調整字è·å’Œè¡Œè·ã€‚正如往常,Inkscape æä¾›äº†é€™å€‹åŠŸèƒ½çš„éµç›¤å¿«æ·éµçµ„åˆã€‚當你正在編輯文字,Alt+< å’Œ Alt+> 坿”¹è®Šæ–‡å­—物件中目å‰é€™è¡Œçš„å­—è·ï¼Œæ‰€ä»¥æœƒä»¥ç›®å‰ç•«é¢çš„ 1 åƒç´ ç‚ºå–®ä½æ”¹è®Šç¸½é•·åº¦ (é¸å–å·¥å…·ä¸­ä»¥åŒæ¨£æŒ‰éµåšåƒç´ å¤§å°çš„縮放)。一般來說,如果文字物件裡的字型大å°å¤§æ–¼é è¨­çš„,它會é©ç•¶åœ°å£“縮字æ¯ä½¿å…¶æ¯”é è¨­çš„ç·Šå¯†ä¸€é»žã€‚ä¸‹é¢æœ‰ä¸€å€‹ç¯„例: - 原本的 - 減少字æ¯é–“è· - Inspiration - Inspiration - + 原本的 + 減少字æ¯é–“è· + Inspiration + Inspiration + 作為標題時緊縮變化會看起來較好一點,但ä»ç„¶ä¸å®Œç¾Žï¼šå­—æ¯é–“çš„è·é›¢æœƒä¸ä¸€è‡´ï¼Œä¾‹å¦‚「aã€å’Œã€Œtã€é›¢å¤ªé è€Œã€Œtã€å’Œã€Œiã€åˆé å¤ªè¿‘。這麼糟糕的字æ¯ç¸®æŽ’(在字型大時特別明顯)使用å“質差的字型會比用å“質好的字型還嚴é‡ï¼›å„˜ç®¡å¦‚此,在任何文字段è½ä¸­ä½¿ç”¨ä»»ä½•字型,你å¯èƒ½æœƒç™¼ç¾å­—è·èª¿æ•´å°æ–¼å­—æ¯çµ„åˆé‚„是有好處的。 - + Inkscape è¦ä½œé€™äº›èª¿æ•´éžå¸¸åœ°å®¹æ˜“。åªè¦å°‡ä½ çš„æ–‡å­—編輯游標移到需è¦èª¿æ•´çš„字元之間並使用 Alt+æ–¹å‘éµ ä¾†ç§»å‹•åœ¨æ¸¸æ¨™å³é‚Šçš„å­—æ¯ã€‚䏋颿œ‰ä¸€å€‹ç›¸åŒçš„æ¨™é¡Œï¼Œé€™æ¬¡æ‰‹å‹•調整看起來ä¸ä¸€è‡´çš„å­—æ¯ä½ç½®ï¼š - 減少字æ¯é–“è·ï¼Œæ‰‹å‹•縮排一些字æ¯çµ„åˆ - Inspiration - + 減少字æ¯é–“è·ï¼Œæ‰‹å‹•縮排一些字æ¯çµ„åˆ + Inspiration + 除了用 Alt+左方å‘éµ æˆ– Alt+峿–¹å‘éµ æ°´å¹³ç§»å‹•å­—æ¯å¤–,你也å¯ä»¥è—‰ç”± Alt+上方å‘éµ æˆ– Alt+下方å‘éµ åž‚ç›´ç§»å‹•å­—æ¯ï¼š - Inspiration - + Inspiration + ç•¶ç„¶ä½ å¯ä»¥å°‡æ–‡å­—è½‰æ›æˆè·¯å¾‘ (Shift+Ctrl+C) 並當作一般路徑物件來æ¬å‹•ã€‚å¯æ˜¯ä¿æŒç‚ºæ–‡å­—屬性會更加方便 — ä»å¯ç·¨è¼¯ï¼Œä½ ä¸éœ€è¦ç§»é™¤å­—æ¯ç¸®æŽ’和間è·å°±å¯ä»¥å˜—試ä¸åŒçš„å­—åž‹ï¼Œè€Œä¸”å„²å­˜æˆæª”案的佔用空間也較å°ã€‚「文字屬性ã€çš„唯一缺點是開啟 SVG 文件的系統上必須有安è£åŽŸä¾†çš„å­—åž‹ã€‚ - + 如åŒå­—è·ï¼Œä½ ä¹Ÿå¯ä»¥åœ¨å¤šè¡Œçš„æ–‡å­—物件裡調整行è·ã€‚在這個教學裡的æŸè™•試用 Ctrl+Alt+< å’Œ Ctrl+Alt+> 按éµä¾†ç¸®å°æˆ–加寬行è·ï¼Œå› æ­¤æ–‡å­—物件的整體高度會以畫é¢çš„ 1 åƒç´ é€²è¡Œè®ŠåŒ–。跟在é¸å–工具裡一樣,按著 Shift 冿Œ‰å¢žæ¸›è¡Œè·æˆ–縮排的快æ·éµæœƒç”¢ç”ŸåŽŸä¾†çš„ 10 倿•ˆæžœã€‚ - - XML 編輯器 + + XML 編輯器 - + Inkscape 的終極強力工具是 XML 編輯器 (Shift+Ctrl+X)。它會顯示文件的整個 XML æ¨¹ç‹€æž¶æ§‹ï¼Œéš¨æ™‚åæ˜ ç›®å‰çš„狀態。你å¯ä»¥ç·¨è¼¯åœ–畫並觀察 XML æ¨¹ç‹€æž¶æ§‹ä¸­å°æ‡‰çš„變化。此外,你å¯ä»¥ç”¨ XML 編輯器編輯任何文字ã€å…ƒä»¶æˆ–節點並在畫布上看到效果。這個是互動å¼å­¸ç¿’ SVG 的最佳工具,而且它能夠讓你實ç¾ç”¨å…¶ä»–普通編輯工具åšä¸åˆ°çš„æŠŠæˆ²ã€‚ - - çµè«– + + çµè«– - + 這篇教學僅展示了 Inkscape 所有功能的一å°éƒ¨ä»½ã€‚我們希望你會喜歡。ä¸è¦å®³æ€•實驗和分享你的創作。請造訪 www.inkscape.org 以å–å¾—æ›´å¤šè³‡è¨Šã€æœ€æ–°ç‰ˆæœ¬å’Œä¾†è‡ªä½¿ç”¨è€…åŠé–‹ç™¼è€…討論å€çš„幫助。 - + diff --git a/share/tutorials/tutorial-basic.be.svg b/share/tutorials/tutorial-basic.be.svg index a6cf38d4c..5566a38b1 100644 --- a/share/tutorials/tutorial-basic.be.svg +++ b/share/tutorials/tutorial-basic.be.svg @@ -36,425 +36,430 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - + ::ÐСÐОВЫ - - + + У гÑтым падручніку Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ‹Ñ Ð°Ñновы працы з Inkscape. ГÑта звычайны дакумÑнт Inkscape, Ñкі можна праглÑдаць, правіць, захоўваць ці нешта капіÑваць зь Ñго. - - + + Падручнік па аÑновах ахоплівае пракручваньне палатна, кіраваньне дакумÑнтамі, аÑновы працы з інÑтрумÑнтамі фіґур, ÑпоÑабы вылучÑньнÑ, ператварÑньне аб'ектаў, ґрупаваньне, вызначÑньне Ð·Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ Ð¹ контуру, раўнаваньне й z-парадак. Калі шукаеце глыбейшых Ñ‚Ñмаў, зазірніце Ñž Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ð°Ð´Ñ€ÑƒÑ‡Ð½Ñ–ÐºÑ– Ñž мÑню «Даведка». - - Пракручваньне палатна + + Пракручваньне палатна - - + + ІÑнуе шмат ÑпоÑобаў Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‡Ð²Ð°Ð½ÑŒÐ½Ñ (пераÑоўваньнÑ) палатна. ПаÑпрабуйце Ctrl+ÑтрÑлкі Ð´Ð»Ñ Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‡Ð²Ð°Ð½ÑŒÐ½Ñ Ð· дапамогай клÑвіÑтуры. (ПаÑпрабуйце зараз зрушыць дакумÑнт уніз.) ТакÑама можна пераÑоўваць палатно з дапамогай ÑÑÑ€ÑднÑй кнопкі мышы. Ðльбо можна выкарыÑтоўваць палоÑÑ‹ Ð¿Ñ€Ð°ÐºÑ€ÑƒÑ‡Ð²Ð°Ð½ÑŒÐ½Ñ (націÑьніце Ctrl+B каб паказаць ці Ñхаваць Ñ–Ñ…). Кола на мышы такÑама пракручвае па вÑртыкалі, а з Shift — па гарызанталі. - - ÐабліжÑньне й аддаленьне + + ÐабліжÑньне й аддаленьне - - + + ÐайлÑгчÑйшы ÑпоÑаб зьмÑніць маштаб — націÑнуць клÑвішы - Ñ– + (ці =). Ð”Ð»Ñ Ð½Ð°Ð±Ð»Ñ–Ð¶ÑÐ½ÑŒÐ½Ñ Ð¼Ð¾Ð¶Ð½Ð° выкарыÑтоўваць Ctrl+ÑÑÑ€Ñдні пÑтрык ці Ctrl+правы пÑтрык, Ð´Ð»Ñ Ð°Ð´Ð´Ð°Ð»ÐµÐ½ÑŒÐ½Ñ â€” Shift+ÑÑÑ€Ñдні пÑтрык ці Shift+правы пÑтрык, або паварочвайце кола мышы з націÑнутай Ctrl. Як варыÑнт можна выбраць патрÑбны маштаб у полі маштабу (у ніжнім правым куце вакна дакумÑнта), увÑдзіце патрÑбны адÑотак Ñ– націÑьніце Enter. ТакÑама Ñ–Ñнуе інÑтрумÑнт «Маштаб» (на панÑлі інÑтрумÑнтаў зьлева), Ñкі дазвалÑе павÑлічваць толькі патрÑбны абведзены абÑÑг. - - + + Inkscape захоўвае гіÑторыю маштабаў, ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑтоўваліÑÑ Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð¿Ñ€Ð°Ñ†Ñ‹. ÐаціÑьніце клÑвішу `, каб вернуцца да папÑÑ€ÑднÑга маштабу, ці Shift+`, каб перайÑьці да наÑтупнага. - - ІнÑтрумÑнты Inkscape + + ІнÑтрумÑнты Inkscape - - + + Ð’ÑÑ€Ñ‚Ñ‹ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ð¿Ð°Ð½Ñль інÑтрумÑнтаў зьлева паказвае наÑÑžÐ½Ñ‹Ñ Ñž Inkscape інÑтрумÑнты рыÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð¹ праўленьнÑ. У верхнÑй чаÑтцы вакна, пад мÑню, знаходзіцца Ð—Ð°Ð³Ð°Ð´Ð½Ð°Ñ Ð¿Ð°Ð½Ñль з агульнымі загаднымі ґузікамі й ÐšÑ–Ñ€Ð¾ÑžÐ½Ð°Ñ Ð¿Ð°Ð½Ñль інÑтрумÑнту з індывідуальнымі парамÑтрамі кожнага інÑтрумÑнту. ПанÑль Ñтану ўнізе вакна паказвае Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð¿Ñ€Ð°Ñ†Ñ‹ карыÑÐ½Ñ‹Ñ Ð¿Ð°Ð´ÐºÐ°Ð·ÐºÑ– й паведамленьні. - - + + - Шмат дзеÑньнÑÑž можна выканаць з дапамогай клÑвіÑтуры. ГлÑдзіце поўны даведнік у Даведка > Па клÑвішах Ñ– мышы. + Шмат дзеÑньнÑÑž можна выканаць з дапамогай клÑвіÑтуры. ГлÑдзіце поўны даведнік у Даведка > Па клÑвішах Ñ– мышы. - - СтварÑньне дакумÑнтаў Ñ– кіраваньне імі + + СтварÑньне дакумÑнтаў Ñ– кіраваньне імі - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape выкарыÑтоўвае Ð´Ð»Ñ Ñваіх файлаў фармат SVG (Scalable Vector Graphics). SVG зьÑўлÑецца адкрытым Ñтандартам, Ñкі шырока падтрымліваецца ґрафічнымі праґрамамі. SVG базуецца на XML, таму Ñго можна правіць любым Ñ€Ñдактарам Ð´Ð»Ñ Ñ‚ÑкÑту ці XML (Ð½Ñ ÐºÐ°Ð¶ÑƒÑ‡Ñ‹ пра Inkscape). Ðпрача SVG Inkscape можа імпартаваць Ñ– ÑкÑпартаваць Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ñ–Ð½ÑˆÑ‹Ñ Ñ„Ð°Ñ€Ð¼Ð°Ñ‚Ñ‹ (EPS, PNG). - - + + Inkscape адкрывае аÑобнае вакно Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð°Ð³Ð° дакумÑнту. Пераключацца між імі можна з дапамогай кіраўніка вакон (напр., з дапамогай Alt+Tab), ці з дапамогай Ñкароту Inkscape, Ctrl+Tab, Ñкі будзе цыклічна пераключаць уÑе Ð°Ð´ÐºÑ€Ñ‹Ñ‚Ñ‹Ñ Ð²Ð¾ÐºÐ½Ñ‹ дакумÑнтаў. (Зараз Ñтварыце новы дакумÑнт Ñ– папераключайцеÑÑ Ð¼Ñ–Ð¶ ім Ñ– гÑтым дакумÑнтам, каб папрактыкавацца). Заўвага: Inkscape абыходзіцца з гÑтымі вокнамі Ñк Ñеціўны гартач з укладкамі, гÑта значыць, што Ñкарот Ctrl+Tab працуе толькі з вокнамі, Ñтворанымі адным Ñ– тым жа працÑÑам. Калі вы адкрыеце некалькі файлаў праз кіраўнік файлаў ці выканаеце некалькі працÑÑаў Inkscape, гÑта Ð½Ñ Ð±ÑƒÐ´Ð·Ðµ працаваць. - - СтварÑньне фіґур + + СтварÑньне фіґур - - + + Ðадыйшоў Ñ‡Ð°Ñ Ð´Ð»Ñ Ð¿Ñ€Ñ‹Ð³Ð¾Ð¶Ñ‹Ñ… фіґур! ПÑтрыкніце па праÑтакутніку на панÑлі інÑтрумÑнтаў (ці націÑьніце F4), а потым пÑтрыкніце-й-пацÑгніце ці Ñž новым пуÑтым дакумÑнце, ці проÑта тут: - - - - - - - - - - - - - + + + + + + + + + + + + + Як бачыце, прадвызначана праÑтакутнік Ñіні, з чорным контурам (абрыÑам) Ñ– крыху празрыÑты. Як гÑта зьмÑніць мы даведаеÑÑ Ð¿Ð°Ð·ÑŒÐ½ÐµÐ¹. Іншымі інÑтрумÑнтамі можна Ñтвараць ÑліпÑÑ‹, зоркі й Ñьпіралі: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + ГÑÑ‚Ñ‹Ñ Ñ–Ð½ÑтрумÑнты вÑÐ´Ð¾Ð¼Ñ‹Ñ Ñк фіґуры. Кожны інÑтрумÑнт, Ñкі мы Ñтвараем, паказвае адну ці некалькі ромбападобных ручак, паÑпрабуйце пацÑгнуць за Ñ–Ñ…, каб пабачыць Ñк зьмÑнÑецца фіґура. ÐšÑ–Ñ€Ð¾ÑžÐ½Ð°Ñ Ð¿Ð°Ð½Ñль фіґуры зьÑўлÑецца ÑÑˆÑ‡Ñ Ð°Ð´Ð½Ñ‹Ð¼ ÑпоÑабам паўплываць на Ñе, гÑÑ‚Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼Ñтры узьдзейнічаюць на Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹ (г.зн. тыÑ, што паказваюць ручкі) Ñ– вызначаюць прадвызначаны выглÑд новаÑтвораных фіґур. - - + + Каб адмÑніць Ñваё апошнÑе дзеÑньне, націÑьніце Ctrl+Z. (Ðльбо, калі перадумаеце ізноў, можна паўтарыць адмененае дзеÑньне з дапамогай Shift+Ctrl+Z.) - - ПераÑоўваньне, зьмÑненьне памеру, паварочваньне + + ПераÑоўваньне, зьмÑненьне памеру, паварочваньне - - + + ÐайчаÑьцей у Inkscape выкарыÑтоўваецца інÑтрумÑнт Вылучальнік. ПÑтрыкніце па Ñамым верхнім ґузіку (Ñа ÑтрÑлкай) на панÑлі інÑтрумÑнтаў, ці націÑьніце F1 ці Прабел. ЦÑперака можаце вылучыць любы аб'ект на палатне. ПÑтрыкніце па праÑтакутніку ўнізе. - - - + + + Ð’Ñ‹ ўбачыце воÑем ÑтрÑлкападобных ручак, ÑÐºÑ–Ñ Ð·ÑŒÑвÑцца вакол аб'екту. ЦÑпер можна: - - - + + + ПераÑоўваць аб'ект празь перацÑгваньне Ñго. (ÐаціÑьніце Ctrl каб рух быў толькі па гарызанталі й вÑртыкалі.) - - - + + + ЗьмÑнÑць памер аб'екту празь перацÑгваньне любой ручкі. (ÐаціÑьніце Ctrl, каб ÑтаÑунак вышыні да шырыні быў нÑзьменным.) - - + + Ізноў пÑтрыкніце па праÑтакутніку. Ручкі зьменÑцца. ЦÑпер можна: - - - + + + Паварочваць аб'ект празь перацÑгваньне кутніх ручак. (ÐаціÑьніце Ctrl, каб абмежаваць паварот крокамі па 15 ґрадуÑаў. ПацÑгніце за крыжык, каб задаць цÑнтар павароту.) - - - + + + Перакошваць (нахілÑць) аб'ект празь перацÑгваньне бакавых ручак. (ÐаціÑьніце Ctrl, каб абмежаваць нахіл крокамі па 15 ґрадуÑаў.) - - + + У Ñ€Ñжыме вылучÑÐ½ÑŒÐ½Ñ Ð¼Ð¾Ð¶Ð½Ð° карыÑтацца палÑмі ÑžÐ²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ Ð½Ð° кіроўнай панÑлі (па-над палатном), каб задаць Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ñ‹Ñ Ð·Ð½Ð°Ñ‡Ñньні каардынат (X Ñ– Y) Ñ– памеру (Ш Ñ– Ð’) вылучÑньнÑ. - - ПератварÑньне клÑвішамі + + ПератварÑньне клÑвішамі - - + + Ðдна з аÑабліваÑьцÑÑž Inkscape, ÑÐºÐ°Ñ Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ðµ Ñго на тле іншых вÑктарных Ñ€Ñдактараў — зручнае кіраваньне клÑвіÑтурай. ЦÑжка знайÑьці загад ці дзеÑньне, Ñкое немагчыма выканаць з дапамогай клÑвіÑтуры, Ñ– ператварÑньне аб'ектаў тут не выключÑньне. - - + + З дапамогай клÑвіÑтуры аб'екты можна пераÑоўваць (ÑтрÑлкамі) Ñ– паварочваць (клÑвішамі [ Ñ– ]), а такÑама зьмÑнÑць іхны памер (клÑвішамі < Ñ– >). ÐŸÑ€Ð°Ð´Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ñ‹Ñ Ð·Ñ€ÑƒÑ…Ñ– й зьмÑненьні памеру Ñ€Ð¾ÑžÐ½Ñ‹Ñ 2 пкÑ, з Shift — у 10 разоў большыÑ. Ctrl+> Ñ– Ctrl+< павÑлічваюць ці памÑншаюць, адпаведна, у 2 разы. Прадвызначана паварот роўны 15 ґрадуÑам, з Ctrl паворот роўны 90 ґрадуÑам. - - + + Ðднак, найкарыÑьнейшымі, напÑўна, зьÑўлÑюцца папікÑÑÐ»ÑŒÐ½Ñ‹Ñ Ð¿ÐµÑ€Ð°Ñ‚Ð²Ð°Ñ€Ñньні, Ñкі выконваюцца пры выкарыÑтаньні Alt з клÑвішамі ператварÑньнÑ. Ðапрыклад, Alt+ÑтрÑлкі паÑунуць вылучÑньне на 1 пікÑÑль пры бÑгучым маштабе (г.зн. на 1 пікÑÑль Ñкрану, Ð½Ñ Ð±Ð»Ñ‹Ñ‚Ð°Ð¹Ñ†Ðµ зь пікÑÑлÑмі, у Ñкіх у SVG выражаецца даўжынÑ, Ð½ÐµÐ·Ð°Ð»ÐµÐ¶Ð½Ð°Ñ Ð°Ð´ маштабу). ГÑта значыць, што калі вы наблізіце аб'ект, то адна Alt+ÑтрÑлка даÑьць меншы абÑалютны зрух, Ñкі будзе выглÑдаць Ñк аднапікÑÑльны штуршок на вашым Ñкране. Такім чынам, гÑта дазвалÑе разьмÑшчаць аб'екты зь любой патрÑбнай дакладнаÑьцю проÑта набліжаючы Ñ–Ñ… ці аддалÑючы. - - + + ÐналÑґічна, Alt+> Ñ– Alt+< зьмÑнÑюць памер гÑтак, што візуальна ён зьмÑнÑецца на адзін пікÑÑль Ñкрану, а Alt+[ Ñ– Alt+] паварочваюць Ñго гÑтак, што Ñгоны найдалейшы ад цÑнтру пункт зрушваецца на адзін пікÑÑль Ñкрану. - - + + Заўвага: карыÑтальнікі Linux могуць не атрымаць чаканага выніку ад Alt+ÑтрÑлка Ñ– некаторых іншых камбінацый клÑвіш, калі іхны кіраўнік вакон перахоплівае гÑÑ‚Ñ‹Ñ ÐºÐ»ÑвіÑÑ‚ÑƒÑ€Ð½Ñ‹Ñ Ð¿Ð°Ð´Ð·ÐµÑ– да таго, Ñк Ñны даÑÑгнуць Inkscape. Ðдным Ñа ÑпоÑабаў вырашыць гÑту праблему зьÑўлÑецца Ð°Ð´Ð¿Ð°Ð²ÐµÐ´Ð½Ð°Ñ Ð·ÑŒÐ¼ÐµÐ½Ð° наÑтаўленьнÑÑž кіраўніка вакон. - - ВылучÑньне некалькіх аб'ектаў + + ВылучÑньне некалькіх аб'ектаў - - + + Ðекалькі аб'ектаў можна вылучыць адначаÑова праз пÑтрыканьне па Ñ–Ñ… з націÑнутай Shift. Ðльбо можна пацÑгнуць вакол аб'ектаў, ÑÐºÑ–Ñ Ñ‚Ñ€Ñба вылучыць, гÑта называецца вылучÑньне ґумовай Ñтужкай. (Вылучальнік Ñтварае «ґумовую Ñтужку», калі цÑгнецца з пуÑтога меÑца, аднак, калі перад пачаткам перацÑÐ³Ð²Ð°Ð½ÑŒÐ½Ñ Ð²Ñ‹ націÑьніце Shift, то Inkscape заўжды Ñтворыць ґумовую Ñтужку.) ПапрактыкуйцеÑÑ, вылучыўшы ÑžÑе тры фіґуры ўнізе: - - - - - + + + + + Зараз ÑкарыÑтайце ґумовую Ñтужку (проÑта пацÑгнуўшы ці з Shift) каб вылучыць два ÑліпÑÑ‹, але не праÑтакутнік: - - - - - + + + + + Кожны аÑобны аб'ект унутры вылучÑÐ½ÑŒÐ½Ñ Ð¿Ð°ÐºÐ°Ð·Ð²Ð°Ðµ пазнаку вылучÑÐ½ÑŒÐ½Ñ â€” прадвызначана, гÑта праÑÑ‚Ð°ÐºÑƒÑ‚Ð½Ð°Ñ ÑˆÑ‚Ñ€Ñ‹Ñ…Ð°Ð²Ð°Ñ Ñ€Ð°Ð¼ÐºÐ°. ГÑÑ‚Ñ‹Ñ Ð¿Ð°Ð·Ð½Ð°ÐºÑ– Ñпрашчаюць візуальнае адрозьніваньне вылучаных аб'ектаў ад нÑвылучаных. Ðапрыклад, калі вылучыце абодва ÑліпÑÑ‹ й праÑтакутнік, без пазнак будзе цÑжка вызначыць ці Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ ÑліпÑÑ‹, ці не. - - + + Shift+пÑтрык па вылучаным аб'екце выключаюць Ñго з вылучÑньнÑ. Вылучыце ÑžÑе тры аб'екты вышÑй, потым выкарыÑтайце Shift+пÑтрык, каб выключыць абодва ÑліпÑÑ‹ з вылучÑньнÑ, пакінуўшы вылучаным толькі праÑтакутнік. - - + + ÐаціÑканьне Esc здымае вылучÑньне з уÑÑ–Ñ… аб'ектаў. Ctrl+A вылучае ÑžÑе аб'екты на бÑгучым плаÑьце (калі вы не Ñтваралі плаÑтоў, то можна Ñказаць, што ÑžÑе аб'екты дакумÑнту). - - Òрупаваньне + + Òрупаваньне - - + + Ðекальнік аб'ектаў можна аб'Ñднаць у ґрупу. Òрупа паводзіць ÑÑбе Ñк адзін аб'ект, калі вы перацÑгваеце ці ператвараеце Ñго. Тры аб'екты зьлева ўнізе незалежныÑ, а Ñ‚Ð°ÐºÑ–Ñ Ð¶ тры аб'екты Ñправа зґрупаваныÑ. ПаÑпрабуйце перацÑгнуць ґрупу. - - - - + + + + - - + + Каб Ñтварыць ґрупу трÑба вылучыць адзін ці некалькі аб'ектаў Ñ– націÑнуць Ctrl+G. Каб разґрупаваць адну ці некалькі ґруп, вылучыце Ñ–Ñ… Ñ– націÑьніце Ctrl+U. Òрупы такÑама можна ґрупаваць, Ñк Ñ– Ñ–Ð½ÑˆÑ‹Ñ ÑÐºÑ–Ñ Ð°Ð±'екты, Ñ‚Ð°ÐºÑ–Ñ Ñ€ÑкурÑÑ–ÑžÐ½Ñ‹Ñ Ò‘Ñ€ÑƒÐ¿Ñ‹ могуць паглыблÑцца да любой глыбіні. Ðднак, Ctrl+U разґрупоўвае толькі найвышÑйшы ўзровень Ò‘Ñ€ÑƒÐ¿Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñž вылучÑньні, каб цалкам разґрупаваць глыбока ўкладзеную ґрупу-Ñž-ґрупе давÑдзецца націÑнуць Ctrl+U некалькі разоў. - - + + Ðднак неабавÑзкова разґрупоўваць уÑÑŽ ґрупу, калі вы жадаеце паправіць аб'ект унутры Ñе. ДаÑтаткова зрабіць Ctrl+пÑтрык па гÑтым аб'екце, Ñ– толькі ён адзін будзе вылучаны й гатовы да працы, альбо Shift+Ctrl+пÑтрык па некалькіх аб'ектах (унутры любых ґруп ці па-за імі), каб вылучыць некалькі аб'ектаў не зважаючы на ґрупаваньне. ПаÑпрабуйце пераÑунуць ці ператварыць аÑÐ¾Ð±Ð½Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹ Ñž ґрупе (Ñправа ўверÑе) не разґрупоўваючы Ñе, паÑÑŒÐ»Ñ Ð·Ð´Ñ‹Ð¼Ñ–Ñ†Ðµ вылучÑньне й вылучыце ґрупу звычайным чынам, каб пераканацца, што Ñна даÑюль зґрупаванаÑ. - - Запаўненьне й контур + + Запаўненьне й контур - - + + - Шмат функцый Inkscape наÑÑžÐ½Ñ‹Ñ Ð¿Ñ€Ð°Ð· дыÑлёґі. ÐапÑўна, найпраÑьцей раÑфарбаваць аб'ект нейкім колерам адкрыўшы дыÑлёґ «Прыклады» з мÑню «Від» (ці націÑнуўшы Shift+Ctrl+W), вылучыце аб'ект Ñ– пÑтрыкніце па прыкладзе, каб раÑфарбаваць Ñго (зьмÑніць колер Ñгонага нутра). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Больш магутным зьÑўлÑецца дыÑлёґ «Запаўненьне й контур» з мÑню Ðб'ект (або націÑьніце Shift+Ctrl+F). Вылучыце фіґуру ўнізе й адкрыйце дыÑлёґ «Запаўненьне й контур». - - - + + + - + Як бачыце, дыÑлёґ мае тры ўкладкі: «Запаўненьне», «РыÑаваньне контуру» й «Стыль контуру». Укладка «Запаўненьне» дазвалÑе правіць запаўненьне (нутро) вылучаных аб'ектаў. З дапамогай ґузікаў пад укладкай можна выбраць від запаўненьнÑ, у тым ліку без Ð·Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ (ґузік з X), запаўненьне ÑуцÑльным колерам, а такÑама лінейным ці радыÑльным ґрадыентам. Ð”Ð»Ñ Ñ„Ñ–Ò‘ÑƒÑ€ уверÑе актыўным будзе ґузік ÑуцÑльнага запаўненьнÑ. - - + + - + Ð¯ÑˆÑ‡Ñ Ð½Ñ–Ð¶Ñй можна пабачыць набор выбіральнікаў колеру, кожны Ñž Ñваёй улаÑнай укладцы: RGB, CMYK, HSL Ñ– «Кола». ÐапÑўна, найзручней карыÑтацца выбіральнікам «Кола», дзе можна паварочваць трохкутнік, каб выбраць колер Ñž коле, а потым Ñгонае адценьне ўнутры трохкутніка. УÑе выбіральнікі колеру ўтрымліваюць Ñьлізгач, Ñкі задае альфу (непразрыÑтаÑьць) выбранага колеру. - - + + - + Калі вы выбіраеце аб'ект, выбіральнік колеру паказвае ÑÐ³Ð¾Ð½Ñ‹Ñ Ð±ÑÐ³ÑƒÑ‡Ñ‹Ñ Ð·Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ðµ й контур (у выпадку некалькіх вылучаных аб'ектаў дыÑлёґ паказвае іхны ÑÑÑ€Ñдні колер). ПагулÑйце з гÑтымі прыкладамі ці Ñтварыце Ñвой улаÑны: - - - - - - - - - + + + + + + + + + - + ВыкарыÑтоўваючы ўкладку «РыÑаваньне контуру» можна прыбраць контур (абрыÑ) аб'екта, ці задаць Ñму любы колер ці празрыÑтаÑьць: - - - - - - - - - - + + + + + + + + + + - + ÐпошнÑÑ ÑžÐºÐ»Ð°Ð´ÐºÐ°, «Стыль контуру», дазвалÑе задаць таўшчыню ці Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ð°Ñ€Ð°Ð¼Ñтры контуру: - - - - - - - - - + + + + + + + + + - + ÐарÑшце, замеÑÑ‚ ÑуцÑльнага колеру можна ўжываць ґрадыенты Ð´Ð»Ñ Ð·Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ Ð¹/ці контуру: @@ -495,45 +500,45 @@ often!) - - - - - - - - - - - + + + + + + + + + + + Калі пераключаецеÑÑ Ð· ÑуцÑльнага колеру на ґрадыент, новаÑтвораны ґрадыент выкарыÑтоўвае папÑÑ€Ñдні ÑуцÑльны колер, пераходзÑчы ад непразрыÑтага да празрыÑтага. ПераключыцеÑÑ Ð½Ð° інÑтрумÑнт «Òрадыент» (Ctrl+F1) каб пацÑгнуць ручкі ґрадыенту — Ð·Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð»Ñ–Ð½Ñ–Ñмі Ñродкі кіраваньнÑ, ÑÐºÑ–Ñ Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°ÑŽÑ†ÑŒ напрамак Ñ– даўжыню ґрадыенту. Калі Ð½ÐµÐ¹ÐºÐ°Ñ Ñ€ÑƒÑ‡ÐºÐ° ґрадыента Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ð°Ñ (падÑÑŒÐ²ÐµÑ‡Ð°Ð½Ð°Ñ Ñінім), то дыÑлёґ «Запаўненьне й колер» паказвае колер ручкі, а Ð½Ñ ÐºÐ¾Ð»ÐµÑ€ уÑÑго вылучанага аб'екту. - - + + - + Ð¯ÑˆÑ‡Ñ Ð°Ð´Ð·Ñ–Ð½ зручны ÑпоÑаб зьмÑніць колер аб'екту — гÑта выкарыÑтаньне інÑтрумÑнту «Піпетка» (F7). ПроÑта пÑтрыкніце дзе-небудзь па рыÑунку гÑтым інÑтрумÑнтам, Ñ– выбраны колер вызначыць запаўненьне вылучанага аб'екту (Shift+пÑтрык вызначыць колер контуру). - - Падвойваньне, раўнаваньне, разьмÑркоўваньне + + Падвойваньне, раўнаваньне, разьмÑркоўваньне - - + + - + Ðдно з найчаÑьцейшых дзеÑньнÑÑž — гÑта падвойваньне аб'екту (Ctrl+D). Дублікат разьмешчаны дакладна па-над арыґіналам Ñ– вылучаны, так што Ñго можна пацÑгнуць мышай ці клÑвішамі-ÑтрÑлкамі. Каб папрактыкавацца паÑпрабуйце запоўніць лінію копіÑмі гÑтага чорнага квадрата: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -555,192 +560,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-парадак + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-парадак - - + + - + - ТÑрмінам z-парадак (парадкам уздоўж воÑÑ– Z) апіÑваецца перакрываньне аб'ектамі адзін аднога на рыÑунку, г.зн. ÑÐºÑ–Ñ Ð°Ð±'екты знаходзÑцца па-над іншымі й закрываюць Ñ–Ñ…. Два загады Ñž мÑню «Ðб'ект», «УзьнÑць угару» (клÑвіша Home) Ñ– «ÐпуÑьціць долу» (клÑвіша End) перанÑÑуць Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð°Ð±'екты на вÑршыню ці на Ñпод z-парадку бÑгучага плаÑта. Ð¯ÑˆÑ‡Ñ Ð´Ð²Ð° загады «ЎзьнÑць» (PgUp) Ñ– «ÐпуÑьціць» (PgDn) пераÑунуць вылучÑньне толькі на адзін узровень, г.зн. пераÑунуць Ñго ўздоўж воÑÑ– Z праз адзін нÑвылучаны аб'ект (улічваюцца толькі аб'екты, ÑÐºÑ–Ñ Ð¿ÐµÑ€Ð°ÐºÑ€Ñ‹Ð²Ð°ÑŽÑ†ÑŒ вылучÑньне, калі нічога Ñго не перакрывае, то «ЎзьнÑць» Ñ– «ÐпуÑьціць» пераÑунуць Ñго ўгару ці долу, адпаведна). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + ПапрактыкуйцеÑÑ ÐºÐ°Ñ€Ñ‹Ñтацца гÑтымі загадамі, зьмÑніўшы на адваротны z-парадак аб'ектаў унізе, каб Ñамы левы ÑÐ»Ñ–Ð¿Ñ Ð°Ð¿Ñ‹Ð½ÑƒÑžÑÑ Ð½Ð° вÑршыні, а Ñамы правы — на Ñподзе: - - - - - - - - + + + + + + + + - + Вельмі карыÑÐ½Ð°Ñ Ð¿Ñ€Ñ‹ працы з вылучÑньнÑмі клÑвіша Tab. Калі нічога Ð½Ñ Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ð°, Ñна вылучае аб'ект на Ñподзе, у адваротным выпадку Ñна вылучае аб'ект, Ñкі знаходзіцца вышÑй за вылучаны аб'ект у z-парадку. Shift+Tab працуе наадварот, пачынае з аб'екта ўгары й ідзе долу. Паколькі аб'екты, ÑÐºÑ–Ñ Ð²Ñ‹ Ñтвараеце, дадаюцца на вÑршыню ÑтоÑа, то, калі нічога Ð½Ñ Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ð°, націÑканьне Shift+Tab вылучыць апошні Ñтвораны аб'ект. ПапрактыкуйцеÑÑ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўваць Tab Ñ– Shift+Tab на ÑтоÑе ÑліпÑаў унізе. - - ВылучÑньне й перацÑгваньне вылучанага + + ВылучÑньне й перацÑгваньне вылучанага - - + + - + Што рабіць, калі патрÑбны аб'ект Ñхаваны за іншым аб'ектам? Ðіжні аб'ект можна пабачыць, калі верхні (чаÑткова) празрыÑты, але пÑтрык па ім вылучыць верхні аб'ект, а не патрÑбны. - - + + - + Ð”Ð»Ñ Ð³Ñтага выпадку Ñ–Ñнуе Alt+пÑтрык. Першы Alt+пÑтрык вылучае Ñамы верхні аб'ект, зуÑім Ñк звычайны пÑтрык. Ðднак, наÑтупны Alt+пÑтрык па тым жа пункце вылучыць аб'ект пад верхнім, наÑтупны — ÑÑˆÑ‡Ñ Ð½Ñ–Ð¶Ñйшы Ñ– г.д. Такім чынам, некалькі Alt+пÑтрыкаў па Ñлупку пройдуць ад вÑршыні да Ñподу праз увеÑÑŒ z-парадак ÑтоÑу аб'ектаў у меÑцы пÑтрыканьнÑ. Калі даÑÑгнуты аб'ект на Ñподзе, то наÑтупны Alt+пÑтрык, натуральна, ізноў вылучыць Ñамы верхні аб'ект. - - + + - + [Калі вы карыÑтаецеÑÑ Linux,то, магчыма, Alt+пÑтрык не працуе Ñк Ñьлед. ЗамеÑÑ‚ гÑтага ён можа пераÑоўваць уÑÑ‘ вакно Inkscape. ГÑта праз тое, што кіраўнік вакон пакінуў Alt+пÑтрык Ð´Ð»Ñ Ñваіх патрÑб. Як ÑпоÑаб выправіць гÑта, вы можаце знайÑьці наÑтаўленьні паводзін вакон Ñвайго кіраўніка вакон Ñ– альбо абÑзьдзейніць Ñе, альбо наÑтавіць на выкарыÑтаньне клÑвішы Meta (Windows), каб Inkscape ды Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ñ€Ð°Ò‘Ñ€Ð°Ð¼Ñ‹ маглі вольна выкарыÑтоўваць клÑвішу Alt.] - - + + - + ГÑта ÑžÑÑ‘ выдатна, але калі аб'ект пад паверхнÑй вылучаны, што зь ім можна зрабіць? Можна з дапамогай клÑвіÑтуры ператварыць Ñго, можна пацÑгнуць за ручкі вылучÑньнÑ. Ðднак, перацÑгваньне Ñамога аб'екту ізноў вылучыць Ñамы верхні аб'ект (гÑтак «пÑтрыкні-й-пацÑгні» зроблена, што Ñпачатку вылучае (Ñамы верхні) аб'ект, а паÑÑŒÐ»Ñ Ð¿ÐµÑ€Ð°Ñ†Ñгвае вылучÑньне). Каб Ñказаць Inkscape перацÑгваць тое, што вылучана цÑпер, не вылучаючы нічога іншага, карыÑтайцеÑÑ Alt+перацÑгваньне. Яно пераÑуне бÑгучае вылучÑньне, нÑважна куды вы пацÑгнеце мыш. - - + + - + ПапрактыкуйцеÑÑ Ð· Alt+пÑтрыкам Ñ– Alt+перацÑгваньнем на дзьвюх карычневых фіґурах пад зÑлёным празрыÑтым праÑтакутнікам: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Ð’Ñ‹Ñновы + + Ð’Ñ‹Ñновы - - + + - + - Падручнік з аÑновамі працы Ñкончаны. У ім Ñ€Ð°Ð·Ð³Ð»ÐµÐ´Ð¶Ð°Ð½Ð°Ñ Ñ‚Ð¾Ð»ÑŒÐºÑ– Ð¼Ð°Ð»Ð°Ñ Ñ‡Ð°Ñтка магчымаÑьцÑÑž Inkscape, але нават з заÑвоенымі ведамі вы ўжо зможаце Ñтвараць проÑтыÑ, але карыÑÐ½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹. Больш ÑÐºÐ»Ð°Ð´Ð°Ð½Ñ‹Ñ Ð¿Ñ€Ñ‹Ñ‘Ð¼Ñ‹ працы апіÑÐ°Ð½Ñ‹Ñ Ñž «Паглыбленым курÑе» й іншых падручніках у Даведка > Падручнікі. + Падручнік з аÑновамі працы Ñкончаны. У ім Ñ€Ð°Ð·Ð³Ð»ÐµÐ´Ð¶Ð°Ð½Ð°Ñ Ñ‚Ð¾Ð»ÑŒÐºÑ– Ð¼Ð°Ð»Ð°Ñ Ñ‡Ð°Ñтка магчымаÑьцÑÑž Inkscape, але нават з заÑвоенымі ведамі вы ўжо зможаце Ñтвараць проÑтыÑ, але карыÑÐ½Ñ‹Ñ Ð²Ñ–Ð´Ð°Ñ€Ñ‹ÑÑ‹. Больш ÑÐºÐ»Ð°Ð´Ð°Ð½Ñ‹Ñ Ð¿Ñ€Ñ‹Ñ‘Ð¼Ñ‹ працы апіÑÐ°Ð½Ñ‹Ñ Ñž «Паглыбленым курÑе» й іншых падручніках у Даведка > Падручнікі. - + @@ -770,8 +782,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць diff --git a/share/tutorials/tutorial-basic.ca.svg b/share/tutorials/tutorial-basic.ca.svg index 2e6cc93a0..aad0502b5 100644 --- a/share/tutorials/tutorial-basic.ca.svg +++ b/share/tutorials/tutorial-basic.ca.svg @@ -36,438 +36,424 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::BÀSIC - - + + Aquest tutorial us mostrarà l'ús bàsic de l'Inkscape. Aquest és un document Inkscape normal. Podeu visualitzar-lo, editar-lo i fins i tot desar-lo. - - + + El tutorial bàsic cobreix el desplaçament i l'ampliació, la gestió de documents, les eines de forma, la transformació d'objectes amb el selector, les tècniques de selecció, l'agrupació, la configuració de l'emplenat i el contorn, l'alineació i l'ordenació en z. Per a altres temes, consulteu el tutorial avançat al menú d'Ajuda. - - Desplaçament de l'àrea de dibuix + + Desplaçament de l'àrea de dibuix - - + + Hi ha vàries maneres de desplaçar l'àrea de dibuix. Proveu-ho amb les tecles Ctrl+fletxa per a desplaçar-la amb el teclat. (Proveu de moure aquest document avall.) També podeu arrossegar-la amb el botó central del ratolí. Podeu usar les barres de desplaçament (premeu Ctrl+B per a veure-les o amagar-les). També funciona el desplaçament vertical amb la rodeta del vostre ratolí; i si premeu Maj., l'horitzontal. - - Ampliació i reducció + + Ampliació i reducció - - + + - La forma més fàcil d'ampliar/reduir és amb les tecles - i + (o =). També podeu usar Ctrl+botó central o Ctrl+botó dret per ampliar, Maj+botó central o Maj+botó dret per allunyar, o girant la rodeta del ratolí amb Ctrl. També clicant al camp d'entrada d'ampliació (a l'angle inferior esquerra de la finestra del document), entreu un valor precís en %, i premeu Entrar. També tenim l'eina ampliar (a la barra d'eines de l'esquerra) que ens permet ampliar una zona enmarcant-la. + La forma més fàcil d'ampliar/reduir és amb les tecles - i + (o =). També podeu usar Ctrl+botó central o Ctrl+botó dret per ampliar, Maj+botó central o Maj+botó dret per allunyar, o girant la rodeta del ratolí amb Ctrl. També clicant al camp d'entrada d'ampliació (a l'angle inferior esquerra de la finestra del document), entreu un valor precís en %, i premeu Entrar. També tenim l'eina ampliar (a la barra d'eines de l'esquerra) que ens permet ampliar una zona emmarcant-la. - - + + L'Inkscape manté un historial dels nivells d'ampliació usats. Premeu la tecla ` per anar a l'anterior ampliació, i Maj+` per anar al següent. - - Les eines de l'Inkscape + + Les eines de l'Inkscape - - + + La barra d'eines vertical a l'esquerra mostra les eines de dibuix i edició de l'Inkscape. Sota el menú, hi ha la Barra d'ordres amb botons d'ordres generals i la Barra de controls d'eina amb controls específics per a cada eina. La barra d'estat a la part inferior de la finestra mostrarà consells i missatges útils mentre esteu treballant. - - + + Moltes operacions són accessibles mitjançant dreceres de teclat. Obriu Ajuda > Tecles i ratolí per a veure la referència completa. - - Creació i gestió de documents + + Creació i gestió de documents - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) -to save under a new name. (Inkscape may still be unstable, so remember to save -often!) + Per a obrir un document SVG existent, useu Fitxer > Obre (Ctrl+O). Per desar, useu Fitxer > Desa (Ctrl+S), o Anomena i desa (Shift+Ctrl+S) per desar amb un nou nom. (L'Inkscape pot ser encara inestable, així que recordeu desar sovint!) - - + + L'Inkscape usa el format SVG (Imatges de vectors escalables) per als seus fitxers. L'SVG és un estàndard obert àmpliament suportat pel programari d'imatges. Els fitxers SVG es basen en XML i poden ser editats per qualsevol editor de text o XML (a banda de l'Inkscape, és clar). A més d'SVG, l'Inkscape pot importar i exportar diferents tipus de format (EPS, PNG). - - + + - Inkscape opens a separate document window for each document. You can navigate -among them using your window manager (e.g. by Alt+Tab), or you can use -the Inkscape shortcut, Ctrl+Tab, which will cycle through all open -document windows. (Create a new document now and switch between it and this document for -practice.) Note: Inkscape treats these windows like tabs in a web browser, this means -the Ctrl+Tab shortcut only works with documents running in the same -process. If you open multiple files from a file browser or launch more than -one Inkscape process from an icon it will not work. - - - Creació de formes + L'Inkscape obre una finestra separada per a cada document. Podeu navegar entre elles usant el vostre gestor de finetres (per exemple amb Alt+Tab), o podeu usar la drecera de l'Inkscape, Ctrl+Tab, que es mourà en cicle entre totes les finestres obertes. (Creeu un nou document i canvieu entre aquest i l'altre per a practicar).Nota: l'Inkscape tracta aquestes finestres com pestanyes en un navegador web, això vol dir que la dreçera Ctrl+Tab només funciona amb documents executant-se al mateix procés. Si obriu múltiples fitxers des d'un navegador de fitxers o llanceu Inkscape més d'un cop usant la icona no funcionarà. + + + Creació de formes - - + + I ara, unes formes boniques! Cliqueu a l'eina del rectangle a la barra d'eines (o premeu F4) i cliqueu i arrossegueu, en un nou document en blanc o bé aquí mateix: - - - - - - - - - - - - - + + + + + + + + + + + + + - As you can see, default rectangles come up blue, with a black stroke (outline), -and fully opaque. We'll see how to change that below. With other tools, you can -also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - - + Com podeu veure, per defecte els rectangles són blaus, amb una vora (contorn) negra, i complementant opacs. Tot seguit veurem com canviar-ho. Amb les altres eines, també podeu crear el·lipsis, estrelles i espirals: + + + + + + + + + + + + + + + + + + + - Aquestes eines es coneixen col·lectivament com a eines de forma. Cada forma que creeu mostra un o més manejadors. Proveu d'arrossegar-los per veure com respon la forma. El panell superior per a les eines de forma té alguns controls que també podeu tocar per canviar els paràmetres de la forma. Aquests controls afecten la forma que hi ha seleccionada (la que mostren els manejadors) i defineix els valors per defecte que s'aplicaran a les noves formes que es creïn. + Aquestes eines es coneixen col·lectivament com a eines de forma. Cada forma que creeu mostra una o més nanses. Proveu d'arrossegar-los per veure com respon la forma. El panell superior per a les eines de forma té alguns controls que també podeu tocar per canviar els paràmetres de la forma. Aquests controls afecten la forma que hi ha seleccionada (la que mostren les nanses) i defineix els valors per defecte que s'aplicaran a les noves formes que es creïn. - - + + Per a desfer la vostra última acció, premeu Ctrl+Z. (O si torneu a canviar d'idea, podeu tornar-la a fer amb Maj+Ctrl+Z). - - Moviment, escalat, gir + + Moviment, escalat, gir - - + + L'eina més usada de l'Inkscape és el Selector. Cliqueu el botó amb la fletxa que hi ha a dalt de tot de la barra d'eines (o premeu F1 o Espai). Ara podeu seleccionar qualsevol objecte de l'àrea de dibuix. Cliqueu sobre el rectangle de sota. - - - + + + - Veureu com apareixen vuit manejadors en forma de fletxa al voltant. Ara podeu: + Veureu com apareixen vuit nanses en forma de fletxa al voltant. Ara podeu: - - - + + + Mourel'objecte arrossegant-lo. (Premeu Ctrl per limitar el moviment a horitzontal i vertical). - - - + + + - Escalar l'objecte original arrossegant un manejador. (Premeu Ctrl per conservar la relació alçada/amplada original). + Escalar l'objecte original arrossegant una nansa. (Premeu Ctrl per conservar la relació alçada/amplada original). - - + + - Ara torneu a clicar el rectangle. Els manejadors canvien. Ara podeu: + Ara torneu a clicar el rectangle. Les nanses canvien. Ara podeu: - - - + + + - Girar l'objecte arrossegant els manejadors de les cantonades. (Amb Ctrl limiteu la rotació a passos de 15 graus. Arrossegueu la marca de la creu per posicionar el centre de rotació). + Girar l'objecte arrossegant les nanses de les cantonades. (Amb Ctrl limiteu la rotació a passos de 15 graus. Arrossegueu la marca de la creu per posicionar el centre de rotació). - - - + + + - Esbiaixar (cisallar) l'objecte arrossegant els manejadors dels costats. (Amb Ctrl limiteu la rotació a passos de 15 graus. Arrossegueu la marca de la creu per posicionar el centre de rotació). + Esbiaixar (cisallar) l'objecte arrossegant les nanses dels costats. (Amb Ctrl limiteu la rotació a passos de 15 graus. Arrossegueu la marca de la creu per posicionar el centre de rotació). - - + + També podeu usar els camps d'entrada numèrica del panell superior per a introduir valors exactes per a les coordenades (X i Y) i la mida (alçada i amplada) de la selecció. - - Transformació mitjançant tecles + + Transformació mitjançant tecles - - + + Una de les característiques de l'Inkscape que el fa diferent de la majoria d'editors vectorials és l'èmfasi en l'accessibilitat pel teclat. Difícilment trobarem cap ordre o acció que no sigui possible fer des del teclat, i la transformació d'objectes no és cap excepció. - - + + - You can use the keyboard to move (arrow keys), scale -(< and > keys), and rotate ([ -and ] keys) objects. Default moves and scales are by 2 px; with -Shift, you move by 10 times that. Ctrl+> -and Ctrl+< scale up or down to 200% or 50% of the original, -respectively. Default rotates are by 15 degrees; with Ctrl, you rotate -by 90 degrees. + Podeu usar el teclat per moure (tecles de les fletxes), escalar (tecles < i >), i girar (tecles [ i ]) objectes. Els moviments i les escales per defecte són per 2 pt; amb Maj., moveu o escaleu 10 vegades més. Ctrl+> i Ctrl+< amplien o redueixen al 200% o al 50% de l'original, respectivament. Per defecte, els girs són de 15º, i amb Ctrl, de 90. - - + + Però potser les més útils són les transformacions a nivell de píxel, invocades prement Alt amb les tecles de transformació. Per exemple, Alt+fletxes mourà la selecció 1 píxel al nivell d'ampliació actual (per exemple 1 píxel de pantalla, no ho confongueu amb les unitats de px, una unitat SVG independent de l'ampliació). Això significa que si amplieu, amb Alt+fletxa produïreu un moviment absolut menor que seguirà veient-se a la pantalla com una empenteta d'un píxel. És per tant possible posicionar objectes amb precissió arbitrària només ampliant o reduint segons les vostres necessitats. - - + + De forma similar, Alt+> i Alt+< escalen la selecció de tal manera que la seva mida visible varia un píxel, i Alt+[ i Alt+]la giren de tal manera que el seu punt més allunyat del centre es mou un píxel. - - + + - Note: Linux users may not get the expected results with the Alt+arrow and a few other key combinations if their Window Manager catches those key events before they reach the inkscape application. One solution would be to change the WM's configuration accordingly. + Nota: els usuaris de Linux poden no obtenir els resultats esperats amb Alt+arrow i algunes altres combinacions de tecles si el gestor de finestres captura aquests esdeveniments abans de què arribin a l'Inkscape. Una solució és canviar la configuració del gestor de finestres. - - Seleccions múltiples + + Seleccions múltiples - - + + Podeu seleccionar simultàniament qualsevol nombre d'objectes amb Maj+clic. O podeu seleccionar arrossegant al voltant dels objectes que voleu seleccionar; això es diu la selecció de la cinta de goma. (El selector crea una cinta de goma en arrossegar des d'un espai buit; però si premeu Maj abans de començar a arrossegar, l'Inkscape crearà sempre la cinta de goma.) Practiqueu seleccionant les tres formes següents: - - - - - + + + + + Ara useu la cinta de goma (amb arrossegar o Maj+arrossegar) per a seleccionar les dues el·lipsis, però no el rectangle: - - - - - + + + + + Cada objecte individual dins d'una selecció mostra una petita marca — per defecte, un diamant rectangular. Aquestes marques fan que sigui fàcil veure què hi ha seleccionat i què no. Per exemple, si seleccioneu les dues el·lipsis i el rectangle, sense les marques de diamant us seria difícil endevinar si les el·lipsis estan seleccionades o no. - - + + Fent Maj+clic sobre un objecte seleccionat se l'exclou de la selecció. Seleccioneu els tres objectes anteriors i després useu Maj+clic per a excloure les dues el·lipsis de la selecció i deixar només el rectangle. - - + + Prement Esc es desfà la selecció de tots els objectes. Ctrl+A selecciona tots els objectes del document (això pot ser lent en documents grans com aquest). - - Agrupació + + Agrupació - - + + - Poden combinar-se varis objectes en un grup. Un grup es comporta com un únic objecte quan l'arrossegueu o el transformeu. A sota, els tres objectes de l'esquerra són independents; els mateixos tres objectes a la dreta estan agrupats. Proveu d'arrossegar el grup. + Poden combinar-se diversos objectes en un grup. Un grup es comporta com un únic objecte quan l'arrossegueu o el transformeu. A sota, els tres objectes de l'esquerra són independents; els mateixos tres objectes a la dreta estan agrupats. Proveu d'arrossegar el grup. - - - - + + + + - - + + - Per a agrupar, seleccioneu un o més objectes i feu Ctrl+G. Per a desagrupar un o més grups, seleccioneu-los i premeu Ctrl+U. Els propis grups poden agrupar-se, com qualsevol altre objecte; aquests grups recursius poden descendir fins un nivell d'agrupació arbitrari. Però Ctrl+U només desfà el nivell superior d'agrupació en una selecció. Si voleu desfer completament una agrupació de grups en grups de molts nivells, haureu de fer Ctrl+U repetidament. + Per a agrupar, seleccioneu un o més objectes i feu Ctrl+G. Per a desagrupar un o més grups, seleccioneu-los i premeu Ctrl+U. Els propis grups poden agrupar-se, com qualsevol altre objecte; aquests grups recursius poden descendir fins a un nivell d'agrupació arbitrari. Però Ctrl+U només desfà el nivell superior d'agrupació en una selecció. Si voleu desfer completament una agrupació de grups en grups de molts nivells, haureu de fer Ctrl+U repetidament. - - + + - Si voleu editar un objecte de dins d'un grup, no cal que desfeu el grup. Només cal que feu Ctrl+clic sobre aquest objecte per seleccionar-lo i el podreu editar individualment, o feu Maj+Ctrl+clic sobre objectes (dins o fora de qualsevol grup) per a una selecció múltiple sense tenir en compte els grups. Proveu de moure o transformar les formes individuals del grup (a dalt a la dreta) sense desfer el grup, despres desfeu la selecció i seleccioneu el grup normalment per veure que encara queda agrupat. + Si voleu editar un objecte de dins d'un grup, no cal que desfeu el grup. Només cal que feu Ctrl+clic sobre aquest objecte per seleccionar-lo i el podreu editar individualment, o feu Maj+Ctrl+clic sobre objectes (dins o fora de qualsevol grup) per a una selecció múltiple sense tenir en compte els grups. Proveu de moure o transformar les formes individuals del grup (a dalt a la dreta) sense desfer el grup, després desfeu la selecció i seleccioneu el grup normalment per veure que encara queda agrupat. - - Emplenat i contorn + + Emplenat i contorn - - + + - Moltes de les funcions de l'Inkscape són accessibles a través de diàlegs. Probablement, la manera més simple de pintar un objecte amb un color és obrir el diàleg Swatches des del menú Objectes, seleccionar un objecte, i clicar-ne un per pintar-hi (es canvia el color de l'emplenat). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + El diàleg Emplenat i contorn (Maj+Ctrl+F) resulta més útil. Seleccioneu la forma d'abaix i obriu el diàleg Emplenat i contorn. - - - + + + - Veureu que el diàleg té tres pestanyes: Emplenat, Pinta el contorn, i Estil del contorn. La pestanya Emplenat permet editar l'emplenat (interior) de les formes. Usant els botons de sota la pestanya, podeu seleccionar sense emplenat (el botó amb la X), color, degradat lineal o radial. La forma anterior té acitvada el botó corresponent al color llis. + Veureu que el diàleg té tres pestanyes: Emplenat, Pinta el contorn, i Estil del contorn. La pestanya Emplenat permet editar l'emplenat (interior) de les formes. Usant els botons de sota la pestanya, podeu seleccionar sense emplenat (el botó amb la X), color, degradat lineal o radial. La forma anterior té activada el botó corresponent al color llis. - - + + Més avall veureu els selectors de color, cadascun a la seva pròpia pestanya: RGB, HSV, CMYK, i rodona. Potser el més adequat és el selector de la rodona, on podeu girar el triangle per escollir un to a la rodona, i després seleccionar el color d'aquest to dins del triangle. Tots els selectors de color tenen un control per ajustar l'alfa (opacitat) dels objectes. - - + + Quan seleccioneu un objecte, el selector de color s'actualitza amb el seu emplenat i contorn (quan se selecciona més d'un objecte, es mostra el seu color mitjà). Jugueu amb aquestes mostres o creeu la vostra pròpia: - - - - - - - - - + + + + + + + + + Usant la pestanya Pinta el contorn, podeu eliminar el contorn (línia) de l'objecte, o assignar-li qualsevol color o transparència: - - - - - - - - - - + + + + + + + + + + L'última pestanya, Estil del contorn, us permet definir el gruix i altres paràmetres del contorn: - - - - - - - - - + + + + + + + + + @@ -510,50 +496,44 @@ by 90 degrees. - - - - - - - - - + + + + + + + + + - Quan canvieu d'un color simple a un degradat, el nou degradat usa l'anterior color simple, des de l'opac al transparent. Canvieu a l'eina de degradat (Ctrl+F1) per a arrossegar els manejadors de degradat — els controls apareixen connectats per línies que defineixen la direcció i la longitud del degradat. Quan algun dels manejadors de degradats se selecciona (ressaltat en blau), el diàleg d'Emplenat i contorn estableix el color del manejador en comptes del color de tot l'objecte seleccionat. + Quan canvieu d'un color simple a un degradat, el nou degradat usa l'anterior color simple, des de l'opac al transparent. Canvieu a l'eina de degradat (Ctrl+F1) per a arrossegar les nanses de degradat — els controls apareixen connectats per línies que defineixen la direcció i la longitud del degradat. Quan alguna de les nanses de degradats se selecciona (ressaltat en blau), el diàleg d'Emplenat i contorn estableix el color de la nansa en comptes del color de tot l'objecte seleccionat. - - + + Hi ha una altra manera de canviar el color d'un objecte: fent servir l'eina comptagotes (F7). Cliqueu en qualsevol lloc del dibuix amb aquesta eina, i el color seleccionat s'assignarà a l'emplenat de l'objecte seleccionat. (Maj+clic assignarà el color del contorn). - - Duplicació, alineació, distribució + + Duplicació, alineació, distribució - - + + Una de les operacions més comunes és duplicar un objecte (Ctrl+D). El duplicat se sitúa exactament al damunt de l'original i està seleccionat, de manera que el podeu arrossegar amb el ratolí o les tecles de la fletxa. Per practicar, intenteu omplir la línia amb còpies d'aquest quadrat negre: - - - + + + - Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares -(Shift+click or drag a rubberband), open the dialog and press the -“Center on horizontal axis†button, then the “Make horizontal gaps between objects -equal†button (read the button tooltips). The objects are now neatly aligned and -distributed equispacedly. Here are some other alignment and distribution -examples: + És probable que les còpies del quadrat no estiguin convenientment alineades. Aquí és on entra en joc el diàleg «Alinea i distribueix» (Ctrl+Maj+A). Seleccioneu tots els quadrats (Maj+clic o arrossegant una cinta de goma), obriu el diàleg i premeu el botó «Centra en l'eix horitzontal», després el botó «Distribueix uniformement l'espai horitzontal entre els objectes» (llegiu els indicadors de funcions). Ara els objectes estan distribuïts de manera que els intervals horitzontals entre ells són iguals. Altres exemples d'alineació i distribució: @@ -570,199 +550,194 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ordenació en Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ordenació en Z - - + + - El terme ordenació en z es refereix a l'ordre d'apilament dels objectes en un dibuix, és a dir quins objectes són a dalt i tapen d'altres. Les dues ordres al menú Objecte, Alça a dalt (Inici) i Baixa a baix Fi), mouran els vostres objectes seleccionats a dalt de tot o a sota de tot de l'ordenació en z del vostre document. Dues ordres més, Alça (AvPg) i Baixa (RePg), enfonsaran o aixecaran només un pas, és a dir, moure després d'un objecte no seleccionat en l'ordenció en z (només compten els objectes amb superposició; si no hi ha res superposat a la selecció, Alça i Baixa ho mouen tot a dalt de tot o a baix de tot segons correspongui). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + Practiqueu usant aquestes ordres invertint l'ordre en z dels objectes següents, de forma que l'el·lipse de més a l'esquerra quedi a dalt de tot i la de més a la dreta a sota de tot: - - - - - - - - + + + + + + + + - Una drecera per a seleccionar molt útil és la tecla Tab. Si no se selecciona res, se selecciona l'objecte inferior; en cas contrari se selecciona l'objecte per sobre de l'objecte seleccionat en l'ordre z. Maj+Tab ho fa a l'inrevés, començant des del superior i baixant fins a l'inferior. Ja que els objectes creats s'afegeixen al damunt de la pila, Maj+Tab sense res seleccionat us permet seleccionar convenientment el darrer objecte creat. Practiqueu amb Tab i Maj+Tab a la pila d'el·lipses d'adalt. + Una drecera per a seleccionar molt útil és la tecla Tab. Si no se selecciona res, se selecciona l'objecte inferior; en cas contrari se selecciona l'objecte per sobre de l'objecte seleccionat en l'ordre z. Maj+Tab ho fa a l'inrevés, començant des del superior i baixant fins a l'inferior. Ja que els objectes creats s'afegeixen al damunt de la pila, Maj+Tab sense res seleccionat us permet seleccionar convenientment el darrer objecte creat. Practiqueu amb Tab i Maj+Tab a la pila d'el·lipses de dalt. - - Selecció per sota i arrossegar la selecció + + Selecció per sota i arrossegar la selecció - - + + Què fer si l'objecte que necessiteu està amagat darrera un altre objecte? Encara podeu veure l'objecte de sota si el de sobre és parcialment transparent, però en clicar al damunt seleccionareu l'objecte de sobre, no pas el que necessiteu. - - + + Per a això serveix Alt+clic. Primer Alt+clic selecciona l'objecte que hi ha més amunt, com faria un clic normal; en canvi el següent Alt+clic en el mateix punt seleccionarà l'objecte que hi ha a sota del superior; després el següent, etc. Per tant, Alt+clic passarà d'adalt a baix per tots els objectes a la pila sota el punt on es va fer clic. Quan s'arriba a l'últim objecte, el següent Alt+clic tornarà a seleccionar l'objecte superior. - - + + - [If you are on Linux, you might find that -Alt+click does not work properly. Instead, it might be -moving the whole Inkscape window. This is because your window manager -has reserved Alt+click for a different action. The way to fix this is -to find the Window Behavior configuration for your window manager, and -either turn it off, or map it to use the Meta key (aka Windows key), so -Inkscape and other applications may use the Alt key freely.] - + [Si esteu en Linux, podeu trobar-vos que Alt+click no funciona correctament. En comptes, pot moure tota la finestra de l'Inkscape. Això succeeïx perquè el gestor de finestres a reservat Alt+clic per a una acció diferent. La manera de solucionar-ho és trobar la configuració del comportament de la finestra al gestor de finestres, i o bé desconnectar-ho, o bé assignar-li la tecla Meta (coneguda com a tecla del Windows), així l'Inkscape i altres aplicacions poden usar la tecla Alt lliurement.] - - + + - Bé, però un cop seleccionat l'objecte sota la superfície, què podem fer-li? Podem usar tecles per transformar-lo, i podem arrossegar els manejadors de selecció. Però arrossegar el propi objecte tornarà a reiniciar la selecció a l'objecte de dalt de tot. Així és com ha de funcionar clica-i-arrossega — primer selecciona l'objecte (de dalt de tot) sota el cursor, seguidament arrossega la selecció. Per a dir-li a l'Inkscape que arrossegui el que hi ha seleccionat sense seleccionar res més, useu Alt+arrossega. Això mourà la selecció actual independentment d'on arrossegueu el ratolí. + Bé, però un cop seleccionat l'objecte sota la superfície, què podem fer-li? Podem usar tecles per transformar-lo, i podem arrossegar les nanses de selecció. Però arrossegar el propi objecte tornarà a reiniciar la selecció a l'objecte de dalt de tot. Així és com ha de funcionar clica-i-arrossega — primer selecciona l'objecte (de dalt de tot) sota el cursor, seguidament arrossega la selecció. Per a dir-li a l'Inkscape que arrossegui el que hi ha seleccionat sense seleccionar res més, useu Alt+arrossega. Això mourà la selecció actual independentment d'on arrossegueu el ratolí. - - + + Practiqueu Alt+clic i Alt+arrossega sobre les dues formes marrons sota el rectangle verd transparent: - - - - - Selecting similar objects + + + + + Seleccionant objectes similars - - + + - Inkscape can select other objects similar to the object currently selected. -For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > -Fill Color from the menu. All the objects with a fill color the same -shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + L'Inkscape pot seleccionar altres objectes similars a l'objecte seleccionat actualment. Per exemple, si voleu seleccionar tots els quadrats blaus a sota seleccioneu primer un dels quadrats blaus, i useu Edita > Selecciona el mateix > Emplena color des del menú. Se seleccionaran tots els objectes amb el mateix color d'emplenat blau. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In addition to selecting by fill color, you can select multiple similar objects -by stroke color, stroke style, fill & stroke, and object type. + A més de poder seleccionar pel color d'emplenament, podeu seleccionar objectes similars pel color del traçat, l'estil de traçat, emplenat i traç, o bé tipus d'objecte. - - Conclusió + + Conclusió - - + + - Hem acabat el tutorial bàsic. Hi ha encara molt més sobre l'Inkscape, però amb les tècniques descrites aquí podreu crear gràfics simples i útils. Per a aspectes més complicats, aneu al tutorial avançat a Ajuda > Tutorials. + Hem acabat el tutorial bàsic. Hi ha encara molt més sobre l'Inkscape, però amb les tècniques descrites aquí podreu crear gràfics simples i útils. Per a aspectes més complicats, aneu al tutorial avançat a Ajuda > Tutorials. - + @@ -792,8 +767,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.da.svg b/share/tutorials/tutorial-basic.da.svg index b2866b769..0f56fed5a 100644 --- a/share/tutorials/tutorial-basic.da.svg +++ b/share/tutorials/tutorial-basic.da.svg @@ -36,105 +36,105 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::GRUNDLÆGGENDE - - + + Denne gennemgang demonstrerer det grundlæggende ved Inkscape. Dette er et almindeligt Inkscape-dokument du kan vise, redigere kopiere fra eller gemme. - - + + Den grundlæggende gennemgang dækker navigation pÃ¥ lærredet, hÃ¥ndtering af dokumenter, figurværktøjet, markeringsteknikker, omdannelse af objekter med objektvælgeren, gruppering, indstilling af streg og udfyldning, justering og z-orden (placering af objekter pÃ¥ z-aksen). For mere avancerede emner kan du læse de andre gennemgange i menuen Hjælp. - - Panorering pÃ¥ lærredet + + Panorering pÃ¥ lærredet - - + + Der er mange mÃ¥der at panorere (rulle) pÃ¥ lærredet. Prøv at trykke pÃ¥ Ctrl+piletaster for at rulle lærredet med tastaturet. (Prv dette nu for at rulle ned i dette dokument.) Du kan ogsÃ¥ trække i lærredet med midterste museknap. Eller, du kan bruge rullebjælkerne (tryk Ctrl+B for at vise eller skjule dem). Hjulet pÃ¥ din mus virker ogsÃ¥ til lodret rulning; tryk Shift og musehjul for at rulle vandret. - - Zoom ind og ud + + Zoom ind og ud - - + + Den letteste mÃ¥de at zoome pÃ¥ er, ved at trykke pÃ¥ - og + (eller =)-tasterne. Du kan ogsÃ¥ bruge Ctrl+midterklik eller Ctrl+højreklik for at zoome ind, Shift+midterklik eller Shift+højreklik for at zoome ud, eller drej musehjulet med Ctrl. Eller du kan klikke i zoom-feltet (i nederste højre hjørne af dokumentvinduet), skrive en præcis zoomværdi i % og trykke pÃ¥ Enter. Vi har ogsÃ¥ zoom-værtøjet i væktøjskassen til venstre, der lader dig zoome i et omrÃ¥de ved at trykke omkring det. - - + + Inkscape opbevarer ogsÃ¥ en historik med de forskellige zoom-niveauer du har brugt i arbejdet pÃ¥ det aktuelle dokument. Tryk pÃ¥ `-tasten for at gÃ¥ tilbage til den forrige zoom-faktor, eller Shift+` for at gÃ¥ frem. - - Inkscape-værktøjer + + Inkscape-værktøjer - - + + Den lodrette værktøjslinje i venstre side, viser Inkscapes tegne- og redigeringsværktøjer. I vinduets verste del, under menuen, findes Kommandoværktøjslinjen med generelle kommadoknapper og Værktøjskontrollinjen med kontroller der er specifikke for hvert værktøj. Statuslinjen i bunden af vinduet, viser nyttige vink og beskeder, mens du arbejder. - - + + Mange arbejdsrutiner er til rÃ¥dighed via tastaturgenveje. Vælg Hjælp > Tastaturgenveje og mus for at se den komplette oversigt. - - Oprettelse og hÃ¥ndtering af dokumenter + + Oprettelse og hÃ¥ndtering af dokumenter - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape bruger SVG (Scalable Vector Graphics) formatet til sine filer. SVG er en Ã¥ben standard, der er understttet af meget grafik-software. SVG filer er baseret pÃ¥ XML og kan redigeres med enhver tekst- eller XML-editor (foruden Inkscape, selvflgelig). Udover SVG, kan Inkscape ogsÃ¥ importere og eksportere flere andre formater (EPS, PNG). - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Oprettelse af figurer + + Oprettelse af figurer - - + + Nu er det tid til nogle lækre figurer! Klik pÃ¥ firkantværktøjet i værktøjslinjen, (eller tryk pÃ¥ F4) og klik og træk, enten i et nyt tomt dokument eller lige her: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Disse værktøjer under et, kaldes figurværktøjer. Hver figur du opretter viser en eller flere diamant-formede hÃ¥ndtag; prv at trække i dem for at se hvordan figuren reagerer. En figurs værktøjskontrollinje er en anden mÃ¥de at finjustere formen. Disse kontroller pÃ¥irker de markerede figurer (dvs. dem der vises hÃ¥ndtag pÃ¥ og sætter de standardindstillinger nye figurer oprettes med. - - + + For at fortryde din sidste handling, trykker du Ctrl+Z. (Eller, hvis du skifter mening igen, kan du annullér fortryd den fortrudte handling, ved at trykke Shift+Ctrl+Z.) - - At flytte, skalere og rotere + + At flytte, skalere og rotere - - + + Det mest brugte værktøj i Inkscape er Markeringsværktøjet. Klik pÃ¥den verste knap (den med pilen) i værktøjslinjen, eller tryk pÃ¥ F1 eller mellemrumstasten. Nu kan du vælge ethvert objekt pÃ¥ lærredet. Klik pÃ¥firkanten nedenunder. - - - + + + Du kan nu se otte pileformede hÃ¥ndtag omkring objektet. Nu kan du: - - - + + + Flytte objektet ved at trække i det. (Tryk pÃ¥ Ctrl for at begrænse flytning til den vandret og den lodret akse.) - - - + + + Skalér objektet ved at trække i et af hÃ¥ndtagene. (Tryk pÃ¥ Ctrl for at bevare det oprindelige hjde/bredde-forhold.) - - + + Klik nu pÃ¥firkanten igen. HÃ¥ndtagene ændrer sig. Du kan nu: - - - + + + Rotere objektet ved at trække i hjørnehÃ¥ndtagene. (Tryk pÃ¥ Ctrl for at rotere i trin á 15 grader. Træk i krydset for at placere roteringens centrum.) - - - + + + Vrid (trapezér) objektet ved at trække i hÃ¥ndtag som ikke er i figurens hjørner. (Tryk pÃ¥ Ctrl for at begrænse trapezering til trin á 15 grader.) - - + + Mens objektet er markeret, kan du ogsÃ¥ bruge tekstfelterne i værktøjskontrollinjen (over lærredet) for at indstille eksakte værdier for koordinater (X og Y) og markeringens størrelse (W and H). - - Transformering med tastaturgenveje + + Transformering med tastaturgenveje - - + + En af Inkscapes fremmeste egenskaber i forhold til andre vektorgrafik-programmer, er den store vægt der er lagt pÃ¥ tilgængelighed via tastaturgenveje. Der er stort set ikke den kommando eller handling der ikke er mulig at benytte vha. tastaturet. At transformere objekter er ingen undtagelse. - - + + @@ -294,180 +294,185 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + Den mest anvendelige pixelstørrelse-tranformation er dog tilgængelig vha. Alt med transformationstasterne. For eksempel, Alt+piletaster flytter markeringen med én pixel ved det aktuelle zoom-niveau (dvs. med en skærmpixel, hvilket ikke mÃ¥ forveksles med px-enheden, som er et SVG-længdemÃ¥l, uafhængigt af zoom). Dette betyder at hvis du zoomer ind, vil et tryk med Alt+piletast resultere i en mindre absolut flytning som stadig ser ud som et skub med en pixel pÃ¥ din skærm. Det er sÃ¥ledes muligt at placere objekter med vilkÃ¥rlig præcision, blot ved at zoome ind eller ud som pÃ¥ pÃ¥krævet. - - + + PÃ¥ tilsvarende vis, skalerer Alt+> og Alt+< markeringen sÃ¥dan at dens synlige størrelse ændres med en skærmpixel og Alt+[ og Alt+] roterer den sÃ¥dan, at punktet fjernest fra centerpunktet, flyttes med en skærmpixel. - - + + Bemærk: Linux-brugere opnÃ¥ muligvis ikke de forventede resultater med Alt+pil og et par andre tastaturgenveje, hvis vindueshÃ¥ndteringen fanger disse tastekombinationer før de nÃ¥r Inkscape-programmet. En mulig lsning er at ændre indstillingerne for vindueshÃ¥ndteringen. - - Flere markeringer + + Flere markeringer - - + + Du kan markere et hvilket som helst antal objekter samtidigt ved at trykke Shift+klik. Eller du kan trække omkring objekterne du vil markere. Dette kaldes gummibÃ¥ndsmarkering. (Markeringsværktøjet viser et gummibÃ¥nd nÃ¥r du trækker fra et blankt omrÃ¥de pÃ¥ lærredet. Trykker du pÃ¥ Shift før du begynder at trække, viser Inkscape altid gummibÃ¥ndet.) Øv dig ved at markere alle tre objekter herunder: - - - - - + + + + + Prv nu at bruge gummibÃ¥ndet (ved at trække eller Shift+trække) s�du vælger de to ellipser, men ikke firkanten: - - - - - + + + + + Hvert individuelt objekt indenfor markeringen viser en markeringsindikator — som standard en stiplet rektangulær ramme. Disse indikatorer gør det let at se hvilke objekter der blev valgt og hvilke der ikke blev valgt. For eksempel, hvis du vælger begge ellipser og firkanten, ville det uden indikatorer, være svært at se om ellipserne blev markeret eller ej. - - + + At Shift+klikke pÃ¥ et markeret objekt, fjerner markeringen. Vælg alle tre objekter herover, brug sÃ¥ Shift+klik for at fjerne markeringen af begge ellipser, sÃ¥ til sidst kun firkanten er markeret. - - + + Tryk pÃ¥ Esc fjerner markeringen af alle markerede objekter. Ctrl+A markerer alle objekter i det aktuelle lag (hvis ikke du har oprettet nogen lag, er dette det samme som at vælge alle objekter i dokumentet). - - Gruppering + + Gruppering - - + + Flere objekter kan kombineres til en gruppe. En gruppe opfrer sig som et enkelt objekt nÃ¥r du trækker i det eller transformerer det. Herunder er de tre objekter til venstre uafhængige. De samme tre objekter er grupperet til højre. Prøv at trække i gruppen. - - - - + + + + - - + + For at oprette en gruppe, markerer du et eller flere objekter og trykker pÃ¥ Ctrl+G. For at afgruppere et eller flere objekter markeres de og du trykker pÃ¥ Ctrl+U. Grupper kan ogsÃ¥ grupperes præcis som alle andre objekter. Den slags rekursive grupper kan have vilkÃ¥rlig dybde. Man kan dog, med Ctrl+U, kun afgruppere den verste gruppering i en markering. Du er ndt til at trykke Ctrl+U gentagne gange for fuldstændigt at afgruppere en dyb gruppe i gruppe. - - + + Du er ikke ndvendigvis tvunget til at afgruppere en gruppe hvis du vil redigere et objekt i en gruppe. Du kan blot Ctrl+klik pÃ¥objektet, sÃ¥ markeres det alene og gre redigerbart, eller Shift+Ctrl+klik pÃ¥flere objekter (i eller udenfor grupper) for at markere flere objekter pÃ¥ tværs af grupper. Prv at flytte eller transformere de individuelle figurer i gruppen (herover til højre) uden at afgruppere den. Afmarkér sÃ¥ gruppen og markér den igen for at konstatere at objekterne stadig befinder sig i gruppen. - - Udfyldning og streg + + Udfyldning og streg - - + + - Mange af Inkscapes funktioner er til rÃ¥dighed via dialoger. Den sandsynligvis letteste mÃ¥de at give et objekt en farve er at Ã¥bne farvesamlinger-dialogen fra Objekt-menuen, vælge objektet og klikke pÃ¥en farve for at give objektet en farve (ændre dets udfyldningsfarve). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + Endnu stærkere er dialogen Udfyldning og streg (Shift+Ctrl+F). Markér figuren herunder og Ã¥bn Udfyldning og streg-dialogen. - - - + + + Du kan se at dialogen har tre faneblade: Udfyldning, Stregfarve og Stregstil. Fanebladet Udfyldning lader dig redigere det markerede objekts udfyldning (det indre). Ved at bruge knapperne lige under fanebladet, kan du vælge udfyldningstyper, inklusiv ingen udfyldning (knappen med krydset), enkel farveudfyldning, sÃ¥vel som lineære eller radiære overgange. I ovenstÃ¥ende figur er udfyldningen enkel farve aktiveret. - - + + Længere nede kan du se en samling af farvevælgere, hver vælger i sit eget faneblad: RGB, CMYK, HSL, og farvehjul. Den mest bekvemme er mÃ¥ske farvehjulet, hvor du kan rotere trekanten for at vælge farven pÃ¥farvehjulet og sÃ¥ vælge farvetonen i trekanten. Alle farvevælgere har en glider der indstiller uigennemsigtigheden alfa for de markerede objekter. - - + + Hver gang du markerer et objekt, opdateres farvevælgeren sÃ¥ den viser den aktuelle udfyldning og streg for det markerede objekt (nÃ¥r flere objekter er markeret, viser dialogen deres gennemsnitsfarve gennemsnits-farve). Leg med disse prver eller opret dine egne: - - - - - - - - - + + + + + + + + + Ved at bruge streg-fanebladet, kan du fjerne stregen (omridset) pÃ¥et objekt eller give det en hvilken som helst farve eller gennemsigtighed: - - - - - - - - - - + + + + + + + + + + Det sidste faneblad, Stregstil, lader dig indstille bredde og andre parametre ved streg: - - - - - - - - - + + + + + + + + + @@ -510,45 +515,45 @@ by 90 degrees. - - - - - - - - - + + + + + + + + + NÃ¥r du skifter fra enkel farve til overgang, bruger den oprettede gradient den forrige enkle farve, gÃ¥ende fra ugennemsigtig til gennesigtig. Skift til overgangsværktøjet (Ctrl+F1) for at trække overgangshÃ¥ndtagene — kontrollerne forbundet med linjer der definerer retningen og længden af overgangen. NÃ¥r et af overgangs-kontrollerne aktiveres (fremhævet med blÃ¥t), anvendes den valgte farve pÃ¥ det markerede objekt. - - + + En anden bekvem mÃ¥de at ændre et objekts farve pÃ¥ er at bruge farvevælgeren (F7). Klik et hvilken som helst sted pÃ¥tegningen med farvevælgeren og den valgte farve tildeles det markerede objekts udfyldning (Shift+klik tildeler stregfarve). - - Duplikering, justering, fordeling + + Duplikering, justering, fordeling - - + + En af de mest almindelige manipulationer er duplikering af et objekt (Ctrl+D). Den duplikerede kopi placeres præcis ovenover originalen og og markeres sÃ¥ du kan trække den vha. med musen eller med piletaster. Prv at at fylde linjen med kopier af dette sorte kvadrat: - - - + + + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -570,98 +575,105 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-rækkeflge + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-rækkeflge - - + + - Begrebet z-rækkeflge refererer til rækkeflgen hvori objekter i en tegning er ordnet i forhold til hinanden og hvilke der er ovenover og dækker for andre. De to kommandoer i Objekt-menuen Hæv til top (Home-tasten) og Sænk til bund (End-tasten), vil flytte de markerede objekter allerverst eller allernederst i det aktuelle lags z-rækkeflge. To andre kommandoer, Hæv (PgUp) og Sænk (PgDn), vil sænke eller hæve markeringen et enkelt trin, dvs. flytte det forbi et ikke-markeret objekt i z-rækkeflgen (kun objekter der overlapper markeringen har betydning). Hvis intet overlapper markeringen, flytter Hæv og Sænk hele vejen til toppen eller til bunden). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + Øv dig i at bruge disse kommandoer ved vende z-rækkeflgen pÃ¥objekterne herunder, sÃ¥dan at den ellipsen længst til venstre befinder sig verst og den længst til højre er i bunden: - - - - - - - - + + + + + + + + En meget nyttig markerings-genvej er Tab-tasten. Hvis intet er markeret, markerer den det nederst objekt. Ellers markerer den objektet over det markerede i z-rækkeflgen. Shift+Tab fungerer omvendt, hvor der startes fra det verste objekt og nedad. Eftersom objekter du opretter fjes til toppen af z-rækkeflgen, vil et tryk pÃ¥ Shift+Tab nÃ¥r intet er markeret, bekvemt markere objektet du oprettede sidst. Øv dig med Tab og Shift+Tab-tasterne pÃ¥stakken af ellipser herover. - - Markering under og træk i markering + + Markering under og træk i markering - - + + Hvad gr du hvis objektet du skal bruge er skjult bag et andet objekt? Du kan stadig se bunden af objektet hvis det verste er delvist gennemsigtigt, men hvis du klikker pÃ¥ det, vælges det verste objekt, ikke det nederste du skal bruge. - - + + Dette er hvad Alt+klik bruges til. Frst vælger Alt+klik det verste objekt ligesom et almindeligt klik. Imidlertid vælger det næste Alt+klik pÃ¥samme sted, det næste objekt under det verste. Næste klik vælger objektet trinnet længere nede osv. PÃ¥ den mÃ¥de gennemlber flere Alt+klik i træk, hele z-rækkeflgen fra top til bund pÃ¥klik-punktet. NÃ¥r det nederste objekt nÃ¥r, vil næste Alt+klik naturligvis begynde forfra i z-rækkeflgen og igen markere det verste objekt. - - + + @@ -674,95 +686,95 @@ either turn it off, or map it to use the Meta key (aka Windows key), so Inkscape and other applications may use the Alt key freely.] - - + + Det er alt sammen meget fint, men sÃ¥ snart du har markeret et objekt-under-overfladen-objekt, hvad kan du sÃ¥ gøre med det? Du kan bruge tasterne til at transformere det og du kan trække i markeringshÃ¥ndtagene. Imidlertid vil det at trække i objektet nulstille markeringen til det verste objekt pÃ¥ny (sÃ¥dan er klik og tr� designet til at fungere — det markerer det verste objekt under markren frst og trækker derpÃ¥markeringen). For at fortælle Inkscape der skal trækkes i den aktuelle markering uden at markere noget som helst andet, brug da Alt+træk. Dette flytter den aktuelle markering, ligegyldigt hvorhen du trækker musen. - - + + Øv Alt+klik og Alt+tr� pÃ¥ de to brune figurer under den grønne gennemsigtige firkant: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Konklusion + + Konklusion - - + + - Dette afslutter den grundlæggende gennemgang. Inkscape har meget mere at byde pÃ¥end det, men med teknikkerne beskrevet her, vil du allerede nu være i stand til at oprette simpel men brugbar grafik. Du kan læse den avancerede gennemgang og de andre gennemgange, hvis du vil læse mere, i Hjælp > Gennemgange. + Dette afslutter den grundlæggende gennemgang. Inkscape har meget mere at byde pÃ¥end det, men med teknikkerne beskrevet her, vil du allerede nu være i stand til at oprette simpel men brugbar grafik. Du kan læse den avancerede gennemgang og de andre gennemgange, hvis du vil læse mere, i Hjælp > Gennemgange. - + @@ -792,8 +804,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.de.svg b/share/tutorials/tutorial-basic.de.svg index fc7299de9..56dce768c 100644 --- a/share/tutorials/tutorial-basic.de.svg +++ b/share/tutorials/tutorial-basic.de.svg @@ -110,36 +110,36 @@ - Um ein neues, leeres Dokument zu erzeugen, benutzt man Datei > Neu > Standard oder drückt Strg+N. Um ein neues Dokument aus einer der vielen verfügbaren Vorlagen für Inkscape zu erstellen, verwendet man Datei > Neu > Vorlagen... oder drückt Strg+Alt+N + Um ein neues, leeres Dokument zu erzeugen, benutzt man Datei > Neu oder drückt Strg+N. Um ein neues Dokument aus einer der vielen verfügbaren Vorlagen für Inkscape zu erstellen, verwendet man Datei > Neu aus Vorlage oder drückt Strg+Alt+N. - + - + Ein bestehendes SVG-Dokument öffnet man mit Datei > Öffnen... (Strg+O). Zum Speichern wählt man Datei > Speichern (Strg+S), oder Speichern unter… (Umschalt+Strg+S), um das Dokument unter einem neuen Namen zu speichern (Inkscape kann gelegentlich noch abstürzen, daher besser öfter speichern!). - + - + Inkscape verwendet das SVG-Format (Scalable Vector Graphics) für seine Dateien. SVG ist ein offener Standard, der von vielen Zeichenprogrammen unterstützt wird. SVG-Dateien basieren auf dem XML-Standard und können mit jedem Text- oder XML-Editor (zusätzlich zu dem in Inkscape, natürlich) verändert werden. Neben SVG kann Inkscape auch einige andere Formate importieren und exportieren (z. B. EPS und PNG). - + - + Inkscape öffnet ein separates Programmfenster für jedes einzelne Dokument. Man kann mit dem Fenster-Manager dazwischen wechseln (z. B. durch Alt+Tab) oder auch mit dem Inkscape-eigenen Kurzbefehl Strg+Tab, der durch alle geöffneten Dokument-Fenster wandert (erstellen Sie jetzt ein neues Dokument und schalten Sie zur Übung zwischen diesem und dem Tutorial hin und her). Hinweis: Inkscape behandelt diese Fenster wie Reiter in einem Webbrowser. Das bedeutet, dass der Kurzbefehl Formen erstellen - + - + Nun ist es Zeit, ein paar schicke Formen zu erstellen! Klicken Sie auf das Rechteckwerkzeug in der Werkzeugleiste links (oder drücken Sie F4) und klicken und ziehen Sie, entweder in einem neuen, leeren Dokument oder gleich hier: @@ -154,10 +154,10 @@ - + - + Wie Sie sehen können, sind Standard-Rechtecke blau gefüllt, mit einer schwarzen Kontur (der Umrandung), und vollständig deckend. Wir werden noch sehen, wie man das ändern kann. Mit anderen Werkzeugen lassen sich auch Ellipsen, Sterne und Spiralen erstellen: @@ -177,173 +177,173 @@ - + - + Diese Werkzeuge werden unter dem Begriff Form-Werkzeuge zusammengefasst. Jede erzeugte Form zeigt einen oder mehrere rautenförmige Anfasser. Ziehen Sie mit der Maus daran, um zu sehen wie sich die Form dadurch verändert. Die Werkzeugeinstellungsleiste für Formen bietet ebenfalls die Möglichkeit, die Form zu verändern. Die Einstellungen verändern die aktuell ausgewählten Objekte (die, die die entsprechenden Anfasser haben) und setzt den Standard für alle neuen Objekte. - + - + Um die letzte Aktion rückgängig zu machen, drückt man Strg+Z. (Oder, wenn Sie es sich wieder anders überlegen, benutzen Sie Wiederherstellen durch Umschalt+Strg+Z.) Bewegen, Größe ändern, Drehen - + - + Das am häufigsten verwendete Werkzeug in Inkscape ist das Auswahlwerkzeug. Klicken Sie den obersten Knopf (mit dem Pfeil) in der Werkzeugleiste, oder drücken Sie F1 oder Leertaste. Nun können Sie jedes Objekt auf der Seite auswählen. Probieren Sie das an dem Rechteck unten. - + - + Sie sehen jetzt acht pfeilförmige Anfasser um das markierte Objekt. Jetzt haben Sie mehrere Möglichkeiten: - + - + Verschieben des Objekts durch Ziehen mit gedrückter linker Maustaste. (Drücken Sie Strg, um die Bewegung auf horizontale oder vertikale Richtung zu beschränken.) - + - + Ändern Sie die Größe des Objektes durch Klicken und Ziehen an einem Anfasser. (Drücken Sie Strg zum Beibehalten des Seitenverhältnisses.) - + - + Nun klicken Sie noch einmal auf das Rechteck. Die Anfasser sehen jetzt anders aus. Jetzt gibt es folgende Möglichkeiten: - + - + Drehen des Objektes durch Klicken und Ziehen an den Eck-Anfassern. (Zum stufenweisen Drehen in Schritten von 15° halten Sie Strg gedrückt. Verschieben Sie das Kreuz, um den Drehmittelpunkt festzulegen.) - + - + Scheren Sie das Objekt durch Klicken und Ziehen an den Anfassern an den Längsseiten. (Drücken Sie Strg zum stufenweisen Scheren in Schritten von 15°.) - + - + Wenn man das Auswahlwerkzeug verwendet und das Objekt ausgewählt ist, kann man auch die Eingabefelder (über der Zeichenfläche) benutzen, um genaue Werte für die Koordinaten (X und Y) und die Größe (B und H) einzugeben. Verändern mit der Tastatur - + - + Eine der Eigenschaften von Inkscape, die es von vielen anderen Vektorzeichenprogrammen unterscheidet, ist die gute Tastaturbedienbarkeit. Es gibt fast keinen Befehl oder keine Aktion, die nicht mit der Tastatur ausführbar sind, und Objektmanipulation ist da keine Ausnahme. - + - + Man kann Objekte mit der Tastatur verschieben (Pfeil-Tasten), ihre Größe ändern (<- und >-Tasten) und sie drehen ([- und ]-Tasten). Die Standardschrittweite für Bewegung und Größenänderung mit der Tastatur ist 2 px, mit Umschalt das Zehnfache davon. Strg+< und Strg+> vergrößern auf 200% oder verkleinern auf 50% der Originalgröße. Standardmäßig werden Objekte in Schritten von 15° gedreht, mit gedrückter Strg-Taste in 90°-Schritten. - + - + Besonders nützlich sind pixelgenaue Manipulationen durch gleichzeitiges Drücken von Alt mit den entsprechenden Tasten. Mit Alt+Pfeiltaste verschiebt man das markierte Objekt um 1 Pixel bei gewähltem Zoomfaktor (also 1 Bildschirm-Pixel, nicht zu verwechseln mit der px-Einheit, welche eine SVG-Längeneinheit unabhängig vom Zoomfaktor ist). Das bedeutet, wenn man hineinzoomt, dann entspricht ein einmaliger Druck auf Alt+Pfeil einer kleineren absoluten Bewegung, obwohl es auf dem Bildschirm immer noch eine Bewegung um 1 Pixel ist. So ist es möglich, Objekte mit einer beliebig hohen Präzision zu positionieren, einfach indem man hinein- oder herauszoomt. - + - + Genauso ändern Alt+< und Alt+> die Objektgröße so, das die sichtbare Größe um jeweils ein Bildschirm-Pixel verändert wird. Die Tasten Alt+[ und Alt+] drehen den Punkt, der am weitesten vom Zentrum entfernt ist, um ein Bildschirm-Pixel weiter. - + - + Anmerkung: Linux-Benutzer erhalten möglicherweise nicht den gewünschten Effekt mit Alt+Pfeiltaste und ein paar anderen Tastenkombinationen, wenn ihr Fenstermanager diese Tastendrücke abfängt, bevor sie zu Inkscape gelangen. Eine Lösung ist es, die Einstellungen des Fenstermanagers entsprechend zu ändern. Mehrfachauswahl - + - + Man kann mehrere Objekte gleichzeitig durch Umschalt+Klick, oder durch Ziehen um die Objekte herum auswählen. Letzteres wird Gummibandauswahl genannt. (Das Auswahlwerkzeug erzeugt das Gummiband durch Ziehen über einem leeren Teil der Seite, aber immer auch, wenn vor dem Ziehen Umschalt gedrückt wird.) Üben Sie das Markieren aller drei Formen hier unten: - + - + Jetzt benutzen Sie das Gummiband (durch Ziehen oder Umschalt+Ziehen), um beide Ellipsen, aber nicht das Rechteck zu markieren: - + - + Jedes einzelne Objekt einer Auswahl zeigt einen Objektrahmen – normalerweise einen gestrichelten, rechteckigen Rahmen. So kann man ganz einfach sehen, was ausgewählt ist und was nicht. Wenn man zum Beispiel beide Ellipsen und das Rechteck auswählt, dann hätte man es ohne diese Hinweise schwer zu sagen, ob die Ellipsen markiert sind oder nicht. - + - + Umschalt+Klick auf ein markiertes Objekt entfernt es aus der Auswahl. Wählen Sie alle drei Objekte oben aus, dann benutzen Sie Umschalt+Klick, um beide Ellipsen aus der Auswahl herauszunehmen und nur das Rechteck ausgewählt zu lassen. - + - + Nach einem Druck auf Esc sind keine Objekte mehr ausgewählt. Strg+A wählt dagegen alle Objekte der momentan aktivierten Ebene aus. (Wenn Sie keine weiteren Ebenen erstellt haben, entspricht das allen Objekten im Dokument). Gruppieren - + - + Mehrere Objekte können zu einer Gruppe zusammengefasst werden. Eine Gruppe verhält sich wie ein einzelnes Objekt, wenn man sie verschiebt oder mit den Anfassern verformt. Die drei Objekte unten links sind alle noch einzeln; die gleichen drei Objekte auf der rechten Seite sind gruppiert. Versuchen Sie, die Gruppe zu verschieben. @@ -355,99 +355,99 @@ - + - + Um eine Gruppe zu erzeugen, wählt man ein oder mehrere Objekte aus und drückt Strg+G. Um die Gruppierung bei einer oder mehreren Gruppen aufzuheben, markiert man diese und drückt Strg+U. Gruppierungen können selbst auch gruppiert werden, wie jedes andere Objekt auch. Solche verschachtelten Gruppierungen können beliebig tief weitergeführt werden. Einmaliges Strg+U hebt nur die oberste (letzte) Gruppierung einer ausgewählten Gruppe auf. Um alle Gruppierungen der Auswahl aufzuheben, müssen Sie Strg+U mehrfach drücken. - + - + Es ist nicht unbedingt nötig, alle Gruppierungen aufzuheben, wenn man ein Objekt in einer Gruppe bearbeiten will. Strg+Klick auf ein solches Objekt wählt es aus und erlaubt, es zu bearbeiten. Um mehrere Objekte innerhalb oder außerhalb einer Gruppe auszuwählen, drücken Sie Umschalt+Strg+Klick. Versuchen Sie, einzelne Objekte in der Gruppe (oben rechts) zu verschieben oder zu verändern, ohne die Gruppierung aufzuheben. Anschließend heben Sie die Markierung wieder auf und markieren die Gruppe normal, um zu sehen, dass die Gruppierung erhalten geblieben ist. Füllung und Kontur - + - + - Viele der Funktionen von Inkscape sind durch Dialoge verfügbar. Der wahrscheinlich einfachste Weg, einem Objekt eine Farbe zuzuweisen, ist es, den Farbfelder-Dialog im Ansicht-Menü zu öffnen (oder mittels Shift+Ctrl+W), das Objekt zu markieren, und ein Farbfeld zu wählen. Dies ändert die Füllfarbe. + Die wohl einfachste Möglichkeit, wie man ein Objekt einfärben kann, ist es auszuwählen und dann auf eines der farbigen Kästchen unterhalb der Zeichenfläche zu klicken (dies ändert die Füllfarbe). Alternativ kann der Farbmuster-Dialog vom Ansicht-Menü aus geöffnet werden (oder mittels Shift+Ctrl+W), das Objekt markiert werden, und ein Farbfeld angeklickt werden (auch dies ändert die Füllfarbe). - + - + Viel leistungsfähiger ist der Dialog »Füllung und Kontur« aus dem Objekt-Menü (Umschalt+Strg+F). Wählen Sie das Objekt unten aus und öffnen Sie den Dialog. - - + + - + Sie werden sehen, dass der Dialog drei Reiter hat: Füllung, Farbe der Kontur, und Muster der Kontur. Im Reiter »Füllung« ändert man die Füllfarbe (Innenfarbe) des markierten Objekts. Mit den Knöpfen direkt unter dem Reiter kann man die Füllungsart verändern: die Füllung ganz ausschalten (mit dem Knopf mit dem X), einfach (einfarbig) füllen, oder einen Linear- und Radialverlauf auswählen. Bei dem Objekt oben ist der Knopf »Einfache Farbe« aktiviert. - + - + Weiter unten sieht man verschiedene Farbwahlmöglichkeiten. Jede hat einen eigenen Reiter: RGB, HSL, CMYK und Farbrad. Wahrscheinlich am praktischsten ist das Farbrad, bei dem man das Dreieck verdrehen kann, um den Farbton zu wählen und dann die gewünschte Helligkeit im Dreieck auswählt. Alle Farbwähler besitzen einen Schieberegler, um den Alpha-Kanal (die Deckkraft) der Objektfarbe einzustellen. - + - + Immer, wenn Sie ein Objekt auswählen, zeigt der Farbwähler dessen aktuelle Farbe und Kontur. Bei mehr als einem markierten Objekt wird die Durchschnittsfarbe angezeigt. Üben Sie an diesen Beispielobjekten oder erzeugen Sie selbst welche: - - - - - - - - + + + + + + + + - + Mit dem Reiter »Farbe der Kontur« kann man die Kontur (Außenlinie) des Objektes entfernen, oder ihr eine beliebige Farbe und Deckkraft zuordnen: - - - - - - - - - + + + + + + + + + - + Der letzte Reiter »Muster der Kontur« dient zum Einstellen der Breite und anderer Eigenschaften der Kontur: - - - - - - - - + + + + + + + + - + Statt einer einfachen Farbe kann man auch Farbverläufe für Füllung und/oder Kontur benutzen: @@ -488,42 +488,42 @@ - - - - - - - - + + + + + + + + - + Wenn man von einer einfachen Farbe auf einen Farbverlauf umschaltet, hat der neue Farbverlauf an beiden Enden zunächst die zuvor eingestellte Farbe - an einem Ende ist diese voll deckend, am anderen komplett transparent. Schalten Sie zum Farbverlaufswerkzeug (Strg+F1), um die Verlaufs-Anfasser zu verschieben – das sind durch Linien verbundene Anfasser, mit denen man Richtung und Länge des Verlaufs einstellen kann. Wenn einer der Verlaufs-Anfasser ausgewählt ist (blau hervorgehoben), dann setzt der Dialog »Füllung und Kontur« nur die Farbe dieses einen Anfassers statt der Farbe des ganzen Objekts. - + - + Eine andere praktische Möglichkeit, die Farbe eines Objektes zu ändern, ist die Pipette (F7). Klicken Sie einfach mit der Pipette auf die Zeichnung, und die dort gewählte Farbe wird automatisch als Füllfarbe für das aktuelle Objekt benutzt. (Umschalt+Klick ändert die Farbe der Kontur.) - - Duplizieren, Ausrichten, Verteilen + + Duplizieren, Ausrichten, Verteilen - + - + Einer der häufigsten Arbeitsschritte ist das Duplizieren eines Objekts (Strg+D). Die Kopie des Objektes liegt danach direkt über dem kopierten Objekt und ist ausgewählt, so dass es sofort mit der Maus oder den Pfeiltasten verschoben werden kann. Versuchen Sie doch einmal zur Übung, Kopien des schwarzen Quadrats in einer Linie nebeneinander anzuordnen: - - + + - + Es ist gut möglich, dass Ihre Quadrate jetzt einigermaßen zufällig platziert sind. Hier hilft der Dialog »Ausrichten und Verteilen« (Strg+Umschalt+A). Wählen Sie alle Quadrate aus (mit Umschalt+Klick oder dem Gummiband), öffnen Sie dann den Dialog und drücken »Zentren horizontal ausrichten«. Danach benutzen Sie »Horizontale Abstände zwischen Objekten ausgleichen« (lesen Sie die Tooltips der Schaltflächen). Die Objekte sind jetzt gleichmäßig ausgerichtet und verteilt. Hier sind weitere Übungsmöglichkeiten für Sie: @@ -542,187 +542,187 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-Ordnung + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-Ordnung - + - + - Der Begriff Z-Ordnung beschreibt die Stapelordnung von Objekten in einer Zeichnung – d.h. welche Objekte oben liegen und dadurch andere, darunterliegende, Objekte verdecken. Die zwei Befehle im Objektmenü, »Nach ganz oben anheben« (die Pos 1-Taste) und »Nach ganz unten absenken« (die Ende-Taste), bringen das ausgewählte Objekt nach ganz oben oder ganz unten in der Z-Ordnung der aktuellen Ebene. Zwei weitere Befehle, »Anheben« (Bild hoch) und »Absenken« (Bild runter), heben oder senken das ausgewählte Objekt nur um eine Stufe; das heißt, sie bewegen das Objekt an einem einzigen, nicht ausgewählten, Objekt in der Z-Ordnung vorbei. (Dazu zählen nur Objekte, die die Auswahl überdecken. Wenn nichts die Auswahl überdeckt, dann bewirken Bild hoch und Bild runter das gleiche wie die Tasten Pos1 und Ende). + Der Begriff Z-Ordnung beschreibt die Stapelordnung von Objekten in einer Zeichnung – d.h. welche Objekte oben liegen und dadurch andere, darunterliegende, Objekte verdecken. Die zwei Befehle im Objektmenü, »Nach ganz oben anheben« (die Pos 1-Taste) und »Nach ganz unten absenken« (die Ende-Taste), bringen das ausgewählte Objekt nach ganz oben oder ganz unten in der Z-Ordnung der aktuellen Ebene. Zwei weitere Befehle, »Anheben« (Bild hoch) und »Absenken« (Bild runter), heben oder senken das ausgewählte Objekt nur um eine Stufe; das heißt, sie bewegen das Objekt an einem einzigen, nicht ausgewählten, Objekt in der Z-Ordnung vorbei. (Dazu zählen nur Objekte, die mit ihrem Begrenzungsrahmen die Auswahl überdecken). - + - + Üben Sie diese Befehle, indem Sie die Z-Ordnung der Objekte unten umkehren, so dass am Ende die ganz linke Ellipse oben und die ganz rechte Ellipse unten liegt: - - - - - - - + + + + + + + - + Eine sehr nützliche Auswahlhilfe ist die Tab-Taste. Wenn nichts ausgewählt ist, dann wählt sie das unterste Objekt; andernfalls wählt sie das Objekt über den markierten Objekten in Z-Ordnung. Umschalt+Tab arbeitet genau anders herum – man beginnt beim obersten Objekt und arbeitet sich dann nach unten. Objekte, die man neu erzeugt, liegen zuoberst auf dem Stapel, und so wählt Umschalt+Tab praktischerweise das zuletzt erzeugte Objekt, solange nichts anderes markiert ist. Üben Sie Tab und Umschalt+Tab ein wenig an dem Stapel Ellipsen oben. - - Verdeckte Objekte auswählen und verschieben + + Verdeckte Objekte auswählen und verschieben - + - + Wie kommt man an ein Objekt heran, das von einem anderen verdeckt wird? Es kann sein, das man das untere Objekt zwar sehen kann, wenn das obere Objekt (teilweise) durchsichtig ist. Doch bei dem Versuch, es auszuwählen, markiert man das obere Objekt und nicht das, das man haben möchte. - + - + Dafür gibt es Alt+Klick. Mit dem ersten Alt+Klick wählt man das oberste Objekt, genau wie mit einem gewöhnlichen Klick. Das nächste Mal Alt+Klick an der gleichen Stelle wählt jedoch das Objekt unter dem obersten; dann das nächste darunter, noch eines tiefer u.s.w. Auf diese Weise kommt man durch mehrere Alt+Klicks nacheinander von ganz oben nach ganz unten, durch den ganzen Z-Ordnungsstapel von Objekten an der Stelle des Klicks. Wenn das unterste Objekt erreicht ist, wird durch das nächste Alt+Klick natürlich wieder das oberste Objekt markiert. - + - + [Wenn Sie unter Linux arbeiten, dann könnte es sein, dass Alt+Klick nicht korrekt funktioniert und stattdessen z.B. das ganze Inkscape-Fenster verschiebt. Dies passiert, wenn Ihr Fenstermanager Alt+Klick für eine andere Aktion reserviert hat. Sie können in diesem Fall im Einstellungsdialog für Ihren Fenstermanager das Fensterverhalten anders einstellen, indem Sie die Aktion für diese Tastenkombination abschalten, oder sie auf die Meta-Taste (meist gleichbedeutend mit der Windows-Taste) umstellen. Dies erlaubt es Inkscape und anderen Anwendungen, die Alt-Taste frei zu verwenden.] - + - + Das ist zwar schön, aber was kann man mit einem markierten und verdeckten Objekt anfangen? Man kann es durch Tastaturbefehle verändern, und man kann die Anfasser benutzen. Aber beim Versuch, das Objekt selbst mit der Maus zu verschieben, wird automatisch wieder das oberste Objekt markiert. (So funktioniert »Klicken und Ziehen« nunmal – es wählt das (oberste) Objekt unter dem Mauszeiger, dann verschiebt es das gewählte Objekt). Um Inkscape mitzuteilen, das man das gerade gewählte Objekt verschieben will, und nicht etwa ein anderes auswählen möchte, benutzt man Alt+Ziehen. Das verschiebt das aktuell markierte Objekt, egal wo man mit der Maus hinklickt. - + - + Üben Sie Alt+Klick und Alt+Ziehen an den zwei braunen Objekten unter dem transparent-grünen Rechteck: - - - - - Ähnliche Objekte auswählen + + + + + Ähnliche Objekte auswählen - + - + Inkscape kann Objekte auswählen, die dem aktuell gewählten Objekt ähneln. Wenn man z.B. alle blauen Quadrate unten auswählen möchte, kann man einfach eines davon auswählen, und dann über das Menü Bearbeiten > Das Gleiche auswählen > Füllfarbe verwenden. Alle Objekte mit derselben blauen Füllfarbe sind nun ausgewählt. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Man kann ähnliche Objekte nicht nur nach deren Füllfarbe, sondern auch nach Konturfarbe, Konturstil, Füllung und Kontur zusammen und nach Objekttyp auswählen. - - Schlusswort + + Schlusswort - + - + Dies ist das Ende des Grundlagen-Tutorials. Das waren längst noch nicht alle Funktionen in Inkscape, aber mit den hier vermittelten Techniken können Sie schon einfache, aber nützliche Grafiken erstellen. Um kompliziertere Techniken zu erlernen, schauen Sie sich das Tutorial »Inkscape: Fortgeschrittene Benutzung« und die anderen Tutorials in Hilfe > Einführungen an. - + diff --git a/share/tutorials/tutorial-basic.el.svg b/share/tutorials/tutorial-basic.el.svg index 5d6b6222c..c3eece430 100644 --- a/share/tutorials/tutorial-basic.el.svg +++ b/share/tutorials/tutorial-basic.el.svg @@ -40,414 +40,422 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - + ::ΤΑ ΒΑΣΙΚΆ - + Αυτό το μάθημα δείχνει τα βασικά της χÏήσης του Inkscape. Αυτό είναι ένα κανονικό έγγÏαφο Inkscape που μποÏείτε να δείτε, να επεξεÏγασθείτε, να αντιγÏάψετε ή να αποθηκεÏσετε. - + Το βασικό μάθημα καλÏπτει πεÏιήγηση καμβά, διαχείÏιση εγγÏάφων, βασικά εÏγαλεία σχημάτων, τεχνικές επιλογής, μετασχηματισμός αντικειμένων με επιλογέα, ομαδοποίηση, οÏισμός γεμίσματος και πινελιάς, ευθυγÏάμμιση και διάταξη-z. Για πιο Ï€ÏοχωÏημένα θέματα, κοιτάξτε τα άλλα μαθήματα στο Î¼ÎµÎ½Î¿Ï Î²Î¿Î®Î¸ÎµÎ¹Î±Ï‚. - - Μετακίνηση στον καμβά + + Μετακίνηση στον καμβά - + ΥπάÏχουν πολλοί Ï„Ïόποι για μετακίνηση (κÏλιση) του καμβά του εγγÏάφου. Δοκιμάστε τα πλήκτÏα Ctrl+βέλος για κÏλιση με το πληκτÏολόγιο. (Δοκιμάστε το τώÏα να κυλίσετε αυτό το έγγÏαφο Ï€Ïος τα κάτω). ΜποÏείτε επίσης να σÏÏετε τον καμβά με το μεσαίο πλήκτÏο του ποντικιοÏ. Ή, μποÏείτε να χÏησιμοποιήσετε τις γÏαμμές κÏλισης (πατήστε Ctrl+B για να εμφανίσετε ή να τις αποκÏÏψετε). Ο Ï„Ïοχός στο ποντίκι σας επίσης δουλεÏει για κατακόÏυφη κÏλιση. Πατήστε Shift με τον Ï„Ïοχό να για οÏιζόντια κÏλιση. - - Μεγέθυνση και σμίκÏυνση + + Μεγέθυνση και σμίκÏυνση - + Ο πιο εÏκολος Ï„Ïόπος εστίασης είναι πιέζοντας τα πλήκτÏα - και + (ή =). ΜποÏείτε επίσης να χÏησιμοποιήσετε Ctrl+μεσαίο κλικ ή Ctrl+δεξί κλικ για μεγέθυνση, Shift+μεσαίο κλικ or Shift+δεξί κλικ για σμίκÏυνση, ή πεÏιστÏοφή του Ï„ÏÎ¿Ï‡Î¿Ï Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï Î¼Îµ Ctrl. Ή, μποÏείτε να πατήσετε στο πεδίο εισόδου εστίασης (στην κάτω δεξιά γωνία του παÏαθÏÏου εγγÏάφου), να πληκτÏολογήσετε μια τιμή εστίασης σε % και να πατήσετε Enter. ΥπάÏχει επίσης το εÏγαλείο εστίασης (στη γÏαμμή εÏγαλείων στα αÏιστεÏά) που σας επιτÏέπει να εστιάσετε σε μια πεÏιοχή σÏÏοντας γÏÏω της. - + Το Inkscape επίσης κÏατά ιστοÏικό των σταθμών εστίασης που χÏησιμοποιήσατε στη σÏνοδο αυτής της εÏγασίας. Πατήστε το πλήκτÏο ` για να επιστÏέψετε στην Ï€ÏοηγοÏμενη εστίαση, ή Shift+` για να Ï€ÏοχωÏήσετε. - - ΕÏγαλεία Inkscape + + ΕÏγαλεία Inkscape - + Η κάθετη γÏαμμή εÏγαλείων στα αÏιστεÏά εμφανίζει τα σχεδιαστικά και επεξεÏγαστικά εÏγαλεία του Inkscape. Στο πάνω μέÏος του παÏαθÏÏου, κάτω από το μενοÏ, υπάÏχει η γÏαμμή εντολών με κουμπιά γενικών εντολών και η γÏαμμή ελέγχων εÏγαλείου με ελέγχους που είναι ειδικοί για κάθε εÏγαλείο. Η γÏαμμή κατάστασης στον πυθμένα του παÏαθÏÏου εμφανίζει χÏήσιμες υποδείξεις και μηνÏματα καθώς εÏγάζεσθε. - + Πολλές λειτουÏγίες είναι διαθέσιμες μέσω συντομεÏσεων πληκτÏολογίου. Ανοίξτε Βοήθεια > ΑναφοÏά πλήκτÏων και Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï Î³Î¹Î± να δείτε την πλήÏη αναφοÏά. - - ΔημιουÏγία και διαχείÏιση εγγÏάφων + + ΔημιουÏγία και διαχείÏιση εγγÏάφων - + - Για τη δημιουÏγία ενός νέου ÎºÎµÎ½Î¿Ï ÎµÎ³Î³Ïάφου, χÏησιμοποιήστε ΑÏχείο > Îέο > ΠÏοεπιλογή ή πατήστε Ctrl+N. Για τη δημιουÏγία ενός νέου εγγÏάφου από ένα από τα πολλά Ï€Ïότυπα του Inkscape, χÏησιμοποιήστε το ΑÏχείο > Îεό > ΠÏότυπα... ή πατήστε Ctrl+Alt+N + To create a new empty document, use File > New +or press Ctrl+N. To create a new document from one of Inkscape's many +templates, use File > New from Template... or press +Ctrl+Alt+N - + Για το άνοιγμα ενός υπάÏχοντος εγγÏάφου SVG, χÏησιμοποιήστε ΑÏχείο > Άνοιγμα (Ctrl+O). Για την αποθήκευση, χÏησιμοποιήστε ΑÏχείο > Αποθήκευση (Ctrl+S), ή Αποθήκευση ως (Shift+Ctrl+S) για να το αποθηκεÏσετε με νέο όνομα. (Το Inkscape ίσως ακόμα να είναι ασταθές, έτσι να θυμόσαστε να αποθηκεÏετε συχνά!) - + Το Inkscape χÏησιμοποιεί τη μοÏφή SVG (Scalable Vector Graphics) για τα αÏχεία του. SVG είναι ένα ανοικτό Ï€Ïότυπο πλατιά υποστηÏιζόμενο από λογισμικό γÏαφικών. Τα αÏχεία SVG βασίζονται σε XML και μποÏοÏν να επεξεÏγαστοÏν με οποιοδήποτε επεξεÏγαστή κειμένου ή XML (πέÏα από το Inkscape). Εκτός από SVG, το Inkscape μποÏεί να εισάγει και να εξάγει πολλές άλλες μοÏφές (EPS, PNG). - + Το Inkscape ανοίγει ένα ξεχωÏιστό παÏάθυÏο εγγÏάφου για κάθε έγγÏαφο. ΜποÏείτε να πεÏιηγηθείτε Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚ χÏησιμοποιώντας το διαχειÏιστή παÏαθÏÏου σας (Ï€.χ. με Alt+Tab) ή μποÏείτε να χÏησιμοποιήσετε τη συντόμευση του Inkscape, Ctrl+Tab, που κάνει κÏκλο Î¼ÎµÏ„Î±Î¾Ï ÏŒÎ»Ï‰Î½ των ανοικτών παÏαθÏÏων εγγÏάφου. (ΔημιουÏγήστε ένα νέο έγγÏαφο τώÏα και εναλλάξτε Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï… και Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… εγγÏάφου για εξάσκηση.) Σημείωση: Το Inkscape αντιμετωπίζει αυτά τα παÏάθυÏα ως καÏτέλες σε πεÏιηγητή ιστοÏ, αυτό σημαίνει ότι η συντόμευση Ctrl+Tab δουλεÏει μόνο με έγγÏαφα που Ï„Ïέχουν την ίδια διεÏγασία. Αν ανοίξετε πολλαπλά αÏχεία από ένα αÏχείο πεÏιηγητή ή εκκινήσετε πεÏισσότεÏες από μία διεÏγασίες σε μια εικόνα στο Inkscape δεν θα δουλέψει. - - ΔημιουÏγία σχημάτων + + ΔημιουÏγία σχημάτων - + ÎÏα για μεÏικά όμοÏφα σχήματα! Κλικ στο εÏγαλείο οÏθογωνίου στη γÏαμμή εÏγαλείων (ή πιέστε F4) και κλικ και σÏÏσιμο, είτε σε ένα νέο κενό έγγÏαφο ή ακÏιβώς εδώ: - - - - - - - - - - - - + + + + + + + + + + + + Όπως μποÏείτε να δείτε, τα Ï€Ïοεπιλεγμένα οÏθογώνια γίνονται μπλε, με μια μαÏÏη πινελιά (πεÏίγÏαμμα) και πλήÏως αδιαφανή. Θα δοÏμε πώς αλλάζουμε αυτό παÏακάτω. Με άλλα εÏγαλεία, μποÏείτε επίσης να δημιουÏγήσετε ελλείψεις, αστέÏια και σπείÏες (ελικοειδή): - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + Αυτά τα εÏγαλεία είναι συλλογικά γνωστά ως εÏγαλεία σχήματος. Κάθε σχήμα που δημιουÏγείτε εμφανίζει μία ή πεÏισσότεÏες λαβές σε σχήμα διαμαντιοÏ. Δοκιμάστε να τις σÏÏετε για να δείτε την ανταπόκÏιση των σχημάτων. Το φατνίο ελέγχων για το εÏγαλείο σχήματος είναι ένας άλλος Ï„Ïόπος για ÏÏθμιση του σχήματος. Αυτοί οι έλεγχοι επηÏεάζουν τα Ï„Ïέχοντα επιλεγμένα σχήματα (δηλαδή αυτά που εμφανίζουν τις λαβές) και οÏίστε το Ï€Ïοεπιλεγμένο που θα εφαÏμοστεί στα νεοδημιουÏγοÏμενα σχήματα. - + Για να αναιÏέσετε την τελευταία σας Ï€Ïάξη, πατήστε Ctrl+Z. (Ή, εάν αλλάξετε γνώμη ξανά, μποÏείτε να επανεκτελέσετε την ενέÏγεια της ακÏÏωσης με Shift+Ctrl+Z.) - - Μετακίνηση, κλιμάκωση, πεÏιστÏοφή + + Μετακίνηση, κλιμάκωση, πεÏιστÏοφή - + Το πιο συχνά χÏησιμοποιοÏμενο εÏγαλείο του Inkscape είναι ο Επιλογέας. Κλικ στο πιο πάνω κουμπί (με το βέλος) στη γÏαμμή εÏγαλείων, ή πατήστε F1 ή διάστημα. ΤώÏα μποÏείτε να επιλέξετε κάθε αντικείμενο στον καμβά. Πατήστε στο πιο κάτω οÏθογώνιο. - - + + Θα δείτε οκτώ λαβές σε σχήμα βέλους να εμφανίζονται γÏÏω από το αντικείμενο. ΤώÏα μποÏείτε: - - + + να μετακινήσετε το αντικείμενο σÏÏοντας το. (Πατήστε Ctrl για να πεÏιοÏίσετε την κίνηση οÏιζόντια ή κάθετα.) - - + + να κλιμακώσετε το αντικείμενο σÏÏοντας κάθε λαβή. (Πατήστε Ctrl για να διατηÏήσετε την αÏχική αναλογία Ïψους/πλάτους.) - + ΤώÏα πατήστε στο οÏθογώνιο ξανά. Οι λαβές αλλάζουν. ΤώÏα μποÏείτε: - - + + να πεÏιστÏέψετε το αντικείμενο σÏÏοντας τις γωνιακές λαβές. (Πατήστε Ctrl για να πεÏιοÏίσετε την πεÏιστÏοφή σε βήματα 15 μοιÏών. ΣÏÏτε το σημάδι του σταυÏÎ¿Ï Î³Î¹Î± να τοποθετήσετε το κέντÏο της πεÏιστÏοφής.) - - + + να στÏεβλώσετε το αντικείμενο σÏÏοντας μη γωνιακές λαβές. (Πατήστε Ctrl για να πεÏιοÏίσετε τη στÏέβλωση σε βήματα 15 μοιÏών.) - + Ενώ είσαστε στον επιλογέα, μποÏείτε επίσης να χÏησιμοποιήσετε τα αÏιθμητικά πεδία εισόδου στη γÏαμμή ελέγχων (πάνω από τον καμβά) για να οÏίσετε ακÏιβείς τιμές για συντεταγμένες (X και Y) και μεγέθη (πλάτος και Ïψος) της επιλογής. - - Μετασχηματισμός με πλήκτÏα + + Μετασχηματισμός με πλήκτÏα - + Ένα από τα χαÏακτηÏιστικά του Inkscape που το ξεχωÏίζουν από τους άλλους επεξεÏγαστές διανυσμάτων είναι η έμφαση του στην Ï€Ïοσβασιμότητα του πληκτÏολογίου. Δεν υπάÏχει Ï€Ïακτικά καμία εντολή ή ενέÏγεια που είναι αδÏνατο να γίνει από το πληκτÏολόγιο και ο μετασχηματισμός αντικειμένων δεν είναι εξαίÏεση. - + ΜποÏείτε να χÏησιμοποιήσετε το πληκτÏολόγιο για να μετακινήσετε (πλήκτÏα βελών), να κλιμακώσετε (πλήκτÏα < και >) και να πεÏιστÏέψετε (πλήκτÏα [ και ]) αντικείμενα. Οι Ï€Ïοεπιλεγμένες μετακινήσεις και κλιμακώσεις είναι κατά 2 εικονοστοιχεία, με το Shift, μετακινείτε κατά το δεκαπλάσιο του. Ctrl+> και Ctrl+< αυξάνουν ή μειώνουν στο 200% ή 50% του αÏχικοÏ, αντίστοιχα. Οι Ï€Ïοεπιλεγμένες πεÏιστÏοφές είναι κατά 15 μοίÏες. Με Ctrl πεÏιστÏέφετε κατά 90 μοίÏες. - + Όμως, ίσως το πιο χÏήσιμο είναι μετασχηματισμοί μεγέθους εικονοστοιχείου, καλοÏμενες με τη χÏήση Alt με τα πλήκτÏα μετασχηματισμοÏ. Π.χ., Alt+βέλη θα μετακινήσουν την επιλογή κατά 1 εικονοστοιχείο στην Ï„Ïέχουσα εστίαση (δηλαδή κατά 1 εικονοστοιχείο οθόνης, που δεν Ï€Ïέπει να συγχέεται με τη μονάδα px (εικονοστοιχείο) που είναι μια μονάδα μήκους SVG ανεξάÏτητη από την εστίαση). Αυτό σημαίνει ότι εάν μεγεθÏνετε, ένα Alt+βέλος θα καταλήξει σε μια μικÏότεÏη απόλυτη κίνηση που θα φαίνεται ακόμα ως ώθηση ενός εικονοστοιχείου στην οθόνη σας. Είναι έτσι δυνατόν να τοποθετήσετε αντικείμενα με ελεÏθεÏη ακÏίβεια απλά με μεγέθυνση ή σμίκÏυνση όπως χÏειάζεται. - + ΠαÏόμοια, Alt+> και Alt+< κλιμακώνουν την επιλογή έτσι ώστε οι οÏατές αλλαγές μεγέθους της κατά ένα εικονοστοιχείο οθόνης και Alt+[ και Alt+] να την πεÏιστÏέφουν έτσι ώστε το πιο απομακÏυσμένο από το κέντÏο σημείο να μετακινείται κατά ένα εικονοστοιχείο οθόνης. - + Σημείωση: Οι χÏήστες Linux μποÏεί να μην πάÏουν τα αναμενόμενα αποτελέσματα με Alt+βέλος και μεÏικοÏÏ‚ άλλους συνδυασμοÏÏ‚ πλήκτÏων, εάν ο διαχειÏιστής παÏαθÏÏου συλλάβει αυτά τα συμβάντα πλήκτÏων Ï€Ïιν φτάσουν στην εφαÏμογή inkscape. Μιά λÏση θα ήταν η αλλαγή της διαμόÏφωσης του διαχειÏιστή παÏαθÏÏου ανάλογα. - - Πολλαπλές επιλογές + + Πολλαπλές επιλογές - + ΜποÏείτε να επιλέξετε οποιοδήποτε αÏιθμό αντικειμένων ταυτόχÏονα με Shift+κλικ. Ή, μποÏείτε να σÏÏετε γÏÏω από τα αντικείμενα που χÏειάζεσθε να επιλέξετε. Αυτό λέγεται επιλογή λάστιχο. (Ο επιλογέας δημιουÏγεί ένα λάστιχο όταν σÏÏετε από έναν κενό χώÏο. Όμως, εάν πατήσετε Shift Ï€Ïιν την έναÏξη του συÏσίματος, το Inkscape θα δημιουÏγεί πάντοτε το λάστιχο.) Εξασκηθείτε επιλέγοντας και τα Ï„Ïία παÏακάτω σχήματα: - - - - + + + + ΤώÏα, χÏησιμοποιήστε το λάστιχο (με σÏÏσιμο ή Shift+σÏÏσιμο) για να επιλέξετε τις δÏο ελλείψεις αλλά όχι το οÏθογώνιο: - - - - + + + + Κάθε ατομικό αντικείμενο μέσα σε μια επιλογή εμφανίζει μια υπόδειξη επιλογής — από Ï€Ïοεπιλογή, ένα διακεκομμένο οÏθογώνιο πλαίσιο. Αυτές οι υποδείξεις κάνουν πιο εÏκολο να δει κανείς μονομιάς, τι επιλέχτηκε και τι όχι. Π.χ., εάν επιλέξετε και τις δÏο ελλείψεις και το οÏθογώνιο, χωÏίς τις υποδείξεις θα ήταν δÏσκολο να μαντέψετε εάν οι ελλείψεις είναι επιλεγμένες ή όχι. - + Shift+κλικ σε ένα επιλεγμένο αντικείμενο το αποκλείει από την επιλογή. Επιλέξτε και τα Ï„Ïία πιο πάνω αντικείμενα, έπειτα χÏησιμοποιήστε Shift+κλικ για να αποκλείσετε και τις δÏο ελλείψεις από την επιλογή αφήνοντας μόνο το επιλεγμένο οÏθογώνιο. - + Πατώντας Esc αποεπιλέγεται οποιοδήποτε επιλεγμένο αντικείμενο. Ctrl+A επιλέγει όλα τα αντικείμενα στην Ï„Ïέχουσα στÏώση (εάν δεν δημιουÏγήσατε στÏώσεις, είναι το ίδιο όπως όλα τα αντικείμενα στο έγγÏαφο). - - Ομαδοποίηση + + Ομαδοποίηση - + Πολλά αντικείμενα μποÏοÏν να συνδυαστοÏν σε μια ομάδα. Μια ομάδα συμπεÏιφέÏεται ως ένα μόνο αντικείμενο, όταν το σÏÏετε ή το μετακινείτε. Πιο κάτω, τα Ï„Ïία αντικείμενα στα αÏιστεÏά είναι ανεξάÏτητα, τα ίδια Ï„Ïία αντικείμενα στα δεξιά είναι ομαδοποιημένα. Δοκιμάστε να σÏÏετε την ομάδα. - - - - + + + + - + Για να δημιουÏγήσετε μια ομάδα, επιλέγετε ένα ή πεÏισσότεÏα αντικείμενα και πατάτε Ctrl+G. Για να αποομαδοποιήσετε μία ή πεÏισσότεÏες ομάδες, επιλέξτε τις και πατήστε Ctrl+U. Οι ίδιες οι ομάδες μποÏοÏν να ομαδοποιηθοÏν, όπως κάθε άλλο αντικείμενο. Τέτοιες αναδÏομικές ομάδες μποÏεί να πάνε σε ελεÏθεÏο βάθος. Όμως, Ctrl+U αποομαδοποιεί μόνο την υψηλότεÏη στάθμη ομαδοποίησης μιας επιλογής. Θα χÏειαστεί να πιέσετε το Ctrl+U επανειλημμένα, εάν θέλετε να αποομαδοποιήσετε πλήÏως τις ομάδες των ομάδων. - + Δεν χÏειάζεται να αποομαδοποιήσετε κατ' ανάγκην, όμως, εάν θέλετε να επεξεÏγαστείτε ένα αντικείμενο μέσα σε μια ομάδα. Απλά Ctrl+κλικ αυτό το αντικείμενο και θα επιλεγεί και θα γίνει επεξεÏγάσιμο, ή Shift+Ctrl+κλικ για πολλά αντικείμενα (μέσα ή έξω από κάθε ομάδα) για πολλαπλή επιλογή ανεξάÏτητα από την ομαδοποίηση. ΠÏοσπαθήστε να μετακινήσετε ή να μετασχηματίσετε τα ατομικά σχήματα στην ομάδα (πάνω δεξιά) χωÏίς να τα αποομαδοποιήσετε, μετά αποεπιλέξτε και επιλέξτε την ομάδα κανονικά για να δείτε ότι παÏαμένει ακόμα ομαδοποιημένη. - - Γέμισμα και Πινελιά + + Γέμισμα και Πινελιά - + - Πολλές λειτουÏγίες του Inkscape είναι διαθέσιμες μέσω διαλόγων. ΠÏοφανώς ο πιο απλός Ï„Ïόπος να βάψετε ένα αντικείμενο με κάποιο χÏώμα είναι να ανοίξετε το διάλογο χÏωματολόγια από το Î¼ÎµÎ½Î¿Ï Ï€Ïοβολή (ή πατήστε Shift+Ctrl+W), επιλέξτε ένα αντικείμενο και πατήστε ένα χÏώμα για να το βάψετε (αλλάξτε το χÏώμα γεμίσματος του). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - + - + Πιο ισχυÏός είναι ο διάλογος γεμίσματος και πινελιάς από το Î¼ÎµÎ½Î¿Ï Î±Î½Ï„Î¹ÎºÎµÎ¯Î¼ÎµÎ½Î¿ (ή πατήστε Shift+Ctrl+F). Επιλέξτε το πιο κάτω σχήμα και ανοίξτε το διάλογο γεμίσματος και πινελιάς. - - + + - + Θα δείτε ότι ο διάλογος έχει Ï„Ïεις καÏτέλες: γέμισμα, πινελιά και μοÏφοποίηση πινελιάς. Η καÏτέλα γέμισμα σας επιτÏέπει να επεξεÏγαστείτε το γέμισμα (εσωτεÏικό) των επιλεγμένων αντικειμένων. ΧÏησιμοποιώντας τα κουμπιά πιο κάτω από την καÏτέλα, μποÏείτε να επιλέξετε Ï„Ïπους γεμίσματος, συμπεÏιλαμβανόμενων χωÏίς χÏώμα (το κουμπί με το Χ), επίπεδο χÏώμα, καθώς και γÏαμμικές ή ακτινικές διαβαθμίσεις. Για το πιο πάνω σχήμα, το κουμπί επίπεδου χÏώματος θα ενεÏγοποιηθεί. - + - + Πιο κάτω βλέπετε μια επιλογή των επιλογέων χÏώματος, καθένας στη δική του καÏτέλα: RGB, CMYK, HSL και Ï„Ïοχός. Ίσως ο πιο βολικός είναι ο επιλογέας Ï„ÏοχοÏ, όπου μποÏείτε να πεÏιστÏέψετε το Ï„Ïίγωνο για να επιλέξετε χÏώμα στον Ï„Ïοχό και έπειτα επιλογή απόχÏωσης του χÏώματος μες το Ï„Ïίγωνο. Όλοι οι επιλογείς χÏώματος πεÏιέχουν έναν ολισθητή για οÏισμό του άλφα (αδιαφάνειας) των επιλεγμένων αντικειμένων. - + - + Όποτε επιλέγετε ένα αντικείμενο, ο επιλογέας χÏώματος ενημεÏώνεται για να εμφανίσει το Ï„Ïέχον γέμισμα του και την Ï„Ïέχουσα πινελιά του (για πολλαπλές επιλογές αντικειμένων, ο διάλογος εμφανίζει το μέσο ÏŒÏο του χÏώματος). Παίξτε με αυτά τα δείγματα ή δημιουÏγήστε τα δικά σας: - - - - - - - - + + + + + + + + - + ΧÏησιμοποιώντας την καÏτέλα πινελιάς, μποÏείτε να αφαιÏέσετε την πινελιά (πεÏίγÏαμμα) του αντικειμένου, ή να αποδώσετε οποιοδήποτε χÏώμα ή διαφάνεια σε αυτό: - - - - - - - - - + + + + + + + + + - + Η τελευταία καÏτέλα, μοÏφοποίηση πινελιάς, σας επιτÏέπει να οÏίσετε το πλάτος και άλλες παÏαμέτÏους της πινελιάς: - - - - - - - - + + + + + + + + - + Τελικά, αντί για επίπεδο χÏώμα, μποÏείτε να χÏησιμοποιήσετε διαβαθμίσεις για γεμίσματα και/ή πινελιές: @@ -488,42 +496,42 @@ - - - - - - - - + + + + + + + + - + Όταν αλλάζετε από επίπεδο χÏώμα σε διαβάθμιση, η νεοδημιουÏγοÏμενη διαβάθμιση χÏησιμοποιεί το Ï€ÏοηγοÏμενο επίπεδο χÏώμα, πηγαίνοντας από αδιαφανές σε διαφανές. Εναλλάξτε στο εÏγαλείο διαβάθμισης (Ctrl+F1) για να σÏÏετε τις λαβές διαβάθμισης — τους ελέγχους συνδεμένους με γÏαμμές που οÏίζουν την κατεÏθυνση και το μήκος της διαβάθμισης. Όταν οποιαδήποτε από τις λαβές διαβάθμισης επιλέγεται (τονισμένο μπλε), ο διάλογος γεμίσματος και πινελιάς οÏίζει το χÏώμα αυτής της λαβής αντί για το χÏώμα του ÏƒÏ…Î½Î¿Î»Î¹ÎºÎ¿Ï ÎµÏ€Î¹Î»ÎµÎ³Î¼Î­Î½Î¿Ï… αντικειμένου. - + - + Ένας άλλος ακόμα βολικός Ï„Ïόπος για αλλαγή χÏώματος ενός αντικειμένου είναι χÏησιμοποιώντας το εÏγαλείο σταγονόμετÏου (F7). Απλά κλικ οπουδήποτε στη πεÏιοχή σχεδίασης με αυτό το εÏγαλείο και το επιλεγμένο χÏώμα θα αποδοθεί στο γέμισμα του επιλεγμένου αντικειμένου (Shift+κλικ θα αποδώσει το χÏώμα πινελιάς). - - Διπλασιασμός, ευθυγÏάμμιση, κατανομή + + Διπλασιασμός, ευθυγÏάμμιση, κατανομή - + - + Μια από τις πιο συνηθισμένες λειτουÏγίες είναι διπλασιασμός ενός αντικειμένου (Ctrl+D). Το αντίγÏαφο τοποθετείται ακÏιβώς πάνω από το αÏχικό και επιλέγεται, έτσι μποÏείτε να το σÏÏετε μακÏιά με το ποντίκι ή με τα πλήκτÏα βελών. Για εξάσκηση, δοκιμάστε το γέμισμα της γÏαμμής με αντίγÏαφα Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μαÏÏου τετÏαγώνου: - - + + - + ΥπάÏχουν πιθανότητες, τα αντίγÏαφά σας του τετÏαγώνου να είναι τοποθετημένα πεÏισσότεÏο ή λιγότεÏο τυχαία. Εδώ είναι που ο διάλογος ΕυθυγÏάμμιση και κατανομή (Ctrl+Shift+A) είναι χÏήσιμος. Επιλέξτε όλα τα τετÏάγωνα (Shift+πάτημα ή σÏÏτε το λάστιχο), ανοίξτε τον διάλογο και πατήστε το κουμπί “κεντÏάÏισμα στον οÏιζόντιο άξοναâ€, έπειτα το κουμπί “εξίσωση οÏιζόντιων κενών Î¼ÎµÏ„Î±Î¾Ï Î±Î½Ï„Î¹ÎºÎµÎ¹Î¼Î­Î½Ï‰Î½â€ (διαβάστε τις συμβουλές του κουμπιοÏ). Τα αντικείμενα είναι τώÏα με τάξη ευθυγÏαμμισμένα και κατανεμημένα σε ίσες αποστάσεις. Îα μεÏικά άλλα παÏαδείγματα ευθυγÏάμμισης και κατανομής: @@ -542,187 +550,194 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Διάταξη-Ζ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Διάταξη-Ζ - + - + - ÎŒ ÏŒÏος διάταξη-z αναφέÏεται σε μια διάταξη στοίβας αντικειμένων σε ένα σχέδιο, δηλαδή σε ποιο αντικείμενο είναι στην κοÏυφή και επισκιάζει τα άλλα. Οι δÏο εντολές στο Î¼ÎµÎ½Î¿Ï Î±Î½Ï„Î¹ÎºÎµÎ¹Î¼Î­Î½Î¿Ï…, ανÏψωση στην κοÏυφή (το πλήκτÏο Home) και βÏθιση στον πυθμένα (το πλήκτÏο End), θα μετακινήσουν τα επιλεγμένα αντικείμενά σας στην πιο υψηλή ή στην πιο χαμηλή από τις διατάξεις-z της Ï„Ïέχουσας στÏώσης. ΔÏο πεÏισσότεÏες εντολές, ανÏψωση (PgUp) και βÏθιση (PgDn), θα ανυψώσουν ή θα βυθίσουν την επιλογή μόνο ένα βήμα, δηλαδή θα μετακινήσουν το Ï€ÏοηγοÏμενο μη επιλεγμένο αντικείμενο στη διάταξη-z (μόνο αντικείμενα που επικαλÏπτουν την επιλογή μετÏάνε, εάν τίποτα δεν επικαλÏπτει την επιλογή, η ανÏψωση και η βÏθιση την μετακινοÏν όλο το δÏόμο στην κοÏυφή ή στον πυθμένα αντίστοιχα). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - + - + Εξασκηθείτε χÏησιμοποιώντας αυτές τις εντολές αντιστÏέφοντας τη διάταξη-z των πιο κάτω αντικειμένων, έτσι ώστε η πιο αÏιστεÏή έλλειψη να είναι στην κοÏυφή και η πιο δεξιά έλλειψη να είναι στον πυθμένα: - - - - - - - + + + + + + + - + Μια Ï€Î¿Î»Ï Ï‡Ïήσιμη συντόμευση επιλογής είναι το πλήκτÏο Tab. Εάν τίποτα δεν έχει επιλεγεί, επιλέγει το πιο χαμηλό αντικείμενο. ΔιαφοÏετικά επιλέγει το αντικείμενο πάνω από τα επιλεγμένα αντικείμενα στη διάταξη-z. Shift+Tab δουλεÏουν αντίστÏοφα, ξεκινώντας από το πιο ψηλό αντικείμενο και Ï€ÏοχωÏώντας Ï€Ïος τα κάτω. Î‘Ï†Î¿Ï Ï„Î± αντικείμενα που δημιουÏγείτε Ï€Ïοστίθενται στην κοÏυφή της στοίβας, πατώντας Shift+Tab χωÏίς επιλογή θα επιλέξει βολικά το αντικείμενο που δημιουÏγήσατε τελευταίο. Εξασκηθείτε με τα πλήκτÏα Tab και Shift+Tab στη στοίβα των πιο πάνω ελλείψεων. - - Επιλογή του από κάτω και σÏÏσιμο του επιλεγμένου + + Επιλογή του από κάτω και σÏÏσιμο του επιλεγμένου - + - + Τι να κάνετε εάν το αντικείμενο που χÏειάζεσθε είναι κÏυμμένο πίσω από ένα άλλο αντικείμενο; Ίσως βλέπετε ακόμα το κάτω αντικείμενο εάν το κοÏυφαίο είναι (μεÏικώς) διαφανές, αλλά πατώντας το θα επιλέξει το πάνω αντικείμενο, όχι αυτό που χÏειάζεσθε. - + - + Για αυτό είναι το Alt+κλικ. ΠÏώτα Alt+κλικ επιλέγει το κοÏυφαίο αντικείμενο όπως ένα κανονικό κλικ. Όμως, το επόμενο Alt+κλικ στο ίδιο σημείο θα επιλέξει το αντικείμενο κάτω από το κοÏυφαίο. Το επόμενο πάτημα το αντικείμενο ακόμα πιο χαμηλά, κλ. Έτσι πολλά Alt+click στη σειÏά θα κάνουν κÏκλο, κοÏυφή Ï€Ïος πυθμένα, μέσα από τη συνολική στοίβα των αντικειμένων της διάταξης-z στο σημείο κλικ. Όταν φτάνετε στο κατώτεÏο αντικείμενο, το επόμενο Alt+κλικ θα επιλέξει ξανά το κοÏυφαίο αντικείμενο. - + - + [Εάν είσθε στο Linux, ίσως βÏείτε ότι Alt+κλικ δεν λειτουÏγεί κατάλληλα. Αντίθετα, μποÏεί να μετακινεί το συνολικό παÏάθυÏο Inkscape. Αυτό συμβαίνει επειδή ο διαχειÏιστής παÏαθÏÏου έχει κÏατήσει το +κλικ για διαφοÏετική ενέÏγεια. Ο Ï„Ïόπος να το διοÏθώσετε είναι να βÏείτε τη διαμόÏφωση συμπεÏιφοÏάς του παÏαθÏÏου για τον διαχειÏιστή παÏαθÏÏου σας και είτε να το απενεÏγοποιήσετε, ή να το αντιστοιχίσετε στο πλήκτÏο Meta (πλήκτÏο aka Windows - συνήθως δίπλα στο Alt), έτσι ώστε άλλες εφαÏμογές να μποÏοÏν να χÏησιμοποιήσουν το πλήκτÏο Alt ελεÏθεÏα.] - + - + Αυτό είναι ωÏαίο, αλλά Î±Ï†Î¿Ï ÎµÏ€Î¹Î»Î­Î¾ÎµÏ„Îµ το αντικείμενο κάτω από την επιφάνεια, τι μποÏείτε να κάνετε με αυτό; ΜποÏείτε να χÏησιμοποιήσετε πλήκτÏα για να το μετασχηματίσετε και μποÏείτε να σÏÏετε τις λαβές επιλογής. Όμως, σÏÏοντας το αντικείμενο το ίδιο θα επαναφέÏει την επιλογή στο κοÏυφαίο αντικείμενο ξανά (έτσι σχεδιάστηκε να δουλεÏει το κλικ και σÏÏσιμο — επιλέγει το κοÏυφαίο αντικείμενο κάτω από το δÏομέα Ï€Ïώτο, έπειτα σÏÏει την επιλογή). Για να πείτε στο Inkscape να σÏÏετε την Ï„Ïέχουσα επιλογή χωÏίς να επιλέξει τίποτα άλλο, χÏησιμοποιήστε Alt+σÏÏσιμο. Αυτό θα μετακινήσει την Ï„Ïέχουσα επιλογή άσχετα με το Ï€Î¿Ï ÏƒÏÏετε το ποντίκι σας. - + - + Εξασκηθείτε Alt+κλικ και Alt+σÏÏσιμο στα δÏο καφέ σχήματα κάτω από το Ï€Ïάσινο διαφανές οÏθογώνιο: - - - - - Επιλογή παÏόμοιων αντικειμένων + + + + + Επιλογή παÏόμοιων αντικειμένων - + - + Το Inkscape μποÏεί να επιλέξει άλλα αντικείμενα παÏόμοια με το Ï„Ïέχον επιλεγμένο αντικείμενο. ΠαÏαδείγματος χάÏη, αν θέλετε να επιλέξετε όλα τα γαλάζια τετÏάγωνα κάτω από το Ï€Ïώτο επιλέξτε ένα από τα γαλάζια τετÏάγωνα και χÏησιμοποιήστε ΕπεξεÏγασία > Επιλογή ίδιου > ΧÏώμα γεμίσματος από το μενοÏ. Όλα τα αντικείμενα με χÏώμα γεμίσματος την ίδια σκιά γαλάζιου επιλέγονται τώÏα. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ΠέÏα από την επιλογή κατά χÏώμα γεμίσματος, μποÏείτε να επιλέξετε πολά παÏόμοια αντικείμενα κατά χÏώμα πινελιάς, τεχνοτÏοπία πινελιάς, πινελιά & γεμίσματος και Ï„Ïπο αντικειμένου. - - ΣυμπέÏασμα + + ΣυμπέÏασμα - + - + Αυτό κλείνει το βασικό μάθημα. ΥπάÏχουν Ï€Î¿Î»Ï Ï€ÎµÏισσότεÏα από αυτό στο Inkscape, αλλά με τις τεχνικές που πεÏιγÏάφτηκαν εδώ, θα μποÏείτε ήδη να δημιουÏγήσετε απλά αλλά χÏήσιμα γÏαφικά. Για πιο πεÏίπλοκο υλικό, συνεχίστε με το Ï€ÏοχωÏημένο και τα άλλα μαθήματα στο Βοήθεια > Μαθήματα. - + diff --git a/share/tutorials/tutorial-basic.eo.svg b/share/tutorials/tutorial-basic.eo.svg index f33d0df70..e9ab894e1 100644 --- a/share/tutorials/tutorial-basic.eo.svg +++ b/share/tutorials/tutorial-basic.eo.svg @@ -36,105 +36,105 @@ - Uzu Strkl+malsupren sagoklavo por rulumi + Uzu Strkl+malsupren sagoklavo por rulumi - + ::FUNDAMENTO - - + + La lernilo montras fundamentan uzadon de Inkscape. Äœi estas normala dokumento de Inkscape kiun vi povas rigardi, redakti, kopii el, aÅ­ konservi. - - + + La fundamentan lernilon konsistigas: movigado tra la tolo, administrado de dokumentoj, esencaj informoj pri iloj de formoj, manieroj de elektado, transformado de objektoj per ilo de elekto, grupigado, agordoj de plenigaĵo kaj streko, vicigado kaj z-ordiÄo. Pri pli altnivelaj temoj, kontrolu aliajn lernilojn en Helpomenuo. - - Rulumado de tolo + + Rulumado de tolo - - + + Ekzistas multaj manieroj rulumi la tolon de la dokumento. Provu Strkl+sagoklavo por rulumi per klavaro. (Provu nun rulumi tiun ĉi dokumenton malsupren.) Vi povas ankaÅ­ rulumi la tolon uzante mezan musbutonon. AÅ­ vi povas uzi rulumskalojn (premu Strkl+B por ilin baskuli). La musrulumo ankaÅ­ ebligas vertikalan rulumadon; premu Åœvkl kun musrulumo por rulumi horizontale. - - (Mal)zomado + + (Mal)zomado - - + + La plej facila maniero por zomi estas premi klavojn - kaj + (aÅ­ =). Vi povas ankaÅ­ Strl+mezklaki aÅ­ Strl+dekstrklakipor zomi, Åœvkl+mezklaki aÅ­ Åœvkl+dekstrklaki por malzomi, aÅ­ turni la musrulumon kun Strl. AÅ­, vi povas alklaki la enigareon de zomo (je la dekstra malsupra angulo de dokumentfenestro), entajpi precizan valoron de zomo en % kaj premi enigoklavon. Ekzistas ankaÅ­ ilo de zomo (en ilarstango maldekstre) kiu ebligas (mal)zomi per mustrenoj. - - + + Inkscape ankaÅ­ konservas historion de zomniveloj vi uzis dum ĉi laborseanco. Premu klavon ` por reveni al la antaÅ­a zomnivelo, aÅ­ Åœvkl+` por iri la la sekva. - - Iloj de Inkscape + + Iloj de Inkscape - - + + La vertikala ilarstango je la maldekstra flanko montrigas ilojn de desegnoj kaj redaktoj de Inkscape. En la supra parto de la fenestro, tuj sub la menuo, troviÄas komandostango kun Äeneralaj komandobutonoj kaj la regilostango kun regiloj specifaj pro ĉiu ilo. La statostango ĉe la malsupro de la fenestro vidigas utilajn konsilojn kaj informoj dum via laboro. - - + + Multaj komandoj estas atingeblaj per klavarkurtvojoj. Malfermu Helpo > Klavaro kaj Muso por rigardi la plenan liston. - - Kreado kaj administrado de dokumentoj. + + Kreado kaj administrado de dokumentoj. - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape uzas la SVG (Skalebla Vektora Grafikaĵo) formo por siaj dosieroj. SVG estas malferma normo vaste apogata de grafika programaro. SVG dosieroj baziÄas sur XML kaj povas esti redaktata per iu ajn teksto- aÅ­ XML-redaktilo (krom Inkscape, kompreneble). Krom SVG, Inkscape povas importi kaj eksporti dosierojn en kelkaj aliaj formoj (EPS, PNG). - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Kreado de formoj + + Kreado de formoj - - + + Jam estas tempo por kelkaj plaĉaj formoj! Alklaku la ilon de ortangulo en la ilarkesto (aÅ­ premu F4) kaj klak-trenu, aÅ­ en la nova dokumento aÅ­ tie ĉi: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,24 +177,24 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -204,65 +204,65 @@ them to see how the shape responds. The Controls panel for a shape tool is anoth these controls affect the currently selected shapes (i.e. those that display the handles) and set the default that will apply to newly created shapes. - - + + Por malfari la lastan agon, premu Strkl+Z. (AÅ­, se vi ÅanÄis vian opinion ankoraÅ­foje, vi povas malfari la malfaritan agon per Åœvkl+Strkl+Z.) - - Movi, skali, rotacii + + Movi, skali, rotacii - - + + La plej ofte uzata en Inkscape ilo estas la ilo de elekto. Alklaku la plej supran butonon (kun sago) de la ilarkesto, aÅ­ premu F1 aÅ­ Spacetklavon. Nun vi povas elekti iun ajn objekton de sur la tolo. Alklaku la suban ortangulon. - - - + + + Vi ekvidos ok sago-formajn prenilojn ĉirkaÅ­ la objekto. Nun vi povas: - - - + + + Movu la objekton trenante Äin. (Premu Strkl por limigi movon horizontale aÅ­ vertikale.) - - - + + + Skalu la objekton trenante Äian prenilon. (Premu Strkl por limigi la originalan proporcion inter alto kaj larÄo.) - - + + Nun alklaku la ortangulon ankoraÅ­foje. La preniloj ÅanÄos. Nun vi povas: - - - + + + Rotacii la objekton trenante la verticajn prenilojn. (Premu Strkl por limigi rotacion je 15-gradaj intervaloj. Trenu la krucsignon por pozicii la akson de la rotacio.) - - - + + + @@ -270,8 +270,8 @@ these controls affect the currently selected shapes (i.e. those that display the handles. (Press Ctrl to restrict skewing to 15 degree steps.) - - + + @@ -279,18 +279,18 @@ steps.) (above the canvas) to set exact values for coordinates (X and Y) and size (W and H) of the selection. - - Transformado per kalvoj + + Transformado per kalvoj - - + + Unu el trajtoj de Inkscape, distingata Äin de aliaj vektor-redaktiloj, estas Äia emfazo al uzo de klavkomandoj. Ekzistas apenaÅ­ iu komando kiun oni ne povas plenumi per fulmoklavo, kaj transformado de objektoj ne estas tie escepto. - - + + @@ -302,8 +302,8 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + @@ -317,125 +317,130 @@ zoom). This means that if you zoom in, one Alt+arro nudge on your screen. It is thus possible to position objects with arbitrary precision simply by zooming in or out as needed. - - + + Simile, Alt+> kaj Alt+< skalas elektaĵojn tiel ke la rigardata grandeco ÅanÄos je unu ekrana bildero, kaj Alt+[ kaj Alt+] rotacios tiel, ke la plej ekster-aksa punkto movos je unu ekrana bildero. - - + + Rimarko: Linuksuzantoj povas sperti neatendatajn rezultojn uzante Alt+sagoklavoj kaj kelkaj aliaj klavarkurtvojoj se la fenestro-mastrumilo prilaboras la klav-eventojn antaÅ­ ili atingos Inkscape. Unu el solvoj estas agordi la fenestro-mastrumilon konvene. - - Pluroblaj elektoj + + Pluroblaj elektoj - - + + Vi povas elekti iom ajn objektojn samtempe Åœvkl+alklakante ilin. Vi ankaÅ­ povas mustreni ĉirkaÅ­ objektoj vi volas elekti; Äi nomiÄas rubanda elekto. (La ilo de elekto kreas rubandon dum mustreno de malplena areo; tamen, se vi premos Åœvkl antaÅ­ ektreno, Inkscape kreos la rubandon ĉiam.) Ekzercu elektante la tri objektojn sube: - - - - - + + + + + Nun uzu la rubandon (mustrenante aÅ­ Åœvkl+mustrenante) por elekti la du elipsojn sed ne la ortangulon: - - - - - + + + + + Ĉiu unuopa objekto ene de elekto, vidigas sugeston de elekto — kutime strekitan, ortangulan kadron. La sugestoj plifaciligas distingi kio estas elektita, kaj kio ne. Ekzemple, se vi elektus ambaÅ­ elipsojn kaj la ortangulon, sen la sugestoj vi havus problemon diveni ĉu la elipsoj estas elektitaj ĉu ne. - - + + Åœvkl+alklakante elektitan objekton forigas Äin de la elekto. Elektu la tri objektojn supre kaj uzu Åœvkl+klako por forigi ambaÅ­ elipsojn de la elekto lasante nur la ortangulon elektita. - - + + Premante Esk oni malelektas ĉiujn objektojn. Strkl+A elektas ĉiujn objektojn de la nuna tavolo (se vi ne kreis tavolojn, Äi elektas ĉiujn elementojn de la dokumento). - - Grupigado + + Grupigado - - + + Pluraj objektoj povas esti kombinitaj en grupon. Grupo kondutas kiel unu objekto dum movado kaj transformado. Sube, la tri objektoj maldekstre estas memstaraj; la samaj tri objektoj dekstre estas grupigitaj. Provu mustreni la grupon. - - - - + + + + - - + + Por krei grupon, vi elektu unu aÅ­ pli da objektoj kaj premu Strkl+G. Por malgrupigi unu aÅ­ pli da grupoj, elektu ilin kaj premu Strkl+U. Grupoj povas esti plu grupigataj, same kiel ĉiu alia objekto; tiaj rekursiaj grupoj povas iri Äis arbitra nivelo. Tamen, Strkl+U malgrupigas nur la plej supran grupnivelon de la elekto; vi devos premi Strkl+U ripete se vi volos Äisfunde malgrupigi la grupon. - - + + Vi, tamen, ne nepre devas malgrupigi la grupon, se vi volas redakti objekton en Äi. Simple Strkl+alklaku la objekton kaj Äi iÄos sole elektita kaj redaktebla, aÅ­ Åœvkl+Strkl+alklaku kelkajn objektojn (en aÅ­ ekster iu grupo) por plurobla elekto sen distingo de grupoj. Provu movi aÅ­ transformi la unuopajn objektojn ene de la grupo (supre dekstre) sen ilia malgrupigado, poste malelektu kaj reelektu la grupon normale, por vidi ĉu Äi plu estas grupigita - - Plenigo kaj streko + + Plenigo kaj streko - - + + - Multaj funkcioj de Inkscape estas atingeblaj per dialogujoj. VerÅajne plej simpla maniero kolorigi objekton estas malfermi la dialogujon "Samploj de koloroj" de Videbligu menuo (aÅ­ premu Åœvkl+Strkl+W), elektu objekton kaj alklaku la ekzemplon por Äin kolorigi (ÅanÄi koloron de Äia plenigo). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Pli potenca estas la dialogujo Plenigo kaj Streko atingebla de la menuo Objekto (aÅ­ premu Åœvkl+Strkl+F). Elektu la formon sube kaj malfermu la dialogujon Plenigo kaj Streko. - - - + + + - + En la dialogujo videblas tri langetoj: Plenigo, Koloro de streko kaj Stilo de streko. La langeto Plenigo ebligas ÅanÄi la plenigon (internon) de la elektita(j) objekto(j). Uzante la butonojn troviÄantajn ĉe sub la langeto, vi povas elekti stilon de plenigo, inkluzive neniu koloro (la butono kun X), solida koloro kaj linia kaj radia gradientoj. Por elektita supera formo, vi vidos aktivan (premitan) butonon de solida koloro. - - + + - + Further below, you see a collection of color pickers, each in its own tab: RGB, CMYK, HSL, and Wheel. Perhaps the most convenient is the Wheel @@ -443,53 +448,53 @@ picker, where you can rotate the triangle to choose a hue on the wheel, and then a shade of that hue within the triangle. All color pickers contain a slider to set the alpha (opacity) of the selected object(s). - - + + - + Kiam ajn vi elektas objekton, la kolorÅanÄilo aktualiÄas por vidigi la plenigon kaj strekon uzatajn de Äi (por pluroble elektitaj objektoj, la dialogujo vidigas iliajn mezuman koloron). Ludu kun tiuj ekzemploj aÅ­ kreu la vian: - - - - - - - - - + + + + + + + + + - + Uzante la langeton Koloro de streko, vi povas forigi la strekon (konturon) de la objekto aÅ­ atribui al Äi iun koloron aÅ­ travideblecon: - - - - - - - - - - + + + + + + + + + + - + La lasta langeto, stilo de streko, ebligas atribui larÄon kaj aliajn parametrojn de la streko: - - - - - - - - - + + + + + + + + + - + Fine, anstataÅ­ solida koloro, vi povas uzi gradientojn por plenigo kaj/aÅ­ strekoj: @@ -530,45 +535,45 @@ a shade of that hue within the triangle. All color pickers contain a slider to s - - - - - - - - - - - + + + + + + + + + + + Kiam vi ÅanÄos de solida al gradienta koloro, la novkreita gradiento uzos la antaÅ­an koloron transirantan de solida Äis travidebla. Elektu la ilon de gradiento (Strkl+F1) kaj trenu la prenilojn de gradiento — la kontroliloj konektitaj per linioj difinas direkton kaj longecon de la gradiento. Kiam iu prenilo de gradiento estas elektita (blue emfazita), la dialogujo Plenigo kaj Streko difinas koloron de la prenilo anstataÅ­ de la tuta elektita objekto. - - + + - + AnkoraÅ­ alia konvena maniero ÅanÄi koloron de objekto estas uzo de ilo de kolorprobilo (F7). Simple klaku ie ajn ene de la dokumento kun la ilo, kaj la probita koloro asigniÄos al la plenigo(j) de elektita(j) objekto(j) (Åœvkl+klako asigniÄos la koloron de la streko). - - Multobligado, alliniigado, distribuado + + Multobligado, alliniigado, distribuado - - + + - + Unu el plej oftaj agoj estas multobligado de objektoj (Strkl+D). La multobligaĵo estas metata precize super la originalo kaj estas elektita, por ke vi povu Äin formovi mustrenante aÅ­ per sagoklavoj. Por ekzerci, kreu linion da kopioj de la nigra kvadrato: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -590,192 +595,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-ordiÄo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-ordiÄo - - + + - + - La vorto z-ordiÄo referencas al la staka vido de objektoj sur la desegnaĵo, t.e. al kiu la objekto estas supren kaj kovras aliajn. La du komandoj de la menuo Objekto, Suprentiru Äis la Pinto (la Hejmen klavo) kaj Subentiru Äis la Fundo (la Suben klavo), movos elektitajn objektojn plej supren kaj plej suben en la z-ordiÄo de la nuna tavolo. Du pliaj komandoj, Suprentiru (PÄSup) kaj Subentiru (PÄSub), profundigos la elekton nur je unu Åtupo, t.e. movos Äin sub ne-elektitan objekton laÅ­ z-ordiÄo (gravas nur objektoj kiuj kovras unu la alian; se nenio surmetiÄas la elekton, Suprentiru kaj Subentiru movos la elekton Äis la pinto kaj fundo respektive). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Ekzercu uzi la komandojn inversigante la z-ordiÄon de la objektoj sube, tiel ke la plej maldekstra estu plej surpinte kaj la plej dekstra estu ĉefunde: - - - - - - - - + + + + + + + + - + Tre utila ĉe elekto estas la klavarkurtvojo Tab. Se nenio estas elektita, Äi elektas la plej ĉefundan objekton; kontraÅ­e Äi elektas objekton tuj super la elektita(j) objekto(j) laÅ­ z-ordiÄo. Åœvkl+Tab funkcias inverse, de ĉepinta objekto progresante suben. Ĉar ĉiu objekto kiun kreas estas lokata ĉe la pinto de la stako, premante Åœvkl+Tab sen ia elekto, ebligos oportunan elekton de la objekto vi ĵus kreis. Ekzercu la Tab kaj Åœvkl+Tab klavarkurtvojojn je la stako da elipsoj supre. - - Selecting under and dragging selected + + Selecting under and dragging selected - - + + - + Kion fari se la objekto kiun vi bezonas troviÄas sub alia objekto? Vi eble vidas la suban objekton se la supra estas (parte) travidebla, sed alklakante Äin, vi elektos nur la supran, ne tiun kiun vi volas. - - + + - + Äœuste por tio estas Alt+klako. Unue Alt+klako elektas la plej supran objekton, same kiel normala alklako. Tamen la sekva Alt+klako ĉe la sama loko elektos objekton sub la plej supra; la sekva, la objekton eĉ pli suban, ktp. Tiel, kelkaj sinsekvaj Alt+klakoj trairos, de pinto Äis fundo, la tutan z-ordiÄan stakon da objektoj ĉe la klakpunkto. Kiam la plej suba objekto estas elektita, sekva Alt+klako elektos, kompreneble, denove la plej supran objekton. - - + + - + [Se vi uzas Linukson, povas okazi ke Alt+klako funkcias neatendite. AnstataÅ­e, Äi povas movi la tutan fenestron de Inkscape. Äœi okazas kiam la fenestro-mastrumilo ligis Alt+klakon al alia ago. Por solvi la problemon, vi devas forigi tion en la agordodosiero de la fenestro-mastrumilo, aÅ­ ÅanÄi por uzi la Meta klavon (nomatan ankaÅ­ Vindoza klavo), por ke Inkscape kaj aliaj programoj povu uzi la Alt klavon senprobleme.] - - + + - + Tio belas, sed kiam vi jam elektis la sub-objekton, kion vi povas fari kun Äi? Vi povas uzi klavojn por transformi Äin, kaj vi povas treni la prenilojn. Sed trenado reelektos la plej supran objekton (tiel la klaku-kaj-trenu estas supozita agi — Äi elektas la (plejsupran) objekton sub la muskursoro kaj tiam trenas la elektaĵon). Por igi Inkscape treni tion, kio estas nun elektita sen elekto de io alia, uzu Alt+treno. Tio movos vian elekton sendistige kien vi trenos la muskursoron. - - + + - + Ekzercu Alt+klakadon kaj Alt+trenadon ĉe la du brunaj formoj sub la verda travidebla ortangulo: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Konkludo + + Konkludo - - + + - + - Äœi konkludas la fundamentan lernilon. En Inkscape stas multe pli ol tio, sed per manieroj priskribitajn tie, vi povos krei simplajn sed jam uzeblajn artaĵojn. Por pli altnivelaj informoj, trarigardu la altnivelan kaj aliajn lernilojn en Helpo > Lerniloj. + Äœi konkludas la fundamentan lernilon. En Inkscape stas multe pli ol tio, sed per manieroj priskribitajn tie, vi povos krei simplajn sed jam uzeblajn artaĵojn. Por pli altnivelaj informoj, trarigardu la altnivelan kaj aliajn lernilojn en Helpo > Lerniloj. - + @@ -805,8 +817,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Uzu Strkl+supren sagoklavo por rulumi + + Uzu Strkl+supren sagoklavo por rulumi diff --git a/share/tutorials/tutorial-basic.es.svg b/share/tutorials/tutorial-basic.es.svg index 97eec9966..a379bb96a 100644 --- a/share/tutorials/tutorial-basic.es.svg +++ b/share/tutorials/tutorial-basic.es.svg @@ -36,105 +36,105 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::BÃSICO - - + + Este tutorial demostrará los usos básicos de Inkscape. Este es un documento regular de Inkscape que usted puede ver, editar, copiar, descargar o guardar. - - + + El tutorial Básico cubre la navegación en canvas (pizarra), manejo de documentos, herramientas de formas básicas, técnicas de selección, transformación de objetos por medio del selector, agrupado, configuración de relleno y borde, alineación y orden-z. Para visualizar otros temas más avanzados, ingrese al menú Ayuda. - - Configurando la pizarra + + Configurando la pizarra - - + + Existen varias maneras para configurar la pizarra. Primero intentemos: Ctrl+Flecha Teclas para desplazarse por la pizarra. (Puede intentar esto en este mismo documento) También es posible por medio del arrastre a través del botón intermedio de ratón. O también por medio de las barras de desplazamiento (presione Ctrl+B para visualizarlas o/u ocultarlas). La rueda del ratón también funciona para el desplazamiento de manera vertical; presione Mayus con la rueda para realizar desplazamientos horizontales. - - Acercar y alejar (Zoom) + + Acercar y alejar (Zoom) - - + + La manera más sencilla de para activar el zoom es por medio de las teclas - y + (o =). También puede emplear Ctrl+Click del botón central o Ctrl+Click del botón derecha para acercamiento, Mayus+Click del botón central o Mayus+Click del botón derecho para alejar, o rote la rueda del ratón junto con Ctrl. O puede seleccionar en la parte inferior izquierda el campo de zoom que le permite ingresar el valor del porcentaje % para la visualización, luego presione Enter. Disponemos además de los anteriores métodos, la herramienta Zoom (Ubicada en la barra de Herramientas a la izquierda) la cual permite hacer un zoom alrededor de un aea por medio de un click sostenido alrededor de ella. - - + + Inkscape también conserva un historial de los niveles de zoom que ha usado en el trabajo, en la última sesión. Presione la tecla ` para ir al zoom previo o Mayus+` para ir al siguiente. - - Herramientas del Inkscape + + Herramientas del Inkscape - - + + La barra vertical de herramientas sobre la izquierda muestra las herramientas de dibujo y edición de Inkscape. En la parte superior de la ventana, debajo del menú;, está la Barra de comandos con los botones de control general y la barra de contro, de herramientas con los controles que son especiales para cada herramienta. La barra de estado en la parte superior de la ventana mostrará consejos útiles y mensajes de como trabaja usted. - - + + Algunas operaciones están disponibles a través de atajos de teclado. Abra Ayuda > Teclas y ratón para observar la referencia completa. - - Creando y Administrando documentos + + Creando y Administrando documentos - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape usa el formato SVG (Scalable Vector Graphics/Gráficos de Vectores Escalables) para estos archivos. SVG es un estandar abierto extensamente soportado por software gráficos. Los archivos SVG están basados en XML y pueden ser editados con cualquier editor de XML (aparte de Inkscape, por supuesto). Además de SVG, Inkscape puede importar y exportar muchos otros formatos (EPS, PNG) - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Creando Formas + + Creando Formas - - + + Es hora para algunas formas fantásticas! Haga Click sobre la herramienta Rectángulo (o presione F4) y haga click y arrastre, o en un nuevo documento o aquí: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Estas herramientas son colectivamente conocidas como herramientas de formas. Cada forma que cree muestran uno o más manejadores en forma de diamante; intente arrastrándolos para observar como responden las formas. El panel de control para una herramienta de forma es otra manera para transformar una forma; estos controles afectan a las formas actualmente seleecionadas (i.e. aquellas que muestren los manejadores) y configure el por defecto que aplicará a las formas recien creadas. - - + + Para deshacer su última acción, presione Ctrl+Z. (O, si cambia de parecer, puede rehacer la acción deshecha mediante Mayus+Ctrl+Z.) - - Moviendo, Escalando, Rotando + + Moviendo, Escalando, Rotando - - + + La herramienta más utilizada en Inkscape es el Selector. Click en el botón más superior (con la forma de cursor) sobre la barra de herramientas, o presione F1 o Barra Espaceadora. Ahora puede seleccionar cualquier objeto en la pizarra. Click sobre el rectángulo de más abajo. - - - + + + Usted podrá observar que ocho manejadores en forma de flecha aparecen alrededor del objeto. Ahora puede: - - - + + + Mover los objetos al arrastralos. (Presione Ctrl para restringir movimientos a horizontal y vertical.) - - - + + + Escalar los objetos mediante el arrastrado de cualquier manejador. (Presione Ctrl para preservar el radio de alto/ancho original.) - - + + Ahora click en el rectángulo de nuevo. Los manejadores cambian. Ahora puede: - - - + + + Rotar los objetos mediante el arrastrado de los manejadores de las esquinas. (Presione Ctrl para restringir la rotación a pasos de 15 grados. Arrastre la marca en forma de cruz para la posición del eje de rotación.) - - - + + + Inclinar (esquilar) los objetos mediante el arrastre de los manejadores no-esquinas. (Presione Ctrl para restringir inclinaciones a pasos de 15 grados.) - - + + Mientras use el Selector, también podrá usar los campos de entradas numéricos en la barra de control (Sobre la pizarra) para configurar valores exactos para cordenadas (X y Y) y tamaño (W y H) de la selección. - - Transformación por medio del teclado + + Transformación por medio del teclado - - + + Una de las características de Inkscape que lo diferencian de otros muchos editores vectoriales es su énfasis en la accesibilidad por teclado. Existe dificilmente algún comando o acción que sea imposible realizar por teclado y la transformación no es la excepción. - - + + @@ -294,180 +294,185 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + Más sin embargo considere como el más útil latransformaciones tamaño-pixel, invocada mediante el uso de Alt con la tecla de tranformación. Por ejemplo, Alt+flechas moverá la selección 1 pixel en el zoom actual (i.e. por 1 pixel de pantalla, no se confunda con la unidad px la cual es una uidad de medida SVG independiente del zoom). Esto significa que si usted amplia, un Alt+flecha resultará un movimiento absolutamente pequeño el cual aún se observa como si empujase un pixel sobre su pantalla. Así esto es posible para posicionar objetos con presición arbitaria simplemente mediante un acercamiento o alejamiento como lo requiera. - - + + Igualmente, Alt+> y Alt+< escalan selecciones haciendola visibles en un tamaño de un pixel de pantalla, y Alt+[ y Alt+] lo rotan de la manera más alejada del punto central movido mediante un pixel de pantalla. - - + + Note: Linux users may not get the expected results with the Alt+arrow and a few other key combinations if their Window Manager catches those key events before they reach the inkscape application. One solution would be to change the WM's configuration accordingly. - - Selecciones Multiples + + Selecciones Multiples - - + + Puede seleccionar cualquier número de objetos simultáneamente mediante Mayus+clicksobre los objetos deseados a selaccionar. O, puede arrastrar alrededor de los objetos que requiere seleccionar; esto es llamado Selección elástica. (El selector crea selcciones elásticas cuando se arrastra a desde un espacio vacio; sin embargo, si presiona Mayus antes de iniciar el arrastrado, Inkscape siempre creará la selección elástica.) Practique mediante la sección de todas las tres formas a continuación: - - - - - + + + + + Ahora, utilice selecciones elásticas (mediante arrastrado o Mayus+arrastrar) para seleccionar las dos elipses pero no el rectángulo: - - - - - + + + + + Cada objeto individual dentro de una selección muestra una señal de selección — por defecto, un marco rectángular. Estos marcos hacen más sencillo el observar que está selccionado y que no loo está. Por ejemplo, si selecciona ambas elipses y el rectágulo, sin los marcos le sería muy difícil adivinar cual de las elipses están seleccionadas y cuales no. - - + + Mayus+click sobre un objeto selccionado lo excluye de la selección. Seleccione los tres objetos de a continuación, después emplee Mayus+click para excluir ambas elipses de la selección, dejando solo seleccionado el rectángulo. - - + + Presionando Esc deseleciona cualquier objeto selccionado. Ctrl+A selecciona todos los objetos en la capa actual (si no ha creado capas, esto es lo mismo que todos los objetos en el documento). - - Agrupando + + Agrupando - - + + Muchos objetos pueden ser combinados en un grupo. Un grupo se comporta como un objeto sencillo cuando usted lo arrastra o lo transforma. adelante, los tres objetos sobre la izquierda son independientes; los mismo tres objetos sobre la derecha son están agrupadas. Intente arrastrar el grupo. - - - - + + + + - - + + Para crear un grupo, seleccione uno o más objetos y presiones Ctrl+G. Para desagrupar uno o más grupos, seleccionélos y presione Ctrl+U. Los mismo grupos pueden ser agrupados, así como cualquier otro objeto; dichos grupos recursivos pueden ir atras en una profundidad arbitraria. Sin embargo, Ctrl+U solo desagrupa el nivel superior de agrupación en una selección; necesitará presionar Ctrl+U repetidamente si quiere desagrupar completamente un grupo profundo dentro de un grupo. - - + + No tiene necesariamente que desagrupar, sin embargo, si desea editar un objeto dentro de un grupo. Solo Ctrl+click sobre el objeto y este será seleccionado y editable solo, o Mayus+Ctrl+click sobre varios objetos (dentro o afuera de cualquier grupo) por múltiples selecciones sea cual sea la agrupación. Intente mover o transformar las formas individuales en el grupo (adelante a la derecha) sin desagrupar, entonces deseleccione y seleccione el grupo normalmente para observar que continua aún agrupado. - - Relleno y borde + + Relleno y borde - - + + - Algunas funciones de Inkscape están disponibles vía dialogos. Probablemente la forma más sencilla de pintar un objeto de algún color es abrir el dialogo -- desde el menú de Objetos, selccione un objeto y click en un -- para pintarlo (cambia su color de relleno). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + Es más poderoso el dialogo de Relleno y Borde (Mayus+Ctrl+F). Seleccione la forma de adelante y abra el dialogo de Relleno y Borde. - - - + + + Podrá observar que el dialogo posee tres pestañas: Relleno, Color de trazo y Estilo de trazo. La pestaña Relleno le permite editar el relleno (interior) del objeto(s) seleccionado(s). Usando el botón más abajo de la pestañ puede seleccionar los tipos de relleno, incluyendo sin relleno (el botón con la X), color uniforme, así como gradientes lineales o radiales. Para las siguientes formas, el botón de relleno uniforme será activado. - - + + Más abajo, puede observar una colección de selectores de color, cada uno esta se encuentra en su propia pestaña: RGB, CMYK, HSL y Rueda. Considere el Selector de Rueda , donde puede rotar el triángulo para escoger un matiz en la rueda, y después seleccione una sombra que es el matiz del triángulo. Todos los selectores de color contienen un desplazador para configurar el alfa (opacidad) de el/los objeto(s) seleccionado(s). - - + + Cuando selecciona un objeto, el selector de color es actualizado para mostrar su relleno y borde actual (para selecciones de múltiples objetos, el dialogo muestra su color promedio). Trabaje con estos ejemplos o cree sus propios: - - - - - - - - - + + + + + + + + + Usando la pestaña color de borde, remueva el borde (reborde) del objeto, o asignele cualquier color o transparencia: - - - - - - - - - - + + + + + + + + + + La última pestaña Estilo de borde, le permite configurar el grosor y otros parámetros del borde: - - - - - - - - - + + + + + + + + + @@ -510,45 +515,45 @@ by 90 degrees. - - - - - - - - - + + + + + + + + + Cuando cambia de color uniforme a gradiente, el nuevo gradiente creado usa el color uniforme previo, presentandolo de opaco a transparente. CAmbie a la herramienta Gradiente (Ctrl+F1) para arrastrar el manejador gradiente — los controles conectads por líneas que defiene la dirección y longitud del gradiente. Cuando alguno de los manejadores de gradiente es seleccionado (Azul claro), el dialogo de relleno y el borde configura el color del manejador en vez de todo el color del objeto seleccionado. - - + + Otas manera conveniente para cambiar el color de un objeto es usando la herramienta Balde??? (F7). Solo haga click dentro del dibujo con la herramienta y el color seleccionado será asignado al relleno del objeto seleccionado (Mayus+click asignará el color de borde). - - Duplicado, Alineación, Distribución + + Duplicado, Alineación, Distribución - - + + Una de las operaciones más comunes es el duplicar un objeto (Ctrl+D). El duplicado es colocadi exactamente debajo del original y es seleccionado, así, así se le posibilita el arrastrar mediante el ratón o las teclas de flechas. Para practicar, intente llenar la línea con copias de estos cuadrados negros: - - - + + + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -570,98 +575,105 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - orden-Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + orden-Z - - + + - El término orden-z se refiere al orden de apilado de los objetosen un gráfico, i.e dichos objetos están en la parte superior y son más oscuros que el resto. Los dos comandos en el menú Objetos, Llevar al Frente, (la tecla Inicio) y Llevar al Fondo (la tecla Fin), moverá sus objetos seleccionados al nivel superior o al fondo de la capa del orden-z actual. Otros dos comandos, Arriba (PgUp) y Abajo (PgDn), podrán hundir o emerger la selección un sólo paso, i.e. mueve el último objeto no seleccionado en el orden-z (sólo cuente objetos seleccionados; si nada superpone la selección, muévalo Arriba o Abajo hacia la parte superior o el fondo correspondiente). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + Practique usando estos comandos mediante el revertimiento del orden-z de los objetos de adelante, de esta manera que la elipse más a la izquierda está en el nivel superior y la elipse de más a la derecha está en el fondo: - - - - - - - - + + + + + + + + Una atajo de selección muy útil es la tecla Tab. Si no hay nada seleccionado, este selecciona el objeto de más al fondo; de otra forma este selecciona el objeto debajo del objeto(s) seleccionado(s) en orden-z. Mayus+Tab trabaja a la inversa, iniciando desde el objeto en el nivel más superior y procede con los siguientes. LLos objetos que crea son agregados al nivel superior de la pila, presionando Mayus+Tab con nada seleccionado convenientemente seleccionará los últimos objetos que usted ha creado. Practica con las teclas Tab y Mayus+Tab en la pila de elipse de abajo. - - Seleccionando debajo y arrastrando seleccionados + + Seleccionando debajo y arrastrando seleccionados - - + + ¿Qué hacer si el objeto que requiere está oculto tras otro objeto? Usted podrí aún observar el objeto del fondo si el del nivel superior está (parciamente) transparente, pero dando click en el selecionará el objeto superior, no el que usted requiere. - - + + Esto es para lo que Alt+click está hecho. Primero Alt+click selecciona el objeto superior como un sencillo click. sin embargo, el siguiente Alt+click en el mismo punto seleccionará el objeto de abajo del superior; el siguiente, el objeto bajo siguiente, etc. Muchos Alt+clicks en una línea hará un ciclo, superior-al-fondo, a través de la pila de objetos en orden-z en el punto del click. Cuando el objeto del fondo es alcanzado, el siguiente Alt+click naturalmente, seleccionará el objeto más superior. - - + + @@ -674,95 +686,95 @@ either turn it off, or map it to use the Meta key (aka Windows key), so Inkscape and other applications may use the Alt key freely.] - - + + Esto es bueno, pero una vez qe usted selecciona un objeto bajo-la-superficie, ¿Qué puede hacer usted con el?. Puede usar teclas para transformarlo y puede arrastrar los manejadores selección. Sin embargo, arrastrando sobre el objeto mismo deseleccionará el objeto superior de nuevo (esto es como el click-y-arrastrado está diseñado para trabajar — este selecciona el objeto (superior) bajo el primer cursor, entonces arrastre la aselección). Para indicarle a Inkscape el arrastrar que está seleccionado ahora sin seleccionar nada más, use Alt+arrastrar. Esto moverá la selección sin importar donde arrastra usted el ratón. - - + + Practique Alt+click y Alt+drag sobre las dos formas cafés debajo del rectángulo verde transparente: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Conclusión + + Conclusión - - + + - Así concluye el tutorial básico. Hay mucho más en el Inkscape, más sin embargo las técnicas descritas aquí ya le permitirán crear gráficos simples muy útiles. Para conceptos y utilidades más complicadas, vaya a través del tutorial Avanzado en Ayuda > Tutoriales. + Así concluye el tutorial básico. Hay mucho más en el Inkscape, más sin embargo las técnicas descritas aquí ya le permitirán crear gráficos simples muy útiles. Para conceptos y utilidades más complicadas, vaya a través del tutorial Avanzado en Ayuda > Tutoriales. - + @@ -792,8 +804,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.eu.svg b/share/tutorials/tutorial-basic.eu.svg index 758ba8952..232281024 100644 --- a/share/tutorials/tutorial-basic.eu.svg +++ b/share/tutorials/tutorial-basic.eu.svg @@ -36,105 +36,105 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::OINARRIZKOA - - + + Tutorial honek Inskcape-ri buruzko oinarrizko ezagutzak aurkezten ditu. Inkscape-ko dokumentu normal bat da, ireki, editatu, kopiatu edo gorde dezakezuna. - - + + Oinarrizko tutorialak oihal nabigazioa, dokumentuen kudeaketa, formen tresnen oinarriak, hautapen teknikak, hautatzailearekin objektuen eraldaketa, elkarketak, betetzea eta trazatzea, lerrokatzea eta z-ordena lantzen ditu. Gai aurreratuagoetarako Laguntza menuan dauden beste tutorialak ikusi. - - Oihalean zehar mugitzen + + Oihalean zehar mugitzen - - + + Dokumentuaren oihalean zehar mugitzeko modu asko daude. Froga itzazu Ktrl+geziak teklak teklatuarekin mugitzeko. (Saiatu orain dokumentu honetan beherantz mugitzen.) Saguaren erdiko botoia erabili dezakezu baita ere. Korritze barrak ere erabil ditzakezu (sakatu Ktrl+B hauek ikusi edo ezkutatzeko). Saguaren gurpila ere erabil daiteke bertikalki mugitzeko; sakatu Shift eta gurpila biratu horizontalki mugitzeko. - - Hurbiltzen eta urruntzen + + Hurbiltzen eta urruntzen - - + + Zoom egiteko modu errazena - eta + (edo =) teklak erabiltzea da. Ktrl+erdiko botoia edo Ktrl+eskuineko botoia hurbiltzeko, Shift+erdiko botoia edo Shift+eskuineko botoia urruntzeko erabil ditzakezu baita ere, edo saguaren gurpila biratu Ktrl-ekin. Bestela ere, zoom-a zehazteko eremuan klik egin dezakezu (dokumentuaren leihoko eskuin-azpialdean), balio zehatz bat sartu ehunekotan eta Enter sakatu. Zoom tresna ere badugu (ezkerraldeko tresna barran) zonalde batera hurbiltzea ahalbidetzen dizuna bere inguruan arrastatuz. - - + + Inkscape-k saio honetan erabili dituzun zoom mailen historia ere gordetzen du. Sakatu ` tekla aurreko zoom-era joateko, edo Shift+` hurrengora joateko. - - Inkscape tresnak + + Inkscape tresnak - - + + Ezkerrean dagoen tresna-barra bertikalak Inkscape-k dituen marrazketa eta edizio tresnak erakusten ditu. Leihoaren goialdean, menuaren azpian, Komando-barra dago, komando botoi orokorrekin. Baita Tresna-kontrolen panela, tresna konkretu bakoitza kontrolatzeko botoi ezberdinekin. Leihoaren azpialdean dagoen Egoera barrak aholku eta mezu erabilgarriak erakutsiko dizkizu lana aurreratu ahala. - - + + Teklatuko lasterbideen bidez ekintza asko burutu daitezke. Erreferentzia osoa ikusteko ireki Laguntza > Teklen eta saguaren erreferentzia. - - Dokumentuak sortzen eta maneiatzen + + Dokumentuak sortzen eta maneiatzen - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape-k SVG (Scalable Vector Graphics) formatua erabiltzen du bere fitxategientzako. SVG estandar irekia da, software grafiko askok landu dezaketena. SVG fitxategiak XMLn oinarrituta daude eta edozein testu edo XML editoreekin aldatu daiteke (Inkscape-z aparte, noski). SVGz aparte, Inkscape-k beste formatu asko inportatu eta esportatu ditzake (EPS, PNG). - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Formak sortzen + + Formak sortzen - - + + Forma eder batzuentzako garaia! Klikatu tresna barran dagoen Laukizuzen tresnan (edo F4 sakatu). Klikatu eta arrastatu, bai dokumentu berri batean bai hementxe bertan: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Tresna guzti hauei formen tresnak deritzo. Sortzen duzun forma bakoitzak diamante itxurako heldulekuak erakusten ditu; saiatu hauek arrastatzen formak nola erantzuten duen ikusteko. Forma tresna baten kontrol-panela formaren itxura fintzeko beste modu bat da; kontrol hauek une honetan aukeratuta dagoen formari eragiten dio (heldulekuak erakusten dituena) eta defektuzko balioak ezartzen ditu sortzen diren forma berrientzako. - - + + Zure azken ekintza desegiteko, Ktrl+Z sakatu. (Bestela, iritziz berriro aldatuz gero, desegindakoa berregin dezakezu Shift+Ktrl+Z sakatuz.) - - Mugitzen, eskalatzen, biratzen + + Mugitzen, eskalatzen, biratzen - - + + Inkscape-n gehien erabiltzen den tresna Hautatzailea da. Sakatu tresna-barraren lehenbiziko botoia (gezia duena), edo sakatu F1 edo Zuriunea. Oihalean edozein objektu aukera dezakezu orain. Sakatu azpiko laukizuzenean. - - - + + + Objektuaren inguruan zortzi helduleku agertuko dira, gezi formakoak. Orain zera egin dezakezu: - - - + + + Objektua mugitu arrastatuz. (Sakatu Ktrl mugimendua horizontalera edo bertikalera murrizteko.) - - - + + + Objektua eskalatu edozein heldulekutik arrastatuz. (Sakatu Ktrl altuera/zabalera erlazio originala mantentzeko.) - - + + Laukizuzenean berriro klikatu. Heldulekuak aldatzen dira. Orain zera egin dezakezu: - - - + + + Objektua biratu erpinetako heldulekuak arrastatuz. (Sakatu Ktrl biraketa 15 graduetako pausuetara mugatzeko. Gurutze marka arrastatu biraketaren zentroa zehazteko.) - - - + + + Objektua okertu (zeihartu) erpinetan ez dauden heldulekuetatik arrastatuz. (Sakatu Ktrl okertzea 15 graduetako pausuetan mugatzeko.) - - + + Hautatzailearekin gaudela, Kontrol-barran (oihalaren gainean) dauden zenbakizko kontrolak erabil daitezke aukeraketaren koordenatu (X eta Y) edo tamaina (A eta Z) zehatzak adierazteko. - - Teklekin itxuraldatuz + + Teklekin itxuraldatuz - - + + Inkscape beste editore bektorialetatik bereizten duen ezaugarrietariko bat teklatuaren atzigarritasunean jartzen duen enfasia da. Zaila izango da teklatuarekin egin ezin daitekeen komando edo ekintzaren bat topatzea. Objektuak transformatzea ez da salbuespen bat. - - + + @@ -294,180 +294,185 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + Hala ere, erabilgarrienak Alt eta transformazio teklen bidez egiten diren pixel-tamainako transformazioak izan daitezke. Adibidez, Alt+geziek aukeraketa pixel batean mugituko dute uneko zoomean (hau da, pantailako pixel 1, ez nahastu SVGk erabiltzen duen px luzera unitatearekin, zoomarekin erlaziorik ez duena). Honek esan nahi du zoom eginez gero, Alt+gezi batek mugimendu absolutu txikiago bat burutuko duela, pantailan pixel bakar bateko mugimendua dirudien arren. Hau dela eta objektuak zehaztasun arbitrarioarekin koka daitezke zoomaren bidez behar beste hurbilduz edo urrunduz. - - + + Modu berean, Alt+> eta Alt+< aukeraketa eskalatzen dute antzematen zaion tamaina pixel batean aldatzen delarik. Alt+[ eta Alt+] aukeraketa biratzen dute zentrotik urrunen dagoen puntua pixel batean mugituz. - - + + Oharra: Linux-eko erabiltzaileek espero ez diren emaitzak lor ditzakete Alt+gezia eta bestelako lasterbideak erabiltzean, Leiho Kudeatzaileak erabiltzen dituelako. Leiho kudeatzailearen lasterbideak aldatzea izan liteke soluzio bat. - - Aukeraketa anitzak + + Aukeraketa anitzak - - + + Shift+click erabiliz nahi beste objektu batera aukera daitezke. Baita, aukeratu nahi dituzun objektuen inguruan arrastatu dezakezu; honi liga aukeraketa deritzo. (Hautatzaileak liga sortzen du toki huts batetik arrastatzean; dena dela, Shift sakatzen baduzu arrastatzen hasi baino lehen, Inkscape-k beti sortuko du liga.) Praktikatu azpiko hiru formak aukeratuz: - - - - - + + + + + Orain, liga erabili (arrastatuz edo Shift+arrastatuz) bi elipseak aukeratzeko laukizuzena aukeratu gabe: - - - - - + + + + + Aukeraketa baten objektu bakoitzak aukeraketaren aztarna bat erakusten du — marratxodun marko laukizuzen bat, berez. Aztarna hauek erraza egiten dute begirada batean ikustea zer dagoen aukeratuta eta zer ez. Adibidez, bi elipseak eta laukizuzena aukeratuta, aztarnarik gabe zaila izango litzateke elipseak aukeratuta dauden ala ez jakitea. - - + + Aukeratutako objektu batean Shift+klikatuz aukeraketatik kentzen da. Aukeratu goiko hiru objektuak eta Shift+klik erabili bi elipseak aukeraketatik ateratzeko, laukizuzena bakarrik utziz. - - + + Esc sakatzean aukeratutako objektuak ezaukeratzen dira. Ktrl+Ak uneko geruzan dauden objektu guztiak aukeratzen ditu (geruzarik sortu ez baduzu, dokumentuko objektu guztiak aukeratzea bezala da). - - Taldekatzen + + Taldekatzen - - + + Objektu ezberdinak talde batean sar daitezke. Talde bat objektu bakar bat bezala erantzuten du arrastatu edo eraldatzerakoan. Azpian, ezkerreko hiru objektuak independenteak dira; eskuineko hirurak taldekatuta daude. Saiatu taldea mugitzen. - - - - + + + + - - + + Talde bat sortzeko, objektu bat edo gehiago aukeratu eta Ktrl+G sakatu. Talde bat edo gehiago banatzeko, berauek aukeratu eta Ktrl+U sakatu. Taldeen taldeak egin daitezke, beste edozein objektu bezala; taldekatze errekurtsibo honek behar beste aldiz burutu daiteke. Hala ere, Ktrl+Uk maila altueneko taldea bakarrik bananduko du; Ktrl+U maiz sakatu beharko duzu taldekatze sakonak banatzeko. - - + + Hala ere, talde bateko objektu bat editatzeko ez duzu zertan taldea banandu behar. Nahikoa da objektu horri Ktrl+klik egitea bera bakarrik aukeratu eta editatu ahal izateko.Shift+Ktrl+klik bidez objektu anitz aukera daitezke (taldekatuta egon ala ez) dauden taldea kontutan hartu gabe. Saiatu taldeko forma bakanak mugitu edo itxuraldatzen (goi-eskuinaldean) taldea banandu gabe. Ondoren guztia ezaukeratu eta taldea aukeratu banandu ez dela egiaztatzeko. - - Betetzea eta trazatzea + + Betetzea eta trazatzea - - + + - Inkscape-n funtzio asko dialogoen bidez eskuragarri daude. Ziur aski objektu bat koloreren batekin betetzeko modu errazena Ikusi menuko Kolore-laginak dialogoa ireki, objektu bat aukeratu eta kolore lagin batean klikatzea izango da (bere betetze kolorea aldatuz). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + Objektua menuko Bete eta trazatu dialogoa ahaltsuagoa da(Shift+Ktrl+F). Aukeratu azpiko forma eta Bete eta trazatu dialogoa ireki. - - - + + + Dialogoak hiru fitxa dituela ikusiko duzu: Bete, Trazuaren pintura eta Trazu estiloa. Aukeratutako objektuen barnealdea editatzeko Bete fitxa erabiltzen da. Fitxaren azpian dauden botoiekin betetze modua aukera dezakezu: betetzerik ez (Xa duen botoia), kolore laua eta gradiente lineal edo erradialak. Goiko forman kolore lauarekin betetzea markatuta egongo da. - - + + Botoien azpian kolore hautatzaileen bilduma bat ikus dezakezu, bakoitza bere fitxan: GBU, CMHB, ÑSA, eta Gurpila. Erosoena Gurpila izan liteke, hirukia biratu dezakezu gurpilean ñabardura bat aukeratzeko, ondoren iluntasuna aukeratuz ñabardura horretarako hirukiaren barnean. Kolore hautatzaile guztiek graduatzaile bat dute objektuen alfa (opakutasuna) zehazteko. - - + + Objektu bat aukeratzen duzun bakoitzean kolore hautatzailea eguneratzen da uneko betetze eta trazatzea erakutsiz (objektu anitz aukeratzerakoan, dialogoak bere batezbesteko kolorea erakutsiko du). Frogatu adibide hauekin edo propioak sortu: - - - - - - - - - + + + + + + + + + Trazuaren pintura fitxa erabiliz, objektuaren trazua (ertza) ezabatu dezakezu, baita edozein kolore edo gardentasun esleitu ere: - - - - - - - - - - + + + + + + + + + + Azkeneko fitxa, Trazu-estiloa, trazuaren lodiera eta beste parametro batzuk zehazteko balio du: - - - - - - - - - + + + + + + + + + @@ -510,45 +515,45 @@ by 90 degrees. - - - - - - - - - + + + + + + + + + Kolore lau batetik gradiente batera pasatzean, gradiente berriak aurreko kolore laua erabiltzen du, opakutasunetik gardentasunera pasaz. Gradiente tresnara pasa (Ktrl+F1) eta gradienteen heldulekuak arrastatu — gradienteen norabide eta luzera definitzen duten kontrolak, lerroen bidez lotuak. Gradienteen heldulekuren bat hautatzean (urdinez nabarmenduta), Bete eta trazatu dialogoak helduleku horren kolorea zehazten du objektu osoarena zehaztu ordez. - - + + Objektu baten kolorea aldatzeko beste tresna erabilgarri bat Iraultzeko tresna da (F7). Tresna honekin klik egin marrazkiaren edozein tokitan, eta aukeratutako kolorea erabiliko da objektua betetzeko. (Shift+klik trazuaren kolorea aldatzeko). - - Bikoizketa, lerrokatzea, banatzea + + Bikoizketa, lerrokatzea, banatzea - - + + Askotan burutzen den eragiketa bat objektu baten bikoizketa (Ktrl+D) da. Kopia hautatuta eta originalaren gainean kokatzen da, sagu edo teklekin mugitu dezakezularik. Praktikatzeko, saiatu lerroa osatzen karratu beltzaren kopiekin: - - - + + + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -570,192 +575,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-ordena + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-ordena - - + + - z-ordena terminoak objektuak marrazkian pilatzeko ordena adierazten du, hau da, zeintzuk dauden goian azpikoak ezkutatuz. Objektuak menuko Eraman goraino (Hasi tekla) eta Eraman Beheraino ( Amaiera tekla) komandoek, aukeratutako objektuak uneko geruzaren z-ordenan lehenengoak edo azkenengoak jarriko dituzte. Beste bi komando, Goratu (OrrGor) eta Beheratu (OrrBeh), aukeraketa maila batean bakarrik igo edo jaitsiko dute, hau da, z-ordenan aukeratu gabeko objektu baten aurrean ala atzean jarriz. (aukeraketarekin teilakatzen diren objektuak kontutan hartzen dira bakarrik; teilakatzen denik ez badago Goratu eta Beheratu goraino edo beheraino mugituko dute). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Komando hauek proba itzazu azpiko objektuen z-ordena alderantzikatzeko, ezkerreko elipsea goian eta eskuinekoa behean gelditu arte. - - - - - - - - + + + + + + + + - + Tabuladorea tekla aukeraketak egiteko lasterbide erabilgarria da. Hautapenik ez badago beheragoen dagoen objektua aukeratuko du. Bestela z-ordenan aukeratutako objektuen gainean dagoen objektua aukeratuko du. Shift+Tabuladoreak alderantzikoa egiten du, goien dagoen objektutik hasi eta beherantz joanez. Sortzen dituzun objektuak besteen gainean jartzen direnez, Shift+Tabuladorea sakatuz sortu duzun azken objektua behar bezala aukeratuko du. Froga itzazu Tabuladorea eta Shift+Tabuladorea teklak goiko elipseen pilan. - - Azpikoa hautatu eta hautapena arrastatuz + + Azpikoa hautatu eta hautapena arrastatuz - - + + - + Behar duzun objektua beste baten azpian baldin badago zer egin? Goiko objektuak gardentasuna badu baliteke azpikoa ikustea, baina bere gainean klikatzean goikoa hautatuko da, ez zuk nahi zenuena. - - + + - + Honetarako Alt+klik dago. Lehenbiziko Alt+klikak goiko objektua aukeratzen du klik arruntak bezala. Hala ere, toki berean behin eta berriz Alt+klik eginez gero beherago dauden objektuak hautatzen joango dira. Honela, hainbat Alt+kliks jarraian eginez gero, klikatutako puntuan dauden objektu guztiak hautatzen joango dira, z-ordenan goitik behera. Azkeneko objektura heltzean, hurrengo Alt+klikak, naturalki, lehengo objektua hautatuko du, berriz ere. - - + + - + [Linux erabiltzen bazaude, Alt+klick ezer egiten ez duela antzeman dezakezu. Inkscape-ko leiho osoa mugitzen dela gerta daiteke. Zure leiho kudeatzaileak Alt+Klik beste ekintza baterako erreserbatuta duelako da. Hau konpontzeko leiho kudeatzailea konfiguratu, bai lasterbidea aldatuz, bai Meta tekla ("Windows" tekla) Alt teklaren ordez adieraziz, Inkscape eta beste aplikazioak Alt tekla trabarik gabe erabil dezaten.] - - + + - + Ongi, baina zer egin daiteke behin azpiko objekturen bat hautatuta dagoenean? Transformazioak egiteko teklak erabil ditzakezu, eta heldulekuak mugi ditzakezu. Hala ere, objektua arrastatzen saiatzerakoan, hautapena goiko objektura pasako da berriro ere (klik-eta-arrastatzea horrela diseinatuta dagoelako — lehenbizi kurtsorearen azpian dagoen (goiko) objektua hautatzen du, ondoren hautapena arrastatuz). Inkscape-ri esateko orain hautatuta dagoena arrastatzeko, beste ezer hautatu gabe, Alt+arrastatu erabili. Honek oraingo hautapena mugituko du sagua edozein tokitan egonda ere. - - + + - + Frogatu Alt+klik eta Alt+arrastatu laukizuzen berde gardenaren azpiko bi forma marroiekin: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Ondorioak + + Ondorioak - - + + - + - Honek oinarrizko tutorialari amaiera ematen dio. Inkscape-n hau baino askoz gehiago dago, baina hemen azaldu diren teknikekin irudi sinple baina erabilgarriak sortzeko gai izango zara jadanik. Gauza zailagoentzako jarraitu hurrengo tutorialekin Laguntza > Tutorialak + Honek oinarrizko tutorialari amaiera ematen dio. Inkscape-n hau baino askoz gehiago dago, baina hemen azaldu diren teknikekin irudi sinple baina erabilgarriak sortzeko gai izango zara jadanik. Gauza zailagoentzako jarraitu hurrengo tutorialekin Laguntza > Tutorialak - + @@ -785,8 +797,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.fa.svg b/share/tutorials/tutorial-basic.fa.svg index 1ac2ac61d..3720629ff 100644 --- a/share/tutorials/tutorial-basic.fa.svg +++ b/share/tutorials/tutorial-basic.fa.svg @@ -36,133 +36,133 @@ - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید - + ::اصول ابتدایی - - + + این آموزش گام به گام قرار است اصول Ùˆ Ù…ÙØ§Ù‡ÛŒÙ… پایه‌ای کار با Inkscape را آموزش دهد. یک ÙØ§ÛŒÙ„ عادی Inkscape را می‌توانید با Ú©Ù…Ú© این برنامه ببینید، ویرایش کنید، Ú©Ù¾ÛŒ کرده Ùˆ یا ذخیره کنید. - - + + در اصول Ùˆ Ù…ÙØ§Ù‡ÛŒÙ… پایه‌ای کار با InkscapeØŒ مباحث پیمایش (اسکرول) ØµÙØ­Ù‡ØŒ مدیریت ÙØ§ÛŒÙ„‌های InkscapeØŒ اصول اولیه‌ی کار با اَشکال، تکنیک‌های انتخاب کردن، نحوه‌ی تغییر Ø´Ú©Ù„ دادن اشیاء با selectorØŒ گروه‌بندی، تنظیم رنگ Ùˆ خط حاشیه، مرتب کردن اشیاء در ØµÙØ­Ù‡ Ùˆ z-order بررسی خواهند شد. - - پیمایش ØµÙØ­Ù‡ + + پیمایش ØµÙØ­Ù‡ - - + + راه‌های زیادی برای پیمایش (اسکرول) ØµÙØ­Ù‡â€Œ وجود دارد. برای اسکرول به Ú©Ù…Ú© ØµÙØ­Ù‡ کلید از Ctrl+کلید‌های جهت‌دار Ø§Ø³ØªÙØ§Ø¯Ù‡ می‌شود. (همین الان، از این کلید‌ها برای اسکرول کردن ØµÙØ­Ù‡ به سمت پایین Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید.) همچنین می‌توانید ØµÙØ­Ù‡ را به Ú©Ù…Ú© کلید وسط ماوس درگ کنید. یا، از نوار‌های پیمایش Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید (Ctrl+B این نوار‌ها را مخÙÛŒ Ùˆ مرئی می‌کند). برای پیمایش عمودی چرخک ماوس را به کار بگیرید با نگهداشتن کلید Shift در حین چرخاندن چرخک، پیمایش اÙÙ‚ÛŒ حاصل می‌شود. - - زوم کردن یا برگشت از زوم (zoom in or out) + + زوم کردن یا برگشت از زوم (zoom in or out) - - + + آسانترین راه برای زوم کردن، Ø§Ø³ØªÙØ§Ø¯Ù‡ از کلید های – Ùˆ + (یا = ) است. همچنین با Ø§Ø³ØªÙØ§Ø¯Ù‡ از ctrl + کلیک وسط موس یا Ctrl + کلیک راست ماوس می‌توانید زوم کنید، Shift + کلیک وسط ماوس یا shift + کلیک راست موس برای برگشت از زوم به کار می‌آیند. عملیات مربوط به زوم Ùˆ برگشت از زوم با Ù†Ú¯Ù‡ داشتن ctrl + چرخاندن چرخک ماوس نیز امکان پذیر است. با کلیک کردن در محدوده مربوط به زوم (در گوشه سمت راست پنجره سند)ØŒ مقدار دقیق زوم را به درصد بنویسید Ùˆ کلید Enter را بزنید تا عملیات زوم به اندازه وارد شده انجام شود. همچنین ابزار Zoom در جعبه ابزار، سمت Ú†Ù¾ به شما اجازه می‌دهد در محدوده‌ای Ú©Ù‡ با ماوس حدودش را مشخص می‌کنید، زوم کنید. - - + + نرم Ø§ÙØ²Ø§Ø± Inkscape همچنین تاریخچه‌ای از مراحل زوم را در نشست کاری ذخیره می‌کند. کلید ` (کلیدی Ú©Ù‡ علامت ~ دارد) را برای برگشتن به زوم قبلی Ùˆ کلید Shift+` را برای Ø±ÙØªÙ† به زوم بعدی بزنید. - - ابزارهای Inkscape + + ابزارهای Inkscape - - + + جعبه ابزار عمودی سمت چپ، ابزار‌های طراحی Ùˆ ویرایش Inkscape را نشان می‌دهد. در قسمت بالای پنجره زیر منو‌ی اصلی، نوار Commands با دکمه‌های ÙØ±Ø§Ù…ین عمومی وجود دارد. این دکمه‌ها برای ساختن یک ÙØ§ÛŒÙ„ جدید، ذخیره کردن ÙØ§ÛŒÙ„ جاری،چاپ کردن Ùˆ مواردی از این دست به کار می‌روند. با نگه‌داشتن ماوس روی هر دکمه می‌توانید کارکرد آن را متوجه شوید. بعد از این نوار، نوار کنترل‌های مربوط به هر ابزار انتخاب شده قرار دارد. هر گاه ابزاری انتخاب شود، گزینه‌های این نوار برای تنظیم عملکرد آن ابزار تغییر می‌کنند (با انتخاب چند ابزار از نوار ابزار تغییراتی Ú©Ù‡ در این نوار حاصل می‌شود را ببینید). نوار وضعیت در قسمت پایینی پنجره قرار دارد، این نوار پیام‌ها Ùˆ نکات Ù…Ùیدی در هنگام کار با نرم Ø§ÙØ²Ø§Ø± نمایش خواهد داد. - - + + بسیاری از اعمال را می‌توان با Ø§Ø³ØªÙØ§Ø¯Ù‡ از میانبر‌های ØµÙØ­Ù‡ کلید انجام داد. برای دیدن مرجع کامل این میانبر‌ها از منوی Help زیر منوی Keys را انتخاب کنید. - - ساختن Ùˆ مدیریت اسناد + + ساختن Ùˆ مدیریت اسناد - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + نرم Ø§ÙØ²Ø§Ø± Inkscape از ÙØ±Ù…ت SVG (سرواژه ÛŒ عبارت Scalable Vector Graphics) برای ذخیره کردن ÙØ§ÛŒÙ„‌های خودش Ø§Ø³ØªÙØ§Ø¯Ù‡ می‌کند. SVG یک استاندارد باز است Ú©Ù‡ طی٠گسترده‌ای از نرم Ø§ÙØ²Ø§Ø±â€ŒÙ‡Ø§ÛŒ گراÙیکی آن را پشتیبانی می‌کنند. ÙØ§ÛŒÙ„‌های SVG بر پایه‌ی XML بنا شده‌اند Ùˆ توسط هر ویرایشگر متنی یا ویرایشگر XML ای می‌توانند ویرایش شوند. Inkscape در کنار SVG چندین نوع قالب ÙØ§ÛŒÙ„ÛŒ دیگر مثل (PNG Ùˆ EPS) را می‌تواند وارد (import) Ùˆ صادر (export) کند. ( import کردن یک ÙØ§ÛŒÙ„ØŒ یعنی اینکه آن ÙØ§ÛŒÙ„‌ را در سند ‌‌Inkscape به عنوان بخشی از ÙØ§ÛŒÙ„تان وارد کرده Ùˆ از آن Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. Export کردن یک ÙØ§ÛŒÙ„ØŒ یعنی ÙØ§ÛŒÙ„ÛŒ Ú©Ù‡ در Inkscape ساخته‌اید را می‌توانید به این ÙØ±Ù…ت‌ها درآورده Ùˆ ذخیره کنید.) - - + + نرم Ø§ÙØ²Ø§Ø± Inkscape برای هر سند جدید، یک پنجره‌ی جدید باز می‌کند. با Alt+Tab یا سایر روش‌ها می‌توانید بین پنجره‌ها حرکت کنید، یا از میانبر Inkscape (کلید‌های Ctrl+Tab ) Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید Ú©Ù‡ بین تمام پنجره‌های Inkscape Ú©Ù‡ ÙØ§ÛŒÙ„ÛŒ در آن باز شده باشد، سوییچ می‌کند. (همین الان یک سند جدید بسازید Ùˆ برای تمرین بین آن Ùˆ این سند سوییچ کنید.) نکته: Inkscape با این پنجره‌ها مثل تب‌های یک مرورگر وب Ø±ÙØªØ§Ø± می‌کند، یعنی میانبر Ctrl+Tab بین اسنادی Ú©Ù‡ در یک پروسه اجرا شده باشند، سوییچ می‌کند. اگر چند ÙØ§ÛŒÙ„ را از یک مدیر ÙØ§ÛŒÙ„ اجرا کنید یا بیش از یک پروسه Inkscape اجرا کرده باشید، این میانبر برای تمام پنجره‌ها کار نخواهد کرد. - - ساختن شکل‌ها + + ساختن شکل‌ها - - + + وقت کشیدن چند Ø´Ú©Ù„ نازنین است! روی ابزار مستطیل Rectangle در نوار ابزار کلیک کنید (یا کلید F4 را بزنید) Ùˆ در یک سند جدید یا همینجا کلیک را Ù†Ú¯Ù‡ داشته Ùˆ ماوس را بکشید Ùˆ رها کنید (به این عمل درگ کردن می‌گویند)ØŒ در یک سند جدید یا همینجا مستطیل را بکشید: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -170,293 +170,298 @@ often!) and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + به مجموعه این ابزار‌ها، ابزار‌های ترسیم Ø´Ú©Ù„ (shape tools) می‌گویند. هر Ø´Ú©Ù„ÛŒ Ú©Ù‡ ایجاد کنید یک یا چند اهرم چهارگوش دارد؛ سعی کنید آن‌ها را با ماوس بکشید تا اثر آن‌ها را بر Ø´Ú©Ù„ ببینید. یک راه دیگر برای تنظیم دقیق Ø´Ú©Ù„ وجود دارد. می‌توان پارامتر‌های نوار کنترل مربوط به ابزار را تنظیم کرد. این تغییرات بر روی Ø´Ú©Ù„ÛŒ Ú©Ù‡ انتخاب شده باشد Ø¨Ù„Ø§ÙØ§ØµÙ„Ù‡ اعمال می‌شود. (معمولا اهرم‌های سÙیدی روی Ø´Ú©Ù„ÛŒ Ú©Ù‡ انتخاب شده باشد، دیده می‌شود) Ùˆ اگر قبل از تغییر دادن پارامتر‌ها هیچ Ø´Ú©Ù„ÛŒ انتخاب نشده باشد، تغییرات بر اشکالی Ú©Ù‡ بعدا ساخته شوند، اعمال خواهد شد. - - + + برای خنثی کردن آخرین عمل انجام شده، کلید‌های Ctrl+Z را بزنید. (یا اگر دوباره نظرتان عوض شد، می‌توانید عمل خنثی شده را با زدن کلید‌های Shift+Ctrl+Z دوباره برگردانید.) - - جابه‌جا کردن، مقیاس کردن، چرخاندن + + جابه‌جا کردن، مقیاس کردن، چرخاندن - - + + Ù¾Ø±â€ŒØ§Ø³ØªÙØ§Ø¯Ù‡â€ŒØªØ±ÛŒÙ† ابزار InkscapeØŒ انتخابگر (Selector) است. روی بالاترین دکمه در نوار ابزار (شبیه Ø´Ú©Ù„ جهت (شبیه یک نشانگر ماوس مشکی!)) کلیک کنید، یا کلید F1 یا کلید Space را ÙØ´Ø§Ø± دهید. حالا می‌توانید هر شئ‌ای را در ØµÙØ­Ù‡ انتخاب کنید. روی مستطیل زیر کلیک کنید. - - - + + + حالا هشت اهرم شبیه Ùلش اطرا٠شکل می‌بینید. در این وضعیت می‌توانید: - - - + + + شئ را با درگ کردن آن جابه‌جا کنید. (کلید Ctrl را برای محدود کردن حرکت در جهت‌های اÙÙ‚ÛŒ Ùˆ عمودی Ù†Ú¯Ù‡ دارید) - - - + + + شئ را با کشیدن (درگ کردن) هر یک از اهرم‌ها مقیاس کنید. (کلید Ctrl را برای ثابت Ù†Ú¯Ù‡ داشتن نسبت طول به عرض Ø´Ú©Ù„ Ù†Ú¯Ù‡ دارید.) (مقیاس کردن یعنی اینکه Ø´Ú©Ù„ را همانطور Ú©Ù‡ هست Ú©ÙˆÚ†Ú© یا بزرگ کنید، می‌توانید با هدایت ماوس نسبت Ú©ÙˆÚ†Ú©/بزرگ شدن Ø´Ú©Ù„ را در امتداد طول یا عرض آن تعیین کنید) - - + + حالا دوباره روی مستطیل کلیک کنید. (اگر Ø´Ú©Ù„ از حالت انتخاب خارج شده است، روی Ø´Ú©Ù„ دوبار کلیک کنید) حالا اهرم‌ها تغییر می‌کنند. می‌توانید: - - - + + + شئ را با کشیدن (درگ کردن) اهرم‌های گوشه بچرخانید. (کلید Ctrl را برای محدود کردن دَوَران به چرخش‌های Û±Ûµ درجه‌ای Ù†Ú¯Ù‡ دارید. علامت + را برای مشخص کردن مرکز دوران درگ کنید تا جابه‌جا شود.) - - - + + + Ø´ÛŒ را با درگ کردن اهرم‌هایی Ú©Ù‡ در گوشه نیستند نامتوازن (skew) کنید. (کلید Ctrl را برای محدود کردن نامتوازن‌سازی به مراحل Û±Ûµ درجه‌ای Ù†Ú¯Ù‡ دارید) (نامتوازن سازی در واقع موّرب کردن Ø´Ú©Ù„ است، به عنوان مثال با نامتوازن کردن یک مستطیل، می‌توانید آن را به یک متوازی‌الاضلاع تبدیل کنید) - + در حالی Ú©Ù‡ ابزار انتخابگر ÙØ¹Ø§Ù„ است، در نوار کنترل‌ (بالای ØµÙØ­Ù‡) مقادیر دقیق مختصات (X Ùˆ Y) Ùˆ اندازه (W Ùˆ H) -همان طول Ùˆ عرض- مربوط به شئ انتخاب شده را (به عدد!) وارد کنید. (توجه داشته‌ باشید Ú©Ù‡ مقادیر H Ùˆ W در واقع Ø´Ú©Ù„ را مقیاس می‌کند.) - - تغییر Ø´Ú©Ù„ با کلید‌ها + + تغییر Ø´Ú©Ù„ با کلید‌ها - - + + یکی از ویژگی‌های Inkscape Ú©Ù‡ آن را از بیشتر برنامه‌های ویرایشگر برداری جدا می‌کند، تاکید آن بر دسترسی از طریق ØµÙØ­Ù‡ کلید است. به سختی می‌توان ÙØ±Ù…ان یا عملیاتی را در Inkscape پیدا کرد Ú©Ù‡ نتوان آن را از ØµÙØ­Ù‡ کلید انجام داد، Ùˆ تغییر Ø´Ú©Ù„ اشیاء هم از این قاعده مستثنی نیست. - - + + می‌توانید از کلید‌های جهت‌دار ØµÙØ­Ù‡ برای جابه‌جا کردن، کلید‌های < Ùˆ > برای مقیاس کردن Ùˆ کلید‌های [ Ùˆ ] برای چرخاندن (دَوَران) اشیاء Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. گام پیش ÙØ±Ø¶ برای جابه‌جایی Ùˆ مقیاس‌ کردن Û² پیکسل است؛ با نگهداشتن کلید Shift می‌توانید این گام‌ را Û±Û° برابر کنید. Ctrl+> Ùˆ Ctrl+< شئ را به ترتیب به Û²Û°Û°Ùª Ùˆ ÛµÛ°Ùª مقدار اصلی‌اش مقیاس می‌کنند. دوران‌های پیش ÙØ±Ø¶ با گام‌های Û±Ûµ درجه‌ای اجرا می‌شوند؛ با نگهداشتن کلید Ctrl چرخش به گام‌های Û¹Û° درجه‌ای Ø§ÙØ²Ø§ÛŒØ´ خواهد ÛŒØ§ÙØª. - - + + با این وجود، شاید Ù…Ùید‌ترین مقدار گام برای تغییر Ø´Ú©Ù„ØŒ گام‌های در اندازه پیکسل باشد، Ú©Ù‡ با Ø§Ø³ØªÙØ§Ø¯Ù‡ از نگهداشتن کلید Alt به همراه کلید‌های تغییر Ø´Ú©Ù„ اجرا می‌شوند. به عنوان مثال، Alt/+ کلیدهای جهت‌دار ناحیه انتخاب شده را به اندازه Û± پیکسل در زوم ÙØ¹Ù„ÛŒ جابه‌جا می‌کند (در عمل، این یک پیکسل را نباید با واحد اندازه گیری پیکسل Ú©Ù‡ یک واحد اندازه گیری طول مستقل از زوم است، اشتباه Ú¯Ø±ÙØª). این به این معناست Ú©Ù‡ اگر زوم کنید، نتیجه‌ی یک Alt+کلید جهت‌دار حرکت مطلق کوچکتری را نتیجه می‌دهد Ú©Ù‡ هنوز به نظر یک پیکسل در ØµÙØ­Ù‡ می‌آید. بنابراین می‌توان اشیاء را با Ø§Ø³ØªÙØ§Ø¯Ù‡ از زوم کردن یا برگشتن از زوم با دقت دلخواه در ØµÙØ­Ù‡ ساماندهی کرد. - - + + به طور مشابه، Alt+> Ùˆ Alt+< ناحیه‌ی انتخاب شده را به اندازه یک پیکسل در زوم ÙØ¹Ù„ÛŒ مقیاس می‌کنند، Ùˆ Alt+[ Ùˆ Alt+] آن ناحیه را طوری می‌چرخانند Ú©Ù‡ دورترین نقطه از مرکز شئ به اندازه یک پیکسل ØµÙØ­Ù‡ نمایش در زوم ÙØ¹Ù„ÛŒ جابه‌جا شود. - - + + نکته: کاربران گنو/لینوکس ممکن است از ترکیب Alt/+کلید‌های جهت‌دار Ùˆ چند ترکیب دیگر از کلید‌ها نتیجه‌ای نگیرند، به خاطر اینکه مدیر پنجره‌شان احتمالاً رویداد آن کلید‌ها را قبل از رسیدن به برنامه Inkscape می‌گیرد. برای Ø±ÙØ¹ این مشکل می‌بایست تنظیمات مدیر پنجره را به صورت مناسب تغییر داد. - - انتخاب چندگانه + + انتخاب چندگانه - - + + با Ù†Ú¯Ù‡ داشتن کلید Shift/ موقع کلیک کردن، می‌توانید هر تعداد شئ را به طور همزمان انتخاب کنید. یا می‌توانید اطرا٠اشیائی Ú©Ù‡ می‌خواهید انتخاب شوند، ماوس را درگ کنید؛ به این روش انتخاب کردن، انتخاب روبانی می‌گویند. (ابزار انتخابگر با درگ کردن ماوس از یک ÙØ¶Ø§ÛŒ خالی یک روبان ایجاد می‌کند -منظور از این روبان در واقع همان مستطیل بی‌رنگ با خطوط مشکی‌ است Ú©Ù‡ محدوده‌ی انتخاب شونده را مشخص می‌کند- Ø› البته اگر کلید Shift را قبل از ÙØ´Ø§Ø± دادن کلید ماوس بزنید، Inkscape همیشه چنین روبانی می‌سازد). با انتخاب هر سه Ø´Ú©Ù„ زیر انتخاب کردن چند شئ را تمرین کنید: - - - - - + + + + + حالا با Ø§Ø³ØªÙØ§Ø¯Ù‡ از انتخاب روبانی (با درگ کردن یا Shift/+درگ کردن ) دو بیضی را انتخاب کنید طوریکه مستطیل در محدوده انتخاب شده نباشد: - - - - - + + + + + هر شئ مجزای انتخاب شده، یک نشانه‌ی انتخاب نمایش می‌دهد. -به صورت پیش ÙØ±Ø¶ØŒ یک ÙØ±ÛŒÙ… نقطه چین مستطیل Ø´Ú©Ù„ است-. این نشانه‌ها دیدن اینکه Ú†Ù‡ چیزی انتخاب شده Ùˆ Ú†Ù‡ چیزی انتخاب نشده است را آسان می‌کنند. به عنوان مثال، اگر هر دو بیضی Ùˆ مستطیل را انتخاب کنید، بدون نشانه‌ها به سختی می‌توانید حدس بزنید Ú©Ù‡ بیضی‌ها انتخاب شده‌اند یا نه. - - + + اجرای Shift/+کلیک روی یک شئ انتخاب شده آن را از محدوده‌ی انتخاب خارج می‌کند. هر سه شئ بالا را انتخاب کنید، سپس با Ø§Ø³ØªÙØ§Ø¯Ù‡ از Shift/+کلیک ØŒ هر دو بیضی را از محدوده‌ی انتخاب خارج کنید تا Ùقط مستطیل در حالت انتخاب باقی بماند. - - + + زدن کلید Esc همه‌ چیز را در لایه‌ی ÙØ¹Ù„ÛŒ از محدوده‌ی انتخاب خارج می‌کند. (اگر لایه‌ای نساخته باشید، این مثل خارج کردن همه اشیاء سند از حالت انتخاب می‌شود) - - گروه بندی + + گروه بندی - - + + چند شئ می‌توانند ترکیب شده Ùˆ یک گروه بسازند. یک گروه، موقع درگ کردن یا تغییر Ø´Ú©Ù„ دادن، مثل یک شئ Ù…Ù†ÙØ±Ø¯ Ø±ÙØªØ§Ø± می‌کند. در زیر، سه شئ سمت Ú†Ù¾ مستقل هستند؛ سه شئ مشابه سمت راست گروه شده‌اند. سعی کنید گروه را به Ú©Ù…Ú© ماوس درگ کنید. - - - - + + + + - - + + برای ساختن یک گروه، یک یا چند شئ را انتخاب کرده Ùˆ Ctrl+G را بزنید. برای خارج کردن یک یا چند گروه از حالت گروه‌بندی شده، آن‌ها را انتخاب کرده Ùˆ Ctrl+U را بزنید. خود گروه‌ها، درست مثل بقیه اشیاء ممکن است دوباره Ùˆ دوباره گروه‌بندی شوند Ùˆ در تعداد این مراحل گروه‌بندی محدودیتی وجود ندارد؛ لازم به ذکر است که، Ctrl+U Ùقط در بالاترین سطح گروه انتخاب شده را از حالت گروه‌بندی خارج می‌کند؛ برای خارج کردن تمام اشیاء عضو یک گروه در گروه‌‌های عمیق از حالت گروه‌بندی باید زدن Ctrl+U چندین بار تکرار شود. - - + + برای ویرایش یک شئ الزامی به خارج کردن آن از گروه نیست. Ùقط کاÙÛŒ است شئ را Ctrl/+کلیک کنید تا به تنهایی انتخاب شده Ùˆ قابل ویرایش شود، یا چندین شئ (داخل یا بیرون از گروه) را با Ctrl+Shift/+کلیک کنید تا چند شئ صرÙنظر از گروه‌بندی انتخاب Ùˆ آماده ویرایش شود. سعی کنید اشیاء مجزای یک گروه را بدون از گروه خارج کردن، جابه‌جا کرده یا تغییر Ø´Ú©Ù„ دهید، سپس همه چیز را از حالت انتخاب شده خارج کرده، گروه را به طور طبیعی انتخاب کنید تا مطمئن شوید Ú©Ù‡ گروه همچنان حالت گروه‌ بودنش را Ø­ÙØ¸ کرده است. - - Ù¾ÙØ± کردن Ùˆ حاشیه + + Ù¾ÙØ± کردن Ùˆ حاشیه - - + + - بسیاری از توابع Inkscape در کادر‌های محاوره‌ای قرار داده شده‌اند. احتمالاً ساده‌ترین روش برای رنگ کردن یک شئ باز کردن کادر محاوره swatch از منوی View است (یا زدن کلید‌های Shift+Ctrl+W )ØŒ سپس مراحل کار چنین پیش می‌رود Ú©Ù‡ شئ مورد نظر انتخاب می‌شود Ùˆ با کلیک کردن روی یک رنگ برای رنگ کردن آن شئ، عملیات به پایان می‌رسد. (این روش عوض کردن رنگی است Ú©Ù‡ شئ با آن Ù¾ÙØ± شده است). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + از این قدرتمندتر، کادر محاوره Fill and Stroke از منوی Object است (یا کلید‌های Shift+Ctrl+F ). شئ زیر را انتخاب کنید Ùˆ کادر محاوره Fill and Stroke را باز کنید. - - - + + + - + خواهید دید Ú©Ù‡ آن کادر سه تَب دارد:Stroke paintØŒ Fill Ùˆ Stroke style. تب fill به شما اجازه می‌دهد Ú©Ù‡ ویژگی Ù¾ÙØ±â€ŒØ´Ø¯Ú¯ÛŒ (ÙØ¶Ø§ÛŒ داخل) شئ یا اشیاء انتخاب شده را ویرایش کنید. با Ø§Ø³ØªÙØ§Ø¯Ù‡ از دکمه‌های پایین این تَب، می‌توانید نوع Ù¾ÙØ± شدن، شامل Ù¾ÙØ± نشدن (دکمه X دار)ØŒ رنگ یک دست (Flat color)ØŒ گرادیان‌های خطی (Linear gradient) یا گرادیان دایره‌ای (Radial gradient) را انتخاب کنید. برای Ø´Ú©Ù„ بالا، دکمه‌ی رنگ یک دست ÙØ¹Ø§Ù„ خواهد بود. (گرادیان در واقع Ø·ÛŒÙÛŒ از رنگ‌هاست Ú©Ù‡ از یک رنگ شروع شده Ùˆ مرحله به مرحله به رنگ دیگر تبدیل می‌شود. می‌توان این طی٠را با چندین رنگ نیز ایجاد کرد) - - + + - + در قسمت پایین‌تر، مجموعه‌ای از رنگ گزین‌ها ( color pickers ) را در تب مخصوص خودشان می‌بینید: RGB, CMYK, HSL Ùˆ Wheel. شاید مناسب‌ترین آن‌ها رنگ گزین Wheel باشد Ú©Ù‡ شما می‌توانید با چرخاندن مثلث، تÙÙ† رنگ را از چرخ بگیرید، Ùˆ سپس با انتخاب میزان سایه‌ی دلخواه از آن تÙن، رنگ نهایی را انتخاب کنید. تمام رنگ گزین‌ها یک لغزنده برای تنظیم میزان Ø¢Ù„ÙØ§ (Ø´ÙØ§Ùیت) شئ یا اشیاء انتخاب شده دارند. (اگر Ø´ÙØ§Ùیت را ØµÙØ± کنید، رنگ نامرئی به دست می‌آید) - - + + - + هر زمان Ú©Ù‡ یک شئ را انتخاب کنید، رنگ گزین برای نمایش رنگ Ù¾ÙØ± شده Ùˆ حاشیه شئ به هنگام می‌شود (یعنی با انتخاب هر شئ رنگ Ùˆ حاشیه‌ی مربوط به آن در این کادر محاوره‌ای نمایش داده می‌شود Ùˆ می‌توان آن را تغییر داد) (با انتخاب چندین شئ، کادر محاوره رنگ متوسط‌شان را نشان می‌دهد). با این نمونه‌ها کار کنید یا نمونه‌های خودتان را بسازید. - - - - - - - - - + + + + + + + + + - + با Ø§Ø³ØªÙØ§Ø¯Ù‡ از تب Stroke paintØŒ می‌توانید خط حاشیه‌ stroke (مرز) شئ را حذ٠کنید، یا رنگ دلخواه به آن نسبت داده یا آن را Ø´ÙØ§Ù کنید: - - - - - - - - - - + + + + + + + + + + - + آخرین تب، Stroke styleØŒ اجازه می‌دهد Ú©Ù‡ عرض یا بقیه پارامتر‌های خط حاشیه را تنظیم کنید: - - - - - - - - - + + + + + + + + + - + در آخر، به جای رنگ یک دست، می‌توانید از گرادیان‌ها برای Ù¾ÙØ± کردن Ùˆ یا خط حاشیه اشیاء Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید: @@ -497,45 +502,45 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + وقتی از رنگ یک دست به گرادیان سوییچ می‌کنید، یک گرادیان جدید با Ø§Ø³ØªÙØ§Ø¯Ù‡ از رنگ مذبور ساخته می‌شود Ú©Ù‡ از مات به Ø´ÙØ§Ù (از نامرئی به رنگ مورد نظر) می‌رود. به ابزار گرادیان سوییچ کنید ( Ctrl+F1 ) تا اهرم‌های گرادیان قابل جابه‌جا شدن شوند – کنترل‌های متصل شده به خطوط جهت Ùˆ طول گرادیان را مشخص می‌کنند. وقتی یکی از اهرم‌های گرادیان انتخاب شده باشد (رنگش آبی پررنگ باشد)ØŒ کادر Fill and Stroke رنگ‌ آن اهرم را به جای رنگ تمام شئ، نشان داده Ùˆ تنظیم می‌کند. - - + + - + راه دیگری برای عوض کردن رنگ یک شئ وجود دارد، برای اینکار ابزار Dropper کلید ( F7 ) می‌تواند گزینه‌ی مناسبی باشد. برای Ø§Ø³ØªÙØ§Ø¯Ù‡ از این ابزار، Ø´Ú©Ù„ÛŒ Ú©Ù‡ می‌خواهید رنگ شود را انتخاب کنید، ابزار را ÙØ¹Ø§Ù„ کنید Ùˆ روی هر نقطه‌ای در ØµÙØ­Ù‡ Ú©Ù‡ رنگ مورد نظرتان را دارد کلیک کنید تا Ø´Ú©Ù„ انتخاب شده به آن رنگ درآید (Shift/+کلیک رنگ حاشیه را تنظیم می‌کند). - - تکثیر، هم‌ترازی، توزیع + + تکثیر، هم‌ترازی، توزیع - - + + - + یکی از پرکاربردترین اعمال، تکثیر یک شئ است ( Ctrl+D ). شئ تکثیر شده دقیقا بالای Ø´Ú©Ù„ اصلی قرار می‌گیرد Ùˆ به حالت انتخاب شده در می‌آید، پس Ù…ÛŒ توانید با درگ ماوس یا کلید‌های جهت‌دار آن را کنار بکشید. برای تمرین، سعی کنید از کپی‌های این مربع سیاه یک خط بسازید. - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -557,192 +562,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-order + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-order - - + + - + - واژه‌ی z-order به سلسله مراتب پشت سر هم قرار Ú¯Ø±ÙØªÙ† اشیاء در یک طراحی Ú¯ÙØªÙ‡ می‌شود، مثلا اینکه کدام اشیاء بالا هستند Ùˆ بقیه را می‌پوشانند Ùˆ کدام اشیا زیر هستند Ùˆ شاید بخشی از آن‌ها دیده می‌شود. در این رابطه دو دستور در منوی Object وجود دارد: Rise to Top (کلید Home ) Ùˆ Lower to Bottom (کلید End ) Ú©Ù‡ به ترتیب شئ انتخاب شده را به بالاترین سطح Ùˆ پایین‌ترین سطح z-order در لایه‌ی ÙØ¹Ù„ÛŒ می‌برند. دو دستور دیگر، Raise (کلید PgUp ) Ùˆ Lower (کلید PgDn ) هستند Ú©Ù‡ به اندازه یک سطح z-order شئ انتخاب شده را بالا یا پایین می‌آورند. + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + Ø§Ø³ØªÙØ§Ø¯Ù‡ از این دستورات را با تغییر دادن z-order اشیاء زیر تمرین کنید، تا اولین بیضی از سمت Ú†Ù¾ رو Ùˆ اولین بیضی از سمت راست پشت بقیه بیضی‌ها قرار گیرد: - - - - - - - - + + + + + + + + یک میانبر بسیار Ù…Ùید کلید Tab است. اگر هیچ چیز انتخاب نشده باشد، کلید TabØŒ شئ‌ای Ú©Ù‡ در پایین‌ترین سطح z-order باشد را انتخاب می‌کند؛ در غیر اینصورت، شئ‌ای Ú©Ù‡ سطح z-order آن بالای شئ انتخاب شده باشد انتخاب می‌شود. Shift+Tab برعکس کار می‌کند، به این ترتیب Ú©Ù‡ از بالاترین شئ شروع می‌کند Ùˆ به سمت پایین حرکت می‌کند. از آنجا Ú©Ù‡ اشیائی Ú©Ù‡ می‌سازید به صورت پشته در سند ذخیره می‌شود، Shift+Tab زدن در حالتی Ú©Ù‡ هیچ شئ‌ای انتخاب نشده باشد، آخرین شئ‌ای Ú©Ù‡ اخیرا ساخته‌اید را انتخاب خواهد کرد. کار کردن با کلید‌های Tab Ùˆ Shift+Tab را روی بیضی‌های بالا تمرین کنید. - - انتخاب کردن شئ زیرین Ùˆ درگ کردن آن + + انتخاب کردن شئ زیرین Ùˆ درگ کردن آن - - + + اگر شئ‌ای Ú©Ù‡ نیاز دارید زیر شئ دیگری پنهان شده باشد، Ú†Ù‡ کار می‌کنید؟ اگر شئ بالایی (تا حدودی) Ø´ÙØ§Ù باشد، ممکن است هنوز شئ زیری را ببینید، اما کلیک کردن روی آن باعث می‌شود شئ بالایی انتخاب شود Ùˆ نه آنچه Ú©Ù‡ شما می‌خواهید. - - + + در این وضعیت Alt/+کلیک Ù…Ùید واقع می‌شود. با چندبار زدن Alt/+کلیک می‌تواند اشیائی Ú©Ù‡ در سطح z-order پایین‌تر هستند Ùˆ در واقع پشت Ø´ÛŒ جلویی مخÙÛŒ شده‌اند را انتخاب کنید. تکرار Alt/+کلیک در وضعیتی Ú©Ù‡ آخرین شئ سطح z-order انتخاب شده باشد، باعث انتخاب شدن اولین شئ سطح z-order (در واقع جلوترین شئ) خواهد شد. - - + + نکته: (اگر در لینوکس باشید، ممکن است متوجه شوید Ú©Ù‡ Alt/+کلیک به درستی کار نمی‌کند. در عوض، ممکن است پنجره اصلی Inkscape را جابه‌جا کند. دلیلش این است Ú©Ù‡ مدیر پنجره شما Alt/+کلیک را برای عملیات دیگری رزرو کرده است. برای Ø±ÙØ¹ این مشکل، باید تنظیمات Ø±ÙØªØ§Ø± مدیر پنجره را پیدا کرده Ùˆ یا آن را خاموش کنید یا آن را با کلید متا (همان کلیدی Ú©Ù‡ عکس ویندوز روی آن درج شده است) عوض کنید تا Inkscape Ùˆ سایر برنامه‌ها بتوانند آزادانه از Alt Ø§Ø³ØªÙØ§Ø¯Ù‡ کنند. - - + + تا اینجا همه چیز خوب است، اما وقتی یک شئ زیر سطحی را انتخاب می‌کنید، Ú†Ù‡ کاری می‌توانید با آن انجام‌دهید؟ شما می‌توانید از کلید‌ها برای تغییر Ø´Ú©Ù„ آن Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید Ùˆ یا می‌توانید اهرم‌های ناحیه‌ی انتخاب شده را درگ کنید. البته، درگ کردن خود شئ، باعث ریست شدن سطح z-order شده Ùˆ شئ موجود در بالاترین سطح را انتخاب Ùˆ جابه‌جا خواهد کرد. (این چیزی است Ú©Ù‡ کلیک Ùˆ درگ برای آن ساخته شده است- مراحل کار به این Ø´Ú©Ù„ است Ú©Ù‡ ابتدا بالاترین شئ زیر نشانگر ماوس را انتخاب شده، سپس ناحیه انتخاب شده درگ می‌شود). برای اینکه به Inkscape بگویید Ú©Ù‡ شئ انتخاب شده را بدون انتخاب هیچ شئ دیگری درگ کند، از Alt/+درگ کردن Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید. - - + + ترکیب‌های Alt/+کلیک Ùˆ Alt/+درگ را روی دو Ø´Ú©Ù„ قهوه‌ای زیر مستطیل سبز Ø´ÙØ§Ù تمرین کنید: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - جمع بندی + + جمع بندی - - + + - این پایان آموزش گام به گام اصول مقدماتی Inkscape بود. مطالب زیادی در مورد Inkscape وجود دارد Ú©Ù‡ بر پایه‌ی تکنیک‌هایی Ú©Ù‡ در اینجا شرح داده شد، قابل اجرا خواهند بود. با گذراندن این بخش، شما قادر هستید Ú©Ù‡ اشکال گراÙیکی ساده ولی Ù…Ùیدی بسازید. برای موارد پیچیده‌تر به بخش Ù¾ÛŒØ´Ø±ÙØªÙ‡ Ùˆ سایر آموزش‌های گام به گام در Help > Tutorials رجوع کنید یا بخش بعدی این سری آموزشی را ببینید. + این پایان آموزش گام به گام اصول مقدماتی Inkscape بود. مطالب زیادی در مورد Inkscape وجود دارد Ú©Ù‡ بر پایه‌ی تکنیک‌هایی Ú©Ù‡ در اینجا شرح داده شد، قابل اجرا خواهند بود. با گذراندن این بخش، شما قادر هستید Ú©Ù‡ اشکال گراÙیکی ساده ولی Ù…Ùیدی بسازید. برای موارد پیچیده‌تر به بخش Ù¾ÛŒØ´Ø±ÙØªÙ‡ Ùˆ سایر آموزش‌های گام به گام در Help > Tutorials رجوع کنید یا بخش بعدی این سری آموزشی را ببینید. - + @@ -772,8 +784,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید diff --git a/share/tutorials/tutorial-basic.gl.svg b/share/tutorials/tutorial-basic.gl.svg index 5584e4128..4ab8fa872 100644 --- a/share/tutorials/tutorial-basic.gl.svg +++ b/share/tutorials/tutorial-basic.gl.svg @@ -36,133 +36,133 @@ - - Use Ctrl+frecha abaixo para desprazar + + Use Ctrl+frecha abaixo para desprazar - + ::BÃSICO - - + + Este titorial mostra os fundamentos do uso de Inkscape. Este é un documento normal de Inkscape así que pode velo, modificalo, copiar algo del, ou gardalo. - - + + O titorial Básico cobre a navegación polo lenzo, a xestión de documentos, os fundamentos das ferramentas de figuras, técnicas de selección, a transformación de obxectos co selector, a agrupación, a definición do recheo e do trazo, o aliñamento, e a orde-z. Para temas máis avanzados, consulte os outros titoriais no menú de Axuda. - - Desprazar o lenzo + + Desprazar o lenzo - - + + Hai varios xeitos de desprazar o lenzo do documento. Use as teclas Ctrl+frecha para desprazar usando o teclado. (Probe agora a desprazar o documento cara abaixo). Tamén pode arrastrar o lenzo co botón central do rato. Ou, pode usar as barras de desprazamento (prema Ctrl+B para mostralas ou ocultalas). A roda do rato tamén serve para desprazar verticalmente; prema Maiús para usar a roda para desprazar horizontalmente. - - Achegar e alonxar (zoom) + + Achegar e alonxar (zoom) - - + + A forma máis sinxela de usar o zoom é premer as teclas - e + (ou =). Tamén pode usar Ctrl+clic co botón central do rato ou Ctrl+clic co botón dereito do rato para achegar, Maiús+clic co botón central do rato ou Maiús+clic co botón dereito do rato para alonxar, ou mover a roda do rato mentres preme a tecla Ctrl. Ou pode premer no campo de entrada de ampliación (zoom) situado na esquina inferior dereita da xanela, introduza un valor de ampliación en %, e prema Intro. Tamén dispón da ferramenta Aumentar ou reducir o zoom (situada na barra de ferramentas da esquerda) que lle permitirá ampliar unha área seleccionándoa. - - + + Inkscape tamén garda un historial dos niveis de ampliación (zoom) que se usaron durante a sesión de traballo. Prema a tecla ` para volver á ampliación anterior, ou Maiús+` para ir ao seguinte. - - Ferramentas de Inkscape + + Ferramentas de Inkscape - - + + A barra de ferramentas vertical da esquerda contén as ferramentas de debuxo e edición de Inkscape. Na parte superior da xanela, debaixo do menú, está a barra de ordes que contén botóns de accións xerais e a barra de controis de ferramentas que contén controis específicos de cada ferramenta. A barra de estado ao fondo da xanela mostrará consellos útiles e mensaxes mentres traballa. - - + + Moitas operacións están dispoñibles a través de atallos de teclado. Abra Axuda > Referencia das teclas e do rato para ver a lista completa. - - Creación e xestión de documentos + + Creación e xestión de documentos - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape usa o formato SVG (Scalable Vector Graphics) para os seus ficheiros. SVG é un estándar aberto que é compatible cun amplo número de programas de manipulación de imaxe. Os ficheiros SVG están baseados en XML e pódense modificar con calquera editor de texto ou de XML (ademais de con Inkscape, claro está). Ademais de SVG, Inkscape pode importar e exportar varios outros formatos (EPS, PNG...). - - + + Inkscape abre unha xanela para cada documento. Pode moverse entre elas usando o xestor de xanelas (p.ex. usando Alt+Tab), ou pode usar o atallo de Inkscape, Ctrl+Tab, que se moverá en ciclo a través de todas as xanelas con documentos abertos. (Cree agora un novo documento e móvase a el e de volta a esta xanela para practicar). Nota: Inkscape trata a estas xanelas como se fosen lapelas dun navegador web, o que significa que o atallo de teclado Ctrl+Tab só funciona con documentos que se executan no mesmo proceso. Se abre varios ficheiros desde un navegador de ficheiros ou inicia máis dun proceso de Inkscape dende unha icona isto non funcionará. - - Creación de figuras + + Creación de figuras - - + + É hora de crear algunhas figuras! Prema na ferramenta Rectángulo da barra de ferramentas (ou prema F4) e faga clic e arrastre, xa sexa nun documento novo ou neste mesmo: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -170,293 +170,298 @@ often!) and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Estas ferramentas en conxunto coñécense como ferramentas de figura. Cada figura que cree mostra unha ou máis asas con forma de diamante; intente arrastralas para ver como responde a figura. O panel de controis dunha ferramenta de figura é outro xeito de modificar unha figura; estes controis aféctanlle á figura seleccionada (é dicir, a aquelas que mostran as asas) e definen as caracteristicas que se aplicarán ás figuras que se creen posteriormente. - - + + Para desfacer a súa última acción, prema Ctrl+Z. (Ou, se cambia de idea despois, pode refacer a acción desfeita usando Maiús+Ctrl+Z.) - - Mover, escalar, rotar + + Mover, escalar, rotar - - + + A ferramenta que máis se usa do Inkscape é o Selector. Prema no botón superior (o da frecha) da barra de ferramentas, ou prema F1 ou Espazo. Agora pode seleccionar calquera obxecto do lenzo. Prema no rectángulo de embaixo. - - - + + + Verá que aparecen oito asas con forma de frecha arredor do obxecto. Agora pode: - - - + + + Mover o obxecto arrastrándoo. (Prema Ctrl para restrinxir o movemento a horizontal e vertical.) - - - + + + Escalar o obxecto arrastrando calquera asa. (Prema Ctrl para conservar a proporción altura/anchura orixinal.) - - + + Agora prema outra vez no rectángulo. As asas cambian. Agora pode: - - - + + + Rotar o obxecto arrastrando as asas das esquinas. (Prema Ctrl para restrinxir a rotación a saltos de 15 graos. Arrastre a marca con forma de cruz para situar o centro da rotación). - - - + + + Inclinar o obxecto arrastrando as asas que non están nas esquinas. (Prema Ctrl para restrinxir a inclinación a saltos de 15 graos). - - + + Mentres estea no Selector, tamén pode usar os campos de entrada numéricos da barra de Controis (enriba do lenzo) para definir os valores exactos das coordenadas (X e Y) e o tamaño (L e H) da selección. - - Transformación mediante o teclado + + Transformación mediante o teclado - - + + Unha das características de Inkscape que o diferencian da maioría dos outros editores vectoriais é a súa énfase na accesibilidade co teclado. É dificil atopar algunha orde ou acción que sexa imposible de facer co teclado, e transformar os obxectos non é unha excepción. - - + + Pode usar o teclado para mover (teclas das frechas), escalar (teclas < e >), e rotar (teclas [ e ]) obxectos. Por defecto móvese e escálase 2 px; usando Maiús, poderá mover ou escalar dez veces iso. Usando Ctrl+> e Ctrl+< poderá escalar ao 200% ou 50% do orixinal, respectivamente. A rotación predefinida é de 15 graos; usando Ctrl, poderá rotar de 90 en 90 graos. - - + + Aínda así quizais sexan máis útiles as transformacións a nivel de píxel, que se realizan usando Alt en conxunción cas teclas de transformación. Por exemplo Alt+frechas moverá a selección 1 píxel co nivel de zoom actual (é dicir 1 píxel da pantalla, que non se debe confundir ca unidade px unit que é unha unidade de lonxitude de SVG independente do zoom). Isto significa que se aumenta o zoom, a execución de Alt+frecha terá como resultado un movemento absoluto menor que aínda así aparecerá na pantalla como un movemento de un píxel. Deste xeito é posible situar obxectos cunha precisión arbitraria con só aumentar ou reducir o zoom tanto como for necesario. - - + + De forma semellante, Alt+> e Alt+< escalan a selección de forma que o seu tamaño visible cambia un píxel da pantalla, e Alt+[ e Alt+] rotan a selección de forma que o punto máis distante do centro móvese un píxel da pantalla. - - + + Nota: os usuarios de Linux pode que non obteñan os resultados desexados con Alt+frecha e algunhas outras combinacións de teclas se o seu xestor de xanelas se apropia deses eventos de teclas antes de que cheguen a Inkscape. Unha solución sería cambiar a configuración do xestor de xanelas para que non use ditas combinacións. - - Seleccións múltiples + + Seleccións múltiples - - + + Pode seleccionar calquera número de obxectos de forma simultánea usando Maiús+clic (premendo en cada un deles). Ou, pode arrastrar arredor dos obxectos que precisa seleccionar; isto chámase selección elástica. (O selector crea unha banda elástica ao arrastrar desde un espazo baleiro; aínda así se preme Maiús antes de comezar a arrastrar, Inkscape sempre creará a banda elástica). Practique seleccionando as tres figuras de abaixo: - - - - - + + + + + Agora use a selección elástica (arrastrando ou usando Maiús+arrastrar) para seleccionar as dúas elipses pero non o rectángulo: - - - - - + + + + + Cada obxecto individual dunha selección mostra unha marca de selección — por defecto, un marco rectangular punteado. Estas marcas fan fácil ver o que está seleccionado e o que non. Por exemplo, se selecciona as dúas elipses e máis o rectángulo, sen as marcas custaríalle moito adiviñar se as elipses están seleccionadas ou non. - - + + Con Maiús+clic sobre un obxecto seleccionado excluirá dito obxecto da selección. Seleccione os tres obxectos de enriba e use Maiús+clic para excluír as dúas elipses da selección deixando só o rectángulo seleccionado. - - + + Se preme Esc deseleccionará todos os obxectos seleccionados. Ctrl+A selecciona todos os obxectos da capa actual (se non creou capas, é o mesmo que seleccionar todos os obxectos do documento). - - Agrupar + + Agrupar - - + + Pódense xuntar varios obxectos nun grupo. Un grupo compórtase coma un único obxecto cando o arrastra ou o transforma. Embaixo, os tres obxectos da esquerda son independentes; os tres obxectos da dereita están agrupados. Intente arrastrar o grupo. - - - - + + + + - - + + Para crear un grupo, seleccione un ou máis obxectos e prema Ctrl+G. Para desagrupar un ou máis grupos, seleccióneos e prema Ctrl+U. Os grupos tamén poden estar dentro de grupos, como calquera outro obxecto; eses grupos recursivos poden estar agrupados as veces que sexa. Aínda así, Ctrl+U só desagrupa o grupo de nivel superior dunha selección; terá que premer Ctrl+U varias veces se desexa desagrupar totalmente un grupo con moitos niveis de agrupación. - - + + Aínda así, se desexa editar un obxecto que está dentro dun grupo non ten que desagrupar. Só ten que executar Ctrl+clic sobre o obxecto e este seleccionarase para editalo por separado, ou execute Maiús+Ctrl+clic sobre varios obxectos (dentro ou fóra de calquera grupo) para realizar unha selección múltiple sen ter en conta a agrupación. Intente mover ou transformar por separado as figuras do grupo (enriba á dereita) sen desagrupalo, despois deseleccione e seleccione o grupo de forma normal para comprobar que aínda está agrupado. - - Recheo e trazo + + Recheo e trazo - - + + - Moitas das funcións de Inkscape están dispoñibles a través de caixas de diálogo. Probablemente a forma máis sinxela de pintar un obxecto con algunha cor é abrir a caixa de diálogo Paleta de mostras desde o menú Ver (ou premer Maiús+Ctrl+W), seleccionar un obxecto, e premer nunha cor para pintalo (cambia a súa cor de recheo). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Pero é máis potente a caixa de diálogo Recheo e trazo do menú Obxecto (ou prema Maiús+Ctrl+F). Seleccione a figura de embaixo e abra a caixa de diálogo de Recheo e trazo. - - - + + + - + Verá que a caixa de diálogo ten tres lapelas: Recheo, Pintar o trazo, e Estilo do trazo. A lapela Recheo permítelle modificar o recheo (interior) dos obxectos seleccionados. Se usa os botóns que están xusto debaixo da lapela, poderá seleccionar tipos de recheo, incluindo non pintar (o botón do X), recheo de cor uniforme, así como degradados lineais ou radiais. Na figura de enriba marcouse o botón de recheo uniforme. - - + + - + Máis abaixo pode ver un conxunto de selectores de cor, cada un na súa propia lapela: RGB, CMYK, HSL, e a Roda. Quizais o máis útil sexa o selector de Roda, no que pode rotar o triángulo para elixir un matiz na roda, e despois seleccionar unha sombra dese matiz dentro do triángulo. Todos os selectores de cor conteñen un control desprazable para definir o alfa (opacidade) dos obxectos seleccionados. - - + + - + Cando selecciona un obxecto, o selector de cor actualízase para mostrar o seu recheo e trazo (cando hai varios obxectos seleccionados, a caixa de diálogo mostra a cor media). Xogue con estes exemplos ou cree o seu propio: - - - - - - - - - + + + + + + + + + - + Se usa a lapela Pintar o trazo, poderá eliminar o trazo (contorno) do obxecto, ou asignarlle calquera cor ou transparencia: - - - - - - - - - - + + + + + + + + + + - + A última lapela, Estilo do trazo, permítelle definir a largura e outros parámetros do trazo: - - - - - - - - - + + + + + + + + + - + Por último, en troques de cor uniforme, pode usar degradados para os recheos e/ou os trazos: @@ -497,45 +502,45 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + Cando cambia dunha cor uniforme ao degradado, o novo degradado usa a cor uniforme anterior, indo de opaco a transparente. Cambie á ferramenta Degradado (Ctrl+F1) para arrastrar as asas de degradado — os controis conectados por liñas e que definen a dirección e a lonxitude do degradado. Cando se selecciona calquera das asas de degradado (resáltase en azul), o diálogo de Recheo e trazo define a cor desa asa en vez da cor de todo o obxecto seleccionado. - - + + - + Outra forma útil para cambiar unha cor dun obxecto é usando a ferramenta Contagotas (F7). Simplemente prema en calquera parte do debuxo con esta ferramenta, e a cor seleccionada asignaráselle ao recheo do obxecto seleccionado (Maiús+clic asignaralle a cor ao trazo). - - Duplicación, aliñamento, distribución + + Duplicación, aliñamento, distribución - - + + - + Unha das operacións máis comúns é duplicar un obxecto (Ctrl+D). O duplicado sitúase exactamente enriba do orixinal e aparece xa seleccionado, así que pode arrastralo co rato ou cas teclas das frechas. Para practicar, intente encher a liña con copias deste cadrado negro: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -557,192 +562,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Orde-Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Orde-Z - - + + - + - O termo orde-Z refírese á orde de superposición dos obxectos dun debuxo, é dicir, indica que obxectos están enriba e ocultan a outros. As dúas ordes do menú Obxecto, «Elevar á cima» (a tecla Inicio) e «Baixar ao fondo» (a tecla Fin), moverán os obxectos seleccionados á cima de todo ou ao fondo de todo da orde-Z da capa actual. Outras dúas ordes, «Elevar» (Re Páx) e «Baixar» (Av Páx), subirán ou baixarán a selección só un nivel, é dicir, moverán a selección ata sobrepasar un obxecto non seleccionado na orde-Z (só ten en conta aos obxectos que se superpoñen á selección; se nada se superpón ca selección, «Elevar» e «Baixar» moverán a selección ata a cima ou ata o fondo). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Practique usando estas ordes para inverter a orde-Z dos obxectos de embaixo, de xeito que a elipse da esquerda de todo estea na cima e a que está máis á dereita estea no fondo: - - - - - - - - + + + + + + + + - + Un atallo de selección moi útil é a tecla Tab. Se non hai nada seleccionado, selecciona o obxecto que está ao fondo de todo; en outro caso selecciona o obxecto que está sobre os obxectos seleccionados segundo a orde-Z. Maiús+Tab funciona ao revés, comeza no obxecto da cima e continúa cara abaixo. Xa que os obxectos que creou se engaden á cima da pila, se preme Maiús+Tab sen ter nada seleccionado seleccionarase o último obxecto que creou. Practique o uso das teclas Tab e Maiús+Tab na pila de elipses de enriba. - - Seleccionar detrás e arrastrar a selección + + Seleccionar detrás e arrastrar a selección - - + + - + Que se pode facer se o obxecto que necesita está oculto detrás de outro obxecto? É posible que aínda poida ver o obxecto do fondo se o que ten enriba é (parcialmente) transparente, pero se preme nel seleccionará o obxecto de enriba e non o que necesita. - - + + - + Para isto temos Alt+clic. A primeira vez que se executa Alt+clic selecciónase o obxecto que está na cima igual que o fai o clic normal. Aínda así a seguinte execución de Alt+clic no mesmo lugar seleccionará o obxecto que está debaixo do que está na cima; na seguinte execución seleccionarase o obxecto que está debaixo do anterior, etc. Deste xeio varias execucións seguidas de Alt+clic percorrerán, de forma circular e de arriba cara abaixo, toda a pila de obxectos de orde-Z do punto onde premeu. Cando se chega ao obxecto do fondo, a seguinte execución de Alt+clic seleccionará outra vez o obxecto da cima. - - + + - + [Se está en Linux, pode ser que Alt+clic non funcione como esperaba. En vez diso, pode que estea movendo toda a fiestra de Inkscape. Isto ocorre porque o xestor de fiestras reservou Alt+clic para unha acción diferente. A solución é ir á configuración de Comportamento de fiestras do xestor de fiestras, e desactivar o atallo de teclado, ou cambialo para que use a tecla Meta (tamén chamada tecla Windows), para que Inkscape e outros aplicativos poidan usar a tecla Alt sen problemas.] - - + + - + Isto está ben, pero unha vez que ten seleccionado un obxecto que está detrás de outros, que pode facer con el? Pois pode usar as teclas para transformalo ou pode arrastrar as asas de selección. Aínda así arrastrar o propio obxecto volverá seleccionar o obxecto que está na cima (premer e arrastrar deseñouse para funcionar así — primeiro selecciona o obxecto (da cima) que está debaixo do cursor, e despois arrastra a selección). Para dicirlle a Inkscape que arrastre a selección actual sen seleccionar nada máis use Alt+arrastrar. Isto moverá a selección actual sen importar a onde arrastre o rato. - - + + - + Practique Alt+clic e Alt+arrastrar cas dúas figuras castañas que están debaixo do rectángulo verde transparente: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Conclusión + + Conclusión - - + + - + - Isto conclúe o titorial de Fundamentos. Hai moito máis que isto sobre Inkscape, pero cas técnicas que se describen aquí, xa será capaz de crear imaxes sinxelas e útiles. Para aprender cousas máis complicadas, consulte o titorial Avanzado e os outros titoriais dispoñibles en Axuda > Titoriais. + Isto conclúe o titorial de Fundamentos. Hai moito máis que isto sobre Inkscape, pero cas técnicas que se describen aquí, xa será capaz de crear imaxes sinxelas e útiles. Para aprender cousas máis complicadas, consulte o titorial Avanzado e os outros titoriais dispoñibles en Axuda > Titoriais. - + @@ -772,8 +784,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+frecha arriba para desprazar + + Use Ctrl+frecha arriba para desprazar diff --git a/share/tutorials/tutorial-basic.hu.svg b/share/tutorials/tutorial-basic.hu.svg index 097d27a77..7d78318df 100644 --- a/share/tutorials/tutorial-basic.hu.svg +++ b/share/tutorials/tutorial-basic.hu.svg @@ -36,133 +36,133 @@ - - A Ctrl+le nyíl segít a lapozásban + + A Ctrl+le nyíl segít a lapozásban - + ::BEVEZETÉS - - + + Az alábbi írás bemutatja az Inkscape használatának alapjait. Mivel ez az ismertetÅ‘ is egy szabályos Inkscape-dokumentum, így azon túl hogy nézegetheti, szerkesztheti és másolhat belÅ‘le, vagy el is mentheti. - - + + A Bevezetés bemutatja a rajzvászon mozgatását, a dokumentumok kezelését, az alakzateszközök alapvetÅ‘ használatát, a kijelölési módszereket, a kijelölt objektumok átalakítását, a csoportosítást, a kitöltés és a körvonal beállításait, továbbá az igazítást és a z tengely fogalmát. A Segítség menüben található további ismertetÅ‘k részletesebben tárgyalnak egyes témaköröket. - - A rajzvászon mozgatása + + A rajzvászon mozgatása - - + + A rajzvászon mozgatására többféle lehetÅ‘ség is adódik. Görgethet billentyűzettel, a Ctrl+nyíl billentyűkombinációval. (Ki is próbálhatja, görgesse lejjebb ezt a dokumentumot.) A középsÅ‘ egérgomb vagy a gördítÅ‘sáv (melyet a Ctrl+B lenyomásával megjeleníthet és elrejthet) is használható e célra. Az egérgörgÅ‘ a vásznat függÅ‘legesen, a Shift billentyű nyomva tartása mellett vízszintesen mozgatja. - - Nagyítás és kicsinyítés + + Nagyítás és kicsinyítés - - + + A nagyítást legegyszerűbben a - és a + (vagy =) billentyűkkel változtathatja. A Ctrl+középsÅ‘ gomb vagy a Ctrl+jobb gomb is nagyít, a Shift+középsÅ‘ gomb vagy a Shift+jobb gomb kicsinyít. Az egérgörgÅ‘ a Ctrl nyomva tartásával szintén a nagyítást változtatja. A nagyítás beviteli mezÅ‘jébe (az ablak jobb alsó sarkában) beírható, majd Enterrel érvényesíthetÅ‘ a pontos nagyítási százalékérték. A Nagyító eszközzel (balra, az eszköztáron) a nagyítandó terület körberajzolható. - - + + Az Inkscape emlékszik az adott munkamenetben végrehajtott nagyítási műveletekre. A ` billentyűvel visszatérhet az elÅ‘zÅ‘ nagyításhoz, a Shift+` kombinációval pedig elÅ‘re lépkedhet a nagyítási elÅ‘zményekben. - - Az Inkscape eszközei + + Az Inkscape eszközei - - + + A bal oldalon található függÅ‘leges eszköztár tartalmazza az Inkscape rajzoló és szerkesztÅ‘ eszközeit. Az ablak felsÅ‘ részén, a menü alatt található az általános parancsgombokat tartalmazó Parancssáv és az eszközfüggÅ‘ gombokat tartalmazó EszközvezérlÅ‘sáv. Az ablak alján látható Ãllapotsor hasznos tanácsokkal és üzenetekkel szolgál munka közben. - - + + Sok művelet billentyűparancsokkal is végrehajtható. Ezek teljes listáját a Segítség > Billentyű- és egérkombinációk leírása menüpontban találja. - - Dokumentumok létrehozása és kezelése + + Dokumentumok létrehozása és kezelése - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Az Inkscape saját formátuma az SVG (Scalable Vector Graphics). Ez egy – a grafikai szoftverek által széleskörűen támogatott – nyílt szabvány. Az SVG az XML leírónyelven alapul, így bármely szöveg- vagy XML-szerkesztÅ‘vel (az Inkscape-en kívül, merthogy az is az) szerkeszthetÅ‘. Az SVG mellett több más formátum (EPS, PNG) importjára és exportjára is lehetÅ‘séget ad a program. - - + + Az Inkscape minden dokumentumot külön ablakban nyit meg. Ezen ablakok között az ablakkezelÅ‘vel (pl. Alt+Tab) vagy az Inkscape nyitott dokumentumablakok között léptetÅ‘ gyorsbillentyűjével (Ctrl+Tab) válthat. (Gyakorlásként most hozzon létre egy új dokumentumot, és váltson az új és ezen dokumentum között.) Megjegyzés: Az Inkscape ezen ablakokat úgy kezeli, ahogyan a webböngészÅ‘k a lapokat, azaz a Ctrl+Tab csak ugyanazon folyamat dokumentumaira működik. Ha Ön több fájlt nyit meg egy fájlkezelÅ‘bÅ‘l, vagy több Inkscape-folyamatot indít el egy ikonnal, akkor ez a módszer nem fog működni. - - Alakzatok készítése + + Alakzatok készítése - - + + Itt az ideje rajzolni néhány alakzatot! Az eszköztáron kattintson a Téglalap eszközre (vagy nyomja le az F4 billentyűt), majd kattint-és-húz módszerrel rajzoljon egy új dokumentumba, vagy ide: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -170,293 +170,298 @@ often!) and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Ezek az eszközök közös néven az alakzateszközök. Minden alakzathoz tartozik egy vagy több, négyszög vagy kör alakú fogantyú; próbálja mozgatni Å‘ket, és figyelje meg, hogy az alakzatok miként változnak. Alakzatok módosításának egy más módját nyújtja az EszközvezérlÅ‘sáv; az itt található vezérlÅ‘k az éppen kijelölt alakzatra hatnak (azaz amelynek láthatók a fogantyúi), valamint alapértelmezett értékként az újonnan létrehozott alakzatokra. - - + + A legutóbb végrehajtott műveletet a Ctrl+Z lenyomásával vonhatja vissza. (Vagy ha meggondolja magát, a Shift+Ctrl+Z kombinációval újra végrehajthatja a visszavont műveletet.) - - Mozgatás, átméretezés, forgatás + + Mozgatás, átméretezés, forgatás - - + + A leggyakrabban használt Inkscape-eszköz a KijelölÅ‘ eszköz. Kattintson az eszköztáron a legfelsÅ‘ gombra (egy nyilat ábrázol), vagy nyomja meg az F1 vagy a Szóköz billentyűt. Ekkor ki tud jelölni bármilyen objektumot a vásznon. Kattintson az alábbi négyszögre. - - - + + + Nyolc nyíl alakú fogantyút láthat az objektum körül. Ilyenkor lehetÅ‘sége van: - - - + + + húzással mozgatni az objektumot (a Ctrl nyomva tartásával kényszerítheti a vízszintes vagy függÅ‘leges irányt); - - - + + + valamely fogantyú húzásával átméretezni az objektumot (a Ctrl nyomva tartásával tarthatja meg az eredeti oldalarányt). - - + + Ha újra a négyszögre kattint, a fogantyúk megváltoznak. Ãgy lehetÅ‘sége van: - - - + + + a sarokfogantyúk mozgatásával forgatni az objektumot (a Ctrl nyomva tartása mellett 15°-onként forgathat; a kereszt alakú jel elmozgatásával módosíthatja a forgás középpontját); - - - + + + valamely nem sarokponti fogantyú húzásával megdönteni (nyírni) az objektumot. (a Ctrl nyomva tartásával kényszerítheti, hogy 15°-os lépésekkel történjen a nyírás). - - + + A KijelölÅ‘ eszköz EszközvezérlÅ‘sávján (a rajzvászon felett) levÅ‘ beviteli mezÅ‘kben pontosan is megadhatja a kijelölt objektumok koordinátáit (X és Y) és méretét (Sz és M). - - Ãtalakítás billentyűzettel + + Ãtalakítás billentyűzettel - - + + Az Inkscape többek közt a billentyűzettel való nagyfokú kezelhetÅ‘ségében különbözik más vektorgrafikai programoktól. Alig van olyan parancs vagy művelet, amelyet billentyűzettel ne lehetne végrehajtani, és az objektumok átalakítása sem kivétel. - - + + Billentyűzettel mozgathatja (kurzormozgató nyilak), méretezheti (< és >) és forgathatja ([ és ]) az objektumokat. Az alapértelmezett mozgatási vagy méretezési lépésköz 2 px; a Shift nyomva tartásával ennek tízszerese az elmozdítás. A Ctrl+> és a Ctrl+< hatása 200%-os, illetve 50%-os átméretezés. A forgatás alapértelmezetten 15°-onként, a Ctrl nyomva tartásával 90°-onként történik. - - + + De talán a leghasznosabb a pixelmértékű átalakítás, mely a fenti billentyűk és az Alt együttes használatával valósítható meg. Például az Alt+nyíl a kijelölést az aktuális nagyítás szerinti 1 pixellel mozgatja el (azaz 1 képernyÅ‘pixellel, ne keverje össze a px mértékegységgel, amely az SVG hosszúsági mértékegysége, és független a nagyítástól.) Ezt úgy kell érteni, hogy ha növeli a nagyítást, akkor egy Alt+nyíl lenyomás kisebb abszolút elmozdulást eredményez, ám a képernyÅ‘n az továbbra is egy pixelnyi mozgásnak látszik. Ezáltal lehetÅ‘ség van egy objektumot tetszÅ‘leges pontossággal elhelyezni, ehhez csak a nagyítást kell megfelelÅ‘en növelni vagy csökkenteni. - - + + Hasonlóan, az Alt+> és az Alt+< a kijelölés látható méretét egy képernyÅ‘pixellel változtatja meg. Az Alt+[ és az Alt+] forgatás a kijelölésnek a középponttól legtávolabb esÅ‘ pontját mozgatja el egy képernyÅ‘pixellel. - - + + Megjegyzés: Linux-felhasználók esetleg nem az elvárt működést tapasztalják az Alt+nyíl és még néhány billentyűkombináció esetében, ha az ablakkezelÅ‘jük elfogja az Inkscape elÅ‘l ezeket a billentyűleütéseket. Az ablakkezelÅ‘ beállításainak megfelelÅ‘ megváltoztatása segíthet a probléma megoldásában. - - Többszörös kijelölés + + Többszörös kijelölés - - + + Egymás utáni Shift+kattintásokkal tetszÅ‘leges számú objektumot ki tud jelölni, vagy egérhúzással körbe is rajzolhatja a kijelölendÅ‘ objektumokat; ez utóbbi a területkijelölés. (A KijelölÅ‘ eszköz megrajzolja a területet, amint egy üres területen kattintva húzni kezdi az egeret; viszont ha nyomva tartja a Shift billentyűt, mielÅ‘tt elkezdi a húzást, akkor a kezdÅ‘pont bárhol lehet, mindenképpen területkijelölés készül.) Próbaképpen jelölje ki mind a három alábbi alakzatot: - - - - - + + + + + Jelölje ki területkijelöléssel (húzás vagy Shift+húzás) az alábbi két ellipszist úgy, hogy a négyszög ne kerüljön bele a kijelölésbe: - - - - - + + + + + A kijelölésben minden különálló objektum körül egy kijelölésjelzÅ‘ látható – alapértelmezetten egy szaggatott vonalú, téglalap alakú keret. Ezen jelzÅ‘k segítségével könnyen átlátható, hogy mi van és mi nincs éppen kijelölve. Például ha kijelöli a két ellipszist és a négyszöget is, akkor e jelzÅ‘k nélkül nehéz lenne megállapítani, hogy az ellipszisek ki vannak-e jelölve vagy sem. - - + + Egy objektumot Shift+kattintással vehet ki a kijelölésbÅ‘l. Jelölje ki mindhárom fenti objektumot, majd Shift+kattintással vegye ki a kijelölésbÅ‘l a két ellipszist, hogy csak a négyszög maradjon kijelölve. - - + + Az Esc billentyű megszüntet minden kijelölést. A Ctrl+A kijelöli az összes objektumot az aktuális rétegen (ha nem hozott létre réteget, akkor ez megfelel a dokumentum összes objektumának). - - Csoportosítás + + Csoportosítás - - + + KülönbözÅ‘ objektumokat csoportba is foglalhat. Egy csoport mozgatáskor vagy átalakításkor úgy viselkedik, mint egy egyszerű objektum. Lent, a bal oldalon három különálló objektum látható; három ugyanilyen objektum a jobb oldalon csoportba van foglalva. Próbálja húzással elmozgatni a csoportot. - - - - + + + + - - + + Egy vagy több kijelölt objektumot a Ctrl+G billentyűkkel foglalhat csoportba. A Ctrl+U kombinációval pedig felbonthatja a kijelölt csoportokat. Más objektumokhoz hasonlóan a csoportok maguk is csoportba foglalhatók; ilyen rekurzív csoportok tetszÅ‘leges mélységben készíthetÅ‘k. Viszont a Ctrl+U csak a kijelölt csoport legfelsÅ‘ szintjét szünteti meg; így ha egy ilyen többszörös csoportot teljesen fel akar bontani, akkor ismételten használnia kell a Ctrl+U billentyűket, a csoport mélysége szerint. - - + + De egy csoportban levÅ‘ objektum szerkesztéséhez nem is kell felbontania a csoportot. Csak válassza ki Ctrl+kattintással az objektumot, és már szerkesztheti is, a csoporttól függetlenül. Ctrl+Shift+kattintásokkal egyidejűleg jelölhet ki különféle objektumokat (bármely csoportban vagy azon kívül is). Próbálja mozgatni vagy átalakítani valamelyik alakzatot a fenti csoportban (a jobb oldalon) anélkül, hogy a csoportot felbontaná, majd szüntesse meg a kijelölést, ezután újra jelölje ki a csoportot. Ãgy láthatja, hogy az objektumok továbbra is csoportban vannak. - - Kitöltés és körvonal + + Kitöltés és körvonal - - + + - Számos művelet párbeszédablakok segítségével végezhetÅ‘. Egy objektum kifestésének talán a legegyszerűbb módja, ha a Nézet menübÅ‘l (vagy a Shift+Ctrl+W billentyűkkel) megnyitja a Színminták párbeszédablakot, kijelöl egy objektumot, majd választ egy mintát a kifestéshez (a kitöltés színének megváltoztatásához). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Még hasznosabb az Objektum menübÅ‘l (vagy a Shift+Ctrl+F billentyűkkel) nyitható Kitöltés és körvonal párbeszédablak. Jelölje ki az alábbi alakzatot, és nyissa meg a Kitöltés és körvonal ablakát. - - - + + + - + A párbeszédablakon három lapot láthat: Kitöltés, Körvonalrajzolat és Körvonalstílus. A Kitöltés lapon a kijelölt objektumok (belsÅ‘) kitöltése állítható be. A fülek alatti gombokkal módosítható a kitöltés típusa: nincs kitöltés (az X gomb), egyenletes szín, lineáris vagy sugárirányú színátmenet. A fenti alakzat kijelölésekor az egyenletes szín aktiválódik. - - + + - + A gombok alatt, egy-egy külön lapon találhatók a színválasztók: RGB, CMYK, HSL és Kerék. Valószínűleg a Kerék a legkényelmesebben használható színválasztó, ahol a háromszög forgatásával a kerékrÅ‘l kiválasztható egy szín, majd a háromszögben megadható a szín árnyalata. Mindegyik színválasztóhoz tartozik egy, a kijelölt objektumok alfaértékét (átlátszóságát) szabályozó csúszka. - - + + - + Ha kijelöl egy objektumot, a színválasztó értékei az aktuális objektum színének megfelelÅ‘en változnak (többszörös kijelölés esetén a színek átlagának megfelelÅ‘en). Próbálgassa az alábbi alakzatokkal: - - - - - - - - - + + + + + + + + + - + A Körvonalrajzolat lapon eltávolíthatja egy objektum körvonalát, vagy beállíthatja a körvonal színét és átlátszóságát: - - - - - - - - - - + + + + + + + + + + - + A Körvonalstílus lapon tudja beállítani a körvonal szélességét és egyéb tulajdonságait: - - - - - - - - - + + + + + + + + + - + Egyenletes szín helyett színátmenet is választható mind a kitöltéshez, mind a körvonalhoz: @@ -497,45 +502,45 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + Ha egyszínű kitöltésrÅ‘l színátmenetre vált, a kezdeti színátmenet az eredeti színen alapul, annak teljesen átlátszatlanból teljesen átlátszóba való átmenete lesz. Váltson a Színátmenet eszközre (Ctrl+F1), és a színátmenet fogantyúival alakíthatja a színátmenetet – a vezérlÅ‘ket vonalak kötik össze, melyek meghatározzák a színátmenet irányát és hosszát. Ha bármelyik színátmenet-fogantyút kijelöli (kék szín jelzi), a Kitöltés és körvonal párbeszédablakban az ehhez a fogantyúhoz tartozó színt lehet beállítani, nem pedig az egész kijelölt objektumét. - - + + - + A Színpipetta eszközzel (F7) is kényelmesen módosítható az objektumok színe. Csak kattintson az eszközzel bárhová, és a kijelölt objektum kitöltése (Shift+kattintás esetén a körvonal színe) a felszedett szín lesz. - - KettÅ‘zés, igazítás és elrendezés + + KettÅ‘zés, igazítás és elrendezés - - + + - + Az egyik leggyakoribb művelet egy objektum megkettÅ‘zése (Ctrl+D). A másodpéldány pontosan az eredeti felett jön létre, majd egérrel vagy billentyűzettel áthelyezhetÅ‘ máshová. Gyakorlásképpen próbálja meg kitölteni a sort a fekete négyszög másolataival: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -557,192 +562,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z tengely + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z tengely - - + + - + - A z tengely kifejezés a rajzon egymásra helyezett objektumok sorrendjére utal, vagyis hogy melyik objektum van felül, és takarja le a többit. Az Objektum menü két parancsa, a Felülre helyezés (a Home billentyű) és az Alulra helyezés (az End billentyű) a kijelölt objektumokat az aktuális réteg z tengelyén legfelülre vagy legalulra mozgatja. További két parancs, a Feljebb helyezés (PgUp) és a Lejjebb helyezés (PgDn) csak egy lépéssel mozgatja fel vagy le az objektumot, vagyis egy nem kijelölt objektumon túlra mozgatja a z tengelyen (csak azon objektumokon túl, melyek fedésben vannak a kijelölttel; ha nincs ilyen objektum, akkor rendre legfelülre vagy legalulra). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Gyakorlásképpen próbálja ezekkel a parancsokkal megfordítani az alábbi objektumok sorrendjét a z tengelyen úgy, hogy a bal oldali ellipszis legyen a legfelsÅ‘, a jobbra levÅ‘ pedig a legalsó: - - - - - - - - + + + + + + + + - + Nagyon jól használható kijelölésre a Tab billentyű is. Ha semmi nincs kijelölve, akkor a legalsó objektumot jelöli ki; egyébként pedig a z tengelyen a kijelölt objektumok felett levÅ‘t. A Shift+Tab fordítva működik: a legfelsÅ‘ objektumtól indul, és lefelé halad. Mivel egy újonnan létrehozott objektum mindig legfelülre kerül, így ha olyankor nyomja meg a Shift+Tab kombinációt, amikor semmi sincs kijelölve, akkor ezzel a legutóbb létrehozott objektumot jelölheti ki. Próbálgassa a Tab és a Shift+Tab billentyűket a fenti ellipszisekkel. - - Takart objektum kijelölése és kijelölt objektum húzása + + Takart objektum kijelölése és kijelölt objektum húzása - - + + - + ElÅ‘fordulhat, hogy éppen egy másik takarásában levÅ‘ objektummal szeretne dolgozni. Az alsó objektum még látható is lehet, ha a felette levÅ‘ (részlegesen) átlátszó, de rákattintva csak a felsÅ‘ objektumot tudja kijelölni, az alatta levÅ‘t nem. - - + + - + Ekkor használható az Alt+kattintás. Az elsÅ‘ Alt+kattintás a felsÅ‘ objektumot jelöli ki, ahogy a rendes kattintás is. De a következÅ‘ Alt+kattintás ugyanott már az alatta levÅ‘t, a következÅ‘ az az alattit és így tovább. Tehát egymás utáni Alt+kattintásokkal egy adott helyen rendre kijelölhetÅ‘k az ott a z tengely vonatkozásában egymáson elhelyezkedÅ‘ objektumok. A legalsó objektumot elérve a következÅ‘ Alt+kattintás újra a legfelsÅ‘ objektumot jelöli ki. - - + + - + [Linuxon az Alt+kattintás esetleg nem a leírtaknak megfelelÅ‘en működik, hanem az egész Inkscape-ablakot mozgatja. Ez akkor fordulhat elÅ‘, ha az ablakkezelÅ‘ben az Alt+kattintáshoz valamilyen művelet van rendelve. Keresse meg az ablakkezelÅ‘ beállításaiban az ablakműveletekre vonatkozó részt, és vagy kapcsolja ki a módosítóbillentyűt, vagy állítsa át a Meta (Windows) billentyűre, így az Inkscape és más alkalmazások is szabadon használhatják az Alt billentyűt.] - - + + - + Mindez szép és jó, de mit lehet kezdeni egy másik objektum alatt elhelyezkedÅ‘, kijelölt objektummal? Billentyűzettel alakítható, és egérrel a kijelölÅ‘ fogantyúi is mozgathatók. Viszont ha megpróbálja az objektumot magát egérrel arrébb húzni, akkor a kijelölés megszűnik, és a legfelsÅ‘ objektum válik kijelöltté (ahogy a kattintás-és-húzásnak működni is kell – kijelöli a kurzor alatti (legfelsÅ‘) objektumot, és mozgatja a kijelölést). Ha egy jelenleg éppen kijelölt objektumot úgy szeretne húzni, hogy a kijelölés ne változzon meg a kattintás pillanatában, akkor az Alt+húzás a megfelelÅ‘ módszer. Ez mindig az aktuális kijelölést mozgatja, attól függetlenül, hogy az egérrel hová kattintva kezdi a húzást. - - + + - + Próbálja ki az Alt+kattintást és az Alt+húzást az átlátszó, zöld négyszög alatti barna alakzatokkal: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Zárszó + + Zárszó - - + + - + - Ezzel véget is ért a Bevezetés. Az Inkscape a fentieknél jóval több lehetÅ‘séget nyújt, ám a bemutatott módszerek segítségével Ön már képes egyszerű, de használható grafikákat készíteni. Néhány témakörrÅ‘l részletesebben olvashat a Segítség > IsmertetÅ‘k menüben található többi leírásban, például a Haladó címűben. + Ezzel véget is ért a Bevezetés. Az Inkscape a fentieknél jóval több lehetÅ‘séget nyújt, ám a bemutatott módszerek segítségével Ön már képes egyszerű, de használható grafikákat készíteni. Néhány témakörrÅ‘l részletesebben olvashat a Segítség > IsmertetÅ‘k menüben található többi leírásban, például a Haladó címűben. - + @@ -772,8 +784,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - A Ctrl+fel nyíl segít a lapozásban + + A Ctrl+fel nyíl segít a lapozásban diff --git a/share/tutorials/tutorial-basic.id.svg b/share/tutorials/tutorial-basic.id.svg index ca56a44ce..4d4e26113 100644 --- a/share/tutorials/tutorial-basic.id.svg +++ b/share/tutorials/tutorial-basic.id.svg @@ -36,133 +36,133 @@ - - Gunakan Ctrl+panah bawah untuk menggulung + + Gunakan Ctrl+panah bawah untuk menggulung - + ::DASAR - - + + Tutorial ini menampilkan penggunaan dasar dari Inkscape. Ini adalah dokumen Inskscape reguler yang bisa anda lihat, atur, salin, atau simpan. - - + + Tutorial Dasar ini meliputi navigasi kanvas, mengatur dokumen, dasar shape tool, tehnik seleksi, transformasi obyek dengan selector, grouping, mengatur fill and stroke, alignment, dan z-order. Untuk bahasan lebih dalam, lihat tutorial lain di menu Help. - - Menggulung kanvas + + Menggulung kanvas - - + + Banyak cara untuk menggulung (scroll) kanvas dokumen. Bisa dengan Ctrl+tombol panah pada keyboard. (Cobalah untuk menggulung dokumen ini kebawah.) Anda juga bisa menyeret kanvas ini dengan tombol tengah pada tetikus (mouse). Atau, anda bisa menggunakan scrollbar (tekan Ctrl+B untuk menampilkan atau menyembunyikannya). Roda tengah tetikus anda juga bisa digunakan untuk menggulung secara vertikal; gunakan Shift dengan roda untuk menggulung secara horisontal - - Zum kedalam atau keluar + + Zum kedalam atau keluar - - + + Cara paling mudah untuk zum adalah menekan tombol - dan +. Anda juga bisa menggunakan Ctrl+klik tengah atau Ctrl+klik kanan untuk zum masuk, Shift+klik tengah atau Shift+klik tengah untuk zum keluar, atau memutar roda mouse sambil menekan tombol Ctrl. Atau, anda bisa menggunakan daerah masukan zum pada aplikasi (terletak di bawah kanan jendela dokumen ini), ketikkan nilai zum yang anda inginkan dalam %, kemudian tekan Enter. Kami juga memiliki Zoom tool (pada toolbar sebelah kiri) untuk melakukan zum dengan menyeretnya ke daerah yang ingin dizum. - - + + Inkscape juga menyimpan sejarah level zum yang anda telah gunakan setiap sesi. Tekan tombol ` untuk kembali ke zum sebelumnya, atau Shift+` untuk zum selanjutnya. - - Peralatan Inkscape + + Peralatan Inkscape - - + + Toolbar vertikal di sebelah kiri menampilkan peralatan menggambar dan mengedit Inkscape. Pada bagian atas dari jendela, dibawah menu, terdapat Commands bar dengan tombol command biasa, dan Tool Controls bar dengan kontrol spesifik untuk masing-masing peralatan. status bar pada bagian bawah jendela akan menampilkan petunjuk dan pesan yang berguna saat anda bekerja. - - + + Banyak operasi yang bisa dilakukan dengan shortcut keyboard. Bukalah Help > Keys and Mouse untuk melihat referensi lengkapnya. - - Membuat dan mengatur dokumen + + Membuat dan mengatur dokumen - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape menggunakan format SVG (Scalable Vector Graphics) sebagai berkasnya. SVG adalah standar terbuka yang didukung oleh piranti lunak grafis. Berkas SVG didasari oleh XML dan bisa diedit dengan editor teks apa saja ataupun editor XML (yang tentu terpisa dari Inkscape). Selain SVG, Inkscape juga bisa mengimpor dan mengekspor beberapa format lain (EPS, PNG) - - + + Inkscape membuka jendela yang berbeda untuk tiap dokumen. Anda bisa berpindah-pindah antara jendela dengan menggunakan window manager anda (contohnya dengan Alt+Tab) atau bisa juga dengan shortcut Inkscape Ctrl+Tab, yang nantinya akan menampilkan semua jendela dokumen yang terbuka. (Buatlah sebuah dokumen baru dan berpindah-pindahlah antara dokumen baru tersebut dengan dokumen ini untuk latihan.) Pesan: Inkscape memperlakukan jendela-jendela ini seperti tab pada web browser, artinya, Ctrl+Tab hanya bekerja pada dokumen yang prosesnya sama. Jika anda membuka banyak berkas atau menjalankan lebih dari satu proses Inkscape, itu tidak akan bekerja. - - Membuat bentuk + + Membuat bentuk - - + + Saatnya untuk sedikit bentuk yang indah! Klik pada Rectangle tool di toolbar (atau tekan F4) kemudian klik-dan-seret, entah ke dokumen kosong baru atau disini: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -170,293 +170,298 @@ often!) and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Peralatan ini dikenal sebagai shape tools. Tiap bentuk (shape) yang anda buat menampilkan satu atau lebih handles berbentuk berlian; cobalah menyeret mereka untuk melihat bagaimana mereka bekerja. Panel Controls untuk shape tool adalah cara lain untuk mengatur bentuk; Panel tersebut mempengaruhi bentuk yang diseleksi (contohnya yang menampilkan handles) and dan mendefinisikan bawaan yang akan digunakan jika bentuk baru dibuat. - - + + Untuk membatalkan perubahan yang terakhir anda lakukan (undo), tekan Ctrl+Z. (Atau jika anda berubah pikiran, anda ingin kembali ke perubahan terakhir, redo, anda bisa menggunakan Shift+Ctrl+Z.) - - Memindahkan, mengatur skala, memutar + + Memindahkan, mengatur skala, memutar - - + + Peralatan inkscape yang paling sering digunakan adalah Selector. Klik tombol paling atas (yang bertanda panah) pada toolbar, atau tekan F1 atau Space. Kini anda bisa memilih obyek apa saja pada kanvas. Klik persegi dibawah. - - - + + + Anda akan melihat empat handles berbentuk panah muncul di sekitar obyek. Kini anda bisa: - - - + + + Memindahkan obyek dengan menyeretnya. (Tekan Ctrl untuk membatasi pergerakan hanya pada horisontal dan vertikal.) - - - + + + Mengatur skala, besar kecilnya obyek, dengan menyeret handle apa saja. (Tekan Ctrl untuk mempertahankan rasio panjang/lebar asal.) - - + + Sekarang klik persegi tersebut lagi. Bentuk handlenya berubah. Kini anda bisa: - - - + + + Memutar obyek dengan menyeret handles pada sudut. (Tekan Ctrl untuk membatasi pergerakan setiap 15 derajat. Seret tanda silang ke posisi tengah dari putaran/rotasi yang anda inginkan.) - - - + + + Skew (shear) obyek dengan menyeret handles yang bukan sudut. (Tekan Ctrl untuk membatasi pergerakan setiap 15 derajat.) - - + + Saat masih di Selector, anda bisa juga menggunakan masukan nomor yang terdapat pada Controls bar (disebelah atas kanvas) untuk mengatur nilai eksak bagi koordinat (X dan Y) dan ukuran (W dan H) dari seleksi. - - Merubah dengan tombol keyboard + + Merubah dengan tombol keyboard - - + + Salah satu fitur Inkscape yang jarang ditemui dari editor vektor lainnya adalah aksesibilitas keyboard. Sangat sulit menemukan perintah atau aksi yang tidak bisa dilakukan oleh keyboard. Merubah (transforming) obyek juga termasuk. - - + + Anda bisa menggunakan keyboard untuk memindahkan (tombol arrow/panah), mengubah ukuran (tombol < dan >), dan memutar (tombol [ dan ]) obyek. Pergerakan pindah dan skala bawaan adalah 2px; dengan Shift, anda bergerak 10 kali lipat. Ctrl+> dan Ctrl+< menaikkan atau menurunkan skala sampai 200% atau 50% dari asalnya. Rotasi/putaran bawaan adalah 15 derajat; dengan Ctrl, anda memutarnya 90 derajat. - - + + Tetapi, mungkin yang paling berguna adalah pixel-size transformations, yang dijalankan dengan Alt bersama tombol transform (perubahan). Sebagai contoh, Alt+arrows/panah akan memindahkan seleksi sebesar 1 pixel pada tingkat zum saat itu (atau 1 screen pixel - pixel pada layar, bukan pada program). Ini berarti jika anda melakukan zum masuk, satu kali Alt+arrow/panah akan menghasilkan pergerakan yang tampak kecil/pendek pada layar anda. Ini memungkinkan pemosisian obyek dengan tingkat presisi yang akurat dengan melakukan zum keluar atau kedalam sesuai yang diperlukan. - - + + Sedikit mirip, Alt+> dan Alt+< mengatur ukuran yang diseleksi sehingga ukuran yang nampak akan berubah per 1 screen pixel, dan Alt+[ dan Alt+] memutarnya sehingga titik paling jauh dari titik tengah akan bergerak per 1 screen pixel. - - + + Pesan: Pengguna Linux mungkin tidak bisa mendapatkan hasil yang diharapkan dengan Alt+arrow dan beberapa kombinasi tombol yang lain jika Window Manager mereka menangkap penekanan kombinasi tombol ini sebelum kombinasi tersebut ditangkap aplikasi Inkscape. Salah satu solusinya adalah mengatur ulang konfigurasi Window Manager. - - Seleksi lebih dari satu + + Seleksi lebih dari satu - - + + Anda bisa memilih nomor berapa saja dari obyek secara simultan dengan menggunakan Shift+click. Atau, anda juga bisa menyeret kursor di sekitar obyek-obyek yang ingin anda seleksi; ini disebut rubberband selection. (Selektor menghasilkan rubberband saat diseret ke daerah kosong, jika anda menekan Shift sebelum mulai menyeret, Inkscape akan selalu membuat rubberband.) Berlatihlah dengan menyeleksi tiga bentuk dibawah: - - - - - + + + + + Sekarang, gunakan rubberband (dengan menyeret atau Shift+drag/seret) untuk memilih dua lingkaran tanpa memilih persegi - - - - - + + + + + Setiap obyek individual yang dipilih menampilkan selection cue —, sebuah bingkai garis persegi. Cue/tanda ini memudahkan anda untuk melihat apakah obyek terpilih atau tidak. Contohnya, jika anda memilih dua lingkaran dan persegi, tanpa tanda tersebut anda akan sulit menebak apakah lingkaran tersebut terpilih/terseleksi atau tidak. - - + + Menggunakan Shift+klik pada obyek yang dipilih memisahkan dia dari seleksi. Pilih tiga obyek diatas, kemudian gunakan Shift+klik untuk memisahkan lingkaran dari seleksi dan menyisakan hanya persegi. - - + + Menekan tombol Esc memisahkan semua obyek yang sudah dipilih. Ctrl+A memilih semua obyek yang ada pada layer (jika anda tidak membuat layer, berarti semua obyek yang ada pada dokumen). - - Grouping + + Grouping - - + + Beberapa obyek bisa digabungkan menjadi satu group/grup. Sebuah group/grup bersifat layaknya sebuah obyek saat anda menyeret atau merubah bentuknya. Dibawah, tiga obyek disebelah kiri berdiri sendiri; obyek yang sama pada layar sebelah kiri sudah digrup. Cobalah menyeret yang segrup. - - - - + + + + - - + + Untuk membuat grup, pilihlah satu atau lebih obyek, dan tekan Ctrl+G. Untuk melepas satu atau lebih dari grup, tekan Ctrl+U. Sebuah grup yang sudah jadi masih bisa digrup lagi, seperti obyek yang lain; menghasilkan rantai grup yang sangat panjang. Meskipun begitu, Ctrl+U hanya melepas grup yang terakhir dibuat; Anda harus menekan Ctrl+U berkali-kali jika ingin melepas total sebuah grup yang terdiri dari banyak grup. - - + + Anda tidak perlu melepas grup jika hanya ingin mengedit sebuah obyek dalam grup. Gunakan Ctrl+klik pada objel tersebut, dan obyek tersebut akan terseleksi dan bisa diedit sendiri secara terpisah, atau Shift+Ctrl+klik pada beberapa obyek (diluar atau didalam grup) untuk memilih lebih dari satu seleksi tanpa harus digrup. Cobalah untuk memindahkan atau merubah bentuk masing-masing bentuh yang berada dalam satu grup (kanan atas) tanpa melepas grupnya, kemudian coba jalankan sebagai grup normal untuk melihat apakah obyek-obyek tersebut masih berada dalam satu grup. - - Fill dan stroke + + Fill dan stroke - - + + - Banyak fungsi Inkscape yang tersedia via dialogs. Mungkin yang paling sederhana adalah mengecat sebuah obyek dengan sebuah warna dengan membuka dialog Swatches dari menu View (atau tekan Shift+Ctrl+W), pilihlah sebuah obyek, kemudian klik swatch untuk mengecatnya (mengganti warna yang mengisinya/fill color). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Lainnya adalah dengan dialog Fill and Stroke dari menu Object (atau tekan Shift+Ctrl+F). Pilihlah bentuk dibawah ini dan buka dialog Fill and Stroke. - - - + + + - + Anda akan melihat dialog tersebut memiliki tiga tab: Fill, Stroke paint, dan Stroke style. Tab Fill membuat anda bisa mengedit fill (interior, warna isi) dari obyek yang terpilih. Menggunakan tombol dibawah tab tersebut, anda bisa memilih tipe fill, termasuk diantaranya tanpa fill (tombol dengan tulisan X), bisa dengan satu warna (flat color fill), atau gradiasi linear dan radial. Untuk bentuk diatas, tombol flat fill akan diaktifkan. - - + + - + Dibawahnya, anda bisa melihat koleksi dari color pickers, masing-masing dengan tabnya sendiri: RGB, CMYK, HSL, dan Wheel. Yang paling mudah mungkin Wheel picker, dimana anda bisa memutar segitiga untuk memilih hue pada wheel/roda/lingkaran, untuk kemudian memilih tingkat bayangan hue tersebut dalam segitiga. Semua color picker memiliki tombol geser untuk mengatur nilai alpha (opasitas) obyek yang dipilih. - - + + - + Kapanpun anda memilih sebuah objel, color picker langsung diperbaharui untuk menampilkan status Fill and Stroke obyek tersebut (untuk obyek lebih dari satu, dialog akan menampilkan warna average/standar.) Bereksperimenlah dengan sampel ini atau buatlah yang baru: - - - - - - - - - + + + + + + + + + - + Dengan menggunakan tab Stroke paint, anda bisa menghapus stroke (garis luar/pinggir) dari obyek, atau mengatur warna dan transparansinya: - - - - - - - - - - + + + + + + + + + + - + Tab terakhir, Stroke style, membuat anda bisa mengatur lebar dan parameter lain dari stroke: - - - - - - - - - + + + + + + + + + - + Terakhir, selain satu warna, anda juga bisa menggunakan gradients (gradiasi) untuk fill dan/atau stroke: @@ -497,45 +502,45 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + Saat anda berubah dari satu warna menjadi gradiasi, gradiasi yang baru diciptakan akan menggunakan warna sebelumnya, dari jelas menjadi transparan. Beralihlah ke Gradient tool (Ctrl+F1) untuk menyeret gradient handles — kontrol tersebut ditampilkan dengan sebuah garis yang menentukan arah dan panjang gradiasi. Setiap handle gradiasi dipilih (disorot dengan warna biru), dialog Fill and Stroke akan menata warna handle tersebut, bukan seluruh obyek. - - + + - + Salah satu cara lain untuk mengganti warna obyek adalah menggukana Dropper tool (F7). Hanya dengan mengklik bagian manapun dari gambar dengannya, warna yang dipilih akan diberikan ke Fill dari obyek tersebut (Shift+click untuk warna stroke). - - Duplikasi, perataan, distribusi + + Duplikasi, perataan, distribusi - - + + - + Salah satu pekerjaan yang sering dilakukan adalah duplicating/duplikasi, menggandakan sebuah obyek (Ctrl+D). Duplikat yang dihasilkan akan muncul tepat diatas obyek asalnya, dan langsung terpilih/terseleksi, jadi anda bisa menyeretnya dengan tetikus atau tombol panah. Sebagai latihan, cobalah mengisi garis ini dengan duplikat dari kotak hitam ini. - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -557,192 +562,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-order + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-order - - + + - + - Istilah z-order mengacu pada susunan tumpukan dari obyek pada sebuah gambar, misalnya obyek mana yang diatas dan menutupi lainnya. Dua perintah pada menu Obyek, Raise to Top (tombol Home) dan Lower to Bottom (tombol End), akan memindahkan obyek yang terpilih ke bagian paling atas atau paling bawah dari z-order pada layar yang bersangkutan. Dua perintah lainnya, Raise (PgUp) and Lower (PgDn), akan menenggelamkan atau memunculkan satu langkah saja, misalnya memindahkannya melewati satu obyek yang tidak terpilih dalam z-order (hanya obyek yang overlap yang dihitung; Jika tidak ada overlap pada seleksi, Raise dan Lower akan memindahkannya langsung dari atas atau bawah. + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + Berlatihlah menggunakan perintah ini dengan membalik z-order obyek dibawah ini, sehingga lingkaran paling bawah menjadi paling atas dan sebaliknya: - - - - - - - - + + + + + + + + Shortkut seleksi yang sangat berguna adalah tombol Tab. Jika tidak ada yang terseleksi/dipilih, dia akan memilih obyek yang paling dibawah; atau dia akan memilih obyek diatas obyek yang dipilih dalam z-order. Menekan Shift+Tab tanpa ada obyek yang dipilih akan memilih obyek terakhir yang anda buat. Berlatihlah menggunakan Tab dan Shift+Tab pada tumpukan lingkaran diatas. - - Memilih yang dibawah dan menyeret yang dipilih + + Memilih yang dibawah dan menyeret yang dipilih - - + + Apa yang harus dilakukan jika obyek yang anda butuhkan tersembunyi dibalik obyek yang lain? Anda mungkin masih bisa melihat obyek dibawah jika diatasnya (sebagian) transparan, tapi jika anda klik, yang dipilih adalah obyek yang diatas, bukan dibawahnya. - - + + Inilah gunanya Alt+klik. Pertama-tama, Alt+klik akan memilih obyek paling atas seperti klik biasa. Tapi, Alt+klik berikutnya pada titik yang sama akan memilih obyek dibawahnya, dan seterusnya. Dengan demikian, beberapa kali Alt+klik dalam satu putaran akan hinggap pada masing-masing obyek, dari atas kebawah, dari sususan z-order. Saat sampai ke obyek paling bawah, Alt+klik berikutnya akan memilih yang paling atas. - - + + [Jika anda menggunakan Linux, anda mungkin menemukan bahwa Alt+klik tidak bekerja sebagaimana mestinya. Mungkin malah memindahkan seluruh jendela inkscape. Ini dikarenakan window manager anda mendefinisikan Alt+klik untuk aksi yang lain. Cara memperbaiki ini adalah menemukan konfigurasi Window Behavior window manager anda, untuk dimatikan, atau menggantinya dengan tombol Meta (alias Tombol windos), sehingga Inkscape dan aplikasi lain bisa menggunakan tombol Alt secara bebas.] - - + + Bagus, tapi begitu anda bisa memilih sebuah obyek dibawah obyek lain, apa yang bisa anda lakukan? Anda bisa merubah bentuknya, dan anda bisa menyeret handle yang dipilih. Meskipun begitu, menyeret obyek itu sendiri akan membuat obyek yang dipilih kembali ke yang diatas (inilah cara klik-dan-geser bekerja - ia memilih obyek (di kasus ini, obyek paling atas) yang berada dibawah kursor, untuk kemudian menyeret seleksinya). Untuk memberi tahu Inkscape untuk menyeret apa yang dipilih sekarang tanpa memilih yang lain, gunakan Alt+drag/seret. Ini akan memindahkan obyek yang dipilih saat itu kemanapun anda menyeret tetikus. - - + + Berlatihlah menggunakan Alt+klik dan Alt+drag/seret pada dua obyek coklat dibawah persegi hijau transparan ini: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Akhir + + Akhir - - + + - Ini mengakhiri tutorial Dasar. Masih banyak yang bisa dilakukan dengan Inkscape, tapi dengan tehnik-tehnik yang diterangkan tadi, anda sudah bisa menghasilkan grafis yang sederhana tetapi berguna. Untuk pembahasan yang lebih kompleks, cobalah Advanced dan tutorial-tutorial lain melalui Help > Tutorials. + Ini mengakhiri tutorial Dasar. Masih banyak yang bisa dilakukan dengan Inkscape, tapi dengan tehnik-tehnik yang diterangkan tadi, anda sudah bisa menghasilkan grafis yang sederhana tetapi berguna. Untuk pembahasan yang lebih kompleks, cobalah Advanced dan tutorial-tutorial lain melalui Help > Tutorials. - + @@ -772,8 +784,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Gunakan Ctrl+panah atas untuk menggulung + + Gunakan Ctrl+panah atas untuk menggulung diff --git a/share/tutorials/tutorial-basic.ja.svg b/share/tutorials/tutorial-basic.ja.svg index 8d0717b64..a9d3c0d1f 100644 --- a/share/tutorials/tutorial-basic.ja.svg +++ b/share/tutorials/tutorial-basic.ja.svg @@ -36,423 +36,428 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::基本 - - + + ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ Inkscape ã®åŸºæœ¬çš„ãªä½¿ç”¨æ³•ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚ã“れ㯠Inkscape æ­£è¦ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã‚り閲覧ã€ç·¨é›†ã€è¤‡è£½ã€ãŠã‚ˆã³ä¿å­˜ãŒå¯èƒ½ã§ã™ã€‚ - - + + ã“ã®åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã€ã‚­ãƒ£ãƒ³ãƒã‚¹ã®æ“作ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®å–り扱ã„ã€ã‚·ã‚§ã‚¤ãƒ—ツールã®åŸºæœ¬ã€é¸æŠžæ–¹æ³•ã€é¸æŠžãƒ„ールを用ã„ãŸã‚ªãƒ–ジェクトã®å¤‰å½¢ã€ã‚°ãƒ«ãƒ¼ãƒ—化ã€ãƒ•ィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®è¨­å®šã€é…ç½®ã€Z 軸順åºã«ã¤ã„ã¦è¨˜è¿°ã—ã¦ã„ã¾ã™ã€‚ã•ら進んã ãƒˆãƒ”ックã«ã¤ã„ã¦ã¯ãƒ˜ãƒ«ãƒ—メニューã®ãã®ä»–ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’ã”覧ãã ã•ã„。 - - キャンãƒã‚¹ã®ãƒ‘ン + + キャンãƒã‚¹ã®ãƒ‘ン - - + + ドキュメントを表示ã—ã¦ã„るキャンãƒã‚¹ã‚’パン (スクロール) ã™ã‚‹æ–¹æ³•ã¯ã„ãã¤ã‹ã‚りã¾ã™ã€‚Ctrl+矢å°ã‚­ãƒ¼ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ (ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’下ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¦ã¿ã¦ãã ã•ã„)。他ã«ã€ãƒžã‚¦ã‚¹ã®ä¸­å¤®ãƒœã‚¿ãƒ³ã§ã‚­ãƒ£ãƒ³ãƒã‚¹ã‚’ドラッグã€ãŠã‚ˆã³ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ãƒãƒ¼ (Ctrl+B ã§è¡¨ç¤ºã€éžè¡¨ç¤ºã§ãã¾ã™) を使ã†ã“ã¨ã§ã‚‚行ãˆã¾ã™ã€‚マウス㮠ホイール を使ã£ã¦åž‚ç›´æ–¹å‘ã®ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã€Shift キーを押ã—ãªãŒã‚‰ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’使ã†ã¨æ°´å¹³æ–¹å‘ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¾ã™ã€‚ - - ズームインã¨ã‚ºãƒ¼ãƒ ã‚¢ã‚¦ãƒˆ + + ズームインã¨ã‚ºãƒ¼ãƒ ã‚¢ã‚¦ãƒˆ - - + + ã‚ºãƒ¼ãƒ ã‚’è¡Œã†æœ€ã‚‚ç°¡å˜ãªæ–¹æ³•㯠- 㨠+ (ã¾ãŸã¯ = ) キーを押ã™ã“ã¨ã§ã™ã€‚Ctrl+中央クリック ã‹ Ctrl+å³ã‚¯ãƒªãƒƒã‚¯ ã§ã‚ºãƒ¼ãƒ ã‚¤ãƒ³ã€Shift+中央クリック ã‹ Shift+å³ã‚¯ãƒªãƒƒã‚¯ ã§ã‚ºãƒ¼ãƒ ã‚¢ã‚¦ãƒˆã—ã€Ctrl を押ã—ãªãŒã‚‰ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã‚’使ã†ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã¾ãŸã€ã‚ºãƒ¼ãƒ å…¥åŠ›åŸŸ (ドキュメントウインドウã®å³ä¸‹éš…) をクリックã—ã€æ­£ç¢ºãªã‚ºãƒ¼ãƒ å€¤ã‚’ % ã§å…¥åŠ›ã—㦠Enter キーを押ã™ã“ã¨ã‚‚ã§ã‚‚行ãˆã¾ã™ã€‚ドラッグã—ãŸé ˜åŸŸã‚’ズームã™ã‚‹ã“ã¨ã®ã§ãるズームツール (å·¦ã®ãƒ„ールãƒãƒ¼ã«ã‚りã¾ã™) ã‚‚ã‚りã¾ã™ã€‚ - - + + Inkscape ã¯ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã®ã‚ºãƒ¼ãƒ ãƒ¬ãƒ™ãƒ«ã®å±¥æ­´ã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚` キーを押ã™ã¨å‰ã®ã‚ºãƒ¼ãƒ çŠ¶æ…‹ã«æˆ»ã‚Šã€Shift+` ã‚­ãƒ¼ã§æ¬¡ã«é€²ã¿ã¾ã™ã€‚ - - Inkscape ã®ãƒ„ール + + Inkscape ã®ãƒ„ール - - + + å·¦å´ã®ç¸¦ã®ãƒ„ールãƒãƒ¼ã«ã¯ Inkscape ã®æç”»ãªã‚‰ã³ã«ç·¨é›†ãƒ„ールを表示ã—ã¦ã„ã¾ã™ã€‚ウインドウã®ä¸€ç•ªä¸Šã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ä¸‹ã«ä¸€èˆ¬çš„ãªã‚³ãƒžãƒ³ãƒ‰ãƒœã‚¿ãƒ³ã®ã‚るコマンドãƒãƒ¼ã€ãã—ã¦å„ツール固有ã®ã®å…¥åŠ›åŸŸã‚’è¡¨ç¤ºã™ã‚‹ãƒ„ールコントロールãƒãƒ¼ãŒé…ç½®ã•れã¦ã„ã¾ã™ã€‚ウインドウã®ä¸‹ã«ã‚るステータスãƒãƒ¼ã«ã¯ä½œæ¥­ã«å¿œã˜ã¦æœ‰ç”¨ãªãƒ’ントã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚ - - + + 多ãã®æ“作ãŒã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‹ã‚‰åˆ©ç”¨ã§ãã¾ã™ã€‚ヘルプ > キーã¨ãƒžã‚¦ã‚¹ã®ãƒªãƒ•ァレンス ã‚’é–‹ã„ã¦å®Œå…¨ãªãƒªãƒ•ァレンスを確èªã§ãã¾ã™ã€‚ - - ドキュメントã®ä½œæˆã¨ç®¡ç† + + ドキュメントã®ä½œæˆã¨ç®¡ç† - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape ã¯ãƒ•ァイル形å¼ã« SVG (Scalable Vector Graphics) を採用ã—ã¦ã„ã¾ã™ã€‚SVG ã¯åºƒãグラフィックソフトウェアã§ä½¿ç”¨ã•れã¦ã„ã‚‹ã‚ªãƒ¼ãƒ—ãƒ³ãªæ¨™æº–ã§ã™ã€‚SVG ファイルã¯ã€XML を基準ã¨ã—ã¦ã„ã¦ã‚らゆるテキストエディター㨠XML エディターã§ç·¨é›†ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ (ãã†ã€Inkscape ã‚’ã¯ãªã‚Œã¦ã‚‚)。Inkscape 㯠SVG 以外ã®ãƒ•ォーマット (EPS ã‚„ PNG ãªã©) ã®å…¥å‡ºåŠ›ã‚‚è¡Œãˆã¾ã™ã€‚ - - + + Inkscape ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã”ã¨ã«å€‹åˆ¥ã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‚’é–‹ãã¾ã™ã€‚複数ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã‚’使ㄠ(例ãˆã° Alt+Tab を使ã£ã¦) æ“作ã™ã‚‹ã“ã¨ãŒã§ãã€ã¾ãŸ Inkscape ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã€Ctrl+Tab ã§ã™ã¹ã¦ã®é–‹ã„ã¦ã„るドキュメントウィンドウを巡回ã§ãã¾ã™ (ç·´ç¿’ã®ãŸã‚ドキュメントを新è¦ä½œæˆã—ã€ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¨åˆ‡ã‚Šæ›¿ãˆã¦ã¿ã¾ã—ょã†)。注æ„: Inkscape ã¯ã“れらã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‚’ウェブブラウザーã®ã‚¿ãƒ–ã®ã‚ˆã†ã«æ‰±ã„ã¾ã™ã€‚ã“れã¯ã™ãªã‚ã¡ã€ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆ Ctrl+Tab ã¯åŒã˜ãƒ—ロセス上ã§å‹•作ã—ã¦ã„るドキュメントã«å¯¾ã—ã¦ã®ã¿æ©Ÿèƒ½ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ファイルブラウザーã‹ã‚‰è¤‡æ•°ã®ãƒ•ァイルを開ã„ãŸã‚Šã€Inkscape をメニューやアイコンã‹ã‚‰è¤‡æ•°èµ·å‹•ã—ãŸã¨ãã«ã¯ãれãžã‚Œã®é–“ã§åˆ‡ã‚Šæ›¿ãˆã¯è¡Œã‚れã¾ã›ã‚“。 - - シェイプã®ä½œæˆ + + シェイプã®ä½œæˆ - - + + 格好ã„ã„シェイプを作ã£ã¦ã¿ã‚ˆã†! ツールãƒãƒ¼ã®çŸ©å½¢ãƒ„ールをクリック (ã‹ F4 を押ã™) ã—ã€æ–°ã—ã„ドキュメントã®ä¸­ã‹ã€ã“ã“ã§ã‚¯ãƒªãƒƒã‚¯ãŠã‚ˆã³ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã¿ã¾ã—ょã†: - - - - - - - - - - - - - + + + + + + + + + + + + + 見ã¦ã®é€šã‚Šã€ãƒ‡ãƒ•ォルトã®çŸ©å½¢ã¯é’ãåŠé€æ˜Žã§ã€é»’ã„ストローク (輪郭) ã«ãªã£ã¦ã„ã¾ã™ã€‚ã“れãŒã©ã†å¤‰ã‚ã‚‹ã‹ã‚’見ã¦ã„ãã¾ã—ょã†ã€‚ä»–ã®ãƒ„ールã€å††/å¼§ã€æ˜Ÿå½¢ã€èžºæ—‹ã‚’作ã£ã¦ã¿ã¾ã—ょã†ã€‚ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + ã“れらã®ãƒ„ールã¯ç·ç§°ã—ã¦ã‚·ã‚§ã‚¤ãƒ—ツールã¨å‘¼ã°ã‚Œã¾ã™ã€‚å„シェイプã«ã¯ä¸€ã¤ä»¥ä¸Šã®ã²ã—å½¢ã®ãƒãƒ³ãƒ‰ãƒ«ãŒã‚りã¾ã™ã€‚ã“ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã—ã¦ã‚·ã‚§ã‚¤ãƒ—ãŒã©ã†å¤‰ã‚ã‚‹ã‹è¦‹ã¦ã¿ã¾ã—ょã†ã€‚シェイプã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ‘ãƒãƒ«ã¯ã‚·ã‚§ã‚¤ãƒ—を調整ã™ã‚‹ã‚‚ã†ä¸€ã¤ã®æ–¹æ³•ã§ã™ã€‚コントロールã¯é¸æŠžä¸­ã®ã‚·ã‚§ã‚¤ãƒ— (ã™ãªã‚ã¡ã€ãƒãƒ³ãƒ‰ãƒ«ã®è¡¨ç¤ºã•れã¦ã„るシェイプ) ã«åŠ¹æžœãŒã‚りã€ãã—ã¦æ–°ã—ã作æˆã—ãŸã‚·ã‚§ã‚¤ãƒ—ã®ãƒ‡ãƒ•ォルト値ã¨ã—ã¦é©ç”¨ã•れã¾ã™ã€‚ - - + + 最後ã«è¡Œã£ãŸæ“ä½œã‚’å…ƒã«æˆ»ã™ã«ã¯ã€ Ctrl+Z を押ã—ã¾ã™ (ãã—ã¦ã€ã‚‚ã—ã¾ãŸæ°—ãŒå¤‰ã£ãŸãªã‚‰ã€å…ƒã«æˆ»ã—ãŸæ“作を Shift+Ctrl+Z を押ã™ã“ã¨ã§ã‚„り直ã—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™)。 - - ç§»å‹•ã€æ‹¡å¤§ç¸®å°ã€å›žè»¢ + + ç§»å‹•ã€æ‹¡å¤§ç¸®å°ã€å›žè»¢ - - + + Inkscape ã§æœ€ã‚‚よã使ã‚れるツールã¯é¸æŠžãƒ„ールã§ã™ã€‚ツールãƒãƒ¼ã®ä¸€ç•ªä¸Šã«ã‚るボタン (矢å°ã®) をクリックã™ã‚‹ã‹ã€ã¾ãŸã¯ F1 ã‹ Space を押ã—ã¾ã™ã€‚ã™ã‚‹ã¨ã‚­ãƒ£ãƒ³ãƒã‚¹ä¸Šã®ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトãŒé¸æŠžå¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ã“ã®çŸ©å½¢ã‚’クリックã—ã¦ã¿ã¾ã—ょã†ã€‚ - - - + + + 矢å°åž‹ã® 8 個ã®ãƒãƒ³ãƒ‰ãƒ«ãŒã‚ªãƒ–ジェクトã®å›žã‚Šã«è¡¨ç¤ºã•れã¾ã™ã€‚ã“ã“ã§: - - - + + + ドラッグã§ã‚ªãƒ–ジェクトを移動ã§ãã¾ã™ (Ctrl を押ã™ã“ã¨ã§ã€ç§»å‹•ã‚’æ°´å¹³ã€åž‚ç›´ã«é™å®šã§ãã¾ã™)。 - - - + + + ãƒãƒ³ãƒ‰ãƒ«ã®ãƒ‰ãƒ©ãƒƒã‚°ã§ã‚ªãƒ–ジェクトを拡大縮å°ã§ãã¾ã™ (Ctrl を押ã™ã“ã¨ã§ã€å…ƒã®ç¸¦æ¨ªæ¯”ã‚’ç¶­æŒã—ã¾ã™)。 - - + + 今一度矩形をクリックã—ã¦ãã ã•ã„。ãƒãƒ³ãƒ‰ãƒ«ãŒå¤‰ã‚‹ã¯ãšã§ã™ã€‚ã“ã“ã§: - - - + + + è§’ã«ã‚ã‚‹ãƒãƒ³ãƒ‰ãƒ«ã®ãƒ‰ãƒ©ãƒƒã‚°ã§ã‚ªãƒ–ジェクトを回転ã—ã¾ã™ (Ctrl を押ã™ã“ã¨ã§ã€å›žè»¢ã‚’ 15 度ã”ã¨ã«é™å®šã§ãã¾ã™ã€‚åå­—ã®ãƒžãƒ¼ã‚¯ã‚’ドラッグã™ã‚‹ã“ã¨ã§å›žè»¢ã®ä¸­å¿ƒã‚’移動ã§ãã¾ã™)。 - - - + + + 角以外ã«ã‚ã‚‹ãƒãƒ³ãƒ‰ãƒ«ã§ã‚ªãƒ–ジェクトを傾ã‘ã‚‹ (ã›ã‚“æ–­ã™ã‚‹) ã“ã¨ãŒã§ãã¾ã™ (Ctrl を押ã™ã“ã¨ã§ã€å¤‰å½¢ã‚’ 15 度ã”ã¨ã«é™å®šã§ãã¾ã™)。 - - + + é¸æŠžãƒ„ãƒ¼ãƒ«ã®çŠ¶æ…‹ã§ã€(キャンãƒã‚¹ã®ä¸Šã«ã‚ã‚‹) コントロールãƒãƒ¼ã®æ•°å€¤å…¥åŠ›ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’ä½¿ç”¨ã—ã€æ­£ç¢ºãªåº§æ¨™ (X ã¨Y) ã¨å¤§ãã• (å¹…ã¨é«˜ã•) を入力ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ - - キーã«ã‚ˆã‚‹å¤‰å½¢ + + キーã«ã‚ˆã‚‹å¤‰å½¢ - - + + ä»–ã®ãƒ™ã‚¯ã‚¿ãƒ¼ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã«æ¯”ã¹ Inkscape を大ãã特徴ã¥ã‘ã¦ã„ã‚‹ã®ã¯ã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰æ“作ã®é‡è¦–ã§ã™ã€‚キーボードã‹ã‚‰æ“作ã§ããªã„コマンドやæ“作ã¯ã»ã¨ã‚“ã©ãªãã€ã‚ªãƒ–ジェクトã®å¤‰å½¢ã‚‚例外ã§ã¯ã‚りã¾ã›ã‚“。 - - + + キーボードã‹ã‚‰ã‚ªãƒ–ジェクトã®ç§»å‹• (矢å°ã‚­ãƒ¼)ã€æ‹¡å¤§ç¸®å° (< > キー)ã€ãã—ã¦å›žè»¢ ([ 㨠] キー) ãŒå¯èƒ½ã§ã™ã€‚デフォルトã®ç§»å‹•ãŠã‚ˆã³æ‹¡å¤§ç¸®å°ã¯ 2px ã”ã¨ã«ãªã‚Šã¾ã™ã€‚Shift を押ã™ã¨ 10 å€ã§ç§»å‹•ã—ã¾ã™ã€‚Ctrl+> 㨠Ctrl+< ã§ãれãžã‚Œå…ƒã® 200%ã€50% ã§æ‹¡å¤§ç¸®å°ã—ã¾ã™ã€‚デフォルトã®å›žè»¢ã¯ 15 度ã”ã¨ã«ãªã‚Šã¾ã™ã€‚Ctrl を使ã†ã¨ 90 度ã”ã¨ã«å›žè»¢ã—ã¾ã™ã€‚ - - + + ã—ã‹ã—ã€ã‚‚ã£ã¨ã‚‚有用ãªã®ã¯ Alt キーã¨å¤‰å½¢ã‚­ãƒ¼ã‚’用ã„ã¦è¡Œã†ãƒ”クセルå˜ä½ã®å¤‰å½¢ã§ã—ょã†ã€‚例ãˆã°ã€Alt+çŸ¢å° ã¯ã€é¸æŠžã—ãŸã‚ªãƒ–ジェクトをã€ãã®ã¨ãã®ã‚ºãƒ¼ãƒ çŠ¶æ…‹ã§ 1 ピクセル移動ã—ã¾ã™ (ã™ãªã‚ã¡ã€1 スクリーンピクセルã§ã‚りã€ã‚ºãƒ¼ãƒ çŠ¶æ…‹ã¨é–¢ä¿‚ãªã„ SVG ã®é•·ã•ã®å˜ä½ px ã¨æ··ä¹±ã—ãªã„よã†ã«)。ã¤ã¾ã‚Šã€ã‚‚ã—ズームインã—ãŸçŠ¶æ…‹ã§ Alt+çŸ¢å° ã‚’å®Ÿè¡Œã™ã‚‹ã¨ã€ç”»é¢ä¸Šã§ã¯ 1 ピクセル動ãã¾ã™ãŒã€å®Ÿéš›ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä¸Šã§ã®çµ¶å¯¾å€¤ã§ã¯ã‚ˆã‚Šå°ã•ã„移動ã«ãªã‚Šã¾ã™ã€‚従ã£ã¦ã€ã‚ºãƒ¼ãƒ ã‚¤ãƒ³ã€ã‚ºãƒ¼ãƒ ã‚¢ã‚¦ãƒˆã‚’行ã†ã“ã¨ã§ä»»æ„ã®ç²¾åº¦ã§ã‚ªãƒ–ジェクトã®ä½ç½®æ±ºã‚を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ - - + + åŒæ§˜ã«ã€Alt+> 㨠Alt+< ã§ã€é¸æŠžã—ãŸã‚ªãƒ–ジェクトã®è¦‹ãŸç›®ã®å¤§ãã•ã‚’ã‚¹ã‚¯ãƒªãƒ¼ãƒ³ãƒ”ã‚¯ã‚»ãƒ«ã§æ‹¡å¤§ç¸®å°ã§ãã¾ã™ã€‚ã¾ãŸ Alt+[ 㨠Alt+] ã§ã‚ªãƒ–ジェクトã®ä¸­å¿ƒç‚¹ã‹ã‚‰æœ€ã‚‚é ã„点ãŒã€1 スクリーンピクセル移動ã™ã‚‹åˆ†ã ã‘回転ã—ã¾ã™ã€‚ - - + + 注æ„: Linux ã®å ´åˆã¯ Altキーã¨ä»–ã®ã„ãã¤ã‹ã®ã‚­ãƒ¼ã®çµ„ã¿åˆã‚ã›ã§æœŸå¾…ã—ãŸå‹•作ãŒè¡Œã‚れãªã„ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãŒãれらキー入力をå—ã‘付ã‘ã€Inkscape ã«æ¸¡ã•れãªã„ãŸã‚ã«ç™ºç”Ÿã—ã¾ã™ã€‚一ã¤ã®è§£æ±ºç­–ã¨ã—ã¦ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ã‚­ãƒ¼è¨­å®šã‚’é©å®œå¤‰æ›´ã™ã‚‹ã“ã¨ãŒæŒ™ã’られã¾ã™ã€‚ - - è¤‡æ•°é¸æŠž + + è¤‡æ•°é¸æŠž - - + + Shift+クリック ã§ã‚ªãƒ–ジェクトをã„ãã¤ã§ã‚‚åŒæ™‚ã«é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã‚ªãƒ–ジェクトã®å‘¨ã‚Šã‚’ ドラッグ ã™ã‚‹ã“ã¨ã§ã‚‚é¸æŠžã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ã“れã¯ãƒ©ãƒãƒ¼ãƒãƒ³ãƒ‰é¸æŠžã¨å‘¼ã°ã‚Œã¦ã„ã¾ã™ (é¸æŠžãƒ„ãƒ¼ãƒ«ã¯ä½•ã‚‚ãªã„ã¨ã“ã‚ã‹ã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã‚’å§‹ã‚ã‚‹ã¨ãƒ©ãƒãƒ¼ãƒãƒ³ãƒ‰ã‚’作りã€ãƒ‰ãƒ©ãƒƒã‚°ã‚’å§‹ã‚ã‚‹å‰ã« Shift を押ã™ã¨å¸¸ã«ãƒ©ãƒãƒ¼ãƒãƒ³ãƒ‰ãŒä½œã‚‰ã‚Œã¾ã™)。下㮠3 ã¤ã®ã‚·ã‚§ã‚¤ãƒ—ã§ç·´ç¿’ã—ã¾ã—ょã†: - - - - - + + + + + ãれã§ã¯ã€ãƒ©ãƒãƒ¼ãƒãƒ³ãƒ‰ã‚’使ã£ã¦ (ドラッグ㋠Shift+ドラッグ ã§) 矩形以外㮠2 ã¤ã®æ¥•å††ã‚’é¸æŠžã—ã¦ã¿ã¾ã—ょã†: - - - - - + + + + + é¸æŠžã•れã¦ã„ã‚‹å„オブジェクトã¯ã€ãƒ‡ãƒ•ォルトã§ç ´ç·šã®çŸ©å½¢ã§ã‚ã‚‹é¸æŠžã‚­ãƒ¥ãƒ¼ã‚’è¡¨ç¤ºã—ã¾ã™ã€‚ã“ã®ã‚­ãƒ¥ãƒ¼ã¯ä½•ãŒé¸æŠžã•れã¦ã„ã¦ä½•ãŒé¸æŠžã•れã¦ã„ãªã„ã®ã‹ã‚’一度ã«ç¢ºèªã™ã‚‹ã®ã«å½¹ç«‹ã¡ã¾ã™ã€‚例ãˆã°ã€ã‚‚ã— 2 ã¤ã®æ¥•円ã¨çŸ©å½¢ã‚’é¸æŠžã—ãŸå ´åˆã€é¸æŠžã‚­ãƒ¥ãƒ¼ãŒãªã„ã¨æ¥•円ãŒé¸æŠžã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’判断ã™ã‚‹ã®ãŒé›£ã—ã„ã§ã—ょã†ã€‚ - - + + é¸æŠžã—ãŸã‚ªãƒ–ジェクトã«å¯¾ã—㦠Shift+クリック を行ã†ã¨ãã®ã‚ªãƒ–ジェクトã¯é¸æŠžã‹ã‚‰é™¤å¤–ã•れã¾ã™ã€‚上㮠3 ã¤ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ã€Shift+クリック ã‚’ 2 ã¤ã®æ¥•円ã«å¯¾ã—ã¦è¡Œã†ã¨ã€é¸æŠžã®ä¸­ã«ã¯ä¸€ã¤ã®çŸ©å½¢ã ã‘ãŒæ®‹ã•れã¾ã™ã€‚ - - + + Esc を押ã™ã“ã¨ã§ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトã®é¸æŠžã‚’解除ã—ã¾ã™ã€‚ Ctrl+A ã§ç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã«ã‚ã‚‹ã™ã¹ã¦ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¾ã™ (ã‚‚ã—レイヤーを作æˆã—ã¦ã„ãªã„å ´åˆã“れã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã®ã™ã¹ã¦ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã™ã‚‹ã®ã¨åŒã˜ã§ã™)。 - - グループ化 + + グループ化 - - + + 複数ã®ã‚ªãƒ–ジェクトをçµåˆã—ã¦ã‚°ãƒ«ãƒ¼ãƒ—ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚グループã¯ãƒ‰ãƒ©ãƒƒã‚°ã‚„変形をã™ã‚‹ã¨ä¸€ã¤ã®ã‚ªãƒ–ジェクトã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã„ã¾ã™ã€‚下ã®å·¦ã® 3 ã¤ã®ã‚ªãƒ–ジェクトã¯åˆ¥å€‹ã®ã‚‚ã®ã§ã€å³ã® 3 ã¤ã®ã‚ªãƒ–ジェクトã¯ã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚グループをドラッグã—ã¦ãã ã•ã„。 - - - - + + + + - - + + グループを作るã«ã¯ã€1 ã¤ä»¥ä¸Šã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—㦠Ctrl+G を押ã—ã¾ã™ã€‚グループを解除ã™ã‚‹ã«ã¯ã€é¸æŠžã—ã¦ã‹ã‚‰ Ctrl+U を押ã—ã¾ã™ã€‚グループ自体も他ã®ã‚ªãƒ–ジェクトã¨åŒã˜ã‚ˆã†ã«ã‚°ãƒ«ãƒ¼ãƒ—化ã•れã¾ã™ã€‚ã“ã®ã‚ˆã†ãªå†å¸°çš„グループ化ã¯ä»»æ„ã®æ·±ã•ã«ã§ãã¾ã™ãŒã€Ctrl+U ã¯é¸æŠžã®æœ€ä¸Šä½ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã¿ã‚’グループ解除ã—ã¾ã™ã€‚æ·±ãグループ化ã—ãŸã‚°ãƒ«ãƒ¼ãƒ—を完全ã«è§£é™¤ã™ã‚‹ã«ã¯ä½•度も Ctrl+U を押ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ - - + + ã—ã‹ã—ã€ã‚‚ã—グループ化ã•れãŸã‚ªãƒ–ジェクトã®ä¸­ã® 1 ã¤ã‚’編集ã—ãŸã„ã®ãªã‚‰ã€ã‚°ãƒ«ãƒ¼ãƒ—を解除ã™ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。Ctrl+クリック ã™ã‚‹ã ã‘ã§ã‚ªãƒ–ジェクトをå˜ç‹¬ã§é¸æŠžã€ç·¨é›†ã§ãã€Shift+Ctrl+クリック ã§è¤‡æ•°ã®ã‚ªãƒ–ジェクト (グループ内ã§ã‚れ外ã§ã‚れ) をグループ化を気ã«ã›ãšé¸æŠžã§ãã¾ã™ã€‚グループ中ã®å€‹ã€…ã®ã‚ªãƒ–ジェクト (上図å³) をグループ解除ã›ãšã«ç§»å‹•や変形ã—ã¦ã¿ã¦ãã ã•ã„。ãã—ã¦é¸æŠžã‚’解除ã—ã¦ã‹ã‚‰é€šå¸¸ã®ã‚°ãƒ«ãƒ¼ãƒ—é¸æŠžã‚’è¡Œã£ã¦ã‚°ãƒ«ãƒ¼ãƒ—化ãŒç¶­æŒã•れã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 - - フィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ + + フィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ - - + + - Inkscape ã®å¤šãã®æ©Ÿèƒ½ã¯ ダイアログ を利用ã—ã¦ã„ã¾ã™ã€‚ãŠãらãオブジェクトã«è‰²ã‚’ã¤ã‘る最も簡å˜ãªæ–¹æ³•ã¯ã€è¡¨ç¤ºãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ã‚¹ã‚¦ã‚©ãƒƒãƒãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’é–‹ã„ã¦ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ã‚¹ã‚¦ã‚©ãƒƒãƒã‚’クリックã—ã¦è‰²ã‚’å¡—ã‚‹ (フィルã®è‰²ã‚’変ãˆã‚‹) ã“ã¨ã§ã—ょã†ã€‚ + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + ã‚‚ã£ã¨æœ‰åйãªã®ã¯ãƒ•ィル/ストロークダイアログを開ãã“ã¨ã§ã™ (Shift+Ctrl+F)。 下ã®ã‚·ã‚§ã‚¤ãƒ—ã‚’é¸æŠžã—ã¦ãƒ•ィル/ストロークダイアログを開ã„ã¦ãã ã•ã„。 - - - + + + ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã«ã¯ 3 ã¤ã®ã‚¿ãƒ–ã€ã™ãªã‚ã¡ã€ãƒ•ィルã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®å¡—りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã‚¹ã‚¿ã‚¤ãƒ«ãŒã‚りã¾ã™ã€‚フィルタブã¯é¸æŠžã—ãŸã‚ªãƒ–ジェクトã®ãƒ•ィル (内部ã®å¡—り) を編集ã—ã¾ã™ã€‚タブã®ã™ã下ã®ãƒœã‚¿ãƒ³ã§ãƒ•ã‚£ãƒ«ã®æœ‰ç„¡ (×ã®ãƒœã‚¿ãƒ³)ã€å˜ä¸€è‰²ã€ç·šå½¢ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã€æ”¾å°„çŠ¶ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’é¸æŠžã§ãã¾ã™ã€‚上ã®ã‚·ã‚§ã‚¤ãƒ—ã§ã¯å˜ä¸€è‰²ãŒæœ‰åйã«ãªã£ã¦ã„ã¾ã™ã€‚ - - + + ã•らã«ãã®ä¸‹ã«ã¯ã€æ•°ç¨®ã®ã‚«ãƒ©ãƒ¼ãƒ”ッカーãŒã‚りã¾ã™ã€‚å„ピッカーã¯ã‚¿ãƒ–ã«ãªã£ã¦ã„ã¾ã™ (RGBã€CMYKã€HSLã€ãã—ã¦ãƒ›ã‚¤ãƒ¼ãƒ«)。ãŠãらãã‚‚ã£ã¨ã‚‚便利ãªã®ã¯ä¸‰è§’形を回ã—ã¦è‰²ã‚’é¸æŠžã—ã€ä¸‰è§’å½¢ã®ä¸­ã§å½©åº¦ã‚’é¸æŠžã™ã‚‹ãƒ›ã‚¤ãƒ¼ãƒ«ãƒ”ッカーã§ã—ょã†ã€‚ã™ã¹ã¦ã®ãƒ”ッカーã¯ã‚ªãƒ–ジェクトã®ã‚¢ãƒ«ãƒ•ァ値 (ä¸é€æ˜Žåº¦) を設定ã™ã‚‹ãŸã‚ã®ã‚¹ãƒ©ã‚¤ãƒ€ãƒ¼ã‚’å‚™ãˆã¦ã„ã¾ã™ã€‚ - - + + ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã™ã‚‹ã¨ã‚«ãƒ©ãƒ¼ãƒ”ッカーã¯ç¾åœ¨ã®ã‚ªãƒ–ジェクトã®ãƒ•ィルã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯å€¤ã«æ›´æ–°ã•れã¾ã™ (複数ã®ã‚ªãƒ–ジェクトãŒé¸æŠžã•れã¦ã„ã‚‹å ´åˆã€å¹³å‡ã®è‰²ãŒè¡¨ç¤ºã•れã¾ã™)。以下ã®ã‚µãƒ³ãƒ—ルやã€è‡ªåˆ†ã§ä½œã£ãŸã‚ªãƒ–ジェクトã§è©¦ã—ã¦ã¿ã¾ã—ょã†: - - - - - - - - - + + + + + + + + + ストロークペイントタブã§ã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ (輪郭) ã‚’å–り除ãã“ã¨ã‚„色ã¨é€æ˜Žåº¦ã®è¨­å®šãŒã§ãã¾ã™: - - - - - - - - - - + + + + + + + + + + 最後ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã‚¹ã‚¿ã‚¤ãƒ«ã‚¿ãƒ–ã§ã¯ã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®å¹…ã¨ãã®ä»–ã®ãƒ‘ラメーターを設定ã§ãã¾ã™: - - - - - - - - - + + + + + + + + + @@ -495,45 +500,45 @@ often!) - - - - - - - - - + + + + + + + + + å˜ä¸€è‰²ã‚’グラデーションã«åˆ‡ã‚Šæ›¿ãˆã‚‹ã¨ãã«ã€æ–°ã—ã作æˆã•れãŸã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã¯ãã®å‰ã«ä½¿ã£ã¦ã„ãŸè‰²ã‚’ä¸é€æ˜Žã‹ã‚‰é€æ˜Žã«å¤‰åŒ–ã•ã›ã¾ã™ã€‚グラデーションツールã«åˆ‡ã‚Šæ›¿ãˆ (Ctrl+F1)ã€ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã—ã¦ã¿ã¾ã—ょã†ã€‚グラデーションツールã§ã¯ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã®æ–¹å‘ã¨é•·ã•ã‚’ç·šã§é€£çµã•れãŸã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãŒæ±ºã‚ã¦ã„ã¾ã™ã€‚グラデーションãƒãƒ³ãƒ‰ãƒ«ã‚’é¸æŠžã™ã‚‹ã¨ (é’ããƒã‚¤ãƒ©ã‚¤ãƒˆã•れる)ã€ãƒ•ィルダイアログã¨ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã¯é¸æŠžã—ãŸã‚ªãƒ–ジェクトã®è‰²ã«ä»£ãˆã¦ãƒãƒ³ãƒ‰ãƒ«ã§ç¤ºã—ãŸè‰²ã‚’é©ç”¨ã—ã¾ã™ã€‚ - - + + ä»–ã«ã‚ªãƒ–ジェクトã®è‰²ã‚’変ãˆã‚‹ä¾¿åˆ©ãªæ–¹æ³•ã¨ã—ã¦ã‚¹ãƒã‚¤ãƒˆãƒ„ール (F7) ã‚‚ã‚りã¾ã™ã€‚çµµã®ã©ã®éƒ¨åˆ†ã§ã‚‚ クリック ã™ã‚‹ã ã‘ã§ã€æŠ½å‡ºã—ãŸè‰²ãŒé¸æŠžä¸­ã®ã‚ªãƒ–ジェクトã®ãƒ•ィル㫠(Shift+クリックã§ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®è‰²ã«) é©ç”¨ã•れã¾ã™ã€‚ - - è¤‡è£½ã€æ•´åˆ—ã€é…ç½® + + è¤‡è£½ã€æ•´åˆ—ã€é…ç½® - - + + ã‚‚ã£ã¨ã‚‚ä¸€èˆ¬çš„ãªæ“作ã®ä¸€ã¤ã«ã‚ªãƒ–ジェクトã®è¤‡è£½ãŒã‚りã¾ã™ (Ctrl+D)ã€‚è¤‡è£½ã¯æ­£ç¢ºã«å…ƒã®ã‚ªãƒ–ジェクトã®ä¸Šã«ä½ç½®ã—é¸æŠžçŠ¶æ…‹ã«ãªã£ã¦ã‚‹ã®ã§çŸ¢å°ã‚­ãƒ¼ã‚„マウスã§ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ç§»å‹•ã§ãã¾ã™ã€‚ç·´ç¿’ã¨ã—ã¦ä¸‹ã®é»’ã„æ­£æ–¹å½¢ã®è¡Œã«ã€æ­£æ–¹å½¢ã®è¤‡è£½ã‚’並ã¹ã¦åŸ‹ã‚å°½ãã—ã¦ã¿ã¾ã—ょã†: - - - + + + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -555,192 +560,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z è»¸é †åº + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z è»¸é †åº - - + + - Z 軸順åºã¯ã‚ªãƒ–ジェクトをæãã¨ãã®é‡ãªã‚Šã®é †åºã€ã™ãªã‚ã¡ã©ã®ã‚ªãƒ–ジェクトãŒä¸Šã«ãªã£ã¦ä»–ã®ã‚ªãƒ–ジェクトを隠ã—ã¦ã„ã‚‹ã‹ã‚’æ„味ã—ã¾ã™ã€‚オブジェクトメニューã«ã‚ã‚‹ 2 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã€æœ€å‰é¢ã¸ (Home キー)ã€æœ€èƒŒé¢ã¸ (End キー) ã¯é¸æŠžã—ãŸã‚ªãƒ–ジェクトをç¾åœ¨ã®ãƒ¬ã‚¤ãƒ¤ãƒ¼ã® Z 軸順åºã®æœ€å‰é¢ã€æœ€èƒŒé¢ã«ç§»å‹•ã—ã¾ã™ã€‚もㆠ2 ã¤ã®ã‚³ãƒžãƒ³ãƒ‰ã€å‰é¢ã¸ (PgUp) ã¨èƒŒé¢ã¸ (PgDn) ã¯é¸æŠžã—ãŸã‚ªãƒ–ジェクトを 1 ã¤ã ã‘å‰å¾Œã«ç§»å‹•ã€ã™ãªã‚ã¡é¸æŠžã—ã¦ã„ãªã„オブジェクトを 1 ã¤ã‹ã‚ã—ã¦ç§»å‹•ã—ã¦ã„ãã¨ã„ã†ã“ã¨ã§ã™ (é¸æŠžã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒé‡ãªã£ã¦ã„ã‚‹å ´åˆã®ã¿ã€‚ã‚‚ã—é¸æŠžã—ãŸã‚ªãƒ–ジェクトを覆ã„éš ã—ã¦ã„ã‚‹/ã„ãªã„ã‚‚ã®ãŒä½•ã‚‚ãªã„時ã€å‰é¢ã¸ã¨èƒŒé¢ã¸ã¯ãれãžã‚Œæœ€å‰é¢ã€æœ€èƒŒé¢ã«ç§»å‹•ã—ãŸã“ã¨ã«ãªã‚Šã¾ã™)。 + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + ã“れらã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使ã£ã¦å·¦ã®æ¥•円ãŒä¸€ç•ªä¸Šã€å³ã®æ¥•円ãŒä¸€ç•ªä¸‹ã«ãるよã†ã«ä¸‹ã®ã‚ªãƒ–ジェクト㮠Z 軸順åºã‚’å転ã—ã¦ã¿ã¾ã—ょã†: - - - - - - - - + + + + + + + + - + Tab ã¯éžå¸¸ã«ä¾¿åˆ©ãªã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã‚­ãƒ¼ã§ã™ã€‚ã‚‚ã—ä½•ã‚‚é¸æŠžã•れã¦ã„ãªã„å ´åˆã«ã¯ä¸€ç•ªä¸‹ã«ã‚るオブジェクトをã€ã•ã‚‚ãªã‘れ㰠Z 軸順åºã§ã¿ã¦é¸æŠžã•れãŸã‚ªãƒ–ジェクトã®ä¸Šã«ã‚ã‚‹ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¾ã™ã€‚ Shift+Tab ã¯ãã®é€†ã€æœ€ä¸Šä½ã®ã‚ªãƒ–ジェクトã‹ã‚‰ä¸‹ã«å‘ã‹ã£ã¦åƒãã¾ã™ã€‚æ–°ã—ã作ã£ãŸã‚ªãƒ–ジェクトã¯ä¸€ç•ªä¸Šã«é‡ã­ã‚‰ã‚Œã‚‹ã®ã§ã€ä½•ã‚‚é¸æŠžã—ãªã„ã§ Shift+Tab を押ã™ã¨æœ€å¾Œã«ä½œã£ãŸã‚ªãƒ–ジェクトãŒé¸æŠžã•れã¾ã™ã€‚上ã®é‡ãªã‚Šåˆã£ãŸæ¥•円上㧠Tab ã‚„ Shift+Tab キーã®ç·´ç¿’ã‚’ã—ã¦ãã ã•ã„。 - - 隠れã¦ã„るオブジェクトã®é¸æŠžã¨ãƒ‰ãƒ©ãƒƒã‚°ã§ã®é¸æŠž + + 隠れã¦ã„るオブジェクトã®é¸æŠžã¨ãƒ‰ãƒ©ãƒƒã‚°ã§ã®é¸æŠž - - + + - + ä»–ã®ã‚ªãƒ–ジェクトã®ä¸‹ã«ã‚ã£ã¦éš ã‚Œã¦ã„るオブジェクトã¯ã©ã†ã‚„ã£ã¦é¸æŠžã—ãŸã‚‰ã„ã„ã®ã§ã—ょã†? 上ã®ã‚ªãƒ–ジェクト㌠(åŠ) 逿˜Žãªã‚‰ä¸‹ã®ã‚ªãƒ–ジェクトを見るã“ã¨ã¯ã§ãã¾ã™ãŒã€ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã¨å¿…è¦ã¨ã—ã¦ã„ãªã„上ã®ã‚ªãƒ–ジェクトãŒé¸æŠžã•れã¦ã—ã¾ã„ã¾ã™ã€‚ - - + + - + ã“ã“ã§ Alt+クリック ã®å‡ºç•ªã§ã™ã€‚ã¯ã˜ã‚ã® Alt+クリック ã§ã¯æ™®é€šã®ã‚¯ãƒªãƒƒã‚¯ã¨åŒã˜ã‚ˆã†ã« 1 番上ã®ã‚ªãƒ–ジェクトãŒé¸æŠžã•れã¾ã™ã€‚ã—ã‹ã—ã€åŒã˜å ´æ‰€ã§æ¬¡ã« Alt+クリック を行ã†ã¨ 1 番上ã®ã‚ªãƒ–ジェクトã®ä¸‹ã«ã‚るオブジェクトãŒã€æ¬¡ã®ã‚¯ãƒªãƒƒã‚¯ã§ã¯ã€ã•らã«ãã®ä¸‹ãŒé¸æŠžã•れã¾ã™ã€‚ã“ã†ã—㦠Alt+クリック を何回ã‹è¡Œã†ã¨ã‚¯ãƒªãƒƒã‚¯ã—ãŸç‚¹ã«ã‚るオブジェクト㮠Z 軸順åºã®é‡ãªã‚Šã‚’å‰é¢ã‹ã‚‰èƒŒé¢ã«å¾ªç’°ã—ã¾ã™ã€‚最下層ã®ã‚ªãƒ–ジェクトã¾ã§åˆ°é”ã™ã‚‹ã¨ã€æ¬¡ã® Alt+クリック ã§å†ã³æœ€ä¸Šä½ã®ã‚ªãƒ–ジェクトãŒé¸æŠžã•れã¾ã™ã€‚ - - + + - + [Linux ã®å ´åˆã€Alt+クリックãŒé©åˆ‡ã«å‹•作ã›ãšã€Inkscape ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’å‹•ã‹ã—ã¦ã—ã¾ã†ã‹ã‚‚ã—れã¾ã›ã‚“。ã“れã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ãŒ Alt+クリックをウィンドウæ“作ã®ã‚­ãƒ¼ã‚¤ãƒ™ãƒ³ãƒˆã¨ã—ã¦å—ã‘付ã‘ã¦ã—ã¾ã†ãŸã‚ã§ã™ã€‚ã“れを解決ã™ã‚‹ã«ã¯ã€ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®æŒ¯ã‚‹èˆžã„ã«é–¢ã™ã‚‹è¨­å®šã‹ã‚‰ã€ãれをオフã«ã™ã‚‹ã‹ã€ä»–ã®ä¿®é£¾ã‚­ãƒ¼ (例ãˆã° Windows キーãªã©) を使ã£ãŸã‚­ãƒ¼å‰²ã‚Šå½“ã¦ã«å¤‰æ›´ã—ã¦ãã ã•ã„。Inkscape ãŠã‚ˆã³ãã®ä»–ã®ã‚¢ãƒ—リケーション㧠Alt キーを自由ã«ä½¿ç”¨ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚] - - + + - + ã“れã¯ã“れã§è‰¯ã„ã®ã§ã™ãŒã€è¡¨é¢ã«ãªã„ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ãŸã¨ã—ã¦ãれã§ä½•ãŒã§ãã‚‹ã®ã§ã—ょã†? 変形ã§ãã‚‹ã—ã€é¸æŠžãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ãŒã€ã‚ªãƒ–ジェクト自体をドラッグã™ã‚‹ã¨é¸æŠžã¯ãƒªã‚»ãƒƒãƒˆã•れ最上ä½ã®ã‚ªãƒ–ジェクトãŒé¸æŠžã•れã¦ã—ã¾ã„ã¾ã™ (ã“れã¯ã‚¯ãƒªãƒƒã‚¯ã‚¢ãƒ³ãƒ‰ãƒ‰ãƒ©ãƒƒã‚°ã®è¨­è¨ˆãŒãã†ãªã£ã¦ã‚‹ãŸã‚ã§ã™ã€‚é¸æŠžã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹å ´åˆã‚«ãƒ¼ã‚½ãƒ«ä½ç½®ã® (最上ä½) ã®ã‚ªãƒ–ジェクトãŒã¾ãšé¸æŠžã•れるã®ã§ã™)。Inkscape ã«ä»–ã®ä½•ã‹ã‚’é¸æŠžã›ãšã« ä»Šé¸æŠžã•れã¦ã„ã‚‹ã‚‚ã®ã‚’ドラッグã™ã‚‹ã‚ˆã†çŸ¥ã‚‰ã›ã‚‹ã«ã¯ Alt+ドラッグ を使ã„ã¾ã™ã€‚ã“ã†ã™ã‚Œã°ãƒžã‚¦ã‚¹ã‚’ã©ã“ã§ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦ã‚‚ç¾åœ¨ã®é¸æŠžã‚ªãƒ–ジェクトを移動ã§ãã¾ã™ã€‚ - - + + - + ç·‘ã®åŠé€æ˜Žã®çŸ©å½¢ã®ä¸­ã«ã‚ã‚‹ï¼’ã¤ã®èŒ¶è‰²ã®ã‚·ã‚§ã‚¤ãƒ—ã§ Alt+クリック 㨠Alt+ドラッグ ã‚’ç·´ç¿’ã—ã¦ã¿ã¾ã—ょã†: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - 最後㫠+ + 最後㫠- - + + - + - ã“れã§åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’終ã‚りã¾ã™ã€‚Inkscape ã«ã¯ã‚‚ã£ã¨ãŸãã•ã‚“ã®æ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚ã—ã‹ã—ã“ã“ã§èª¬æ˜Žã—ãŸãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã§ã™ã§ã«ç°¡å˜ã‹ã¤æœ‰ç”¨ãªã‚°ãƒ©ãƒ•ィックを作æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§ã—ょã†ã€‚ã‚‚ã£ã¨è¤‡é›‘ãªä½œæ¥­ã«ã¤ã„ã¦ã¯ ヘルプ > ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« ã‹ã‚‰ä¸Šç´šã€ãã®ä»–ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’見るã¨ã‚ˆã„ã§ã—ょã†ã€‚ + ã“れã§åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’終ã‚りã¾ã™ã€‚Inkscape ã«ã¯ã‚‚ã£ã¨ãŸãã•ã‚“ã®æ©Ÿèƒ½ãŒã‚りã¾ã™ã€‚ã—ã‹ã—ã“ã“ã§èª¬æ˜Žã—ãŸãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã§ã™ã§ã«ç°¡å˜ã‹ã¤æœ‰ç”¨ãªã‚°ãƒ©ãƒ•ィックを作æˆã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã§ã—ょã†ã€‚ã‚‚ã£ã¨è¤‡é›‘ãªä½œæ¥­ã«ã¤ã„ã¦ã¯ ヘルプ > ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« ã‹ã‚‰ä¸Šç´šã€ãã®ä»–ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’見るã¨ã‚ˆã„ã§ã—ょã†ã€‚ - + @@ -770,8 +782,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.nl.svg b/share/tutorials/tutorial-basic.nl.svg index 583b9bf54..b24a0f933 100644 --- a/share/tutorials/tutorial-basic.nl.svg +++ b/share/tutorials/tutorial-basic.nl.svg @@ -36,425 +36,430 @@ - Gebruik Ctrl+pijl omlaag om te scrollen + Gebruik Ctrl+pijl omlaag om te scrollen handleiding - + ::BASIS - - + + Deze handleiding demonstreert het basisgebruik van Inkscape. Dit is een gewoon Inkscape document dat je kan bekijken, wijzigen, kopiëren of bewaren. - - + + De Basishandleiding behandelt canvasnavigatie, documentbeheer, het vorm-gereedschap, selectietechnieken, objecttransformatie met het aanwijsgereedschap, groeperen, opmaak, vulling en lijn, uitlijning en volgorde. Voor geavanceerdere onderwerpen, kan je de andere handleidingen in het menu Help raadplegen. - - Het canvas verschuiven + + Het canvas verschuiven - - + + Er zijn diverse manieren om het canvas van het document te verschuiven (scrollen). Probeer Ctrl+pijltjestoetsen om te scrollen met het toetsenbord. (Probeer dit nu door naar onder in het document te gaan.) Je kan het canvas ook verslepen met behulp van de middenmuisknop. Een andere mogelijkheid is het gebruik van de schuifbalken (druk op Ctrl+B om ze te tonen of verbergen). Het wiel van je muis werkt ook om verticaal te scrollen; druk op Shift samen met het wiel om horizontaal te scrollen. - - In- of uitzoomen + + In- of uitzoomen - - + + De eenvoudigste manier om te zoomen is door het drukken op de toetsen - en + (of =). Je kan ook Ctrl+middenklik of Ctrl+rechtsklik gebruiken om in te zoomen, Shift+middenklik of Shift+rechtsklik om uit te zoomen, of door het draaien aan het muiswiel in combinatie met Ctrl. Een andere mogelijkheid is het klikken in het zoomveld (onderaan rechts van het documentvenster), het ingeven van een exact percentage zoomen en Enter te drukken. We hebben ook het Zoom-gereedschap (in de knoppenbalk links) dat je laat inzoomen op een regio door er rondom te slepen. - - + + Inkscape bewaart ook de geschiedenis van de zoomniveaus die je gebruikt hebt tijdens de huidige werksessie. Druk op ` om terug te gaan naar de vorige zoom of op Shift+` om naar de volgende te gaan. - - Inkscape gereedschappen + + Inkscape gereedschappen - - + + De verticale knoppenbalk links toont Inkscape's teken- en bewerkgereedschappen. In het bovenste gedeelte van het venster onder het menu vind je de Opdrachtenbalk met algemene knoppen en de knoppenbalk Gereedschapsdetails met knoppen die specifiek zijn voor elk gereedschap. De statusbalk onderaan het scherm toont bruikbare hints en boodschappen tijdens het werken met Inkscape. - - + + Veel operaties zijn mogelijk aan de hand van sneltoetscombinaties. Open Help > Bedieningsoverzicht voor een volledig overzicht. - - Aanmaken en beheren van documenten + + Aanmaken en beheren van documenten - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape gebruikt het SVG-formaat (Scalable Vector Graphics) voor zijn bestanden. SVG is een open standaard die breed ondersteund wordt door grafische software. SVG-bestanden zijn gebaseerd op XML en kunnen bewerkt worden met elke tekst of XML-editor (buiten Inkscape). Behalve SVG, kan Inkscape importeren en exporteren naar diverse andere formaten (EPS, PNG). - - + + Inkscape opent een nieuw documentvenster voor elk document. Je kan navigeren tussen documenten met behulp van je vensterbeheerder (Eng.: window manager) (bv. door Alt+Tab), of je kan de Inkscape sneltoetscombinatie Ctrl+Tab gebruiken die alle open documentvensters overloopt. (Maak nu een nieuw documentvenster aan en wissel tussen dat en dit document om te oefenen.) Opmerking: Inkscape behandelt deze vensters zoals tabbladen in een webbrowser. Dit betekent dat Ctrl+Tab alleen werkt bij documenten van hetzelfde proces. Indien je meerdere vensters vanuit een bestandsbeheerprogramma opent of indien je meer dan één Inkscape proces start van een icoon, zal dit niet werken. - - Vormen maken + + Vormen maken - - + + Tijd voor enkele mooie vormen! Klik op het Rechthoek-gereedschap in de gereedschappenbalk (of druk op F4) en klik-en-sleep, hetzij in een nieuw document of onmiddellijk hier: - - - - - - - - - - - - - + + + + + + + + + + + + + Zoals je kan zien, zijn rechthoeken standaard blauw met een zwarte lijn (rand), en volledig opaak. Hieronder zien we hoe we dat kunnen veranderen. Met andere gereedschappen, kan je ook ellipsen, sterren en spiralen maken: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Deze gereedschappen zijn bekend onder de gemeenschappelijke noemer vormgereedschappen. Elke vorm die je maakt, toont een of meer diamandvormige handvatten; tracht deze te verslepen en zie hoe de vorm verandert. Het gereedschapspaneel voor een vormgereedschap is een andere weg om een vorm aan te passen; deze panelen beïnvloeden de huidig geselecteerde vormen (bv. deze die handvatten vertonen) en stellen standaardwaarden in die gelden voor nieuw aangemaakte vormen. - - + + Om je laatste actie Ongedaan te maken, druk je op Ctrl+Z. (Of, indien je van gedachten verandert, kan je Opnieuw kiezen om de teruggedraaide actie opnieuw uit te voeren met Shift+Ctrl+Z.) - - Verplaatsen, schalen en draaien + + Verplaatsen, schalen en draaien - - + + Het meest gebruikte Inkscape gereedschap is het selectie-gereedschap. Klik op de bovenste knop (met de pijl) op de knoppenbalk of druk F1 of Spatie. Nu kan je elk object op het canvas selecteren. Klik op de onderstaande rechthoek. - - - + + + Je zal acht pijlvormige handvatten zien verschijnen rond het object. Nu kan je: - - - + + + Het object verplaatsen door het te verslepen. (Druk op Ctrl om de beweging te beperken tot horizontaal of verticaal.) - - - + + + Het object schalen door het slepen van een van de handvatten. (Druk op Ctrl om de originele hoogte/breedteverhouding te behouden.) - - + + Klik nu opnieuw op de rechthoek. De handvatten veranderen. Nu kan je: - - - + + + Het object draaien door de handvatten op de hoeken te verslepen. (Druk op Ctrl om de draaihoek te beperken tot stappen van 15 graden. Versleep het kruisteken om het rotatiemiddelpunt in te stellen.) - - - + + + Het object scheef te trekken door het verslepen van de niet-hoekpunt-handvatten. (Druk op Ctrl om de scheeftrekking te beperken tot stappen van 15 graden.) - - + + Tijdens het gebruik van het selectie-gereedschap kan je ook numerieke bewerkingsvelden in de gereedschappenbalk (boven het canvas) gebruiken voor het isntellen van exacte waarden voor coördinaten (X en Y) en groote (B and H) van de selectie. - - Transformaties met behulp van het toetsenbord + + Transformaties met behulp van het toetsenbord - - + + Een van Inkscape's kenmerken is, in tegenstelling tot andere bewerkingspakketten voor vectorafbeeldingen, de nadruk op toegankelijkheid via het toetsenbord. Er is bijna geen commando of actie die niet mogelijk is via het toetsenbord. Objecttransformaties zijn daarop geen uitzondering. - - + + Je kan het toetsenbord gebruiken voor het verplaatsen (pijltjestoetsen), schalen (toetsen < en >) en roteren (toetsen [ en ]) van objecten. Standaard wordt verplaatst en geschaald met 2 pixels; met Shift, verplaats of schaal je met tien keer deze waarde. Ctrl+> en Ctrl+< schalen in of uit tot respectievelijk 200% of 50% van het origineel. Standaard wordt er geroteerd in stappen van 15 graden; met Ctrl roteer je in stappen van 90 graden. - - + + Echter, misschien zijn pixel-grootte transformaties nog het meest bruikbaar. Deze worden aangeroepen via Alt in combinatie met de transformatietoets. Bijvoorbeeld, Alt+pijltjestoetsen zal de selectie met 1 pixel verplaatsen bij de huidige zoom (bijvoorbeeld met 1 schermpixel, niet te verwarren met de px eenheid die een SVG-lengteëenheid is onafhankelijk van de zoom). Dit betekent dat indien je inzoomt, een Alt+pijltjestoets zal resulteren in een kleinere absolute verplaatsing die er nog steeds uitziet als een één-pixel verplaatsing op je scherm. Het is dus mogelijk om objecten te positioneren met een arbitraire precisie door het eenvoudig in- of uitzoomen. - - + + Op dezelfde wijze zullen Alt+> en Alt+< de selectie schalen zodat de zichtbare grootte met een schermpixel verandert; Alt+[ en Alt+] roteren zodat het punt dat het verste van het rotatiemiddelpunt ligt met één schermpixel verplaatst. - - + + Opmerking: Linux gebruikers krijgen mogelijk niet de verwachte resultaten met de Alt+pijltjestoets en enkele andere toetsenbordcombinaties indien hun vensterbeheerder (VB) deze toetsenbordacties opvangt vooraleer ze Inkscape bereiken. Een mogelijke oplossing hiervoor zou het veranderen van de relevante VB configuratie kunnen zijn. - - Meervoudige selecties + + Meervoudige selecties - - + + Je kan een willekeurig aantal objecten tegelijk selecteren met behulp van Shift+klik. Daarnaast kan je slepen rond de objecten die je moet selecteren; dit wordt elastiekselectie genoemd. (Het selectiegereedschap maakt een elastiek wanneer gesleept wordt over een lege ruimte. Echter, indien je op Shift drukt vooraleer te beginnen met slepen, zal Inkscape altijd een elastiek maken.) Oefen door het selecteren van de drie onderstaande vormen: - - - - - + + + + + Gebruik nu de elastiek (door slepen of Shift+slepen) om de twee ellipsen te selecteren maar niet de rechthoek: - - - - - + + + + + Elk individueel object in een selectie vertoont een selectie-aanduiding — standaard gestreept rechthoekig frame. Deze aanduidingen maken het eenvoudig om in een oogopslag te zien wat geselecteerd is en wat niet. Bijvoorbeeld, indien je beide ellipsen en de rechthoek selecteert zou het zonder de selectie-aanduidingen erg moeilijk zijn om te raden of de ellipsen geselecteerd zijn of niet. - - + + Shift+klikken op een geselecteerd object haalt het uit de selectie. Selecteer de drie bovenstaande objecten en gebruik dan Shift+klik om beide ellipsen uit de selectie te halen en zodoende enkel de rechthoek in de selectie over te houden. - - + + Het drukken op Esc deselecteert alle geselecteerde objecten. Ctrl+A selecteert alle objecten in de huidige laag (indien je geen lagen creëerde, is deze dezelfde voor alle objecten in het document). - - Groeperen + + Groeperen - - + + Verschillende objecten kunnen gecombineerd worden in een groep. Een groep gedraagt zich als een enkel object tijdens het slepen of transformeren. Hieronder zijn de drie objecten links onafhankelijk; dezelfde drie objecten rechts zijn gegroepeerd. Tracht de groep te verslepen. - - - - + + + + - - + + Om een groep te creëren, selecteer je de objecten en druk je op Ctrl+G. Om een of meer groepen te degroeperen, selecteer je ze en druk je op Ctrl+U. Groepen kunnen zoals elk ander object zelf gegroepeerd worden: dergelijke recursieve groepen kunnen gaan tot elke mogelijke diepte. Echter, Ctrl+U degroepeert enkel het hoogste groepsniveau in een selectie; je zal herhaaldelijk op Ctrl+U moeten drukken indien je een groep-in-groep volledig wil degroeperen. - - + + Echter, je hoeft niet noodzakelijk te degroeperen indien je een object in een groep wil bewerken. Ctrl+klik daarvoor op het object: alleen dat object wordt geselecteerd en is wijzigbaar. Je kan Shift+Ctrl+klikken op verschillende objecten (in of uit een groep) voor meervoudige selectie ongeacht de eventuele groepering. Tracht de individuele vormen in de groep (boven rechts) te verplaatsen of te transformeren zonder te degroeperen. Deselecteer vervolgens en selecteer de groep zoals normaal zodat je kan zien dat de vormen steeds gegroepeerd blijven. - - Vulling en lijn + + Vulling en lijn - - + + - Veel van Inkscape's functies zijn beschikbaar via dialoogvensters. Wellicht de eenvoudigste wijze om een object te kleuren is het openen van het dialoogvenster Paletten in het menu Beeld (of druk op Shift+Ctrl+W), selecteer een object en klik op een palet om te verven (vulkleur veranderen). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Krachtiger is het dialoogvenster Opvulling en lijnen van het menu Object (of duk op Shift+Ctrl+F). Selecteer de vorm en open het dialoogvenster Opvulling en lijnen. - - - + + + - + Je zal zien dat het dialoogvenster drie tabbladen heeft: Vullen, Lijnkleur en Lijnstijl. Het tabblad Vullen laat je toe om de vulling (binnenzijde) van het/de geselecteerde object(en) te bewerken. Door gebruik te maken van de knoppen in dit tabblad, kan je het type vulling selecteren, inclusief geen vulling (de knop met de X), egale vulkleur, maar ook lineaire en radiale kleurverlopen. Voor de bovenstaande vorm zal de knop Egale kleur geactiveerd zijn. - - + + - + Verder zie je een aantal kleurselectiesystemen, elk in hun eigen tabblad: RGB, TVL, CMYK en Wiel. Misschien de meest handige is het wiel, waar je kan draaien aan de driehoek om een tint te selecteren en vervolgens een kleurnuance van de tint in de driehoek. Elk kleurselectiesysteem bevat een schuifbalk om de alfa (transparantie) van de geselecteerde objecten in te stellen. - - + + - + Wanneer je een object selecteert, wordt de kleurselectie geupdated om de huidige vulling en lijn weer te geven (voor meerdere geselecteerde objecten toont het dialoogvenster hun gemiddelde kleur). Oefen met deze voorbeelden of creëer je eigen vormen: - - - - - - - - - + + + + + + + + + - + Met behulp van het tabblad Lijnkleur kan je de lijn (rand) van een object verwijderen, de kleur en transparantie ervan instellen: - - - - - - - - - - + + + + + + + + + + - + Het laatste tabblad, Lijnstijl, laat je toe om de breedte en andere parameters van de lijn in te stellen: - - - - - - - - - + + + + + + + + + - + Tot slot kan je in plaats van een egale kleur ook gebruik maken van kleurverlopen voor vullingen of lijnen: @@ -495,45 +500,45 @@ often!) - - - - - - - - - - - + + + + + + + + + + + Wanneer je verandert van egale kleur naar kleurverloop gebruikt het nieuw gecreëerde kleurverloop de vorige egale kleur, gaande van opaak naar transparant. Open het gereedschap Kleurverlopen (Ctrl+F1) om de kleurverloophandvatten te verslepen — de punten verbonden door lijnen die de richting en lengte van het kleurverloop bepalen. Wanneer een van de kleurverloophandvatten is geselecteerd (blauw opgelicht), stelt het dialoogvenster Opvulling en lijnen de kleur van dat handvat in, in plaats van de kleur van het volledige geselecteerde object. - - + + - + Nog een andere handige manier om de kleur van een object te veranderen is door het gebruik van het pipet-gereedschap (F7). Klik daarvoor ergens in de afbeelding met dit gereedschap en de gekozen kleur zal toegepast worden op de vulling van de geselecteerde objecten (Shift+klik zal de lijnkleur toepassen). - - Duplicatie, uitlijning en verdeling + + Duplicatie, uitlijning en verdeling - - + + - + Een van de meest voorkomende operaties is het dupliceren van een object (Ctrl+D). Het duplicaat wordt exact boven het origineel geplaatst en is geselecteerd. Zo kan je het wegslepen met de muis of de pijltjestoetsen. Tracht bij wijze van oefening de lijn te vullen met kopieën van dit zwart vierkant: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -555,192 +560,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-volgorde + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-volgorde - - + + - + - De term z-volgorde refereert naar de stapelvorlgorde van objecten in een afbeelding, bijvoorbeeld naar welke objecten bovenaan zijn en het zicht op andere objecten beperken. De twee commando's in het menu Object, Bovenaan (de toets Home) en Onderaan (de toets End), zullen de geselecteerde objecten verplaatsen naar de top of bodem van de huidige laag. Twee andere commando's, Omhoog (PgUp) en Omlaag (PgDn), brengen de selectie slechts een stap naar boven of onder, dit is verplaatsen voorbij een niet geselecteerd object in de z-volgorde (enkel objecten die met de selectie overlappen tellen mee; Indien niets met de selectie overlapt, verplaatsen Omhoog en Omlaag deze naar de top of bodem). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Oefen het gebruik van deze commando's door de z-volgorde van onderstaande objecten om te keren, zodanig dat de meest linkse ellips bovenaan ligt en de meest rechtse onderaan: - - - - - - - - + + + + + + + + - + Een erg handige selectie-sneltoets is de Tab-toets. Indien niets geselecteerd is, selecteert het het onderste object. Zoniet selecteert het het object boven de geselecteerde object(en) in z-volgorde. Shift+Tab werkt in omgekeerde volgorde, startend bij het bovenste object en naar beneden gaande. Aangezien de objecten die je aanmaakt, toegevoegd worden aan de top van de stapel zal het drukken op Shift+Tab zonder selectie voor de eenvoud het object selecteren dat je het laatst aanmaakte. Oefen het gebruik van Tab en Shift+Tab met de stapel ellipsen hierboven. - - Selecteren onder iets en verslepen selectie + + Selecteren onder iets en verslepen selectie - - + + - + Wat moet je doen indien het object dat je nodig hebt verborgen is achter een ander object? Je kan het onderste object nog zien, indien het bovenste (partieel) transparant is, maar het klikken hierop selecteert het bovenste object, niet datgene dat je nodig hebt. - - + + - + Daarom is er Alt+klik. De eerste Alt+klik selecteert het bovenste object, net zoals de reguliere klik. Echter, de volgende Alt+klik op hetzelfde punt zal het object onder het bovenste selecteren; daarna het volgende, het object daaronder, etc. Bijgevolg zullen verschillende opeenvolgende Alt+klik's een cyclus vormen van top naar bodem op het klikpunt. Bij het bereiken van het onderste object, zal de volgende Alt+klik automatisch opnieuw het bovenste object selecteren. - - + + - + [Indien je op Linux werkt, is het mogelijk dat Alt+klik niet correct werkt. In dat geval zal het het volledige Inkscape venster verplaatsen. Dit is zo omdat je vensterbeheerder Alt+klik heeft gereserveerd voor een andere actie. De manier om dit op te lossen is het zoeken van het venstergedrag in de configuratie van de vensterbeheerder, en dit ofwel uitschakelen, of het toekennen aan de Meta toets (aka Windows toets), opdat Inkscape en andere applicaties de Alt-toets vrij kunnen gebruiken.] - - + + - + Dit is mooi, maar wat kan je doen zodra je een onder-het-oppervlak object geselecteerd hebt? Je kan de toetsen gebruiken om het te transformeren en je kan de selectiehandvatten verslepen. Echter, het slepen van het object zelf, stelt de selectie opnieuw in naar het bovenste object (dit is hoe het klik-en-sleep-gedrag is ontworpen om te werken - het selecteert eerst het (bovenste) object onder de cursor en versleept vervolgens de selectie). Om Inkscape te vertellen dat wat nu geselecteerd is te verslepen, zonder iets anders te selecteren, gebruik je Alt+slepen. Dit zal de huidige selectie verplaatsen onafhankelijk van waar je met je muis sleept. - - + + - + Oefen Alt+klik en Alt+slepen op de twee bruine vormen onder de groene transparante rechthoek: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Conclusie + + Conclusie - - + + - + - Tot zover de Basishandleiding. Er is veel meer in Inkscape, maar met de hier beschreven technieken kan je reeds eenvoudige, maar bruikbare afbeeldingen maken. Voor complexere dingen kan je de handleiding Geavanceerd of andere handleidingen raadplegen in Help > Handleidingen. + Tot zover de Basishandleiding. Er is veel meer in Inkscape, maar met de hier beschreven technieken kan je reeds eenvoudige, maar bruikbare afbeeldingen maken. Voor complexere dingen kan je de handleiding Geavanceerd of andere handleidingen raadplegen in Help > Handleidingen. - + @@ -770,8 +782,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Gebruik Ctrl+pijl omhoog om te scrollen + + Gebruik Ctrl+pijl omhoog om te scrollen diff --git a/share/tutorials/tutorial-basic.nn.svg b/share/tutorials/tutorial-basic.nn.svg index ce212dc1e..fdd98ba2c 100644 --- a/share/tutorials/tutorial-basic.nn.svg +++ b/share/tutorials/tutorial-basic.nn.svg @@ -36,105 +36,105 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::DET GRUNNLEGGJANDE - - + + Her er ei kort innføring i dei vanlegaste funksjonane i Inkscape. Dokumentet er eit heilt vanleg Inkscape-dokument, som du kan endra som du vil. - - + + - Innføringa dekkjer flytting og forstørring av lerret og objekt, opning og lagring av dokument, figurverktøy, merking og omforming av objekt, snøggtastar, gruppering, fargar og figurfyll, samt objektjustering og z-ordning. Du finn òg fleire emne i dei andre innføringane tilgjengelege frÃ¥ Hjelp-menyen. + Innføringa dekkjer flytting og forstørring av lerret og objekt, opning og lagring av dokument, figurverktøy, merking og omforming av objekt, snøggtastar, gruppering, fargar og figurfyll, samt objektjustering og z-ordning. Du finn òg fleire emne i dei andre innføringane tilgjengelege frÃ¥ Hjelp-menyen. - - Flytting av lerretet + + Flytting av lerretet - - + + Det er mange mÃ¥tar du kan flytta lerretet rundt pÃ¥. Med tastaturet kan du trykkja Ctrl + piltastar. (Prøv gjerne dette no.) Du kan òg dra lerretet ved Ã¥ halda inne midtre museknapp (rullehjulet) og flytta pÃ¥ musa. Ein tredje mÃ¥te er Ã¥ bruka rullefelta (trykk Ctrl + B for Ã¥ visa eller skjula dei). Og har du eit rullehjul pÃ¥ musa kan du flytta loddrett med dette. Hald inne Shift for Ã¥ flytta vassrett. - - Forstørring + + Forstørring - - + + Du kan lettast forstørra og forminska lerretet med - og +. Du kan òg bruka Ctrl + midtklikk eller Ctrl + høgreklikk for Ã¥ forstørra, og Shift + midtklikk og Shift + høgreklikk for Ã¥ forminska. Har du ei mus med rullehjul, kan du òg halda inne Ctrl og rulla med dette. Ein fjerde mÃ¥te er Ã¥ bruka forstørringsfeltet nede til venstre og skriva inn ein nøyaktig verdi, og ein siste mÃ¥te er Ã¥ bruka forstørringsverktøyet i verktøylinja til venstre. Berre dra ein boks rundt omrÃ¥det du vil sjÃ¥ nærare pÃ¥. - - + + I tillegg held Inkscape ein logg over dei forstørringsnivÃ¥ du har brukt. Trykk ` for Ã¥ gÃ¥ til førre forstørringsnivÃ¥, og Shift + ` for Ã¥ gÃ¥ til neste. - - Inkscape-verktøy + + Inkscape-verktøy - - + + Den loddrette verktøylinja til venstre inneheld dei ulike teikne- og redigeringsverktøya, mens kommandolinja oppe inneheld generelle kommandoknappar, og kontrollinja under denne inneheld kontrollar for kvar av desse igjen. Statuslinja nede viser nyttige tips og meldingar nÃ¥r du arbeidar med dei ulike verktøya. - - + + - Dei fleste operasjonane er òg tilgjengelege frÃ¥ snøggtastar. SjÃ¥ Hjelp | Tastatur og mus for ei fullstendig oversikt. + Dei fleste operasjonane er òg tilgjengelege frÃ¥ snøggtastar. SjÃ¥ Hjelp | Tastatur og mus for ei fullstendig oversikt. - - Opning og lagring av dokument + + Opning og lagring av dokument - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape brukar SVG (Scalable Vector Graphics) som lagringsformat. SVG er ein open standard, og breitt støtta av andre biletprogram. SVG er basert pÃ¥ XML, og kan endrast med vanlege skriveprogram og XML-verktøy. Inkscape kan i tillegg importera og eksportera fleire andre filformat (blant anna EPS og PNG). - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Teikning av figurar + + Teikning av figurar - - + + PÃ¥ tide med litt teikning! Trykk pÃ¥ rektangelverktøyet i verktøylinja til venstre (eller trykk F4) og klikk og dra, anten i eit nytt dokument eller her: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Dette er alle dei forskjellige figurverktøya. Som du ser, har kvar figur du teiknar eitt eller fleire ruterforma kontrollpunkt. Prøv Ã¥ dra i desse, og sjÃ¥ kva som skjer med figuren. Verktøylinja oppe har òg nokre kontrollar du kan stilla for Ã¥ endra pÃ¥ figuren pÃ¥ forskjellige mÃ¥tar. Desse pÃ¥verkar den merkte figuren (han med kontrollpunkta), og set standardverdiar for nye figurar. - - + + Du kan angra den siste endringa du har gjort ved Ã¥ trykkja Ctrl + Z.Og viss du ombestemmer deg, kan du gjera om angringa ved Ã¥ trykkja Shift + Ctrl + Z. - - Flytting, skalering og rotering + + Flytting, skalering og rotering - - + + Det mest brukte Inkscape-verktøyet er objektveljaren. Vel den øvste knappen (pilknappen) i verktøylinja til venstre (eller trykk F1 eller mellomromstasten). No kan du merkja objekta pÃ¥ lerretet. Prøv Ã¥ merkja firkanten nedanfor: - - - + + + Det dukkar no opp Ã¥tte pilforma kontrollpunkt rundt heile objektet, og du kan: - - - + + + Flytta objektet ved Ã¥ dra det. Hald inne Ctrl for Ã¥ avgrensa til vassrett eller loddrett rørsle. - - - + + + Skalera objektet ved Ã¥ dra i eit av kontrollpunkta. Hald inneCtrl for Ã¥ halda pÃ¥ det opphavlege høgd/breidd-forholdet. - - + + Trykk pÃ¥ firkanten igjen. Kontrollpunkta vert no endra, og du kan: - - - + + + Rotera objektet ved Ã¥ dra i hjørnepunkta. Hald inne Ctrl for avgrensa til 15 gradars rotering. Dra krossmerket for Ã¥ velja midtpunktet for roteringa. - - - + + + Vri objektet ved Ã¥ dra i sidepunkta. Hald inne Ctrl for Ã¥ avgrensa til 15 gradars vriing. - - + + Du kan òg bruka talboksane øvst i vindauget for Ã¥ velja nøyaktige koordinatar («X» og «Y») og storleik («B» og «H») for utvalet. - - Omforming med tastaturet + + Omforming med tastaturet - - + + Eitt omrÃ¥de Inkscape skil seg frÃ¥ dei fleste andre teikneprogramma pÃ¥, er den omfattande støtta for snøggtastar. Det finst knapt ein einaste kommando du ikkje kan nÃ¥ direkte frÃ¥ tastaturet, og omformering av objekt er ikkje noko unntak. - - + + @@ -294,182 +294,187 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + Men kanskje det nyttigaste er pikselbaserte omformingar, som du gjer ved Ã¥ halda inne Alt og bruka omformingstastane. Til dømes vil Alt + piltastane flytta utvalet 1 skjermpiksel ved gjeldande forstørring.Du vil altsÃ¥ flytta kortare ved høg forstørring enn ved lÃ¥g. Du kan sÃ¥leis plassera objekta sÃ¥ nøyaktig du vil, berre ved Ã¥ forstørra inn eller ut. - - + + Tilsvarande vil Alt + > og Alt + < skalera utvalet slik at den synlege storleiken vert endra med éin skjermpiksel, og Alt + [ og Alt +] skalera utvalet slik at det ytste punktet vert flytta éin skjermpiksel. - - + + Note: Linux users may not get the expected results with the Alt+arrow and a few other key combinations if their Window Manager catches those key events before they reach the inkscape application. One solution would be to change the WM's configuration accordingly. - - Fleirmerking + + Fleirmerking - - + + Du kan merkja fleire objekt samtidig ved Ã¥ halda inne Shift nÃ¥r du trykkjer pÃ¥ dei. Eventuelt kan du dra rundt dei du vil merkja. Dette heiter gummistrikkmerking. (Objektveljaren lagar ein gummistrikk nÃ¥r du drar frÃ¥ eit tomt omrÃ¥de, men viss du held inne Shift før set i gang Ã¥ dra, vil du alltid fÃ¥ ein gummistrikk.) Øv deg no pÃ¥ Ã¥ merkja alle tre figurane nedanfor. - - - - - + + + + + Bruk no gummistrikken (ved Ã¥ dra eller halda inne Shift og dra) for Ã¥ merkja dei to ellipsane men ikkje rektangelet: - - - - - + + + + + PÃ¥ kvart objekt i eit utval kan du sjÃ¥ eit lite utvalsmerke – som standard ei stipla linje rundt – øvst i venstre hjørne. Dette gjer det lett Ã¥ sjÃ¥ kva som er, og ikkje er, merkt. Det hadde til dømes vore vanskeleg Ã¥ sjÃ¥ om ellipsane ovanfor var merkte om òg rektangelet var merkt om du ikkje hadde hatt dette utvalsmerket. - - + + Du kan òg fjerna objekt frÃ¥ utval ved Ã¥ halda inne Shift og trykkja pÃ¥ dei. Prøv det no, ved Ã¥ merkja alle dei tre objekta ovanfor, og bruk sÃ¥ Shift + klikk for Ã¥ fjerna dei to ellipsane frÃ¥ utvalet, slik at berre rektangelet er merkt. - - + + Du kan trykkja Escape for Ã¥ fjerna all merking. Og for Ã¥ velja alle objekta i gjeldande lag trykkjer du Ctrl + A. (Dette kan ta lang tid i store dokument som dette.) - - Gruppering + + Gruppering - - + + Du kan setja saman fleire objekt til ei gruppe, og denne fungerer dÃ¥ som som eit einskildobjekt nÃ¥r du dreg eller formar ho om. Nedanfor er dei tre figurane til venstre einskildobjekt, mens dei tre til høgre er ei gruppe. Prøv Ã¥ flytta pÃ¥ gruppa. - - - - + + + + - - + + Merk eitt eller fleire objekt og trykk Ctrl + G for Ã¥ gruppera dei, og trykk Ctrl + U for Ã¥ løysa opp éi eller fleire merkte grupper. Du kan òg gruppera grupper, akkurat som med andre objekt. Du kan ha mange grupper inni kvarandre, men Ctrl + U vil berre løysa opp den øvste grupperinga i utvalet. Ønskjer du Ã¥ løysa opp ei djup «gruppegruppe» mÃ¥ du altsÃ¥ trykkja Ctrl + U mange gongar. - - + + Men du er ikkje nøydd til Ã¥ løysa opp ei gruppe berre for Ã¥ endra pÃ¥ dei grupperte objekta. Berre hald inne Ctrl og trykk pÃ¥ objektet for Ã¥ merkja det, eller hald inne bÃ¥de Shift og Ctrl for Ã¥ merkja fleire objekt (bÃ¥de inni og utanfor grupper). Prøv Ã¥ flytta og forma om figurane i gruppa oppe til høgre utan Ã¥ løysa opp gruppa. Fjern sÃ¥ merkinga, og trykk pÃ¥ gruppa igjen. Som du ser er objekta framleis grupperte. - - Fyll og strek + + Fyll og strek - - + + - Mange av funksjonane i Inkscape er tilgjengelege frÃ¥ dialogvindauge. Den enklaste mÃ¥ten Ã¥ fargeleggja eit objekt er Ã¥ opna fargesamlingsdialogen frÃ¥ Objekt | Fargesamlingar. Vel sÃ¥ eit objekt, og trykk pÃ¥ ein farge for Ã¥ fargeleggja det. + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Men Fyll og strek-dialogen (Shift + Ctrl + F) er kraftigare. Vel figuren nedanfor, og opna Fyll og strek-dialogen. - - - + + + - + Som du ser har dialogvindauget tre faner: «Fyll», «Strekfarge» og «Strekstil». I «Fyll»-fana kan du redigera fyllet til (det indre av) dei merkte objekta. Ved Ã¥ bruka knappane under fanelinja kan du byta mellom ingen fyll («X»-knappen), heildekkjande farge og lineær eller hjulforma fargeovergang. For ellipsen ovanfor vil knappen for heildekkjande farge vera vald. - - + + - + Lengre nede i dialogvindauget ser du fargeveljarane, kvar i si eiga fane: RGB (raud, grøn og blÃ¥), HSV (nyanse, metting og lysstyrke), CMYK (cyanblÃ¥, magentaraud, gul og svart) og fargehjulet. Sistnemnte er kanskje den fargeveljaren som er greiast Ã¥ bruka. Du roterer trekanten for Ã¥ velja fargenyanse, og vel vidare nøyaktig fargen inni trekanten. Alle fargeveljarane har òg ein glidebrytar for Ã¥ velja gjennomsikt («alfaverdi»). - - + + - + NÃ¥r du merkjer eit objekt, vert fargeveljaren fyllt med fargen og streken til objektet. (For fleire merkte objekt vert gjennomsnittsfargen vist.) Prøv deg fram no, og vel forskjellige fargar. Ta gjerne utgangspunkt i figurane nedanfor: - - - - - - - - - + + + + + + + + + - + I «Strekfarge»-fana kan du fjerna streken (omrisset) rundt objekt, eller endra fargen eller gjennomsikta: - - - - - - - - - - + + + + + + + + + + - + I den siste fanen, «Strekstil», kan du velja breidda og andre eigenskapar ved streken: - - - - - - - - - + + + + + + + + + - + Du kan òg laga fargeovergangar i staden for heildekkjande fargar, bÃ¥de for fyll og strek: @@ -510,45 +515,45 @@ by 90 degrees. - - - - - - - - - - - + + + + + + + + + + + NÃ¥r du gÃ¥r frÃ¥ heildekkjande fargar til fargeovergangar, vil dei nye overgangane bruka same farge, men gÃ¥ frÃ¥ heildekkjande til gjennomsiktig. Byt til fargeovergangsverktøyet (Ctrl + F1) for Ã¥ dra overgangspunkta – punkta som bind saman linjene som definerer retninga og lengda til overgangen. NÃ¥r eit overgangspunkt er merkja, vil «Fyll og strek»-dialogen setja fargen til punktet i staden for fargen til heile objektet. - - + + - + Fargehentaren (F7) er ein siste, praktisk mÃ¥te Ã¥ endra fargane pÃ¥. Berre klikk ein plass i teikninga med verktøyet, og fargen under peikaren vert brukt som fyllfarge for objektet (hald inne Shift viss du vil endra strekfargen). - - Kopiering, justering og fordeling + + Kopiering, justering og fordeling - - + + - + Noko av det du kjem til Ã¥ gjera mykje av, er Ã¥ laga kopiar av objekt(Ctrl + D). Kopien vert plassert rett oppÃ¥ opphavet, og du kan som vanleg flytta han med musa eller med piltastane. Prøv no Ã¥ fylla linja under med kopiar av denne svarte firkanten: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -570,100 +575,107 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-ordning + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-ordning - - + + - + - Omgrepet z-ordning viser til rekkjefølgja objekta vert lagt oppÃ¥ kvarandre i teikninga, altsÃ¥ kva objekt som ligg over og dekkjer andre. Dei to kommandoane Send fremst (Home) og Send bakarst (End) pÃ¥ Objekt-menyen flyttar objekta framfor eller bak alle andre objekt i det gjeldande laget. Du kan òg bruka Hev (Page Up) og Senk (PageDown) for Ã¥ heva eller senka dei berre eitt steg, og altsÃ¥ flytta dei forbi eitt objekt i z-ordninga. Berre objekt som overlappar utvalet vert tekne omsyn til her. Til dømes vil Hev og Senk flytta utvalet heilt fremst eller bakarst i z-ordninga dersom ingen objekt overlappar utvalet. + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Øv deg no pÃ¥ Ã¥ bruka desse kommandoane pÃ¥ objekta nedanfor, slik at ellipsen heilt til venstre vert liggjande øvst, og den heilt til høgre vert liggjande nedst: - - - - - - - - + + + + + + + + - + Ein veldig nyttig snøggtast nÃ¥r det gjeld objektmerking er Tab. Viss ingenting er merkt, vil han merkja det bakarste objektet. Elles vil han merkja objektet som ligg rett over utvalet i z-ordninga. Shift + Tab verkar motsett, og startar altsÃ¥ med det fremste objektet og arbeidar seg bakover. Sidan alle nye objekt vil leggja seg fremst, vil Shift + Tab merkja det objektet du teikna sist, sÃ¥ lenge ingen objekt er merkte. Øv deg no med Tab og Shift + Tab pÃ¥ ellipsane ovanfor. - - Merking og draging av underliggjande objekt + + Merking og draging av underliggjande objekt - - + + - + Kva skal du gjera viss objektet du treng er skjult under eit anna objekt? Du ser kanskje det nedste objektet viss det over er (delvis) gjennomsiktig, men trykkjer du pÃ¥ det, vil du merkja det øvste objektet. - - + + - + Dette er kva Alt + klikk er her for. Alt + klikk merkjer først det øvste objektet, akkurat som eit vanlig objekt. Men neste gong du trykkjer Alt + klikk pÃ¥ same punkt, vil du merkja objektet under det øvste, gongen etter vil du merkja objektet under der igjen, og sÃ¥ vidare. NÃ¥r du nÃ¥r det nedste objektet, vil Alt + klikk naturlegvis merkja det øvste objektet igjen. - - + + - + [If you are on Linux, you might find that Alt+click does not work properly. Instead, it might be @@ -674,95 +686,95 @@ either turn it off, or map it to use the Meta key (aka Windows key), so Inkscape and other applications may use the Alt key freely.] - - + + - + Dette er greitt nok, men kva kan du sjÃ¥ gjera med eit underliggjande objekt du har merkja? Vel, du kan bruka snøggtastar til Ã¥ forma det om, og du kan dra kontrollpunkta. Men dreg du objektet sjølv, vil dra det øvste objektet igjen. For Ã¥ be Inkscape dra det objektet som no er merkt utan Ã¥ merkja noko anna, ka du bruka Alt + dra. Dette vil flytta det gjeldande utvalet uavhengig av kor du plasserer peikaren. - - + + - + Øv no pÃ¥ Alt + klikk og Alt + dra pÃ¥ dei to brune figurane under det grøne, gjennomsiktige rektangelet: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Konklusjon + + Konklusjon - - + + - + - Dette var altsÃ¥ ei kort innføring i dei mest grunnleggjande funksjonane i Inkscape. Det finst mange fleire, men med det du har lært til no kan du klara Ã¥ laga rett sÃ¥ flotte teikningar. Og er du interessert i Ã¥ læra endÃ¥ meir, finn du fleire innføringar under Hjelp | Innføringar. + Dette var altsÃ¥ ei kort innføring i dei mest grunnleggjande funksjonane i Inkscape. Det finst mange fleire, men med det du har lært til no kan du klara Ã¥ laga rett sÃ¥ flotte teikningar. Og er du interessert i Ã¥ læra endÃ¥ meir, finn du fleire innføringar under Hjelp | Innføringar. - + @@ -792,8 +804,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.pl.svg b/share/tutorials/tutorial-basic.pl.svg index c6d44bf1b..3650ffeea 100644 --- a/share/tutorials/tutorial-basic.pl.svg +++ b/share/tutorials/tutorial-basic.pl.svg @@ -36,133 +36,133 @@ - - Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć + + Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - + ::PODSTAWY - - + + Ten poradnik przedstawia podstawowe zagadnienia dotyczÄ…ce pracy z Inkscape'em. Jest to standardowy dokument Inkscape'a i można go przeglÄ…dać, edytować, kopiować czy zapisywać. - - + + Omawia on nawigacjÄ™ w obszarze roboczym, zarzÄ…dzanie dokumentami, podstawowe narzÄ™dzia ksztaÅ‚tów, techniki zaznaczania, przeksztaÅ‚canie obiektów za pomocÄ… wskaźnika, grupowanie, ustawianie wypeÅ‚niania i konturu, wyrównanie i kolejnoÅ›ci. Aby zapoznać siÄ™ z bardziej zaawansowanymi tematami, z menu „Pomoc†wybierz interesujÄ…ce ciÄ™ zagadnienie. - - Przesuwanie obszaru roboczego + + Przesuwanie obszaru roboczego - - + + Jest wiele sposobów przesuwania (przewijania) obszaru roboczego dokumentu. Najbardziej znany to przewijanie obszaru roboczego za pomocÄ… pasków przewijania. Można je ukryć/wyÅ›wietlić używajÄ…c skrótu [ Ctrl+B ]. Innym sposobem jest przewijanie za pomocÄ… klawiatury przy użyciu klawiszy [ Ctrl+strzaÅ‚ki ]. Można to sprawdzić wykonujÄ…c teraz próbÄ™ przewiniÄ™cia tego dokumentu. Można również przesuwać obszar roboczy za pomocÄ… Å›rodkowego przycisku myszy. Wygodnym sposobem przewijania obszaru roboczego jest przewijanie [ kółkiem ] myszy ze wciÅ›niÄ™tym klawiszem [ Shift ] – przesuwanie w poziomie lub, jeÅ›li w opcjach zaznaczono pprzybliżanie obszaru roboczego za pomocÄ… kółka myszy, [ Ctrl ] – przesuwanie w pionie. - - Przybliżanie/Oddalanie + + Przybliżanie/Oddalanie - - + + ÅatwÄ… metodÄ… przybliżania/oddalania (zoom) jest użycie klawiszy [ - ], [ + ] i [ = ]. Można także używać skrótu [ Ctrl+klikniÄ™cie ] lub [ Ctrl+klikniÄ™cie prawym przyciskiem myszy ] do przybliżania oraz [ Shift+klikniÄ™cie Å›rodkowym przyciskiem myszy ], lub [ Shift+klikniÄ™cie prawym przyciskiem myszy ] do oddalania. Wygodnym sposobem przybliżania/oddalania jest użycie kółka myszy ze wciÅ›niÄ™tym klawiszem [ Ctrl ]. Można także w polu pokazujÄ…cym aktualnÄ… wartość przybliżenia, znajdujÄ…cym siÄ™ w dolnym prawym rogu, wprowadzić żądanÄ… wartość skalowania i nacisnąć klawisz [ Enter ]. W przyborniku znajduje siÄ™ także narzÄ™dzie „Przybliżenieâ€, które można używać na kilka sposobów – wykonujÄ…c ciÄ…gniÄ™cie myszÄ… wokół elementu, który chcemy przybliżyć/oddalić, lub klikajÄ…c lewym lub prawym przyciskiem myszy. - - + + Inkscape przechowuje historiÄ™ używanych w danej sesji poziomów skalowania obszaru roboczego. Wystarczy nacisnąć klawisz [ ` ], aby przywrócić poprzedniÄ… skalÄ™ lub [ Shift+` ], aby przejść do przodu. - - NarzÄ™dzia Inkscape'a + + NarzÄ™dzia Inkscape'a - - + + Pionowy pasek znajdujÄ…cy siÄ™ po lewej stronie okna to „Przybornikâ€, zawierajÄ…cy narzÄ™dzia rysowania i edycji. W górnej części okna, poniżej menu głównego, znajduje siÄ™ pasek poleceÅ„, na którym umieszczone sÄ… przyciski realizujÄ…ce główne polecenia programu. Poniżej tego paska znajduje siÄ™ pasek kontrolek narzÄ™dziowych, zawierajÄ…cy elementy kontrolne przypisane narzÄ™dziu aktualnie wybranemu z przybornika. Na pasku stanu, poÅ‚ożonym na dole okna, sÄ… wyÅ›wietlane użyteczne podpowiedzi dotyczÄ…ce aktualnie wykonywanej czynnoÅ›ci. - - + + Wiele operacji jest dostÄ™pnych za pomocÄ… skrótów klawiaturowych. Przejdź do menu Pomoc » Opis skrótów, aby zobaczyć ich listÄ™ i opisy. - - Tworzenie dokumentów i zarzÄ…dzanie nimi + + Tworzenie dokumentów i zarzÄ…dzanie nimi - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape do zapisu swoich plików używa formatu SVG (Scalable Vector Graphics). SVG jest otwartym standardem szeroko wspieranym przez programy do obróbki grafiki. Pliki SVG sÄ… oparte na jÄ™zyku XML i mogÄ… być edytowane za pomocÄ… dowolnego edytora tego jÄ™zyka. Edytor taki posiada także Inkscape. Oprócz formatu SVG, Inkscape może importować i eksportować pliki w innych formatach (EPS, PNG). - - + + Inkscape otwiera oddzielne okno dla każdego dokumentu. Można przemieszczać siÄ™ pomiÄ™dzy nimi używajÄ…c swojego menedżera okien np. za pomocÄ… skrótu [ Alt+Tab ] lub skrótu Inkscape'a [ Ctrl+Tab ], który pozwala na przemieszczanie siÄ™ pomiÄ™dzy wszystkimi otwartymi oknami. Utwórz teraz nowy dokument i wypróbuj opisane wczeÅ›niej sposoby. Informacja: Inkscape traktuje te okna, jak karty w przeglÄ…darce. Oznacza to, że skrót klawiszowy Ctrl+Tab dziaÅ‚a tylko z dokumentami uruchomionymi w tym samym procesie. JeÅ›li zostanie otwarte wiele plików z poziomu przeglÄ…darki plików lub uruchomiony wiÄ™cej niż jeden proces Inkscape'a z ikony, skrót ten nie bÄ™dzie dziaÅ‚aÅ‚. - - Tworzenie ksztaÅ‚tów + + Tworzenie ksztaÅ‚tów - - + + NadszedÅ‚ czas na kilka ćwiczeÅ„ praktycznych! Wybierz z przybornika narzÄ™dzie „ProstokÄ…t†lub naciÅ›nij klawisz [ F4 ]. Teraz możesz przystÄ…pić do tworzenia prostokÄ…tów. Wykonaj myszÄ… kilka ciÄ…gnięć w obrÄ™bie obszaru roboczego nowego dokumentu lub bezpoÅ›rednio tutaj: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -170,293 +170,298 @@ often!) and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Wszystkie te narzÄ™dzia sÄ… ogólnie zwane narzÄ™dziami ksztaÅ‚tu. Na każdym utworzonym ksztaÅ‚cie sÄ… widoczne w postaci malutkich rombów lub kwadracików uchwyty. ZÅ‚ap jeden z nich i wykonaj ciÄ…gniÄ™cie – zobaczysz, jak zmienia siÄ™ ksztaÅ‚t. Z poziomu paska kontrolek, widocznego po zaznaczeniu ksztaÅ‚tu, można udoskonalać ksztaÅ‚t i okreÅ›lać jego domyÅ›lne parametry używane podczas tworzenia nowych elementów. - - + + Aby wycofać ostatniÄ… operacjÄ™, należy użyć skrótu klawiaturowego [ Ctrl+Z ], a jeÅ›li chce siÄ™ przywrócić wycofanÄ… operacjÄ™, należy użyć skrótu [ Shift+Ctrl+Z ]. - - Przesuwanie, skalowanie, obracanie + + Przesuwanie, skalowanie, obracanie - - + + Najczęściej używanym narzÄ™dziem jest „Wskaźnikâ€. Wybierz narzÄ™dzie wskaźnika (przycisk ze strzaÅ‚kÄ…) znajdujÄ…ce siÄ™ na samej górze przybornika lub naciÅ›nij klawisz [ F1 ] albo klawisz spacji. Teraz możesz zaznaczyć każdy obiekt znajdujÄ…cy siÄ™ w obszarze roboczym. Kliknij znajdujÄ…cy siÄ™ poniżej prostokÄ…t. - - - + + + Wokół prostokÄ…ta wyÅ›wietliÅ‚o siÄ™ osiem uchwytów w postaci strzaÅ‚ek. Teraz możesz: - - - + + + Przesuwać obiekt ciÄ…gnÄ…c go po naciÅ›niÄ™ciu lewego przycisku myszy. WykonujÄ…c tÄ™ operacjÄ™ ze wciÅ›niÄ™tym klawiszem [ Ctrl ] przesuwanie obiektu bÄ™dzie odbywaÅ‚o siÄ™ tylko w pÅ‚aszczyźnie poziomej lub pionowej. - - - + + + Skalować obiekt ciÄ…gnÄ…c za dowolny uchwyt. WykonujÄ…c tÄ™ operacjÄ™ ze wciÅ›niÄ™tym klawiszem [ Ctrl ] obiekt bÄ™dzie zachowywaÅ‚ oryginalne proporcje. - - + + Kliknij ponownie na prostokÄ…cie. Uchwyty zmieniÅ‚y swój wyglÄ…d. Teraz możesz: - - - + + + Obracać pÅ‚ynnie obiekt ciÄ…gnÄ…c za narożne uchwyty. WykonujÄ…c tÄ™ operacjÄ™ ze wciÅ›niÄ™tym klawiszem [ Ctrl ] obiekt bÄ™dzie wykonywaÅ‚ obrót skokowo o 15°. Można także zmieniać poÅ‚ożenie Å›rodka obrotu (znacznik krzyżyka) ciÄ…gnÄ…c go w dowolnym kierunku. Ze wciÅ›niÄ™tym klawiszem [ Ctrl ] zmiana poÅ‚ożenia Å›rodka obrotu bÄ™dzie nastÄ™powaÅ‚a tylko w pÅ‚aszczyźnie poziomej lub pionowej. - - - + + + Pochylać pÅ‚ynnie obiekt ciÄ…gnÄ…c za Å›rodkowe uchwyty. WykonujÄ…c tÄ™ operacjÄ™ ze wciÅ›niÄ™tym klawiszem [ Ctrl ] obiekt bÄ™dzie pochylany skokowo o 15°. - - + + PracujÄ…c w trybie wskaźnika, do okreÅ›lenia współrzÄ™dnych X i Y oraz wielkoÅ›ci (Szer. i Wys.) zaznaczonego obiektu można także używać pól numerycznych znajdujÄ…cych siÄ™ na pasku kontrolek narzÄ™dzia. - - PrzeksztaÅ‚canie za pomocÄ… klawiszy + + PrzeksztaÅ‚canie za pomocÄ… klawiszy - - + + Twórcy Inkscape'a poÅ‚ożyli szczególny nacisk na dostÄ™pność funkcji poprzez klawiaturÄ™. Jest to cecha wyróżniajÄ…cÄ… go spoÅ›ród wiÄ™kszoÅ›ci programów do grafiki wektorowej. Prawie każdÄ… czynność można wykonać za pomocÄ… klawiatury włącznie z przeksztaÅ‚ceniami obiektów. - - + + Za pomocÄ… klawiatury można przesuwać – [ klawisze strzaÅ‚ek ], skalować – klawisze [ < ] i [ > ] oraz obracać obiekty – klawisze [ [ ] i [ ] ]. DomyÅ›lnie przesuniÄ™cie, obrót lub skalowanie obiektu nastÄ™puje o 2 piksele. PrzytrzymujÄ…c klawisz [ Shift ] operacje te można zwielokrotnić 10 razy. UżywajÄ…c skrótu [ Ctrl+> ] i [ Ctrl+< ] obiekt można powiÄ™kszać lub pomniejszać odpowiednio o 200, lub 50%. DomyÅ›lnie obrót obiektu jest realizowany o kÄ…t 15°, z przytrzymanym klawiszem [ Ctrl ] obiekt jest obracany o kÄ…t 90°. - - + + JednÄ… z najbardziej użytecznych jest funkcja przeksztaÅ‚cenia o wielkość 1 piksela, wywoÅ‚ywana za pomocÄ… kombinacji [ Alt ] z jednym z klawiszy przeksztaÅ‚ceÅ„. Na przykÅ‚ad kombinacja klawiszy [ Alt+strzaÅ‚ki ] przesuwa zaznaczenie o 1 piksel w aktualnym powiÄ™kszeniu tj. o 1 piksel ekranowy. ProszÄ™ nie mylić tej wartoÅ›ci z jednostkÄ… px, która jest jednostkÄ… dÅ‚ugoÅ›ci formatu SVG niezależnÄ… od powiÄ™kszenia. Oznacza to, że w czasie przybliżania obrazu kombinacja klawiszy [ Alt+strzaÅ‚ka ] spowoduje przesuniÄ™cie obrazu o mniej niż 1 piksel absolutnego przesuniÄ™cia, zatem obraz na ekranie bÄ™dzie wyglÄ…daÅ‚ tak jakby przesuniÄ™cie nastÄ…piÅ‚o o 1 piksel. DziÄ™ki temu możliwe jest dokÅ‚adne pozycjonowanie obrazu za pomocÄ… przybliżania i oddalania. - - + + Podobnie kombinacja klawiszy [ Alt+> ] i [ Alt+< ] skaluje zaznaczony obiekt, zmieniajÄ…c jego rozmiar o jeden piksel ekranowy. Natomiast kombinacja klawiszy [ Alt+[ ] oraz [ Alt+] ] obraca go tak, że jego najdalej poÅ‚ożony od Å›rodka punkt jest przysuwany o jeden piksel ekranowy. - - + + Informacja: W systemie Linux skrót klawiaturowy [ Alt+strzaÅ‚ka ] oraz kilka innych kombinacji może dziaÅ‚ać nieprawidÅ‚owo, jeÅ›li przed instalacjÄ… Inkscape'a zostaÅ‚y one przydzielone innym aplikacjom/czynnoÅ›ciom. RozwiÄ…zaniem tego problemu jest odpowiednia zmiana skrótów klawiaturowych w menedżerze okien. - - Zaznaczanie wielu obiektów + + Zaznaczanie wielu obiektów - - + + Można zaznaczać dowolnÄ… liczbÄ™ obiektów klikajÄ…c kolejne obiekty ze wciÅ›niÄ™tym klawiszem [ Shift ]. Żądane obiekty można również zaznaczyć wykonujÄ…c ciÄ…gniÄ™cie myszÄ… wokół tych obiektów. Ten sposób zaznaczania nazywa siÄ™ zaznaczaniem elastycznym. Wskaźnik podczas ciÄ…gniÄ™cia rozpoczÄ™tego w pustym miejscu tworzy wokół obiektów jak gdyby elastycznÄ… gumkÄ™, która opina zakreÅ›lone obiekty. NaciÅ›niÄ™cie klawisza [ Shift ] przed rozpoczÄ™ciem ciÄ…gniÄ™cia zawsze utworzy zaznaczenie elastyczne, nawet jeÅ›li ciÄ…gniÄ™cie rozpoczÄ™to na obiekcie. Sprawdź to w praktyce, zaznaczajÄ…c wszystkie poniższe trzy ksztaÅ‚ty: - - - - - + + + + + Teraz użyj zaznaczania elastycznego, aby zaznaczyć dwie elipsy, ale nie zaznaczać prostokÄ…ta: - - - - - + + + + + Wokół każdego obiektu, wewnÄ…trz zaznaczenia, wyÅ›wietlana jest ramka zaznaczenia. DomyÅ›lnie jest to prostokÄ…tna ramka utworzona za pomocÄ… przerywanej linii. DziÄ™ki temu można Å‚atwo odróżnić obiekty zaznaczone i niezaznaczone. Na przykÅ‚ad, jeÅ›li ramka zaznaczenia byÅ‚aby niewidoczna, trudno byÅ‚oby w poprzednio wykonywanym ćwiczeniu zorientować siÄ™, czy obie elipsy zostaÅ‚y zaznaczone. - - + + Można w Å‚atwy sposób wyłączyć z zaznaczenia dany obiekt, klikajÄ…c go ze wciÅ›niÄ™tym klawiszem [ Shift ]. Zaznacz wszystkie powyższe obiekty, a nastÄ™pnie za pomocÄ… kombinacji [ Shift+klikniÄ™cie ] wyłącz z zaznaczenia obie elipsy, pozostawiajÄ…c zaznaczony prostokÄ…t. - - + + NaciÅ›niÄ™cie klawisza [ Esc ] powoduje zdjÄ™cie znaczenia ze wszystkich obiektów. Użycie skrótu [ Ctrl+A ] powoduje zaznaczenie wszystkich obiektów na aktywnej warstwie. JeÅ›li nie utworzono warstw, skrót dziaÅ‚a tak samo, jak zaznaczanie wszystkich elementów w dokumencie. - - Grupowanie + + Grupowanie - - + + Różne obiekty mogÄ… zostać połączone w grupÄ™. Grupa podczas przeciÄ…gania czy przeksztaÅ‚cania zachowuje siÄ™ tak jak pojedynczy obiekt. Poniższe, poÅ‚ożone po lewej stronie trzy obiekty sÄ… niezależne. Te same obiekty po prawej stronie sÄ… zgrupowane. Spróbuj przeciÄ…gnąć grupÄ™. - - - - + + + + - - + + Aby utworzyć grupÄ™, należy zaznaczyć kilka obiektów i użyć skrótu [ Ctrl+G ]. Aby rozdzielić jednÄ… lub wiÄ™cej grup, należy je zaznaczyć i nacisnąć klawisze [ Ctrl+U ]. Grupy mogÄ… być grupowane tak jak pojedyncze obiekty. Takie rekurencyjne grupy można tworzyć na dowolnÄ… głębokość. W przypadku grup rekurencyjnych użycie skrótu [ Ctrl+U ] spowoduje rozdzielenie grup najwyższego poziomu w zaznaczeniu. Aby caÅ‚kowicie rozdzielić grupy, trzeba użyć skrótu [ Ctrl+U ] wielokrotnie. - - + + JeÅ›li chcesz edytować obiekt znajdujÄ…cy siÄ™ w grupie, nie musisz jej rozdzielać. Wystarczy nacisnąć klawisz [ Ctrl ] i kliknąć obiekt, który zamierzasz edytować. Obiekt zostanie zaznaczony i można wykonywać na nim żądane operacje. Aby zaznaczyć kilka obiektów niezależnie od grupowania, można użyć skrótu [ Shift+Ctrl ] i kliknąć różne obiekty wewnÄ…trz i na zewnÄ…trz grup. Spróbuj przesunąć lub przeksztaÅ‚cić pojedyncze ksztaÅ‚ty znajdujÄ…ce siÄ™ powyżej, po prawej stronie bez rozdzielania grupy, a nastÄ™pnie odznacz i zaznacz grupÄ™ normalnie. Pomimo wykonania operacji wewnÄ…trz grupy, obiekty sÄ… nadal zgrupowane. - - WypeÅ‚nienie i kontur + + WypeÅ‚nienie i kontur - - + + - Wiele funkcji Inkscape'a jest dostÄ™pnych poprzez okna dialogowe. Na przykÅ‚ad Å‚atwym sposobem wypeÅ‚nienia obiektu kolorem lub zmiany koloru wypeÅ‚nienia jest otworzenie okna dialogowego „PrzykÅ‚adowe kolory†poprzez wybranie tego elementu z menu „Widok†lub naciÅ›niÄ™cie kombinacji klawiszy [ Shift+Ctrl+W ], zaznaczenie obiektu i wybranie próbki koloru z palety kolorów wyÅ›wietlonej w otwartym oknie dialogowym. + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Bardzo użyteczne jest okno dialogowe „WypeÅ‚nienie i kontur†dostÄ™pne w menu „Obiekt†albo poprzez naciÅ›niÄ™cie kombinacji klawiszy [ Shift+Ctrl+F ]. Zaznacz poniższy ksztaÅ‚t i otwórz okno „WypeÅ‚nienie i konturâ€. - - - + + + - + Nowo otwarte okno zawiera trzy karty: „WypeÅ‚nienieâ€, „Kontur†i „Styl konturuâ€. Karta „WypeÅ‚nienie†pozwala edytować wypeÅ‚nienie (wnÄ™trze) zaznaczonych obiektów. Przyciski znajdujÄ…ce siÄ™ na górze karty umożliwiajÄ… wybranie typu wypeÅ‚nienia: wypeÅ‚nienie kolorem jednolitym, gradientem liniowym lub radialnym oraz deseniem. Można również wyłączyć wypeÅ‚nienie używajÄ…c przycisku z oznaczeniem X. W przypadku powyższej elipsy zaznaczony bÄ™dzie przycisk wypeÅ‚nienia jednolitego. - - + + - + TrochÄ™ niżej umiejscowione sÄ… palety kolorów, każda w osobnej karcie: RGB, CMYK, HSL i KoÅ‚o. Bardzo wygodna w użyciu jest paleta koÅ‚owa, w której przesuwajÄ…c biaÅ‚y wskaźnik znajdujÄ…cy siÄ™ na kole lub po prostu klikajÄ…c żądany kolor można wybrać barwÄ™, a nastÄ™pnie klikajÄ…c lub przesuwajÄ…c znajdujÄ…ce siÄ™ wewnÄ…trz trójkÄ…ta kółeczko – odcieÅ„. Każda paleta kolorów zawiera suwak pozwalajÄ…cy ustawić kanaÅ‚ alfa – przezroczystość zaznaczonych obiektów. - - + + - + Po zaznaczeniu obiektu paleta kolorów jest natychmiast aktualizowana, wyÅ›wietlajÄ…c aktualne kolory wypeÅ‚nienia i konturu. JeÅ›li zostaÅ‚o zaznaczone wiele obiektów z różnymi kolorami, w palecie wyÅ›wietlany jest uÅ›redniony kolor. W ramach ćwiczenia przetestuj poniższe obiekty: - - - - - - - - - + + + + + + + + + - + UżywajÄ…c narzÄ™dzi znajdujÄ…cych siÄ™ na karcie „Kontur†można usunąć kontur obiektu, przypisać mu dowolny kolor czy przezroczystość. - - - - - - - - - - + + + + + + + + + + - + Ostatnia z kart – „Styl konturu†– pozwala okreÅ›lić szerokość i inne parametry konturu: - - - - - - - - - + + + + + + + + + - + Możliwe jest wypeÅ‚nienie obiektu gradientem zamiast wypeÅ‚nienia jednolitego: @@ -497,45 +502,45 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + PodstawÄ™ nowo utworzonego wypeÅ‚nienia gradientowego stanowi kolor wypeÅ‚nienia jednolitego zdążajÄ…cy pÅ‚ynnie do przezroczystoÅ›ci. Aby zmienić kierunek i dÅ‚ugość gradientu, wybierz z przybornika narzÄ™dzie „Gradient†[ Ctrl+F1 ] i ciÄ…gnÄ…c uchwyty (kontrolki połączone liniÄ…) zmieÅ„ te parametry. JeÅ›li chcesz zmienić kolory gradientu, zaznacz uchwyt gradientu znajdujÄ…cy siÄ™ w pobliżu koloru, który chcesz zmienić i w oknie dialogowym „WypeÅ‚nienie i kontur†okreÅ›l nowy kolor. - - + + - + Innym wygodnym sposobem zmiany koloru obiektu jest użycie „Próbnika koloru†[ F7 ]. UżywajÄ…c tego narzÄ™dzia kliknij dowolne miejsce na rysunku, a zaznaczony obiekt zostanie wypeÅ‚niony pobranym w ten sposób kolorem. Użycie skrótu [ Shift+klikniÄ™cie ] spowoduje przypisanie pobranego koloru do konturu. - - Powielanie, wyrównywanie, rozmieszczanie + + Powielanie, wyrównywanie, rozmieszczanie - - + + - + JednÄ… z najczęściej stosowanych operacji jest powielanie obiektu [ Ctrl+D ]. Duplikat jest umieszczany dokÅ‚adnie nad oryginaÅ‚em oraz jest zaznaczony. Można go Å‚atwo odciÄ…gnąć za pomocÄ… myszy bÄ…dź klawiszy strzaÅ‚ek. W ramach ćwiczenia spróbuj zapeÅ‚nić poniższy wiersz kopiami tego czarnego kwadratu: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -557,192 +562,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Kolejność w stosie (z-order) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kolejność w stosie (z-order) - - + + - + - OkreÅ›lenie z-order odnosi siÄ™ do kolejnoÅ›ci obiektów w rysunku uÅ‚ożonych jeden za drugim – w stosie. OkreÅ›la, który obiekt znajduje siÄ™ na wierzchu i przesÅ‚ania inne obiekty. Dwa polecenia znajdujÄ…ce siÄ™ w menu „Obiekt†– „PrzenieÅ› na wierzch†[ Home ] i „PrzenieÅ› na spód†[ End ] przenoszÄ… zaznaczony obiekt na wierzch lub na spód aktywnego stosu – przesÅ‚aniajÄ… lub sÄ… przesÅ‚aniane przez caÅ‚y stos. Dwa inne polecenia – „PrzenieÅ› w górę†[ PgUp ] i „PrzenieÅ› w dół†[ PgDn ] przenoszÄ… zaznaczony obiekt w górÄ™ lub w dół stosu o jeden krok – zaznaczony obiekt zostaje przesuniÄ™ty – odpowiednio do użytego skrótu – nad lub pod najbliższy mu niezaznaczony obiekt. + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + W ramach ćwiczenia wypróbuj te polecenia i odwróć kolejność poniższych obiektów, tak aby elipsa po lewej znajdowaÅ‚a siÄ™ na samej górze stosu, a po prawej na samym dole. - - - - - - - - + + + + + + + + - + Bardzo przydatnym skrótem sÅ‚użącym do zaznaczania jest klawisz [ Tab ]. W obiektach uÅ‚ożonych w stosie (z-order), jeÅ›li żaden obiekt nie zostaÅ‚ zaznaczony, naciÅ›niÄ™cie klawisza [ Tab ] powoduje zaznaczenie najniżej poÅ‚ożonego obiektu. JeÅ›li obiekt jest zaznaczony, zaznaczenie obiektu poÅ‚ożonego powyżej obiektu zaznaczonego. Skrót [ Shift+Tab ] dziaÅ‚a odwrotnie – rozpoczyna zaznaczanie od najwyżej poÅ‚ożonego obiektu i przechodzi do najniżej poÅ‚ożonego. JeÅ›li tworzone obiekty sÄ… dodawane na górÄ™ stosu, użycie skrótu [ Shift+Tab ], gdy nic nie jest zaznaczone, spowoduje zaznaczenie ostatnio utworzonego obiektu. Wypróbuj dziaÅ‚anie skrótów [ Tab ] i [ Shift+Tab ] na stosie elips znajdujÄ…cym siÄ™ powyżej. - - Zaznaczanie i przeciÄ…ganie obiektów przesÅ‚oniÄ™tych + + Zaznaczanie i przeciÄ…ganie obiektów przesÅ‚oniÄ™tych - - + + - + Co zrobić, jeÅ›li obiekt, który chcesz zaznaczyć, jest przesÅ‚oniÄ™ty innym obiektem? Można go zobaczyć, jeżeli obiekt powyżej jest częściowo przezroczysty, ale klikniÄ™cie go spowoduje zaznaczenie górnego obiektu, nie tego, którego potrzebujesz. - - + + - + SÅ‚uży do tego kombinacja [ Alt+klikniÄ™cie ]. Użycie tej kombinacji po raz pierwszy spowoduje zaznaczenie górnego obiektu, tak jak w przypadku zwykÅ‚ego klikniÄ™cia. Kolejne użycie [ Alt+klikniÄ™cie ] w tym samym miejscu spowoduje zaznaczenie obiektu przesÅ‚oniÄ™tego, kolejne – zaznaczenie obiektu znajdujÄ…cego siÄ™ jeszcze niżej. StÄ…d kilkukrotne użycie kombinacji [ Alt+klikniÄ™cie ] z rzÄ™du zaznaczy obiekty od góry do doÅ‚u w caÅ‚ym stosie uÅ‚ożonym wg z-order. Jeżeli zostanie osiÄ…gniÄ™ty obiekt znajdujÄ…cy siÄ™ najniżej, nastÄ™pne [ Alt+klikniÄ™cie ] spowoduje ponowne zaznaczenie obiektu znajdujÄ…cego siÄ™ na samym szczycie stosu. - - + + - + JeÅ›li twoim systemem operacyjnym jest Linux, może okazać siÄ™, że [ Alt+klikniÄ™cie ] nie dziaÅ‚a prawidÅ‚owo. Ta kombinacja może przesuwać caÅ‚e okno Inkscape'a. Dzieje siÄ™ tak, ponieważ menedżer okien zarezerwowaÅ‚ [ Alt+klikniÄ™cie ] dla innej czynnoÅ›ci. Aby usunąć ten problem, należy odnaleźć konfiguracjÄ™ zachowania okien twojego menedżera okien i wyłączyć dziaÅ‚anie tego klawisza albo przypisać dziaÅ‚anie klawisza [ Alt ], klawiszowi [ Meta ] lub klawiszowi [ Windows ]. Wówczas Inkscape i inne aplikacje bÄ™dÄ… mogÅ‚y swobodnie używać klawisza [ Alt ]. - - + + - + Dobrze, ale co zrobić, jeżeli przesÅ‚oniÄ™ty obiekt jest już zaznaczony? Można użyć klawiszy, by go przeksztaÅ‚cić albo przeciÄ…gnąć uchwyty zaznaczenia. Jednak przesuwanie samego obiektu ponownie przeniesie zaznaczenie do górnego obiektu. Tak zostaÅ‚ zaprojektowany mechanizm „kliknij i przeciÄ…gnij†– zaznacza górny obiekt znajdujÄ…cy siÄ™ pod kursorem, nastÄ™pnie przeciÄ…ga zaznaczenie. Aby przeciÄ…gać to, co jest teraz zaznaczone bez zaznaczania czegokolwiek innego, użyj kombinacji [ Alt+ciÄ…gniÄ™cie ]. Takie dziaÅ‚anie spowoduje przesuniÄ™cie aktualnego zaznaczenia, bez wzglÄ™du na to, gdzie przeciÄ…gasz mysz. - - + + - + Przećwicz kombinacje [ Alt+klikniÄ™cie ] oraz [ Alt+ciÄ…gniÄ™cie ] na tych dwóch brÄ…zowych ksztaÅ‚tach znajdujÄ…cych siÄ™ pod zielonym, przezroczystym prostokÄ…tem: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Podsumowanie + + Podsumowanie - - + + - + - Inkscape posiada dużo wiÄ™cej funkcji niż te tutaj zaprezentowane, niemniej posÅ‚ugujÄ…c siÄ™ wyżej opisanymi technikami można stworzyć prostÄ…, użytecznÄ… grafikÄ™. Aby poznać bardziej zaawansowane techniki, proszÄ™ zapoznać siÄ™ z poradnikami dostÄ™pnymi z poziomu menu „Pomoc » Poradnikiâ€. + Inkscape posiada dużo wiÄ™cej funkcji niż te tutaj zaprezentowane, niemniej posÅ‚ugujÄ…c siÄ™ wyżej opisanymi technikami można stworzyć prostÄ…, użytecznÄ… grafikÄ™. Aby poznać bardziej zaawansowane techniki, proszÄ™ zapoznać siÄ™ z poradnikami dostÄ™pnymi z poziomu menu „Pomoc » Poradnikiâ€. - + @@ -772,8 +784,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć + + Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć diff --git a/share/tutorials/tutorial-basic.ru.svg b/share/tutorials/tutorial-basic.ru.svg index d587a5e9c..eb8d7e73d 100644 --- a/share/tutorials/tutorial-basic.ru.svg +++ b/share/tutorials/tutorial-basic.ru.svg @@ -36,425 +36,430 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - + ::ОСÐОВЫ - - + + Ð’ Ñтом разделе учебника изложены оÑновы работы Ñ Inkscape. Кроме того, Ñто обычный документ Inkscape: вы можете его проÑматривать, редактировать, копировать и ÑохранÑть. - - + + Урок охватывает приёмы Ð¾Ñ€Ð¸ÐµÐ½Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° холÑте и работу Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸. Он даёт начальное предÑтавление о риÑующих фигуры инÑтрументах, о выделении, о редактировании и группировке фигур, об уÑтановке параметров заливки и обводки, выравнивании и раÑпределении объектов. Более Ñложные темы Ñмотрите из меню «Справка». - - Перемещение по холÑту + + Перемещение по холÑту - - + + ЕÑть множеÑтво ÑпоÑобов перемещатьÑÑ Ð¿Ð¾ холÑту. Попробуйте Ctrl+Ñтрелки Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ помощи клавиатуры (к примеру, попробуйте такую комбинацию Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð° вниз). Ð’Ñ‹ также можете передвигатьÑÑ Ð¿Ð¾ холÑту, зажав его поверхноÑть Ñредней клавишей мыши, или при помощи ползунков (нажмите Ctrl+B Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы показать или ÑпрÑтать ползунки). КолеÑо прокрутки мыши также работает Ð´Ð»Ñ Ð²ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ перемещениÑ. Ð”Ð»Ñ Ð³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸Ñпользуйте Shift вмеÑте Ñ ÐºÐ¾Ð»ÐµÑом мыши. - - Изменение маÑштаба + + Изменение маÑштаба - - + + Проще вÑего изменÑть маÑштаб клавишами - или + (Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ и =). Также можно иÑпользовать Ñледующие варианты ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ: Ctrl+ÑреднÑÑ клавиша мыши или Ctrl+праваÑ кнопка мыши — Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ, Shift+ÑреднÑÑ, Shift+праваÑ или колеÑо мыши Ñ Ð½Ð°Ð¶Ð°Ñ‚Ñ‹Ð¼ Ctrl — Ð´Ð»Ñ ÑƒÐ¼ÐµÐ½ÑŒÑˆÐµÐ½Ð¸Ñ. Значение указано в процентах, набрав нужное, нажмите Enter. Кроме того, в программе ИнÑтрумент маÑÑˆÑ‚Ð°Ð±Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ (Ñреди инÑтрументов Ñлева) можно увеличивать только необходимую выделенную облаÑть. - - + + Inkscape хранит иÑторию маÑштабов, которые вы иÑпользовали при работе. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы вернутьÑÑ Ðº предыдущему ÑоÑтоÑнию, нажмите клавишу ` или Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к Ñледующему ÑоÑтоÑнию Shift+`. - - ИнÑтрументы Inkscape + + ИнÑтрументы Inkscape - - + + Панель Ñо значками в левой чаÑти окна предÑтавлÑет инÑтрументы Inkscape Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ редактированиÑ. Ð’ верхней чаÑти окна (под меню) находитÑÑ ÐŸÐ°Ð½ÐµÐ»ÑŒ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¾Ñновными командными кнопками и панель Параметры инÑтрументов (чуть ниже панели управлениÑ), ÑÐ¾Ð´ÐµÑ€Ð¶Ð°Ñ‰Ð°Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ‹, Ñпецифичные Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ инÑтрумента. Строка ÑоÑтоÑÐ½Ð¸Ñ (внизу окна) будет показывать полезные подÑказки во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð°ÑˆÐµÐ¹ работы. - - + + Многие дейÑÑ‚Ð²Ð¸Ñ Ð´Ð¾Ñтупны Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹. Полный Ñправочник по клавишам находитÑÑ Ð² меню «Справка > ИÑпользование клавиатуры и мыши». - - Работа Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ + + Работа Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸ - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape иÑпользует формат SVG (Scalable Vector Graphics — МаÑÑˆÑ‚Ð°Ð±Ð¸Ñ€ÑƒÐµÐ¼Ð°Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ Ð³Ñ€Ð°Ñ„Ð¸ÐºÐ°) Ð´Ð»Ñ Ñвоих файлов. SVG ÑвлÑетÑÑ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ñ‹Ð¼ Ñтандартом и широко иÑпользуетÑÑ Ð² графичеÑких пакетах. Формат SVG иÑпользует Ñзык разметки XML, поÑтому файлы в Ñтом формате могут редактироватьÑÑ Ð»ÑŽÐ±Ñ‹Ð¼ текÑтовым или XML-редактором (отдельно от Inkscape). Помимо SVG, в Inkscape можно работать и Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ форматами (например, EPS и PNG). - - + + Ð”Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ документа Inkscape открывает новое окно. Ð’Ñ‹ можете переключатьÑÑ Ð¼ÐµÐ¶Ð´Ñƒ ними разными ÑпоÑобами в завиÑимоÑти от наÑтроек менеджера окон (например, Alt+Tab), либо иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÑобÑтвенное Ñочетание клавиш Inkscape — Ctrl+Tab Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ документами по кругу. Ð”Ð»Ñ Ð¿Ñ€Ð°ÐºÑ‚Ð¸ÐºÐ¸ попробуйте Ñоздать неÑколько новых документов и переключайтеÑÑŒ между ними. Примечание: Inkscape отноÑитÑÑ Ðº Ñтим окнам как к вкладкам в браузере, а Ñто значит, что Ctrl+Tab работает только Ð´Ð»Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð², запущенных в одном процеÑÑе. ЕÑли вы откроете неÑколько документов через файловый менеджер или запуÑтите неÑколько копий Inkscape, то переключение работать не будет. - - Создание фигур + + Создание фигур - - + + ÐаÑтало Ð²Ñ€ÐµÐ¼Ñ Ñ„Ð¸Ð³ÑƒÑ€! Выберите Ñиний прÑмоугольник в полоÑке Ñлева (или нажмите F4). Ðаведите курÑор мыши на документ (тут же или в новом Ñозданном окне), нажмите левую клавишу мыши и перемеÑтите её курÑор в Ñторону — вы получите прÑмоугольник: - - - - - - - - - - - - - + + + + + + + + + + + + + Как видите, по умолчанию прÑмоугольник залит Ñиним цветом, имеет чёрную обводку и чаÑтично прозрачен. Ðиже вы увидите, какими ÑпоÑобами можно изменÑть Ñти параметры. Другими инÑтрументами вы также можете Ñоздавать овалы, звезды и Ñпирали: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + РаÑÑмотренные инÑтрументы называютÑÑ Ð¸Ð½Ñтрументами фигур. ÐšÐ°Ð¶Ð´Ð°Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð½Ð°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° имеет один или неÑколько белых прÑмоугольников ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ (ручек). Попробуйте перемещать их в пределах документа и обратите внимание на изменение фигуры (белые точки видны только тогда, когда выбран один из четырёх инÑтрументов: Ñиний квадрат, коричневый круг, Ð¶Ñ‘Ð»Ñ‚Ð°Ñ Ð·Ð²Ñ‘Ð·Ð´Ð¾Ñ‡ÐºÐ° или Ñпираль). У панели Параметры инÑтрументов Ñвой ÑпоÑоб Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð¸Ð³ÑƒÑ€. УправлÑющие Ñлементы в ней влиÑÑŽÑ‚ на выбранные в наÑтоÑщий момент объекты (Ñ‚.е. те, ручки которых видны), а также определÑÑŽÑ‚ параметры новых фигур. - - + + Ð”Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ поÑледнего дейÑÑ‚Ð²Ð¸Ñ Ð´ÐµÐ¹Ñтвует ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ctrl+Z (еÑли вы изменили решение, можно вернуть отменённое дейÑтвие, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Shift+Ctrl+Z). - - Перемещение, изменение размера и вращение + + Перемещение, изменение размера и вращение - - + + Ðаиболее популÑрный инÑтрумент в Inkscape — Селектор. Выбрать его можно щелчком по чёрной Ñтрелке (либо нажав F1 или пробел. Этим инÑтрументом вы можете выбрать любой объект на холÑте. Щёлкните мышью по квадрату, изображённому на иллюÑтрации: - - - + + + Вокруг объекта вы увидите воÑемь Ñтрелок. Теперь вы можете: - - - + + + Передвигать объект (Ñ Ð½Ð°Ð¶Ð°Ñ‚Ñ‹Ð¼ Ctrl Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡Ð¸Ð²Ð°ÑŽÑ‚ÑÑ Ð´Ð²ÑƒÐ¼Ñ Ð¾ÑÑми: горизонтальной и вертикальной). - - - + + + МенÑть размер объекта, потÑнув за любую из Ñтрелок (менÑÑ Ñ€Ð°Ð·Ð¼ÐµÑ€ Ñ Ð½Ð°Ð¶Ð°Ñ‚Ñ‹Ð¼ Ctrl, вы Ñохраните пропорции оригинала). - - + + Щёлкните мышью по прÑмоугольнику ещё раз — направление Ñтрелок изменитÑÑ. Теперь вы можете: - - - + + + Поворачивать объект, потÑнув за угловые Ñтрелки (Ñ Ð½Ð°Ð¶Ð°Ñ‚Ñ‹Ð¼ Ctrl объект будет поворачиватьÑÑ ÑˆÐ°Ð³Ð°Ð¼Ð¸ по 15 градуÑов; ÑмеÑтив креÑтик, вы ÑмеÑтите центр вращениÑ). - - - + + + Перекашивать (наклонÑть) объект, Ð´Ð²Ð¸Ð³Ð°Ñ Ð½ÐµÑƒÐ³Ð»Ð¾Ð²Ñ‹Ðµ Ñтрелки (Ñ Ð½Ð°Ð¶Ð°Ñ‚Ñ‹Ð¼ Ctrl перекашивание будет производитьÑÑ Ñ ÑˆÐ°Ð³Ð¾Ð¼ в 15 градуÑов). - - + + Ð’ Ñтом режиме (режиме Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²) вы так же можете менÑть размеры и раÑположение Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° холÑте, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ð¾Ð»Ñ Ð²Ð²ÐµÑ€Ñ…Ñƒ. - - Изменение формы при помощи клавиш + + Изменение формы при помощи клавиш - - + + Одна из оÑобенноÑтей Inkscape, Ð¾Ñ‚Ð»Ð¸Ñ‡Ð°ÑŽÑ‰Ð°Ñ ÐµÐ³Ð¾ от большинÑтва других редакторов векторной графики — удобное управление Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹. Трудно найти команду или дейÑтвие, которые было бы невозможно выполнить Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹, и изменение формы объектов — не иÑключение. - - + + Ð’Ñ‹ можете иÑпользовать клавиатуру Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² (клавиши-Ñтрелки), Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð° (клавиши < и >) и Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ (клавиши [ и ]). По умолчанию шаг Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¸ Ñмены размера равен двум пикÑелам. С нажатой клавишей Shift Ñто значение увеличиваетÑÑ Ð² 10 раз (и ÑтановитÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼ 20 пикÑелам). Клавиши Ctrl+> и Ctrl+< увеличивают или уменьшают объект на 200% или 50% от оригинала ÑоответÑтвенно. С нажатой клавишей Ctrl вращение будет выполнÑтьÑÑ Ñ ÑˆÐ°Ð³Ð¾Ð¼ в 90 градуÑов вмеÑто 15. - - + + КÑтати говорÑ, наиболее удобны пикÑельные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹, производимые Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишей Alt и клавишами Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð¾Ñ€Ð¼. Ðапример, Alt+Ñтрелки будут двигать выбранное на 1 пикÑел данного маÑштаба (Ñ‚.е. на 1 пикÑел Ñкрана, не путайте Ñ Ð¿Ð¸ÐºÑелом, который ÑвлÑетÑÑ SVG единицей длины и отличаетÑÑ Ð¾Ñ‚ пикÑела маÑштаба). Это означает, что еÑли вы увеличили маÑштаб, то Alt+Ñтрелка даÑÑ‚ меньшее Ñмещение от абÑолютного измерениÑ, что по-прежнему будет выглÑдеть как Ñмещение на пикÑел на Ñкране. Это даёт возможноÑть точно размеÑтить объект, изменÑÑ Ð¼Ð°Ñштаб. - - + + Схожим образом Alt+> и Alt+< изменÑÑŽÑ‚ размер на один пикÑел, а Alt+[ и Alt+] вращают объект на один пикÑел. - - + + Alt+Ñтрелка и некоторые другие комбинации клавиш могут не работать, еÑли иÑпользуемый в Linux оконный менеджер перехватывает Ñти клавишные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿Ñ€ÐµÐ¶Ð´Ðµ, чем они доÑтигнут Inkscape. Обычно Ñтот Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñ€ÐµÑˆÐ°ÐµÑ‚ÑÑ Ð½Ð°Ñтройкой оконного менеджера. - - Выделение неÑкольких объектов + + Выделение неÑкольких объектов - - + + Ð’Ñ‹ можете выбрать любое количеÑтво объектов одновременно, нажав Shift+щелчок на желаемых объектах. Также можно выбрать объекты рамкой Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ â€” так называемым резиновым выделением (рамка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑвлÑетÑÑ Ñ‚Ð¾Ð³Ð´Ð°, когда выделение начинаетÑÑ Ñ Ð¿ÑƒÑтого меÑта, а Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишей Shift рамка Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑвитÑÑ Ð¸ над объектом). ПрактикуйтеÑÑŒ в выделении на Ñтих трёх фигурах: - - - - - + + + + + Теперь, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Â«Ñ€ÐµÐ·Ð¸Ð½Ð¾Ð²Ð¾ÐµÂ» выделение (без или Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐµÐ¹ Shift), выделите ÑллипÑÑ‹, но не прÑмоугольник: - - - - - + + + + + Каждый выделенный объект отображаетÑÑ Ñ Ð¿ÑƒÐ½ÐºÑ‚Ð¸Ñ€Ð½Ð¾Ð¹ рамкой вокруг него. Ð‘Ð»Ð°Ð³Ð¾Ð´Ð°Ñ€Ñ Ñтой рамке проÑто определить, какой объект выделен, а какой нет. Ðапример, еÑли выбрать оба ÑллипÑа и прÑмоугольник под ними, то без пунктирной рамки будет Ñложно понÑть, выделены ÑллипÑÑ‹ или нет. - - + + Shift+щелчок на выделенном объекте иÑключает его из общего выделениÑ. Попробуйте Ð´Ð»Ñ Ð¿Ñ€Ð°ÐºÑ‚Ð¸ÐºÐ¸ выбрать три объекта Ñверху, а поÑле Ñтого, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Shift+щелчок, иÑключите ÑллипÑÑ‹, оÑтавив выделенным только прÑмоугольник. - - + + Ðажатие Esc ÑброÑит вÑе выделениÑ. Ctrl+A выделÑет вÑе объекты в пределах активного ÑÐ»Ð¾Ñ (еÑли вы не Ñоздавали Ñлоёв, то Ñто равноÑильно выделению вÑех объектов документа). - - Группировка + + Группировка - - + + ÐеÑколько объектов могут быть объединены в группу. При перемещении и транÑформации группа ведёт ÑÐµÐ±Ñ Ñ‚Ð°ÐºÐ¶Ðµ как и обычный объект. Как Ñледует из иллюÑтрации ниже, три объекта Ñлева незавиÑимы, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº правые объекты Ñгруппированы. Попробуйте перетащить Ñгруппированные объекты. - - - - + + + + - - + + Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ нужно выбрать один или более объектов и нажать Ctrl+G. Разгруппировать их можно, нажав Ctrl+U и предварительно выбрав группу. Сами по Ñебе группы могут быть Ñгруппированы и как одиночные объекты. ÐŸÐ¾Ð´Ð¾Ð±Ð½Ð°Ñ Ð¿Ð¾ÑÑ‚Ð°Ð¿Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ° может быть Ñколько угодно Ñложной. При Ñтом Ñледует помнить, что Ctrl+U разгруппирует только поÑледнюю группировку. Ðужно нажать Ctrl+U неÑколько раз, еÑли вы хотите полноÑтью разгруппировать ÑложноÑгруппированные группы в группе. - - + + Очень удобно то, что вам не нужно разбивать группу Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ñ‹Ñ… объектов. Выполнив Ctrl+щелчок по объекту, вы его выберете и Ñможете редактировать. Таким же образом работает ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Shift+Ctrl+щелчок, позволÑÑŽÑ‰Ð°Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ неÑколько объектов незавиÑимо от группы. Попробуйте транÑформировать или перемеÑтить отдельные объекты из предыдущего примера (Ð¿Ñ€Ð°Ð²Ð°Ñ Ð²ÐµÑ€Ñ…Ð½ÑÑ ÐºÐ°Ñ€Ñ‚Ð¸Ð½ÐºÐ°) без разгруппировки, затем выберите вÑÑŽ группу обычным образом и убедитеÑÑŒ, что объекты оÑталиÑÑŒ Ñгруппированными. - - Заливка и обводка + + Заливка и обводка - - + + - МножеÑтво функций Inkscape доÑтупны через диалоги (Ñубменю). ВероÑтно, Ñамый проÑтой ÑпоÑоб заполнить объект каким-либо цветом — Ñто выбрать «Образцы цветов...» из меню «Вид» (или нажать Shift+Ctrl+W), затем определить объект и его цвет в палитре образцов цвета (изменение цвета заливки или обводки объекта). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Ðо более грамотным ÑпоÑобом будет выбор диалога «Заливка и обводка...» через меню Объект (Shift+Ctrl+F). Выберите нижнюю фигуру и откройте диалог «Заливка и обводка...». - - - + + + - + Диалог Ñодержит три вкладки: «Заливка», «Обводка», и «Стиль обводки». Вкладка «Заливка» позволит вам изменить заполнение выбранного объекта (или объектов). ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ½Ð¾Ð¿ÐºÐ¸ под вкладкой, вы можете выбрать тип заливки, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ñ€ÐµÐ¶Ð¸Ð¼ «Ðет заливки» (кнопка Ñо знаком X), режим «Сплошной цвет», режимы «Линейный градиент» или «Радиальный градиент». Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð²ÐµÐ´Ñ‘Ð½Ð½Ð¾Ð¹ выше фигуры будет нажата кнопка «Сплошной цвет». - - + + - + Чуть ниже раÑположены кнопки-варианты выбора цвета. Каждый вариант имеет Ñвою вкладку: RGB, CMYK, HSL, и «Круг». ВероÑтно, Ñамым удобным вариантом ÑвлÑетÑÑ Â«ÐšÑ€ÑƒÐ³Â», в нём можно выбрать тон цвета, Ð²Ñ€Ð°Ñ‰Ð°Ñ Ñ‚Ñ€ÐµÑƒÐ³Ð¾Ð»ÑŒÐ½Ð¸Ðº, а затем подобрать наÑыщенноÑть и ÑркоÑть в Ñамом треугольнике. Ð’Ñе варианты выбора цвета имеют возможноÑть менÑть альфа-канал (прозрачноÑть) выбранного объекта (или объектов). - - + + - + Каждый раз при выборе объекта вкладка «Заливка и обводка...» показывает текущее значение Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ объекта (Ð´Ð»Ñ Ð½ÐµÑкольких одновременно выбранных объектов, вкладка цвета показывает их уÑреднённый цвет). ЭкÑпериментируйте на Ñтих примерах: - - - - - - - - - + + + + + + + + + - + ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð²ÐºÐ»Ð°Ð´ÐºÑƒ «Обводка», вы можете убрать обводку объекта, уÑтановить его цвет или прозрачноÑть: - - - - - - - - - - + + + + + + + + + + - + ПоÑледнÑÑ Ð²ÐºÐ»Ð°Ð´ÐºÐ° «Стиль обводки» позволит вам изменить толщину и другие параметры обводки: - - - - - - - - - + + + + + + + + + - + И, наконец, вмеÑто Ñплошной окраÑки можно иÑпользовать Градиенты Ð´Ð»Ñ Ð·Ð°Ð»Ð¸Ð²ÐºÐ¸ и/или обводки: @@ -495,45 +500,45 @@ often!) - - - - - - - - - - - + + + + + + + + + + + При переключении Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° «Сплошной цвет» на режим градиента, Ñоздаваемый градиент иÑпользует предыдущий цвет и направлен от наÑыщенноÑти к прозрачноÑти. ПереключитеÑÑŒ на инÑтрумент Ð´Ð»Ñ Ð³Ñ€Ð°Ð´Ð¸ÐµÐ½Ñ‚Ð¾Ð² (выбрав инÑтрумент в левой панели или нажав Ctrl+F1). При перемещении рычагов градиента — видно, что рычаги ÑвÑзаны линиÑми, которые определÑÑŽÑ‚ направление и длину градиента. ЕÑли какой-нибудь из рычагов градиента выбран (подÑвечен Ñиним), то диалог «Заливка и обводка...» уÑтанавливает цвет рычага (цвета чаÑти градиента), а не выбранного объекта. - - + + - + Ещё один ÑпоÑоб изменить цвет объекта — иÑпользовать инÑтрумент «Пипетка» («Брать уÑреднённые цвета из изображений» (F7)). Выбрав Ñтот инÑтрумент, щёлкните мышью в любой чаÑти риÑунка, и полученный цвет будет приÑвоен выбранному до Ñтого объекту (Shift+щелчок приÑвоит цвет обводке). - - Дублирование, выравнивание, раÑпределение + + Дублирование, выравнивание, раÑпределение - - + + - + Одним из наиболее раÑпроÑтранённых дейÑтвий ÑвлÑетÑÑ Ð´ÑƒÐ±Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ объекта (Ctrl+D). Дублирование размещает дубликат над оригиналом и делает его выделенным так, что вы можете перемеÑтить его в Ñторону при помощи мыши или клавиш Ñо Ñтрелками. Попробуйте поÑтроить линию из копий Ñтого квадрата: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -555,192 +560,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-порÑдок + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-порÑдок - - + + - + - Термин Z-порÑдок (порÑдок по оÑи Z) отноÑитÑÑ Ðº перекрыванию объектами друг друга на риÑунке. Иначе говорÑ, Z-порÑдок определÑет, какой объект находитÑÑ Ð²Ñ‹ÑˆÐµ и закрывает Ñобой другие. Две команды в меню «Объект» → «ПоднÑть на передний план» (клавиша Home) и «ОпуÑтить на задний план» (клавиша End), перемеÑÑ‚ÑÑ‚ выбранный объект в Ñамую верхнюю или Ñамую нижнюю позицию по оÑи Z данного ÑлоÑ. Две другие команды: «ПоднÑть» (PgUp) и «ОпуÑтить» (PgDn) опуÑÑ‚ÑÑ‚ или приподнимут выбранный объект (или объекты), но только на один уровень отноÑительно других невыделенных объектов по оÑи Z (ÑчитаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ объекты, перекрывающие выделенные; еÑли выделение ничем не перекрываетÑÑ, дейÑтвие «ПоднÑть» и «ОпуÑтить» будет Ñтавить его в Ñамую верхнюю или Ñамую нижнюю позицию ÑоответÑтвенно). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + ПрактикуйтеÑÑŒ в иÑпользовании Ñтих команд, развернув Z-порÑдок нижеÑтоÑщих объектов так, чтобы крайний левый ÑÐ»Ð»Ð¸Ð¿Ñ Ð¾ÐºÐ°Ð·Ð°Ð»ÑÑ Ð²Ð²ÐµÑ€Ñ…Ñƒ, а крайний правый — в Ñамом низу: - - - - - - - - + + + + + + + + - + Очень Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ð¹ объектов — Tab. ЕÑли ничего не выбрано, Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° выделÑет Ñамый нижний объект по оÑи Z; при других уÑловиÑÑ… она выбирает объект, находÑщийÑÑ Ð½Ð°Ð´ выбранным объектом (объектами) на оÑи Z. Shift+Tab Ñрабатывает наоборот, Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ Ð¾Ñ‚ верхнего к нижнему, так как при Ñоздании объекта он добавлÑетÑÑ Ð²Ð²ÐµÑ€Ñ… Z-уровнÑ. И еÑли нет выделениÑ, нажатие Shift+Tab выберет поÑледний Ñозданный объект. Опробуйте иÑпользование Tab и Shift+Tab на Ñтопке ÑллипÑов вверху. - - Выделение объектов под объектами и перемещение выделенного + + Выделение объектов под объектами и перемещение выделенного - - + + - + Что вы будете делать, еÑли нужный вам объект закрыт другим объектом? Ð’Ñ‹ можете видеть нижний объект, еÑли верхний (чаÑтично) прозрачен, но щёлкнув мышью по нужному, вы Ñделаете выделенным верхний объект, а не тот, что вам нужен. - - + + - + Ð’ такой Ñитуации может помочь ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Alt+щелчок. Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° щёлкните мышью по объекту, Ð·Ð°Ð¶Ð¸Ð¼Ð°Ñ Ð¿Ñ€Ð¸ Ñтом клавишу Alt. Ð’ результате будет выбран тот объект, что Ñверху, как и при обычном выделении. Ðо при повторном нажатии Alt+щелчок в Ñтом же меÑте выделенным Ñтанет нижний объект, ещё нажатие — и выделение ÑмеÑтитÑÑ Ð½Ð° объект уровнем ниже и Ñ‚.д. Таким образом, неÑколько нажатий Alt+щелчок на Ñтопке объектов будут перемещать выделение от верхнего объекта к нижнему на оÑи Z. ДобравшиÑÑŒ до Ñамого нижнего объекта, нажатие Alt+щелчок выберет Ñамый верхний объект. - - + + - + [Alt+щелчок может не работать в Linux, еÑли иÑпользуемый оконный менеджер зарезервировал Ñти ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð´Ð»Ñ ÑобÑтвенных надобноÑтей. Попробуйте или изменить наÑтройки оконного менеджера, или заÑтавьте его иÑпользовать клавишу Meta (она же клавиша Windows), Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Inkscape и другие Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ñвободно иÑпользовать Alt.] - - + + - + Это замечательно, но что вы теперь будете делать Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ñ‹Ð¼ объектом, находÑщимÑÑ Ð¿Ð¾Ð´ объектом? Ð’Ñ‹ можете менÑть его форму и передвигать за управлÑющие ручки, но при попытке Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ñамого объекта ваше выделение ÑброÑитÑÑ Ð¸ выделенным Ñтанет объект, находÑщийÑÑ Ð²Ñ‹ÑˆÐµ (таким образом работает ÑиÑтема щелчок-и-перемещение — Ñначала она выбирает объект (верхний) под курÑором, а потом уже даёт возможноÑть его перемещать). Чтобы назначить Inkscape перемещать то, что выбрано ÑейчаÑ, не Ð²Ñ‹Ð±Ð¸Ñ€Ð°Ñ Ð½Ð¸Ñ‡ÐµÐ³Ð¾ другого, иÑпользуйте Alt+перемещение (мышью). Эта ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ перемещать нужное выделение вне завиÑимоÑти от того меÑта, где движетÑÑ ÐºÑƒÑ€Ñор мыши. - - + + - + Практикуйте Alt+щелчок и Alt+перемещение (мышью) на двух коричневых фигурах под зелёным прозрачным прÑмоугольником: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Заключение + + Заключение - - + + - + - Урок по оÑновам работы Ñ Inkscape на Ñтом закончен. Ð’ нём раÑÑмотрена Ð¼Ð°Ð»Ð°Ñ Ñ‡Ð°Ñть возможноÑтей Inkscape, но Ñо знаниÑми, которые вы получили, можно Ñоздавать проÑтые и полезные графичеÑкие работы. ОпиÑание более Ñложного материала можно найти в учебнике «Второй уровень» и других учебниках в меню «Справка > Учебник». + Урок по оÑновам работы Ñ Inkscape на Ñтом закончен. Ð’ нём раÑÑмотрена Ð¼Ð°Ð»Ð°Ñ Ñ‡Ð°Ñть возможноÑтей Inkscape, но Ñо знаниÑми, которые вы получили, можно Ñоздавать проÑтые и полезные графичеÑкие работы. ОпиÑание более Ñложного материала можно найти в учебнике «Второй уровень» и других учебниках в меню «Справка > Учебник». - + @@ -770,9 +782,9 @@ by stroke color, stroke style, fill & stroke, and object type. - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх diff --git a/share/tutorials/tutorial-basic.sk.svg b/share/tutorials/tutorial-basic.sk.svg index cb7426651..e2e55af1a 100644 --- a/share/tutorials/tutorial-basic.sk.svg +++ b/share/tutorials/tutorial-basic.sk.svg @@ -36,427 +36,426 @@ - - Na posunutie Äalej použite Ctrl+šípka dolu + + Na posunutie Äalej použite Ctrl+šípka dolu - + ::ZÃKLADY - - + + Tento návod sa týka základov používania Inkscape. Toto je regulárny dokument Inkscape, ktorý môžete prehliadaÅ¥, upravovaÅ¥, kopírovaÅ¥ z neho a ukladaÅ¥ zmeny. - - + + Návod Základy pokrýva témy: navigácia na plátne, správa dokumentov, základy nástrojov na úpravu tvarov, techniky výberu, transformácia objektov pomocou výberu, zoskupovanie, nastavenie výplne a Å¥ahu, zarovnanie a vertikálne poradie. V ponuke Pomocníka nájdete ÄalÅ¡ie návody zaoberajúce sa pokroÄilými témami. - - Posúvanie plátna + + Posúvanie plátna - - + + Je veľa spôsobov ako posúvaÅ¥ (skrolovaÅ¥) plátno (pracovnú plochu). Skúste kombináciu Ctrl+šípka, Äím plátno posuniete pomocou klávesnice. (Skúste to teraz použiÅ¥ a posunúť sa nižšie v tomto dokumente.) Tiež môžete Å¥ahaÅ¥ plátno pomocou stredného tlaÄidla myÅ¡i. Alebo môžete použiÅ¥ posuvníky okna (stlaÄením Ctrl+B ich zobrazíte alebo skryjete). Koliesko vaÅ¡ej myÅ¡i umožňuje zvislé posúvanie; podržaním klávesu Shift pri otáÄaní kolieskom môžete posúvaÅ¥ plátno vodorovne. - - Približovanie a odÄaľovanie + + Približovanie a odÄaľovanie - - + + - Najjednoduchší spôsob zmeny mierky je pomocou kláves - a + (alebo =). Môžete tiež použiÅ¥ Ctrl+kliknutie stredným tlaÄidlom alebo Ctrl+kliknutie pravým tlaÄidlom pre priblíženie, Shift+kliknutie stredným tlaÄidlom alebo Shift+kliknutie pravým tlaÄidlom na oddialenie alebo otáÄanie kolieska myÅ¡i pri stlaÄenom Ctrl. Tiež môžete kliknúť do políÄka pre zmenu mierky (v pravom dolnom rohu okna dokumentu), napísaÅ¥ presnú hodnotu mierky v % a stlaÄiÅ¥ Enter. Tiež máme nástroj Zmena mierky (v paneli nástrojov naľavo), ktorý vám umožní približovanie oblasti tým, že cez ňu potiahnete myÅ¡ou. + Najjednoduchší spôsob zmeny mierky je pomocou klávesov - a + (alebo =). Môžete tiež použiÅ¥ Ctrl+kliknutie stredným tlaÄidlom alebo Ctrl+kliknutie pravým tlaÄidlom pre priblíženie, Shift+kliknutie stredným tlaÄidlom alebo Shift+kliknutie pravým tlaÄidlom na oddialenie alebo otáÄanie kolieska myÅ¡i pri stlaÄenom Ctrl. Tiež môžete kliknúť do políÄka pre zmenu mierky (v pravom dolnom rohu okna dokumentu), napísaÅ¥ presnú hodnotu mierky v % a stlaÄiÅ¥ Enter. Tiež máme nástroj Zmena mierky (v paneli nástrojov naľavo), ktorý vám umožní približovanie oblasti tým, že cez ňu potiahnete myÅ¡ou. - - + + Inkscape si tiež udržiava históriu úrovní priblíženia, ktoré ste poÄas tejto pracovnej relácie použili. StlaÄením tlaÄidla ` sa vrátite k predchádzajúcej úrovni a stlaÄením Shift+` prejdete na nasledujúcu. - - Nástroje Inkscape + + Nástroje Inkscape - - + + Zvislý panel nástrojov naľavo zobrazuje nástroje Inkscape na kreslenie a úpravy. Vo vrchnej Äasti okna pod ponukou sa nachádza Panel príkazov s tlaÄidlami vÅ¡eobecných príkazov a Panel ovládania nástrojov, ktorý nastavuje Å¡pecifické parametre každého nástroja. Stavový panel v dolnej Äasti okna zobrazuje poÄas toho ako pracujete užitoÄné rady a správy. - - + + Množstvo operácií je dostupných vo forme klávesových skratiek. Otvorte Pomocník > Klávesnica a myÅ¡ a uvidíte kompletnú príruÄku. - - Vytváranie a spravovanie dokumentov + + Vytváranie a spravovanie dokumentov - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) -to save under a new name. (Inkscape may still be unstable, so remember to save -often!) + Na otvorenie existujúceho dokumentu SVG použite Súbor > OtvoriÅ¥ (Ctrl+O). Na uloženie použite Súbor > UložiÅ¥ (Ctrl+S) alebo UložiÅ¥ ako (Shift+Ctrl+S) na uloženie pod novým názvom. (Inkscape môže eÅ¡te stále byÅ¥ nestabilný, preto radÅ¡ej ukladajte Äasto!) - - + + Inkscape používa pre svoje súbory formát SVG (Scalable Vector Graphics). SVG je otvorený Å¡tandard, ktorý Å¡iroko podporujú grafické aplikácie. SVG súbory sú založené na XML a je ich možné upravovaÅ¥ akýmkoľvek textovým alebo XML editorom (teda okrem Inkscape). Popri SVG Inkscape dokáže importovaÅ¥ a exportovaÅ¥ niekoľko Äalších formátov (EPS, PNG). - - + + Inkscape otvára pre každý dokument samostatné okno. Môžete sa medzi nimi pohybovaÅ¥ pomocou vášho správcu okien (napr. pomocou Alt+Tab) alebo môžete použiÅ¥ skratku Inkscape — Ctrl+Tab, ktorou sa dajú dokola prepínaÅ¥ jednotlivé otvorené okná dokumentov. (Teraz vytvorte nový dokument a aby ste si to vyskúšali, prepínajte sa medzi ním a týmto dokumentom.) Pozn.: Inkscape pracuje s týmito oknami podobne ako webový prehliadaÄ s kartami, t.j. klávesová skratka Ctrl+Tab bude prepínaÅ¥ iba medzi dokumentami jedného procesu. Ak otvoríte viacero okien zo správcu súborov alebo spustíte viac ako jeden proces Inkscape prostredníctvom ikony, prepínanie nebude fungovaÅ¥. - - Vytváranie tvarov + + Vytváranie tvarov - - + + Je Äas na nejaké pekné tvary! Kliknite na nástroj Obdĺžnik na paneli nástrojov (alebo stlaÄte F4) a potom kliknite a Å¥ahajte, buÄ v novom dokumente alebo priamo tu: - - - - - - - - - - - - - + + + + + + + + + + + + + - As you can see, default rectangles come up blue, with a black stroke (outline), -and fully opaque. We'll see how to change that below. With other tools, you can -also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - - + Ako môžete vidieÅ¥, Å¡tandardné obdĺžniky sú modré s Äiernym Å¥ahom (obrysom) a ÄiastoÄne priesvitné. Nižšie uvidíme ako to zmeniÅ¥. Pomocou Äalších nástrojov tiež môžete vytváraÅ¥ elipsy, hviezdy a Å¡pirály: + + + + + + + + + + + + + + + + + + + Tieto nástroje sa spoloÄne nazývajú nástroje tvarov. Každý tvar, ktorý vytvoríte, bude maÅ¥ jeden alebo viac úchopov v tvare diamantu; skúste nimi Å¥ahaÅ¥, aby ste videli ako tvar reaguje. Panel Ovládanie pre nástroj tvar je Äalším spôsobom ako meniÅ¥ tvar; toto ovládanie ovplyvňuje momentálne vybrané tvary (napr. tie, ktoré majú úchopy) a zároveň nastavujú Å¡tandardné hodnoty, ktoré sa použijú na novovytvorené tvary. - - + + - Ak chcete vrátiÅ¥ vaÅ¡u poslednú ÄinnosÅ¥, stlaÄte Ctrl+Z. (Alebo ak si to znova rozmyslíte, môžete opakovaÅ¥ vrátenú ÄinnosÅ¥ pomocou Shift+Ctrl+Z.) + Ak chcete vrátiÅ¥ vaÅ¡u poslednú ÄinnosÅ¥, stlaÄte Ctrl+Z. (Alebo ak si to znova rozmyslíte, môžete opakovaÅ¥ vrátenú ÄinnosÅ¥ pomocou Shift+Ctrl+Z.) - - Posúvanie, zmena veľkosti, otáÄanie + + Posúvanie, zmena veľkosti, otáÄanie - - + + NajÄastejÅ¡ie používaným nástrojom v Inkscape je nástroj Výber. Kliknite na najvrchnejÅ¡ie tlaÄidlo (má na sebe symbol šípky) na paneli nástrojov alebo stlaÄte F1 alebo medzerník. Teraz môžete vybraÅ¥ ktorýkoľvek objekt na plátne. Kliknite dolu na obdĺžnik. - - - + + + Uvidíte okolo objektu úchopy v tvare šípok. Teraz môžete: - - - + + + PosúvaÅ¥ objekt Å¥ahaním. (Držaním Ctrl obmedzíte pohyb na vertikálny a horizontálny posun.) - - - + + + MeniÅ¥ veľkosÅ¥ objektu Å¥ahaním ktoréhokoľvek úchopu. (Držaním Ctrl zachováte pôvodný pomer výšky/šírky.) - - + + Teraz znova kliknite na obdĺžnik. Úchopy sa zmenia. Teraz môžete: - - - + + + OtáÄaÅ¥ objekt Å¥ahaním úchopov rohov. (Držaním Ctrl obmedzíte otáÄanie na kroky po 15 stupňoch. Ťahaním znaÄky kríža zmeníte stred otáÄania.) - - - + + + SkosiÅ¥ (nakloniÅ¥) objekt Å¥ahaním úchopov mimo rohov. (Držaním Ctrl obmedzíte skosenie na kroky po 15 stupňoch.) - - + + Kým používate nástroj Výber, môžete tiež nastaviÅ¥ presné hodnoty súradníc (X a Y) a veľkosti (W a H) výberu pomocou Äíselných vstupných polí v Paneli ovládania (nad plátnom). - - Transformácia pomocou kláves + + Transformácia pomocou klávesov - - + + Jedna z vlastností Inkscape, ktorá ho odliÅ¡uje od väÄÅ¡iny ostatných vektorových editorov, je dôraz na prístupnosÅ¥ z klávesnice. Ťažko existuje nejaký príkaz alebo ÄinnosÅ¥, ktorú nie je možné vykonaÅ¥ pomocou klávesnice a transformácie objektov nie sú výnimkou. - - + + Pomocou klávesnice sa môžete pohybovaÅ¥ (klávesy šípok), meniÅ¥ veľkosÅ¥ (klávesy < a >) a otáÄaÅ¥ (klávesy [ a ]) objekty. Å tandardný posun a zmena veľkosti je o 2 px; pri držaní klávesu Shift posúvate o desaÅ¥násobok. Ctrl+> a Ctrl+< zväÄÅ¡ujú resp. zmenÅ¡ujú na 200 resp. 50 % originálu. Å tandardné otoÄenie je o 15 stupňov; pri držaní Ctrl otáÄate o 90 stupňov. - - + + Ale snÃ¡Ä najužitoÄnejÅ¡ie sú transformácie vo veľkosti pixelov, ktoré sa vyvolávajú držaním Alt spolu s transformaÄnými klávesmi. Napríklad, Alt+šípky posunú výber o 1 pixel pri súÄasnej mierke (t.j. o 1 obrazový pixel, nemýliÅ¥ si s jednotkou px, ktorá je dĺžkovou jednotkou v SVG nezávislou od mierky zobrazenia). To znamená, že ak zväÄšíte mierku, jedným stlaÄením Alt+šípka dosiahnete menÅ¡ieho absolútneho posunu, ktorý stále bude vyzeraÅ¥ ako posunutie o jeden pixel na vaÅ¡ej obrazovke. Tak je možné meniÅ¥ pozíciu objektov s ľubovoľnou presnosÅ¥ou jednoduchou zmenou mierky podľa potreby. - - + + Podobne, Alt+> a Alt+< menia veľkosÅ¥ výberu tak, že sa zmení o jeden obrazový pixel, a Alt+[ a Alt+] ho otáÄajú tak, že sa bod naviac vzdialený od stredu posunie o jeden pixel. - - + + Pozn.: Používatelia Linuxu nemusia dosiahnuÅ¥ oÄakávané výsledky pri použití Alt+šípka a niekoľkých Äalších kombinácií kláves, ak ich správca okien tieto udalosti klávesnice zachytí predtým, než dosiahnu aplikáciu Inkscape. Jedným rieÅ¡ením by bolo zmeniÅ¥ konfiguráciu Správcu okien tak, ako je potrebné. - - Viacnásobný výber + + Viacnásobný výber - - + + Môžete naraz vybraÅ¥ ľubovoľný poÄet objektov držaním klávesu Shift+kliknutím na ne. Alebo môžete Å¥ahaÅ¥ myÅ¡ou okolo objektov, ktoré chcete vybraÅ¥; to sa nazýva výber pomocou gumovej pásky. (Nástroj Výber sa zmení na gumovú pásku, keÄ zaÄnete Å¥ahaÅ¥ z prázdneho miesta. KeÄ vÅ¡ak stlaÄíte pred zaÄiatkom Å¥ahania Shift, Inkscape vždy vytvorí gumovú pásku.) CviÄte vybranie vÅ¡etkých troch tvarov dolu: - - - - - + + + + + Teraz použite gumovú pásku (Å¥ahaním alebo Shift+Å¥ahaním) na výber dvoch elíps, ale nie obdĺžnika: - - - - - + + + + + Každý jednotlivý objekt v rámci výberu zobrazuje indikátor výberu — Å¡tandardne obdĺžnikový rámec s preruÅ¡ovaným okrajom. Tieto indikátory uľahÄujú vidieÅ¥, Äo je vybrané a Äo nie. Napríklad ak vyberiete obe elipsy a obdĺžnik, bez indikátora by ste mali problém uhádnuÅ¥, Äi sú elipsy vybrané alebo nie. - - + + Shift+kliknutie na vybraný objekt ho odoberie z výberu. Vyberte vÅ¡etky tri objekty hore, potom použite Shift+kliknutie na odobranie oboch elíps z výberu, Äím ponecháte vybraný iba obdĺžnik. - - + + StlaÄením klávesu Esc zrušíte výber akýchkoľvek vybraných objektov. Ctrl+A vyberie vÅ¡etky objekty na aktuálnej vrstve (ak ste nevytvorili vrstvy, je to to isté ako vÅ¡etky objekty v dokumente). - - Zoskupovanie + + Zoskupovanie - - + + Niekoľko objektov je možné skombinovaÅ¥ do skupiny. Skupina sa správa ako jediný objekt, keÄ ju Å¥aháte alebo transformujete. Tri objekty dolu sú nezávislé; rovnaké tri objekty napravo sú zoskupené. Skúste Å¥ahaÅ¥ skupinu. - - - - + + + + - - + + Skupinu vytvoríte vybraním jedného alebo viacerých objektov a stlaÄením Ctrl+G. Jedno alebo viacero zoskupení zrušíte stlaÄením Ctrl+U. Samotné skupiny je možné zoskupovaÅ¥ rovnako ako akékoľvek iné objekty. Takéto rekurzívne skupiny môžu byÅ¥ ľubovoľne komplexné. AvÅ¡ak Ctrl+U ruší zoskupenie iba najvrchnejÅ¡ej úrovne zoskupenia vo výbere. Ak chcete zruÅ¡iÅ¥ zoskupenie hlboko vnorených skupín, budete musieÅ¥ stláÄaÅ¥ Ctrl+U opakovane. - - + + Ak chcete upravovaÅ¥ objekt v rámci skupiny, nemusíte nutne zoskupenie ruÅ¡iÅ¥. Ctrl+kliknutím objekt vyberiete a bude možné ho samostatne upravovaÅ¥. Shift+Ctrl+kliknutím vyberiete viacero objektov (v rámci alebo mimo akejkoľvek skupiny) nezávisle od zoskupenia. Pokúste sa presunúť alebo transformovaÅ¥ jednotlivé tvary v skupine (vpravo hore) bez toho, aby ste zruÅ¡ili zoskupenie. Potom zruÅ¡te výber a normálne vyberte skupinu, aby ste videli, že zostala zoskupená. - - Výplň a Å¥ah + + Výplň a Å¥ah - - + + - Mnohé z funkcií Inkscape sú dostupné prostredníctvom dialógov. Pravdepodobne najjednoduchší spôsob ako vyfarbiÅ¥ objekt nejakou farbou je otvorením dialógu Vzorkovníka z ponuky ZobraziÅ¥ (alebo stlaÄením Shift+Ctrl+W), vybraÅ¥ objekt a kliknúť na farbu vzorkovníka, Äím sa objekt zafarbí (zmení farbu výplne). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Mocnejší je dialóg Výplň a Å¥ah z ponuky Objekt (alebo po stlaÄení Shift+Ctrl+F). Vyberte tvar dolu a otvorte dialóg Výplň a Å¥ah. - - - + + + - + Uvidíte, že dialóg má tri záložky: Výplň, Farba Å¥ahu a Å týl Å¥ahu. Záložka Výplň vám umožňuje upraviÅ¥ výplň (vnútro) vybraného objektu Äi objektov. Pomocou tlaÄidiel hneÄ pod záložkou môžete vybraÅ¥ typ výplne vrátane žiadnej výplne (tlaÄidlo s krížikom), jednoduchú farebnú výplň ako aj lineárne a radiálne farebné prechody. Pre tvar hore sa aktivuje tlaÄidlo Jednoduchá výplň. - - + + - + ÄŽalej nižšie uvidíte niekoľko nástrojov pre výber farby, každý na vlastnej záložke: RGB, CMYK, HSL a Koleso. SnÃ¡Ä najpohodlnejší je nástroj Koleso, kde môžete otáÄaÅ¥ trojuholníkom pre výber farby na kolese a potom vybraÅ¥ odtieň tejto farby z trojuholníka. VÅ¡etky nástroje pre výber farby obsahujú posuvník pre výber hodnoty alfa (krytia) vybraných objektov. - - + + - + Kedykoľvek vyberiete objekt, nástroj pre výber farby sa aktualizuje, aby zobrazil aktuálnu výplň a Å¥ah (pri viacerých vybraných objektoch dialóg zobrazuje ich priemernú farbu). Hrajte sa s týmito vzorkami alebo si vytvorte vlastné: - - - - - - - - - + + + + + + + + + - + Pomocou záložky Farba Å¥ahu môžete odstrániÅ¥ Å¥ah (obrys) objektu alebo mu prideliÅ¥ akúkoľvek farbu a priesvitnosÅ¥. - - - - - - - - - - + + + + + + + + + + - + Na poslednej záložke, Å týl Å¥ahu, môžete nastaviÅ¥ šírku a iné parametre Å¥ahu: - - - - - - - - - + + + + + + + + + - + Nakoniec, namiesto jednoduchej farby môžete použiÅ¥ pre výplne a Å¥ahy farebné prechody: @@ -497,50 +496,44 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + KeÄ prepnete z jednoduchej farby na farebný prechod, novovytvorený farebný prechod použije ako základ prechod z predoÅ¡lej jednoduchej farby z nepriesvitnej do priehľadnej. Prepnite na nástroj Farebný prechod (Ctrl+F1) a Å¥ahajte úchopy farebného prechodu — ovládacie prvky pripojené Äiarami, ktoré definujú smer a dĺžku farebného prechodu. KeÄ je vybraný niektorý z úchopov farebného prechodu (zvýraznený modrou), dialóg Výplň a Å¥ah nastavuje farbu daného úchopu namiesto farby celého objektu. - - + + - + EÅ¡te Äalší pohodlný spôsob ako zmeniÅ¥ farbu objektu je pomocou nástroja Pipeta. (F7). Jednoducho kliknite týmto nástrojom kdekoľvek v kresbe a vybraná farba sa priradí výplni vybraného objektu (Shift+kliknutie priradí farbu Å¥ahu). - - Duplikácia, zarovnanie, rozloženie + + Duplikácia, zarovnanie, rozloženie - - + + - + Jedna z najÄastejších operácií je duplikácia objektu (Ctrl+D). Duplikát sa umiestni presne nad originál a je vybraný, takže ho môžete odtiahnuÅ¥ myÅ¡ou alebo klávesmi šípok. Pre precviÄenie skúste zaplniÅ¥ Äiaru kópiami tohto Äierneho Å¡tvorca: - - - + + + - + - Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares -(Shift+click or drag a rubberband), open the dialog and press the -“Center on horizontal axis†button, then the “Make horizontal gaps between objects -equal†button (read the button tooltips). The objects are now neatly aligned and -distributed equispacedly. Here are some other alignment and distribution -examples: + Je pravdepodobné, že vaÅ¡e kópie Å¡tvorca budú rozložené viacmenej náhodne. Tu prichádza vhod dialóg Zarovnanie a umiestnenie (Ctrl+Shift+A). Vyberte vÅ¡etky Å¡tvorce (Shift+kliknutie alebo Å¥ahaním gumovou páskou), otvorte dialóg a stlaÄte tlaÄidlo „CentrovaÅ¥ na vodorovnej osi“, potom „Rovnomerne vodorovne rozmiestniÅ¥ objekty“ (Äítajte bublinové texty tlaÄidiel). Objekty sú teraz pekne zarovnané a ekvidiÅ¡tantne rozložené. Tu sú ÄalÅ¡ie príklady zarovnania a umiestnenia: @@ -557,192 +550,194 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Vertikálne poradie + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Vertikálne poradie - - + + - + - Termín vertikálne poradie znamená poradie, v akom sú objekty na seba poskladané na kresbe, t.j. ktoré sú na vrchu a zakrývajú iné. Dva príkazy v ponuke Objekt — „Presunúť na vrch“ (kláves Home) a „Presunúť na spodok“ (kláves End) presunú objekty celkom navrch resp. celkom naspodok vertikálneho poradia aktuálnej vrstvy. ÄŽalÅ¡ie dva príkazy — „Presunúť vyššie“ (PgUp) a „Presunúť nižšie“ (PgDn) znížia alebo zvýšia výber iba o jeden krok, t.j. posunú ho o jeden nevybraný objekt vo vertikálnom poradí (iba objekty, ktoré sa prekrývajú sa v poradí poÄítajú; ak sa s výberom niÄ neprekrýva, „Presunúť vyššie“ a „Presunúť nižšie“ ho presunú celkom navrch resp. celkom naspodok). + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + PrecviÄte si použitie týchto príkazov tým, že obrátite vertikálne poradie objektov dolu tak, že elipsa celkom vľavo bude navrchu a tá celkom vpravo bude naspodku: - - - - - - - - + + + + + + + + - + Veľmi užitoÄná skratka na výber je kláves Tab. Ak nie je niÄ vybrané, vyberie najspodnejší objekt; inak vyberie objekt nad vybraným objektom vo vertikálnom poradí. Shift+Tab funguje opaÄne, zaÄínajúc od najvrchnejÅ¡ieho objektu a postupujúc smerom dolu. KeÄže objekty, ktoré vytvárate, sa pridávajú na vrch poradia, stlaÄením Shift+Tab ak nie je niÄ vybrané pohodlne vyberiete objekt, ktorý ste práve posledný vytvorili. PrecviÄte si klávesy Tab a Shift+Tab na elipsách vyššie. - - Výber pod a Å¥ahanie výberu + + Výber pod a Å¥ahanie výberu - - + + - + ÄŒo robiÅ¥ ak je objekt, ktorý potrebujete, skrytý pod iným objektom? Objekt dolu môžete vidieÅ¥, ak je ten navrchu (ÄiastoÄne) priesvitný, ale kliknutím naň sa vyberie vrchný objekt, nie ten, ktorý potrebujete. - - + + - + Na to slúži Alt+kliknutie. Alt+kliknutie najprv vyberie vrchný objekt ako obyÄajné kliknutie. AvÅ¡ak ÄalÅ¡ie Alt+kliknutie na rovnaké miesto vyberie objekt pod vrchným objektom; ÄalÅ¡ie kliknutie eÅ¡te nižší objekt atÄ. Tak niekoľko Alt+kliknutí za sebou prejde dokola, od vrchu dolu, celým vertikálnym poradím objektov v mieste kliknutia. Po dosiahnutí spodku ÄalÅ¡ie Alt+kliknutie prirodzene vyberie opäť najvrchnejší objekt. - - + + - + [Ak používate Linux, môže sa staÅ¥, že Alt+kliknutienepracuje správne. Namiesto toho sa môže presúvaÅ¥ celé okno Inkscape. To je preto, že váš správca okien vyhradil Alt+kliknutie na inú ÄinnosÅ¥. Spôsob ako to napraviÅ¥ je nájsÅ¥ konfiguráciu Správania okien vo vaÅ¡om Správcovi okien a buÄ ho vypnúť, alebo namapovaÅ¥ použitie klávesu Super (tiež známeho ako kláves Windows), aby Inkscape a iné aplikácie mohli slobodne používaÅ¥ kláves Alt.] - - + + - + To je pekné, ale keÄ raz vyberiete objekt pod povrchom, Äo s ním môžete robiÅ¥? Môžete použiÅ¥ klávesy na jeho transformáciu a môžete Å¥ahaÅ¥ úchopy výberu. AvÅ¡ak Å¥ahaním samotného objektu znova zmeníte výber na najvrchnejší objekt (tak je navrhnuté fungovanie kliknutia a Å¥ahania — vyberie prvý (vrchný) objekt pod kurzorom a potom Å¥ahá výber). Aby ste Inkscape povedali, aby Å¥ahal to, Äo je vybrané teraz bez toho, aby sa vybralo nieÄo iné, použite Alt+Å¥ahanie. Tým sa presunie aktuálny výber bez ohľadu na to, kde Å¥aháte myÅ¡ou. - - + + - + PrecviÄte si Alt+kliknutie and Alt+Å¥ahanie na dvoch hnedých tvaroch pod zeleným priesvitným obdĺžnikom: - - - - - Selecting similar objects + + + + + Výber podobných objektov - - - - - - Inkscape can select other objects similar to the object currently selected. -For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > -Fill Color from the menu. All the objects with a fill color the same -shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - In addition to selecting by fill color, you can select multiple similar objects -by stroke color, stroke style, fill & stroke, and object type. - - - Záver + + + + + + Inkscape dokáže vyberaÅ¥ ÄalÅ¡ie objekty podobné aktuálne vybranému objektu. Napríklad ak chcete vybraÅ¥ vÅ¡etky modré Å¡tvorÄeky nižšie, najskôr vyberte jeden z modrých Å¡tvorÄekov a v menu zvoľte UpraviÅ¥ > VybraÅ¥ rovnaké > Farba výplne. VÅ¡etky objekty s výplňou rovnakého odtieňa modrej farby budú vybrané. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Okrem výberu na základe zhodnej farby výplne môžete vybraÅ¥ viacero podobných objektov aj podľa farby Äi Å¡týlu Å¥ahu, výplne a Å¥ahu a typu objektu. + + + Záver - - + + - + - Týmto konÄí návod Základy. Inkscape toho zvládne oveľa viac, ale tu opísanými technikami už budete schopní vytváraÅ¥ jednoduchú a predsa užitoÄnú grafiku. KomplikovanejÅ¡ie veci sa nauÄíte v návode PokroÄilé a Äalších v ponuke Pomocník > Návody. + Týmto konÄí návod Základy. Inkscape toho zvládne oveľa viac, ale tu opísanými technikami už budete schopní vytváraÅ¥ jednoduchú a predsa užitoÄnú grafiku. KomplikovanejÅ¡ie veci sa nauÄíte v návode PokroÄilé a Äalších v ponuke Pomocník > Návody. - + @@ -772,8 +767,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Na posunutie späť použite Ctrl+šípka hore + + Na posunutie späť použite Ctrl+šípka hore diff --git a/share/tutorials/tutorial-basic.sl.svg b/share/tutorials/tutorial-basic.sl.svg index 5af9ef9e5..c802f0f56 100644 --- a/share/tutorials/tutorial-basic.sl.svg +++ b/share/tutorials/tutorial-basic.sl.svg @@ -36,105 +36,105 @@ - - Uporabite Ctrl+puÅ¡Äica navzdol za drsenje + + Uporabite Ctrl+puÅ¡Äica navzdol za drsenje - + ::OSNOVE - - + + V tem vodiÄu vam bomo predstavili osnove uporabe Inkscapa. To je obiÄajen dokument, ki ga lahko odprete, spreminjate in shranjujete. - - + + Osnovni vodiÄ po Inkscapu zajema gibanje, približevanje, upravljanje z dokumenti, risanje oblik, spreminjanje predmetov, metode izbiranja predmetov, združevanje, nastavljanje polnila in obrisa, poravnave in prekrivanje. Za ostale teme si poglejte Napredni vodiÄ v meniju PomoÄ. - - Gibanje po platnu + + Gibanje po platnu - - + + Po dokumentu se lahko gibate na mnogo naÄinov. S tipkovnico držite tipko Ctrl in pritiskate na smerne tipke Ctrl+smerne tipke. (Poskusite se sedaj tako premakniti navzdol.) Platno lahko povleÄete s srednjim miÅ¡kinim gumbom. Uporabite lahko tudi drsnike (pritisnite Ctrl+B, da jih pokažete ali skrijete). MiÅ¡kin koleÅ¡Äek vas premika po navpiÄni osi; hkratno držanje tipke Shift po vodoravni. - - Približevanje in oddaljevanje pogleda + + Približevanje in oddaljevanje pogleda - - + + Najlažji naÄin je pritiskanje tipk +, - ali =. Uporabite lahko tudi Ctrl+srednji gumb ali Ctrl+desni gumb za približanje pogleda, Shift+srednji gumb ali Shift+desni gumb za oddaljitev podgleda, ali pa držite Ctrl in vrtite miÅ¡kin koleÅ¡Äek. V spodnjem desnem kotu okna lahko stopnjo poveÄave tudi izberete ali vpiÅ¡ete v odstotkih. KonÄno pa imamo tudi orodje za Pogled (v levi orodjarni), s katerim lahko približate obmoÄje tako, da ga obkrožite. - - + + Inkscape si zapomni tudi zgodovino poveÄav, ki ste jih med delom uporabili. Pritisnite ` za premikanje skozi prejÅ¡nje poveÄave ali Shift+` za prejÅ¡nje bodoÄe. - - Orodja v Inkscapu + + Orodja v Inkscapu - - + + NavpiÄna orodjarna na levi strani vsebuje orodja za risanje in urejanje. V gornjem delu zaslona, pod meniji najdete Vrstico ukazov s sploÅ¡nimi funkcijami, in Vrstico orodja, ki prikazuje možnosti posameznega orodja. Vrstica stanja na dnu okna med delom prikazuje uporabne nasvete in sporoÄila. - - + + - Mnogo dejanj lahko napravite s pomoÄjo kombinacij tipk na tipkovnici. Odprite PomoÄ > MiÅ¡ka in tipkovnica za celoten spisek. (V naslednjem razdelku bomo s tipkovnico prilagajali pogled). + Mnogo dejanj lahko napravite s pomoÄjo kombinacij tipk na tipkovnici. Odprite PomoÄ > MiÅ¡ka in tipkovnica za celoten spisek. (V naslednjem razdelku bomo s tipkovnico prilagajali pogled). - - Ustvarjanje in urejanje dokumentov + + Ustvarjanje in urejanje dokumentov - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape za zapis datotek uporablja obliko SVG (Scalable Vector Graphics - raztegljiva vektorska grafika). SVG je odprt in Å¡iroko podprt standard. SVG datoteke temeljijo na XML jeziku in jih lahko odpremo tudi s katerimkoli urejevalnikom besedil. Razen SVG zna Inkscape uvažati in izvažati tudi v razliÄne druge zapise (EPS, PNG). - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Risanje likov + + Risanje likov - - + + ÄŒas za risanje! Iz orodjarne izberite orodje za pravokotnike (ali pritisnite F4) in povlecite po platnu. To lahko storite kar tu ali pa v novem dokumentu: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + To so orodja za like. Vsak lik, ki ga nariÅ¡ete, ima vsaj eno roÄico v obliki romboida; poskusite jih premikati, da vidite, kako se lik odziva. V zgornji orodjarni je nekaj nastavitev za vsako orodje. Tudi tu lahko prilagajate obliko. Te nastavitve spremenijo trenutno izbran lik (tisti z roÄicami) in se shranijo za bodoÄe novoustvarjene like. - - + + Zadnje dejanje lahko razveljavite s pritiskom na Ctrl+Z. (ÄŒe se Å¡e enkrat premislite, lahko obnovite razveljavljeno dejanje s Shift+Ctrl+Z). - - Premikanje, raztezanje, vrtenje + + Premikanje, raztezanje, vrtenje - - + + Najpogosteje uporabljano orodje v Inkscapu je Izbirnik. Kliknite na najviÅ¡ji gumb v orodjarni, tisti s puÅ¡Äico (ali pritisnite F1 ali preslednico). Sedaj lahko izberete katerikoli predmet na platnu. Kliknite na spodnji pravokotnik. - - - + + + Okrog predmeta se pojavi osem roÄic v obliki puÅ¡Äic. Sedaj lahko: - - - + + + Predmet premikate tako, da ga povleÄete. (Držite Ctrl, da gibanje omejite na vodoravno in navpiÄno. - - - + + + Umerjate (spreminjate velikost) tako, da povleÄete poljubno roÄico (Držite Ctrl, da ohranite izvirno razmerje viÅ¡ine in Å¡irine) - - + + Ponovno kliknite na pravokotnik. RoÄice se spremenijo. Sedaj lahko: - - - + + + Vrtite predmet tako, da vleÄete roÄice v kotih. (Držite Ctrl, da preskakujete po 15 stopinj. Povlecite križec iz srediÅ¡Äa, da premaknete os vrtenja.) - - - + + + Z vleÄenjem srednjih roÄic, lahko predmet nagibate (Držite Ctrl, da omejite nagibanje na 15-stopinjske kote.) - - + + Ko delate z izbirnikom, lahko uporabljate tudi vnosna polja v vrstici za orodja (nad platnom). Z njmi lahko natanÄno doloÄite koordinate in velikosti izbranih predmetov. - - Urejanje s tipkovnico + + Urejanje s tipkovnico - - + + Inkscape je v primerjavi z drugimi programi za vektorsko risanje poseben, saj daje velik poudarek delu s tipkovnico. Skorajda vsako dejanje lahko opravite s kombinacijo tipk. Tudi preoblikovanja predmetov niso izjema. - - + + @@ -294,180 +294,185 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + Verjetno najbolj uporabna pa so preoblikovanja po pikah, ki jih opravljamo s pritiskom na Alt in ustrezne tipke. Na primer, Alt+smerniki bo izbiro premaknilo za eno piko pri trenutni poveÄavi. (oz. za eno zaslonsko piko, Äesar ne smete zameÅ¡ati z enoto imenovano pika, ki je dolžinska enota SVG, neodvisna od poveÄave) To pomeni, da bo, Äe približate pogled, dejanski premik predmeta manjÅ¡i, izgledal pa bo Å¡e vedno eno toÄko. Tako lahko premete postavljate z poljubno natanÄnostjo enostavno tako, da približujete pogled. - - + + Podobno bosta Alt+> in Alt+< raztegnila izbiro, tako da bo njen prikaz spremenjen za 1 toÄko, in Alt+[ in Alt+] zavrtela izbiro tako, da so bo od osi najbolj oddaljena toÄka premaknila za 1 toÄko. - - + + Opomba: Uporabniki Linuxa morda z Alt+smerna tipka in nekaj drugimi kombinacijami tipk ne bodo dobili želenega uÄinka, Äe njihov okenski upravitelj prestreže te dogodke, preden dosežejo aplikacijo Inkscape. Možna reÅ¡itev je, da ustrezno spremenite nastavitev okenskega upravitelja. - - Å irÅ¡e izbiranje + + Å irÅ¡e izbiranje - - + + VeÄ predmetov hkrati lahko izberete tako, da držite Shift in klikate nanje, ali pa povleÄete Izbirnik okrog njih. Temu reÄemo elastika. (Izbirnik naredi elastiko, Äe zaÄnete vleÄi na prazni povrÅ¡ini; Äe pred tem že držite Shift pa v vsakem primeru.) Poskusite izbrati naslednje tri predmete: - - - - - + + + + + In sedaj uporabite elastiko (poteg ali Shift+poteg), da izberete obe elipsi, ne pa tudi pravokotnika: - - - - - + + + + + Vsak od izbranih predmetov pokaže oznako izbire, majhen romboid v zgornjem levem kotu. Ta oznaka vam olajÅ¡a pregled nad tem, kaj je izbrano in kaj ne. ÄŒe bi, na primer, izbrali obe elipsi in pravokotnik, brez teh oznak ne bi mogli ugotoviti ali sta elipsi izbrani. - - + + ÄŒe sedaj kliknete na predmet in ob tem držite Shift, ga izkljuÄite iz izbire. Izberite vse tri gornje predmete, nato uporabite ta prijem, da izkljuÄite obe elipsi, tako da vam ostane izbran le Å¡e pravokotnik. - - + + ÄŒe pritisnete Esc, ni veÄ izbran noben predmet. Ctrl+A izbere vse predmete na trenutnem sloju (Äe niste ustvarili nobenih slojev, je to isto kot izbira vseh predmetov v dokumentu). - - Združevanje + + Združevanje - - + + VeÄ predmetov lahko združite v skupino. Skupina se nato obnaÅ¡a kot enoten predmet, Äe jo premikate ali preoblikujete. Spodnji levi trije predmeti so neodvisni; enaki trije predmeti na desni, pa so združeni. Poskusite premakniti skupino. - - - - + + + + - - + + Za združitev izberite enega ali veÄ predmetov in pritisnite Ctrl+G. Za razdružitev ene ali veÄ skupin jih izberite in pritisnite Ctrl+U. Tudi skupine lahko združujete med seboj, tako kot ostale predmete. Za takÅ¡ne rekurzivne skupine ni omejitve v globini, vendar pa bo razdruževanje uÄinkovalo le na zadnjo raven združevanja, zato boste morali veÄkrat pritisniti Ctrl+U, da boste do konca razdružili takÅ¡no globoko skupino v skupini. - - + + ÄŒe želite spreminjati predmet znotraj skupine, vam je ni treba razdruževati. Ctrl+kliknite na predmet, pa ga boste lahko samostojno preoblikovali, ali pa Shift+Ctrl+clicknite na veÄ predmetov znotraj ali zunaj katerekoli skupine. Poskusite spreminjati posamezne like zgoraj desno, ne da bi jih razdružili, nato pa poskusite spet premakniti skupino. Opazili boste, da je Å¡e vedno povezana. - - Polnjenje in obroba + + Polnjenje in obroba - - + + - Mnogo Inkscapovih možnosti je dostopnih preko pogovornih oken. Najlažji naÄin za pobarvanje predmeta je, da odprete pogovorno okno Paleta v meniju Predmet, izberete željen predmet in kliknete na željeno barvo (tako mu spremenite barvo polnila). + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + VeÄ možnosti ponuja pogovorno okno Polnjenje in obroba. (Shift+Ctrl+F). Izberite spodnji lik in odprite pogovorno okno Polnjenje in obroba. - - - + + + Pogovorno okno ima tri zavihke: Polnilo, Barva Ärte in Slog Ärte. V prvem lahko nastavite barvo (notranjost) izbranega lika. Z gumbi pod zavihkom lahko izberete prazno (gumb z X-om), Äisto barvo, ravne ali krožne prelive, polnjenje z vzorcem. Za zgornji lik bo izbran gumb za Äisto barvo. - - + + Niže spodaj lahko vidite izbirnik barve - ali natanÄeje, zbirko raznih izbirnikov, vsakega v svojem zavihku: RGB, HSV, CMYK, Barvni krog. Najbolj udoben je barvni krog, kjer z vrtenjem trikotnika doloÄite odtenek, nato pa Å¡e motnost tega odtenka. Vsi izbirniki imajo tudi drsnik za motnost predmetov. - - + + Kadarkoli izberete predmet se izbirnik barve nastavi na njegovo barvo polnila in obrobe (Äe izberete veÄ predmetov, se nastavi na povpreÄne barve). Malce se igrajte z naslednjimi primeri ali naredite svojega: - - - - - - - - - + + + + + + + + + V zavihku za barvo Ärte lahko odstranite obrobo predmeta ali pa mu doloÄite barvo in prosojnost: - - - - - - - - - - + + + + + + + + + + Zadnji zavihek, Slog Ärte, vam omogoÄi nastavitev debeline Ärte in njene oblike: - - - - - - - - - + + + + + + + + + @@ -510,45 +515,45 @@ by 90 degrees. - - - - - - - - - + + + + + + + + + Ko preklopite s Äistih barv na prelive, nov preliv uporabi prej doloÄeno barvo, ki prehaja od povsem prosojne do povsem Äiste. Preklopite na orodje za prelive (Ctrl+F1) in povlecite roÄice preliva — vozliÅ¡Äi sta povezani z Ärto, ki doloÄa smer in dolžino preliva. Ko je roÄica preliva izbrana (modro osvetljena) se pogovorno okno Polnilo in obroba nastavi na barvo roÄice, namesto na barvo celotnega predmeta. - - + + Naslednji priroÄen naÄin doloÄanja barve predmetom je Kapalka (F7). Kliknite z njo kamorkoli in barva pod njo bo doloÄena izbranemu predmetu. (Shift+klik doloÄi barvo obrobe). - - Podvojevanje, poravnavanje, razporeditev + + Podvojevanje, poravnavanje, razporeditev - - + + Zelo pogosto dejanje je podvojevanje predmeta (Ctrl+D). Dvojnik se pojavi natanko na mestu izvirnika in je takoj izbran, tako da ga lahko z miÅ¡ko povleÄete proÄ ali pa ga premaknete s smernimi tipkami. Poskusite za vajo z dvojniki Ärnega kvadratka zapolniti vrsto: - - - + + + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -570,192 +575,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Prekrivanje + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Prekrivanje - - + + - Pojem prekrivanje pomeni zaporedje zlaganja predmetov v risbi, t.j. kateri predmeti so nad drugimi. V meniju Predmet imate ukaze Dvigni na vrh (tipka Home), Spusti na dno (tipka End), ki izbrani predmet premakneta Äez ali pod vse ostale. Druga dva ukaza sta Å¡e Dvigni (PgUp) in Spusti (PgDn), ki taisto naredita le za eno raven. ÄŒe noben predmet ne prekriva izbranega predmeta, bosta tudi ta dva ukaza predmet poslala do konca. + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Vadite te ukaze tako, da popolnoma spremenite urejenost spodnjih predmetov - naj bo skrajno leva elipsa na vrhu in skrajno desna na dnu: - - - - - - - - + + + + + + + + - + Zelo uporabna bližnjica je tabulator. ÄŒe ni izbran noben predmet, Tab izbere najnižji predmet v dokumentu, sicer pa naslednjega nad izbranim. Shift+Tab deluje v nasprotno smer, zaÄenÅ¡i z najviÅ¡jim in navzdol. Ker se novoustvarjeni predmeti pojavijo na vrhu, bo Shift+Tab izbral ravno zadnji ustvarjeni predmet. Vadite uporabo tabulatorja na zgornjem kupÄku elips. - - Izbiranje pod in premikanje izbire + + Izbiranje pod in premikanje izbire - - + + - + Kaj pa Äe je predmet, ki ga potrebujete, skrit za drugimi predmeti? Å e vedno ga lahko vidite, Äe so zgornji predmeti (delno) prosojni, klik nanje pa bo vendarle izbral zgornji predmet, ne pa tistega, ki ga želite. - - + + - + Zato imamo Alt+klik. Prvi Alt+klik izbere prvi predmet, tako kot obiÄajni klik. Naslednji Alt+klik pa bo obenem izbral Å¡e predmet pod vrhnjim; naslednji klik predmet Å¡e nižje... Tako zaporedni Alt+kliki krožijo od vrha do dna, skozi celotno navpiÄno ureditev predmetov na toÄki klikanja. Ko dosežete najnižji predmet vas naslednji Alt+klik seveda vrne nazaj na vrh. - - + + - + [ÄŒe uporabljate Linux, boste morda opazili, da Alt+klik ne deluje pravilno. Namesto tega morda premikate celotno okno Inkscape. Razlog je v tem, da je vaÅ¡ okenski upravljalnik prihranil kombinacijo Alt+klik za drugo dejanje. To spremenite tako, da poiÅ¡Äete nastavitve Vedenja oken (Window Behavior) okenskega upravljalnika, ki ga izkljuÄite ali pa preslikajte kombinacijo na meta-tipko (t.i. tipko Windows), da bodo lahko Inkscape in druge aplikacije prosto uporabljale tipko Alt.] - - + + - + Toda kaj lahko poÄnemo s tako izbranim predmetom? Lahko ga preoblikujemo s tipkovnico in lahko upravljamo z izbiro. VleÄenje predmeta pa bo zopet izbralo najviÅ¡ji predmet (ker je klikni-in-povleci tako pripravljen). Da bi Inkscapu povedali, naj premika zgolj tisto, kar je trenutno izbrano, uporabite Alt+poteg. S tem boste premaknili trenutno izbrane predele, ne glede na to, kje je miÅ¡kin kazalec trenutno. - - + + - + Vadite Alt+klik in Alt+poteg na spodnjih dveh rjavih oblikah, pod zelenim prosojnim trikotnikom: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - ZakljuÄek + + ZakljuÄek - - + + - + - Tu zakljuÄujemo Osnovni vodiÄ. Inkscape zmore Å¡e veliko veÄ, kot smo vam pokazali tu, a že zgolj te metode vam omogoÄajo ustvarjanje enostavnih, a zato uporabnih risb. Za zahtevnejÅ¡e reÄi si preberite Å¡e Napredni vodiÄ pod PomoÄ > VodiÄi. + Tu zakljuÄujemo Osnovni vodiÄ. Inkscape zmore Å¡e veliko veÄ, kot smo vam pokazali tu, a že zgolj te metode vam omogoÄajo ustvarjanje enostavnih, a zato uporabnih risb. Za zahtevnejÅ¡e reÄi si preberite Å¡e Napredni vodiÄ pod PomoÄ > VodiÄi. - + @@ -785,8 +797,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Uporabite Ctrl+puÅ¡Äica navzgor za drsenje + + Uporabite Ctrl+puÅ¡Äica navzgor za drsenje diff --git a/share/tutorials/tutorial-basic.svg b/share/tutorials/tutorial-basic.svg index 35ed566ff..fe2db8b44 100644 --- a/share/tutorials/tutorial-basic.svg +++ b/share/tutorials/tutorial-basic.svg @@ -40,11 +40,11 @@ Use Ctrl+down arrow to scroll - + ::BASIC - + @@ -53,7 +53,7 @@ regular Inkscape document that you can view, edit, copy from, or save. - + @@ -64,10 +64,10 @@ and stroke, alignment, and z-order. For more advanced topics, check out the othe tutorials in the Help menu. - - Panning the canvas + + Panning the canvas - + @@ -79,10 +79,10 @@ button. Or, you can use the scrollbars (press Ctrl+ them). The wheel on your mouse also works for scrolling vertically; press Shift with the wheel to scroll horizontally. - - Zooming in or out + + Zooming in or out - + @@ -97,7 +97,7 @@ have the Zoom tool (in the toolbar on left) which lets you to zoom into an area dragging around it. - + @@ -107,10 +107,10 @@ session. Press the ` key to go back to t Shift+` to go forward. - - Inkscape tools + + Inkscape tools - + @@ -122,7 +122,7 @@ bar with controls that are specific to each tool. The at the bottom of the window will display useful hints and messages as you work. - + @@ -130,20 +130,20 @@ you work. Many operations are available through keyboard shortcuts. Open Help > Keys and Mouse to see the complete reference. - - Creating and managing documents + + Creating and managing documents - + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - + @@ -154,7 +154,7 @@ Open (Ctrl+O). To save, use < to save under a new name. (Inkscape may still be unstable, so remember to save often!) - + @@ -164,7 +164,7 @@ supported by graphic software. SVG files are based on XML and can be edited with text or XML editor (apart from Inkscape, that is). Besides SVG, Inkscape can import and export several other formats (EPS, PNG). - + @@ -178,10 +178,10 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Creating shapes + + Creating shapes - + @@ -190,18 +190,18 @@ one Inkscape process from an icon it will not work. (or press F4) and click-and-drag, either in a new empty document or right here: - - - - - - - - - - - - + + + + + + + + + + + + @@ -210,23 +210,23 @@ right here: and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -237,7 +237,7 @@ them to see how the shape responds. The Controls panel for a shape tool is anoth these controls affect the currently selected shapes (i.e. those that display the handles) and set the default that will apply to newly created shapes. - + @@ -246,10 +246,10 @@ these controls affect the currently selected shapes (i.e. those that display the Ctrl+Z. (Or, if you change your mind again, you can redo the undone action by Shift+Ctrl+Z.) - - Moving, scaling, rotating + + Moving, scaling, rotating - + @@ -259,8 +259,8 @@ the Selector. Click the topmost button toolbar, or press F1 or Space. Now you can select any object on the canvas. Click on the rectangle below. - - + + @@ -268,8 +268,8 @@ any object on the canvas. Click on the rectangle below. You will see eight arrow-shaped handles appear around the object. Now you can: - - + + @@ -277,8 +277,8 @@ Now you can: Move the object by dragging it. (Press Ctrl to restrict movement to horizontal and vertical.) - - + + @@ -287,15 +287,15 @@ to horizontal and vertical.) the original height/width ratio.) - + Now click the rectangle again. The handles change. Now you can: - - + + @@ -304,8 +304,8 @@ the original height/width ratio.) restrict rotation to 15 degree steps. Drag the cross mark to position the center of rotation.) - - + + @@ -314,7 +314,7 @@ position the center of rotation.) handles. (Press Ctrl to restrict skewing to 15 degree steps.) - + @@ -323,10 +323,10 @@ steps.) (above the canvas) to set exact values for coordinates (X and Y) and size (W and H) of the selection. - - Transforming by keys + + Transforming by keys - + @@ -335,7 +335,7 @@ the selection. emphasis on keyboard accessibility. There's hardly any command or action that is impossible to do from keyboard, and transforming objects is no exception. - + @@ -348,7 +348,7 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - + @@ -363,7 +363,7 @@ zoom). This means that if you zoom in, one Alt+arro nudge on your screen. It is thus possible to position objects with arbitrary precision simply by zooming in or out as needed. - + @@ -373,17 +373,17 @@ scale selection so that its visible size changes by one screen pixel, and Alt+[ and Alt+] rotate it so that its farthest-from-center point moves by one screen pixel. - + Note: Linux users may not get the expected results with the Alt+arrow and a few other key combinations if their Window Manager catches those key events before they reach the inkscape application. One solution would be to change the WM's configuration accordingly. - - Multiple selections + + Multiple selections - + @@ -396,10 +396,10 @@ from an empty space; however, if you press Shift - - - - + + + + @@ -407,10 +407,10 @@ the shapes below: Now, use rubberband (by drag or Shift+drag) to select the two ellipses but not the rectangle: - - - - + + + + @@ -421,7 +421,7 @@ to see at once what is selected and what is not. For example, if you select both ellipses and the rectangle, without the cues you would have hard time guessing whether the ellipses are selected or not. - + @@ -430,7 +430,7 @@ the ellipses are selected or not. Select all three objects above, then use Shift+click to exclude both ellipses from the selection leaving only the rectangle selected. - + @@ -439,10 +439,10 @@ ellipses from the selection leaving only the rectangle selected. objects. Ctrl+A selects all objects in the current layer (if you did not create layers, this is the same as all objects in the document). - - Grouping + + Grouping - + @@ -452,15 +452,15 @@ behaves as a single object when you drag or transform it. Below, the three objec the left are independent; the same three objects on the right are grouped. Try to drag the group. - - - - + + + + - + @@ -473,7 +473,7 @@ objects; such recursive groups may go down to arbitrary depth. However, selection; you'll need to press Ctrl+U repeatedly if you want to completely ungroup a deep group-in-group. - + @@ -486,33 +486,35 @@ grouping. Try to move or transform the individual shapes in the group (above right) without ungrouping it, then deselect and select the group normally to see that it still remains grouped. - - Fill and stroke + + Fill and stroke - + - Many of Inkscape's functions are available via dialogs. Probably the -simplest way to paint an object some color is to open the Swatches dialog from the + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint it (change its fill color). - + - + More powerful is the Fill and Stroke dialog from the Object menu (or press Shift+Ctrl+F). Select the shape below and open the Fill and Stroke dialog. - - + + - + You will see that the dialog has three tabs: Fill, Stroke paint, and Stroke style. The Fill tab lets you edit the fill (interior) of the @@ -520,10 +522,10 @@ selected object(s). Using the buttons just below the tab, you can select types o including no fill (the button with the X), flat color fill, as well as linear or radial gradients. For the above shape, the flat fill button will be activated. - + - + Further below, you see a collection of color pickers, each in its own tab: RGB, CMYK, HSL, and Wheel. Perhaps the most convenient is the Wheel @@ -531,57 +533,57 @@ picker, where you can rotate the triangle to choose a hue on the wheel, and then a shade of that hue within the triangle. All color pickers contain a slider to set the alpha (opacity) of the selected object(s). - + - + Whenever you select an object, the color picker is updated to display its current fill and stroke (for multiple selected objects, the dialog shows their average color). Play with these samples or create your own: - - - - - - - - + + + + + + + + - + Using the Stroke paint tab, you can remove the stroke (outline) of the object, or assign any color or transparency to it: - - - - - - - - - + + + + + + + + + - + The last tab, Stroke style, lets you set the width and other parameters of the stroke: - - - - - - - - + + + + + + + + - + Finally, instead of flat color, you can use gradients for fills and/or strokes: @@ -623,17 +625,17 @@ fills and/or strokes: - - - - - - - - + + + + + + + + - + When you switch from flat color to gradient, the newly created gradient uses the previous flat color, going from opaque to transparent. Switch to the Gradient tool @@ -643,34 +645,34 @@ gradient. When any of the gradient handles is selected (highlighted blue), the F Stroke dialog sets the color of that handle instead of the color of the entire selected object. - + - + Yet another convenient way to change a color of an object is by using the Dropper tool (F7). Just click anywhere in the drawing with that tool, and the picked color will be assigned to the selected object's fill (Shift+click will assign stroke color). - - Duplication, alignment, distribution + + Duplication, alignment, distribution - + - + One of the most common operations is duplicating an object (Ctrl+D). The duplicate is placed exactly above the original and is selected, so you can drag it away by mouse or by arrow keys. For practice, try to fill the line with copies of this black square: - - + + - + Chances are, your copies of the square are placed more or less randomly. This is where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares @@ -695,56 +697,56 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Z-order + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Z-order - + - + The term z-order refers to the stacking order of objects in a drawing, i.e. to which objects are on top and obscure others. The two commands in the Object @@ -753,28 +755,27 @@ menu, Raise to Top (the Home key) and Lo bottom of the current layer's z-order. Two more commands, Raise (PgUp) and Lower (PgDn), will sink or emerge the selection one step only, i.e. move it past one non-selected object in z-order (only objects that overlap the -selection count; if nothing overlaps the selection, Raise and Lower move it all the way -to the top or bottom correspondingly). +selection count, based on their respective bounding boxes). - + - + Practice using these commands by reversing the z-order of the objects below, so that the leftmost ellipse is on top and the rightmost one is at the bottom: - - - - - - - + + + + + + + - + A very useful selection shortcut is the Tab key. If nothing is selected, it selects the bottommost object; otherwise it selects the object above the @@ -785,23 +786,23 @@ nothing selected will conveniently select the object you created Tab and Shift+Tab keys on the stack of ellipses above. - - Selecting under and dragging selected + + Selecting under and dragging selected - + - + What to do if the object you need is hidden behind another object? You may still see the bottom object if the top one is (partially) transparent, but clicking on it will select the top object, not the one you need. - + - + This is what Alt+click is for. First Alt+click selects the top object just like the regular click. However, the next @@ -811,10 +812,10 @@ one; the next one, the object still lower, etc. Thus, several z-order stack of objects at the click point. When the bottom object is reached, next Alt+click will, naturally, again select the topmost object. - + - + [If you are on Linux, you might find that Alt+click does not work properly. Instead, it might be @@ -825,10 +826,10 @@ either turn it off, or map it to use the Meta key (aka Windows key), so Inkscape and other applications may use the Alt key freely.] - + - + This is nice, but once you selected an under-the-surface object, what can you do with it? You can use keys to transform it, and you can drag the selection @@ -838,24 +839,24 @@ object under cursor first, then drags the selection). To tell Inkscape to drag < is selected now without selecting anything else, use Alt+drag. This will move the current selection no matter where you drag your mouse. - + - + Practice Alt+click and Alt+drag on the two brown shapes under the green transparent rectangle: - - - - - Selecting similar objects + + + + + Selecting similar objects - + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the @@ -863,60 +864,60 @@ blue squares, and use Edit > Select Same & Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Conclusion + + Conclusion - + - + This concludes the Basic tutorial. There's much more than that to Inkscape, but with the techniques described here, you will already be able to create simple yet useful @@ -924,7 +925,7 @@ graphics. For more complicated stuff, go through the Advanced and other tutorial Help > Tutorials. - + diff --git a/share/tutorials/tutorial-basic.vi.svg b/share/tutorials/tutorial-basic.vi.svg index 034eca326..af1c01918 100644 --- a/share/tutorials/tutorial-basic.vi.svg +++ b/share/tutorials/tutorial-basic.vi.svg @@ -36,105 +36,105 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::CÆ  BẢN - - + + Phần này sẽ hướng dẫn bạn các thao tác làm việc cÆ¡ bản vá»›i Inkscape. Äây là má»™t tài liệu dùng định dạng SVG, nên bạn có thể xem, sá»­a, sao chép hay lưu nó lại bằng Inkscape. - - + + Bài hướng dẫn CÆ¡ bản bao gồm việc di chuyển vùng vẽ, quản lý các tài liệu, cÆ¡ bản vá» các công cụ hình dáng, các kỹ thuật tạo vùng chá»n, chuyển dạng các đối tượng vá»›i công cụ Chá»n, nhóm các đối tượng lại, đặt màu tô và màu nét, căn chỉnh vị trí các đối tượng và phân bố chúng theo trục z trong má»™t lá»›p. Äể biết thêm các chá»§ đỠnâng cao, hãy xem các bài hướng dẫn khác, nằm trong trình đơn Trợ giúp cá»§a chương trình. - - Di chuyển vùng vẽ + + Di chuyển vùng vẽ - - + + Có rất nhiá»u cách để bạn cuá»™n vùng vẽ. Cách thứ nhất, dùng Ctrl+các mÅ©i tên để cuá»™n vùng vẽ bằng bàn phím. Cách thứ hai, bấm giữ chuá»™t giữa và di chuyển con trỠđể kéo vùng vẽ ra vị trí mình muốn. Cách ba, dùng các thanh cuá»™n (nhấn Ctrl+B để bật/tắt chúng). Cách thứ tư, xoay bánh lăn cá»§a chuá»™t để cuá»™n lên xuống; giữ Shift khi xoay để cuá»™n trái/phải. - - Phóng to hay thu nhá» + + Phóng to hay thu nhá» - - + + Ta thưá»ng phóng to và thu nhá» vùng vẽ bằng phím - và + (hoặc =) từ bàn phím. Bạn cÅ©ng có thể giữ Ctrl+chuá»™t giữa hoặc Ctrl+chuá»™t phải để phóng to, Shift+chuá»™t giữa hoặc Shift+chuá»™t phải để thu nhá», hoặc xoay chuá»™t khi giữ Ctrl. Má»™t cách khác, chá»n trưá»ng Thu phóng (ở góc dưới bên phải cá»­a sổ tài liệu), nhập vào giá trị % thu phóng rồi Enter. Ta cÅ©ng có thể dùng công cụ Thu phóng (trên há»™p công cụ), kéo chuá»™t trên 1 vùng để phóng to vùng đó. - - + + Inkscape lưu lại các mức thu phóng bạn từng dùng trong phiên làm việc hiện thá»i. Vì vậy, nhấn ` để trở lại mức thu phóng trước, và Shift+` để chuyển tá»›i mức thu phóng kế. - - Các công cụ cá»§a Inkscape + + Các công cụ cá»§a Inkscape - - + + Thanh công cụ nằm dá»c bên trái cá»­a sổ Inkscape chứa các công cụ để vẽ và sá»­a các đưá»ng nét và đối tượng trong vùng vẽ. Nằm ngay bên dưới các trình đơn là thanh Lệnh vá»›i những nút lệnh truy cập nhanh vào các trình đơn, và thanh Äiá»u khiển Công cụ có các thành phần Ä‘iá»u khiển dành cho công cụ Ä‘ang được sá»­ dụng. Nằm dưới cùng trong cá»­a sổ Inkscape là thanh Trạng thái, hiển thị các gợi ý và các thông Ä‘iệp hệ thống khi bạn làm việc. - - + + Inkscape có nhiá»u phím tắt bàn phím cho bạn dùng. Hãy chá»n mục Trợ giúp > Tham chiếu vá» Phím tắt và con chuá»™t để biết thêm. - - Tạo và quản lý các tài liệu + + Tạo và quản lý các tài liệu - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape dùng định dạng SVG (Scalable Vector Graphics) làm định dạng chuẩn. SVG là má»™t định dạng chuẩn được nhiá»u phần má»m đồ hoạ há»— trợ. Äịnh dạng SVG dá»±a trên ngôn ngữ XML và bạn có thể dùng má»™t chương trình xá»­ lý văn bản bất kỳ để mở và chỉnh sá»­a má»™t tập tin SVG. Bên cạnh SVG, Inkscape có thể nhập và xuất má»™t số định dạng khác (EPS, PNG). - - + + @@ -147,29 +147,29 @@ the Ctrl+Tab shortcut only works with do process. If you open multiple files from a file browser or launch more than one Inkscape process from an icon it will not work. - - Tạo các hình dạng + + Tạo các hình dạng - - + + Trước hết, bấm vào công cụ Chữ nhật (hoặc nhấn F4) rồi kéo và thả chuá»™t trong má»™t tài liệu má»›i hoặc ngay tại đây: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -177,112 +177,112 @@ one Inkscape process from an icon it will not work. and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Các công cụ này được gá»i là các công cụ hình dạng. Má»—i má»™t hình dạng bạn tạo ra sẽ có má»™t hoặc nhiá»u chốt hình kim cương; hãy thá»­ kéo chuá»™t để di chuyển chốt cá»§a hình và quan sát sá»± thay đổi cá»§a hình đó. Thanh Äiá»u khiển công cụ cÅ©ng cho phép bạn tinh chỉnh lại má»™t hình dạng; thanh này Ä‘iá»u khiển hình dáng hiện Ä‘ang được chá»n (tức là hình dạng Ä‘ang có các chốt hiện ra) và đặt thiết lập mặc định áp dụng cho những hình dạng được tạo sau đó. - - + + Äể huá»· bước, tức là quay lại trạng thái cá»§a tài liệu trước má»™t hành động bạn vừa thá»±c thi, hãy nhấn Ctrl+Z. (Hoặc, nếu bạn lại đổi ý, bạn có thể Bước lại hành động vừa được huá»· bằng tổ hợp Shift+Ctrl+Z.) - - Di chuyển, co giãn và xoay + + Di chuyển, co giãn và xoay - - + + Công cụ được dùng nhiá»u nhất trong Inkscape là Công cụ Chá»n. Bấm vào nút trên cùng (hình mÅ©i tên) trên há»™p công cụ, hoặc nhấn F1 hoặc phím cách. Sau đó ta có thể chá»n bất cứ đối tượng nào trên vùng vẽ. Bấm vào hình chữ nhật dưới đây. - - - + + + Bạn sẽ thấy có 8 chốt hình mÅ©i tên xung quanh đối tượng. Giá», bạn có thể: - - - + + + Di chuyển đối tượng bằng cách kéo nó ra chá»— khác. (Giữ Ctrl để di chuyển đối tượng từng Ä‘oạn nhá» theo chiá»u ngang hoặc dá»c.) - - - + + + Co giãn đối tượng bằng cách kéo má»™t chốt bất kỳ ra vị trí khác. (Giữ Ctrl để giữ nguyên tỉ lệ chiá»u cao/chiá»u rá»™ng.) - - + + Giá» nhấn vào hình chữ nhật thêm lần nữa. Các chốt thay đổi hình dáng. Giá» bạn có thể: - - - + + + Xoay đối tượng bằng cách kéo chốt ở góc ra vị trí khác. (Giữ Ctrl để hạn chế góc xoay theo từng bước 15 độ má»™t lần. Di chuyển dấu chữ thập sang vị trí khác để thay đổi tâm cá»§a phép xoay.) - - - + + + Xô nghiêng đối tượng bằng cách kéo các chốt ở trên cạnh. (Giữ Ctrl để xô theo từng góc 15 độ má»™t.) - - + + Trong khi Ä‘ang dùng công cụ Chá»n, bạn cÅ©ng có thể dùng các ô số trong thanh Äiá»u khiển Công cụ (bên trên vùng vẽ) để đặt giá trị chính xác cho vị trí (ô X và Y) và kích cỡ (ô W và H) cá»§a vùng chá»n. - - Chuyển dạng dùng bàn phím + + Chuyển dạng dùng bàn phím - - + + Inkscape có má»™t đặc Ä‘iểm nổi trá»™i hÆ¡n hẳn các phần má»m đồ hoạ vector khác là nó có hệ thống phím tắt bàn phím rất đầy đủ. Bạn có thể thá»±c thi hầu hết các lệnh hoặc hành động từ bàn phím. Các thao tác chuyển dạng má»™t đối tượng cÅ©ng vậy. - - + + @@ -294,182 +294,187 @@ and Ctrl+< scale up or down to 200% o respectively. Default rotates are by 15 degrees; with Ctrl, you rotate by 90 degrees. - - + + Tuy vậy, có lẽ chức năng hữu ích nhất cá»§a Inkscape là chuyển dạng ở mức Ä‘iểm ảnh, được kích hoạt khi bạn nhấn Alt+ các phím chuyển dạng. Ví dụ, Alt+mÅ©i tên sẽ di chuyển vùng chá»n sang 1 pixel tại mức thu phóng hiện thá»i (tức là 1 Ä‘iểm ảnh trên màn hình, chứ không phải px, đơn vị Ä‘o chiá»u dài cá»§a SVG, không phụ thuá»™c vào mức độ thu phóng). Äiá»u này có nghÄ©a là, bạn có thể Alt+mÅ©i tên để di chuyển má»™t khoảng cách tuyệt đối nhá» hÆ¡n nếu Ä‘ang ở mức thu phóng 200%, so vá»›i khi thá»±c hiện thao tác tương tá»± ở mức thu phóng 100%, mặc dù rằng đối tượng vẫn sẽ được di chuyển Ä‘i 1 Ä‘iểm ảnh trên màn hình. - - + + Tương tá»±, Alt+> và Alt+< sẽ co giãn vùng chá»n sao cho kích thước hiển thị sẽ tăng hoặc giảm 1 Ä‘iểm ảnh, và Alt+[ và Alt+] sẽ xoay đối tượng sao cho Ä‘iểm xa nhất nằm trên đối tượng sẽ dịch Ä‘i 1 Ä‘iểm ảnh. - - + + Lưu ý: trên Linux, bạn sẽ không thể dùng các phím Alt+mÅ©i tên và má»™t số tổ hợp phím khác, nếu trình quản lý cá»­a sổ cá»§a bạn dùng các tổ hợp phím đó để kích hoạt má»™t số sá»± kiện khác cá»§a nó. Má»™t giải pháp cho vấn đỠnày là, bạn cấu hình lại trình quản lý cá»­a sổ cho phù hợp vá»›i Inkscape hÆ¡n. - - Chá»n nhiá»u + + Chá»n nhiá»u - - + + Bạn có thể chá»n nhiá»u đối tượng cùng má»™t lúc bằng cách nhấn Shift+bấm chuá»™t vào chúng. Hoặc, bạn có thể kéo chuá»™t xung quanh các đối tượng cần chá»n; thao tác này gá»i là chá»n bằng dây chun. (Công cụ Chá»n tạo ra má»™t dây chun khi bạn kéo chuá»™t trong khoảng trống; tuy nhiên nếu bạn giữ Shift trước khi kéo, Inkscape sẽ luôn tạo ra các dây chun.) Hãy thá»±c hành bằng cách chá»n tất cả 3 đối tượng hình dáng ở dưới đây: - - - - - + + + + + Giá», dùng dây chun (bằng cách kéo chuá»™t hoặc Shift+kéo chuá»™t) để chá»n 2 hình elip nhưng không chá»n hình chữ nhật: - - - - - + + + + + Each individual object within a selection displays a selection cue — by default, a dashed rectangular frame. These cues make it easy to see at once what is selected and what is not. For example, if you select both the two ellipses and the rectangle, without the cues you would have hard time guessing whether the ellipses are selected or not. - - + + Shift+bấm chuá»™t vào má»™t đối tượng để thôi không chá»n nó nữa. Hãy chá»n tất cả 3 đối tượng ở trên, rồi dùng Shift+bấm chuá»™t để bá» chá»n 2 hình elip và giữ lại hình chữ nhật. - - + + Nhấn Esc để bá» vùng chá»n Ä‘ang có. Ctrl+A sẽ chá»n tất cả các đối tượng có trong lá»›p hiện tại (nếu bạn không tạo ra lá»›p nào khác, tất cả các đối tượng trong tài liệu sẽ được chá»n). - - Nhóm lại + + Nhóm lại - - + + Má»™t số đối tượng có thể được hợp lại thành 1 nhóm. Ta có thể di chuyển hay chuyển dạng 1 nhóm giống như 1 đối tượng đơn lẻ. Trong hình dưới, bên trái là 3 đối tượng độc lập vá»›i nhau còn bên phải cÅ©ng là 3 đối tượng đó, nhưng đã được nhóm lại. Hãy thá»­ kéo chuá»™t để di chuyển nhóm ra vị trí khác. - - - - + + + + - - + + Äể tạo má»™t nhóm, hãy chá»n má»™t hoặc nhiá»u đối tượng và nhấn Ctrl+G. Äể tách má»™t hay nhiá»u nhóm, hãy chá»n nhóm cần tách rồi nhấn Ctrl+U. Ta có thể nhóm các nhóm lại thành 1 nhóm cấp cao hÆ¡n. Tuy nhiên, hãy lưu ý là Ctrl+U sẽ tách nhóm theo từng cấp; bạn sẽ phải Ctrl+U nhiá»u lần nếu muốn tách nhóm cấp cao thành nhóm cấp thấp hÆ¡n, rồi thành các đối tượng độc lập. - - + + Thá»±c ra bạn không nhất thiết phải tách nhóm để sá»­a 1 đối tượng Ä‘ang ở trong 1 nhóm. Chỉ việc Ctrl+bấm chuá»™t để chá»n và sá»­a đối tượng ta cần, hoặc Shift+Ctrl+bấm chuá»™t để chá»n nhiá»u đối tượng nằm trong và ngoài má»™t nhóm bất kỳ. Hãy thá»­ di chuyển hoặc chuyển dạng các hình dạng độc lập trong nhóm ở bên phải hình trên mà không tách nhóm ra, rồi bá» chá»n và chá»n nhóm má»™t cách bình thưá»ng để thấy là các đối tượng vẫn Ä‘ang được nhóm lại. - - Tô và Nét + + Tô và Nét - - + + - Ta có thể truy cập rất nhiá»u chức năng cá»§a Inkscape từ các há»™p thoại. Có lẽ cách dá»… nhất để tô màu 1 đối tượng là bạn mở há»™p thoại Mẫu Màu từ trình đơn Xem (hoặc nhấn Shift+Ctrl+W), chá»n má»™t đối tượng, sau đó bấm vào má»™t mẫu màu để tô màu đó lên đối tượng đã chá»n. + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + Há»™p thoại Tô và Nét trong trình đơn Äối tượng (hoặc nhấn Shift+Ctrl+F) cung cấp cho bạn nhiá»u lá»±a chá»n cao cấp khác trong việc tô màu đối tượng. Hãy chá»n hình dưới đây và mở há»™p thoại Tô và Nét ra. - - - + + + - + Bạn sẽ thấy trong há»™p thoại có 3 thẻ: Tô, SÆ¡n nét, và Kiểu nét. Thẻ Tô cho phép bạn sá»­a lại màu tô (bên trong) các đối tượng được chá»n. Dùng các nút trong thẻ, bạn có thể chá»n kiểu tô, gồm có không tô màu (nút có dấu X), tô màu phẳng, chuyển sắc thẳng và chuyển sắc tròn. Äối vá»›i hình trên, nút tô màu phẳng sẽ được nhấn xuống. - - + + - + Bên dưới nữa là má»™t tập hợp các bá»™ chá»n màu nằm trong các thẻ riêng biệt: RGB, CMYK, HSL và Tròn. Bá»™ chá»n màu dá»… dùng nhất có lẽ là Tròn: bạn xoay hình tam giác để chá»n lấy dải màu sắc mình cần, rồi chá»n mức độ đổ bóng lên dải màu đó bên trong hình tam giác. Tất cả các bá»™ chá»n màu Ä‘á»u có các thanh trượt để bạn chá»n mức alpha (độ mỠđục) cá»§a đối tượng Ä‘ang chá»n. - - + + - + Má»—i khi chá»n má»™t đối tượng, bá»™ chá»n màu sẽ được cập nhật lại để biểu diá»…n màu tô và màu nét hiện đối tượng đó Ä‘ang có (nếu bạn chá»n nhiá»u đối tượng, màu được biểu diá»…n là màu trung bình). Hãy thá»­ vá»›i các hình mẫu dưới đây, hoặc tá»± tạo ra các hình dạng và thá»­ sá»­ dụng các bá»™ màu để đổi màu chúng: - - - - - - - - - + + + + + + + + + - + Trong thẻ SÆ¡n nét, bạn có thể xoá nét (viá»n) cá»§a đối tượng Ä‘ang chá»n, hoặc gán cho nó má»™t màu sắc tuỳ ý, hay độ trong suốt bất kỳ: - - - - - - - - - - + + + + + + + + + + - + Thẻ cuối cùng, Kiểu nét, cho phép bạn đặt độ rá»™ng cá»§a nét viá»n, cÅ©ng như các tham số khác liên quan: - - - - - - - - - + + + + + + + + + - + Cuối cùng, thay vì dùng màu phẳng, bạn có thể dùng chuyển sắc làm màu tô và/hoặc màu nét viá»n: @@ -510,45 +515,45 @@ by 90 degrees. - - - - - - - - - - - + + + + + + + + + + + Khi bạn chuyển chế độ tô từ màu phẳng sang chuyển sắc, chuyển sắc được tạo ra sẽ lấy màu phẳng trước đó làm cÆ¡ sở, nhưng chuyển từ đục dần dần thành trong suốt. Chuyển sang công cụ Chuyển sắc (Ctrl+F1) để kéo các chốt chuyển sắc — Ä‘iểm Ä‘iá»u khiển nằm trên đưá»ng thẳng biểu diá»…n phương hướng và chiá»u dài trên đó diá»…n ra sá»± biến đổi màu. Khi má»™t chốt chuyển sắc được chá»n (có màu xanh), há»™p thoại Tô và Nét sẽ đặt màu cho chốt đó thay vì màu cá»§a toàn bá»™ đối tượng. - - + + - + Má»™t cách khác khá hay để đổi màu cho má»™t đối tượng là dùng công cụ Bút chá»n màu (F7). Chỉ việc bấm chuá»™t lên vị trí bất kỳ trong bản vẽ khi dùng công cụ đó, và màu tại Ä‘iểm vừa bấm chuá»™t sẽ được tô cho đối tượng Ä‘ang chá»n (Shift+bấm chuá»™t để tô nét viá»n thay vì tô màu). - - Nhân đôi, sắp xếp và phân phối + + Nhân đôi, sắp xếp và phân phối - - + + - + Ta rất hay phải nhân đôi má»™t đối tượng (Ctrl+D) trong khi làm việc. Bản sao sẽ nằm ngay bên trên đối tượng gốc và được chá»n ngay khi bạn vừa tạo ra nó, nên bạn có thể kéo chuá»™t hoặc dùng các phím mÅ©i tên để di chuyển nó ra vị trí khác. Hãy thá»­ thá»±c hành bằng cách tạo má»™t đưá»ng thẳng từ hình vuông màu Ä‘en này: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -570,192 +575,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Thứ tá»± Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Thứ tá»± Z - - + + - + - Thuật ngữ thứ tá»± z dùng để chỉ thứ tá»± xếp chồng cá»§a các đối tượng trong bản vẽ, tức là đối tượng nào nằm trên và che khuất các đối tượng khác. Trong trình đơn Äối tượng có 2 lệnh là Lên trên cùng (phím Home) và Xuống dưới cùng (phím End) để di chuyển đối tượng Ä‘ang chá»n lên cao nhất hoặc xuống thấp nhất trong thứ tá»± z cá»§a lá»›p hiện hành. Hai lệnh khác, Nâng lên (PgUp) và Hạ thấp (PgDn) sẽ di chuyển đối tượng lên/xuống má»™t vị trí trong thứ tá»± z cá»§a lá»›p. + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + Hãy thá»±c hành các lệnh trên bằng cách đảo ngược thứ tá»± z cá»§a các đối tượng dưới đây, để cho hình elip ngoài cùng bên trái sẽ ở trên cùng, và hình ngoài cùng bên phải sẽ ở dưới cùng: - - - - - - - - + + + + + + + + - + Má»™t thao tác nhanh để chá»n đối tượng là dùng phím Tab. Nếu bạn chưa chá»n gì, nhấn Tab sẽ chá»n đối tượng nằm dưới cùng trong lá»›p; bằng không nó sẽ chá»n cho bạn đối tượng nằm trên đối tượng Ä‘ang chá»n trong thứ tá»± z cá»§a lá»›p. Shift+Tab có tác dụng ngược lại, bắt đầu từ đối tượng trên cùng trở xuống. Vì các đối tượng được tạo ra sẽ được thêm lên trên các đối tượng Ä‘ang có, nên nhấn Shift+Tab khi không chá»n gì sẽ chá»n cho ta đối tượng được tạo gần đây nhất. Hãy thá»­ Tab và Shift+Tab vá»›i các hình elip ở trên. - - Chá»n và di chuyển đối tượng nằm dưới đối tượng khác + + Chá»n và di chuyển đối tượng nằm dưới đối tượng khác - - + + - + Bạn cần chá»n má»™t đối tượng nằm dưới đối tượng khác ư? Có thể đối tượng đó vẫn hiện ra nếu đối tượng nằm trên nó tương đối trong suốt, nhưng nếu bạn nhấn chuá»™t lên nó, bạn sẽ chỉ chá»n được đối tượng nằm trên mà thôi. - - + + - + Muốn chá»n đối tượng bên dưới, hãy dùng Alt+bấm chuá»™t. Alt+bấm chuá»™t lần đầu sẽ chá»n cho bạn đối tượng nằm trên cùng, giống như khi không giữ Alt. Tuy nhiên, tiếp tục Alt+bấm chuá»™t tại cùng Ä‘iểm đó, bạn có thể lần lượt chá»n được các đối tượng nằm dưới. Nhá» vậy, sau má»™t vài lần Alt+bấm chuá»™t bạn có thể chá»n được đối tượng mình cần di chuyển. Khi hết các đối tượng nằm dưới, tổ hợp Alt+bấm chuá»™t tiếp theo sẽ chá»n cho bạn đối tượng nằm trên cùng. - - + + - + [Nếu dùng Linux, có thể Alt+click không làm việc. Thay vì thế, có thể toàn bá»™ cá»­a sổ Inkscape sẽ bị di chuyển. Äây thưá»ng là do trình quản lý cá»­a sổ cá»§a bạn đã đặt Alt+bấm chuá»™t làm thao tác kích hoạt má»™t hành động nào khác. Hãy chỉnh lại cấu hình cho trình quản lý cá»­a sổ để có thể dùng phím Alt cho các hành động khác.] - - + + - + Sau khi đã chá»n các đối tượng bên dưới, bạn có thể dùng bàn phím để chuyển dạng chúng, di chuyển chúng, và có thể kéo các chốt cá»§a chúng. Tuy nhiên, kéo đối tượng má»™t cách trá»±c tiếp sẽ có thể làm Inkscape nhầm tưởng là bạn muốn chá»n lại đối tượng nằm trên cùng. Äể báo vá»›i Inkscape rằng bạn muốn di chuyển đối tượng Ä‘ang chá»n thay vì chá»n đối tượng trên cùng, hãy giữ Alt+kéo chuá»™t. Việc này sẽ di chuyển đối tượng Ä‘ang chá»n mà không quan tâm đến việc bạn bắt đầu kéo chuá»™t ở đâu. - - + + - + Bạn hãy thá»±c hành các thao tác Alt+bấm chuá»™t trái và giữ Alt+kéo chuá»™t trên 2 hình màu nâu nằm dưới hình tam giác màu xanh trong hình này: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - Kết luận + + Kết luận - - + + - + - Xin dừng phần hướng dẫn CÆ¡ bản vá» Inkscape tại đây. Inkscape còn rất nhiá»u chức năng khác nữa, nhưng vá»›i các kỹ thuật được diá»…n giải tại đây, bạn đã có thể tạo ra các hình vẽ SVG đơn giản. Xin xem thêm các bài hướng dẫn khác trong trình đơn Trợ giúp > Hướng dẫn. + Xin dừng phần hướng dẫn CÆ¡ bản vá» Inkscape tại đây. Inkscape còn rất nhiá»u chức năng khác nữa, nhưng vá»›i các kỹ thuật được diá»…n giải tại đây, bạn đã có thể tạo ra các hình vẽ SVG đơn giản. Xin xem thêm các bài hướng dẫn khác trong trình đơn Trợ giúp > Hướng dẫn. - + @@ -785,8 +797,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.zh_CN.svg b/share/tutorials/tutorial-basic.zh_CN.svg index b25ca4cdc..f90d1b652 100644 --- a/share/tutorials/tutorial-basic.zh_CN.svg +++ b/share/tutorials/tutorial-basic.zh_CN.svg @@ -36,133 +36,133 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::基础 - - + + 本教程æè¿°äº†Inkscape的基本æ“作方法。本文档以Inkscape的通用文件格å¼ä¿å­˜ï¼Œä½ å¯ä»¥ç”¨Inkscape进行查看ã€å¤åˆ¶ã€ç¼–辑ã€ä¿å­˜ç­‰æ“作。 - - + + 该教程的主è¦å†…容包括:画布æµè§ˆã€æ–‡æ¡£ç®¡ç†ã€å½¢çŠ¶å·¥å…·åŸºç¡€ï¼Œå›¾å½¢é€‰å–ã€å˜å½¢ï¼Œç¾¤ç»„ã€å¡«å……与轮廓ã€å¯¹é½å’Œå æ”¾ã€‚å¯¹æ›´å¤æ‚çš„æ“作,请在帮助èœå•中选择其它相关教程。 - - 平移画布 + + 平移画布 - - + + 平移画布(å·å±)的方法有很多ç§ã€‚使用Ctrl+arrowé”®å¯ä»¥ç”¨é”®ç›˜å·å±ã€‚(ä½ å¯ä»¥å°è¯•这些按键æ¥å·åŠ¨æœ¬æ–‡æ¡£ã€‚) 也å¯ä»¥é€šè¿‡é¼ æ ‡ä¸­é”®æ¥æ‹–动画布,或者使用å±å¹•边缘的滚动æ¡(使用Ctrl+Bæ¥æ˜¾ç¤ºæˆ–éšè—滚动æ¡)。鼠标滚轮wheelå¯ä»¥ä¸Šä¸‹å·åŠ¨ç”»å¸ƒï¼ŒæŒ‰ä½Shift键,é…åˆæ»šè½®åˆ™å¯ä»¥æ°´å¹³å·åŠ¨ã€‚ - - æ”¾å¤§ä¸Žç¼©å° + + æ”¾å¤§ä¸Žç¼©å° - - + + 最简å•的缩放æ“作是通过-å’Œ+(或=)键。也å¯ä»¥é€šè¿‡Ctrl+middle click 或 Ctrl+right clickæ¥æ”¾å¤§ï¼ŒShift+middle click 或 Shift+right click æ¥ç¼©å°ç”»å¸ƒã€‚也å¯ä»¥ç”¨Ctrlé”®é…åˆé¼ æ ‡æ»šè½®æ¥ç¼©æ”¾ã€‚或者在窗å£å³ä¸‹è§’的缩放输入框中输入一个准确的百分比数值。在工具æ ä¸­ä¹Ÿæœ‰ç¼©æ”¾æŒ‰é’®ï¼Œå¯ä»¥ç¼©æ”¾åˆ°ç”¨æˆ·é€‰å®šçš„区域(对象)。 - - + + Inkscape还会记录当å‰å·¥ä½œä¼šè¯ä¸­ä½¿ç”¨çš„缩放历å²ï¼ŒæŒ‰`键回到上一次的缩放比例,Shift+`é”®æ¥æ¢å¤æ’¤é”€çš„缩放比例。 - - Inkscape工具列 + + Inkscape工具列 - - + + Inkscape中的绘图和修改工具集中在左侧的竖直工具列中。在窗å£çš„上方,èœå•䏋颿˜¯å‘½ä»¤æ (Commands bar),æä¾›äº†é€šç”¨çš„一些控制命令,下é¢çš„工具控制æ (Tool Controls bar)则跟具体的绘图工具有关。窗å£åº•éƒ¨çš„çŠ¶æ€æ (status bar)则实时显示一些æ“作æç¤ºå’Œä¿¡æ¯ã€‚ - - + + 很多æ“作都有对应的快æ·é”®,在帮助èœå•中选择 鼠标与快æ·é”®(Help > Keys and Mouse)获å–详细的说明。 - - åˆ›å»ºå’Œç®¡ç†æ–‡æ¡£ + + åˆ›å»ºå’Œç®¡ç†æ–‡æ¡£ - - + + - To create a new empty document, use File > New > Default + To create a new empty document, use File > New or press Ctrl+N. To create a new document from one of Inkscape's many -templates, use File > New > Templates... or press +templates, use File > New from Template... or press Ctrl+Alt+N - - + + - To open an existing SVG document, use File > -Open (Ctrl+O). To save, use File > Save -(Ctrl+S), or Save As (Shift+Ctrl+S) + To open an existing SVG document, use File > +Open (Ctrl+O). To save, use File > Save +(Ctrl+S), or Save As (Shift+Ctrl+S) to save under a new name. (Inkscape may still be unstable, so remember to save often!) - - + + Inkscape使用SVG(Scalable Vector Graphicså¯ç¼©æ”¾çŸ¢é‡å›¾å½¢)文件格å¼ã€‚ SVG是一ç§è¢«å„ç§ç»˜å›¾è½¯ä»¶å¹¿æ³›æ”¯æŒçš„开放文件标准。SVG文件是基于XML的,å¯ä»¥ç”¨ä»»ä½•文本和XML编辑器æ¥ç¼–辑(Inkscapeä¸å±žäºŽè¿™ç§æ–‡æœ¬ç¼–辑器)。除SVG外,Inkscape也å¯ä»¥å¯¼å…¥å’Œå¯¼å‡ºå…¶å®ƒä¸€äº›æ–‡ä»¶æ ¼å¼(EPS,PNGç­‰)。 - - + + Inkscape为æ¯ä¸ªæ–‡æ¡£æ‰“开一个独立的窗å£ã€‚ä½ å¯ä»¥ç”¨æ“作系统中的窗å£ç®¡ç†å™¨æ¥åœ¨å„个窗å£é—´åˆ‡æ¢(例如Alt+Tabé”®),也å¯ä»¥ä½¿ç”¨Inkscape中内置的快æ·é”®Ctrl+Tab在文档间循环切æ¢ã€‚(现在å¯ä»¥æ–°å»ºä¸€ä¸ªæ–‡æ¡£ï¼Œå°è¯•在本文档和新文档间切æ¢ã€‚) 注æ„:Inkscape将这些窗å£çœ‹æˆç±»ä¼¼äºŽæµè§ˆå™¨çš„æ ‡ç­¾é¡µTabs,å³Ctrl+Tabåªå¯¹åŒä¸€ä¸ªè¿›ç¨‹ä¸­çš„æ–‡æ¡£æœ‰æ•ˆã€‚如果你从文件管ç†å™¨æˆ–Inkscape图标打开多个进程,这个快æ·é”®å°†æ— æ•ˆã€‚ - - 创建形状 + + 创建形状 - - + + 䏋颿ˆ‘们开始创建一些很漂亮的图形ï¼åœ¨å·¥å…·åˆ—中选择矩形工具(Rectangle)(å¿«æ·é”®F4),在(本文档或新文档的)ç»˜å›¾åŒºä¸­ç‚¹å‡»ã€æ‹–动: - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -170,293 +170,298 @@ often!) and fully opaque. We'll see how to change that below. With other tools, you can also create ellipses, stars, and spirals: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + 这些工具统称为形状工具shape tools。 新创建的æ¯ä¸€ä¸ªå½¢çŠ¶ä¸Šéƒ½æœ‰ä¸€ä¸ªæˆ–æ›´å¤šå››è¾¹å½¢çš„æŽ§åˆ¶å™¨(handles)ï¼› 试一下拖动这些控制器会产生什么样的效果。在工具控制æ ä¸­ä¹Ÿå¯ä»¥å¯¹å½¢çŠ¶è¿›è¡Œä¿®æ”¹ã€‚å·¥å…·æŽ§åˆ¶æ åªå¯¹å½“å‰é€‰ä¸­çš„形状有效(显示出四边形控制器的)ï¼Œä½†åŒæ—¶ä¹Ÿä¼šæˆä¸ºå½“å‰å½¢çŠ¶å·¥å…·çš„ç¼ºçœå‚数,影å“下次创建的图形。 - - + + 按键Ctrl+Zå¯ä»¥æ’¤é”€(undo)上一次æ“作。(å¦‚æžœä½ åˆæ”¹å˜æ³¨æ„了,å¯ä»¥ç”¨Shift+Ctrl+Zæ¥æ¢å¤(redo)撤销的æ“作。) - - 移动ã€ç¼©æ”¾å’Œæ—‹è½¬ + + 移动ã€ç¼©æ”¾å’Œæ—‹è½¬ - - + + Inkscape中最常用的工具是拾å–器(Selector),ä½äºŽå·¥å…·åˆ—的顶端(箭头形状),对应快æ·é”®F1 或者 空格(Space)。现在你å¯ä»¥é€‰æ‹©å½“å‰ç”»å¸ƒä¸Šçš„任何对象。请点击下é¢çš„矩形。 - - - + + + å¯ä»¥çœ‹åˆ°ï¼Œé€‰æ‹©å¯¹è±¡çš„周围出现八个带箭头的控制器。下é¢ä½ å¯ä»¥ï¼š - - - + + + 通过拖动æ¥ç§»åŠ¨å¯¹è±¡ã€‚(按下Ctrlæ¥è¿›è¡Œæ°´å¹³æˆ–竖直移动。) - - - + + + 通过拖动任æ„的控制器æ¥ç¼©æ”¾ã€‚(按下Ctrlä»¥ä¿æŒåŽŸå§‹çš„å®½åº¦-高度比例。) - - + + 冿¬¡åœ¨çŸ©å½¢ä¸Šå•击,控制器会å‘生å˜åŒ–,现在你å¯ä»¥ï¼š - - - + + + 拖动对象角è½ä¸Šçš„æŽ§åˆ¶å™¨æ¥æ—‹è½¬ã€‚(按下Ctrlä»¥ä¿æŒæ—‹è½¬çš„角度为15度的整数å€ã€‚) - - - + + + æ‹–åŠ¨ä¸­é—´çš„æŽ§åˆ¶å™¨æ¥æ‰­æ›²(倾斜)对象。按下Ctrlä»¥ä¿æŒæ‰­æ›²çš„角度为15度的整数å€ã€‚) - - + + 在选择状æ€ï¼Œä¹Ÿå¯ä»¥åœ¨å·¥å…·æŽ§åˆ¶æ (画布的上方)的输入框中输入数字,精确地控制对象的ä½ç½®åæ ‡(x,y)和尺寸(宽度W,高度H)。 - - é€šè¿‡é”®ç›˜å˜æ¢ + + é€šè¿‡é”®ç›˜å˜æ¢ - - + + Inkscape区别于大多数其它矢é‡ç»˜å›¾è½¯ä»¶çš„ä¸€ä¸ªç‰¹å¾æ˜¯é”®ç›˜æ“ä½œçš„ä¾¿æ·æ€§ã€‚几乎所有的命令都å¯ä»¥é€šè¿‡é”®ç›˜å®žçŽ°ï¼Œå˜æ¢æ“作也ä¸ä¾‹å¤–。 - - + + ä½ å¯ä»¥ç”¨é”®ç›˜æ¥å¯¹ç¼–辑对象进行移动(arrow 光标键),缩放(< å’Œ > é”®)ï¼Œä»¥åŠæ—‹è½¬([ å’Œ ] é”®)ã€‚ç¼ºçœæƒ…å†µä¸‹ï¼Œæ¯æ¬¡ç§»åŠ¨å’Œç¼©æ”¾2px,按下Shift键时扩大为10å€ã€‚Ctrl+> å’Œ Ctrl+< 对应的缩放比例分别为原始的200%å’Œ50%ã€‚ç¼ºçœæ¯æ¬¡æ—‹è½¬ 15 度,通过Ctrlé”®ï¼Œæ¯æ¬¡å¯ä»¥æ—‹è½¬90度。 - - + + å¯èƒ½æ›´æœ‰ç”¨çš„æ˜¯åƒç´ çº§åˆ«çš„å˜æ¢(pixel-size transformations), 实现的方法是,在上é¢çš„å¿«æ·é”®åŸºç¡€ä¸Šé…åˆAlt键。例如Alt+arrowså¯ä»¥åœ¨å½“å‰çš„页é¢è§†å›¾å±‚æ¬¡ä¸Šæ¯æ¬¡ç§»åŠ¨ä¸€ä¸ªåƒç´ (这里是指一个å±å¹•åƒç´ çš„è·ç¦»ï¼Œ è€Œä¸æ˜¯SVG中的与视图缩放级别无关的长度å•ä½px)。这æ„味ç€ï¼Œå¦‚果放大视图,Alt+arrow移动一个åƒç´ çš„ç»å¯¹è·ç¦»å°†ç¼©çŸ­ã€‚这样,通过缩放视图,就å¯ä»¥ä»»æ„控制对象的定ä½ç²¾åº¦ã€‚ - - + + 与此类似,Alt+> å’Œ Alt+< å°†é€‰æ‹©å¯¹è±¡æ¯æ¬¡ç¼©æ”¾ä¸€ä¸ªåƒç´ ï¼Œ Alt+[ å’Œ Alt+] 旋转对象时,è·ç¦»æ—‹è½¬ä¸­å¿ƒæœ€è¿œçš„ä½ç½®æ¯æ¬¡ç§»åŠ¨ä¸€ä¸ªåƒç´ ã€‚ - - + + 注æ„:在Linuxæ“作系统中,这些组åˆé”®å¯èƒ½åœ¨çª—å£ç®¡ç†å™¨ä¸­è¢«æŒ‡å®šäº†å…¶å®ƒçš„用途,执行上述æ“作时å¯èƒ½ä¸èƒ½èŽ·å¾—é¢„æœŸçš„ç»“æžœã€‚è§£å†³çš„æ–¹æ³•å½“ç„¶æ˜¯ç›¸åº”åœ°ä¿®æ”¹çª—å£ç®¡ç†å™¨çš„é…置。 - - 多选 + + 多选 - - + + 通过Shift+click,å¯ä»¥è¿žç»­é€‰æ‹©å¤šä¸ªç»˜å›¾å¯¹è±¡ï¼Œæˆ–者,用鼠标左键拖出一个框æ¥é€‰ä¸­æ¡†å†…所有对象,这个也称为弹性区选(rubberband selection)。(从空白处开始拖动时将创建弹性选区,如果在拖动之å‰å…ˆæŒ‰ä¸‹Shift,则总是创建弹性选区。) 请å°è¯•选择下é¢çš„三个形状: - - - - - + + + + + ä½ å¯ä»¥ä½¿ç”¨å¼¹æ€§é€‰åŒºé€‰æ‹©ä¸‹é¢ä¸¤ä¸ªæ¤­åœ†ï¼Œä½†ä¸åŒ…括矩形: - - - - - + + + + + 被选择的对象上会出现一个选择标识(selection cue),默认情况下是一个虚线矩形框,它å¯ä»¥æ ‡è¯†å‡ºå“ªäº›å¯¹è±¡è¢«é€‰ä¸­ï¼Œå“ªäº›æ²¡æœ‰é€‰ä¸­ã€‚ä¾‹å¦‚ï¼ŒåŒæ—¶é€‰ä¸­ä¸¤ä¸ªæ¤­åœ†å’ŒçŸ©å½¢æ—¶ï¼Œå¦‚果没有矩形标识框,椭圆的选中与å¦å°±éš¾ä»¥åˆ¤æ–­ã€‚ - - + + 在已ç»é€‰æ‹©çš„对象上Shift+clickå¯ä»¥å–消选择。选中上é¢çš„三个对象,然åŽç”¨Shift+clickå–æ¶ˆå¯¹ä¸¤ä¸ªæ¤­åœ†çš„选择,åªé€‰ä¸­çŸ©å½¢ã€‚ - - + + 按Escå–æ¶ˆæ‰€æœ‰é€‰æ‹©ï¼ŒCtrl+A选择当å‰å›¾å±‚上的所有对象(如果没有定义图层,则等价于选中文档中的所有绘图对象)。 - - 群组 + + 群组 - - + + 若干个绘图对象å¯ä»¥ç»„åˆä¸ºä¸€ä¸ªç¾¤ç»„group。群组å¯ä»¥åƒæ™®é€šç»˜å›¾å¯¹è±¡ä¸€æ ·è¿›è¡Œç§»åŠ¨æˆ–å˜æ¢ã€‚下图中,左边的三个图形是互相独立的,而å³è¾¹çš„三个图形是组åˆåœ¨ä¸€èµ·çš„ã€‚è¯•ç€æ‹–动这个群组看看。 - - - - + + + + - - + + 选择一个或多个对象åŽï¼ŒæŒ‰Ctrl+Gå¯ä»¥å°†å®ƒä»¬ç»„åˆåœ¨ä¸€èµ·ã€‚选中一个或多个群组åŽï¼ŒæŒ‰Ctrl+Uå¯ä»¥è§£æ•£ç»„åˆã€‚群组也å¯ä»¥å†æ¬¡ç»„åˆï¼Œå¹¶ä¸”群组的嵌套层数没有é™åˆ¶ã€‚ä¸è¿‡Ctrl+Uåªèƒ½æ‰“开最顶层的群组,对于嵌套群组需è¦å¤šæ¬¡Ctrl+Uæ‰èƒ½å®Œå…¨æ‰“散组åˆã€‚ - - + + 实际上你å¯ä»¥ç›´æŽ¥ä¿®æ”¹ç¾¤ç»„内的对象而ä¸ç”¨å–消组åˆã€‚使用Ctrl+clickå°±å¯ä»¥å•独选中群组内的一个对象,进行编辑;使用Shift+Ctrl+click则å¯ä»¥é€‰ä¸­ç¾¤ç»„内或群组外的多个对象。ä¸éœ€è¦è§£æ•£ç¾¤ç»„,请试ç€å¯¹ä¸Šå›¾å³é¢ç¾¤ç»„中的形状进行å•独的移动ã€å˜æ¢ã€‚ç„¶åŽå†é€‰ä¸­ç¾¤ç»„,å¯ä»¥çœ‹åˆ°è¿™ç§ç»„åˆå…³ç³»ä»ç„¶å­˜åœ¨ã€‚ - - 填充与轮廓 + + 填充与轮廓 - - + + - Inkscapeä¸­çš„è®¸å¤šåŠŸèƒ½éƒ½å€ŸåŠ©äºŽå¯¹è¯æ¡†çš„å½¢å¼ã€‚为绘图添加一些色彩的最简å•的方法是打开视图Viewèœå•中的调色æ¿Swatcheså¯¹è¯æ¡†(å¿«æ·é”®Shift+Ctrl+W),然åŽä¸ºå¯¹è±¡é€‰æ‹©ä¸€ç§(å¡«å……)颜色。 + Probably the simplest way to paint an object some color is to +select an object, and click a swatch in the palette below the canvas to +paint it (change its fill color). +Alternatively, you can open the Swatches dialog from the +View menu (or press Shift+Ctrl+W), select an object, and click a swatch to paint +it (change its fill color). - - + + - + 更强大的工具是对象Objectèœå•ä¸­çš„å¡«å……ä¸Žè½®å»“å¯¹è¯æ¡† (或者按 Shift+Ctrl+F)。选中下é¢çš„å½¢çŠ¶ï¼Œç„¶åŽæ‰“å¼€å¡«å……ä¸Žè½®å»“å¯¹è¯æ¡†ã€‚ - - - + + + - + è¿™ä¸ªå¯¹è¯æ¡†ä¸­æœ‰ä¸‰ä¸ªæ ‡ç­¾é¢æ¿ï¼šå¡«å……Fillã€è½®å»“色彩(Stroke paint)和轮廓样å¼(Stroke style)。填充属性å¯ä»¥ä¿®æ”¹å¯¹è±¡çš„内部fill 。下é¢çš„æŒ‰é’®å¯ä»¥è®¾ç½®å¡«å……的类型,包括ä¸å¡«å……(图标X),å•色flat colorå¡«å……ï¼Œä»¥åŠæ¸å˜(gradients,线性或圆周)填充。对于上é¢çš„æ¤­åœ†ï¼Œå•色填充的按钮是激活的。 - - + + - + 这些按钮的下é¢ï¼Œæ˜¯è‰²å½©æ‹¾å–器color pickers,有四ç§ä¸åŒçš„æ–¹å¼ï¼šRGB, CMYK, HSL,色盘Wheel。å¯èƒ½æœ€æ–¹ä¾¿æ˜¯é€šè¿‡è‰²ç›˜æ¥é€‰æ‹©ï¼Œæ—‹è½¬å…¶ä¸­çš„三角形æ¥é€‰æ‹©è‰²è°ƒï¼Œåœ¨ä¸‰è§’形内å¯ä»¥æ‹¾å–ä¸åŒçš„æ˜Žæš—åº¦ã€‚å››ä¸­æ‹¾å–æ–¹å¼ä¸­éƒ½åŒ…å«ä¸€ä¸ªæ»‘åŠ¨æ¡æ¥è®¾ç½®å¯¹è±¡çš„逿˜Žåº¦(opacity),å³alpha值。 - - + + - + 选择ä¸åŒçš„对象时,色彩拾å–器总是自动更新,对应当å‰å¯¹è±¡çš„填充和笔廓。(选择多个对象时,将显示色彩的平å‡å€¼) 。在下é¢çš„例å­ä¸Šåšä¸€ä¸‹ç»ƒä¹ ï¼Œæˆ–者自己创建图形: - - - - - - - - - + + + + + + + + + - + 在轮廓色彩Stroke paint标签中,å¯ä»¥åˆ é™¤è½®å»“线stroke,也å¯ä»¥ä»»æ„ä¸ºå…¶æŒ‡å®šé¢œè‰²å’Œé€æ˜Žåº¦ï¼š - - - - - - - - - - + + + + + + + + + + - + 最åŽä¸€ä¸ªæ ‡ç­¾é¢æ¿ï¼Œè½®å»“æ ·å¼(Stroke style)中,å¯ä»¥è®¾ç½®è½®å»“的宽度以åŠå…¶å®ƒå‚数: - - - - - - - - - + + + + + + + + + - + 最åŽï¼Œé™¤äº†å•色填充之外,å¯ä»¥é€‰æ‹©æ¢¯åº¦(gradients)æ¨¡å¼æ¥å¡«å……图形内部和轮廓: @@ -497,45 +502,45 @@ also create ellipses, stars, and spirals: - - - - - - - - - - - + + + + + + + + + + + 当从å•色填充切æ¢åˆ°æ¢¯åº¦å¡«å……时,颜色ä»ç„¶æ˜¯å‰é¢å•色填充时的颜色,ä¸åŒçš„æ˜¯é€æ˜Žåº¦ä»Žä¸é€æ˜Žæ¸å˜åˆ°å®Œå…¨é€æ˜Žã€‚ 选择工具列中的æ¸å˜å·¥å…·(Gradient tool,Ctrl+F1),对象上将会显示出(用线连接在一起的)æ¸å˜æŽ§åˆ¶å™¨ï¼Œæ‹–动æ¸å˜æŽ§åˆ¶å™¨(gradient handles),å¯ä»¥æ”¹å˜è‰²å½©æ¢¯åº¦çš„æ–¹å‘和范围。选中æŸä¸ªæŽ§åˆ¶å™¨æ—¶(该控制器呈现è“色),å¯ä»¥åœ¨å¡«å……和轮廓中为该控制器å•独设置色彩,实现从一ç§é¢œè‰²åˆ°å¦ä¸€ç§é¢œè‰²çš„æ¸å˜ã€‚ - - + + - + è¿˜æœ‰ä¸€ç§æ”¹å˜å¯¹è±¡è‰²å½©çš„简便方法是使用滴管工具(Dropper tool,F7)。选择对象åŽï¼Œå†é€‰æ‹©è¯¥å·¥å…·ï¼Œç„¶åŽå¯ä»¥åœ¨ç»˜å›¾ä¸­å•击clickä»»æ„æ‹¾å–色彩,这ç§è‰²å½©å°†è‡ªåŠ¨æŒ‡å®šç»™è¢«é€‰æ‹©å¯¹è±¡çš„å¡«å……å±žæ€§(使用Shift+click - - å†åˆ¶ã€å¯¹é½å’Œåˆ†å¸ƒ + + å†åˆ¶ã€å¯¹é½å’Œåˆ†å¸ƒ - - + + - + 一个常用的æ“作是生æˆå¯¹è±¡çš„一个副本,å³å†åˆ¶duplicating(Ctrl+D)。新生æˆçš„副本与原对象é‡åˆ(åž‚ç›´äºŽçº¸é¢æ–¹å‘),并且已ç»è¢«é€‰ä¸­ã€‚å¯ä»¥ç”¨é¼ æ ‡æˆ–光标键把它移走。想练习一下?请将下é¢ä¸€è¡Œç”¨è¿™ä¸ªé»‘æ–¹å—填满: - - - + + + - + Chances are, your copies of the square are placed more or less randomly. This is -where the Align dialog (Shift+Ctrl+A) is useful. Select all the squares +where the Align and Distribute dialog (Shift+Ctrl+A) is useful. Select all the squares (Shift+click or drag a rubberband), open the dialog and press the “Center on horizontal axis†button, then the “Make horizontal gaps between objects equal†button (read the button tooltips). The objects are now neatly aligned and @@ -557,192 +562,199 @@ examples: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - å æ”¾æ¬¡åºZ-order + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + å æ”¾æ¬¡åºZ-order - - + + - + - z-orderæŒ‡çš„æ˜¯ç»˜å›¾ä¸­å¯¹è±¡çš„å æ”¾æ¬¡åºï¼Œä¾‹å¦‚,æŸä¸ªå¯¹è±¡åœ¨æœ€ä¸Šå±‚,盖ä½äº†å…¶å®ƒçš„对象。对象(Object)èœå•中的两个命令,置顶(Raise to Top,对应Homeé”®)与置底(Lower to Botton,Endé”®),将使所选对象置于当å‰å›¾å±‚å æ”¾æ¬¡åº(Zæ–¹å‘)的顶部或底部。å¦å¤–两个命令上å‡(Raise,PgUpé”®)与下é™(Lower,PgDné”®)ï¼Œå°†ä½¿è¢«é€‰æ‹©å¯¹è±¡ä¸Šå‡æˆ–ä¸‹å°†ä¸€ä¸ªä½æ¬¡ï¼Œä¾‹å¦‚,å¯ä»¥å°†å½“å‰å¯¹è±¡ç§»åŠ¨åˆ°å®ƒä¸Šé¢ä¸€ä¸ªå›¾å½¢çš„上é¢ã€‚(如果所选对象与其它对象都ä¸é‡å ï¼Œä¸Šç§»å’Œä¸‹ç§»åˆ†åˆ«ç­‰åŒäºŽç½®é¡¶å’Œç½®åº•。) + The term z-order refers to the stacking order of objects in a drawing, +i.e. to which objects are on top and obscure others. The two commands in the Object +menu, Raise to Top (the Home key) and Lower to Bottom (the +End key), will move your selected objects to the very top or very +bottom of the current layer's z-order. Two more commands, Raise (PgUp) +and Lower (PgDn), will sink or emerge the selection one step only, +i.e. move it past one non-selected object in z-order (only objects that overlap the +selection count, based on their respective bounding boxes). - - + + - + å¯ä»¥åœ¨ä¸‹é¢çš„图形上练习改å˜å æ”¾æ¬¡åºï¼Œè®©æœ€å·¦è¾¹çš„æ¤­åœ†ä½äºŽæœ€ä¸Šå±‚,而最å³è¾¹çš„æ¤­åœ†ä½äºŽæœ€ä¸‹å±‚: - - - - - - - - + + + + + + + + - + é€‰æ‹©å æ”¾çš„对象时,一个很方便的快æ·é”®æ˜¯Tab。如果没有选择任何对象,按Tab将会选择最底层的对象;有对象被选中时,将选择其上的对象。Shift+Tab的选择方å‘则相åï¼Œä»Žæœ€é¡¶å±‚å¼€å§‹ï¼Œå¾€åº•å±‚é€æ¬¡é€‰æ‹©ã€‚é»˜è®¤çš„å æ”¾æ¬¡åºä¸Žå›¾å½¢åˆ›å»ºçš„æ¬¡åºæ˜¯ä¸€æ ·çš„,所以没有选择对象时,Shift+Tab总是选择刚创建的图形。在上é¢çš„å æ”¾æ¤­åœ†ä¸­å¯ä»¥ç»ƒä¹ ä¸€ä¸‹Tabå’ŒShift+Tab的选择。 - - 选择下é¢çš„对象并移动 + + 选择下é¢çš„对象并移动 - - + + - + 如果一个对象完全被å¦ä¸€ä¸ªå¯¹è±¡ç›–ä½äº†ï¼Œè¯¥æ€Žä¹ˆé€‰æ‹©å‘¢ï¼Ÿå¦‚果上é¢çš„å›¾å½¢æ˜¯é€æ˜Žçš„,你虽然å¯ä»¥çœ‹åˆ°ä¸‹é¢çš„å¯¹è±¡ï¼Œä½†ç‚¹å‡»æ—¶é€‰ä¸­çš„å´æ˜¯ä¸Šé¢çš„图形。 - - + + - + 这就是Alt+clickè¦å¹²çš„æ´»ã€‚首先在上é¢çš„图形上Alt+click,这将选中它,然åŽåœ¨ç›¸åŒçš„ä½ç½®ä¸Šå†æ¬¡Alt+click,这次将选择该ä½ç½®å¤„,顶层图形下é¢çš„å¯¹è±¡ã€‚å¯¹äºŽå¤šå±‚å æ”¾ï¼Œå¤šæ¬¡Alt+click实现从顶层到底层的循环选择。 - - + + - + [如果你在Linux系统中工作,Alt+clickå¯èƒ½ä¸ä¼šåƒå‰é¢æè¿°çš„那样工作,å而å¯èƒ½ä¼šç§»åŠ¨æ•´ä¸ªInkscape窗å£ã€‚这是因为窗å£ç®¡ç†å™¨ä¸ºAlt+click指定了其它用途。 ä½ éœ€è¦æ‰¾åˆ°çª—å£ç®¡ç†å™¨çš„相应é…置,把其中的这个快æ·é”®å…³æŽ‰ï¼Œæˆ–选择其它的组åˆé”®ã€‚] - - + + - + 选中了被盖ä½çš„图形,你åˆå¯ä»¥åšä»€ä¹ˆå‘¢ï¼Ÿå¯ä»¥ç”¨å…‰æ ‡é”®ç§»åŠ¨ï¼Œå¯ä»¥ç”¨é¼ æ ‡æ‹–åŠ¨æŽ§åˆ¶å™¨ã€‚ä½†æ˜¯ï¼Œå¦‚æžœæ‹–åŠ¨æ•´ä¸ªå¯¹è±¡ï¼Œåˆ™ä¼šé‡æ–°é€‰æ‹©é¡¶éƒ¨çš„图形(这是点击-拖动的工作模å¼ï¼Œæ€»æ˜¯é€‰ä¸­é¡¶éƒ¨çš„å¯¹è±¡ç„¶åŽæ‹–动)。è¦è®©Inkscape拖动当å‰é€‰æ‹©çš„å¯¹è±¡ï¼Œè€Œä¸æ˜¯é¡¶éƒ¨çš„对象,需è¦å€ŸåŠ©äºŽAlt+drag,这将拖动当å‰é€‰æ‹©çš„对象,而ä¸è®ºä½ çš„鼠标在哪里。 - - + + - + 请用Alt+clickå’ŒAlt+dragé€‰æ‹©å¹¶æ‹–åŠ¨ç»¿è‰²é€æ˜ŽçŸ©å½¢ä¸‹çš„æ£•色形状: - - - - - Selecting similar objects + + + + + Selecting similar objects - - + + - + Inkscape can select other objects similar to the object currently selected. For example, if you want to select all the blue squares below first select one of the -blue squares, and use Edit > Select Same > +blue squares, and use Edit > Select Same > Fill Color from the menu. All the objects with a fill color the same shade of blue are now selected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In addition to selecting by fill color, you can select multiple similar objects by stroke color, stroke style, fill & stroke, and object type. - - 总结 + + 总结 - - + + - + - 好了,最åŽåšä¸€ä¸‹å°ç»“。对于Inkscape,这仅仅是开始,但é è¿™å‡ æ‹›ï¼Œä½ å·²ç»å¯ä»¥åšä¸€äº›ç®€å•但ä¸å¤±å®žç”¨çš„å›¾å½¢äº†ã€‚æ›´é«˜çº§çš„å¤æ‚æ“作,请å‚ç…§Help > Tutorials中的其它教程。 + 好了,最åŽåšä¸€ä¸‹å°ç»“。对于Inkscape,这仅仅是开始,但é è¿™å‡ æ‹›ï¼Œä½ å·²ç»å¯ä»¥åšä¸€äº›ç®€å•但ä¸å¤±å®žç”¨çš„å›¾å½¢äº†ã€‚æ›´é«˜çº§çš„å¤æ‚æ“作,请å‚ç…§Help > Tutorials中的其它教程。 - + @@ -772,8 +784,8 @@ by stroke color, stroke style, fill & stroke, and object type. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-basic.zh_TW.svg b/share/tutorials/tutorial-basic.zh_TW.svg index 056d054e4..e32843b43 100644 --- a/share/tutorials/tutorial-basic.zh_TW.svg +++ b/share/tutorials/tutorial-basic.zh_TW.svg @@ -51,262 +51,262 @@ 這篇教學示範 Inkscape 的基本使用。本文是標準的 Inkscape 文件,所以你å¯ä»¥è§€çœ‹ã€ç·¨è¼¯ã€è¤‡è£½å…§å®¹æˆ–儲存。 - + 基本教學的內容涵蓋畫布ç€è¦½ã€ç®¡ç†æ–‡ä»¶ã€å½¢ç‹€å·¥å…·åŸºç¤Žã€é¸å–技巧ã€ç”¨é¸å–器改變物件ã€ç¾¤çµ„ã€è¨­å®šå¡«è‰²å’Œé‚Šæ¡†ã€å°é½Šå’ŒæŽ’列順åºã€‚到說明é¸å–®ä¸­çœ‹çœ‹å…¶ä»–教學有更多進階的主題。 - - 平移畫布 + + 平移畫布 - + 有許多方å¼ä¾†å¹³ç§» (æ²å‹•) 文件畫布。試著用éµç›¤ä¸Šçš„ Crtl+æ–¹å‘éµ ä¾†æ²å‹•。(立刻嘗試這個方法å‘下æ²å‹•這個文件。) 你也å¯ä»¥ç”¨æ»‘鼠䏭鵿‹–動畫布。或者,使用æ²è»¸ (按 Ctrl+B ä»¥é¡¯ç¤ºæˆ–éš±è—æ²è»¸)。滑鼠滾輪 也å¯é€²è¡Œåž‚ç›´æ–¹å‘çš„æ²å‹•;按 Shift ä¸¦æ»¾å‹•å¯æ°´å¹³æ²å‹•。 - - ç¸®æ”¾ç•«é¢ + + ç¸®æ”¾ç•«é¢ - + 按 - å’Œ + (或 =) 按éµé€²è¡Œç¸®æ”¾æ˜¯æœ€ç°¡å–®çš„æ–¹æ³•。你也å¯ä»¥ç”¨ Ctrl+é»žæ“Šæ»‘é¼ ä¸­éµ æˆ–è€… Ctrl+點擊滑鼠å³éµ 來放大畫é¢ã€Shift+é»žæ“Šæ»‘é¼ ä¸­éµ æˆ– Shift+點擊滑鼠å³éµ 來縮å°ç•«é¢ï¼Œæˆ–按著 Ctrl 滾動滑鼠滾輪。或者,你å¯ä»¥åœ¨ç¸®æ”¾è¼¸å…¥å€ä¸­é»žæ“Šä¸€ä¸‹ (在文件視窗的左下角),輸入一個縮放畫é¢çš„精確值 (å–®ä½ç‚º %),並按一下 Enter éµã€‚我們也有縮放工具 (在左å´çš„工具列中) è®“ä½ ç¶“ç”±æ‹–å‹•å‘¨åœæ”¾å¤§åˆ°ä¸€å€‹å€åŸŸã€‚ - + Inkscape 也ä¿ç•™åœ¨é€™å€‹å·¥ä½œéšŽæ®µä¸­ä½¿ç”¨éŽçš„縮放層級記錄。按下 ` éµå›žåˆ°ä¸Šä¸€å€‹ç¸®æ”¾ç‹€æ…‹ï¼Œæˆ– Shift+` å‰å¾€ä¸‹ä¸€å€‹ã€‚ - - Inkscape 工具 + + Inkscape 工具 - + 於左å´çš„垂直工具列陳列著 Inkscape 的繪製和編輯工具。在視窗頂端ã€é¸å–®çš„下é¢ï¼Œæœ‰åŒ…括一般命令按鈕的命令列和æ¯å€‹å·¥å…·ç‰¹æ€§æŽ§åˆ¶çš„å·¥å…·æŽ§åˆ¶åˆ—ã€‚ä½æ–¼è¦–窗底部的狀態列在你使用時會顯示有用的æç¤ºå’Œè¨Šæ¯ã€‚ - + 許多æ“作å¯ç”±éµç›¤çš„å¿«æ·éµé”æˆã€‚開啟 說明 > éµç›¤å’Œæ»‘é¼  å¯çœ‹è¦‹å®Œæ•´çš„åƒç…§ã€‚ - - å»ºç«‹å’Œç®¡ç†æ–‡ä»¶ + + å»ºç«‹å’Œç®¡ç†æ–‡ä»¶ - + 使用 檔案 > 新增 來建立新的空白文件或者按 Ctrl+N å¿«æ·éµã€‚è‹¥è¦å¾ž Inkscape 範本建立新的文件,則使用 檔案 > 從範本新增... 或者按 Ctrl+Alt+N å¿«æ·éµ - + 使用 檔案 > 開啟 (Ctrl+O) é–‹å•Ÿä¸€å€‹ç¾æœ‰çš„ SVG 檔案。使用 檔案 > 儲存 (Ctrl+S) 進行儲存,或用å¦å­˜æ–°æª” (Shift+Ctrl+S) ä¾ç…§æ–°çš„æª”案å稱來儲存。(Inkscape ä»å¯èƒ½æœƒä¸ç©©å®šï¼Œæ‰€ä»¥è¨˜å¾—時常儲存檔案ï¼) - + Inkscape 使用 SVG (å¯ç¸®æ”¾å‘é‡åœ–å½¢) æ ¼å¼ä½œç‚ºæª”案格å¼ã€‚SVG 是一個開放的標準,被圖形軟體廣泛地支æ´ã€‚SVG 檔案基於 XML 並且å¯è—‰ç”±ä»»ä½•的文字或 XML 編輯器進行編輯 (Inkscape 以外的軟體)。除了 SVG 外,Inkscape å¯ä»¥åŒ¯å…¥å’ŒåŒ¯å‡ºå¹¾ç¨®å…¶ä»–æ ¼å¼ (EPSã€PNG)。 - + Inkscape å°æ¯ä¸€å€‹æ–‡ä»¶é–‹å•Ÿä¸€å€‹åˆ†é›¢è¦–窗。你å¯ä»¥ä½¿ç”¨ä½ çš„視窗管ç†ç¨‹å¼ (例如用 Alt+Tab) 在它們之間ç€è¦½ï¼Œæˆ–者使用 Inkscape å¿«æ·éµ Ctrl+Tab å¾ªç’°åˆ‡æ›æ‰€æœ‰é–‹å•Ÿçš„æ–‡ä»¶è¦–窗。(ç¾åœ¨å»ºç«‹ä¸€å€‹æ–°æ–‡ä»¶ï¼Œä¸¦åœ¨æ–°æ–‡ä»¶å’Œæœ¬æ–‡ä»¶ä¹‹é–“切æ›é€²è¡Œç·´ç¿’。) 注æ„:Inkscape 將這些視窗視為åƒç¶²é ç€è¦½å™¨ä¸­çš„分é ä¸€æ¨£ï¼Œé€™è¡¨ç¤º Ctrl+Tab å¿«æ·éµåªå°åœ¨åŒä¸€ç¨‹åºçš„æ–‡ä»¶æœ‰ç”¨ã€‚如果你從檔案ç€è¦½å™¨ä¸­é–‹å•Ÿå¤šå€‹æª”案或從圖示啟動數個 Inkscape 程åºï¼Œé‚£éº¼å¿«æ·éµå°±ä¸æœƒæœ‰ä½œç”¨ã€‚ - - 建立形狀 + + 建立形狀 - + 學習製作一些漂亮的形狀ï¼é»žæ“Šåœ¨å·¥å…·åˆ—上的矩形工具 (或按 F4) 然後在一個新的空白文件或這裡點擊並拖曳: - - - - - - - - - - - - + + + + + + + + + + + + 如你所見,é è¨­çŸ©å½¢ç‚ºè—色,帶有黑色 邊框 (輪廓),而且完全ä¸é€æ˜Žã€‚下é¢å…§å®¹æˆ‘們將會見到如何去改變它。用其他工具,你也å¯ä»¥å»ºç«‹æ©¢åœ“å½¢ã€æ˜Ÿå½¢å’Œèžºæ—‹å½¢ï¼š - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + 這些工具統稱為形狀工具。æ¯å€‹ä½ å»ºç«‹çš„形狀會顯示一個或多個方塊形狀的控制點;試著拖動它們å¯è¦‹åˆ°å½¢ç‹€å¦‚ä½•è·Ÿè‘—è®ŠåŒ–ã€‚å½¢ç‹€å·¥å…·çš„æŽ§åˆ¶é¢æ¿å¯ç”¨å¦ä¸€ç¨®æ–¹å¼ä¾†å¾®èª¿å½¢ç‹€ï¼›é€™äº›æŽ§åˆ¶å½±éŸ¿ç›®å‰é¸æ“‡çš„形狀 (å³é‚£äº›é¡¯ç¤ºçš„æŽ§åˆ¶é»ž) 並且將會套用到新建立形狀的é è¨­æƒ…形。 - + 按 Ctrl+Z å¯å¾©åŽŸä½ ä¸Šä¸€å€‹å‹•ä½œã€‚(或者,如果你改變主æ„,å¯ä»¥ç”¨ Shift+Ctrl+Z é‡åšå¾©åŽŸçš„å‹•ä½œã€‚) - - 移動ã€ç¸®æ”¾ã€æ—‹è½‰ + + 移動ã€ç¸®æ”¾ã€æ—‹è½‰ - + 使用最頻ç¹çš„ Inkscape 工具就是é¸å–器。點é¸å·¥å…·åˆ—上最上é¢çš„æŒ‰éˆ• (ç®­é ­),或者按 F1 或空白éµã€‚ç¾åœ¨ä½ å¯ä»¥åœ¨ç•«å¸ƒä¸Šé¸å–任何物件。點擊下é¢çš„矩形。 - - + + 你會見到 8 個箭頭形狀的控制點出ç¾åœ¨ç‰©ä»¶çš„四周。ç¾åœ¨ä½ å¯ä»¥ï¼š - - + + 拖動它來移動物件。(按 Ctrl 以固定移動方å‘為垂直和水平) - - + + 拖動任何控制點來縮放物件大å°ã€‚(按 Ctrl 以維æŒåŽŸä¾†çš„é•·å¯¬æ¯”ä¾‹) - + ç¾åœ¨å†é»žä¸€æ¬¡çŸ©å½¢ã€‚控制點改變了。ç¾åœ¨ä½ å¯ä»¥ï¼š - - + + 拖動頂點上的控制點來旋轉物件。(按 Ctrl ä»¥å›ºå®šæ¯ 15 度為一階作旋轉。拖動交å‰è¨˜è™Ÿä»¥æ”¹è®Šæ—‹è½‰ä¸­å¿ƒçš„ä½ç½®ã€‚) - - + + æ‹–å‹•éžé ‚點上的控制點來傾斜 (切變) 物件。(按 Ctrl ä»¥å›ºå®šæ¯ 15 度為一階作傾斜 。) - + 當用é¸å–器時,你也å¯ä»¥ä½¿ç”¨æŽ§åˆ¶åˆ—上的數字輸入å€ä¾†è¨­å®šé¸å–çš„åæ¨™ (X å’Œ Y) å’Œå¤§å° (寬和長) 的準確數值。 - - ç”¨æŒ‰éµæ”¹è®Šç‰©ä»¶ + + ç”¨æŒ‰éµæ”¹è®Šç‰©ä»¶ - + 一個 Inkscape 的特色是除了大部份å‘é‡ç¹ªåœ–的特點以外還強調能用éµç›¤å®Œæˆæ‰€æœ‰è¨­å®šã€‚幾乎沒有任何命令和動作是éµç›¤åšä¸åˆ°çš„,改變物件也沒有例外。 - + ä½ å¯ä»¥ä½¿ç”¨éµç›¤ä¾†ç§»å‹• (æ–¹å‘éµ)ã€ç¸®æ”¾ (< å’Œ > éµ) 和旋轉 ([ å’Œ ] éµ) 物件。é è¨­ç§»å‹•和縮放的單ä½ç‚º 2 px;按 Shift,以 10 å€é è¨­å€¼ä¾†ç§»å‹•或縮放。Ctrl+> å’Œ Ctrl+< 分別放大或縮å°ç‚ºåŽŸä¾†çš„ 200% 或 50%。é è¨­ä»¥ 15 度作旋轉;按 Ctrl,å¯ä»¥ 90 度作旋轉。 - + 無論如何,或許最有用的是åƒç´ å¤§å°çš„æ”¹è®Šï¼Œè—‰ç”±ä½¿ç”¨ Alt æ­é…改變按éµä¾†èª¿ç”¨ã€‚例如,Alt+æ–¹å‘éµ å¯åœ¨ç›®å‰çš„ç•«é¢ä¸­ä»¥ 1 åƒç´ ç§»å‹•é¸å–物件 (å³ 1 螢幕åƒç´ ï¼Œä¸è¦å’Œ SVG çš„é•·åº¦å–®ä½ px 混淆了)。這表示如果你放大畫é¢ï¼ŒAlt+æ–¹å‘éµ åŸ·è¡Œä¸€æ¬¡å¾—åˆ°çš„çµæžœæ˜¯è¼ƒå°çš„絕å°ç§»å‹•é‡ï¼Œåœ¨ä½ çš„螢幕上ä»ç„¶çœ‹èµ·ä¾†åƒæ˜¯ 1 åƒç´ è¼•è¼•ç§»å‹•ã€‚å› æ­¤éœ€è¦æ™‚å¯èƒ½ç”±ç•«é¢ç¸®æ”¾ç°¡å–®ã€æº–確地把物件放置到任æ„ä½ç½®ã€‚ - + åŒæ¨£åœ°ï¼ŒAlt+> å’Œ Alt+< 縮放é¸å–物件是å¯è¦‹å¤§å°æ”¹è®Š 1 螢幕åƒç´ ï¼Œè€Œ Alt+[ å’Œ Alt+] 旋轉是以è·ä¸­å¿ƒæœ€é çš„點移動 1 螢幕åƒç´ ã€‚ - + 注æ„:如果 Linux 使用者的視窗管ç†ç¨‹å¼åœ¨é€²è¡Œ inkscape æ‡‰ç”¨å‰æ•ç²é‚£äº›æŒ‰éµäº‹ä»¶ï¼Œé‚£éº¼å¯èƒ½ç„¡æ³•得到 Alt+æ–¹å‘éµ å’Œä¸€äº›å…¶ä»–æŒ‰éµçµ„åˆé æœŸçš„çµæžœã€‚因此其中一個解決辦法就是改變視窗管ç†å™¨çš„設置。 - - 多é‡é¸å– + + 多é‡é¸å– - + ä½ å¯ä»¥ç”¨ Shift+多次點擊 ä¾†åŒæ™‚é¸å–ä»»æ„æ•¸ç›®çš„物件。或者,你å¯ä»¥åœ¨éœ€è¦é¸å–çš„ç‰©ä»¶å‘¨åœæ‹–曳;這稱為框é¸ã€‚(當從一個空白å€åŸŸæ‹–曳時,é¸å–器會產生一個矩形線框;ä¸éŽå¦‚æžœä½ åœ¨é–‹å§‹æ‹–æ›³å‰æŒ‰ Shift,Inkscape 就會一直產生矩形線框。)藉由é¸å–下é¢å…¨éƒ¨ä¸‰å€‹ç‰©ä»¶åšç·´ç¿’: - - - - + + + + @@ -323,128 +323,128 @@ æ¯å€‹å–®ç¨çš„物件在é¸å–範åœå…§æœƒé¡¯ç¤ºé¸å–標示 — é è¨­æ˜¯ä¸€å€‹çŸ©å½¢è™›ç·šæ¡†ã€‚這些標示使得容易一眼看出哪個被é¸å–ã€å“ªå€‹æ²’被é¸å–ã€‚èˆ‰ä¾‹ä¾†èªªï¼Œå¦‚æžœä½ é¸æ“‡å…©å€‹æ©¢åœ“形和一個矩形,沒有標示的情æ³ä¸‹ä½ æœƒå¾ˆé›£çŒœæ¸¬æ©¢åœ“形是å¦å·²è¢«é¸å–。 - + 在一個已é¸å–的物件上按 Shift+點擊 å¯å¾žé¸å–å€ä¸­å°‡å®ƒæŽ’除。é¸å–上é¢å…¨éƒ¨ä¸‰å€‹ç‰©ä»¶ï¼Œç„¶å¾Œä½¿ç”¨ Shift+點擊 從é¸å–å€ä¸­å°‡å…©å€‹æ©¢åœ“形排除åªç•™ä¸‹çŸ©å½¢ã€‚ - + 按 Esc éµå¯å–消é¸å–任何已鏿“‡çš„物件。Ctrl+A å¯é¸å–å†ç›®å‰åœ–層中所有的物件(如果你沒有建立圖層,那就變為é¸å–文件中的所有物件)。 - - 群組 + + 群組 - + 幾個物件å¯çµåˆç‚ºä¸€å€‹ç¾¤çµ„。一個群組於拖曳或變形時會表ç¾å¾—åƒå–®ä¸€å€‹ç‰©ä»¶ã€‚下é¢å·¦é‚Šçš„三個物件是ç¨ç«‹çš„,而å³é‚Šç›¸åŒçš„三個物件是已群組的。試著拖動這個群組看看。 - - - - + + + + - + ä½ é¸å–一個或多個物件並按 Ctrl+G å¯å»ºç«‹ä¸€å€‹ç¾¤çµ„。é¸å–它們並按 Ctrl+U å¯è§£æ•£ä¸€å€‹æˆ–多個群組。多個群組本身å¯èƒ½è¢«ç¾¤çµ„ï¼Œåªæ˜¯çœ‹èµ·ä¾†åƒä»»ä½•其他物件;這樣éžè¿´çš„群組å¯ä»¥åšä¸‹åŽ»åˆ°ä»»æ„æ·±åº¦ã€‚然而,Ctrl+U åªæœƒè§£æ•£ä¸€å€‹é¸å–中最上層的群組;如果想è¦å®Œå…¨è§£æ•£æ·±å±¤çš„「群組中有群組ã€ï¼Œé‚£éº¼å°±éœ€è¦é‡è¤‡åœ°æŒ‰ Ctrl+U。 - + 如果想è¦ç·¨è¼¯ç¾¤çµ„中的一個物件,你未必一定得解散群組。åªè¦ Ctrl+點擊 那個物件,那麼物件會被é¸å–並å¯è¢«ç·¨è¼¯ï¼Œæˆ–者 Shift+Ctrl+點擊 多個物件(任何群組的內部或外é¢)來多é‡é¸å–而ä¸ç®¡ç¾¤çµ„與å¦ã€‚試著以ä¸è§£ç¾¤çµ„散的情形下移動或改變群組中個別的形狀,然後åšä¸€èˆ¬çš„å–æ¶ˆé¸å–å’Œé¸å–此群組會見到它ä»ç„¶ä¿æŒç¾¤çµ„狀態。 - - 填色和邊框 + + 填色和邊框 - + 讓物件塗上é¡è‰²æœ€ç°¡å–®çš„æ–¹å¼æ˜¯é¸å–一個物件,然後在畫布下é¢çš„調色盤點擊一個色票 (改變它的填色)。也å¯ä»¥å¾žæª¢è¦–é¸å–®ä¸­é–‹å•Ÿè‰²ç¥¨å°è©±çª— (或按 Shift+Ctrl+W),é¸å–物件,然後點擊色票塗上填色 (改變它的填色)。 - + 更強大的是從物件é¸å–®ä¸­é–‹å•Ÿçš„填充和邊框å°è©±çª— (或按 Shift+Ctrl+F)。é¸å–下é¢çš„形狀並開啟填充和邊框å°è©±çª—。 - - + + 你會見到å°è©±çª—有三個分é ï¼šå¡«å……ã€é‚Šæ¡†é¡è‰²å’Œé‚Šæ¡†æ¨£å¼ã€‚填充分é è®“你編輯é¸å–物件的填色 (內部)。使用於分é ä¸‹é¢ä¸€é»žçš„æŒ‰éˆ•å¯é¸æ“‡å¡«å…¥é¡žåž‹ï¼ŒåŒ…括沒有填色 (有 X 圖案的按鈕)ã€ç´”色填充ã€ç·šæ€§æ¼¸å±¤æˆ–放射狀漸層。以上é¢çš„形狀來說,純色填充按鈕會是開啟的狀態。 - + 更進一步你會看到é¡è‰²é¸æ“‡å™¨çš„集åˆåœ¨å®ƒå€‘自己所屬的分é ä¸­ï¼šRGBã€CMYKã€HSLå’Œè‰²ç’°ã€‚è‰²ç’°é¸æ“‡å™¨å¤§æ¦‚是最方便的,你å¯ä»¥æ—‹è½‰ä¸‰è§’形來鏿“‡è‰²ç’°ä¸Šçš„色相,然後在三角形範åœè£¡é¸æ“‡é‚£å€‹è‰²ç›¸çš„æ˜Žæš—程度。所有é¡è‰²é¸æ“‡å™¨åŒ…å«ä¸€å€‹æ»‘動拉桿å¯è¨­å®šé¸å–物件的 alpha 值(ä¸é€æ˜Žåº¦)。 - + æ¯ç•¶ä½ é¸æ“‡ä¸€å€‹ç‰©ä»¶ï¼Œé¡è‰²é¸æ“‡å™¨æœƒæ›´æ–°ä¸¦é¡¯ç¤ºç›®å‰çš„填色和邊框 (若是多é‡é¸å–,å°è©±çª—顯示是它們的平å‡é¡è‰²)。用這些樣å“玩玩或建立你自己的: - - - - - - - - + + + + + + + + 使用邊框填塗分é å¯ä»¥ç§»é™¤ç‰©ä»¶çš„邊框 (輪廓),或者指定任何é¡è‰²æˆ–逿˜Žåº¦ : - - - - - - - - - + + + + + + + + + 最後一個分é ã€Œé‚Šæ¡†æ¨£å¼ã€è®“ä½ è¨­å®šå¯¬åº¦å’Œé‚Šæ¡†çš„å…¶ä»–åƒæ•¸ï¼š - - - - - - - - + + + + + + + + @@ -488,39 +488,39 @@ - - - - - - - - + + + + + + + + 當你從純色切æ›ç‚ºæ¼¸å±¤æ™‚,會使用先å‰çš„純色建立新的漸層 (從ä¸é€æ˜Žåˆ°é€æ˜Ž)。切æ›åˆ°æ¼¸å±¤å·¥å…·(Ctrl+F1)坿‹–動漸層控制點 — 連接控制點的直線定義漸層的方å‘和長度。當任何漸層控制點被é¸å–時 (以è—色標示),填色和邊框å°è©±çª—變為控制點的é¡è‰²è€Œéžé¸å–物件整體的é¡è‰²ã€‚ - + 還有å¦ä¸€ç¨®ç°¡ä¾¿çš„æ–¹å¼å¯æ”¹è®Šç‰©ä»¶çš„é¡è‰²å°±æ˜¯ä½¿ç”¨æ»´ç®¡å·¥å…· (F7)。åªè¦ç”¨é€™å€‹å·¥å…·é»žæ“Šä¸€ä¸‹ç¹ªåœ–å€ä¸­çš„任何地方,那麼點å–çš„é¡è‰²æœƒè¢«æŒ‡å®šç‚ºé¸å–物件的填色 (Shift+點擊 會指定邊框é¡è‰²)。 - - å†è£½ã€å°é½Šã€åˆ†ä½ˆ + + å†è£½ã€å°é½Šã€åˆ†ä½ˆ - + 最常見的動作之一為å†è£½ç‰©ä»¶ (Ctrl+D)。å†è£½ç‰©ä»¶æœƒæ”¾ç½®åœ¨åŽŸæœ¬ç‰©ä»¶çš„æ­£ä¸Šæ–¹ä¸¦ä¸”å·²é¸å–,所以你å¯ä»¥ç”¨æ»‘鼠或方å‘éµå°‡å®ƒæ‹–走。試著用這個黑色正方形排æˆç›´ç·šä½œç‚ºç·´ç¿’: - - + + @@ -542,187 +542,187 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - æŽ’åˆ—é †åº + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + æŽ’åˆ—é †åº - + 排列順åºé€™é …涉åŠç¹ªç•«æ™‚物件的堆疊次åºï¼Œå³å“ªäº›ç‰©ä»¶åœ¨é ‚層而é®ä½å…¶ä»–物件。在物件é¸å–®ä¸­æœ‰å…©å€‹æŒ‡ä»¤ — æåˆ°æœ€ä¸Šå±¤ (Home éµ) å’Œé™åˆ°æœ€ä¸‹å±¤ (End éµ),å¯ç§»å‹•ä½ çš„é¸å–物件到目å‰åœ–層排列順åºçš„æœ€ä¸Šå±¤å’Œæœ€ä¸‹å±¤ã€‚å¦å¤–兩個指令 — æå‡ (PgUp) å’Œé™ä½Ž (PgDn),å¯åªä½œä¸€æ¬¡ä¸‹æ²‰æˆ–上å‡é¸å–,å³åœ¨æŽ’列順åºä¸­ç§»å‹•它越éŽä¸€å€‹éžé¸å–物件 (根據它們å„è‡ªçš„é‚Šç•Œæ¡†ï¼Œåªæœ‰ç‰©ä»¶é‡ç–Šé¸å–倿™‚æ‰ç®—)。 - + 以åå‘é †åºæŽ’åˆ—ä¸‹é¢çš„物件來練習這些指令,所以最左邊的橢圓形在頂層而最å³é‚Šé‚£å€‹åœ¨åº•層: - - - - - - - + + + + + + + Tab 鵿˜¯éžå¸¸æœ‰ç”¨çš„é¸å–å¿«æ·éµã€‚如果沒有任何é¸å–,那麼它會é¸å–最下層的物件;ä¸ç„¶å®ƒæœƒé¸å–排列順åºä¸­é¸å–物件上é¢çš„一個物件。Shift+Tab 則å之,從最上層物件開始且å‘下進行。你建立的物件新增至堆疊的最上層,於沒有任何é¸å–情形下按下 Shift+Tab å¯ç°¡ä¾¿åœ°é¸å–你最後建立的物件。於上é¢å †ç–Šåœ¨ä¸€èµ·çš„æ©¢åœ“形上練習 Tab å’Œ Shift+Tab éµã€‚ - - é¸å–下方物件和拖曳é¸å–物件 + + é¸å–下方物件和拖曳é¸å–物件 - + 如果你需è¦çš„物件隱è—在其他物件背後,該怎麼辦?如果上層物件 (å¯èƒ½) æ˜¯é€æ˜Žçš„,你ä»ç„¶å¯çœ‹è¦‹åº•層的物件,但是在它上é¢é»žæ“Šæœƒé¸å–到上層的物件 (ä½ ä¸éœ€è¦çš„那個)。 - + Alt+點擊 就是é‡å°é€™ç¨®æƒ…æ³ã€‚首先用 Alt+點擊 é¸å–ä¸Šå±¤çš„ç‰©ä»¶å°±åƒæ™®é€šçš„點é¸ã€‚ç„¶è€Œï¼Œå†æ¬¡ Alt+點擊 åŒä¸€å€‹é»žæœƒé¸å–上層物件下é¢çš„那個物件;å†åšä¸€æ¬¡æœƒé¸å–更下é¢çš„物件,等等。因此,連續 Alt+點擊 幾次會從上層到下層循環,經由點擊ä½ç½®ä¸Šçš„物件群整個堆疊順åºã€‚ç•¶é”åˆ°æœ€ä¸‹å±¤ç‰©ä»¶æ™‚ï¼Œå† Alt+點擊 一次自然會å†ä¸€æ¬¡é¸å–最上層物件。 - + [如果你在 Linux ä¸‹ï¼Œä½ æœƒç™¼ç¾ Alt+點擊 å¯èƒ½æ²’有作用。相å地,å¯èƒ½æœƒè®Šæˆæ‹–動整個 Inkscape 視窗。這是因為你的視窗管ç†ç¨‹å¼å·²ç¶“é å®š Alt+點擊 為ä¸åŒçš„動作。修正這個å•題方法為找到視窗管ç†ç¨‹å¼çš„視窗行為é…ç½®ä¸¦é—œé–‰å®ƒï¼Œæˆ–è€…å°‡å®ƒå°æ‡‰åˆ°ä½¿ç”¨ Meta éµ (亦稱 Windows éµ),如此一來 Inkscape 和其他應用程å¼ä¾¿å¯è‡ªç”±ä½¿ç”¨ Alt éµã€‚] - + 這樣ä¸éŒ¯ï¼Œä½†æ˜¯ä½ é¸å–一個表é¢ä¸‹çš„物件å¯ä»¥åšäº›ä»€éº¼ï¼Ÿå¯ä»¥ç”¨æŒ‰éµæ”¹è®Šå®ƒå’Œæ‹–曳é¸å–æŽ§åˆ¶é»žã€‚ç„¶è€Œæ‹–å‹•ç‰©ä»¶æœ¬èº«æœƒå†æ¬¡è®Šå›žé¸å–最上層物件(這是點擊和拖曳設計為如何工作 — 它會先é¸å–游標下的(最上層)物件,然後拖曳é¸å–)。使用 Alt+拖曳 來告訴 Inkscape ç¾åœ¨ä»€éº¼è¢«é¸å–è¦é€²è¡Œæ‹–動而ä¸è¦é¸å–任何別的æ±è¥¿ã€‚這將會移動目å‰çš„é¸å–而ä¸ç®¡ä½ çš„æ»‘鼠拖曳到哪裡。 - + åœ¨ç¶ è‰²é€æ˜ŽçŸ©å½¢ä¸‹é¢çš„兩個è¤è‰²å½¢ç‹€ä¸Šç·´ç¿’ Alt+點擊 å’Œ Alt+拖曳: - - - - - é¸å–相似物件 + + + + + é¸å–相似物件 - + Inkscape 能夠é¸å–和目å‰ç‰©ä»¶ç›¸ä¼¼çš„其他物件。例如,你想è¦é¸å–在第一個é¸å–è—色正方形底下的所有è—色正方形,則使用é¸å–®ä¸­çš„ 編輯 > é¸å–相åŒç‰©ä»¶ > 填色。那麼所有填色為è—色的物件都會被é¸å–。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 除了ä¾ç…§å¡«è‰²é¸å–外,你也å¯ä»¥ä¾ç…§é‚Šæ¡†é¡è‰²ã€é‚Šæ¡†æ¨£å¼ã€å¡«è‰² & 邊框ã€ç‰©ä»¶é¡žåž‹ä¾†é¸å–多個相似物件。 - - çµè«– + + çµè«– - + å°åŸºæœ¬æ•™å­¸ä½œä¸€å€‹ç¸½çµã€‚Inkscape é ä¸æ­¢é€™äº›ï¼Œä½†ç¶“由這裡介紹的技巧,你已經å¯ä»¥è£½ä½œç°¡å–®è€Œæœ‰ç”¨çš„圖形。閱讀 說明 > 指導手冊 中的進階和其他教學了解更複雜的æ±è¥¿ã€‚ - + diff --git a/share/tutorials/tutorial-calligraphy.be.svg b/share/tutorials/tutorial-calligraphy.be.svg index f6627a4e5..c272989dd 100644 --- a/share/tutorials/tutorial-calligraphy.be.svg +++ b/share/tutorials/tutorial-calligraphy.be.svg @@ -40,104 +40,104 @@ КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - + ::КÐЛІÒРÐФІЯ -Ð±ÑƒÐ»Ñ Ð±Ñк, buliabyak@users.sf.net Ñ– josh andler, scislac@users.sf.net - + + Ðдзін з найвÑлікшых інÑтрумÑнтаў, наÑўных у Inkscape — гÑта інÑтрумÑнт «КаліґрафіÑ». ГÑты падручнік дапаможа вам пазнаёміцца з тым, Ñк працуе гÑты інÑтрумÑнт, а такÑама пакажа Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Ð°ÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ð¼Ñтады маÑтацтва каліґрафіі. - + ВыкарыÑтоўвайце Ctrl+ÑтрÑлкі, кола мышы, ці перацÑгваньне ÑÑÑ€ÑднÑй кнопкай мышы, каб пракручваць гÑтую Ñтаронку долу. ÐÑновы ÑтварÑньнÑ, вылучÑÐ½ÑŒÐ½Ñ Ð¹ ператварÑÐ½ÑŒÐ½Ñ Ð°Ð±'ектаў глÑдзіце Ñž «ÐÑновах» у Даведка > Падручнікі. - - ГіÑÑ‚Ð¾Ñ€Ñ‹Ñ Ð¹ Ñтылі + + ГіÑÑ‚Ð¾Ñ€Ñ‹Ñ Ð¹ Ñтылі - + Паводле азначÑÐ½ÑŒÐ½Ñ Ñлоўнікаў ÐºÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ–Ñ Ð·Ð½Ð°Ñ‡Ñ‹Ñ†ÑŒ «прыгожае напіÑаньне» ці «выразны ці Ñлеґантны почырк». Па ÑутнаÑьці, ÐºÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ–Ñ Ð·ÑŒÑўлÑецца маÑтацтвам ÑтварÑÐ½ÑŒÐ½Ñ Ð¿Ñ€Ñ‹Ð³Ð¾Ð¶Ð°Ð³Ð° ці Ñлеґантнага піÑÐ°Ð½ÑŒÐ½Ñ ÑžÑ€ÑƒÑ‡Ð½ÑƒÑŽ. ГÑта можа гучаць пужаючы, але, крыху папрактыкаваўшыÑÑ, кожны можа заÑвоіць аÑновы гÑтага маÑтацтва. - + ÐÐ°Ð¹Ñ€Ð°Ð½ÐµÐ¹ÑˆÑ‹Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹ каліґрафіі датуюцца рыÑункамі пÑчорнага чалавека. Прыблізна да 1440 г. н.Ñ., пакуль Ð½Ñ Ð±Ñ‹Ñž вынайдзены друкарÑкі Ñтанок, ÐºÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑтоўвалаÑÑ Ð¿Ñ€Ñ‹ выданьні кніг ды іншых публікацый. ПерапіÑчыкі муÑілі ўручную перапіÑваць аÑобна кожны аÑобнік кожнай кнігі ці публікацыі. Яны піÑалі гуÑіным пÑром Ñ– чарнілам па пÑргамÑнце. Стылі літар, што выкарыÑтоўваліÑÑ Ñž Ñ€Ð¾Ð·Ð½Ñ‹Ñ Ñ‡Ð°ÑÑ‹, былі: ПроÑты, КаралінÑкі, Òатычны ды інш. ÐапÑўна, найчаÑьцей звычайны ÑучаÑны чалавек Ñутыкаецца з каліґрафіÑй на вÑÑельных запрашÑньнÑÑ…. - + ÐÑьць тры Ð³Ð°Ð»Ð¾ÑžÐ½Ñ‹Ñ Ñтылі каліґрафіі: - - + + ЗаходнÑÑ Ñ†Ñ– раманÑÐºÐ°Ñ - - + + ÐрабÑÐºÐ°Ñ - - + + КітайÑÐºÐ°Ñ Ñ†Ñ– ÑžÑходнÑÑ - + ГÑты падручнік факуÑуецца, збольшага, на заходнÑй каліґрафіі, бо Ñ–Ð½ÑˆÑ‹Ñ Ð´Ð²Ð° Ñтылі выкарыÑтоўваюць пÑндзаль (а Ð½Ñ Ð²Ð¾Ñтрае пÑро), што не адпавÑдае таму, Ñк працуе наш інÑтрумÑнт каліґрафіі. - + Ðдна Ð·Ð½Ð°Ñ‡Ð½Ð°Ñ Ð¿ÐµÑ€Ð°Ð²Ð°Ð³Ð° над напіÑаньнем мінуўшчыны, Ñкую мы маем, — загад ÐдмÑніць: калі зробіце памылку, уÑÑ Ñтаронка Ð½Ñ Ð±ÑƒÐ´Ð·Ðµ ÑапÑаванаÑ. ІнÑтрумÑнт каліґрафіі Inkscape такÑама задзейнічае пÑÑžÐ½Ñ‹Ñ Ñ‚ÑÑ…Ð½Ñ–Ñ‡Ð½Ñ‹Ñ Ð¿Ñ€Ñ‹Ñ‘Ð¼Ñ‹, ÑÐºÑ–Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ Ð½ÐµÐ¼Ð°Ð³Ñ‡Ñ‹Ð¼Ñ‹Ñ Ð· традыцыйнымі пÑром-Ñ–-чарнілам. - - ÐбÑталÑваньне + + ÐбÑталÑваньне - + ÐÐ°Ð¹Ð»ÐµÐ¿ÑˆÑ‹Ñ Ð²Ñ‹Ð½Ñ–ÐºÑ– атрымоўваюцца, калі працуеце з плÑншÑтам Ñ– пÑром (напр., Wacom). Ðле дзÑкуючы гнуткаÑьці нашага інÑтрумÑнта, нават тыÑ, хто мае толькі мыш, могуць зрабіць даволі Ñкладаную каліґрафію, Ñ…Ð°Ñ†Ñ Ð¹ будуць пÑÑžÐ½Ñ‹Ñ Ð¿Ñ€Ð°Ð±Ð»ÐµÐ¼Ñ‹ з атрыманьнем хуткіх шырокіх штрыхоў. - + Inkscape можа выкарыÑтоўнаць адчувальнаÑьць да націÑÐºÐ°Ð½ÑŒÐ½Ñ Ð¹ адчувальнаÑьць да нахілу пÑра плÑншÑта, Ñкі падтрымлівае гÑÑ‚Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñьці. Функцыі адчувальнаÑьці Ñпачатку абÑзьдзейненыÑ, бо ім патрÑÐ±Ð½Ñ‹Ñ Ð½Ð°Ñтаўленьні. ТакÑама майце на ўвазе, што ÐºÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ–Ñ Ð·ÑŒ пÑром ці воÑтрай аÑадкай Ð½Ñ Ð²ÐµÐ»ÑŒÐ¼Ñ– Ð°Ð´Ñ‡ÑƒÐ²Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð° націÑканьнÑ, у адрозьненьні ад пÑндзлÑ. - + @@ -152,43 +152,43 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + Каліґрафічнае пÑро Inkscape можа быць адчувальным да хуткаÑьці штрыхоў (гл. «ПатанчÑньне» ніжÑй), таму, калі карыÑтаецеÑÑ Ð¼Ñ‹ÑˆÐ°Ð¹, лепей абнуліце гÑты парамÑтар. - - Выборы інÑтрумÑнту «КаліґрафіÑ» + + Выборы інÑтрумÑнту «КаліґрафіÑ» - + ÐŸÐµÑ€Ð°ÐºÐ»ÑŽÑ‡Ñ‹Ñ†ÐµÐ½Ñ Ð½Ð° інÑтрумÑнт каліґрафіі, націÑнуўшы Ctrl+F6, клÑвішу C ці пÑтрыкнуўшы па ейным ґузіку на панÑлі інÑтрумÑнтаў. Ðа верхнÑй панÑлі можаце заўважыць 8 выбораў: Ñ‚Ð°ÑžÑˆÑ‡Ñ‹Ð½Ñ Ð¹ патанчÑньне, абмежаваньне, шапкі, дрыжÑньне, гайданьне й маÑа. ТакÑама Ñ‘Ñьць два ґузікі, Ñкі ўключаюць ці выключаюць адчувальнаÑьць да націÑку й нахілу (пры працы з плÑншÑтамі). - - Ð¢Ð°ÑžÑˆÑ‡Ñ‹Ð½Ñ Ð¹ патанчÑньне + + Ð¢Ð°ÑžÑˆÑ‡Ñ‹Ð½Ñ Ð¹ патанчÑньне - + ГÑÑ‚Ð°Ñ Ð¿Ð°Ñ€Ð° выбораў кіруе таўшчынёй пÑра. Яна можа зьмÑнÑцца ад 1 да 100 Ñ– (прадвызначана) вымÑраецца адзінкамі, прапарцыйнымі памеру вакна рыÑаваньнÑ, але незалежнымі ад маштабу. ГÑта мае ÑÑнÑ, бо Ð½Ð°Ñ‚ÑƒÑ€Ð°Ð»ÑŒÐ½Ð°Ñ Â«Ð°Ð´Ð·Ñ–Ð½ÐºÐ° вымÑÑ€ÑньнÑ» Ñž каліґрафіі — дыÑпазон рухаў вашае рукі, а таму зручна мець таўшчыню пÑра нÑзьменнай чаÑткай памеру вашае «дошкі Ð´Ð»Ñ Ñ€Ñ‹ÑаваньнÑ», а Ð½Ñ Ñž нейкіх Ñапраўдных адзінках, ÑÐºÑ–Ñ Ð·Ñ€Ð¾Ð±Ñць Ñе залежнай ад маштабу. Ðднак Ñ‚Ð°ÐºÑ–Ñ Ð¿Ð°Ð²Ð¾Ð´Ð·Ñ–Ð½Ñ‹ неабавÑзковыÑ, Ñ– могуць быць Ð·ÑŒÐ¼ÐµÐ½ÐµÐ½Ñ‹Ñ Ñ‚Ñ‹Ð¼Ñ–, хто аддае перавагу абÑалютным адзінкам, не зьвÑртаючы ўвагу на маштаб. Каб пераключыцца на такі Ñ€Ñжым, выкарыÑтоўвайце адпаведную «птушачку» на Ñтаронцы наÑтаўленьнÑÑž інÑтрумÑнта (Ñе можна адкрыць падвойнай пÑтрычкай па ґузіку інÑтрумÑнту). - + Паколькі Ñ‚Ð°ÑžÑˆÑ‡Ñ‹Ð½Ñ Ð¿Ñра чаÑта зьмÑнÑецца, Ñе можна папраўлÑць не пераходзÑцы да кіроўнай панÑлі, выкарыÑтоўваючы клÑвішы ÑтрÑлак управа й улева, ці з дапамогай плÑншÑта, Ñкі падтрымлівае функцыі адчувальнаÑьці да націÑку. ÐÐ°Ð¹Ð»ÐµÐ¿ÑˆÐ°Ñ Ñ€Ñч з гÑтым клÑвішамі, што Ñны працуюць калі вы рыÑуеце, таму таўшчыню пÑра можна зьмÑнÑць у ÑÑÑ€Ñдзіне штрыха: - таўшчынÑ=1, раÑьце… даÑÑгае 47, зьмÑншаецца… ізноў да 0 - - + таўшчынÑ=1, раÑьце… даÑÑгае 47, зьмÑншаецца… ізноў да 0 + + @@ -201,48 +201,48 @@ thinning of fast strokes. Here are a few examples, all drawn with width=20 and angle=90: - патанчÑньне = 0 (нÑÐ·ÑŒÐ¼ÐµÐ½Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ) - патанчÑньне = 10 - патанчÑньне = 40 - патанчÑньне = -20 - патанчÑньне = -60 - - - - - - - - - - - - - - - - - - - - - + патанчÑньне = 0 (нÑÐ·ÑŒÐ¼ÐµÐ½Ð½Ð°Ñ ÑˆÑ‹Ñ€Ñ‹Ð½Ñ) + патанчÑньне = 10 + патанчÑньне = 40 + патанчÑньне = -20 + патанчÑньне = -60 + + + + + + + + + + + + + + + + + + + + + Ð”Ð»Ñ Ð¿Ð°Ñ†ÐµÑ…Ñ– задайце таўшчыню й патанчÑньне роўнымі 100 (макÑымум) Ñ– рыÑуйце Ñ€Ñзкімі рыўкамі, каб атрымаць надзіва натуральныÑ, нÑÑžÑ€Ð¾Ð½Ð°Ð¿Ð°Ð´Ð¾Ð±Ð½Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹: - - - - - - - - Вугал Ñ– абмежаваньне + + + + + + + + Вугал Ñ– абмежаваньне - + @@ -257,15 +257,15 @@ angle=90: - - - - вугал = 90 ґрад - вугал = 30 (прадвызначаны) - вугал = 0 - вугал = -90 ґрад - - + + + + вугал = 90 ґрад + вугал = 30 (прадвызначаны) + вугал = 0 + вугал = -90 ґрад + + @@ -274,34 +274,34 @@ angle=90: - - + + Кожны традыцыйны Ñтыль каліґрафіі мае Ñвай улаÑны пераважны вугал пÑра. Ðапрыклад, унцыÑл выкарыÑтоўвае вугал 25 ґрадуÑаў. Больш ÑÐºÐ»Ð°Ð´Ð°Ð½Ñ‹Ñ ÑˆÑ€Ñ‹Ñ„Ñ‚Ñ‹ й больш Ð²Ð¾Ð¿Ñ‹Ñ‚Ð½Ñ‹Ñ ÐºÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ‹ чаÑта зьмÑнÑюць вугал Ð¿Ð°Ð´Ñ‡Ð°Ñ Ñ€Ñ‹ÑаваньнÑ, Ñ– Inkscape робіць гÑта магчымым, ці праз націÑканьне клÑвіш ÑтрÑлак уверх Ñ– ўніз, ці з плÑншÑтам, Ñкі патдрымлівае магчымаÑьць адчувальнаÑьці да нахілу. Ð”Ð»Ñ Ð¿Ð°Ñ‡Ð°Ñ‚ÐºÐ¾Ð²Ñ‹Ñ… урокаў каліґрафіі, аднак, найлепей трымаць вугал нÑзьменным. ВоÑÑŒ прыклады штрыхоў, нарыÑаваных з рознымі вугламі (абмежаваньне=100): - вугал = 30 - вугал = 60 - вугал = 90 - вугал = 0 - вугал = 15 - вугал = -45 - - - - - - - + вугал = 30 + вугал = 60 + вугал = 90 + вугал = 0 + вугал = 15 + вугал = -45 + + + + + + + Як можаце заўважыць, штрых найтанчÑйшы, калі рыÑуецца паралельна Ñвайму вуглу, Ñ– найтаўÑьцейшы, калі рыÑуецца праÑтаÑтаўна. Ð”Ð°Ð´Ð°Ñ‚Ð½Ñ‹Ñ Ð²ÑƒÐ³Ð»Ñ‹ найбольш Ð½Ð°Ñ‚ÑƒÑ€Ð°Ð»ÑŒÐ½Ñ‹Ñ Ð¹ Ñ‚Ñ€Ð°Ð´Ñ‹Ñ†Ñ‹Ð¹Ð½Ñ‹Ñ Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²Ð°Ñ€ÑƒÐºÐ°Ð¹ каліґрафіі. - + @@ -313,19 +313,19 @@ angle=90: - вугал = 30абмежаваньне = 100 - вугал = 30абмежаваньне = 80 - вугал = 30абмежаваньне = 0 - - - - - - - - - - + вугал = 30абмежаваньне = 100 + вугал = 30абмежаваньне = 80 + вугал = 30абмежаваньне = 0 + + + + + + + + + + @@ -334,7 +334,7 @@ angle=90: - + @@ -343,7 +343,7 @@ angle=90: - + @@ -352,7 +352,7 @@ angle=90: - + @@ -361,7 +361,7 @@ angle=90: - + @@ -370,7 +370,7 @@ angle=90: - + @@ -379,7 +379,7 @@ angle=90: - + @@ -388,7 +388,7 @@ angle=90: - + @@ -397,7 +397,7 @@ angle=90: - + @@ -406,7 +406,7 @@ angle=90: - + @@ -415,7 +415,7 @@ angle=90: - + @@ -424,7 +424,7 @@ angle=90: - + @@ -433,7 +433,7 @@ angle=90: - + @@ -442,7 +442,7 @@ angle=90: - + @@ -451,7 +451,7 @@ angle=90: - + @@ -460,7 +460,7 @@ angle=90: - + @@ -469,7 +469,7 @@ angle=90: - + @@ -478,17 +478,17 @@ angle=90: - + Кажучы па-друкарÑку, найбольшае абмежаваньне, а таму й найбольшы кантраÑÑ‚ таўшчыні штрыха (уверÑе зьлева) улаÑьцівы антычнай ґарнітуры з заÑечкамі, такой Ñк Таймз ці Бадоні (бо гÑÑ‚Ñ‹Ñ Ò‘Ð°Ñ€Ð½Ñ–Ñ‚ÑƒÑ€Ñ‹ гіÑтарычна былі ўдаваньнем каліґрафіі з нÑзьменным пÑром). ÐулÑвое абмежаваньне й нулÑвы кантраÑÑ‚ таўшчыні (уверÑе Ñправа), зь іншага боку, наводзÑць на думку пра ÑучаÑÐ½Ñ‹Ñ Ò‘Ð°Ñ€Ð½Ñ–Ñ‚ÑƒÑ€Ñ‹ без заÑечак, Ñ‚Ð°ÐºÑ–Ñ Ñк ГельвÑтыка. - - ДрыжÑньне + + ДрыжÑньне - + @@ -499,7 +499,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + паволі ÑÑÑ€Ñдне хутка @@ -513,289 +513,289 @@ splotches. This significantly expands the creative range of the tool. - дрыжÑньне = 0 - дрыжÑньне = 10 - дрыжÑньне = 30 - дрыжÑньне = 50 - дрыжÑньне = 70 - дрыжÑньне = 90 - дрыжÑньне = 20 - дрыжÑньне = 40 - дрыжÑньне = 60 - дрыжÑньне = 80 - дрыжÑньне = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Гайданьне й маÑа + дрыжÑньне = 0 + дрыжÑньне = 10 + дрыжÑньне = 30 + дрыжÑньне = 50 + дрыжÑньне = 70 + дрыжÑньне = 90 + дрыжÑньне = 20 + дрыжÑньне = 40 + дрыжÑньне = 60 + дрыжÑньне = 80 + дрыжÑньне = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Гайданьне й маÑа - + У адрозьненьне ад таўшчыні й вугла, Ð°Ð¿Ð¾ÑˆÐ½Ñ–Ñ Ð´Ð²Ð° парамÑтры вызначаюць Ñк інÑтрумÑнт «адчувае», а не ўплывае на візуальны вынік. Таму Ñž гÑтым разьдзеле Ð½Ñ Ð±ÑƒÐ´Ð·Ðµ аніÑкіх рыÑункаў, проÑта паÑпрабуйце Ñ–Ñ… улаÑнаручна, каб лепей зразумець. - + Гайданьне — гÑта Ñупраціўленьне паперы руху пÑра. Прадвызначана найменшае (0), пры павелічÑньні гÑтага парамÑтру папера робіцца «Ñьлізкай»: калі маÑа вÑлікаÑ, пÑро Ñпрабуе ўцÑчы на Ñ€Ñзкіх паваротах, калі маÑа нулÑваÑ, выÑокае гайданьне прымушае пÑро дзіка гайдацца. - + У фізыцы маÑа — гÑта тое, што абумоўлівае інÑрцыю, чым большую маÑу мае інÑтрумÑнт каліґрафіі Inkscape, тым больш ён адÑтае ад курÑора мышы й больш згладжвае Ñ€ÑÐ·ÐºÑ–Ñ Ð¿Ð°Ð²Ð°Ñ€Ð¾Ñ‚Ñ‹ й Ñ…ÑƒÑ‚ÐºÑ–Ñ ÑˆÑ‚ÑƒÑ€ÑˆÐºÑ– вашых штрыхоў. Прадвызначана гÑтае значÑньне даволі малое (2), таму інÑтрумÑнт хуткі й чуйны, але можна павÑлічыць маÑу каб атрымаць больш павольнае й гладкае пÑро. - - Прыклады каліґрафіі + + Прыклады каліґрафіі - + ЦÑпер, ведаючы аÑÐ½Ð¾ÑžÐ½Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñьці інÑтрумÑнту, вы можаце паÑпрабаваць Ñтварыць нейкую Ñапраўдную каліґрафію. Калі вы навічок у гÑтым маÑтацтве, набыйце Ñабе добрую кніжку з каліґрафіі й вывучайце Ñе з дапамогай Inkscape. У гÑтым разьдзеле вам будуць Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ‹Ñ Ð½ÐµÐºÐ°Ð»ÑŒÐºÑ– проÑтых прыкладаў. - + Ðайперш, каб рабіць літары, вам патрÑбна Ñтварыць пару лінеек, ÑÐºÑ–Ñ Ð±ÑƒÐ´ÑƒÑ†ÑŒ накіроўваць ваÑ. Калі вы зьбіраецеÑÑ Ð¿Ñ–Ñаць нахіленым шрыфтам ці курÑівам, такÑама дадайце некалькі нахіленых накіроўных празь дзьве лінейкі, напрыклад: - - - - - - - - - + + + + + + + + + ПаÑÑŒÐ»Ñ Ð½Ð°Ð±Ð»Ñ–Ð·ÑŒÑ†Ðµ ці аддальце рыÑунак гÑтак, каб Ð²Ñ‹ÑˆÑ‹Ð½Ñ Ð¼Ñ–Ð¶ лінейкамі адпавÑдала вашаму Ñамаму натуральнаму дыÑпазону руху рукі, адрÑґулюйце таўшчыню й вугал, Ñ– паехалі! - + ÐапÑўна, Ð¿ÐµÑ€ÑˆÑ‹Ñ Ñ€Ñчы, ÑÐºÑ–Ñ Ð²Ñ‹ муÑіце зрабіць Ñк пачатковец у каліґрафіі, — папрактыкавацца з аÑноўнымі ÑлемÑнтамі літар: вÑртыкальнымі й гарызантальнымі, нахіленымі й Ñкругленымі. ВоÑÑŒ некалькі ÑлемÑнтаў літар УнцыÑлу: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Колькі карыÑных парад: - - + + Калі Ð²Ð°ÑˆÐ°Ñ Ñ€ÑƒÐºÐ° камфортна лÑжыць на плÑншÑце, не пераÑоўвайце Ñе. ЗамеÑÑ‚ гÑтага пераÑоўвайце палатно (клÑвішы Ctrl+ÑтрÑлкі) левай рукой, Ñкончыўшы кожную літару. - - + + Калі апошні штрых кепÑкі, то проÑта адмÑніце Ñго (Ctrl+Z). Ðднак, калі ÑÐ³Ð¾Ð½Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð° добраÑ, але Ñтановішча ці памер небездакорныÑ, то лепей чаÑова пераключыцца на «Вылучальнік» (Прабел) Ñ– паÑунуць/зьмÑніць памер/паварот Ñк трÑба, паÑÑŒÐ»Ñ Ñ–Ð·Ð½Ð¾Ñž націÑьніце Прабел Ñ– вÑрніцеÑÑ Ð´Ð° інÑтрумÑнту каліґрафіі. - - + + Зрабіўшы Ñлова, ізноў пераключыцеÑÑ Ð½Ð° «Вылучальнік», каб паправіць аднаÑтайнаÑьць аÑноўных штрыхоў Ñ– Ð¼Ñ–Ð¶Ð»Ñ–Ñ‚Ð°Ñ€Ð½Ñ‹Ñ Ñ–Ð½Ñ‚Ñрвалы. Ðднак не пераÑтарайцеÑÑ, Ð´Ð¾Ð±Ñ€Ð°Ñ ÐºÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ–Ñ Ð¼ÑƒÑіць захоўваць нÑправільны выглÑд, нібы зроблены ўручную. Ðе паддавайцеÑÑ ÑпакуÑе капіÑваць літары ці Ñ–Ñ…Ð½Ñ‹Ñ ÑлемÑнты, кожны штрых муÑіць быць арыґінальным. - + І воÑÑŒ некалькі прыкладаў напіÑаньнÑ: - - - - - - - - - УнцыÑл - КаралінÑкі шрыфт - Òатычны шрыфт - БаÑтарда - - - Пышны курÑÑ–Ñž - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ð’Ñ‹Ñновы + + + + + + + + + УнцыÑл + КаралінÑкі шрыфт + Òатычны шрыфт + БаÑтарда + + + Пышны курÑÑ–Ñž + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ð’Ñ‹Ñновы - + ÐšÐ°Ð»Ñ–Ò‘Ñ€Ð°Ñ„Ñ–Ñ â€” гÑта Ð½Ñ Ñ‚Ð¾Ð»ÑŒÐºÑ– забава, гÑта глыбока духоўнае маÑтацтва, Ñкое можа зьмÑніць ваш поглÑд на ÑžÑÑ‘, што вы робіце й бачыце. ІнÑтрумÑнт каліґрафіі Inkscape можа Ñлужыць толькі Ñьціплымі ўводзінамі. Ðле, уÑÑ‘-ткі ён вельмі добры Ð´Ð»Ñ Ð·Ð°Ð±Ð°Ñž Ñ– можа прыдаÑца Ñž Ñапраўдным дызайне. Ðтрымоўвайце аÑалоду! - + diff --git a/share/tutorials/tutorial-calligraphy.de.svg b/share/tutorials/tutorial-calligraphy.de.svg index f71747941..cee8a6a0e 100644 --- a/share/tutorials/tutorial-calligraphy.de.svg +++ b/share/tutorials/tutorial-calligraphy.de.svg @@ -43,7 +43,7 @@ ::KALLIGRAFIE -Bulia Byak (buliabyak@users.sf.net) und Josh Andler (scislac@users.sf.net) + diff --git a/share/tutorials/tutorial-calligraphy.el.svg b/share/tutorials/tutorial-calligraphy.el.svg index 0ed085629..94796baf0 100644 --- a/share/tutorials/tutorial-calligraphy.el.svg +++ b/share/tutorials/tutorial-calligraphy.el.svg @@ -40,195 +40,195 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - + ::ΚΑΛΛΙΓΡΑΦΊΑ -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + Ένα από τα μεγάλα διαθέσιμα εÏγαλεία που είναι διαθέσιμα στο Inkscape είναι το εÏγαλείο καλλιγÏαφίας. Αυτό το μάθημα θα σας βοηθήσει να εξοικειωθείτε με τη χÏήση του εÏγαλείου, καθώς και να σας επιδείξει μεÏικές βασικές τεχνικές της τέχνης της καλλιγÏαφίας. - + ΧÏησιμοποιήστε Ctrl+βέλη, Ï„Ïοχός ποντικιοÏ, ή σÏÏσιμο μεσαίου πλήκτÏου για να κυλίσετε τη σελίδα Ï€Ïος τα κάτω. Για τα βασικά δημιουÏγία αντικειμένου, επιλογή και μετασχηματισμός, δείτε το βασικό μάθημα στο Βοήθεια > Μαθήματα. - - ΙστοÏία και μοÏφοποιήσεις + + ΙστοÏία και μοÏφοποιήσεις - + Πηγαίνοντας στον οÏισμό του λεξικοÏ, καλλιγÏαφία σημαίνει “ωÏαία γÏαφή†ή “σωστή ή κομψή τέχνη γÏαφήςâ€. Ουσιαστικά, καλλιγÏαφία είναι η τέχνη δημιουÏγίας ωÏαίων ή κομψών χειÏόγÏαφων. ΜποÏεί να ακοÏγεται εκφοβιστικό, αλλά με λίγη εξάσκηση, οποιοσδήποτε μποÏεί να γίνει κÏÏιος των βασικών αυτής της τέχνης. - + Οι Ï€Ïώτες μοÏφές της καλλιγÏαφίας χÏονολογοÏνται από τις ζωγÏαφιές του ανθÏώπου των σπηλαίων. ΜέχÏι το 1440 μ.Χ., Ï€Ïιν την τυπογÏαφία, η καλλιγÏαφία ήταν ο Ï„Ïόπος που γινόντουσαν βιβλία και άλλες εκδόσεις. Ένας αντιγÏαφέας έπÏεπε να γÏάψει με το χέÏι κάθε αντίγÏαφο καθενός βιβλίου ή έκδοσης. Η χειÏογÏαφή γινόταν με φτεÏÏŒ και μελάνι σε υλικά, όπως πεÏγαμηνή. Οι μοÏφοποιήσεις των γÏαμμάτων που χÏησιμοποιήθηκαν κατά το πέÏασμα των αιώνων εμπεÏιέχουν Rustic, Carolingian, Blackletter, κλ. Ίσως η πιο συνηθισμένη τοποθεσία, όπου ο μέσος άνθÏωπος θα συναντήσει καλλιγÏαφία σήμεÏα είναι στις Ï€Ïοσκλήσεις γάμων. - + ΥπάÏχουν Ï„Ïεις κÏÏιες μοÏφοποιήσεις καλλιγÏαφίας: - - + + Δυτική ή Ρωμαϊκή - - + + ΑÏαβική - - + + Κινέζικη ή Ανατολική - + Αυτό το μάθημα εστιάζει κυÏίως στη δυτική καλλιγÏαφία, καθώς οι δÏο άλλες μοÏφοποιήσεις τείνουν να χÏησιμοποιήσουν ένα πινέλο (αντί για πένα με μÏτη), που δεν είναι ο Ï„Ïέχων Ï„Ïόπος λειτουÏγίας του εÏγαλείου καλλιγÏαφίας. - + Ένα μεγάλο πλεονέκτημα που έχουμε συγκÏιτικά με τους αντιγÏαφείς του παÏελθόντος είναι η εντολή ΑναίÏεση: Εάν κάνετε ένα λάθος, η συνολική σελίδα δεν καταστÏέφεται. Το εÏγαλείο καλλιγÏαφίας του Inkscape ενεÏγοποιεί επίσης μεÏικές τεχνικές που θα ήταν δυνατές με μια παÏαδοσιακή πένα και μελάνι. - - Υλικό + + Υλικό - + Θα πάÏετε τα άÏιστα αποτελέσματα, εάν χÏησιμοποιήσετε μια πινακίδα και πένα (Ï€.χ. Wacom). Λόγω της ευλυγισίας του εÏγαλείου μας, ακόμα και αυτοί με μόνο ένα ποντίκι μποÏοÏν να κάνουν κάποια αÏκετά πεÏίπλοκη καλλιγÏαφία, αν και θα υπάÏχει κάποια δυσκολία στην παÏαγωγή γÏήγοÏων καμπυλών πινελιών. - + Το Inkscape μποÏεί να χÏησιμοποιήσει την ευαισθησία πίεσης και την ευαισθησία κλίσης μιας πένας πινακίδας που υποστηÏίζει αυτά τα χαÏακτηÏιστικά. Οι λειτουÏγίες ευαισθησίας απενεÏγοποιοÏνται από επιλογή, επειδή απαιτοÏν διαμόÏφωση. Επίσης, να θυμόσαστε ότι η καλλιγÏαφία με πένα ή πένα με μÏτη δεν είναι Ï€Î¿Î»Ï ÎµÏ…Î±Î¯ÏƒÎ¸Î·Ï„Î· στην πίεση, αντίθετα με το πινέλο. - + Εάν έχετε μια πινακίδα και θα θέλατε να χÏησιμοποιήσετε τα χαÏακτηÏιστικά ευαισθησίας, θα χÏειασθείτε να διαμοÏφώσετε την συσκευή σας. Αυτή η διαμόÏφωση θα χÏειασθεί να εκτελεσθεί μόνο μια φοÏά και οι Ïυθμίσεις θα αποθηκευτοÏν. Για να ενεÏγοποιήσετε αυτήν την υποστήÏιξη, Ï€Ïέπει η πινακίδα να είναι συνδεμένη Ï€Ïιν την εκκίνηση του inkscape και έπειτα να συνεχίσετε με το άνοιγμα του διαλόγου Συσκευές εισόδου... μέσα από το Î¼ÎµÎ½Î¿Ï Î•Ï€ÎµÎ¾ÎµÏγασία. Με αυτόν τον διάλογο ανοικτό, μποÏείτε να διαλέξετε την Ï€Ïοτιμώμενη συσκευή και Ïυθμίσεις για τη γÏαφίδα της πινακίδας σας. Τέλος, μετά την επιλογή αυτών των Ïυθμίσεων, μετάβαση στο εÏγαλείο καλλιγÏαφίας και εναλλαγή των κουμπιών της εÏγαλειοθήκης για πίεση και κλίση. Από δω και πέÏα, το Inkscape θα θυμάται αυτές τις Ïυθμίσεις στην εκκίνηση. - + Η πένα καλλιγÏαφίας του Inkscape μποÏεί να είναι ευαίσθητη στην ταχÏτητα της πινελιάς (δείτε “λέπτυνση†πιο κάτω), έτσι εάν χÏησιμοποιείτε ποντίκι, θα θέλετε Ï€Ïοφανώς να μηδενίσετε αυτήν την παÏάμετÏο. - - Επιλογές εÏγαλείου καλλιγÏαφίας + + Επιλογές εÏγαλείου καλλιγÏαφίας - + Μετάβαση στο εÏγαλείο καλλιγÏαφίας πιέζοντας Ctrl+F6, ή το πλήκτÏο C, ή πατώντας στο κουπί της γÏαμμής εÏγαλείων. Στην ανώτεÏη γÏαμμή εÏγαλείων, θα σημειώσετε ότι υπάÏχουν 8 επιλογές: πλάτος & λέπτυνση; γωνία & ΣταθεÏοποίηση; κεφαλαία; Ï„Ïέμουλο, ΑνατάÏαξη & μάζα. ΥπάÏχουν επίσης δÏο κουμπιά για εναλλαγή ευαισθησίας πίεσης και κλίσης πινακίδας ενεÏγό και ανενεÏγό (για σχεδιαστικές πινακίδες). - - Πλάτος & λέπτυνση + + Πλάτος & λέπτυνση - + Αυτό το ζευγάÏι επιλογών ελέγχουν το πλάτος της πένας σας. Το πλάτος μποÏεί να ποικίλει από 1 έως 100 και (από Ï€Ïοεπιλογή) μετÏιέται σε μονάδες σχετικές με το μέγεθος του παÏαθÏÏου επεξεÏγασίας σας, αλλά ανεξάÏτητες από την εστίαση. Αυτό είναι λογικό, επειδή η φυσική “μονάδα μέτÏησης†στην καλλιγÏαφία είναι η πεÏιοχή της κίνησης του χεÏÎ¹Î¿Ï ÏƒÎ±Ï‚ και συνεπώς είναι κατάλληλη να έχει το πλάτος της μÏτης της πένας σας με σταθεÏÏŒ λόγο συγκÏιτικά με το μέγεθος της “πεÏιοχής σχεδίασης†και όχι σε κάποιες Ï€Ïαγματικές μονάδες που θα το κάναν να εξαÏτάται από την εστίαση. Αυτή η συμπεÏιφοÏά είναι όμως δυνητική, έτσι μποÏεί να αλλαχθεί για αυτοÏÏ‚ που Ï€ÏοτιμοÏν απόλυτες μονάδες ανεξάÏτητα από την εστίαση. Για μετάβαση σε αυτήν την κατάσταση, χÏησιμοποιήστε το πλαίσιο ελέγχου στη σελίδα Ï€Ïοτιμήσεων του εÏγαλείου (μποÏείτε να το ανοίξετε διπλοπατώντας το κουμπί εÏγαλείου). - + Î‘Ï†Î¿Ï Ï„Î¿ πλάτος της πένας αλλάζει συχνά, μποÏείτε να το Ïυθμίσετε χωÏίς να πάτε στη γÏαμμή εÏγαλείων, χÏησιμοποιώντας τα πλήκτÏα βελών αÏιστεÏÏŒ και δεξί ή με μια πινακίδα που υποστηÏίζει τη λειτουÏγία ευαισθησίας πίεσης. Το άÏιστο με αυτά τα πλήκτÏα είναι ότι δουλεÏουν ενώ σχεδιάζετε, έτσι μποÏείτε να αλλάξετε το πλάτος της πένας σας βαθμιαία στο μέσο της πινελιάς: - πλάτος=1, αÏξηση... φτάνοντας 47, μείωση... επιστÏοφή στο 0 - - + πλάτος=1, αÏξηση... φτάνοντας 47, μείωση... επιστÏοφή στο 0 + + Το πλάτος της πένας μποÏεί επίσης να εξαÏτάται από την ταχÏτητα, όπως ελέγχεται από την παÏάμετÏο λέπτυνσης. Αυτή η παÏάμετÏος μποÏεί να πάÏει τιμές από -100 έως 100. Μηδέν σημαίνει ότι το πλάτος είναι ανεξάÏτητο από την ταχÏτητα, θετικές τιμές κάνουν τις πιο γÏήγοÏες πινελιές πιο λεπτές, αÏνητικές τιμές κάνουν τις πιο γÏήγοÏες πινελιές πιο πλατιές. Η Ï€Ïοεπιλογή 10 σημαίνει μέτÏια λέπτυνση των γÏήγοÏων πινελιών. Î™Î´Î¿Ï Î¼ÎµÏικά παÏαδείγματα, όλα σχεδιασμένα με πλάτος=20 και γωνία=90: - λέπτυνση = 0 (ομοιόμοÏφο πλάτος) - λέπτυνση = 10 - λέπτυνση = 40 - λέπτυνση = -20 - λέπτυνση = -60 - - - - - - - - - - - - - - - - - - - - - + λέπτυνση = 0 (ομοιόμοÏφο πλάτος) + λέπτυνση = 10 + λέπτυνση = 40 + λέπτυνση = -20 + λέπτυνση = -60 + + + + + + + + + + + + + + + + + + + + + Για αστείο, οÏίστε το πλάτος και την λέπτυνση στο 100 (μέγιστο) και σχεδιάστε με Ï„Ïελές κινήσεις για να πάÏετε παÏάξενα φυσιοκÏατικά σχήματα μοÏφής νευÏώνα: - - - - - - - - Γωνία & σταθεÏοποίηση + + + + + + + + Γωνία & σταθεÏοποίηση - + @@ -243,15 +243,15 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - - - γωνία = 90 μοίÏες - γωνία = 30 (Ï€Ïοεπιλογή) - γωνία = 0 - γωνία = -90 μοίÏες - - + + + + γωνία = 90 μοίÏες + γωνία = 30 (Ï€Ïοεπιλογή) + γωνία = 0 + γωνία = -90 μοίÏες + + @@ -260,34 +260,34 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - - + + Κάθε μοÏφοποίηση παÏαδοσιακής καλλιγÏαφίας έχει τη δικιά της δεδομένη γωνία πένας. Π.χ., η γÏαφή Uncial χÏησιμοποιεί γωνία 25 μοιÏών. Πιο σÏνθετες γÏαφές και πιο έμπειÏοι καλλιγÏάφοι αλλάζουν συχνά τη γωνία ενώ σχεδιάζουν και το Inkscape το κάνει εφικτό πιέζοντας τα πλήκτÏα βελών επάνω και κάτω ή με πινακίδα που υποστηÏίζει το χαÏακτηÏιστικό της ευαισθησίας κλίσης. Για το ξεκίνημα καλλιγÏαφικών μαθημάτων, όμως, η διατήÏηση της γωνίας σταθεÏής θα δουλέψει άÏιστα. Î™Î´Î¿Ï Ï€Î±Ïαδείγματα πινελιών που σχεδιάστηκαν με διαφοÏετικές γωνίες (σταθεÏοποίηση = 100): - γωνία = 30 - γωνία = 60 - γωνία = 90 - γωνία = 0 - γωνία = 15 - γωνία = -45 - - - - - - - + γωνία = 30 + γωνία = 60 + γωνία = 90 + γωνία = 0 + γωνία = 15 + γωνία = -45 + + + + + + + Όπως μποÏείτε να δείτε, η πινελιά είναι Ï€Î¿Î»Ï Î»ÎµÏ€Ï„Î® όταν σχεδιάζεται παÏάλληλα Ï€Ïος τη γωνία της και Ï€Î¿Î»Ï Ï€Î»Î±Ï„Î¹Î¬ όταν σχεδιάζεται κάθετα. Θετικές γωνίες είναι οι πιο φυσικές και παÏαδοσιακές για δεξιόγÏαφη καλλιγÏαφία. - + @@ -299,19 +299,19 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - γωνία = 30ΣταθεÏοποίηση = 100 - γωνία = 30ΣταθεÏοποίηση = 80 - γωνία = 30ΣταθεÏοποίηση = 0 - - - - - - - - - - + γωνία = 30ΣταθεÏοποίηση = 100 + γωνία = 30ΣταθεÏοποίηση = 80 + γωνία = 30ΣταθεÏοποίηση = 0 + + + + + + + + + + @@ -320,7 +320,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -329,7 +329,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -338,7 +338,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -347,7 +347,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -356,7 +356,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -365,7 +365,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -374,7 +374,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -383,7 +383,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -392,7 +392,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -401,7 +401,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -410,7 +410,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -419,7 +419,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -428,7 +428,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -437,7 +437,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -446,7 +446,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -455,7 +455,7 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + @@ -464,24 +464,24 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + Μιλώντας τυπογÏαφικά, η μέγιστη σταθεÏοποίηση και συνεπώς μέγιστη αντίθεση πλάτους πινελιάς (πάνω αÏιστεÏά) είναι τα χαÏακτηÏιστικά των παλιών οικογενειών χαÏακτήÏων με πατοÏÏα, όπως Times ή Bodoni (επειδή αυτές οι οικογένειες χαÏακτήÏων ήταν ιστοÏικά μια απομίμηση των καλλιγÏαφιών σταθεÏής πένας). Από την άλλη πλευÏά, μηδενική σταθεÏοποίηση και μηδενική αντίθεση πλάτους (πάνω δεξιά), Ï€Ïοτείνουν σÏγχÏονες οικογένειες χαÏακτήÏων χωÏίς πατοÏÏα όπως η Helvetica. - - ΤÏέμουλο + + ΤÏέμουλο - + Το Ï„Ïέμουλο σκοπεÏει να δώσει μια πιο φυσική εμφάνιση στις καλλιγÏαφικές πινελιές. Το Ï„Ïέμουλο Ïυθμίζεται στη γÏαμμή ελέγχων με τιμές από 0 μέχÏι 100. Θα επηÏεάσει τις πινελιές σας παÏάγοντας οτιδήποτε από ελαφÏιά ανωμαλία μέχÏι άγÏιες μουντζαλιές και κηλίδες. Αυτό επεκτείνει σημαντικά τη δημιουÏγική εμβέλεια του εÏγαλείου. - + αÏγά μεσαία γÏήγοÏα @@ -495,289 +495,289 @@ bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - Ï„Ïέμουλο = 0 - Ï„Ïέμουλο = 10 - Ï„Ïέμουλο = 30 - Ï„Ïέμουλο = 50 - Ï„Ïέμουλο = 70 - Ï„Ïέμουλο = 90 - Ï„Ïέμουλο = 20 - Ï„Ïέμουλο = 40 - Ï„Ïέμουλο = 60 - Ï„Ïέμουλο = 80 - Ï„Ïέμουλο = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ΑνατάÏαξη & μάζα + Ï„Ïέμουλο = 0 + Ï„Ïέμουλο = 10 + Ï„Ïέμουλο = 30 + Ï„Ïέμουλο = 50 + Ï„Ïέμουλο = 70 + Ï„Ïέμουλο = 90 + Ï„Ïέμουλο = 20 + Ï„Ïέμουλο = 40 + Ï„Ïέμουλο = 60 + Ï„Ïέμουλο = 80 + Ï„Ïέμουλο = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ΑνατάÏαξη & μάζα - + Αντίθετα με το πλάτος και τη γωνία, αυτές οι δÏο τελευταίες παÏάμετÏοι οÏίζουν πώς το εÏγαλείο “αισθάνεται†πεÏισσότεÏο παÏά επηÏεάζουν την οπτική του έξοδο. Γι' αυτό δεν θα υπάÏχουν εικόνες σε αυτήν την ενότητα. Απλά δοκιμάστε τες οι ίδιοι για να πάÏετε μια καλÏτεÏη ιδέα. - + ανατάÏαξη είναι η αντίσταση του χαÏÏ„Î¹Î¿Ï ÏƒÏ„Î· μετακίνηση της πένας. Η Ï€Ïοεπιλογή είναι στο ελάχιστο (0) και αÏξηση αυτής της παÏαμέτÏου κάνει το χαÏτί “ολισθηÏÏŒâ€: εάν η μάζα είναι μεγάλη, η πένα τείνει να φεÏγει στις απότομες στÏοφές. Εάν η μάζα είναι μηδέν, υψηλή ανατάÏαξη κάνει την πένα να κουνιέται πολÏ. - + Στη φυσική, η μάζα Ï€Ïοκαλεί αδÏάνεια. Όσο πιο μεγάλη η μάζα του εÏγαλείου καλλιγÏαφίας του Inkscape, τόσο πεÏισσότεÏο καθυστεÏεί πίσω από το δείκτη του Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï ÎºÎ±Î¹ τόσο πεÏισσότεÏο εξομαλÏνει απότομες στÏοφές και γÏήγοÏα Ï„Ïαβήγματα στην πινελιά σου. Από Ï€Ïοεπιλογή αυτή η τιμή είναι αÏκετά μικÏή (2), έτσι ώστε το εÏγαλείο να είναι γÏήγοÏο και με ανταπόκÏιση, αλλά μποÏείτε να αυξήσετε τη μάζα για να πάÏετε πιο αÏγή και πιο μαλακή πένα. - - ΠαÏαδείγματα καλλιγÏαφίας + + ΠαÏαδείγματα καλλιγÏαφίας - + ΤώÏα που ξέÏετε τις βασικές δυνατότητες του εÏγαλείου, μποÏείτε να Ï€Ïοσπαθήσετε να παÏάξετε αληθινή καλλιγÏαφία. Εάν είσθε νέος σε αυτήν την τέχνη, πάÏτε ένα καλό βιβλίο καλλιγÏαφίας και μελετήστε το με το Inkscape. Αυτή η ενότητα θα σας δείξει μόνο μεÏικά απλά παÏαδείγματα. - + ΠÏώτα απ' όλα, για να κάνετε γÏάμματα, χÏειαζόσαστε να δημιουÏγήσετε ένα ζευγάÏι χάÏακες για να σας οδηγήσουν. Εάν Ï€Ïόκειται να γÏάψετε σε πλάγια ή με ενωμένα γÏάμματα γÏαφή, Ï€Ïοσθέστε μεÏικοÏÏ‚ πλάγιους οδηγοÏÏ‚ κατά μήκος των δÏο χαÏάκων επίσης, Ï€.χ.: - - - - - - - - - + + + + + + + + + Έπειτα εστιάστε έτσι ώστε το Ïψος Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ χαÏάκων να αντιστοιχεί στην πιο φυσική πεÏιοχή κίνησης του χεÏιοÏ, Ïυθμίστε πλάτος και γωνία, και φÏγαμε! - + ΠÏοφανώς το Ï€Ïώτο Ï€Ïάγμα που θα Ï€Ïέπει να κάνετε ως αÏχάÏιος καλλιγÏάφος είναι να εξασκήσετε τα βασικά στοιχεία των γÏαμμάτων — κάθετες και οÏιζόντιες στελέχη, στÏογγυλές πινελιές, πλάγια στελέχη. Î™Î´Î¿Ï Î¼ÎµÏικά στοιχεία γÏαμμάτων για τη γÏαφή Uncial: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Πολλές χÏήσιμες συμβουλές: - - + + Εάν το χέÏι σας είναι άνετο στην πινακίδα, μην το μετακινήσετε. Αντίθετα, κυλίστε τον καμβά (πλήκτÏα Ctrl+βέλος) με το αÏιστεÏÏŒ σας χέÏι μετά το τέλος κάθε γÏάμματος. - - + + Εάν η τελευταία πινελιά ήταν κακή, απλά αναιÏέστε την (Ctrl+Z). Όμως, εάν το σχήμα της είναι καλό, αλλά η θέση ή μέγεθος είναι ελαφÏά εκτός, είναι καλÏτεÏο να μεταβείτε στο επιλογέα Ï€ÏοσωÏινά (διάστημα) και ώθηση/κλιμάκωση/πεÏιστÏοφή της όσο χÏειάζεται (χÏησιμοποιώντας ποντίκι ή πλήκτÏα), έπειτα πιέστε διάστημα ξανά για να επιστÏέψετε στο εÏγαλείο καλλιτεχνίας. - - + + Έχοντας γÏάψει μια λέξη, μεταβείτε στον επιλογέα πάλι για να Ïυθμίσετε την ομοιομοÏφία του στελέχους και το διάκενο των γÏαμμάτων. Μην το παÏακάνετε αυτό, όμως. Η καλή καλλιγÏαφία Ï€Ïέπει να διατηÏεί κάποια ακανόνιστη όψη χειÏογÏαφής. Αντισταθείτε στον πειÏασμό να αντιγÏάψετε ακÏιβώς γÏάμματα και στοιχεία γÏαμμάτων. Κάθε πινελιά Ï€Ïέπει να είναι αυθεντική. - + Και να μεÏικά πλήÏη παÏαδείγματα σχεδίασης γÏαμμάτων: - - - - - - - - - Unicial γÏαφή - ΓÏαφή ΚαÏολιδών (Carolingian) - Γοτθική γÏαφή - Ενδιάμεση (Bâtarde) γÏαφή - - - Διακοσμητική ιταλική γÏαφή - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ΣυμπέÏασμα + + + + + + + + + Unicial γÏαφή + ΓÏαφή ΚαÏολιδών (Carolingian) + Γοτθική γÏαφή + Ενδιάμεση (Bâtarde) γÏαφή + + + Διακοσμητική ιταλική γÏαφή + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ΣυμπέÏασμα - + Η καλλιγÏαφία δεν είναι μόνο διασκέδαση. Είναι βαθιά πνευματική τέχνη που μποÏεί να μετασχηματίσει την στάση σας σε κάθε τι που κάνετε και βλέπετε. Το εÏγαλείο καλλιγÏαφίας του Inkscape μποÏεί να χÏησιμεÏσει ως απλή εισαγωγή. ΠαÏόλα αυτά είναι Ï€Î¿Î»Ï ÏŒÎ¼Î¿Ïφο να παίξετε με αυτό και ίσως χÏήσιμο στην αληθινή σχεδίαση. ΑπολαÏστε το! - + diff --git a/share/tutorials/tutorial-calligraphy.es.svg b/share/tutorials/tutorial-calligraphy.es.svg index 54b904a26..639034ea6 100644 --- a/share/tutorials/tutorial-calligraphy.es.svg +++ b/share/tutorials/tutorial-calligraphy.es.svg @@ -40,104 +40,104 @@ Use Ctrl+down arrow to scroll - + ::CALIGRAFÃA -bulia byak, buliabyak@users.sf.net y josh andler, scislac@users.sf.net - + + Traducción a cargo de GLUD-ACL (Grupo Linux universidad Distrital - Academia y Conocimiento Libre), glud-acl@listas.udistrital.edu.co - + Una de las grandes herramientas disponibles en Inkscape es la herramienta de Caligrafía. Este tutorial le ayudará a conocer como trabaja la herramienta, o mejor aú demostrar alguna técnicas básicas del arte de la Caligrafía. - - Historia y éstilos + + Historia y éstilos - + Dirigiéndonos a la definición del diccionario, caligrafía significa "escritura hermosa" o "escritura elegante o vistoza". Escencialmente, la caligrafí es el arte de hacer escritura a mano de manera hermosa o elegante. Esto puede sonar intimidante, pero con un poco de práctica, cualquiera puede ser un maestro en las bases de este arte. - + Las primeras formas de caligrafía se remontan a los gráficos rupestres. Después del año 1440 D.C. y antes de la creación de la prensa de impresión, la caligrafía se encontraba en los libros y otras publicaciones que eran realizadas. Un escriba tenía que realizar a mano cada copia de cada libro o publiciación. La escritura a mano era realizada con una pluma y tinta hechas sobre vitelas o pergaminos. Los éstilos de letra usados a traés de esos años incluían: Rústico, Carolingio, Letraoscura, etc. Hoy en día el uso más común de la caligrafía son las invitaciones a bodas. - + Existen tres tipos principales de caligrafía: - - + + Occidental o Roman - - + + Arabiga - - + + China u Oriental - + Este tutorial se enfoca fundamentalmente en la caligrafía Occidental, como los otros dos éstilos tienden al uso de la brocha (En vez de un esfero con mina), lo cual no se relaciona al funcionamiento actual de nuestra herramienta de Caligrafía. - + Una de las grandes ventajas que tenemos sobre los escribas del pasado, es el comando Deshacer: Si usted comete un error, no se daña toda la página . La herramienta Caligrafía de Inkscape permite algunas otras técnicas que no serían posibles con una pluma y tinta tradicional. - - Hardware + + Hardware - + Obtendráa unos mejores resultados si usa una tableta y lápiz (eje. Wacom). Sin embargo, por medio del ratón usted puede hacer algunos trazos caligráficos iniciales, piense que tendrá dificultad para producir trazos rápidos. - + Inkscape no usa aún sensibilidad de presión de un lápiz de tabla, pero esto no es un problema, por que una pluma de caligrafía tradicional (diferente a una brocha) también no es muy sensible a la presión. La pluma caligráfica de Inkscape puede ser sensible a la velocidad del trazo (Observe "Adelgazar" más adelante), entonces si usa el ratón, probablemente deseará en ver este parámetro. - + @@ -152,7 +152,7 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + @@ -162,10 +162,10 @@ the stroke (see “Thinning†below), so if you are using a mouse, you'll zero this parameter. - - Opciones de la Herramienta de Caligrafía + + Opciones de la Herramienta de Caligrafía - + @@ -177,10 +177,10 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and drawing tablets). - - Ancho & Adelgazar + + Ancho & Adelgazar - + @@ -197,48 +197,48 @@ to this mode, use the checkbox on the tool's Preferences page (you can open by double-clicking the tool button). - + Desde que el ancho de la pluma sea cambiado a menudo, usted puede ajustarlo sin ir a la barra de herramientas, usando las teclas de flechas izquierda y derecha. Lo mejor de estas teclas es que trabajan de esta forma sólo mientras dibuja, así que puede cambiar el ancho de su pluma gradualmente en medio del trazo: - width=1, growing.... reaching 47, decreasing... back to 0 - - + width=1, growing.... reaching 47, decreasing... back to 0 + + El ancho de la pluma puede depender de la velocidad, así siendo controlado mediante el parámetro adelgazar. Este parámetro puede tomar valores entre -1 y 1; cero significa que el ancho es independiente a la velocidad, valores positivos hacen los trazos rápidos más delgados , valores negativos hacen los trazos rápidos más amplios. El valor 10, por defecto significa adelgazamiento moderado de trazos rápidos. He aquí algunos pocos ejemplos, todos dibujados con ancho=0.2 y ángulo=90: - thinning = 0 (uniform width) - thinning = 10 - thinning = 40 - thinning = -20 - thinning = -60 - - - - - - - - - - - - - - - - - - - - - + thinning = 0 (uniform width) + thinning = 10 + thinning = 40 + thinning = -20 + thinning = -60 + + + + + + + + + + + + + + + + + + + + + @@ -247,16 +247,16 @@ by double-clicking the tool button). jerky movements to get strangely naturalistic, neuron-like shapes: - - - - - - - - ángulo & Fijación + + + + + + + + ángulo & Fijación - + @@ -271,15 +271,15 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - - - angle = 90 deg - angle = 30 (default) - angle = 0 - angle = -90 deg - - + + + + angle = 90 deg + angle = 30 (default) + angle = 0 + angle = -90 deg + + @@ -288,8 +288,8 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - + + @@ -303,26 +303,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - angle = 30 - angle = 60 - angle = 90 - angle = 0 - angle = 15 - angle = -45 - - - - - - - + angle = 30 + angle = 60 + angle = 90 + angle = 0 + angle = 15 + angle = -45 + + + + + + + Como podemos observar, el trazo es más delgado cuando es dibujado paralelo a su ángulo y es más amplio cuando se dibuja perpendicular a este. ángulos posítivos son más naturales y tradicionales para caligrafía con dibujo hecho con mano derecha . - + @@ -339,19 +339,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - angle = 30fixation = 100 - angle = 30fixation = 80 - angle = 30fixation = 0 - - - - - - - - - - + angle = 30fixation = 100 + angle = 30fixation = 80 + angle = 30fixation = 0 + + + + + + + + + + @@ -360,7 +360,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -369,7 +369,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -378,7 +378,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -387,7 +387,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -396,7 +396,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -405,7 +405,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -414,7 +414,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -423,7 +423,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -432,7 +432,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -441,7 +441,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -450,7 +450,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -459,7 +459,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -468,7 +468,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -477,7 +477,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -486,7 +486,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -495,7 +495,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -504,17 +504,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + Hablando tipográficamente, la fijación máxima y por consiguiente el contraste del ancho máximo del trazo son las características (más adelante) de las fuentes antique serif, como las Times o Bodoni (por que estas fuentes son históricamente una imitación de la caligrafí de la pluma-arreglada). La fijación Cero y el ancho de contraste Cero (Arriba a la derecha), sobre la otra mano, sugiere la fuente actual Sans Serif, así como la Helvetica. - - Tremor + + Tremor - + @@ -525,7 +525,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + slow medium fast @@ -539,59 +539,59 @@ splotches. This significantly expands the creative range of the tool. - tremor = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + tremor = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + Diferente al ancho y al ángulo, estos dos últimos parámetros definen como "siente" la herramienta, más allá de como afectan su salida visual. A razón de esto en esta sección no habrán ilustraciones; en vez de esto intente usted mismo para poder tener una mejor idea de lo que hacen estos parámetros. - + @@ -602,7 +602,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer wiggle makes the pen to wiggle wildly. - + @@ -614,39 +614,39 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma get slower and smoother pen. - - Ejemplos de caligrafía + + Ejemplos de caligrafía - + Ahora que ya posee las capacidades básicas de la herramienta, puede intentar producir algunas caligrafís reales. Si es usted nuevo en este arte, adquiera un buen libro de caligrafía y estudielo junto con el Inkscape. Esta sección le mostrará unos pocos ejemplos. - + Primero que todo, para hacer letras, requiere crear un par de reglas para guiarse. Si usted va a escribir con éstilo inclinado o cursiva, agregue algunas guías inclinadas a través de las dos reglas, por ejemplo: - - - - - - - - - + + + + + + + + + Entonces haga zoom de tal manera que la longitud entre las reglas corresponda al rango natural de su escritura, ajuste el ancho y el ángulo, y ¡aquí vamos! - + @@ -656,184 +656,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Algunos trucos interesantes: - - + + Si siente comodidad sobre la tabla, no la mueva. En vez de eso, acomode la pizarra (Ctrl+tecla de flecha) con su mano izquierda después de finalizar cada letra. - - + + Si su último contorno no está bien, tan sólo deshágalo (Ctrl+Z). Sin embargo, si una forma es buena pero la posición o el tamaóo no son correctos, es mejor utilizar temporalmente el Selector (Barra Espaceadora) y perfile/escale/rote de ser necesario (usando el ratón o las teclas), luego presione Barra Espaceadora de nuevo para retornar a la herramienta Caligrafía. - - + + Habiendo realizado una palabra, cambie al selector de nuevo para ajustar las barras y espaceado entre letras uniformemente. No exagere con esto, sin embargo; la buena caligrafía debe conservar un éstilo similar. Resista la tentación de copiar letras y sus elementos; cada contorno debe ser original. - + Y aquí podemos observar alguno ejemplos completos: - - - - - - - - - Unicial hand - Carolingian hand - Gothic hand - Bâtarde hand - - - Flourished Italic hand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Conclusión + + + + + + + + + Unicial hand + Carolingian hand + Gothic hand + Bâtarde hand + + + Flourished Italic hand + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Conclusión - + La caligrafía no es sólo divertida; es además un arte espiritual que puede transformar su visión sobre todo lo que hace y puede ver. La herramienta de caligrafía de Inkscape puede servirle como una modesta introducción para este arte. Y aún es muy divertido jugar jugar con ella y puede ser muy útil en el diseño real. ¡Disfrutela! - + diff --git a/share/tutorials/tutorial-calligraphy.eu.svg b/share/tutorials/tutorial-calligraphy.eu.svg index f473847d6..1b697d410 100644 --- a/share/tutorials/tutorial-calligraphy.eu.svg +++ b/share/tutorials/tutorial-calligraphy.eu.svg @@ -40,104 +40,104 @@ Use Ctrl+down arrow to scroll - + ::KALIGRAFIA -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + Kaligrafia tresna Inkscape-eko tresna zoragarrien artean dago. Tutorial honek tresnaren erabileraz jabetzen lagunduko dizu, baita Kaligrafi-artearen oinarrizko teknikak aurkeztu ere. - + Ktrl+Geziak, saguaren gurpila edo saguaren erdiko botoiarekin arrastatu erabili orrian beheruntz mugitzeko. Objektuen sorrera, hautapena eta eraldaketaren oinarrientzako ikusi Oinarrizko tutoriala Laguntza > Tutorialak menuan. - - Historia eta Estiloak + + Historia eta Estiloak - + Hiztegiko definizioaren arabera, kaligrafia “idazkera ederra†edo “idazkera bidezko edo elegantea†esan nahi du. Oinarrian, kaligrafia eskuz eder edo elegante idaztearen artea da. Beldurgarria irudi daiteke, baina praktika apur batekin, edonor nagusitu ditzake arte honen oinarriak. - + Lehenbiziko kaligrafiaren formak leizegizonen irudietaraino garamatza. KO 1440. urterarte, inprimatutako testuak hedatzen hasi baino lehen, kaligrafia liburu eta argitalpenak egiteko modua zen. Eskribauak eskuz idatzi behar zituen liburu edo argitalpenen kopia bakoitza. Eskuz idaztea luma eta tintarekin aberelarru edo pergamino bezalako materialen gainean egiten zen. Garai haietan erabilitako letra-moten artean “Rusticâ€, Karolingio, “Blackletter†eta abar zeuden. Litekeena da gaur egun pertsona normal batek kaligrafiarekin edukiko duen harreman ohizkoena ezkontza gonbidapenak izatea. - + Hona hemen kaligrafiako hiru estilo nagusiak: - - + + Mendebaldekoa edo Erromanikoa - - + + Arabiarra - - + + Txinatarra edo Ekialdekoa - + Tutorial hau Mendebaldeko kaligrafian oinarritzen da batez ere, beste bi estiloek oraingo Kaligrafia tresnaren erabileratik at gelditzen den brotxa bat erabili ohi dutelako (boladun luma bat erabili ordez). - + Eskribauekin alderatuta dugun abantaila nagusietako bat Desegin komandoa da: Akats bat eginez gero ez da orri guztia zapuzten. Inkscape-ko Kaligrafia tresnak betiko luma-eta-tintarekin ezinezkoak diren teknika batzuk ahalmentzen ditu. - - Hardwarea + + Hardwarea - + Emaitza hoberenak tableta eta lumak (Wacom, adibidez) erabiliz lortzen dira. Gure tresnaren malgutasunari esker, sagua soilik dutenek ere sor ditzakete kaligrafia korapilatsu batzuk, nahiz eta zailtasunak izan trazu ekorketa azkarrak sortzeko. - + Inkscapek tablet-lumen presio sentikortasuna eta okerdura sentikortasuna erabil ditzake. Sentikortasun funtzioak defektuz ezgaituta daude, konfiguratu behar direlako. Baita, kontutan eduki luma batekin sortutako kaligrafiek ez dutela brotxa batekin egindakoak haina presio sentikortasunik. - + @@ -152,17 +152,17 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + Inkscape-ren kaligrafi luma trazuaren abiadurarekiko sentikorra izan daiteke (ikusi “Mehetzea†beherago), beraz sagua erabiltzen bazabiltza ziur aski parametro honi zero balioa eman nahiko diozu. - - Kaligrafia Tresnaren Ezarpenak + + Kaligrafia Tresnaren Ezarpenak - + @@ -174,58 +174,58 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and drawing tablets). - - Zabalera eta Mehetzea + + Zabalera eta Mehetzea - + Ezarpen bikote honek zure lumaren zabalera kontrolatzen du. Zabalera 1etik 100ra joan daiteke, eta (defektuz) editatzeko leihoaren tamainarekiko erlatiboa da, baina zoomarekiko askea. Honek zentzua du, kaligrafian “neurtzeko unitatea†zure eskuko mugimenduaren araberakoa delako; horregatik lagungarria da lumaren bolaren zabalera zure “marrazketa taulaâ€rekiko konstante mantentzea, zoomaren menpe egongo liratekeen unitate errealetan baino. jokaera hau hala ere hautazkoa da, zooma kontutan hartu gabe unitate absolutuak nahiago dituztenek aldatzea dutelarik. Modu honetara aldatzeko erabili Hobespenak horriko (tresna botoian birritan klikatuz ireki dezakezu) kontrol-laukia. - + Lumaren zabalera askotan aldatzen denez, balioa aldatzeko tresna-barrara joan ordez ezker eta eskubi geziak erabil ditzakezu edo presio sentikortasuna duen tablet batekin. Tekla hauen gauzarik hoberena marrazten zauden bitartean erabil daitezkeela da, trazu baten erdian lumaren zabalera gradualki alda dezakezularik: - width=1, growing.... reaching 47, decreasing... back to 0 - - + width=1, growing.... reaching 47, decreasing... back to 0 + + Lumaren zabalera abiaduraren menpe egon daiteke baita ere, mehetzea parametroaren arabera. Parametro hoonek -1etik 1erako balioak har ditzake; zerok zabalera abiadurarekiko independientea dela esan nahi du, balio positiboak trazu azkarrak mehetzen ditu, balio negatiboak aldiz trazu azkarrak loditzen ditu. Defektuzko 10 balioak mehetze txiki bat ematen die trazu azkarrei. Hona hemen adibide batzuk, guztiak zabalera=0.2 eta orientazioa=90 izanik: - mehetzea = 0 (zabalera uniformea) - thinning = 10 - thinning = 40 - thinning = -20 - thinning = -60 - - - - - - - - - - - - - - - - - - - - - + mehetzea = 0 (zabalera uniformea) + thinning = 10 + thinning = 40 + thinning = -20 + thinning = -60 + + + + + + + + + + + + + + + + + + + + + @@ -234,16 +234,16 @@ drawing tablets). jerky movements to get strangely naturalistic, neuron-like shapes: - - - - - - - - Angelua eta Orientazioa + + + + + + + + Angelua eta Orientazioa - + @@ -258,15 +258,15 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - - - angelua = 90 gradu - angelua = 30 (lehenetsia) - angelua = 0 - angelua = -90 gradu - - + + + + angelua = 90 gradu + angelua = 30 (lehenetsia) + angelua = 0 + angelua = -90 gradu + + @@ -275,8 +275,8 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - + + @@ -290,26 +290,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - angelua = 30 - angelua = 60 - angelua = 90 - angelua = 0 - angelua = 15 - angelua = -45 - - - - - - - + angelua = 30 + angelua = 60 + angelua = 90 + angelua = 0 + angelua = 15 + angelua = -45 + + + + + + + Ikus dezakezunez, trazu meheena angeluarekiko paralelo marraztean lortzen da, eta lodiena perpendikularki marraztean. Angelu positiboak naturalenak dira eta ohizkoak eskuineko eskuko kaligrafientzat. - + @@ -326,19 +326,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - angelua = 30fixation = 100 - angelua = 30fixation = 80 - angelua = 30orientazioa = 0 - - - - - - - - - - + angelua = 30fixation = 100 + angelua = 30fixation = 80 + angelua = 30orientazioa = 0 + + + + + + + + + + @@ -347,7 +347,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -356,7 +356,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -365,7 +365,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -374,7 +374,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -383,7 +383,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -392,7 +392,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -401,7 +401,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -410,7 +410,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -419,7 +419,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -428,7 +428,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -437,7 +437,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -446,7 +446,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -455,7 +455,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -464,7 +464,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -473,7 +473,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -482,7 +482,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -491,17 +491,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + Tipografiaren ikuspegitik, orientazio maximoa eta beraz trazuaren zabalera kontrasterik handiena (goian ezkerrean) aintzinako serif letra-moldeen ezaugarria da, Times edo Bodoni adibidez (letra-molde hauek historikoki luma finkoko kaligrafiaren kopia bat zirelako). Zero orientazioa eta zabalera kontrasterik gabe (goian eskuinean), bestalde, Helvetica bezalako san serif letra-molde modernoak gogorarazten ditu. - - Dardara + + Dardara - + @@ -512,7 +512,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + astiro tartekoa azkar @@ -526,59 +526,59 @@ splotches. This significantly expands the creative range of the tool. - dardara = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + dardara = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + Zabalera eta angelua ez bezala, azkeneko bi parametro hauek tresnaren “antzematean†eragiten dute irteera bisualean baino. Beraz ez da irudirik egongo atal honetan; horren ordez zuk zeuk saiatu ideia hobea egiteko. - + @@ -589,7 +589,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer wiggle makes the pen to wiggle wildly. - + @@ -601,39 +601,39 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma get slower and smoother pen. - - Kaligrafia adibideak + + Kaligrafia adibideak - + Jadanik tresnaren oinarrizko ezaugarriak ezagutzen dituzunez, benetako kaligrafia sortzeko momentua heldu da. Arte honetan berria bazara, kaligrafiari buruzko liburu on bat bilatu eta ikasi Inkscape-rekin. Atal honek adibide xume batzuk bakarrik erakusten ditu. - + Lehengo eta behin, hizkiak egiteko, gida pare bat sortu beharko dituzu. Estilo oker edo etzanean idaztera bazoaz, okertutako gida batzuk gehitu aurreko bi gidei, adibidez: - - - - - - - - - + + + + + + + + + Ondoren zoom egin giden arteko altuera zure eskuaren mugimendu naturalera egokitu arte, zabalera eta angelua zehaztu, eta hastera goaz! - + @@ -643,184 +643,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Hainbat trikimailu erabilgarri: - - + + Zure eskua tabletean eroso badago, ez mugitu. Horren ordez hizki bakoitza bukatu ondoren ohiala mugitu (Ktrl+geziak teklak) ezkerreko eskuarekin. - - + + Zure azken trazua txarra baldin bada, desegin ezazu (Ktrl+Z). Hala ere, forma egokia bada baina posizioa edo tamaina apur bat tokiz kanpo badaude, hobe da momentu batean Hautatzaile tresna erabiltzea (Zuriunea) eta behar beste mugitze/eskalatzea/biratzea (sagua edo teklatua erabiliz). Bukatzean Zuriunea sakatu berriro Kaligrafia tresnara itzultzeko. - - + + Hitz bat bukatzean, Hautatzaile tresnara joan berriro eta enborren berdintasuna eta hizkien arteko tartea findu. Ez gehiegi landu, hala ere; kaligrafia onek eskuzko idazkeraren irregulartasun apur bat mantentzen dute. Sahiestu hizkiak eta hizkien elementuak kopiatzeko tentazioa; trazu bakoitza originala izan behar du. - + Eta hemen dituzu hizki oso batzuen adibideak: - - - - - - - - - Unicial estiloa - Estilo Karolingioa - Estilo gotikoa - Bâtarde estiloa - - - Italiar estilo loratua - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ondorioak + + + + + + + + + Unicial estiloa + Estilo Karolingioa + Estilo gotikoa + Bâtarde estiloa + + + Italiar estilo loratua + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ondorioak - + Kaligrafia ez da jostagarria bakarrik, espiritualtasun handiko arte bat da, ikusi eta egiten duzun guztiaren ikuspegia alda dezake. Inkscape-ren kaligrafia tresna sarrera xume bat baino ez da. Hala ere jolasteko aproposa da eta benetako diseinuetan erabilgarria izan daiteke. Gozatu! - + diff --git a/share/tutorials/tutorial-calligraphy.fa.svg b/share/tutorials/tutorial-calligraphy.fa.svg index 2ef6cd072..01379774f 100644 --- a/share/tutorials/tutorial-calligraphy.fa.svg +++ b/share/tutorials/tutorial-calligraphy.fa.svg @@ -40,11 +40,11 @@ از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید - + ::CALLIGRAPHY -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + @@ -54,7 +54,7 @@ will help you become acquainted with how that tool works, as well as demonstrate basic techniques of the art of Calligraphy. - + @@ -64,10 +64,10 @@ drag to scroll the page down. For basics of object creation, selectio transformation, see the Basic tutorial in Help > Tutorials. - - History and Styles + + History and Styles - + @@ -78,7 +78,7 @@ beautiful or elegant handwriting. It may sound intimidating, but with a little p anyone can master the basics of this art. - + @@ -92,7 +92,7 @@ Carolingian, Blackletter, etc. Perhaps the most common place where the average p will run across calligraphy today is on wedding invitations. - + @@ -100,8 +100,8 @@ will run across calligraphy today is on wedding invitations. There are three main styles of calligraphy: - - + + @@ -109,8 +109,8 @@ will run across calligraphy today is on wedding invitations. Western or Roman - - + + @@ -118,8 +118,8 @@ will run across calligraphy today is on wedding invitations. Arabic - - + + @@ -127,7 +127,7 @@ will run across calligraphy today is on wedding invitations. Chinese or Oriental - + @@ -137,7 +137,7 @@ a brush (instead of a pen with nib), which is not how our Calligraphy tool currently functions. - + @@ -148,10 +148,10 @@ ruined. Inkscape's Calligraphy tool also enables some techniques which woul possible with a traditional pen-and-ink. - - Hardware + + Hardware - + @@ -162,7 +162,7 @@ some fairly intricate calligraphy, though there will be some difficulty producin sweeping strokes. - + @@ -173,7 +173,7 @@ default because they require configuration. Also, keep in mind that calligraphy quill or pen with nib are also not very sensitive to pressure, unlike a brush. - + @@ -188,7 +188,7 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + @@ -198,10 +198,10 @@ the stroke (see “Thinning†below), so if you are using a mouse, you'll zero this parameter. - - Calligraphy Tool Options + + Calligraphy Tool Options - + @@ -213,10 +213,10 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and drawing tablets). - - Width & Thinning + + Width & Thinning - + @@ -233,7 +233,7 @@ to this mode, use the checkbox on the tool's Preferences page (you can open by double-clicking the tool button). - + @@ -245,9 +245,9 @@ these keys is that they work while you are drawing, so you can change the width of your pen gradually in the middle of the stroke: - width=1, growing.... reaching 47, decreasing... back to 0 - - + width=1, growing.... reaching 47, decreasing... back to 0 + + @@ -260,32 +260,32 @@ thinning of fast strokes. Here are a few examples, all drawn with width=20 and angle=90: - thinning = 0 (uniform width) - thinning = 10 - thinning = 40 - thinning = -20 - thinning = -60 - - - - - - - - - - - - - - - - - - - - - + thinning = 0 (uniform width) + thinning = 10 + thinning = 40 + thinning = -20 + thinning = -60 + + + + + + + + + + + + + + + + + + + + + @@ -294,16 +294,16 @@ angle=90: jerky movements to get strangely naturalistic, neuron-like shapes: - - - - - - - - Angle & Fixation + + + + + + + + Angle & Fixation - + @@ -323,15 +323,15 @@ the angle is determined by the tilt of the pen. - - - - angle = 90 deg - angle = 30 (default) - angle = 0 - angle = -90 deg - - + + + + angle = 90 deg + angle = 30 (default) + angle = 0 + angle = -90 deg + + @@ -340,8 +340,8 @@ the angle is determined by the tilt of the pen. - - + + @@ -355,19 +355,19 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - angle = 30 - angle = 60 - angle = 90 - angle = 0 - angle = 15 - angle = -45 - - - - - - - + angle = 30 + angle = 60 + angle = 90 + angle = 0 + angle = 15 + angle = -45 + + + + + + + @@ -377,7 +377,7 @@ and at its broadest when drawn perpendicular. Positive angles are the most natural and traditional for right-handed calligraphy. - + @@ -394,19 +394,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - angle = 30fixation = 100 - angle = 30fixation = 80 - angle = 30fixation = 0 - - - - - - - - - - + angle = 30fixation = 100 + angle = 30fixation = 80 + angle = 30fixation = 0 + + + + + + + + + + @@ -415,7 +415,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -424,7 +424,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -433,7 +433,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -442,7 +442,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -451,7 +451,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -460,7 +460,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -469,7 +469,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -478,7 +478,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -487,7 +487,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -496,7 +496,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -505,7 +505,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -514,7 +514,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -523,7 +523,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -532,7 +532,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -541,7 +541,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -550,7 +550,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -559,7 +559,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -571,10 +571,10 @@ fixation and zero width contrast (above right), on the other hand, suggest moder serif typefaces such as Helvetica. - - Tremor + + Tremor - + @@ -585,7 +585,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + slow medium fast @@ -599,52 +599,52 @@ splotches. This significantly expands the creative range of the tool. - tremor = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + tremor = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + @@ -654,7 +654,7 @@ than affect its visual output. So there won't be any illustrations in this instead just try them yourself to get a better idea. - + @@ -665,7 +665,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer wiggle makes the pen to wiggle wildly. - + @@ -677,10 +677,10 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma get slower and smoother pen. - - Calligraphy examples + + Calligraphy examples - + @@ -690,7 +690,7 @@ calligraphy. If you are new to this art, get yourself a good calligraphy book an it with Inkscape. This section will show you just a few simple examples. - + @@ -700,15 +700,15 @@ going to write in a slanted or cursive hand, add some slanted guides across the rulers as well, for example: - - - - - - - - - + + + + + + + + + @@ -717,7 +717,7 @@ rulers as well, for example: movement range, adjust width and angle, and off you go! - + @@ -727,24 +727,24 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -752,8 +752,8 @@ stems. Here are some letter elements for the Uncial hand: Several useful tips: - - + + @@ -762,8 +762,8 @@ stems. Here are some letter elements for the Uncial hand: scroll the canvas (Ctrl+arrow keys) with your left hand after finishing each letter. - - + + @@ -775,8 +775,8 @@ nudge/scale/rotate it as needed (using mouse or keys), then press - - + + @@ -787,7 +787,7 @@ irregular handwritten look. Resist the temptation to copy over letters and lett elements; each stroke must be original. - + @@ -795,122 +795,122 @@ elements; each stroke must be original. And here are some complete lettering examples: - - - - - - - - - Unicial hand - Carolingian hand - Gothic hand - Bâtarde hand - - - Flourished Italic hand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Conclusion + + + + + + + + + Unicial hand + Carolingian hand + Gothic hand + Bâtarde hand + + + Flourished Italic hand + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Conclusion - + @@ -921,7 +921,7 @@ calligraphy tool can only serve as a modest introduction. And yet it is very nice to play with and may be useful in real design. Enjoy! - + diff --git a/share/tutorials/tutorial-calligraphy.hu.svg b/share/tutorials/tutorial-calligraphy.hu.svg index b9c96f731..cd17c020c 100644 --- a/share/tutorials/tutorial-calligraphy.hu.svg +++ b/share/tutorials/tutorial-calligraphy.hu.svg @@ -40,104 +40,104 @@ A Ctrl+le nyíl segít a lapozásban - + ::MŰVÉSZI TOLL -bulia byak, buliabyak@users.sf.net és josh andler, scislac@users.sf.net - + + Az Inkscape-ben található remek eszközök egyike a Művészi toll. Most megismerheti a működését, és bemutatunk néhány alapvetÅ‘ kalligrafikus technikát is. - + A Ctrl+nyíl billentyű, az egérgörgÅ‘ vagy az egér középsÅ‘ gombja segít a lapozásban. Ha az objektumkészítés alapjairól, a kijelölésrÅ‘l vagy az átalakításról szeretne olvasni, javasoljuk a Segítség > IsmertetÅ‘k menübÅ‘l a Bevezetést. - - A kalligráfia története és stílusai + + A kalligráfia története és stílusai - + A kalligráfia a szótár meghatározása szerint „szépírás†vagy „szabályos és tetszetÅ‘s betűvetésâ€. Lényegében a kalligráfia a szép vagy elegáns kézírás művészete. Ez riasztóan hangozhat, de egy kis gyakorlással bárki elsajátíthatja ennek a művészetnek az alapjait. - + A kalligráfia legkorábbi formái a barlangrajzokból eredeztethetÅ‘k. Körülbelül 1440-ig, még mielÅ‘tt a könyvnyomtatás elterjedt volna, a könyvek és egyéb iratok kalligráfiával készültek. Az írástudók minden könyv minden egyes példányát kézírással készítették el. A kézíráshoz madártollat használtak, ezzel vitték fel a tintát valamilyen anyagra, például pergamenre vagy velinpapírra. A betűk stílusa koronként változott, például rusztika, karoling, gótikus stb. Manapság a hétköznapi életben talán az esküvÅ‘i meghívókon találkozhatunk leginkább kalligrafikus írással. - + A kalligráfia három fÅ‘ stílusa a következÅ‘: - - + + nyugati vagy római - - + + arab - - + + kínai vagy keleti. - + Ez az írás fÅ‘leg a nyugati kalligráfiával foglalkozik, mivel a másik két stílus az ecsetet részesítette elÅ‘nyben (a hegyezett tollal szemben), azt pedig másképpen kell használni, mint ahogy jelenleg a Művészi tollat lehet. - + A régi írástudókkal szemben nekünk van egy nagy elÅ‘nyünk, mégpedig a Visszavonás parancs: egy rossz mozdulat sose teszi tönkre az egész lapot. Az Inkscape Művészi tolla néhány olyan technikára is lehetÅ‘séget ad, amelyre a hagyományos toll és tinta nem. - - Hardver + + Hardver - + A legjobb eredmény digitális tábla (pl. Wacom) használatával érhetÅ‘ el. De hála a Művészi toll rugalmasságának, pusztán egy egérrel is egész bonyolult kalligráfiák rajzolhatók, habár nagy lendületet igénylÅ‘ vonásokat húzni így meglehetÅ‘sen nehéz. - + Az Inkscape fel tudja dolgozni a nyomáserÅ‘sség- és dÅ‘lésszög-információkat, ha a digitális tábla képes ilyen adatokat szolgáltatni. A programban ezek az érzékenységi funkciók kezdetben ki vannak kapcsolva, mert elsÅ‘ használat elÅ‘tt beállítást igényelnek. Azt se feledje, hogy a kalligráfia nem annyira érzékeny a nyomásra tollheggyel, mint ecsettel. - + @@ -152,91 +152,91 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + A Művészi toll a rajzolás sebességét is érzékelni tudja (további információ a „Keskenyítésâ€-nél késÅ‘bb), ezért ha egeret használ, akkor ez a paraméter valószínűleg nullára állítva felel majd meg Önnek. - - A Művészi toll beállításai + + A Művészi toll beállításai - + Váltson a Művészi toll eszközre a Ctrl+F6 vagy a C megnyomásával, esetleg az ikonjára kattintva az Eszköztáron. Az EszközvezérlÅ‘sávon 8 beállítást láthat: Szélesség és Keskenyítés; Szög és Rögzítettség; Vonalvég; Remegés; Tekeredés és Tömeg. Szintén itt található az a két gomb, melyekkel a nyomás- és dÅ‘lésérzékelés be- és kikapcsolható (digitális táblákhoz). - - Szélesség és Keskenyítés + + Szélesség és Keskenyítés - + Ez a két beállítás vezérli a tollhegy szélességét. A szélesség értéke 1 és 100 között lehet, a mértékegysége pedig (alapértelmezetten) a rajzablak méretétÅ‘l függÅ‘en változik, de a nagyítástól független. Ez azért van, mert a természetes „mértékegység†a kalligráfiában a kézmozgáshoz igazodik. Ez a módszer biztosítja, hogy a tollhegy szélessége állandó arányban maradjon a „rajztáblávalâ€, szemben egy tényleges mértékegységgel, amely a tollhegyszélességet a nagyítástól tenné függÅ‘vé. Mindazonáltal ez a viselkedés nem kötelezÅ‘, így meg is változtatható. Ha valaki a nagyítástól eltekintve abszolút mértékegységet szeretne, ezt az Inkscape-beállítások ablakban (megnyitható dupla kattintással az eszköz gombján) tudathatja a programmal. - + Mivel a tollhegy szélességét gyakran szokás változtatni, erre az EszközvezérlÅ‘sávon kívül más mód is van. Használhatja a bal vagy a jobb kurzormozgató billentyűt, megfelelÅ‘ digitális táblával pedig a nyomásérzékenységet. Az a legjobb ezekben a billentyűkben, hogy rajzolás közben is működnek, így fokozatosan változtathatja a tollhegy szélességét egy tollvonás közbensÅ‘ részén is: - szélesség=1, növelés… 47-ig, csökkentés… egészen 0-ig - - + szélesség=1, növelés… 47-ig, csökkentés… egészen 0-ig + + A tollhegy szélessége a keskenyítés által a tollvonás sebességétÅ‘l is függ. Ennek a paraméternek −100 és 100 között lehet az értéke; nulla esetén a szélesség független a sebességtÅ‘l, pozitív érték esetén a gyorsulás vékonyít, negatív értéknél vastagít. Az alapértelmezett 10 gyors tollvonásoknál mérsékelt vékonyítást okoz. Bemutatunk néhány példát, mindegyiknél 20 volt a Szélesség értéke, a Szögé pedig 90: - keskenyítés = 0 (állandó szélesség) - keskenyítés = 10 - keskenyítés = 40 - keskenyítés = −20 - keskenyítés = −60 - - - - - - - - - - - - - - - - - - - - - + keskenyítés = 0 (állandó szélesség) + keskenyítés = 10 + keskenyítés = 40 + keskenyítés = −20 + keskenyítés = −60 + + + + + + + + + + + + + + + + + + + + + Szórakozásképpen beállíthatja a Szélességet és a Keskenyítést is 100-ra (a maximumra), és hirtelen mozdulatokkal rajzolva ilyen különösképpen természetesnek tűnÅ‘, neuronszerű formákhoz juthat: - - - - - - - - Szög és Rögzítettség + + + + + + + + Szög és Rögzítettség - + @@ -251,15 +251,15 @@ now on, Inkscape will remember those settings on startup. - - - - szög = 90° - szög = 30 (alapértelmezett) - szög = 0 - szög = −90° - - + + + + szög = 90° + szög = 30 (alapértelmezett) + szög = 0 + szög = −90° + + @@ -268,8 +268,8 @@ now on, Inkscape will remember those settings on startup. - - + + @@ -283,26 +283,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - szög = 30 - szög = 60 - szög = 90 - szög = 0 - szög = 15 - szög = −45 - - - - - - - + szög = 30 + szög = 60 + szög = 90 + szög = 0 + szög = 15 + szög = −45 + + + + + + + Amint láthatja, a vonal ott a legvékonyabb, ahol a toll szögével párhuzamosan fut, és ott a legvastagabb, ahol a toll szögére merÅ‘legesen. A pozitív szögek természetesebb hatást keltenek, és a jobbkezes kalligráfiában hagyományosan ezek fordulnak elÅ‘. - + @@ -319,19 +319,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - szög = 30rögzítettség = 100 - szög = 30rögzítettség = 80 - szög = 30rögzítettség = 0 - - - - - - - - - - + szög = 30rögzítettség = 100 + szög = 30rögzítettség = 80 + szög = 30rögzítettség = 0 + + + + + + + + + + @@ -340,7 +340,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -349,7 +349,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -358,7 +358,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -367,7 +367,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -376,7 +376,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -385,7 +385,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -394,7 +394,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -403,7 +403,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -412,7 +412,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -421,7 +421,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -430,7 +430,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -439,7 +439,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -448,7 +448,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -457,7 +457,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -466,7 +466,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -475,7 +475,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -484,17 +484,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + Tipográfiai szempontból a legnagyobb rögzítettségbÅ‘l adódó legnagyobb szélességeltérés (fent balra) az antik, talpas betűképekre jellemzÅ‘, mint például a Times vagy a Bodoni (mivel ezek történetileg a rögzített tollszögű kalligráfia utánzásából jöttek létre). A nulla rögzítettség és nulla eltérés (jobbra fent) pedig a modern, groteszk betűképekkel azonosítható, mint például a Helvetica. - - Remegés + + Remegés - + @@ -505,7 +505,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + lassú közepes gyors @@ -519,105 +519,105 @@ splotches. This significantly expands the creative range of the tool. - remegés = 0 - remegés = 10 - remegés = 30 - remegés = 50 - remegés = 70 - remegés = 90 - remegés = 20 - remegés = 40 - remegés = 60 - remegés = 80 - remegés = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Tekeredés és Tömeg + remegés = 0 + remegés = 10 + remegés = 30 + remegés = 50 + remegés = 70 + remegés = 90 + remegés = 20 + remegés = 40 + remegés = 60 + remegés = 80 + remegés = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Tekeredés és Tömeg - + A szélességgel és a szöggel szemben ez a két paraméter a látható hatás helyett az eszköz „érzetkeltését†alakítja. Ezért nem is talál illusztrációt ebben a részben; inkább próbálja ki, hogy jobban megértse. - + A Tekeredés a papír tollra gyakorolt ellenállását szabályozza. Alapértelmezett értéke egyben a lehetÅ‘ legkisebb (0), növelve a papír „csúszósabb†lesz: nagy tömegnél a toll hajlamos lesz éles fordulóknál túlcsúszni; magas tekeredés mellett nulla tömeg a toll tekergÅ‘zését vadabbá teszi. - + A fizikában a tömeg a tehetetlenség oka; az Inkscape Művészi tolla esetében a tömeget növelve a toll egyre inkább lemarad az egérmutató mozgásáról, illetve egyre simábbak lesznek a tollvonások éles fordulói és hirtelen megugrásai. Alapesetben a Tömeg nagyon kicsi (2), így az eszköz gyors és érzékeny, de növelheti az értéket, ha lassabb és egyenletesebb működést szeretne. - - Kalligráfia a gyakorlatban + + Kalligráfia a gyakorlatban - + Most, hogy megismerte az eszköz alapvetÅ‘ képességeit, megpróbálhat elkészíteni néhány valódi kalligráfiát. Ha még csak most kezdett ezzel a művészettel foglalkozni, szerezzen egy jó könyvet a témáról, és tanuljon az Inkscape segítségével. Ez a rész csak néhány egyszerű példát fog bemutatni: - + MindenekelÅ‘tt készítenie kell egy vezetÅ‘vonalpárt, ami segít a betűk elkészítésében. Ha döntött vagy dÅ‘lt betűs írásra gondol, akkor néhány ferde vezetÅ‘vonalra is szüksége lesz, keresztben a két vízszintessel, valahogy így: - - - - - - - - - + + + + + + + + + Ezután a nagyítást állítsa olyanra, hogy a vezetÅ‘k közötti magasság megfeleljen a természetes kézmozgásának. Adja meg a Szélességet és a Szöget, és már neki is foghat a rajzolásnak. - + @@ -627,184 +627,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Hasznos tanácsok: - - + + Ha a digitális táblával megtalálta a kényelmes kézpozíciót, akkor egy-egy betű elkészültekor ne ezt a kezét mozgassa, inkább a vásznat görgesse (a Ctrl+nyíl billentyűkkel). - - + + Ha a legutóbbi tollvonása nem sikerült, akkor egyszerűen vonja vissza (Ctrl+Z). Viszont ha a vonás alakja jó, csak a pozíciója vagy a mérete lett kissé elhibázott, akkor célszerűbb ideiglenesen a KijelölÅ‘ eszközre váltva (Szóköz) a szükséges mértékben mozgatni, átméretezni vagy forgatni. Ezután a Szóköz ismételt megnyomásával újra a Művészi tollat használhatja. - - + + Ha elkészült egy szó, váltson ismét a KijelölÅ‘ eszközre, és igazítsa egyenletesre a betűszárakat és a betűközöket. De ne essen túlzásokba; a jó kalligráfiának meg kell Å‘riznie valamit az eredeti kézírások szabálytalanságaiból. Ãlljon ellen a kísértésnek, hogy másolással jusson újabb betűkhöz vagy betűrészekhez; az a jó, ha minden tollvonás egyedi. - + És végül álljon itt néhány példa kész betűkre: - - - - - - - - - Unciális írás - Karoling írás - Gótikus írás - Basztard írás - - - Cifrázott, dÅ‘lt betűs írás - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zárszó + + + + + + + + + Unciális írás + Karoling írás + Gótikus írás + Basztard írás + + + Cifrázott, dÅ‘lt betűs írás + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Zárszó - + A kalligráfia nem csupán szórakoztató; mélyen spirituális művészet, mely formálhatja a szemléletmódját bármivel kapcsolatban, amit tesz vagy lát. Az Inkscape Művészi tolla csak szerény bevezetést adhat ebbe a művészetbe. De mégis nagyon jó vele eljátszani, és hasznára lehet a munkában is. Kellemes idÅ‘töltést! - + diff --git a/share/tutorials/tutorial-calligraphy.id.svg b/share/tutorials/tutorial-calligraphy.id.svg index 4862423e0..35980d1cd 100644 --- a/share/tutorials/tutorial-calligraphy.id.svg +++ b/share/tutorials/tutorial-calligraphy.id.svg @@ -40,104 +40,104 @@ Gunakan Ctrl+panah bawah untuk menggulung - + ::KALIGRAFI -bulia byak, buliabyak@users.sf.net dan josh andler, scislac@users.sf.net - + + Salah satu dari banyak alat hebat yang disediakan dalam Inkscape adalah Calligraphy (Kaligrafi) tool. Tutorial kali ini akan membantu anda terbiasa dengan bagaimana tool tersebut bekerja, sekaligus mendemonstrasikan beberapa tehnik dasar dari seni kaligrafi. - + Gunakan Ctrl+panah, Roda tetikus, atau seret dengan tombol tengah untuk menggulung halaman ke bawah. Untuk dasar membuat obyek, seleksi, dan transformasi, lihatlah tutorial Dasar pada Help > Tutorials. - - Sejarah dan Gaya + + Sejarah dan Gaya - + Berdasarkan penjelasan kamus, calligraphy alias Kaligrafi artinya â€tulisan indah†atau â€cara menggunakan pena yang baik dan eleganâ€. Intinya, kaligrafi adalah seni membuat tulisan tangan yang indah dan elegan. Mungkin terdengar mengintimidasi, tapi dengan sedikit latiah, semua bisa menguasai dasar dari seni ini. - + Bentuk paling dasar dari kaligrafi ada sejak jaman manusia gua menulis di dinding. Sampai sekitar 1440 masehi, sebelum percetakan ada, kaligrafi adalah cara bagaimana buku dan publikasi lainnya dibuat. Gaya huruf yang digunakan masa itu termasuk Rustic, Carolingian, Blackletter, dan lainnya. Mungkin yang paling mudah ditemukan sekarang adalah pada undangan pernikahan. - + Terdapat tiga gaya utama dari kaligrafi: - - + + Gaya Barat atau Roman - - + + Arabik - - + + Cina atau Oriental - + Tutorial kali ini berfokus pada kaligrafi Gaya Barat, dikarenakan dua yang lain biasanya harus menggunakan kuas (bukan pena), yang mana bukanlah bagaimana Calligraphy Tool saat ini bekerja. - + Salah satu keuntungan kita dibanding masa lalu adalah adanya perintah Undo: Jika anda salah, seluruh halaman tidak ikut rusak. Calligraphy tool juga membuat kita bisa melakukan beberapa tehnik yang tidak mungkin dilakukan dengan pena dan tinta. - - Perangkat Keras + + Perangkat Keras - + Anda bisa mendapatkan hasil terbaik jika anda menggunakan tablet and pen (mis. Wacom). Terimakasih terhadap fleksibilitas tool kami, bahkan dengan tetikus saja, anda bisa menghasilkan kaligrafi yang cukup indah, walaupun akan sedikit susah jika ingin menghasilkan garis sapuan secara cepat. - + Inkscape mampu menggunakan pressure sensitivity dan tilt sensitivity dari sebuah tablet pen yang mendukung fitur tersebut. Fungsi/fitur tersebut dinonaktifkan secara standar karena mereka membutuhkan konfigurasi lebih lanjut. Juga, selalu ingat bahwa kaligrafi dengan pena bulu atau pena biasa tidak terlalu sensitif terhadap tekanan (pressure sensitivty), tidak seperti kuas. - + @@ -152,91 +152,91 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + Pena kaligrafi inkscape bisa diatur untuk sensitif terhadap velocity dari sapuan (lihat “thinning-perampingan†dibawah), jadi, jika anda menggunakan tetikus, kemungkinan anda ingin menggunakan nol untuk parameter ini. - - Opsi Calligraphy Tool + + Opsi Calligraphy Tool - + Berpindahlah ke Calligraphy Tool dengan menekan Ctrl+F6, tombol C, atau dengan klik pada tombol toolbarnya. Pada toolbar atas, anda bisa melihat bahwa terdapat 8 opsi/pilihan: Width & Thinning; Angle & Fixation; Caps; Tremor, Wiggle & Mass. Terdapat juga dua tombol untuk menyalakan sensitivitas Pressure dan Tilt pada tablet (untuk tablet gambar). - - Width & Thinning + + Width & Thinning - + Sepasang pilihan ini mengatur width (lebar) dari pena anda. Lebar ini bisa bervariasi dari 1 hingga 100 (standar) dan ukurannya dalam satuan relatif terhadap besar dari jendela editan anda, tetapi independen terhadap zum. Ini dikarenakan “satuan dari pengukuran“ dalam kaligrafi adalah daerah pergerakan tangan anda, dengan demikian, akan lebih baik jika lebar ujung pena anda rasionya konstan terhadap ukuran dari “papan gambar“ dan bukannya ukuran nyata yang berpatokan pada zum. Meskipun begitu, perlakuan ini adalah opsional, jadi bisa saja dirubah untuk mereka yang lebih memilih berpatokan pada zum. Untuk berpindah ke mode ini, gunakan kotak centang pada halaman Preferences tool yang bersangkutan (buka dengan klik ganda pada tombol tool). - + Dikarenakan lebar pena sering berubah, anda bisa mengaturnya tanpa harus lewat toolbar, dengan tombol panah kiri dan panah kanan atau lewat tablet yang mendukung fungsi pressure sensitivity. Hal paling bagus dari tombol ini adalah mereka bisa digunakan saat bekerja, jadi anda bisa merubah lebar pena anda saat anda membuat sapuan: - lebar=1, membesar.... menuju 47, mengecil... kembali ke 0 - - + lebar=1, membesar.... menuju 47, mengecil... kembali ke 0 + + Lebar pena juga bisa bergantung pada velositas, yang dikontrol oleh parameter thinning (perampingan). Parameter ini bisa bernilai -100 sampai dengan 100; nol berarti lebarnya akan tetap pada velositas, positif membuat semakin cepat sapuan dilakukan hasilnya semakin ramping, negatif akan membuatnya lebih lebar. Nilai bawaannya yaitu 10 berarti sedikit perampingan pada sapuan cepat. Berikut adalah beberapa contoh, semua digambar dengan lebar=20 dan sudut=90: - perampingan = 0 (lebar seragam) - perampingan = 10 - perampingan = 40 - perampingan = -20 - perampingan = -60 - - - - - - - - - - - - - - - - - - - - - + perampingan = 0 (lebar seragam) + perampingan = 10 + perampingan = 40 + perampingan = -20 + perampingan = -60 + + + + + + + + + + + + + + + + + + + + + Untuk bersenang-senang, aturlah Width (lebar) dan Thinning (perampingan) masing masing 100 (maksimum) dan cobalah menggambar dengan gerakan mengocok untuk mendapatkan bentuk serupa neuron yang tampak aneh tapi terlihat natural: - - - - - - - - Sudut & Fixation + + + + + + + + Sudut & Fixation - + @@ -251,15 +251,15 @@ now on, Inkscape will remember those settings on startup. - - - - sudut = 90 derajat - sudut = 30 (bawaan) - sudut = 0 - sudut = -90 derajat - - + + + + sudut = 90 derajat + sudut = 30 (bawaan) + sudut = 0 + sudut = -90 derajat + + @@ -268,8 +268,8 @@ now on, Inkscape will remember those settings on startup. - - + + @@ -283,26 +283,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - sudut = 30 - sudut = 60 - sudut = 90 - sudut = 0 - sudut = 15 - sudut = -45 - - - - - - - + sudut = 30 + sudut = 60 + sudut = 90 + sudut = 0 + sudut = 15 + sudut = -45 + + + + + + + Seperti yang bisa anda lihat, sapuan paling ramping adalah jika digambar paralel terhadap sudutnya, dan lebar jika sebaliknya. Sudut positif adalah yang paling natural dan tradisional untuk kaligrafi tangan kanan. - + @@ -319,19 +319,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - sudut = 30fixation = 100 - sudut = 30fixation = 80 - sudut = 30fixation = 0 - - - - - - - - - - + sudut = 30fixation = 100 + sudut = 30fixation = 80 + sudut = 30fixation = 0 + + + + + + + + + + @@ -340,7 +340,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -349,7 +349,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -358,7 +358,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -367,7 +367,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -376,7 +376,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -385,7 +385,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -394,7 +394,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -403,7 +403,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -412,7 +412,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -421,7 +421,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -430,7 +430,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -439,7 +439,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -448,7 +448,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -457,7 +457,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -466,7 +466,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -475,7 +475,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -484,17 +484,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + Mudahnya, fixation maksimum dan stroke width (lebar) maksimum (kiri atas) adalah fitur dari typefaces antique serif, seperti Times atau Bodoni (dikarenakan sejarahnya mereka adalah imitasi dari kaligrafi pena tetap). Fixation nol dan kontras lebar nol (kanan atas), sebaliknya, lebih berupa sans serif moderen seperti Helvatica. - - Tremor + + Tremor - + @@ -505,7 +505,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + pelan sedang cepat @@ -519,105 +519,105 @@ splotches. This significantly expands the creative range of the tool. - tremor = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + tremor = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + Tidak seperti lebar dan sudut, dua parameter terakhir ini mendefinisikan bagaimana tool tersebut “lebih berasa“. Dengan demikian, tidak akan ada ilustrasi pada bagian ini; cobalah sendiri untuk memahami. - + Wiggle adalah resistan kertas terhadap pergerakan pena. Bawaannya adalah minimum (0), dan menaikkan parameter ini membuat kertas semakin “licin“: jika massnya besar, pena akan lebih sering selip pada tikungan tajam; jika mass nol, wiggle yang tinggi akan membuat pena bergerak lebih liar. - + Dalam fisika, mass adalah penyebab inertia; semakin besar mass dari tool tersebut, semakin lambar responnya terhadap tetikus dan semakin halus tikungan dan sapuan kasar yang anda buat. Nilai bawaanya cukup kecil (2) sehingga tool lebih cepat dan responsif, tapi tentu anda bisa menaikkannya untuk mendapatkan pen yang lebih halus dan lambat. - - Contoh kaligrafi + + Contoh kaligrafi - + Kini anda telah mengetahui kemampuan dasar dari tool tersebut, anda bisa mencoba membuat kaligrafi. Jika anda baru terhadap seni ini, carilah buku kaligrafi yang bagus dan pelajarilah dengan Inkscape. Bagian ini akan menampilkan beberapa contoh sederhana. - + Pertama, anda perlu membuat sepasang penggaris sebagai penunjuk. Jika anda akan menulis dengan gaya tulisan indah misalnya, tambahkan beberapa guide slanted diantara dua penggaris itu, contohnya: - - - - - - - - - + + + + + + + + + Kemudian zum sehingga tinggi diantara penggaris tersebut sesuai dengan daerah pergerakan tangan natural, atur lebar dan sudutnya, dan silahkan! - + @@ -627,184 +627,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Beberapa tips berguna: - - + + Jika tangan anda sudah nyaman pada tablet, jangan gerakkan lagi. Gulung saja kanvasnya (Ctrl+panah) dengan tangan kiri anda setiap menyelesaikan tiap huruf. - - + + Jika sapuan terakhir anda jelek, undo saja (Ctrl+Z). Meskipun demikian, jika bentuknya bagus tetapi posisi atau ukurannya salah, akan lebih baik untuk pindah ke Selector (Spasi) dan atur ulang dengan menggunakan tetikus atau tombol, kemudian tekan lagi Spasi untuk kembali ke tool Calligraphy. - - + + Setelah menyelesaikan sehuruf, berpindahlah ke Selector lagi dan atur keseragaman batangnya dan jarak perhurufnya. Jangan berlebihan; kaligrafi yang baik harus memiliki tampilan yang menyerupai tulisan tangan. Kalau bisa jangan menggandakan kemudian menempel huruf atau elemen huruf; setiap sapuan haruslah asli. - + Dan berikut adalah beberapa contoh: - - - - - - - - - Unicial hand - Carolingian hand - Gothic hand - Bâtarde hand - - - Flourished Italic hand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Akhir + + + + + + + + + Unicial hand + Carolingian hand + Gothic hand + Bâtarde hand + + + Flourished Italic hand + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Akhir - + Kaligrafi bukan hanya untuk bersenang-senang; Ia adalah seni spiritual yang dalam dan bisa merubah cara pandang anda. Tool kaligrafi inkscape hanyalah perkenalan awal. Meskipun begitu, ia sangat bagus untuk bermain dan tetap berguna pada desain nyata. Selamat menikmati! - + diff --git a/share/tutorials/tutorial-calligraphy.ja.svg b/share/tutorials/tutorial-calligraphy.ja.svg index 8f818c9b0..e1b6cce33 100644 --- a/share/tutorials/tutorial-calligraphy.ja.svg +++ b/share/tutorials/tutorial-calligraphy.ja.svg @@ -40,104 +40,104 @@ Use Ctrl+down arrow to scroll - + ::カリグラフィ -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + Inkscape ã§ä½¿ãˆã‚‹ã‚‚ã£ã¨ã‚‚素晴らã—ã„ツールã®ä¸€ã¤ãŒã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã§ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§ã¯ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ãŒã©ã®ã‚ˆã†ã«å‹•ãã‹ã«ã¤ã„ã¦èª¬æ˜Žã—ã€ã‚«ãƒªã‚°ãƒ©ãƒ•ィアートã®åŸºæœ¬çš„ãªãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚’紹介ã—ã¾ã™ã€‚ - + Ctrl+矢å°ã€ãƒžã‚¦ã‚¹ãƒ›ã‚¤ãƒ¼ãƒ«ã€ã¾ãŸã¯ 中央ボタンを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚° を使ã£ã¦ãƒšãƒ¼ã‚¸ã‚’スクロールã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚基本的ãªã‚ªãƒ–ジェクトã®ä½œæˆã€é¸æŠžã€å¤‰å½¢ã«ã¤ã„ã¦ã¯ã€ ヘルプ > ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« ã‹ã‚‰åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’ã”覧ãã ã•ã„。 - - æ­´å²ã¨æ§˜å¼ + + æ­´å²ã¨æ§˜å¼ - + 辞書ã«ã‚ˆã‚‹ã¨ã€ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ ã¨ã¯ã€Œç¾Žã—ã„æ–‡å­—ã€ã‚ã‚‹ã„ã¯ã€Œç¾Žã—ãæ°—å“ã‚る書法ã€ã‚’æ„味ã—ã¾ã™ã€‚本æ¥ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã¨ã¯ã€ç¾Žã—ã„ã€ã‚ã‚‹ã„ã¯æ°—å“ã‚る手書ã筆跡を作æˆã™ã‚‹èŠ¸è¡“ã®ã“ã¨ã§ã™ã€‚ãれã¯å°‘々堅苦ã—ãã†ãªéŸ¿ãã«èžã“ãˆã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€å°‘ã—ã®ç·´ç¿’ã§èª°ã§ã‚‚ã“ã®èŠ¸è¡“ã®åŸºæœ¬ã‚’ç¿’å¾—ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - + 最å¤ã®ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã¨ã„ãˆã°æ´žçªŸç”»ã«ã¾ã§é¡ã‚Šã¾ã™ã€‚å°åˆ·æ©ŸãŒç™»å ´ã™ã‚‹ä»¥å‰ã€ãŠãŠã‚ˆã紀元 1440 å¹´é ƒã¾ã§ã€ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã¯æ›¸ç±ã‚„ãã®ä»–ã®å‡ºç‰ˆç‰©ã‚’作æˆã™ã‚‹æ‰‹æ®µã§ã—ãŸã€‚写字生ã¯ã™ã¹ã¦ã®æ›¸ç±ã‚ã‚‹ã„ã¯å‡ºç‰ˆç‰©ã®ã€ã™ã¹ã¦ã®è¤‡è£½ã‚’ãれãžã‚Œæ‰‹æ›¸ãã§ä½œæˆã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚手書ãã¯ç¾Šçš®ç´™ã‚„ベラムã®ä¸Šã«ç¾½ãƒšãƒ³ã¨ã‚¤ãƒ³ã‚¯ã‚’使用ã—ã¦è¡Œã‚れã¾ã—ãŸã€‚時代を経ã¦ä½¿ç”¨ã•れã¦ã„る書体ã«ã¯ã€ãƒ©ã‚¹ãƒ†ã‚£ãƒƒã‚¯ä½“ã€ã‚«ãƒ­ãƒªãƒ³ã‚°ä½“ã€ãƒ–ラックレター体ãªã©ãŒã‚りã¾ã™ã€‚ãŠãらãã€ã“ã‚“ã«ã¡ä¸€èˆ¬ã®äººã€…ãŒã‚«ãƒªã‚°ãƒ©ãƒ•ィを目ã«ã™ã‚‹æœ€ã‚‚一般的ãªã‚‚ã®ã¨è¨€ãˆã°çµå©šå¼ã®æ‹›å¾…状ã§ã—ょã†ã‹ã€‚ - + カリグラフィã«ã¯ã€ä¸»ã« 3 ã¤ã®ã‚¹ã‚¿ã‚¤ãƒ«ãŒã‚りã¾ã™: - - + + 西洋ã¾ãŸã¯ãƒ­ãƒ¼ãƒžé¢¨ - - + + アラビア風 - - + + 中国ã¾ãŸã¯æ±æ´‹é¢¨ - + ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§ã¯ä¸»ã«è¥¿æ´‹é¢¨ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã«ç„¦ç‚¹ã‚’当ã¦ã¦ã„ã¾ã™ã€‚ä»–ã® 2 ã¤ã«ã¤ã„ã¦ã¯ã€ç¾åœ¨ã®ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ãƒ„ãƒ¼ãƒ«ã®æ©Ÿèƒ½ã‚ˆã‚Šã‚‚ã€ã©ã¡ã‚‰ã‹ã¨ã„ãˆã° (ペンã§ã¯ãªã) ブラシを使ã†ã¹ãã§ã—ょã†ã€‚ - + éŽåŽ»ã®å†™å­—生ãŸã¡ã«å¯¾ã—ç§ãŸã¡ãŒã‚‚ã¤åœ§å€’çš„ãªã‚¢ãƒ‰ãƒãƒ³ãƒ†ãƒ¼ã‚¸ãŒ å…ƒã«æˆ»ã™ コマンドã®å­˜åœ¨ã§ã™ã€‚ã‚‚ã—æ›¸ãæã˜ãŸã¨ã—ã¦ã‚‚ãã®ãƒšãƒ¼ã‚¸ãŒå°ç„¡ã—ã«ãªã£ãŸã‚Šã—ã¾ã›ã‚“。Inkscape ã®ã‚«ãƒªã‚°ãƒ©ãƒ•ィツールã¯ã¾ãŸã€å¤å…¸çš„ãªãƒšãƒ³ã¨ã‚¤ãƒ³ã‚¯ã§ã¯ä¸å¯èƒ½ãªãƒ†ã‚¯ãƒ‹ãƒƒã‚¯ã‚‚使ãˆã¾ã™ã€‚ - - ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ + + ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ - + ãŸã¨ãˆã° Wacom ãªã©ã® ペンタブレット を使ãˆã°æœ€ã‚‚よã„çµæžœãŒå¾—られるã§ã—ょã†ã€‚ã“ã®ãƒ„ールã«ã¯æŸ”軟性ãŒã‚ã‚‹ã®ã§ã€ãƒžã‚¦ã‚¹ã ã‘ã§ã‚‚ã€ç´ æ—©ã曲線を引ãã“ã¨ã«ã¯è‹¥å¹²ã®å›°é›£ãŒã‚りã¾ã™ãŒã€ã‹ãªã‚Šè¤‡é›‘ãªã‚«ãƒªã‚°ãƒ©ãƒ•ィを書ãã“ã¨ãŒã§ãã¾ã™ã€‚ - + Inkscape ã¯ã‚¿ãƒ–レットペンãŒã‚µãƒãƒ¼ãƒˆã™ã‚‹ 筆圧検知 ã‚„ å‚¾ãæ¤œçŸ¥ 機能ã«å¯¾å¿œã—ã¦ã„ã¾ã™ã€‚設定ãŒå¿…è¦ã§ã‚ã‚‹ãŸã‚ã€æ¤œçŸ¥æ©Ÿèƒ½ã¯ãƒ‡ãƒ•ォルトã§ã¯ç„¡åйã«ãªã£ã¦ã„ã¾ã™ã€‚ã¾ãŸã€ãƒšãƒ³ã§ã®ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã¯ã€ãƒ–ラシã¨ã¯ç•°ãªã‚Šç­†åœ§æ¤œçŸ¥ã«æ•感ã§ã¯ãªã„ã“ã¨ã‚‚覚ãˆã¦ãŠã„ã¦ãã ã•ã„。 - + @@ -152,91 +152,91 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + Inkscape カリグラフィペンã¯ã€ãƒšãƒ³ã®å‹•ã 速度 を検知ã§ãã¾ã™ (後述ã®ã€Œå¹…変化ã€ã‚’å‚ç…§ã—ã¦ãã ã•ã„)。マウスを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã“ã®ãƒ‘ラメーターをゼロã«ã—ãŸæ–¹ãŒã„ã„ã‹ã‚‚ã—れã¾ã›ã‚“。 - - カリグラフィツールオプション + + カリグラフィツールオプション - + Ctrl+F6 キーを押ã™ã€C キーを押ã™ã€ã‚‚ã—ãã¯ãƒ„ールãƒãƒ¼ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã‚«ãƒªã‚°ãƒ©ãƒ•ィツールã«åˆ‡ã‚Šæ›¿ãˆã¦ãã ã•ã„。上ã®ãƒ„ールコントロールãƒãƒ¼ã«ã¯ 7 ã¤ã®ã‚ªãƒ—ション (å¹…ã¨å¹…変化ã€è§’度ã¨å›ºå®šåº¦ã€éœ‡ãˆã€ãŠã‚ˆã³ã†ã­ã‚Šã¨è³ªé‡) ãŒã‚りã¾ã™ã€‚ã¾ãŸã‚¿ãƒ–レットã§ã®æç”»ç”¨ã«ã€ã‚¿ãƒ–レットã®ç­†åœ§ãŠã‚ˆã³å‚¾ã検知をオン/オフã™ã‚‹ 2 ã¤ã®ãƒœã‚¿ãƒ³ãŒã‚りã¾ã™ã€‚ - - å¹…ã¨å¹…変化 + + å¹…ã¨å¹…変化 - + ã“ã®ã‚ªãƒ—ションã®ãƒšã‚¢ã¯ã€ãƒšãƒ³ã® å¹… を制御ã—ã¾ã™ã€‚å¹…ã®å€¤ã¯ 1 ã‹ã‚‰ 100 ãŒæŒ‡å®šã§ãã¾ã™ã€‚å˜ä½ã¯ãƒ‡ãƒ•ォルトã§ã¯ç·¨é›†ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‚µã‚¤ã‚ºã¨ã®ç›¸å¯¾å€¤ã¨ãªã‚Šã¾ã™ãŒã€ã‚ºãƒ¼ãƒ ãƒ¬ãƒ™ãƒ«ã«ã¯å½±éŸ¿ã•れã¾ã›ã‚“。ã“れã«ã¯ç†ç”±ãŒã‚りã€ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã«ãŠã‘る自然ãªã€Œæ¸¬å®šå˜ä½ã€ã¯æ›¸ãæ‰‹ã®æ‰‹ã®å‹•ãã®ç¯„囲ã§ã‚りã€ãƒšãƒ³å…ˆã®å¹…ã¯æ›¸ã手ã®ã€Œç”»æ¿ã€ã«å¯¾ã™ã‚‹ä¸€å®šæ¯”ã§ã‚ã‚‹æ–¹ãŒã€ã‚ºãƒ¼ãƒ ãƒ¬ãƒ™ãƒ«ã«ä¾å­˜ã—ãŸç¾å®Ÿã®å˜ä½ã‚ˆã‚Šã‚‚便利ã ã‹ã‚‰ã§ã™ã€‚ - + ペン幅ã¯ã¡ã‚‡ãã¡ã‚‡ã変更ã•れるもã®ãªã®ã§ã€ãƒ„ールãƒãƒ¼ã‚’使ã‚ãšã«èª¿æ•´ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å·¦ ãŠã‚ˆã³ å³ çŸ¢å°ã‚­ãƒ¼ã‹ã€ã‚¿ãƒ–レットã®ç­†åœ§æ¤œçŸ¥æ©Ÿèƒ½ã‚’使ã„ã¾ã™ã€‚ã“れらキーã®ã‚‚ã£ã¨ã‚‚優れã¦ã„ã‚‹ç‚¹ã¯æç”»ä¸­ã«ã‚‚動作ã™ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚ã¤ã¾ã‚Šã€æ›¸ã„ã¦ã„る最中ã«å¾ã€…ã«ãƒšãƒ³ã®å¹…を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - å¹…=1, 増加.... å¹…=47, 減少... å¹…=0 ã«æˆ»ã‚‹ - - + å¹…=1, 増加.... å¹…=47, 減少... å¹…=0 ã«æˆ»ã‚‹ + + 幅変化 パラメーターã«ã‚ˆã£ã¦ã€ãƒšãƒ³ã®å¹…ã¯é€Ÿåº¦ã«ã‚‚ä¾å­˜ã—ã¾ã™ã€‚ã“ã®ãƒ‘ラメーター㯠-100 ã‹ã‚‰ 100 ã¾ã§ã®å€¤ã‚’ã¨ã‚Šã€ã‚¼ãƒ­ã«ã™ã‚‹ã¨å¹…ã¯é€Ÿåº¦ã®å½±éŸ¿ã‚’å—ã‘ãšã«ä¸€å®šã«ãªã‚Šã€æ­£æ•°ãªã‚‰é€Ÿåº¦ã«æ¯”例ã—ã¦ç´°ããªã‚Šã€è² æ•°ãªã‚‰é€Ÿåº¦ã«æ¯”例ã—ã¦å¤ªããªã‚Šã¾ã™ã€‚デフォルト㮠10 ã¯é€Ÿã„ç­†ã®å‹•ãã§ç©ã‚„ã‹ã«ç´°ããªã‚Šã¾ã™ã€‚以下ã«ã„ãã¤ã‹ã®ä¾‹ã‚’ã‚ã’ã¾ã™ã€‚ã™ã¹ã¦å¹…=20ã€è§’度=90ã§æç”»ã•れã¦ã„ã¾ã™: - 幅変化 = 0 (一定幅) - 幅変化 = 10 - 幅変化 = 40 - 幅変化 = -20 - 幅変化 = -60 - - - - - - - - - - - - - - - - - - - - - + 幅変化 = 0 (一定幅) + 幅変化 = 10 + 幅変化 = 40 + 幅変化 = -20 + 幅変化 = -60 + + + + + + + + + + + + + + + + + + + + + é¢ç™½åŠåˆ†ã«ã€å¹…ã¨å¹…変化ã®ä¸¡æ–¹ã‚’ 100 (最大) ã«è¨­å®šã—ã€ãã¾ãれã«ãƒšãƒ³ã‚’å‹•ã‹ã—æã„ã¦ã¿ã‚‹ã¨ã€å¦™ã«è‡ªç„¶ãªã€ç¥žçµŒç´°èƒžã®ã‚ˆã†ãªã‚·ã‚§ã‚¤ãƒ—ãŒã§ãã‚ãŒã‚Šã¾ã—ãŸ: - - - - - - - - 角度ã¨å›ºå®šåº¦ + + + + + + + + 角度ã¨å›ºå®šåº¦ - + @@ -251,15 +251,15 @@ now on, Inkscape will remember those settings on startup. - - - - 角度 = 90° - 角度 = 30 (デフォルト) - 角度 = 0 - 角度 = -90° - - + + + + 角度 = 90° + 角度 = 30 (デフォルト) + 角度 = 0 + 角度 = -90° + + @@ -268,34 +268,34 @@ now on, Inkscape will remember those settings on startup. - - + + å¤å…¸çš„ãªã‚«ãƒªã‚°ãƒ©ãƒ•ィ書体ã¯ãれãžã‚Œè‡ªèº«ã®ãƒšãƒ³è§’度をæŒã£ã¦ã„ã¾ã—ãŸã€‚例ãˆã°ã€ã‚¢ãƒ³ã‚·ãƒ£ãƒ«ä½“ã§ã¯è§’度 25°を採用ã—ã¦ã„ã¾ã™ã€‚ã‚ˆã‚Šè¤‡é›‘ãªæ›¸ä½“やより熟練ã—ãŸæ›¸å®¶ã¯ã—ã°ã—ã°æç”»ä¸­ã«è§’度を変ãˆã¾ã™ãŒã€Inkscape ã¯ã“れを 上 ãŠã‚ˆã³ 下 矢å°ã‚­ãƒ¼ã¾ãŸã¯ã‚¿ãƒ–レットã®å‚¾ã検知機能ã§å®Ÿç¾ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã®ç·´ç¿’ã‚’å§‹ã‚ãŸã°ã‹ã‚Šã®ã“ã‚ã¯è§’度を一定ã«ä¿ã¤æ–¹ãŒã‚ˆã„ã§ã—ょã†ã€‚ä»¥ä¸‹ã«æ§˜ã€…ãªè§’åº¦ã§æã‹ã‚ŒãŸä¾‹ã‚’示ã—ã¾ã™ (固定度 = 100): - 角度 = 30 - 角度 = 60 - 角度 = 90 - 角度 = 0 - 角度 = 15 - 角度 = -45 - - - - - - - + 角度 = 30 + 角度 = 60 + 角度 = 90 + 角度 = 0 + 角度 = 15 + 角度 = -45 + + + + + + + ã”覧ã®ã‚ˆã†ã«ã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã¯ãã®è§’度ã«å¹³è¡Œã«æãã¨ç´°ããªã‚Šã€åž‚ç›´ã«æãã¨å¤ªããªã‚Šã¾ã™ã€‚峿‰‹æ›¸ãã®ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ã§ã¯ã€æ­£ã®è§’度ãŒã‚‚ã£ã¨ã‚‚自然ã§ä¸€èˆ¬çš„ã§ã™ã€‚ - + @@ -307,19 +307,19 @@ now on, Inkscape will remember those settings on startup. - 角度 = 30固定度 = 100 - 角度 = 30固定度 = 80 - 角度 = 30固定度 = 0 - - - - - - - - - - + 角度 = 30固定度 = 100 + 角度 = 30固定度 = 80 + 角度 = 30固定度 = 0 + + + + + + + + + + @@ -328,7 +328,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -337,7 +337,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -346,7 +346,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -355,7 +355,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -364,7 +364,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -373,7 +373,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -382,7 +382,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -391,7 +391,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -400,7 +400,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -409,7 +409,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -418,7 +418,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -427,7 +427,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -436,7 +436,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -445,7 +445,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -454,7 +454,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -463,7 +463,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -472,17 +472,17 @@ now on, Inkscape will remember those settings on startup. - + タイãƒã‚°ãƒ©ãƒ•ィ上ã®è©±ã§ã¯ã€æœ€å¤§å›ºå®šåº¦ã™ãªã‚ã¡å¹…ã®å¯¾æ¯”ãŒæœ€å¤§ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ (上図左) ㌠Times ã‚„ Bodoni ã®ã‚ˆã†ãªã‚¢ãƒ³ãƒ†ã‚£ãƒ¼ã‚¯ãªã‚»ãƒªãƒ•書体ã®ç‰¹å¾´ã«ãªã£ã¦ã„ã¾ã™ (ãªãœãªã‚‰ã“ã‚Œã‚‰æ›¸ä½“ã¯æ­´å²çš„ã«å›ºå®šãƒšãƒ³ã‚«ãƒªã‚°ãƒ©ãƒ•ィを模倣ã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™)。 - - 震㈠+ + 震㈠- + @@ -493,7 +493,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + ゆã£ãり 普通 速ã @@ -507,289 +507,289 @@ splotches. This significantly expands the creative range of the tool. - 震㈠= 0 - 震㈠= 10 - 震㈠= 30 - 震㈠= 50 - 震㈠= 70 - 震㈠= 90 - 震㈠= 20 - 震㈠= 40 - 震㈠= 60 - 震㈠= 80 - 震㈠= 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ã†ã­ã‚Šã¨è³ªé‡ + 震㈠= 0 + 震㈠= 10 + 震㈠= 30 + 震㈠= 50 + 震㈠= 70 + 震㈠= 90 + 震㈠= 20 + 震㈠= 40 + 震㈠= 60 + 震㈠= 80 + 震㈠= 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ã†ã­ã‚Šã¨è³ªé‡ - + 幅や角度ã¨é•ã„ã€ã“ã® 2 ã¤ã®ãƒ‘ラメーターã¯è¦–覚効果ã«ä½œç”¨ã™ã‚‹ã¨è¨€ã†ã‚ˆã‚Šã€ãƒ„ールã®ã€Œæ„Ÿè§¦ã€ã‚’定義ã—ã¾ã™ã€‚ãã®ãŸã‚ã€ã“ã®ç¯€ã§ã¯ã‚¤ãƒ©ã‚¹ãƒˆã¯ä¸€åˆ‡ã‚りã¾ã›ã‚“。ã‚ãªãŸè‡ªã‚‰è©¦ã—ã¦ã¿ã¦ãã ã•ã„。 - + ã†ã­ã‚Š ã¯ãƒšãƒ³ã‚’走らã›ã‚‹æ™‚ã®ç´™ã®æŠµæŠ—ã§ã™ã€‚値ãŒå°ã•ã„ã»ã©ç´™ã¯ã€Œæ»‘りやã™ãã€ãªã‚Šã¾ã™ã€‚質é‡ã‚’大ããã—ãŸå ´åˆã€ãƒšãƒ³ã¯æ€¥ãªæ–¹å‘転æ›ã‚’ã—ãªããªã‚Šã¾ã™ã€‚質é‡ãŒã‚¼ãƒ­ã®å ´åˆã€ä½Žã„ã†ã­ã‚Šã¯ãƒšãƒ³ã‚’大胆ã«ã†ã­ã‚‰ã›ã¾ã™ã€‚ - + 物ç†å­¦ã§ã¯ è³ªé‡ ã¯æ…£æ€§ã®è¦å› ã§ã™ã€‚Inkscape ã®ã‚«ãƒªã‚°ãƒ©ãƒ•ィツールã«ãŠã„ã¦ã¯ã€è³ªé‡ã‚’大ããã™ã‚‹ã¨ãƒžã‚¦ã‚¹ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã«è¿½éšã™ã‚‹ãƒšãƒ³ã®é…れãŒã‚ˆã‚Šå¤§ãããªã‚Šã€ãã³ãã³å‹•ã‹ãšã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãŒã‚ˆã‚Šã‚¹ãƒ ãƒ¼ã‚ºãªå½¢çжã«ãªã‚Šã¾ã™ã€‚デフォルトã§ã¯ã“ã®å€¤ã¯å°ã•ã (2) ã«ãªã£ã¦ã„ã¾ã™ã®ã§ç´ æ—©ãå応ã—ã¾ã™ãŒã€è³ªé‡ã‚’増やã›ã°ã€ã‚†ã£ãりã¨ã€ã‚¹ãƒ ãƒ¼ã‚ºãªãƒšãƒ³ã«ãªã‚Šã¾ã™ã€‚ - - カリグラフィã®ä¾‹ + + カリグラフィã®ä¾‹ - + ã“ã“ã¾ã§ã§ã‚«ãƒªã‚°ãƒ©ãƒ•ィツールã®åŸºæœ¬ãŒåˆ†ã‹ã£ãŸã¨æ€ã„ã¾ã™ã®ã§ã€å®Ÿéš›ã«ã„ãã¤ã‹ã‚«ãƒªã‚°ãƒ©ãƒ•ィをæã„ã¦ã¿ã¾ã—ょã†ã€‚ - + ã¾ãšæœ€åˆã«ã€ã‚¬ã‚¤ãƒ‰ã¨ãªã‚‹ãƒ«ãƒ¼ãƒ©ãƒ¼ã®ãƒšã‚¢ã‚’作æˆã—ã¾ã—ょã†ã€‚ã‚‚ã—æ–œä½“ã‚„è‰æ›¸ä½“を書ã“ã†ã¨ã—ã¦ã„ã‚‹ã®ã§ã‚れã°ã€2 ã¤ã®ãƒ«ãƒ¼ãƒ©ãƒ¼ã¨äº¤å·®ã™ã‚‹ã„ãã¤ã‹ã®æ–œç·šã®ã‚¬ã‚¤ãƒ‰ã‚‚加ãˆã¾ã™ã€‚以下ã«ä¾‹ã‚’示ã—ã¾ã™: - - - - - - - - - + + + + + + + + + ãã—ã¦ã€ãƒ«ãƒ¼ãƒ©ãƒ¼é–“ãŒè‡ªç„¶ã«æ‰‹ã‚’å‹•ã‹ã™ã®ã«æœ€ã‚‚é©ã—ãŸé«˜ã•ã«ãªã‚‹ã‚ˆã†ã«ã‚ºãƒ¼ãƒ ã—ã¦ã‚„ã£ã¦ã¿ã¾ã—ょã†ã€‚ - + ãŠãらãã€ãƒ“ギナーカリグラファーã®ã‚ãªãŸã¯æœ€åˆã«æ–‡å­—ã®åŸºæœ¬è¦ç´ ã‚’ç·´ç¿’ã™ã‚‹ã®ãŒã„ã„ã§ã—ょã†ã€‚ã™ãªã‚ã¡ã€åž‚ç›´ãŠã‚ˆã³æ°´å¹³ã®ã‚¹ãƒ†ãƒ ã€ä¸¸ã„ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã€æ–œã‚ã®ã‚¹ãƒ†ãƒ ã§ã™ã€‚以下ã«ã‚¢ãƒ³ã‚·ãƒ£ãƒ«ä½“ã«ãŠã‘ã‚‹ã„ãã¤ã‹ã®æ–‡å­—ã®è¦ç´ ã‚’示ã—ã¾ã™: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + å½¹ã«ç«‹ã¤ã‚³ãƒ„: - - + + 手をタブレットã®ä¸Šã§ãã¤ã‚ã„ã çŠ¶æ…‹ã«ã—ãŸã‚‰ã€ãã“ã‹ã‚‰å‹•ã‹ã•ãªã„ã§ãã ã•ã„。代ã‚りã«ã€æ–‡å­—を書ãã”ã¨ã«å·¦æ‰‹ã§ã‚­ãƒ£ãƒ³ãƒã‚¹ã‚’ (Ctrl+çŸ¢å° ã‚­ãƒ¼ã§) スクロールã•ã›ã¾ã—ょã†ã€‚ - - + + 最後ã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã«å¤±æ•—ã—ãŸã‚‰ã€å…ƒã«æˆ»ã—ã¾ã—ょㆠ(Ctrl+Z)。ãŸã ã—ã€ã‚·ã‚§ã‚¤ãƒ—ã¯ã†ã¾ã書ã‘ãŸã‘れã©ã‚‚ä½ç½®ã‚„大ãã•ãŒå°‘ã—ãšã‚Œã¦ã„ãŸãªã©ã®å ´åˆã¯ã€ä¸€æ™‚çš„ã«é¸æŠžãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆ(スペース キー)ã€ãƒžã‚¦ã‚¹ã‚„キーボードã‹ã‚‰ç§»å‹•/拡大縮å°/回転ãªã©ã—ã¦ä¿®æ­£ã—ã¾ã—ょã†ã€‚ãã®å¾Œå†ã³ スペース キーを押ã›ã°ã‚«ãƒªã‚°ãƒ©ãƒ•ã‚£ãƒ„ãƒ¼ãƒ«ã«æˆ»ã‚Šã¾ã™ã€‚ - - + + 語å¥ã‚’書ã„ãŸã‚‰ã€é¸æŠžãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆã€ã‚¹ãƒ†ãƒ ã®å‡ä¸€æ€§ã‚„字間を調整ã—ã¾ã—ょã†ã€‚ã§ã‚‚やりã™ãŽãªã„ã§ãã ã•ã„。よã„カリグラフィã«ã¯å¤šå°‘ã®ä¸è¦å‰‡ãªæ‰‹æ›¸ã感を残ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。文字や文字è¦ç´ ã‚’コピーã—ãŸã„ã¨ã„ã†èª˜æƒ‘ã«è² ã‘ãªã„ã§ãã ã•ã„。筆跡ã¯ãれãžã‚ŒãŒã‚ªãƒªã‚¸ãƒŠãƒ«ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - + ã•らã«ã€ã“ã“ã§ã„ãã¤ã‹ã®å®Œå…¨ãªãƒ¬ã‚¿ãƒªãƒ³ã‚°ã®ä¾‹ã‚’ã‚ã’ã¦ãŠãã¾ã™: - - - - - - - - - アンシャル体 - カロリング体 - ゴシック体 - ãƒã‚¿ãƒ¼ãƒ‰ä½“ - - - フラリッシュイタリック体 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 最後㫠+ + + + + + + + + アンシャル体 + カロリング体 + ゴシック体 + ãƒã‚¿ãƒ¼ãƒ‰ä½“ + + + フラリッシュイタリック体 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 最後㫠- + カリグラフィã¯ãŸã æ¥½ã—ã„ã ã‘ã§ã¯ã‚りã¾ã›ã‚“。ãれã¯ã€ã‚ãªãŸãŒè¦‹ãŸã‚Šè¡Œã£ãŸã‚Šã™ã‚‹ã™ã¹ã¦ã®ç‰©ã®è¦‹æ–¹ã‚’変ãˆã¦ã—ã¾ã†ã‹ã‚‚ã—れãªã„ãらã„ã€æ·±ã精神的ãªèŠ¸è¡“ãªã®ã§ã™ã€‚Inkscape ã®ã‚«ãƒªã‚°ãƒ©ãƒ•ィツールã¯ã€ãã®ã•ã‚りã®éƒ¨åˆ†ç¨‹åº¦ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãã‚‹ã ã‘ã§ã™ãŒã€ãれをéŠã¶ã«ã¯å分ã§ã€æœ¬å½“ã®ãƒ‡ã‚¶ã‚¤ãƒ³ã«å½¹ç«‹ã¤ã‹ã‚‚ã—れã¾ã›ã‚“。楽ã—ã‚“ã§ãã ã•ã„! - + diff --git a/share/tutorials/tutorial-calligraphy.nl.svg b/share/tutorials/tutorial-calligraphy.nl.svg index acc462885..158272250 100644 --- a/share/tutorials/tutorial-calligraphy.nl.svg +++ b/share/tutorials/tutorial-calligraphy.nl.svg @@ -40,104 +40,104 @@ handleiding - + ::KALLIGRAFIE -Bulia Byak, buliabyak@users.sf.net en Josh Andler, scislac@users.sf.net - + + Een van de fantastische gereedschappen die beschikbaar is in Inkscape is het gereedschap kalligrafie. Deze handleiding helpt je op weg met de werking van het gereedschap en demonstreert enkele basistechnieken in de kalligrafiekunst. - + Gebruik Ctrl+Pijltjestoetsen, muiswiel of middenmuisknop om naar beneden te scrollen. Voor de basis van objecten maken, selectie en transformatie, zie de Basishandleiding in Help > Handleidingen. - - Geschiedenis en stijlen + + Geschiedenis en stijlen - + De woordenboekdefinitie van kalligrafie is “mooi schrijven†of “mooie en elegante schrijfkunstâ€. Per definitie is kalligrafie de kunst van het maken van mooie of elegante handschriften. Het komt misschien vreemd over, maar met een beetje oefening kan iedereen de basis van deze kunst beheersen. - + De oudste vormen van kalligrafie gaan terug op de grottekeningen. Tot ongeveer 1440 n.Chr., voor de boekdrukkunst was uitgevonden, was kalligrafie de methode voor het maken van boeken en andere publicaties. Een schriftgeleerde moest elke individuele kopie van elk boek of publicatie met de hand schrijven. Schrijven gebeurde met een veer en inkt op materialen zoals perkament of doek. De door de eeuwen gebruikte lettertypes omvatten het Rustica, Karolingisch, Gotisch, etc. De meest waarschijnlijke gelegenheid waarbij men heden ten dage kalligrafie tegenkomt is op huwelijksuitnodigingen. - + Er zijn drie hoofdstijlen van kalligrafie: - - + + Westers of Romeins - - + + Arabisch - - + + Chinees of Oriëntaals - + Deze handleiding focust in hoofdzaak op de Westerse kalligrafie, aangezien er bij de andere twee stijlen vaak een borstel gebruikt wordt (in plaats van een pen met punt), wat niet de wijze is waarop ons kalligrafiegereedschap nu functioneert. - + Een handig voordeel dat we hebben ten opzichte van de schriftkunst uit het verleden is de opdracht Ongedaan maken: bij een fout is de volledige pagina niet geruïneerd. Inkscape's kalligrafiegereedschap laat ook enkele technieken toe die niet mogelijk zijn met het traditionele pen en papier. - - Hardware + + Hardware - + Je zal de beste resultaten verkrijgen indien je een tablet en pen gebruikt (bv. Wacom). Dankzij de flexibiliteit van het gereedschap kan zelfs diegene met alleen een muis vrij ingewikkelde kalligrafie maken, alhoewel er moeilijkheden zullen zijn met het maken van snelle vegen. - + Inkscape kan gebruik maken van de drukgevoeligheid en hellingsgevoeligheid van een tabletpen dat deze features ondersteunt. De gevoeligheidsfuncties zijn standaard uitgeschakeld, omdat ze juist ingesteld moeten worden. Houdt ook in het achterhoofd dat kalligrafie met veer of pen met punt ook niet gevoelig zijn voor druk in tegenstelling met een borstel. - + @@ -152,91 +152,91 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + De kalligrafiepen van Inkscape kan gevoelig zijn voor de snelheid van de pennentrek (zie hieronder bij “Versmallingâ€). Bijgevolg, indien je een muis gebruikt, is 0 wellicht de beste waarde voor deze parameter. - - Opties kalligrafiegereedschap + + Opties kalligrafiegereedschap - + Schakel over naar het kalligrafiegereedschap door te drukken op Ctrl+F6, op C, of door te klikken op de knoppenbalk. Op de gereedschapsdetailsbalk zijn er 8 opties zichtbaar: Breedte & Versmalling & Hoek & Oriëntatie & Kapje & Beving & Wegglijden & Massa. Er zijn ook nog twee knoppen voor het inschakelen van druk- en hoekgevoeligheid (voor tekentabletten). - - Breeedte & versmalling + + Breeedte & versmalling - + Deze twee opties bepalen de breedte van je pennentrek. De breedte kan variëren tussen 1 en 100 en wordt (standaard) gemeten in eenheden relatief ten opzichte van je bewerkingsvenster, onafhankelijk van de zoom. Dit is logisch, omdat de natuurlijke “maat†in kalligrafie de omvang van de handbewegingen is. Het is dus handig om de breedte van je penpunt in constante verhouding met de grootte van je “tekenplank†te hebben en niet in reële eenheden, die het afhankelijk van de zoom zouden maken. Dit gedrag is echter optioneel. Je kan het veranderen indien je absolute eenheden van zoom verkiest. Om naar deze modus over te schakelen, gebruik het selectievakje op de voorkeurpagina van het gereedschap (open door de dubbelklikken op de gereedschapsknop. - + Aangezien de penbreedte vaak verandert wordt, kan je deze veranderen zonder tussenkomst van de knoppenbalk met de pijltjestoetsen links en rechts of met een tablet dat drukgevoeligheid ondersteunt. Het leukste aan deze toetsen is dat ze werken terwijl je tekent. Je kan dus de breedte van je pennentrek gradueel veranderen in het midden van de lij: - breedte=1, stijgend... nadert 47, dalend ... terug naar 0 - - + breedte=1, stijgend... nadert 47, dalend ... terug naar 0 + + De penbreedte kan ook afhankelijk zijn van de snelheid, bepaald door de parameter Versmalling. Deze parameter kan waarden aannemen van -100 tot 100. Nul betekent dat de breedte onafhankelijk is van de snelheid, positieve waarden maakt snelle pennentrekken smaller, terwijl negatieve waarden snelle pennentrekken breder maakt. De standaardwaarde van 10 zorgt voor middelmatige verdunning van snelle pennentrekken. Hier zijn enekel voorbeelden getekent met breedte=20 en hoek=90: - versmalling = 0 (uniforme breedte) - versmalling = 10 - versmalling = 40 - versmalling = -20 - versmalling = -60 - - - - - - - - - - - - - - - - - - - - - + versmalling = 0 (uniforme breedte) + versmalling = 10 + versmalling = 40 + versmalling = -20 + versmalling = -60 + + + + + + + + + + + + + + + + + + + + + Voor de fun, stel breedte en verdunning beide in op 100 (maximum) en teken met schokkerige bewegingen om rare natuurlijk neuron-achtige vormen te krijgen: - - - - - - - - Hoek & fixatie + + + + + + + + Hoek & fixatie - + @@ -251,15 +251,15 @@ now on, Inkscape will remember those settings on startup. - - - - hoek = 90 gr - hoek = 30 (standaard) - hoek = 0 - hoek = -90 gr - - + + + + hoek = 90 gr + hoek = 30 (standaard) + hoek = 0 + hoek = -90 gr + + @@ -268,34 +268,34 @@ now on, Inkscape will remember those settings on startup. - - + + Elke traditionele kalligrafiestijl heeft zijn eigen standaard penhoek. Bijvoorbeeld, het Unciaal handschrift gebruikt een hoek van 25 graden. Bij meer gecompliceerde handschriften en bij gevorderde kalligrafen zal de hoek variëren tijdens het tekenen. Inkscape maakt dit mogelijk door het drukken op de pijltjestoetsen omhoog en omlaag of met een tablet dat hoekgevoeligheid ondersteunt. Voor kalligrafielessen voor beginners werkt het constant van de hoek het beste. Hier zijn voorbeelden van pennentrekken getekend met verschillende hoeken (fixatie=100): - hoek = 30 - hoek = 60 - hoek = 90 - hoek = 0 - hoek = 15 - hoek = -45 - - - - - - - + hoek = 30 + hoek = 60 + hoek = 90 + hoek = 0 + hoek = 15 + hoek = -45 + + + + + + + Zoals je kan zien, is de lijn het smalst wanneer deze parallel en het breedst wanneer deze loodrecht met de oriëntatie getekend is. Positieve hoeken zijn het meest natuurlijk en traditioneel voor rechtshandige kalligrafie. - + @@ -307,19 +307,19 @@ now on, Inkscape will remember those settings on startup. - hoek = 30fixatie = 100 - hoek = 30fixatie = 80 - hoek = 30fixatie = 0 - - - - - - - - - - + hoek = 30fixatie = 100 + hoek = 30fixatie = 80 + hoek = 30fixatie = 0 + + + + + + + + + + @@ -328,7 +328,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -337,7 +337,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -346,7 +346,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -355,7 +355,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -364,7 +364,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -373,7 +373,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -382,7 +382,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -391,7 +391,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -400,7 +400,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -409,7 +409,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -418,7 +418,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -427,7 +427,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -436,7 +436,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -445,7 +445,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -454,7 +454,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -463,7 +463,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -472,17 +472,17 @@ now on, Inkscape will remember those settings on startup. - + Vanuit typografisch standpunt zijn maximum fixatie en bijgevolg maximum lijnbreedtecontrast (boven links) de kenmerken van de oude serif lettertypen, zoals Times of Bodoni, omdat deze lettertypen historisch een imitatie waren van vaste-pen-kalligrafie. Nul fixatie en nul breedtecontrast (boven rechts) aan de andere kant, suggereren moderne sans serif lettertypen zoals Helvetica. - - Beving + + Beving - + @@ -493,7 +493,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + traag gemiddeld snel @@ -507,289 +507,289 @@ splotches. This significantly expands the creative range of the tool. - beving = 0 - beving = 10 - beving = 30 - beving = 50 - beving = 70 - beving = 90 - beving = 20 - beving = 40 - beving = 60 - beving = 80 - beving = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wegglijden & Massa + beving = 0 + beving = 10 + beving = 30 + beving = 50 + beving = 70 + beving = 90 + beving = 20 + beving = 40 + beving = 60 + beving = 80 + beving = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wegglijden & Massa - + In tegenstelling tot breedte en hoek definiëren deze laatste twee parameters eerder hoe het gereedschap “aanvoelt†dan dat ze de visuele output beïnvloeden. Bijgevolg zijn er ook geen illustraties in deze sectie. Probeer ze gewoon om er een beter idee van te krijgen. - + Wegglijden is de weerstand van het papier tegen de beweging van de pen. Standaard staat deze op het minimum (0). Deze parameter vergroten maakt het papier “slipperigâ€: indien de massa groot is, heeft de pen de neiging om weg te glijden bij scherpe bochten; indien de massa nul is, zorgt een hoge waarde voor wegglijden dat de pen wild wiebelt. - + In de natuurkunde is massa datgene wat traagheid veroorzaakt. Hoe hoger de massa van het Inkscape kalligrafiegereedschap, hoe meer het achterblijft op je muispointer en hoe meer het scherpe bochten en snelle trekken in je lijn afvlakt. Standaard is deze waarde vrij klein (2) zodat het gereedschap snel en responsief is, maar je kan de massa verhogen om een tragere en effenere pen te krijgen. - - Kalligrafievoorbeelden + + Kalligrafievoorbeelden - + Nu dat je de basismogelijkheden van het gereedschap kent, kan je proberen om enige echte kalligrafie te maken. Indien je nieuw in deze kunst bent, haal een goed kalligrafieboek en bestudeer het met Inkscape. Deze sectie zal je enkele eenvoudige voorbeelden tonen. - + Om letter te maken moet je eerst en vooral een aantal linialen maken om je te helpen. Indien je in cursief schrijft, voeg enkele schuine hulplijnen toe tussen de twee linialen, bijvoorbeeld: - - - - - - - - - + + + + + + + + + Zoom vervolgens in zodat de hoogte tussen de linialen overeenkomt met je meest natuurlijke range van handbewegingen, pas de breedte en hoek aan en schrijven maar! - + Wellicht is het eerste ding dat je als beginnende kalligraaf wil doen, de basiselementen van letters oefenen — verticale en horizontale lijnen, ronde lijnen en cursieve lijnen. Hier zijn enkele letteronderdelen van het Unciaal handschrift: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Enkele bruikbare tips: - - + + Indien je hand confortabel zit op het tablet, verplaats het niet. Scroll in plaats daarvan het canvas (Ctrl+pijltjestoetsen) met je linkerhand na het beëindigen van elke letter. - - + + Indien je laatste lijn slecht is, maak deze gewoon ongedaan (Ctrl+Z). Echter, indien de vorm goed is, maar de positie of grootte is niet perfect, is het beter om tijdelijk naar het selectiegereedschap over te schakelen (Spatie) en verplaats/schaal/roteer zoals gewenst (met de muis of het toetsenbord), druk dan opnieuw op Spatie om naar het kalligrafiegereedschap terug te gaan. - - + + Schakel na het beëindigen terug over naar het selectiegereedschap om uniformiteit en letterspatiëring aan te passen. Overdrijf hier echter niet mee: goede kalligrafie moet een wat onregelmatig uitzicht behouden. Weersta de drang om letters en letteronderdelen te kopiëren; elke lijn moet origineel zijn. - + Hier zijn nog enkele lettervoorbeelden: - - - - - - - - - Unciaal - Karolingisch - Gotisch - Bastarda - - - Vloeiend cursief - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Conclusie + + + + + + + + + Unciaal + Karolingisch + Gotisch + Bastarda + + + Vloeiend cursief + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Conclusie - + Kalligrafie is niet alleen fun. Het is een diep spirituele kunst die je zicht op alles wat je doet en ziet, kan beïnvloeden. Inkscape's kalligrafiegereedschap kan alleen dienen als een bescheiden introductie. En toch is het leuk om mee te spelen en kan het bruikbaar zijn in echte ontwerpen. Veel plezier! - + diff --git a/share/tutorials/tutorial-calligraphy.pl.svg b/share/tutorials/tutorial-calligraphy.pl.svg index a67957769..035692f05 100644 --- a/share/tutorials/tutorial-calligraphy.pl.svg +++ b/share/tutorials/tutorial-calligraphy.pl.svg @@ -40,104 +40,104 @@ Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - + ::KALIGRAFIA -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + Jednym z wielu wspaniaÅ‚ych narzÄ™dzi dostÄ™pnych w Inkscape'ie jest narzÄ™dzie „Kaligrafiaâ€. Poradnik ten pomoże ci zapoznać siÄ™ z nim i zademonstruje pewne podstawowe techniki sztuki kaligrafii. - + Aby przewinąć stronÄ™ w dół, użyj kombinacji klawiszy [Ctrl+strzaÅ‚ki], rolki myszy lub przeciÄ…gnij stronÄ™ Å›rodkowym przyciskiem myszy. Podstawowe sposoby tworzenia, zaznaczania i przeksztaÅ‚cania obiektów zostaÅ‚y omówione w poradniku „Podstawyâ€, który znajduje siÄ™ w menu „Pomoc Poradniki - - Historia i style + + Historia i style - + WedÅ‚ug definicji sÅ‚ownikowej kaligrafia oznacza „piÄ™kne pismo†albo „sztuka piÄ™knego i wyraźnego pisaniaâ€. Istotnie, kaligrafia jest sztukÄ… tworzenia Å‚adnego czy też wytwornego pisma odrÄ™cznego. Może to brzmieć odstraszajÄ…co, ale przy odrobinie praktyki każdy jest w stanie opanować podstawy tej sztuki. - + Za najwczeÅ›niejsze formy kaligrafii uznaje siÄ™ malowidÅ‚a czÅ‚owieka jaskiniowego. Do okoÅ‚o 1440 roku, zanim rozpowszechniono prasÄ™ drukarskÄ…, książki i inne publikacje tworzono wÅ‚aÅ›nie przy pomocy kaligrafii. Skryba musiaÅ‚ pisać rÄ™cznie każdÄ… pojedynczÄ… kopiÄ™ książki czy publikacji. To odrÄ™czne pismo tworzono za pomocÄ… gÄ™siego piórka i atramentu na materiaÅ‚ach takich jak pergamin czy papier welinowy. Style liternictwa używane przez wieki to m.in. styl rustykalny, karoliÅ„ski, gotycki. W obecnych czasach przeciÄ™tny czÅ‚owiek spotyka siÄ™ najczęściej z kaligrafiÄ…, otrzymujÄ…c bÄ…dź oglÄ…dajÄ…c zaproszenia Å›lubne. - + IstniejÄ… trzy główne style kaligrafii: - - + + Zachodni lub rzymski - - + + Arabski - - + + ChiÅ„ski lub orientalny - + Poradnik ten skupia siÄ™ głównie na kaligrafii zachodniej, ponieważ obydwa pozostaÅ‚e style zakÅ‚adajÄ… stosowanie pÄ™dzla (zamiast pióra ze stalówkÄ…), a tego narzÄ™dzie „Kaligrafia†jeszcze nie potrafi. - + WielkÄ… przewagÄ…, jakÄ… mamy nad skrybÄ… z przeszÅ‚oÅ›ci, jest polecenie „Wycofajâ€. JeÅ›li popeÅ‚nisz błąd, nie zniweczy to caÅ‚ej strony. NarzÄ™dzie „Kaligrafia†umożliwia również wykorzystanie pewnych technik niemożliwych do zastosowania przy użyciu metody tradycyjnej. - - SprzÄ™t + + SprzÄ™t - + Najlepsze wyniki osiÄ…gniesz, używajÄ…c tabletu i piórka, np. Wacom. DziÄ™ki elastycznoÅ›ci naszego narzÄ™dzia, pracujÄ…c nawet tylko myszÄ…, można utworzyć piÄ™knÄ… i misternÄ… kaligrafiÄ™, chociaż wówczas mogÄ… wystÄ…pić trudnoÅ›ci w trakcie tworzenia szybkich, zamaszystych linii. - + Inkscape potrafi wykorzystać czuÅ‚ość nacisku i czuÅ‚ość nachylenia piórka tabletu, który obsÅ‚uguje te funkcje. Funkcje czuÅ‚oÅ›ci sÄ… domyÅ›lnie wyłączone, ponieważ wymagajÄ… konfiguracji. Zwróć uwagÄ™, że w przeciwieÅ„stwie do pÄ™dzla, kaligrafia za pomocÄ… gÄ™siego pióra czy pióra ze stalówkÄ… jest niezbyt wrażliwa na nacisk. - + @@ -152,91 +152,91 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + NarzÄ™dzie „Kaligrafia†potrafi być czuÅ‚e na szybkość ruchu (zobacz „Pocienianie†poniżej), wiÄ™c jeżeli używasz myszy, prawdopodobnie zechcesz wyzerować ten parametr. - - Opcje narzÄ™dzia „Kaligrafia†+ + Opcje narzÄ™dzia „Kaligrafia†- + Włącz narzÄ™dzie „Kaligrafiaâ€, używajÄ…c skrótu [ Ctrl+F6 ], naciskajÄ…c klawisz [ C ] bÄ…dź klikajÄ…c ikonÄ™ kaligrafii w przyborniku. Na pasku narzÄ™dzi zauważysz kilka opcji: Szerokość, Pocienianie, KÄ…t, UÅ‚ożenie, ZakoÅ„czenie, Drżenie i Masa. ZnajdujÄ… siÄ™ tam również dwa przyciski do przełączania siÅ‚y nacisku tabletu oraz włączenia/wyłączenia czuÅ‚oÅ›ci nachylenia tabletów do rysowania. - - Szerokość i pocienianie + + Szerokość i pocienianie - + Ta para opcji kontroluje szerokość pióra. Może ona mieć wartość od 1 do 100 i domyÅ›lnie jest mierzona w jednostkach relatywnie do wielkoÅ›ci okna edycji, lecz niezależnie od skali przybliżenia. Ma to sens, ponieważ w kaligrafii naturalnÄ… „jednostkÄ… miary†jest zasiÄ™g ruchu rÄ™ki i dlatego wygodnie jest mieć szerokość stalówki pióra w staÅ‚ym stosunku do rozmiaru „obszaru roboczego rysunkuâ€, a nie w rzeczywistych jednostkach, które byÅ‚yby zależne od skali przybliżenia. To ustawienie jest opcjonalne i osoby, które wolaÅ‚yby pracować na jednostkach bezwzglÄ™dnych niezależnie od skali przybliżenia, mogÄ… je zmienić w oknie preferencji globalnych Inkscape'a, które można otworzyć klikajÄ…c dwukrotnie ikonÄ™ narzÄ™dzia „Kaligrafia†znajdujÄ…cÄ… siÄ™ w przyborniku. - + Ponieważ szerokość pióra jest czÄ™sto zmieniana, można jÄ… dostosowywać bez pomocy paska narzÄ™dzi, używajÄ…c klawiszy [ strzaÅ‚ka w lewo ] i [ strzaÅ‚ka w prawo ] lub za pomocÄ… tabletu, który obsÅ‚uguje funkcjÄ™ siÅ‚y nacisku. Najlepsze jest to, że klawisze te dziaÅ‚ajÄ… podczas rysowania, a wiÄ™c można zmieniać szerokość pióra stopniowo w trakcie ruchu: - szerokość = 1, roÅ›nie.... osiÄ…ga 47, maleje... powraca do 0 - - + szerokość = 1, roÅ›nie.... osiÄ…ga 47, maleje... powraca do 0 + + Szerokość pióra może również zależeć od szybkoÅ›ci pociÄ…gniÄ™cia kontrolowanej za pomocÄ… parametru „pocienianieâ€. Może on przyjmować wartoÅ›ci od -100 do 100. Zero oznacza, że szerokość linii jest niezależna od szybkoÅ›ci, z jakÄ… jest rysowana. Dodatnie wartoÅ›ci powodujÄ…, że szybsze pociÄ…gniÄ™cia tworzÄ… cieÅ„sze linie, a ujemne odwrotnie – grubsze. DomyÅ›lna wartość 10 oznacza umiarkowane pocienianie szybkich pociÄ…gnięć. Oto parÄ™ przykÅ‚adów, wszystkie narysowane z szerokoÅ›ciÄ… równÄ… 20 i kÄ…tem 90 stopni: - pocienianie = 0 (jednolita szerokość) - pocienianie = 10 - pocienianie = 04. - pocienianie = -20 - pocienianie = -60 - - - - - - - - - - - - - - - - - - - - - + pocienianie = 0 (jednolita szerokość) + pocienianie = 10 + pocienianie = 04. + pocienianie = -20 + pocienianie = -60 + + + + + + + + + + + + + + + + + + + + + Dla zabawy ustaw zarówno szerokość, jak i pocienienie na 100 (maksimum) i gwaÅ‚townymi ruchami wykonaj rysunek, a uzyskach naturalistyczne, podobne do neuronów ksztaÅ‚ty: - - - - - - - - KÄ…t i uÅ‚ożenie + + + + + + + + KÄ…t i uÅ‚ożenie - + @@ -251,15 +251,15 @@ now on, Inkscape will remember those settings on startup. - - - - kÄ…t = 90 stopni - kÄ…t = 30 (domyÅ›lny) - kÄ…t = 0 - kÄ…t = -90 stopni - - + + + + kÄ…t = 90 stopni + kÄ…t = 30 (domyÅ›lny) + kÄ…t = 0 + kÄ…t = -90 stopni + + @@ -268,8 +268,8 @@ now on, Inkscape will remember those settings on startup. - - + + @@ -283,26 +283,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - kÄ…t = 30 - kÄ…t = 60 - kÄ…t = 90 - kÄ…t = 0 - kÄ…t = 15 - kÄ…t = -45 - - - - - - - + kÄ…t = 30 + kÄ…t = 60 + kÄ…t = 90 + kÄ…t = 0 + kÄ…t = 15 + kÄ…t = -45 + + + + + + + Jak widać, linia jest najcieÅ„sza, kiedy rysuje siÄ™ jÄ… równolegle do kÄ…ta i najszersza, kiedy jest rysowana prostopadle. W przypadku kaligrafii praworÄ™cznej najbardziej naturalne i tradycyjne sÄ… dodatnie ustawienia kÄ…ta. - + @@ -319,19 +319,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - kÄ…t = 30uÅ‚ożenie = 100 - kÄ…t = 30uÅ‚ożenie = 80 - kÄ…t = 30uÅ‚ożenie = 0 - - - - - - - - - - + kÄ…t = 30uÅ‚ożenie = 100 + kÄ…t = 30uÅ‚ożenie = 80 + kÄ…t = 30uÅ‚ożenie = 0 + + + + + + + + + + @@ -340,7 +340,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -349,7 +349,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -358,7 +358,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -367,7 +367,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -376,7 +376,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -385,7 +385,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -394,7 +394,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -403,7 +403,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -412,7 +412,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -421,7 +421,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -430,7 +430,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -439,7 +439,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -448,7 +448,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -457,7 +457,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -466,7 +466,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -475,7 +475,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -484,17 +484,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + OkreÅ›lajÄ…c to typograficznie, maksymalne uÅ‚ożenie i tym samym maksymalny kontrast szerokoÅ›ci linii (powyżej, po lewej stronie) sÄ… cechami antycznych, szeryfowych krojów pisma takich jak Times lub Bodoni, ponieważ te kroje pism, byÅ‚y historycznie naÅ›ladownictwem kaligrafii piórem o staÅ‚ym kÄ…cie ustawienia, a uÅ‚ożenie i kontrast wynoszÄ…cy 0 (powyżej, po prawej stronie) sugeruje nowoczesne kroje bezszeryfowe takie jak Helvetica. - - Drżenie + + Drżenie - + @@ -505,7 +505,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + wolno Å›rednio szybko @@ -519,105 +519,105 @@ splotches. This significantly expands the creative range of the tool. - drżenie = 0 - drżenie = 10 - drżenie = 30 - drżenie = 50 - drżenie = 70 - drżenie = 90 - drżenie = 20 - drżenie =4 0 - drżenie = 60 - drżenie = 80 - drżenie = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Drżenie i Masa + drżenie = 0 + drżenie = 10 + drżenie = 30 + drżenie = 50 + drżenie = 70 + drżenie = 90 + drżenie = 20 + drżenie =4 0 + drżenie = 60 + drżenie = 80 + drżenie = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Drżenie i Masa - + W przeciwieÅ„stwie do szerokoÅ›ci i kÄ…ta, te dwa ostatnie parametry definiujÄ… sposób prowadzenia narzÄ™dzia, a nie wÅ‚aÅ›ciwoÅ›ci wizualne. Tym razem nie przedstawimy żadnych ilustracji. Zamiast tego po prostu wypróbuj sam te parametry czynników, by lepiej je zrozumieć. - + PoÅ›lizg to opór, jaki stawia papier podczas ruchu pióra. DomyÅ›lnie ustawiona jest minimalna wartość – 0. ZwiÄ™kszanie tego parametru sprawia, że papier staje siÄ™ bardziej Å›liski. JeÅ›li masa jest duża, pióro przy gwaÅ‚townych ruchach ma tendencjÄ™ do „uciekaniaâ€. JeÅ›li parametr masy jest ustawiony na 0, duży poÅ›lizg sprawia, że linia jest pokrÄ™cona. - + W fizyce masa jest elementem powodujÄ…cym inercjÄ™. Im wyższa masa narzÄ™dzia „Kaligrafiaâ€, tym wolniej porusza siÄ™ ono za kursorem myszy oraz bardziej wygÅ‚adza ostre skrÄ™ty i nagÅ‚e szarpniÄ™cia. DomyÅ›lnie wartość ta jest dość maÅ‚a – 2, wiÄ™c narzÄ™dzie jest szybkie i szybko reaguje, ale można zwiÄ™kszyć masÄ™, by pióro staÅ‚o siÄ™ wolniejsze i „gÅ‚adszeâ€. - - PrzykÅ‚ady kaligrafii + + PrzykÅ‚ady kaligrafii - + Teraz gdy znasz już podstawowe możliwoÅ›ciami narzÄ™dzia „Kaligrafiaâ€, możesz spróbować tej sztuki i utworzyć kilka obiektów kaligraficznych. Jeżeli jednak jesteÅ› nowicjuszem w tej sztuce, zakup dobrÄ… książkÄ™ o kaligrafii i studiuj jÄ… z Inkscape'em. W tej części zobaczysz jedynie kilka prostych przykÅ‚adów. - + Przede wszystkim, aby tworzyć litery, należy wprowadzić dwie linijki, które bÄ™dÄ… prowadnicami. JeÅ›li chcesz tworzyć pismo pochyÅ‚e lub kursywÄ™, dodaj pochylone prowadnice przecinajÄ…ce wprowadzone już linijki, na przykÅ‚ad: - - - - - - - - - + + + + + + + + + Teraz ustaw tak skalÄ™ przybliżenia, aby odlegÅ‚ość pomiÄ™dzy linijkami odpowiadaÅ‚a twojemu najbardziej naturalnemu zakresowi ruchów rÄ™ki, dostosuj szerokość i kÄ…t, i startuj! - + @@ -627,184 +627,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Kilka użytecznych wskazówek: - - + + Jeżeli prawa rÄ™ka spoczywa wygodnie na tablecie, nie przemieszczaj jej. Do przewiniÄ™cia obszaru roboczego po skoÅ„czeniu litery, użyj lewej rÄ™ki, wybierajÄ…c niÄ… skrót [ Ctrl+strzaÅ‚ki ]. - - + + JeÅ›li twoje ostatnie pociÄ…gniÄ™cie okazaÅ‚o siÄ™ zÅ‚e, po prostu cofnij je za pomocÄ… skrótu [ Ctrl+Z ]. Jednak jeÅ›li jego ksztaÅ‚t jest dobry, a tylko pozycja czy wielkość sÄ… nieznacznie wadliwe, lepiej bÄ™dzie chwilowo przełączyć siÄ™ na narzÄ™dzie „Wskaźnik†[ Spacja ] i za pomocÄ… myszy lub klawiszy – w zależnoÅ›ci od potrzeby – popchnąć/przeskalować/obrócić obiekt, a nastÄ™pnie ponownie nacisnąć [ SpacjÄ™ ], by powrócić do narzÄ™dzia „Kaligrafiaâ€. - - + + Kiedy utworzysz sÅ‚owo, włącz ponownie narzÄ™dzie „Wskaźnikâ€, aby wyregulować jednolitość osi i odlegÅ‚oÅ›ci miÄ™dzy literami. Nie należy z tym przesadzać - dobra kaligrafia musi zachować w wyglÄ…dzie nieco nieregularnoÅ›ci odrÄ™cznego pisma. Oprzyj siÄ™ pokusie kopiowania liter i ich elementów - każda kreska musi być autentyczna. - + A oto kilka przykÅ‚adów liternictwa: - - - - - - - - - OdrÄ™czne pismo uncjalne - OdrÄ™czne pismo karoliÅ„skie - OdrÄ™czne pismo gotyckie - OdrÄ™czne pismo Bâtarde (francuski gotyk) - - - OdrÄ™czne pochyÅ‚e pismo ornamentowe - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Podsumowanie + + + + + + + + + OdrÄ™czne pismo uncjalne + OdrÄ™czne pismo karoliÅ„skie + OdrÄ™czne pismo gotyckie + OdrÄ™czne pismo Bâtarde (francuski gotyk) + + + OdrÄ™czne pochyÅ‚e pismo ornamentowe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Podsumowanie - + Kaligrafia nie jest tylko zabawÄ…. To głęboko uduchowiona sztuka, która może zmienić twój poglÄ…d na wszystko, co robisz i widzisz. NarzÄ™dzie kaligrafii Inkscape'a może ci posÅ‚użyć tylko jako skromne wprowadzenie. Poza tym to przecież bardzo przyjemne pobawić siÄ™ nim, a może być użyteczne w rzeczywistym projekcie. MiÅ‚ej zabawy! - + diff --git a/share/tutorials/tutorial-calligraphy.ru.svg b/share/tutorials/tutorial-calligraphy.ru.svg index ab9a18464..224eaaf53 100644 --- a/share/tutorials/tutorial-calligraphy.ru.svg +++ b/share/tutorials/tutorial-calligraphy.ru.svg @@ -40,104 +40,104 @@ ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - + ::КÐЛЛИГРÐФИЯ -bulia byak, buliabyak@users.sf.net и josh andler, scislac@users.sf.net - + + Один из замечательных инÑтрументов Inkscape — каллиграфичеÑкое перо. Этот урок поможет вам лучше узнать возможноÑти Ñтого пера и раÑÑкажет о некоторых Ñтандартных приёмах каллиграфии. - + ИÑпользуйте Ctrl+Ñтрелки, колеÑо мыши или перемещение Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ Ñредней клавишей мыши Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра текÑта. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ñ… знаний о Ñоздании объектов их выделении и изменении их форм, Ñмотрите урок «ОÑновы» в меню Справка > Учебник. - - ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¸ Ñтили + + ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¸ Ñтили - + Ð¡Ð»ÐµÐ´ÑƒÑ Ñловарному определению, ÐºÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°ÐµÑ‚ «краÑивое пиÑьмо» или «иÑкуÑÑтво краÑивого и чёткого пиÑьма». То еÑть ÐºÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ â€” Ñто иÑкуÑÑтво краÑивого напиÑаниÑ. Возможно, Ñто предÑтавлÑетÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ Ñложным делом, но Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð¹ практикой любой Ñможет оÑвоить оÑновы каллиграфии. - + Ранние формы каллиграфии уходÑÑ‚ корнÑми к риÑункам древних людей. До 1440 года, года Ð¸Ð·Ð¾Ð±Ñ€ÐµÑ‚ÐµÐ½Ð¸Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð½Ð¾Ð³Ð¾ преÑÑа, ÐºÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð±Ñ‹Ð»Ð° единÑтвенным ÑпоÑобом ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ½Ð¸Ð³ и других публикаций. ПиÑцу приходилоÑÑŒ перепиÑывать вручную каждую копию книги или изданиÑ. Ðа пергаменте или кальке пиÑали при помощи птичьего пера и чернил. Школы пиÑьма ÑущеÑтвовали во вÑе времена. Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¶Ðµ каллиграфичеÑкое пиÑьмо можно чаще вÑтретить на Ñвадебных приглашениÑÑ…. - + СущеÑтвуют три оÑновных вида каллиграфии: - - + + Западный или РоманÑкий - - + + КлаÑÑичеÑкое арабÑкое пиÑьмо - - + + КитайÑкий или ВоÑточно-азиатÑкий - + Этот учебник в оÑновном уделÑет внимание западной каллиграфии, так как другие два ÑÑ‚Ð¸Ð»Ñ Ð¸Ñпользуют киÑточку (вмеÑто оÑтрого пера), ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ð¸ÑˆÐµÑ‚ не так как наше каллиграфичеÑкое перо. - + У Ð½Ð°Ñ ÐµÑть одно огромное преимущеÑтво перед пиÑцами прошлого — команда Отменить. Ð’ Ñлучае ошибки мы не погубим вÑÑŽ Ñтраницу. К тому же, инÑтрумент каллиграфии в Inkscape позволÑет иÑпользовать такие художеÑтвенные приёмы, которые были бы невозможны Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ð¼ пером и чернилами. - - ТехничеÑкие ÑредÑтва + + ТехничеÑкие ÑредÑтва - + Ð’Ñ‹ получите наилучшие результаты, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ð»Ð°Ð½ÑˆÐµÑ‚ и перо (например Wacom), но при помощи мыши также можно получить неплохой результат. Правда, будет проблематично получить Ñложно изогнутые линии так же качеÑтвенно и быÑтро как Ñ Ð¿Ð»Ð°Ð½ÑˆÐµÑ‚Ð¾Ð¼. - + Inkscape умеет интерпретировать Ñилу Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¸ угол наклона пера отноÑительно плоÑкоÑти планшета. Эти функции по умолчанию отключены, поÑкольку требуют вдумчивой индивидуальной наÑтройки. Помните, что ÐºÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¿Ñ€Ð¸ помощи птичьего пера или перьевой ручки в отличие от киÑти не Ñлишком чувÑтвительна к наклону. - + @@ -152,91 +152,91 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + КаллиграфичеÑкое перо в Inkscape может быть чувÑтвительным к ÑкороÑти напиÑÐ°Ð½Ð¸Ñ (Ñм. далее «Сужение»), так что еÑли вы иÑпользуете мышь, то, вероÑтно, захотите обнулить Ñтот параметр. - - Параметры инÑтрумента каллиграфии + + Параметры инÑтрумента каллиграфии - + ПереключитеÑÑŒ на инÑтрумент каллиграфии, нажав Ctrl+F6, клавишу C или нажав кнопку РиÑовать каллиграфичеÑким пером на Панели инÑтрументов. Ðа верхней панели раÑположены 8 параметров: Ширина; Сужение; Угол; ФикÑациÑ; Дрожание штриха; МаÑÑа пера; Концы и ВилÑние пером. ЗдеÑÑŒ же раÑположены кнопки Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ: Ðажим (pressure) и Толщина линии пера. - - Ширина и Сужение + + Ширина и Сужение - + Эта пара наÑтроек отвечает за ширину вашего пера. Значение ширины может ÑоÑтавлÑть от 1 до 100 и измерÑетÑÑ Ð² единицах отноÑительно размера окна программы, но незавиÑимо от маÑштаба. Это важно, поÑкольку наÑтоÑÑ‰Ð°Ñ Â«ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð° измерениÑ» в каллиграфии — Ñто диапазон Ð´Ð²Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ¹ руки, и, Ñледовательно, удобно, когда ширина кончика пера ÑвлÑетÑÑ ÐºÐ¾Ð½Ñтантой по отношению к размеру вашего «холÑта», а не какими-нибудь наÑтоÑщими единицами, завиÑÑщими от маÑштаба. Тем не менее, Ñто поведение опционально и может быть изменено, еÑли вы предпочитаете абÑолютные единицы, не завиÑÑщие от маÑштаба. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð° Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ñпользуйте переключатель на Ñтранице инÑтрумента КаллиграфичеÑкое перо в диалоге наÑтройки программы, которую можно открыть двойным щелчком по значку инÑтрумента. - + Так как ширина пера чаÑто менÑетÑÑ, вы можете менÑть её не только в панели наÑтроек инÑтрумента, но и при помощи левой и правой Ñтрелок клавиатуры, либо Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ пера планшета, поддерживающего раÑпознавание Ñилы нажатиÑ. Главное качеÑтво Ñтой функции ÑоÑтоит в том, что она работает в момент риÑованиÑ, поÑтому вы можете менÑть ширину пера поÑтепенно по ходу дейÑтвиÑ: - ширина=1, увеличиваетÑÑ... доÑтигает 47, уменьшаетÑÑ... Ñнова 0 - - + ширина=1, увеличиваетÑÑ... доÑтигает 47, уменьшаетÑÑ... Ñнова 0 + + Ширина пера также может завиÑеть от ÑкороÑти пиÑьма, что контролируетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ Сужение. Значение Ñтого параметра может быть от -100 до 100; ноль означает, что ширина не завиÑит от ÑкороÑти напиÑаниÑ, положительное значение Ñужает быÑтро начерченные линии, отрицательное — раÑширÑет. Ðачальное значение 10 придаёт линиÑм умеренное Ñужение при быÑтром пиÑьме. Ðиже приведены некоторые примеры изложенного. Ð’Ñе штрихи нариÑованы Ñо значением ширины=20 и углом=90: - Ñужение = 0 (Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð°) - Ñужение = 10 - Ñужение = 40 - Ñужение = -20 - Ñужение = -60 - - - - - - - - - - - - - - - - - - - - - + Ñужение = 0 (Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð°) + Ñужение = 10 + Ñужение = 40 + Ñужение = -20 + Ñужение = -60 + + + + + + + + + + + + + + + + + + + + + Ð”Ð»Ñ Ñ€Ð°Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÑƒÑтановите Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ñ‹ и ÑÑƒÐ¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð²Ð½Ñ‹Ð¼ 100 (макÑимальное) и пориÑуйте резкими движениÑми. ПолучаютÑÑ Ñтранные фигуры, похожие на нейроны: - - - - - - - - Угол и ФикÑÐ°Ñ†Ð¸Ñ + + + + + + + + Угол и ФикÑÐ°Ñ†Ð¸Ñ - + @@ -251,15 +251,15 @@ now on, Inkscape will remember those settings on startup. - - - - угол = 90 - угол = 30 (по умолчанию) - угол = 0 - угол = -90 - - + + + + угол = 90 + угол = 30 (по умолчанию) + угол = 0 + угол = -90 + + @@ -268,34 +268,34 @@ now on, Inkscape will remember those settings on startup. - - + + Каждый традиционный каллиграфичеÑкий Ñтиль имеет Ñвой превалирующий угол пера. Ðапример, унцианÑкий шрифт иÑпользует угол в 25 градуÑов. Более Ñложные Ñтили и более опытные каллиграфы чаÑто менÑÑŽÑ‚ угол во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹, и Inkscape позволÑет делать Ñто Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ клавиатурных Ñтрелок вверх и вниз . Ð”Ð»Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° каллиграфичеÑких занÑтий предуÑтановленное значение прекраÑно подойдёт. Ðа примерах ниже, штрихи имеют разный угол (фикÑÐ°Ñ†Ð¸Ñ = 100): - угол = 30 - угол = 60 - угол = 90 - угол = 0 - угол = 15 - угол = -45 - - - - - - - + угол = 30 + угол = 60 + угол = 90 + угол = 0 + угол = 15 + угол = -45 + + + + + + + Как видно на примере, штрих тоньше, когда идёт параллельно Ñвоему углу, и шире, когда идёт перпендикулÑрно ему. Положительные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° Угол ÑоответÑтвуют более традиционной каллиграфии Ð´Ð»Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¹ руки. - + @@ -307,19 +307,19 @@ now on, Inkscape will remember those settings on startup. - угол = 30фикÑÐ°Ñ†Ð¸Ñ = 100 - угол = 30фикÑÐ°Ñ†Ð¸Ñ = 80 - угол = 30фикÑÐ°Ñ†Ð¸Ñ = 0 - - - - - - - - - - + угол = 30фикÑÐ°Ñ†Ð¸Ñ = 100 + угол = 30фикÑÐ°Ñ†Ð¸Ñ = 80 + угол = 30фикÑÐ°Ñ†Ð¸Ñ = 0 + + + + + + + + + + @@ -328,7 +328,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -337,7 +337,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -346,7 +346,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -355,7 +355,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -364,7 +364,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -373,7 +373,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -382,7 +382,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -391,7 +391,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -400,7 +400,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -409,7 +409,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -418,7 +418,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -427,7 +427,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -436,7 +436,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -445,7 +445,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -454,7 +454,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -463,7 +463,7 @@ now on, Inkscape will remember those settings on startup. - + @@ -472,17 +472,17 @@ now on, Inkscape will remember those settings on startup. - + Ð“Ð¾Ð²Ð¾Ñ€Ñ Ñзыком типографов, макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ„Ð¸ÐºÑациÑ, а Ñледовательно макÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð° (верхний левый пример) — Ñ…Ð°Ñ€Ð°ÐºÑ‚ÐµÑ€Ð½Ð°Ñ Ñ‡ÐµÑ€Ñ‚Ð° Ñтаринных шрифтов, таких как Times или Bodoni (иÑторичеÑки ÑложилоÑÑŒ что Ñти шрифты копируют каллиграфию фикÑированного пера). С другой Ñтороны, нулевую фикÑÐ°Ñ†Ð¸Ñ Ð¸ нулевую ширину (верхний правый пример) мы можем увидеть в Ñовременных шрифтах без заÑечек, таких как Helvetica. - - Дрожание + + Дрожание - + @@ -493,7 +493,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + медленно Ñредне быÑтро @@ -507,289 +507,289 @@ splotches. This significantly expands the creative range of the tool. - дрожание = 0 - дрожание = 10 - дрожание = 30 - дрожание = 50 - дрожание = 70 - дрожание = 90 - дрожание = 20 - дрожание = 40 - дрожание = 60 - дрожание = 80 - дрожание = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - МаÑÑа и Торможение + дрожание = 0 + дрожание = 10 + дрожание = 30 + дрожание = 50 + дрожание = 70 + дрожание = 90 + дрожание = 20 + дрожание = 40 + дрожание = 60 + дрожание = 80 + дрожание = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + МаÑÑа и Торможение - + Ð’ отличие от ширины и угла, Ñти два параметра определÑÑŽÑ‚ «чувÑтвительноÑть» инÑтрумента, а не внешний вид штрихов. Так что в Ñтом разделе не будет никаких примеров. ПроÑто попробуйте риÑовать, менÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ, чтобы понÑть ÑмыÑл Ñтих наÑтроек. - + Торможение — Ñто Ñопротивление бумаги движению пера. Изначально уÑтановлено макÑимальное значение (0), и уменьшение Ñтого параметра делает бумагу «Ñкользкой». ЕÑли маÑÑа большаÑ, перо уходит в Ñторону при резких поворотах, а еÑли маÑÑа нулеваÑ, то от коротких движений перо дико ёрзает. - + Ð’ физике маÑÑа — причина инерции. Чем больше значение маÑÑÑ‹, тем больше задержка между движением вашей мыши и тем больше ÑмÑгчаютÑÑ Ñ€ÐµÐ·ÐºÐ¸Ðµ повороты штриха. Изначально Ñто значение очень мало (2), поÑтому инÑтрумент реагирует быÑтро. Ðо маÑÑу можно увеличить Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ пера и гладких линий. - - Примеры каллиграфии + + Примеры каллиграфии - + ОзнакомившиÑÑŒ Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑ‚Ñми инÑтрумента, можно начать практиковатьÑÑ Ð² наÑтоÑщей каллиграфии. ЕÑли вы новичок в Ñтом деле, найдите хорошую книгу по каллиграфии (например, «ТворчеÑÐºÐ°Ñ ÐºÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ» Малькольма Кауча) и занимайтеÑÑŒ по ней, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Inkscape. Ð’ Ñтом разделе приведено неÑколько проÑтых примеров. - + Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾ чтобы начать пиÑать буквы, нужно уÑвоить некоторые правила. ЕÑли вы ÑобралиÑÑŒ пиÑать наклонным или рукопиÑным шрифтом, то удобно иÑпользовать направлÑющие линейки (как в школьных тетрадках): - - - - - - - - - + + + + + + + + + Потом Ñледует подобрать маÑштаб так, чтобы раÑÑтоÑние между линейками ÑоответÑтвовало вашему обычному размаху. ÐаÑтройте ширину, угол — и вперёд! - + ВероÑтно, первое, что вам захочетÑÑ Ñделать как начинающему пиÑцу — Ñто попрактиковатьÑÑ Ð² напиÑании Ñлементов букв — вертикальных и горизонтальных линий, круглых и наклонных штрихов. Ðиже изображены некоторые Ñлементы букв унциального (Unicial) шрифта: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + ÐеÑколько полезных Ñоветов: - - + + ЕÑли ваша рука удобно лежит на планшете, двигайте холÑÑ‚ не ей, а другой рукой Ctrl+Ñтрелки. - - + + ЕÑли штрих получилÑÑ Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ñ‹Ð¼, проÑто избавьтеÑÑŒ от него (Ctrl+Z). ЕÑли же фигура хороша, но немного не к меÑту или размер не тот, проще временно переключитьÑÑ Ð½Ð° инÑтрумент Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ (Space) и подправить размер/форму/меÑтоположение по необходимоÑти (иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¼Ñ‹ÑˆÑŒ и клавиши клавиатуры), а затем Ñнова вернутьÑÑ Ðº каллиграфичеÑкому перу (ещё раз нажав Space). - - + + Закончив Ñ Ð½Ð°Ð¿Ð¸Ñанием Ñлова, Ñнова включите инÑтрумент выделениÑ, чтобы избавитьÑÑ Ð¾Ñ‚ неточноÑтей и неровноÑтей, но не переÑтарайтеÑÑŒ: Ñ…Ð¾Ñ€Ð¾ÑˆÐ°Ñ ÐºÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть не ÑовÑем точной, чтобы быть похожей на рукопиÑную. Удерживайте ÑÐµÐ±Ñ Ð¾Ñ‚ иÑÐºÑƒÑˆÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ буквы и Ñлементы букв: ÐºÐ°Ð¶Ð´Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть оригинальной. - + Ðиже приведены готовые примеры: - - - - - - - - - Унциальный шрифт - КаролингÑкий шрифт - ГотичеÑкий шрифт - РукопиÑный готичеÑкий шрифт - - - РазмашиÑтый готичеÑкий почерк - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Заключение + + + + + + + + + Унциальный шрифт + КаролингÑкий шрифт + ГотичеÑкий шрифт + РукопиÑный готичеÑкий шрифт + + + РазмашиÑтый готичеÑкий почерк + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Заключение - + ÐšÐ°Ð»Ð»Ð¸Ð³Ñ€Ð°Ñ„Ð¸Ñ â€” не проÑто забава, Ñто возвышенное иÑкуÑÑтво. Она может изменить ваш взглÑд на вÑÑ‘, что вы делаете и видите. ИнÑтрумент каллиграфии в Inkscape предлагает только Ñкромное введение в увлекательный мир каллиграфии. И вÑÑ‘ же, Ñ Ñтим пером приÑтно работать и оно более чем пригодно Ð´Ð»Ñ Ñерьёзных дизайнерÑких работ. РиÑуйте и получайте удовольÑтвие! - + diff --git a/share/tutorials/tutorial-calligraphy.sk.svg b/share/tutorials/tutorial-calligraphy.sk.svg index 5cfe8697e..1b81db6f8 100644 --- a/share/tutorials/tutorial-calligraphy.sk.svg +++ b/share/tutorials/tutorial-calligraphy.sk.svg @@ -40,195 +40,195 @@ Na posunutie Äalej použite Ctrl+šípka dolu - + ::KALIGRAFIA -bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + + Jeden z mnohých nástrojov, ktoré sú k dispozícii v programe Inkscape je aj kaligrafický nástroj. Tento návod vám pomôže oboznámiÅ¥ sa s tým, ako funguje a nauÄí vás niektoré základné techniky kaligrafického umenia. - + Na posúvanie stránky použite Ctrl+šípky,koliesko myÅ¡i alebo Å¥ahanie stredným tlaÄidlom. O Äalších základných úkonoch, akými sú vytváranie objektov, oznaÄenie a posúvanie, sa dozviete v návode Základy v ponuke Pomocník > Návody. - - História a Å¡týly + + História a Å¡týly - + Ak pozriete v slovníku definíciu, zistíte, že kaligrafia znamená „ozdobné písmo“ alebo „umelecké písmo alebo krasopis“. Podstata kaligrafie spoÄíva v umení vytvorenia krásneho alebo elegantného rukopisu. To môže znieÅ¥ zastraÅ¡ujúco, ale s trochou praxe môže každý zvládnuÅ¥ základy tohto umenia. - + NajstarÅ¡ie formy kaligrafie sa datujú do doby jaskynných malieb. Až do roku 1440, kedy bol vynájdený tlaÄiarenský lis, sa kaligrafia využívala na písanie kníh a Äalších publikácií. Pisári museli ruÄne prepísaÅ¥ každú kópiu vÅ¡etkých kníh a publikácií. Na písanie sa používalo husacie pero a atrament na materiály ako je pergamen. Medzi najÄastejÅ¡ie používané Å¡týly písania patria Å¡týly Rustic, Carolingian, Blackletter atÄ. Miesto, kde sa v súÄasnosti môže bežný Älovek najÄastejÅ¡ie stretnúť s kaligrafiou, sú asi svadobné oznámenia a pozvánky. - + Existujú tri hlavné Å¡týly kaligrafie: - - + + západný alebo románsky - - + + arabský - - + + Äínsky alebo orientálny - + Tento návod je zameraný viac na západnú kaligrafiu ako na ostatné dva Å¡týly, pri ktorých sa používa Å¡tetec (miesto atramentového pera), Äo nie je spôsob akým náš kaligrafický nástroj v súÄasnosti funguje. - + Oproti pisárom z minulosti máme jednu obrovskú výhodu, ktorou je príkaz VrátiÅ¥ späť: KeÄ urobíte chybu, nie je celá stránka zniÄená. Kaligrafický nástroj tiež umožňuje niektoré techniky, ktoré by nebolo možné použiÅ¥ pri klasickom písaní atramentovým perom. - - Hardvér + + Hardvér - + NajlepÅ¡ie výsledky dosiahnete, ak použijete tablet (napr. Wacom). VÄaka flexibilite nášho nástroja môžete dokonca aj pomocou myÅ¡i vytvoriÅ¥ jednoduchÅ¡iu kaligrafiu, no pri pokroÄilejÅ¡om písaní budete maÅ¥ problémy s vytvorením rýchlych Å¥ahov. - + Inkscape je schopný využiÅ¥ funkcie tabletu citlivosÅ¥ na tlak a sklon pera. Funkcie citlivosti sú v normálnom stave vypnuté, pretože je ich potrebné najskôr nastaviÅ¥. Nezabudnite tiež, že kaligrafické písanie pomocou atramentového pera nie je veľmi citlivé na tlak narozdiel od Å¡tetca. - + Ak máte tablet a chceli by ste používaÅ¥ funkcie citlivosti, je potrebné najskôr nastaviÅ¥ vaÅ¡e zariadenie. Toto nastavenie staÄí vykonaÅ¥ raz a uložiÅ¥ ho. Ak chcete zapnúť podporu tejto funkcie, musíte tablet pripojiÅ¥ pred spustením programu Inkscape a potom otvoriÅ¥ dialóg Vstupné zariadenia... v ponuke UpraviÅ¥. V tomto dialógovom okne vyberte preferované zariadenie a nastavenia pera tabletu. Po výbere týchto nastavení sa nakoniec prepnite na kaligrafický nastroj a na nástrojovej liÅ¡te zapnite tlaÄidlá tlak a sklon. Odteraz si Inkscape bude tieto nastavenia pamätaÅ¥. - + Kaligrafické pero programu Inkscape môže byÅ¥ citlivé na rýchlosÅ¥ Å¥ahu (pozri „StenÄovanie“ nižšie), takže ak používate myÅ¡, bude pravdepodobne potrebné nastaviÅ¥ tento parameter na nulu. - - Možnosti kaligrafického nástroja + + Možnosti kaligrafického nástroja - + Kaligrafický nástroj zapnete stlaÄením Ctrl+F6, tiež stlaÄením klávesy C alebo kliknutím na jeho ikonu na nástrojovej liÅ¡te. Na hornej liÅ¡te si môžete vÅ¡imnúť 7 volieb: Šírka a StenÄovanie; Uhol a Fixácia; ZakonÄenie; Chvenie a HmotnosÅ¥ a odpor. Sú tu tiež dve tlaÄidlá na zapnutie citlivosti na tlak a sklon pera tabletu. - - Šírka a stenÄovanie + + Šírka a stenÄovanie - + Táto dvojica ovláda šírku vášho pera. Hrúbka sa môže meniÅ¥ od 1 do 100 a (v predvolenom nastavení) meria sa v jednotkách v pomere k veľkosti okna úprav, ale nezávisle na mierke zobrazenia. Táto jednotka bola zvolená, pretože fyzická „merná jednotka“ v kaligrafii je podľa rozsahu pohybu vaÅ¡ej ruky a preto je vhodné maÅ¥ hrúbku hrotu vášho pera v konÅ¡tantnom pomere k veľkosti „kresliacej plochy“ a nie od skutoÄných jednotiek, ktoré by boli závislé na mierke zobrazenia. Toto správanie je voliteľné a tí, ktorí chcú miesto neho používaÅ¥ absolútne jednotky bez ohľadu na mierku zobrazenia, si ho môžu zmeniÅ¥. Ak sa chcete prepnúť do tohto režimu, použite zaÅ¡krtávacie pole na stránke s nastaveniami nástroja (môžete ju otvoriÅ¥ dvojitým kliknutím na tlaÄidlo nástroja). - + Vzhľadom na to, že šírka sa mení Äasto, môžete ju nastaviÅ¥ aj bez toho, aby ste preÅ¡li na liÅ¡tu. Použite ľavú a pravú šípku na klávesnici alebo hrúbku z tabletu, ktorý podporuje funkciu citlivosÅ¥ na tlak. Tieto šípky fungujú aj poÄas kreslenia, takže môžete postupne meniÅ¥ hrúbku uprostred Å¥ahu. - šírka=0.01, rastie.... dosahuje 0.47, klesá... späť na 0 - - + šírka=0.01, rastie.... dosahuje 0.47, klesá... späť na 0 + + Šírka pera môže tiež závisieÅ¥ od rýchlosti pohybu, ktorá mení parameter stenÄovanie. Tento parameter môže nadobúdaÅ¥ hodnoty v rozsahu od -100 do 100; nula znamená, že hrúbka je nezávislá od rýchlosti pohybu, kladné hodnoty rýchlejší Å¥ah stenÄujú a záporné hodnoty rýchlejší Å¥ah rozÅ¡irujú. Predvolená hodnota 10 znamená mierne stenÄovanie rýchlych Å¥ahov. Tu je niekoľko príkladov, ktoré boli nakreslené s hodnotami hrúbka=20 a uhol=90: - stenÄovanie = 0 (nemenná šírka) - stenÄovanie = 10 - stenÄovanie = 40 - stenÄovanie = -20 - stenÄovanie = -60 - - - - - - - - - - - - - - - - - - - - - + stenÄovanie = 0 (nemenná šírka) + stenÄovanie = 10 + stenÄovanie = 40 + stenÄovanie = -20 + stenÄovanie = -60 + + + + + + + + + + + + + + + + + + + + + Len tak pre zábavu nastavte šírku a stenÄovanie na 100 (maximum) a kreslite trhanými pohybmi. Dostanete naturalistické útvary podobné neurónom: - - - - - - - - Uhol a fixácia + + + + + + + + Uhol a fixácia - + @@ -243,15 +243,15 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - - - - uhol = 90 stupňov - uhol = 30 (predvolené) - uhol = 0 - uhol = -90 stupňov - - + + + + uhol = 90 stupňov + uhol = 30 (predvolené) + uhol = 0 + uhol = -90 stupňov + + @@ -260,34 +260,34 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - - + + Každý tradiÄný kaligrafický Å¡týl používa svoj vlastný uhol otoÄenia pera. Napríklad Unical používa uhol 25 stupňov. ZložitejÅ¡ie rukopisy a zruÄnejší kaligrafi Äasto menia uhol poÄas písania, a preto to Inkscape umožňuje pomocou šípok klávesnice hore a dole alebo tabletu, ktorý podporuje detekciu sklonu pera. Pri prvých pokusoch s kaligrafiou vÅ¡ak radÅ¡ej nechajte uhol konÅ¡tantný. Tu sú príklady Å¥ahov nakreslených s rôznym uhlom (fixácia=100): - uhol = 30 - uhol = 60 - uhol =90 - uhol = 0 - uhol = 15 - uhol = -45 - - - - - - - + uhol = 30 + uhol = 60 + uhol =90 + uhol = 0 + uhol = 15 + uhol = -45 + + + + + + + Ako môžete vidieÅ¥, Å¥ah je tenší, ak je kreslený rovnobežne s otoÄením pera a hrubší, ak je kreslený kolmo. Kladné uhly sú prirodzenejÅ¡ie pre kaligrafiu písanú pravákmi. - + @@ -299,19 +299,19 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - uhol = 30fixácia = 100 - uhol = 30fixácia = 80 - uhol = 30fixácia = 0 - - - - - - - - - - + uhol = 30fixácia = 100 + uhol = 30fixácia = 80 + uhol = 30fixácia = 0 + + + + + + + + + + @@ -320,7 +320,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -329,7 +329,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -338,7 +338,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -347,7 +347,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -356,7 +356,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -365,7 +365,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -374,7 +374,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -383,7 +383,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -392,7 +392,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -401,7 +401,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -410,7 +410,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -419,7 +419,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -428,7 +428,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -437,7 +437,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -446,7 +446,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -455,7 +455,7 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + @@ -464,24 +464,24 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - + V typografickej reÄi maximálna fixácia, teda maximálny kontrast šírky (hore vľavo), predstavuje antický rukopis ako napríklad Times alebo Bodoni (pretože ich vzhľad je napodobeninou historických kaligrafov). Nulová fixácia, teda nulový kontrast (hore vpravo), na druhej strane pripomína moderný rukopis ako napríklad Helvetica. - - Chvenie + + Chvenie - + Chvenie slúži na to, aby dodalo kaligrafickým Å¥ahom realistickejší vzhľad. Chvenie sa dá nastaviÅ¥ v hornej liÅ¡te pomocou hodnôt v rozsahu od 0 do 100. PrejaviÅ¥ sa môže od vytvorenia jemných nerovností až po vytvorenie divokých Å¡kvÅ•n a machúľ, Äo podstatne rozÅ¡iruje tvorivý rozsah tohto nástroja. - + pomaly stredne rýchlo @@ -495,289 +495,289 @@ bulia byak, buliabyak@users.sf.net a josh andler, scislac@users.sf.net - chvenie = 0 - chvenie = 10 - chvenie = 30 - chvenie = 50 - chvenie = 70 - chvenie = 90 - chvenie = 20 - chvenie = 40 - chvenie = 60 - chvenie = 80 - chvenie = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Chvenie a hmotnosÅ¥ + chvenie = 0 + chvenie = 10 + chvenie = 30 + chvenie = 50 + chvenie = 70 + chvenie = 90 + chvenie = 20 + chvenie = 40 + chvenie = 60 + chvenie = 80 + chvenie = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chvenie a hmotnosÅ¥ - + Na rozdiel od šírky a uhla tieto dva posledné parametre definujú „pocit“ z nástroja miesto vzhľadu, preto sa nedajú v tomto návode ilustrovaÅ¥. Aby ste o nich získali predstavu, bude najlepÅ¡ie, ak si ich sami vyskúšate. - + Odpor predstavuje odpor papiera, ktorý kladie pri pohybe pera. Predvolené nastavenie je na minimum (0) a zníženie tohto parametra spôsobí to, že papier bude „klzký“: v prípade, že je hmotnosÅ¥ pera veľká, pero má tendenciu utekaÅ¥ do ostrých zákrut, keÄ je hmotnosÅ¥ nulová, zaÄne sa sa pero aj pri malých pohyboch krútiÅ¥. - + Vo fyzike je hmotnosÅ¥ to, Äo spôsobuje zotrvaÄnosÅ¥. VäÄÅ¡ia hmotnosÅ¥ pri kaligrafickom nástroji programu Inkscape spôsobí väÄÅ¡ie oneskorenie za kurzorom myÅ¡i a tým sa v Å¥ahu vyhladzujú ostré prudké zmeny pohybu a trhnutia. Predvolená hodnota tohto nastavenia je malá (2), preto je nástroj rýchly a reaktívny. Ak chcete pero spomaliÅ¥ a dosiahnuÅ¥ plynulejÅ¡ie Å¥ahy, zvýšte túto hodnotu. - - Príklady kaligrafie + + Príklady kaligrafie - + Teraz, keÄ už poznáte základné možnosti nástroja, môžete sa pokúsiÅ¥ vytvoriÅ¥ naozajstnú kaligrafiu. Ak toto umenie eÅ¡te nepoznáte, vezmite si nejakú dobrú knihu a Å¡tudujte ju spolu s programom Inkscape. V tejto Äasti si ukážeme niekoľko jednoduchých príkladov. - + Predtým, než zaÄnete kresliÅ¥ písmená, vytvorte si dve vodiace Äiary. Ak chcete písaÅ¥ so sklonom, vytvorte si dve Å¡ikmé vodiace Äiary, napríklad takto: - - - - - - - - - + + + + + + + + + Potom zvoľte mierku zobrazenia tak, aby vodiace Äiary Äo najviac zodpovedali vášmu prirodzenému pohybu ruky, nastavte šírku a uhol a môžte ísÅ¥ na to! - + Pravdepodobne prvou vecou, ktorú by ste sa ako zaÄínajúci kaligrafi mali nauÄiÅ¥, je písanie základných prvkov písmen — vodorovných, zvislých, zaoblených a Å¡ikmých Å¥ahov. Tu je niekoľko prvkov písmen z rukopisu Unicial: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Niekoľko užitoÄných rád: - - + + Ak máte ruku pohodlne položenú na tablete, nehýbte ňou. Miesto toho po dokonÄení písmena radÅ¡ej posuňte plátno (Ctrl+šípka) vaÅ¡ou ľavou rukou. - - + + Ak je váš posledný Å¥ah zlý, tak ho vráťte (Ctrl+Z). KeÄ je tvar správny, ale umiestnenie alebo veľkosÅ¥ je trochu odliÅ¡ná, je dobré prepnúť na nástroj Výber (medzera) a posunúť, natiahnuÅ¥ alebo otoÄiÅ¥ útvar podľa potreby (pomocou myÅ¡i alebo klávesnice). Potom znova stlaÄte medzeru, ktorá opäť zapne kaligrafický nástroj. - - + + Po dokonÄení slova sa prepnite opäť na nástroj Výber, nastavte pravidelnosÅ¥ paliÄiek a rozostup písmen. Nepreháňajte to vÅ¡ak. Dobrá kaligrafia musí vyzeraÅ¥ ako nieÄo napísané rukou. Vyhnite sa kopírovaniu písmen a ich jednotlivých prvkov. Každý Å¥ah musí byÅ¥ jedineÄný. - + Tu je niekoľko ukážok hotových písmen: - - - - - - - - - rukopis Unicial - rukopis Carolingian - rukopis Gothic - rukopis Bâtarde - - - rukopis Flourished Italic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Zhrnutie + + + + + + + + + rukopis Unicial + rukopis Carolingian + rukopis Gothic + rukopis Bâtarde + + + rukopis Flourished Italic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Zhrnutie - + Kaligrafia nie je len zábava, je to hlboko duchovné umenie, ktoré môže zmeniÅ¥ váš pohľad na vÅ¡etko, Äo robíte a vidíte. Kaligrafický nástroj programu Inkscape môže slúžiÅ¥ len ako skromný úvod. Aj napriek tomu je veľmi príjemný na hranie a môže byÅ¥ užitoÄný aj v reálnom prevedení. Užite si ho! - + diff --git a/share/tutorials/tutorial-calligraphy.sl.svg b/share/tutorials/tutorial-calligraphy.sl.svg index a291af3f7..46df6101c 100644 --- a/share/tutorials/tutorial-calligraphy.sl.svg +++ b/share/tutorials/tutorial-calligraphy.sl.svg @@ -40,104 +40,104 @@ Uporabite Ctrl+puÅ¡Äica navzdol za drsenje - + ::KALIGRAFIJA -bulia byak, buliabyak@users.sf.net in josh andler, scislac@users.sf.net - + + Eno od mnogih imenitnih Inkscapovih orodij je kaligrafsko orodje. Ta vodiÄ vam bo pomagal pri spoznavanju z njegovimi funkcijami, ter vas uvedel v osnove in tehnike kaligrafije. - + Za drsenje po strani navzdol uporabite Ctrl+smerne tipke, miÅ¡kin koleÅ¡Äek ali povlek s srednjim gumbom. Za osnove ustvarjanja, izbiranja in preoblikovanja predmetov si oglejte osnovni vodnik pri PomoÄi in vodnikih. - - Zgodovina in slogi + + Zgodovina in slogi - + Po definiciji je kaligrafija "pisanje z lepimi, Äitljivimi Ärkami" oziroma "lepopisje". V sploÅ¡nem pa lahko reÄemo, da je kaligrafija veÅ¡Äina lepega in elegantnega pisanja. To se morda sliÅ¡i zahtevno, vendar lahko prav vsak z nekaj vaje zaobvlada osnove te umetnosti. - + Zgodnje oblike kaligrafije segajo v Äas jamskega slikarstva in vse do iznajdbe tiska (približno 1440 n.Å¡t.) je bila kaligrafija edini naÄin, s katerim so bile narejene knjige in druge publikacije. Vsak posamezen izvod je moral pisar s peresom in Ärnilom roÄno prenesti na pergament. Pisali so v rustiki, karolinÅ¡ki minuskuli, gotici, itd. Dandanes se kaligrafija v glavnem uporablja le Å¡e na raznih vabilih, npr. vabilu na poroko. - + Obstajajo trije glavni stili kaligrafije: - - + + zahodni oz. romanski - - + + arabski - - + + kitajski oz. orientalski - + Ta vodiÄ se v glavnem osredotoÄa na zahodno kaligrafijo in le bežno preleti druga dva stila, ki se, namesto k uporabi peresa, nagibata k uporabi ÄopiÄa, Äesar pa naÅ¡e orodje trenutno ne omogoÄa. - + Pred pisarskimi mojstri iz preteklosti nam Scribus nudi eno veliko prednost: ukaz Razveljavi; Äe naredite napako, vam to ne uniÄi veÄih ur dela. Kaligrafsko orodje v Inkscapu prav tako omogoÄa nekatere tehnike, ki bi s tradicionalnim peresom in Ärnilom ne bile mogoÄe. - - Strojna oprema + + Strojna oprema - + NajboljÅ¡e rezultate boste dosegli z uporabo grafiÄne tablice in peresa (npr. Wacom). Spodobno kaligrafijo boste ustvarili tudi z miÅ¡ko, vendar boste imeli težave pri ustvarjanju hitrih krožnih potez. - + Inkscape Å¡e ne uporablja obÄutljivosti na pritisk in obÄutljivosti na nagib, ki jo omogoÄajo nekatere grafiÄne tablice. Funkcije obÄutljivosti so privzeto izklopljene, saj zahtevajo umerjanje. UpoÅ¡tevajte tudi, da je tradicionalno kaligrafsko pero (v nasprotju s ÄopiÄem) skoraj neobÄutljivo na pritisk. - + @@ -152,17 +152,17 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + Inkscapovo kaligrafsko pero je lahko obÄutljivo na hitrost poteze (glejte TanjÅ¡anje spodaj), zaradi Äesar boste ob uporabi miÅ¡ke ta parameter verjetno želeli zmanjÅ¡ati na niÄelno vrednost. - - Kaligrafsko orodje - opcije + + Kaligrafsko orodje - opcije - + @@ -174,58 +174,58 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and drawing tablets). - - Å irina in tanjÅ¡anje + + Å irina in tanjÅ¡anje - + Ti možnosti nadzirata Å¡irino vaÅ¡ega peresa. Å irina lahko variira od 1 do 100 in se (privzeto) meri v enotah, ki so relativne glede na velikost vaÅ¡ega delovnega okna, vendar neodvisne od poveÄave. Ker je v kaligrafiji naravna "merska enota" obseg premika roke, je smiselno in pripravno imeti Å¡irino peresa v konstantnem razmerju do velikosti vaÅ¡e "risarske deske" in ne v kaki realni enoti, ki bi bila odvisna od poveÄave. Vendar pa je to vedenje na voljo kot dodatna izbira in ga je mogoÄe spremeniti, Äe imate raje absolutne enote ne glede na poveÄavo. Za preklop v ta naÄin uporabite potrditveno polje na strani Možnosti tega orodja (odprete jo lahko z dvoklikom na gumb orodja). - + Ker se Å¡irino peresa pogosto spreminja, jo lahko spremenite brez uporabe orodne vrstice in sicer z uporabo desne in leve smerne tipke. NajboljÅ¡e pri teh tipkah je, da delujejo med samim risanje, kar pomeni, da lahko Å¡irino peresa spreminjate postopno, med vleÄenjem poteze: - width=1, growing.... reaching 47, decreasing... back to 0 - - + width=1, growing.... reaching 47, decreasing... back to 0 + + Å irina peresa pa je, glede na parameter tanjÅ¡anja, lahko odvisna tudi od hitrosti. Ta parameter lahko zavzame vrednosti od -1 do 1, pri Äemer vrednost 0 pomeni, da je Å¡irina neodvisna od hitrosti, pozitivne vrednosti naredijo hitrejÅ¡e poteze ožje, negativne vrednosti pa naredijo hitrejÅ¡e poteze Å¡irÅ¡e. Privzeta vrednost 10 pomeni tanjÅ¡anje hitrih potez. Tu je nekaj primerov, pri vseh je Å¡irina = 0,2 in kot = 90 stopinj: - tanjÅ¡anje = 0 (enotna Å¡irina) - thinning = 10 - thinning = 40 - thinning = -20 - thinning = -60 - - - - - - - - - - - - - - - - - - - - - + tanjÅ¡anje = 0 (enotna Å¡irina) + thinning = 10 + thinning = 40 + thinning = -20 + thinning = -60 + + + + + + + + + + + + + + + + + + + + + @@ -234,16 +234,16 @@ drawing tablets). jerky movements to get strangely naturalistic, neuron-like shapes: - - - - - - - - Kot in stalnost + + + + + + + + Kot in stalnost - + @@ -258,15 +258,15 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - - - kot = 90 st - kot = 30 (privzeto) - kot = 0 - kot = -90 st - - + + + + kot = 90 st + kot = 30 (privzeto) + kot = 0 + kot = -90 st + + @@ -275,8 +275,8 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - + + @@ -290,26 +290,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - kot = 30 - kot = 60 - kot = 90 - kot = 0 - kot = 15 - kot = -45 - - - - - - - + kot = 30 + kot = 60 + kot = 90 + kot = 0 + kot = 15 + kot = -45 + + + + + + + Kot lahko vidite, je poteza najtanjÅ¡a, ko je risana vzporedno s svojim kotom, in najdebelejÅ¡a, ko je risana pravokotno nanj. Za desniÄarje so pozitivni koti najbolj naravni in zato tudi najbolj obiÄajni. - + @@ -326,19 +326,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - kot = 30fixation = 100 - kot = 30fixation = 80 - kot = 30nagibanje = 0 - - - - - - - - - - + kot = 30fixation = 100 + kot = 30fixation = 80 + kot = 30nagibanje = 0 + + + + + + + + + + @@ -347,7 +347,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -356,7 +356,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -365,7 +365,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -374,7 +374,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -383,7 +383,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -392,7 +392,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -401,7 +401,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -410,7 +410,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -419,7 +419,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -428,7 +428,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -437,7 +437,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -446,7 +446,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -455,7 +455,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -464,7 +464,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -473,7 +473,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -482,7 +482,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -491,17 +491,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + Tipografsko gledano sta najveÄja stalnost in najveÄji kontrast Å¡irine poteze (zgoraj levo) znaÄilnosti antiÄnih tipografij s serifi (npr. Times ali Bodoni, ki sta že historiÄno imitaciji kaligrafije s peresom). Stalnost = 0 in niÄelni kontrast Å¡irine (zgoraj desno) pa je znaÄilnost modernih tipografij brez serifov (npr. Helvetica). - - Tresenje + + Tresenje - + @@ -512,7 +512,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + poÄasno srednje hitro @@ -526,59 +526,59 @@ splotches. This significantly expands the creative range of the tool. - tresenje = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + tresenje = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + Zadnja dva parametra, za razliko od kota in Å¡irine, definirata kako orodje "Äuti" in ne vplivata na njegov vizualni uÄinek. V tem delu ni nikakrÅ¡nih ilustracij; namesto tega maso in upor raje raziÅ¡Äite sami! - + @@ -589,7 +589,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer wiggle makes the pen to wiggle wildly. - + @@ -601,39 +601,39 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma get slower and smoother pen. - - Kaligrafski primeri + + Kaligrafski primeri - + Zdaj, ko poznate osnovne zmožnosti orodja, lahko s kaligrafijo poizkusite sami. ÄŒe ste v tem novi, si priskrbite dobro kaligrafsko knjigo ter jo predelajte z Inkscapom. Ta del vam bo pokazal nekaj enostavnih primerov. - + Na zaÄetku je za pisanje Ärk potrebno ustvariti nekaj ravnil, po katerih se boste ravnali. ÄŒe boste pisali v poÅ¡evni pisavi, potrebujete tudi nekaj poÅ¡evnih smernic, npr.: - - - - - - - - - + + + + + + + + + Nato poveÄajte platno, da bo viÅ¡ina med ravniloma ustrezala vaÅ¡emu najbolj naravnemu obsegu premika roke, prilagodite Å¡irino ter kot in… Ustvarjajte! - + @@ -643,184 +643,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Nekaj uporabnih nasvetov: - - + + ÄŒe imate roko udobno nameÅ¡Äeno na tablici, je ne premikajte. Namesto tega z levico premaknite platno po vsaki Ärki, ki jo napiÅ¡ete (pritisnite Ctrl+smerne tipke). - - + + ÄŒe z vaÅ¡o zadnjo potezo niste zadovoljni, jo razveljavite (pritisnite Ctrl+Z). ÄŒe pa je oblika dobra, vendar odstopata položaj ali velikost, zaÄasno preklopite na orodje Izberi (pritisnite preslednico) in premaknite, raztegnite ali zavrtite potezo kolikor je potrebno (z uporabo miÅ¡ke ali tipk). Za vrnitev na kaligrafsko orodje ponovno pritisnite preslednico. - - + + Ko napiÅ¡ete besedo, ponovno preklopite v orodje Izberi in prilagodite enotnost in razmak med znaki. Vendar pa nikar ne pretiravajte. Dobra kaligrafija mora do neke mere ohraniti videz roÄne pisave. Uprite se skuÅ¡njavi kopiranja Ärk in Ärkovnih elementov; vsaka poteza naj bo originalna! - + Nekaj zakljuÄenih Ärkovnih primerov: - - - - - - - - - Unicialna pisava - KarolinÅ¡ka pisava - Gotska pisava - Bâtardska pisava - - - Razcvetela italiÄna pisava - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ZakljuÄek + + + + + + + + + Unicialna pisava + KarolinÅ¡ka pisava + Gotska pisava + Bâtardska pisava + + + Razcvetela italiÄna pisava + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ZakljuÄek - + Kaligrafija ni le zabava, temveÄ globoko duhovna veÅ¡Äina, ki lahko spremeni vaÅ¡ pogled na vse, kar delate in vidite. Inkscapovo kaligrafsko orodje služi le kot skromno uvajanje v vse to. In Äeprav se je z njim lepo igrati, je lahko uporabno tudi v resniÄnem oblikovanju. Uživajte! - + diff --git a/share/tutorials/tutorial-calligraphy.svg b/share/tutorials/tutorial-calligraphy.svg index a9465bd22..ebd864c90 100644 --- a/share/tutorials/tutorial-calligraphy.svg +++ b/share/tutorials/tutorial-calligraphy.svg @@ -40,11 +40,11 @@ Use Ctrl+down arrow to scroll - + ::CALLIGRAPHY -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + @@ -54,7 +54,7 @@ will help you become acquainted with how that tool works, as well as demonstrate basic techniques of the art of Calligraphy. - + @@ -64,10 +64,10 @@ drag to scroll the page down. For basics of object creation, selectio transformation, see the Basic tutorial in Help > Tutorials. - - History and Styles + + History and Styles - + @@ -78,7 +78,7 @@ beautiful or elegant handwriting. It may sound intimidating, but with a little p anyone can master the basics of this art. - + @@ -92,7 +92,7 @@ Carolingian, Blackletter, etc. Perhaps the most common place where the average p will run across calligraphy today is on wedding invitations. - + @@ -100,8 +100,8 @@ will run across calligraphy today is on wedding invitations. There are three main styles of calligraphy: - - + + @@ -109,8 +109,8 @@ will run across calligraphy today is on wedding invitations. Western or Roman - - + + @@ -118,8 +118,8 @@ will run across calligraphy today is on wedding invitations. Arabic - - + + @@ -127,7 +127,7 @@ will run across calligraphy today is on wedding invitations. Chinese or Oriental - + @@ -137,7 +137,7 @@ a brush (instead of a pen with nib), which is not how our Calligraphy tool currently functions. - + @@ -148,10 +148,10 @@ ruined. Inkscape's Calligraphy tool also enables some techniques which woul possible with a traditional pen-and-ink. - - Hardware + + Hardware - + @@ -162,7 +162,7 @@ some fairly intricate calligraphy, though there will be some difficulty producin sweeping strokes. - + @@ -173,7 +173,7 @@ default because they require configuration. Also, keep in mind that calligraphy quill or pen with nib are also not very sensitive to pressure, unlike a brush. - + @@ -188,7 +188,7 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + @@ -198,10 +198,10 @@ the stroke (see “Thinning†below), so if you are using a mouse, you'll zero this parameter. - - Calligraphy Tool Options + + Calligraphy Tool Options - + @@ -213,10 +213,10 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and drawing tablets). - - Width & Thinning + + Width & Thinning - + @@ -233,7 +233,7 @@ to this mode, use the checkbox on the tool's Preferences page (you can open by double-clicking the tool button). - + @@ -245,9 +245,9 @@ these keys is that they work while you are drawing, so you can change the width of your pen gradually in the middle of the stroke: - width=1, growing.... reaching 47, decreasing... back to 0 - - + width=1, growing.... reaching 47, decreasing... back to 0 + + @@ -260,32 +260,32 @@ thinning of fast strokes. Here are a few examples, all drawn with width=20 and angle=90: - thinning = 0 (uniform width) - thinning = 10 - thinning = 40 - thinning = -20 - thinning = -60 - - - - - - - - - - - - - - - - - - - - - + thinning = 0 (uniform width) + thinning = 10 + thinning = 40 + thinning = -20 + thinning = -60 + + + + + + + + + + + + + + + + + + + + + @@ -294,16 +294,16 @@ angle=90: jerky movements to get strangely naturalistic, neuron-like shapes: - - - - - - - - Angle & Fixation + + + + + + + + Angle & Fixation - + @@ -323,15 +323,15 @@ the angle is determined by the tilt of the pen. - - - - angle = 90 deg - angle = 30 (default) - angle = 0 - angle = -90 deg - - + + + + angle = 90 deg + angle = 30 (default) + angle = 0 + angle = -90 deg + + @@ -340,8 +340,8 @@ the angle is determined by the tilt of the pen. - - + + @@ -355,19 +355,19 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - angle = 30 - angle = 60 - angle = 90 - angle = 0 - angle = 15 - angle = -45 - - - - - - - + angle = 30 + angle = 60 + angle = 90 + angle = 0 + angle = 15 + angle = -45 + + + + + + + @@ -377,7 +377,7 @@ and at its broadest when drawn perpendicular. Positive angles are the most natural and traditional for right-handed calligraphy. - + @@ -394,19 +394,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - angle = 30fixation = 100 - angle = 30fixation = 80 - angle = 30fixation = 0 - - - - - - - - - - + angle = 30fixation = 100 + angle = 30fixation = 80 + angle = 30fixation = 0 + + + + + + + + + + @@ -415,7 +415,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -424,7 +424,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -433,7 +433,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -442,7 +442,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -451,7 +451,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -460,7 +460,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -469,7 +469,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -478,7 +478,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -487,7 +487,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -496,7 +496,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -505,7 +505,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -514,7 +514,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -523,7 +523,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -532,7 +532,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -541,7 +541,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -550,7 +550,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -559,7 +559,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -571,10 +571,10 @@ fixation and zero width contrast (above right), on the other hand, suggest moder serif typefaces such as Helvetica. - - Tremor + + Tremor - + @@ -585,7 +585,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + slow medium fast @@ -599,52 +599,52 @@ splotches. This significantly expands the creative range of the tool. - tremor = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + tremor = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + @@ -654,7 +654,7 @@ than affect its visual output. So there won't be any illustrations in this instead just try them yourself to get a better idea. - + @@ -665,7 +665,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer wiggle makes the pen to wiggle wildly. - + @@ -677,10 +677,10 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma get slower and smoother pen. - - Calligraphy examples + + Calligraphy examples - + @@ -690,7 +690,7 @@ calligraphy. If you are new to this art, get yourself a good calligraphy book an it with Inkscape. This section will show you just a few simple examples. - + @@ -700,15 +700,15 @@ going to write in a slanted or cursive hand, add some slanted guides across the rulers as well, for example: - - - - - - - - - + + + + + + + + + @@ -717,7 +717,7 @@ rulers as well, for example: movement range, adjust width and angle, and off you go! - + @@ -727,24 +727,24 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -752,8 +752,8 @@ stems. Here are some letter elements for the Uncial hand: Several useful tips: - - + + @@ -762,8 +762,8 @@ stems. Here are some letter elements for the Uncial hand: scroll the canvas (Ctrl+arrow keys) with your left hand after finishing each letter. - - + + @@ -775,8 +775,8 @@ nudge/scale/rotate it as needed (using mouse or keys), then press - - + + @@ -787,7 +787,7 @@ irregular handwritten look. Resist the temptation to copy over letters and lett elements; each stroke must be original. - + @@ -795,122 +795,122 @@ elements; each stroke must be original. And here are some complete lettering examples: - - - - - - - - - Unicial hand - Carolingian hand - Gothic hand - Bâtarde hand - - - Flourished Italic hand - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Conclusion + + + + + + + + + Unicial hand + Carolingian hand + Gothic hand + Bâtarde hand + + + Flourished Italic hand + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Conclusion - + @@ -921,7 +921,7 @@ calligraphy tool can only serve as a modest introduction. And yet it is very nice to play with and may be useful in real design. Enjoy! - + diff --git a/share/tutorials/tutorial-calligraphy.vi.svg b/share/tutorials/tutorial-calligraphy.vi.svg index deb56b9f5..f7e4a142b 100644 --- a/share/tutorials/tutorial-calligraphy.vi.svg +++ b/share/tutorials/tutorial-calligraphy.vi.svg @@ -40,104 +40,104 @@ Use Ctrl+down arrow to scroll - + ::THƯ PHÃP -bulia byak, buliabyak@users.sf.net and josh andler, scislac@users.sf.net - + + Má»™t trong những công cụ độc đáo mà Inkscape cung cấp cho bạn là công cụ Thư pháp, công cụ tạo nét viết đẹp. Bài thá»±c hành này sẽ hướng dẫn bạn làm quen vá»›i cách thức làm việc vá»›i công cụ Thư pháp, cÅ©ng như má»™t số kỹ thuật cÆ¡ bản cá»§a thư pháp. - + Dùng Ctrl+mÅ©i tên, xoay chuá»™t, hoặc kéo chuá»™t giữa để cuá»™n xuống dưới. Xem phần hướng dẫn CÆ¡ bản trong Trợ giúp > Hướng dẫn để biết cách tạo các đối tượng, vùng chá»n và chuyển dạng đối tượng. - - Vài nét lịch sá»­ vá» Thư pháp + + Vài nét lịch sá»­ vá» Thư pháp - + Trong từ Ä‘iển, Thư pháp có nghÄ©a là thuật viết chữ đẹp, nghệ thuật tạo ra chữ viết tay đẹp và thanh nhã. Nghe có vẻ phức tạp, nhưng nếu bạn bá» thá»i gian tập má»™t chút, bạn có thể lãnh há»™i nghệ thuật này ngay. - + Thư pháp đã xuất hiện ngay trong các bức vẽ trên vách hang từ thá»i cổ đại. Cho tá»›i năm 1440, khi mà chưa có công nghệ in sắp chữ, thư pháp là cách con ngưá»i dùng để trình bày sách và các giấy tá» công văn khác. Ngưá»i thợ chép sách đã phải viết tay từng bản sao má»™t, bằng bút lông chim chấm vào má»±c, viết lên giấy da. Các kiểu chữ thá»i đó bao gồm Rustic, Carolingian, Blackletter... Ngày nay, Thư pháp vẫn còn được dùng để viết thiếp cưới, hoặc trang trí biểu hình, biểu tượng, thương hiệu. - + Có 3 phong cách thư pháp chính: - - + + Châu Âu và La Mã - - + + A-rập - - + + Trung Quốc và các nước phương Äông - + Công cụ Thư pháp trong Inkscape mô phá»ng thư pháp Châu Âu và La Mã, sá»­ dụng bút có ngòi nhá»n như bút má»±c hoặc bút lông chim. Công cụ Thư pháp còn cho phép ta thá»±c hiện má»™t số kỹ thuật mà ta sẽ chẳng bao giá» làm được bằng bút và má»±c. - + Vá»›i Inkscape, bạn có thể dùng lệnh Huá»· bước ngay khi thá»±c hiện nhầm 1 thao tác nào đó. Và công cụ Thư pháp trong Inkscape còn cho phép ta làm nhiá»u Ä‘iá»u mà vá»›i giấy và bút lông chim, ta không bao giá» làm được. - - Phần cứng + + Phần cứng - + Nếu có má»™t bàn vẽ Ä‘iện tá»­ (e.g. Wacom), bạn sẽ dá»… dàng làm việc vá»›i công cụ Thư pháp hÆ¡n. Bạn cÅ©ng có thể dùng chuá»™t, nhưng so vá»›i bàn vẽ, chuá»™t sẽ không thể linh hoạt và nhạy bằng. - + Inkscape cho phép sá»­ dụng các chức năng cảm ứng lá»±c ấn và cảm ứng góc nghiêng cá»§a bàn vẽ Ä‘iện tá»­, nếu có. Tuy nhiên các chức năng này mặc định là không được sá»­ dụng, vì chúng ta phải cấu hình thiết bị trước khi dùng. Và bút lông chim hay bút má»±c thưá»ng không bị ảnh hưởng nhiá»u bởi lá»±c ấn bút, khác hẳn vá»›i bút lông dùng trong thư pháp Trung Quốc. - + @@ -152,17 +152,17 @@ to the Calligraphy tool and toggle the toolbar buttons for pressure and tilt. Fr now on, Inkscape will remember those settings on startup. - + Bút thư pháp cá»§a Inkscape cÅ©ng rất nhạy vá»›i tốc độ nét vẽ được thá»±c hiện (xem phần "Thu hẹp" ở dưới), nên nếu dùng chuá»™t thì bạn nên đặt tham số này là 0. - - Các tuỳ chá»n cho công cụ Thư pháp + + Các tuỳ chá»n cho công cụ Thư pháp - + @@ -174,26 +174,26 @@ There are also two buttons to toggle tablet Pressure and Tilt sensitivity on and drawing tablets). - - Rá»™ng & Thu hẹp + + Rá»™ng & Thu hẹp - + Hai tham số này cho phép bạn Ä‘iá»u chỉnh độ rá»™ng cá»§a ngòi bút. Giá trị Rá»™ng trong khoảng từ 1 đến 100 và (mặc định) được Ä‘o bằng đơn vị tương đối so vá»›i kích cỡ cá»§a vùng vẽ, nhưng không phụ thuá»™c vào mức độ thu phóng. Äó là do đơn vị Ä‘o đối vá»›i công cụ Thư pháp là phạm vi di chuyển cá»§a tay bạn, nên sẽ thuận lợi hÆ¡n khi vẽ bằng bút có độ rá»™ng nét tỉ lệ không đổi vá»›i kích cỡ cá»§a bản vẽ, và không bị phụ thuá»™c vào độ thu phóng. Tuy nhiên chế độ này có thể thay đổi được, nếu bạn bấm đúp chuá»™t vào nút Thư pháp trên thanh công cụ, và chá»n ô Dùng đơn vị tuyệt đối trong phần Tuỳ chỉnh cho công cụ Thư pháp. - + Äá»™ rá»™ng ngòi bút có thể thay đổi thông qua các phím mÅ©i tên trái và phải hoặc qua lá»±c nhấn lên bàn vẽ nếu chức năng cảm ứng lá»±c ấn được bật, nên bạn có thể Ä‘iá»u chỉnh nó mà không cần phải truy cập vào Thanh Ä‘iá»u khiển công cụ. Các phím này làm việc ngay khi bạn vẽ, nên bạn có thể thay đổi độ rá»™ng cá»§a nét vẽ từ từ trong lúc rê chuá»™t: - width=1, growing.... reaching 47, decreasing... back to 0 - - + width=1, growing.... reaching 47, decreasing... back to 0 + + @@ -206,32 +206,32 @@ thinning of fast strokes. Here are a few examples, all drawn with width=20 and angle=90: - Thu hẹp = 0 (chiá»u rá»™ng cố định) - thinning = 10 - thinning = 40 - thinning = -20 - thinning = -60 - - - - - - - - - - - - - - - - - - - - - + Thu hẹp = 0 (chiá»u rá»™ng cố định) + thinning = 10 + thinning = 40 + thinning = -20 + thinning = -60 + + + + + + + + + + + + + + + + + + + + + @@ -240,16 +240,16 @@ angle=90: jerky movements to get strangely naturalistic, neuron-like shapes: - - - - - - - - Góc & Äá»™ cố định + + + + + + + + Góc & Äá»™ cố định - + @@ -264,15 +264,15 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - - - Góc = 90 độ - Góc = 30 (mặc định) - Góc = 0 - Góc = -90 độ - - + + + + Góc = 90 độ + Góc = 30 (mặc định) + Góc = 0 + Góc = -90 độ + + @@ -281,8 +281,8 @@ jerky movements to get strangely naturalistic, neuron-like shapes: - - + + @@ -296,26 +296,26 @@ keeping the angle constant will work best. Here are examples of strokes drawn at different angles (fixation = 100): - Góc = 30 - Góc = 60 - Góc = 90 - Góc = 0 - Góc = 15 - Góc = -45 - - - - - - - + Góc = 30 + Góc = 60 + Góc = 90 + Góc = 0 + Góc = 15 + Góc = -45 + + + + + + + Như bạn thấy, nét bút trở nên mảnh nhất khi được vẽ song song vá»›i Góc đặt bút, và rá»™ng nhất khi vẽ vuông góc vá»›i Góc đặt bút. Các góc dương thưá»ng cho cảm giác tá»± nhiên, mô phá»ng nét chữ viết bằng tay phải. - + @@ -332,19 +332,19 @@ perpendicular to the stroke, and Angle has no effect anymore: - Góc = 30fixation = 100 - Góc = 30fixation = 80 - Góc = 30Äá»™ cố định = 0 - - - - - - - - - - + Góc = 30fixation = 100 + Góc = 30fixation = 80 + Góc = 30Äá»™ cố định = 0 + + + + + + + + + + @@ -353,7 +353,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -362,7 +362,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -371,7 +371,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -380,7 +380,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -389,7 +389,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -398,7 +398,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -407,7 +407,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -416,7 +416,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -425,7 +425,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -434,7 +434,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -443,7 +443,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -452,7 +452,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -461,7 +461,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -470,7 +470,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -479,7 +479,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -488,7 +488,7 @@ perpendicular to the stroke, and Angle has no effect anymore: - + @@ -497,17 +497,17 @@ perpendicular to the stroke, and Angle has no effect anymore: - + Khi bạn đặt Äá»™ cố định bằng 1, bạn sẽ thu được các mặt chữ cổ như Times hoặc Bodoni, giống như phần bên trái hình trên (vì chúng là các mặt chữ mô phá»ng thư pháp được tạo ra vá»›i nét bút không đổi). Khi đặt Fixation bằng 0, ta thu được các mặt chữ hiện đại như Sans Serif hoặc Helvetica, giống phần bên phải. - - Nét run: + + Nét run: - + @@ -518,7 +518,7 @@ affect your strokes producing anything from slight unevenness to wild blotches a splotches. This significantly expands the creative range of the tool. - + chậm vừa nhanh @@ -532,59 +532,59 @@ splotches. This significantly expands the creative range of the tool. - Nét run = 0 - tremor = 10 - tremor = 30 - tremor = 50 - tremor = 70 - tremor = 90 - tremor = 20 - tremor = 40 - tremor = 60 - tremor = 80 - tremor = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Wiggle & Mass + Nét run = 0 + tremor = 10 + tremor = 30 + tremor = 50 + tremor = 70 + tremor = 90 + tremor = 20 + tremor = 40 + tremor = 60 + tremor = 80 + tremor = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wiggle & Mass - + Không giống các tham số vỠđộ rá»™ng và góc ở phần trước, 2 tham số này định nghÄ©a cách thức công cụ Thư pháp “cảm nhận†hÆ¡n là vẽ ra má»™t thứ gì trên tài liệu cá»§a bạn. Cho nên trong phần này sẽ không có hình minh há»a nào cả, và bạn sẽ phải thá»­ thá»±c hành nhiá»u lần để hiểu hÆ¡n vá» chúng. - + @@ -595,7 +595,7 @@ if the mass is big, the pen tends to run away on sharp turns; if the mass is zer wiggle makes the pen to wiggle wildly. - + @@ -607,39 +607,39 @@ quite small (2) so that the tool is fast and responsive, but you can increase ma get slower and smoother pen. - - Các ví dụ vá» Thư pháp + + Các ví dụ vá» Thư pháp - + Sau khi đã hiểu sÆ¡ sÆ¡ vá» các khả năng cá»§a công cụ Thư pháp, bạn hãy dùng nó để thá»­ tạo ra má»™t tác phẩm thư pháp xem sao! Nếu bạn chưa bao giá» tập vẽ thư pháp, hãy kiếm cho mình má»™t cuốn sách hay vá» nghệ thuật này và há»c nó trên Inkscape. Chương này cho bạn xem má»™t số ví dụ vá» thư pháp. - + Trước hết, để viết má»™t lá thư, bạn cần phải tạo ra má»™t cặp thước kẻ để định vị nét bút. Nếu bạn viết chữ nghiêng hay chữ thảo, hãy thêm má»™t số đưá»ng gióng nghiêng giữa 2 thước kẻ. Ví dụ: - - - - - - - - - + + + + + + + + + Sau đó phóng to để sao cho chiá»u cao giữa 2 thước kẻ tương ứng vá»›i độ di chuyển cổ tay cá»§a bạn, rồi đặt các tham số độ rá»™ng và góc trước khi viết! - + @@ -649,184 +649,184 @@ elements of letters — vertical and horizontal stems, round strokes, slanted stems. Here are some letter elements for the Uncial hand: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + Má»™t số mẹo nhá»: - - + + Nếu tay bạn đặt thoải mái trên bàn viết, đừng di chuyển nó. Thay vào đó, hãy cuá»™n khung vẽ (Ctrl+mÅ©i tên) bằng tay trái sau khi hoàn tất má»—i chữ. - - + + Nếu nét bút cuối cùng cá»§a bạn trông xấu, hãy sá»­a lại bằng lệnh Há»§y bước (Ctrl+Z). Tuy nhiên, nếu hình dạng cá»§a nó đạt chất lượng nhưng vị trí cÅ©ng như kích thước hÆ¡i bị sai, hãy chuyển sang công cụ Chá»n bằng phím cách và di chuyển, co giãn hay xoay lại nét vẽ cho vừa ý. Sau đó nhấn phím cách thêm lần nữa để chuyển lại vá» công cụ Thư pháp. - - + + Sau khi hoàn tất má»™t từ, hãy chuyển sang công cụ Chá»n và Ä‘iá»u chỉnh lại cho phù hợp. Äừng làm quá, vì các bản thư pháp đẹp phải giữ lại tính bất quy tắc cá»§a nét vẽ tay. Tránh vá»™i vàng sao chép các chữ và các thành phần cá»§a chữ: hãy vẽ những nét nguyên bản. - + Và đây là má»™t số ví dụ hoàn chỉnh vá» Thư pháp: - - - - - - - - - chữ Unicial - chữ Carolingian - chữ Gothic - chữ Bâtarde - - - chữ nghiêng trang trí - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Kết luận + + + + + + + + + chữ Unicial + chữ Carolingian + chữ Gothic + chữ Bâtarde + + + chữ nghiêng trang trí + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kết luận - + Thư pháp là má»™t công cụ rất lý thú; nó dùng để diá»…n tả cả má»™t nghệ thuật, có thể được áp dụng cho tất cả các sáng tạo cá»§a bạn. Hãy há»c cách dùng Thư pháp và ứng dụng nó má»™t cách hiệu quả trong các ảnh mà bạn thiết kế. Enjoy! - + diff --git a/share/tutorials/tutorial-calligraphy.zh_TW.svg b/share/tutorials/tutorial-calligraphy.zh_TW.svg index 033f2470a..2c16a6773 100644 --- a/share/tutorials/tutorial-calligraphy.zh_TW.svg +++ b/share/tutorials/tutorial-calligraphy.zh_TW.svg @@ -51,184 +51,184 @@ 書法工具是 Inkscape 眾多優秀工具的其中之一。這篇教學會幫助你熟悉這個工具的使用方法,示範書法è—術的一些基本技巧。 - + 使用 Ctrl+æ–¹å‘éµã€æ»‘鼠滾輪 或 æŒ‰è‘—æ»‘é¼ ä¸­éµæ‹–曳 å¯å‘下æ²å‹•é é¢ã€‚關於建立ã€é¸å–和改變物件的基本方法,請閱讀 說明 > 指導手冊 中的基本教學。 - - æ­·å²èˆ‡æ›¸æ³•風格 + + æ­·å²èˆ‡æ›¸æ³•風格 - + ä¾ç…§å­—å…¸ä¸­çš„å®šç¾©ï¼Œæ›¸æ³•æ˜¯æŒ‡ã€Œå„ªç¾Žçš„æ›¸å¯«ã€æˆ–「工整或優雅的筆跡ã€ã€‚基本上,書法是創造美麗或優雅的手寫è—術。這樣è½èµ·ä¾†æ„Ÿè¦ºå¾ˆå›°é›£ï¼Œä½†æ˜¯ç¶“éŽä¸€é»žç·´ç¿’,任何人都能掌æ¡é€™ç¨®è—術的基本原則。 - + 書法最簡單的形å¼å¯è¿½æº¯åˆ°å±±é ‚洞人的å£ç•«ã€‚直到西元 1440 å¹´å·¦å³ï¼Œåœ¨å°åˆ·æ©Ÿç™¼æ˜Žä»¥å‰ï¼Œæ›¸ç±èˆ‡å…¶ä»–出版物都用手書寫而æˆã€‚ç¹•å¯«å“¡ç”¨æ‰‹å¯«å‡ºäº†æ¯æœ¬æ›¸æˆ–出版物的ç¨ç‰¹è¤‡è£½å“ã€‚ç¹•å¯«å“¡ç”¨ç¾½æ¯›ç­†å’Œå¢¨æ°´åœ¨ç¾Šçš®ç´™æˆ–çŠ¢çš®ç´™ç­‰ææ–™ä¸Šå®Œæˆæ›¸å¯«å·¥ä½œã€‚從å¤è‡³ä»Šæµå‚³ä½¿ç”¨çš„æ–‡å­—風格包括有粗俗體ã€å¡æ´›æž—王æœé«”ã€å¤é»‘體等。或許ç¾ä»Šä¸€èˆ¬äººæœ€å¸¸åœ¨å–œå¸–上見到書法。 - + 有三種主è¦çš„æ›¸æ³•風格: - - + + 西方或羅馬 - - + + 阿拉伯 - - + + ä¸­åœ‹æˆ–æ±æ–¹ - + 這個教學主è¦è‘—釿–¼è¥¿æ–¹æ›¸æ³•,而å¦å¤–å…©ç¨®é¢¨æ ¼å‚¾å‘æ–¼ä½¿ç”¨ç­†åˆ· (而éžé‹¼ç­†çš„筆尖)ï¼Œé€™ä¸æ˜¯æˆ‘們的書法工具目å‰çš„功能。 - + 我們有一個以å‰ç¹•寫員所沒有的極大優勢,那就是復原指令:如果你寫錯了,ä¸å¿…毀去整張紙。Inkscape 的書法工具也能夠實ç¾ä¸€äº›å‚³çµ±ç­†å¢¨ç„¡æ³•åšåˆ°çš„æŠ€å·§ã€‚ - - 硬體設備 + + 硬體設備 - + 如果你使用 ç¹ªåœ–æ¿ (例如 Wacom) æœƒå¾—åˆ°æœ€ä½³çš„æ•ˆæžœã€‚æ‰€å¹¸æˆ‘å€‘çš„å·¥å…·æ¥µå…·éˆæ´»æ€§ï¼Œå³ä½¿åªä½¿ç”¨æ»‘鼠也能創造一些相當複雜的書法,雖然快速製作連綿彎曲的畫筆會有些困難。 - + Inkscape 能支æ´ç¹ªåœ–筆的壓力感應和傾斜感應特性。感應功能因為需è¦è¨­å®šï¼Œæ‰€ä»¥é è¨­æ˜¯åœç”¨çš„。å¦å¤–,記ä½ä¸€é»žç”¨ç¾½æ¯›ç­†æˆ–鋼筆寫的書法å°å£“åŠ›è®ŠåŒ–çš„æ„Ÿæ‡‰ä¹Ÿä¸æœƒå¾ˆéˆæ•,與筆刷ä¸åŒã€‚ - + 如果你有繪圖æ¿ä¸¦ä¸”想使用感壓功能,需è¦è¨­å®šä¸€ä¸‹ä½ çš„è£ç½®ã€‚åªéœ€è¦è¨­ç½®ä¸€æ¬¡ä¸¦å„²å­˜è¨­å®šã€‚è¦å•Ÿç”¨é€™é …支æ´ä½ å¿…é ˆå†å•Ÿå‹• inkscape 之剿’上繪圖æ¿ç„¶å¾Œé–‹å•Ÿç·¨è¼¯é¸å–®ä¸­çš„輸入è£ç½®...å°è©±çª—。你å¯ä»¥åœ¨é–‹å•Ÿçš„å°è©±çª—䏭鏿“‡å好的è£ç½®å’Œè¨­å®šä½ çš„繪圖筆。完æˆé€™äº›è¨­å®šå¾Œï¼Œåˆ‡æ›åˆ°æ›¸æ³•工具並且按下工具列上壓力和傾斜開關按鈕。從此之後 Inkscape 在啟動時會記ä½é€™äº›è¨­å®šå€¼ã€‚ - + Inkscape 的美工筆能感應畫筆的速度 (詳見下é¢â€œç´°åŒ–â€å°ç¯€),所以如果你正在使用滑鼠,你å¯èƒ½æœƒæƒ³è®“é€™å€‹åƒæ•¸å€¼ç‚ºé›¶ã€‚ - - 書法工具é¸é … + + 書法工具é¸é … - + 按 Ctrl+F6ã€C æŒ‰éµæˆ–點擊工具列上的按鈕來切æ›åˆ°æ›¸æ³•工具。你會注æ„到在上方工具列有 8 個é¸é …:寬度和細化;角度和固定;端點;顫抖;擺動和質é‡ã€‚也有兩個按鈕å¯é–‹é—œç¹ªåœ–æ¿çš„壓力和傾斜感應功能 (繪圖æ¿)。 - - 寬度和細化 + + 寬度和細化 - + 這組é¸é …控制你的畫筆寬度。寬度å¯å¾ž 1 變化到 100 而且 (é è¨­) 測é‡çš„å–®ä½ç›¸å°æ–¼ä½ çš„編輯視窗大å°ï¼Œä½†èˆ‡ç•«é¢ç¸®æ”¾ç„¡é—œã€‚這樣設計是有原因的,因為在書法中的自然“測é‡å–®ä½â€æ˜¯ä½ æ‰‹ç§»å‹•的範åœï¼Œå› è€Œæ–¹ä¾¿ä½ çš„筆尖寬度使用“繪圖æ¿â€å¤§å°çš„å›ºå®šæ¯”ä¾‹ï¼Œè€Œä¸æ˜¯ç”¨çœŸå¯¦å–®ä½ï¼Œé€™æ¨£å¯ä»¥ä½¿å…¶å–決於畫é¢å¤§å°ã€‚這種é‹ä½œæ–¹å¼ä¸æ˜¯å¼·åˆ¶çš„,所以å¯è½‰è€Œä½¿ç”¨ä¸ç®¡ç•«é¢ç¸®æ”¾çš„絕å°å–®ä½ã€‚勾鏿–¼å·¥å…·çš„å好設定é é¢ä¸Šçš„勾鏿–¹æ ¼ä¾†åˆ‡æ›ç‚ºé€™ç¨®æ¨¡å¼ (點擊兩次此工具按鈕å¯é–‹å•Ÿå好設定é é¢)。 - + 由於會時常改變筆尖寬度,所以你ä¸å¿…åˆ°å·¥å…·åˆ—èª¿æ•´å¯¬åº¦ï¼Œç›´æŽ¥ä½¿ç”¨å·¦å’Œå³æ–¹å‘鵿ˆ–繪圖æ¿çš„æ„Ÿå£“功能。最棒的是你能一邊繪畫一邊使用這些快æ·éµï¼Œæ‰€ä»¥ä½ èƒ½é€æ¼¸æ”¹è®Šç­†ç•«ä¸­é–“的寬度。 - 寬度=1, 逿¼¸è®Šå¯¬.... é”到 47, 逿¼¸è®Šç´°... 回到 0 - - + 寬度=1, 逿¼¸è®Šå¯¬.... é”到 47, 逿¼¸è®Šç´°... 回到 0 + + 筆尖寬度也å¯ä»¥å–æ±ºæ–¼é€Ÿåº¦ï¼Œç”±ç´°åŒ–åƒæ•¸é€²è¡ŒæŽ§åˆ¶ã€‚é€™é …åƒæ•¸å¯è¨­å®šçš„æ•¸å€¼ç‚º -100 到 100;零表示筆寬與速度無關,數值為正表示速度越快筆畫越細,數值為負則越快筆畫越寬。é è¨­å€¼ 10 表示快速的筆畫會有中等程度的細化。這裡有一些例å­ï¼Œå…¨éƒ¨ä»¥å¯¬åº¦=20 且角度=90: - 細化 = 0 (等寬) - 細化 = 10 - 細化 = 40 - 細化 = -20 - 細化 = -60 - - - - - - - - - - - - - - - - - - - - - + 細化 = 0 (等寬) + 細化 = 10 + 細化 = 40 + 細化 = -20 + 細化 = -60 + + + + + + + + + + + + + + + + + + + + + 來åšä¸€ä»¶å¥½çŽ©çš„äº‹ï¼Œå°‡å¯¬åº¦å’Œç´°åŒ–éƒ½è¨­å®šç‚º 100 (最大值) 並用抖動方å¼ç§»å‹•繪畫會產生奇妙自然的類似神經細胞的形狀: - - - - - - - - 角度和固定 + + + + + + + + 角度和固定 - + @@ -243,15 +243,15 @@ - - - - 角度 = 90 度 - 角度 = 30 (é è¨­) - 角度 = 0 - 角度 = -90 度 - - + + + + 角度 = 90 度 + 角度 = 30 (é è¨­) + 角度 = 0 + 角度 = -90 度 + + @@ -260,34 +260,34 @@ - - + + æ¯ä¸€ç¨®å‚³çµ±æ›¸æ³•風格都有自己普éçš„é‹ç­†è§’度。例如,安瑟爾字體 (Uncial hand) 書寫時使用 25 度角。更複雜的手法åŠå¯Œæœ‰ç¶“驗的書法家時常會在書寫時改變角度,而 Inkscape 能按上和下方å‘鵿ˆ–藉由繪圖æ¿çš„å‚¾æ–œæ„Ÿæ‡‰åŠŸèƒ½é”æˆé€™ç¨®æ•ˆæžœã€‚ä¸éŽæ›¸æ³•è¨“ç·´èª²ç¨‹å‰›é–‹å§‹æ™‚ï¼Œä¿æŒå›ºå®šè§’度是最好的練習方å¼ã€‚這有幾個用ä¸åŒè§’度書寫的筆畫範例 (固定 = 100): - 角度 = 30 - 角度 = 60 - 角度 = 90 - 角度 = 0 - 角度 = 15 - 角度 = -45 - - - - - - - + 角度 = 30 + 角度 = 60 + 角度 = 90 + 角度 = 0 + 角度 = 15 + 角度 = -45 + + + + + + + æ­£å¦‚æ‰€è¦‹ï¼Œæ›¸å¯«èˆ‡ç­†å°–è§’åº¦å¹³è¡Œæ™‚ç­†ç•«æœ€ç´°ï¼Œè€Œåž‚ç›´æ›¸å¯«å‰‡æœ€å¯¬ã€‚è§’åº¦ç‚ºæ­£æ˜¯æœ€è‡ªç„¶å’Œå‚³çµ±çš„å³æ‰‹æ›¸æ³•。 - + @@ -299,19 +299,19 @@ - 角度 = 30固定 = 100 - 角度 = 30固定 = 80 - 角度 = 30固定 = 0 - - - - - - - - - - + 角度 = 30固定 = 100 + 角度 = 30固定 = 80 + 角度 = 30固定 = 0 + + + + + + + + + + @@ -320,7 +320,7 @@ - + @@ -329,7 +329,7 @@ - + @@ -338,7 +338,7 @@ - + @@ -347,7 +347,7 @@ - + @@ -356,7 +356,7 @@ - + @@ -365,7 +365,7 @@ - + @@ -374,7 +374,7 @@ - + @@ -383,7 +383,7 @@ - + @@ -392,7 +392,7 @@ - + @@ -401,7 +401,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -419,7 +419,7 @@ - + @@ -428,7 +428,7 @@ - + @@ -437,7 +437,7 @@ - + @@ -446,7 +446,7 @@ - + @@ -455,7 +455,7 @@ - + @@ -464,24 +464,24 @@ - + 以å°åˆ·æ–¹é¢ä¾†èªªï¼Œæœ€å¤§å›ºå®šå€¼å½¢æˆæœ€å¤§ç¨‹åº¦çš„ç­†ç•«å¯¬åº¦å°æ¯” (左上圖) 便是å¤ç¾…馬襯線字型的特色,諸如 Times 或 Bodoni (因為這些字型從歷å²è§’度來看是在模仿固定筆尖的書寫方å¼)ã€‚å›ºå®šå€¼å’Œå¯¬åº¦å°æ¯”皆為零 (å³ä¸Šåœ–),用於其他的書寫方å¼ï¼Œä½¿äººè¯æƒ³åˆ°ç„¡è¥¯ç·šå­—形,例如 Helvetica。 - - 顫抖 + + 顫抖 - + 顫抖是為了使書寫筆畫有更自然的外觀。在控制列上å¯èª¿æ•´é¡«æŠ–的數值範åœå¾ž 0 到 100。它會使你的筆畫有å¯èƒ½ç”¢ç”Ÿå¾žäº›å¾®ä¸å‡å‹»åˆ°ä¸å—控制的斑點和汙點ä¸åŒçš„æƒ…å½¢ã€‚é€™é …åŠŸèƒ½å¯æœ‰æ•ˆæ“´å¤§æ›¸æ³•工具的創作幅度。 - + æ…¢ 中 å¿« @@ -495,289 +495,289 @@ - 顫抖 = 0 - 顫抖 = 10 - 顫抖 = 30 - 顫抖 = 50 - 顫抖 = 70 - 顫抖 = 90 - 顫抖 = 20 - 顫抖 = 40 - 顫抖 = 60 - 顫抖 = 80 - 顫抖 = 100 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - æ“ºå‹•å’Œè³ªé‡ + 顫抖 = 0 + 顫抖 = 10 + 顫抖 = 30 + 顫抖 = 50 + 顫抖 = 70 + 顫抖 = 90 + 顫抖 = 20 + 顫抖 = 40 + 顫抖 = 60 + 顫抖 = 80 + 顫抖 = 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + æ“ºå‹•å’Œè³ªé‡ - + ä¸åŒæ–¼å¯¬åº¦å’Œè§’åº¦ï¼Œæœ€å¾Œé€™å…©å€‹åƒæ•¸æ˜¯å®šç¾©å·¥å…·ã€Œæ„Ÿè¦ºã€èµ·ä¾†å¦‚ä½•ï¼Œè€Œä¸æ˜¯å½±éŸ¿å·¥å…·ç”¢ç”Ÿçš„æ•ˆæžœã€‚所以在這一å°ç¯€ä¸æœƒæœ‰ä»»ä½•æ’圖;å而åªè¦ä½ è‡ªå·±åŽ»å˜—è©¦é€™å…©å€‹åƒæ•¸å¾žä¸­ç²å¾—想法。 - + 擺動是筆移動時與紙張之間的阻力。é è¨­ç‚ºæœ€å°å€¼ (0)ï¼Œè€Œé€™é …åƒæ•¸æ„ˆå¤§æœƒä½¿ç´™å¼µæ„ˆã€Œå…‰æ»‘ã€ï¼šå¦‚果質é‡å¾ˆå¤§ï¼Œç­†å¾€å¾€æœƒåœ¨è½‰å½Žè™•失控;如果質é‡ç‚ºé›¶ï¼Œä¸”擺動值高會使筆瘋狂扭動。 - + 物ç†ä¸Šï¼Œè³ªé‡æ˜¯å°Žè‡´æ…£æ€§çš„å› ç´ ï¼›Inkscape 書法工具的質é‡è¶Šå¤§ï¼Œæœƒæ¯”滑鼠游標移動慢更多且筆畫中的å°è½‰å½Žå’Œæ‰­è½‰è™•會更為平滑。é è¨­çš„質é‡ç›¸ç•¶å° (2) æ‰€ä»¥æ›¸æ³•å·¥å…·åæ‡‰å¿«é€Ÿï¼Œä½†ä½ èƒ½å¢žåŠ è³ªé‡ä½¿ç­†å°–移動較慢且較平滑。 - - 書法範例 + + 書法範例 - + ç¾åœ¨ä½ å·²ç¶“曉得書法工具的基本功能,你å¯è©¦è‘—寫一些實際的書法。如果你å°é€™é–€è—è¡“ä¸ç†Ÿæ‚‰ï¼Œè‡ªå·±æ‰¾ä¸€æœ¬æ›¸æ³•書ç±ä¸¦ç”¨ Inkscape 來學習。這一å°ç¯€åªæœƒç¤ºç¯„一些簡單的例å­è®“你看。 - + 首先,開始學習寫一些字,你需è¦å»ºç«‹ä¸€çµ„基準線引導你。如果你è¦å¯«æ–œé«”æˆ–è‰æ›¸ï¼ŒåŒæ¨£åœ°åŠ å…¥ä¸€äº›è·¨è¶Šé‚£å…©æ¢åŸºæº–線的斜åƒè€ƒç·šï¼Œå¦‚下: - - - - - - - - - + + + + + + + + + 然後放大畫é¢å¦‚此一來基準線間的高度相當於你的手最自然的移動範åœï¼Œèª¿æ•´å¯¬åº¦å’Œè§’åº¦ï¼Œç„¶å¾Œè‡ªå·±ç·´ç¿’å¯«çœ‹çœ‹ï¼ - + 身為書法åˆå­¸è€…è¦åšçš„第一件事大概是練習文字的基本元素 — æ©«ã€è±Žã€åœ“ã€æ’‡ã€‚䏋颿œ‰ä¸€äº›å®‰ç‘Ÿçˆ¾å­—é«” (Uncial hand) 的字形元素: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + 一些有用的秘訣: - - + + 如果你的手在繪圖æ¿ä¸Šå¾ˆèˆ’é©ï¼Œæ‰‹ä¸è¦é›¢é–‹ã€‚åè€Œï¼Œåœ¨å®Œæˆæ¯å€‹å­—æ¯å¾Œç”¨ä½ çš„左手æ²å‹•é é¢ (Ctrl+æ–¹å‘éµ)。 - - + + 如果你最後一é“筆畫很糟,直接按 Ctrl+Z 復原。ä¸éŽï¼Œå‡å¦‚字的形狀很棒但ä½ç½®æˆ–大尿œ‰è¼•å¾®å離,最好暫時切æ›åˆ°é¸å–工具 (空白éµ) 並ä¾éœ€æ±‚調整/縮放/旋轉 (使用滑鼠或éµç›¤)ï¼Œç„¶å¾Œå†æŒ‰ä¸€æ¬¡ç©ºç™½éµå›žåˆ°è¼¸æ³•工具。 - - + + 已經完æˆä¸€å€‹å­—æ¯ï¼Œå°±å†æ¬¡åˆ‡æ›åˆ°é¸å–工具去調整筆畫一致性和字æ¯é–“è·ã€‚坿˜¯ä¸è¦åšéŽé ­äº†ï¼›å¥½çš„æ›¸æ³•å¿…é ˆä¿ç•™ç¨å¾®ä¸è¦å‰‡çš„æ‰‹å¯«æ¨£è²Œã€‚è¦æŠµæŠ—åŽ»è¤‡è£½å­—æ¯å’Œå­—æ¯å…ƒä»¶çš„誘惑;æ¯ä¸€ç­†ç•«éƒ½å¿…須用手寫。 - + 而這裡有一些完整的文字範例: - - - - - - - - - 安瑟爾體 (Unicial) - 塿´›æž—王æœé«” (Carolingian) - 哥德體 (Gothic) - 法國哥德體 (Bâtarde) - - - 花斜體 (Flourished Italic) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - çµè«– + + + + + + + + + 安瑟爾體 (Unicial) + 塿´›æž—王æœé«” (Carolingian) + 哥德體 (Gothic) + 法國哥德體 (Bâtarde) + + + 花斜體 (Flourished Italic) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + çµè«– - + 書法ä¸åƒ…好玩有趣;也是能傳é”你的經歷和感å—ä¸”èƒ½è§¸åŠæ·±å±¤éˆé­‚çš„è—術。Inkscape 的書法工具åªèƒ½ä½œç‚ºé©åº¦çš„入門。但它是éžå¸¸å¥½çš„玩樂消é£ä¸¦ä¸”在實際設計上會éžå¸¸æœ‰ç”¨ã€‚ç¥æ‚¨çŽ©å¾—æ„‰å¿«ï¼ - + diff --git a/share/tutorials/tutorial-elements.be.svg b/share/tutorials/tutorial-elements.be.svg index ec8df773f..059f7aa38 100644 --- a/share/tutorials/tutorial-elements.be.svg +++ b/share/tutorials/tutorial-elements.be.svg @@ -36,61 +36,61 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - - ::ЭЛЕМЭÐТЫ + + ::ELEMENTS OF DESIGN - - + + ГÑты падручнік прадÑманÑтруе ÑлемÑнты й аÑновы дызайну, ÑÐºÑ–Ñ Ð·Ð²Ñ‹Ñ‡Ð°Ð¹Ð½Ð° выкладаюцца на першых курÑах ÑтудÑнтам-маÑтакам, патрÑÐ±Ð½Ñ‹Ñ ÐºÐ°Ð± зразумець Ñ€Ð¾Ð·Ð½Ñ‹Ñ Ñ€Ñчы, ÑÐºÑ–Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹Ñтоўваюцца Ñž творчаÑьці. ГÑта Ð½Ñ Ð¿Ð¾ÑžÐ½Ñ‹ ÑьпіÑ, таму, калі лаÑка, дадавайце, аднімайце й Ñпалучайце, каб зрабіць падручнік больш поўным. - - - - ЭлемÑнты - ÐÑновы - Колер - Ð›Ñ–Ð½Ñ–Ñ - Фіґура - ПраÑтора - ТÑкÑтура - ЯркаÑьць - Памер - БалÑÐ½Ñ - КантраÑÑ‚ - ВылучÑньне - ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ‹Ñ - Узор - Пераход - ÐšÐ°Ð¼Ð¿Ð°Ð·Ñ‹Ñ†Ñ‹Ñ - ÐглÑд - - ЭлемÑнты дызайну + + + + ЭлемÑнты + ÐÑновы + Колер + Ð›Ñ–Ð½Ñ–Ñ + Фіґура + ПраÑтора + ТÑкÑтура + ЯркаÑьць + Памер + БалÑÐ½Ñ + КантраÑÑ‚ + ВылучÑньне + ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ‹Ñ + Узор + Пераход + ÐšÐ°Ð¼Ð¿Ð°Ð·Ñ‹Ñ†Ñ‹Ñ + ÐглÑд + + ЭлемÑнты дызайну - - + + ÐаÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ ÑлемÑнты — Ð±ÑƒÐ´Ð°ÑžÐ½Ñ–Ñ‡Ñ‹Ñ Ð±Ð»Ñ‘ÐºÑ– дызайну. - - Ð›Ñ–Ð½Ñ–Ñ + + Ð›Ñ–Ð½Ñ–Ñ - - + + Ð›Ñ–Ð½Ñ–Ñ Ð²Ñ‹Ð·Ð½Ð°Ñ‡Ð°Ð½Ð°Ñ Ñк знак з даўжынёй Ñ– напрамкам, Ñтвораны пунктам, Ñкі рухаецца праз паверхню. Ð›Ñ–Ð½Ñ–Ñ Ð¼Ð¾Ð¶Ð° мець розную даўжыню, таўшчыню, напрамак, крывіню й колер. Ð›Ñ–Ð½Ñ–Ñ Ð¼Ð¾Ð¶Ð° быць дзьвюхвымернай (Ð»Ñ–Ð½Ñ–Ñ Ð°Ð»Ð¾ÑžÐºÐ° па паперы) ці меркавацца трохвымернай. - + @@ -102,54 +102,54 @@ - - Фіґура + + Фіґура - - + + ПлоÑÐºÐ°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð° атрымоўваецца, калі Ñ–ÑÐ½Ð°Ñ Ñ†Ñ– Ð¼ÐµÑ€ÐºÐ°Ð²Ð°Ð½Ð°Ñ Ð»Ñ–Ð½Ñ–Ñ– ÑуÑтракаюцца, каб абмежаваць праÑтору. Зьмена колеру ці Ð°Ð´Ñ†ÐµÐ½ÑŒÐ½Ñ Ð¼Ð¾Ð¶Ð° вызначыць фіґуру. Фіґуры могуць быць Ð¿Ð°Ð´Ð·ÐµÐ»ÐµÐ½Ñ‹Ñ Ð½Ð° некалькі відаў: ґеамÑÑ‚Ñ€Ñ‹Ñ‡Ð½Ñ‹Ñ (квадрат, трохкутнік, акружына) Ñ– Ð½Ð°Ñ‚ÑƒÑ€Ð°Ð»ÑŒÐ½Ñ‹Ñ (зь нÑправільным контурам). - + - - Памер + + Памер - - + + ГÑта датычыцца адрозьненьнÑÑž у прапорцыÑÑ… аб'ектаў, ліній ці фіґур. Ðдрозьненьні памераў аб'ектаў могуць быць Ñапраўднымі ці ÑžÑўнымі. - - ВЯЛІКІ - малы - - ПраÑтора + + ВЯЛІКІ + малы + + ПраÑтора - - + + ПраÑтора — гÑта пуÑты ці адкрыты абÑÑг між, вакол, над, пад ці ўнутры аб'ектаў. Фіґуры й формы Ñтвараюцца праÑторай вакол Ñ– ўнутры Ñ–Ñ…. ПраÑтора чаÑта завецца трохвымернай ці дзьвюхвымернай. Ð”Ð°Ð´Ð°Ñ‚Ð½Ð°Ñ Ð¿Ñ€Ð°Ñтора — Ð·Ð°Ð¿Ð¾ÑžÐ½ÐµÐ½Ð°Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ð°Ð¹ ці формай. ÐÐ´Ð¼Ð¾ÑžÐ½Ð°Ñ Ð¿Ñ€Ð°Ñтора акружае фіґуру ці форму. - - - - - - Колер + + + + + + Колер - - + + @@ -166,12 +166,12 @@ - - - ТÑкÑтура + + + ТÑкÑтура - - + + @@ -188,15 +188,15 @@ - - - - - - ЯркаÑьць + + + + + + ЯркаÑьць - - + + @@ -222,71 +222,71 @@ - - - - - - - ÐÑновы дызайну + + + + + + + ÐÑновы дызайну - - + + ÐÑновы выкарыÑтоўваюць ÑлемÑнты дызайну, каб Ñтварыць кампазыцыю. - - БалÑÐ½Ñ + + БалÑÐ½Ñ - - + + БалÑÐ½Ñ (вага) — гÑта адчуваньне візуальнай роўнаÑьці фіґураў, формаў, ÑркаÑьцÑÑž, колераў Ñ– г.д. БалÑÐ½Ñ Ð¼Ð¾Ð¶Ð° быць ÑымÑтрычным або роўнаўзважаным, ці аÑымÑтрычным або нÑроўнаўзважаным. Ðб'екты, ÑркаÑьці, колеры, Ñ‚ÑкÑтуры, фіґуры, формы й г.д. могуць выкарыÑтоўвацца каб Ñтварыць балÑÐ½Ñ Ñƒ кампазыцыі. - - - - - - - - КантраÑÑ‚ + + + + + + + + КантраÑÑ‚ - - + + КантраÑÑ‚ — гÑта непаÑÑ€Ñднае ÑуÑедÑтва Ñупрацьлеглых ÑлемÑнтаў - - - - - - ВылучÑньне + + + + + + ВылучÑньне - - + + ВылучÑньне выкарыÑтоўваецца каб пÑÑžÐ½Ñ‹Ñ Ñ‡Ð°Ñткі твора вызначаліÑÑ Ð¹ прыцÑгвалі вашую ўвагу. ЦÑнтар інтарÑÑу ці вузлавы пункт — гÑта меÑца працы, куды Ñпачатку Ñкіроўваюцца позіркі. - - - - - - - ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ‹Ñ + + + + + + + ÐŸÑ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ‹Ñ - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Ðдвольны мураш Ñ– ÑžÑюдыход - Ðўтар відарыÑа SVG — Andrew FitzsimonЗ дазволу Ðдкрытай бібліÑÑ‚Ñкі відарыÑаўhttp://www.openclipart.org/ - + Ðдвольны мураш Ñ– ÑžÑюдыход + Ðўтар відарыÑа SVG — Andrew FitzsimonЗ дазволу Ðдкрытай бібліÑÑ‚Ñкі відарыÑаўhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Узор + + + + Узор - - + + @@ -425,14 +425,14 @@ - - - - - Пераход + + + + + Пераход - - + + @@ -448,17 +448,17 @@ - - - - - - - - ÐšÐ°Ð¼Ð¿Ð°Ð·Ñ‹Ñ†Ñ‹Ñ + + + + + + + + ÐšÐ°Ð¼Ð¿Ð°Ð·Ñ‹Ñ†Ñ‹Ñ - - + + @@ -544,99 +544,99 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - БібліÑÒ‘Ñ€Ð°Ñ„Ñ–Ñ + + + БібліÑÒ‘Ñ€Ð°Ñ„Ñ–Ñ - - + + ВоÑÑŒ чаÑÑ‚ÐºÐ¾Ð²Ð°Ñ Ð±Ñ–Ð±Ð»Ñ–ÑґрафіÑ, ÑкарыÑÑ‚Ð°Ð½Ð°Ñ Ð´Ð»Ñ Ð¿Ð°Ð±ÑƒÐ´Ð¾Ð²Ñ‹ гÑтага дакумÑнта. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - ÐÑÐ°Ð±Ð»Ñ–Ð²Ð°Ñ Ð¿Ð°Ð´Ð·Ñка Linda Kim (http://www.coroflot.com/redlucite/) за дапамогу мне, (http://www.rejon.org/), з гÑтым падручнікам. ТакÑама дзÑкуй Ðдкрытай бібліÑÑ‚Ñцы відарыÑаў (http://www.openclipart.org/) Ñ– людзÑм, ÑÐºÑ–Ñ Ð¿ÐµÑ€Ð°Ð´Ð°Ð»Ñ– ґрафіку гÑтаму праекту. + ÐÑÐ°Ð±Ð»Ñ–Ð²Ð°Ñ Ð¿Ð°Ð´Ð·Ñка Linda Kim (http://www.coroflot.com/redlucite/) за дапамогу мне, (http://www.rejon.org/), з гÑтым падручнікам. ТакÑама дзÑкуй Ðдкрытай бібліÑÑ‚Ñцы відарыÑаў (http://www.openclipart.org/) Ñ– людзÑм, ÑÐºÑ–Ñ Ð¿ÐµÑ€Ð°Ð´Ð°Ð»Ñ– ґрафіку гÑтаму праекту. - + @@ -666,8 +666,8 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць diff --git a/share/tutorials/tutorial-elements.el.svg b/share/tutorials/tutorial-elements.el.svg index 207ac2145..efad25177 100644 --- a/share/tutorials/tutorial-elements.el.svg +++ b/share/tutorials/tutorial-elements.el.svg @@ -40,57 +40,57 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - - ::ΣΤΟΙΧΕΊΑ + + ::ELEMENTS OF DESIGN - + Αυτό το μάθημα θα δείξει τα στοιχεία και τις αÏχές σχεδίασης που συνήθως διδάσκονται σε αÏχάÏιους σπουδαστές τέχνης για να καταλάβουν ποικίλες ιδιότητες που χÏησιμοποιοÏνται στην τέχνη. Αυτή δεν είναι μια πλήÏης λίστα, έτσι παÏακαλώ Ï€Ïοσθέστε, αφαιÏέστε και συνδυάστε για να κάνετε αυτό το μάθημα πιο κατανοητό. - - - - Στοιχεία - ΑÏχές - ΧÏώμα - ΓÏαμμή - Σχήμα - ΧώÏος - Υφή - Τιμή - Μέγεθος - ΙσοÏÏοπία - Αντίθεση - Έμφαση - Αναλογία - Μοτίβο - Διαβάθμιση - ΣÏνθεση - Επισκόπηση - - Στοιχεία σχεδίασης + + + + Στοιχεία + ΑÏχές + ΧÏώμα + ΓÏαμμή + Σχήμα + ΧώÏος + Υφή + Τιμή + Μέγεθος + ΙσοÏÏοπία + Αντίθεση + Έμφαση + Αναλογία + Μοτίβο + Διαβάθμιση + ΣÏνθεση + Επισκόπηση + + Στοιχεία σχεδίασης - + Τα πιο κάτω στοιχεία είναι οι κατασκευαστικές ομάδες σχεδίασης. - - ΓÏαμμή + + ΓÏαμμή - + Μια γÏαμμή οÏίζεται ως σημείο με μήκος και κατεÏθυνση, δημιουÏγημένο από ένα σημείο που μετακινείται κατά μήκος της επιφάνειας. Μια γÏαμμή μποÏεί να ποικίλει σε μήκος, πλάτος, κατεÏθυνση, καμπυλότητα και χÏώμα. Η γÏαμμή μποÏεί να είναι δισδιάστατη (μια γÏαμμή Î¼Î¿Î»Ï…Î²Î¹Î¿Ï ÏƒÎµ χαÏτί), ή υπονοοÏμενη Ï„Ïισδιάστατη. - + @@ -102,53 +102,53 @@ - - Σχήμα + + Σχήμα - + Μια επίπεδη μοÏφή δημιουÏγείται όταν ενεÏγές ή υπονοοÏμενες γÏαμμές συναντώνται και πεÏικλείουν ένα χώÏο. Μια αλλαγή στο χÏώμα ή την απόχÏωση μποÏεί να οÏίσει ένα σχήμα. Τα σχήματα μποÏοÏν να διαιÏεθοÏν σε πολλοÏÏ‚ Ï„Ïπους: γεωμετÏικά (τετÏάγωνα, Ï„Ïίγωνα, κÏκλους) και οÏγανικά (ανώμαλα στο πεÏίγÏαμμα). - + - - Μέγεθος + + Μέγεθος - + Αυτό αναφέÏεται στις ποικιλίες στις αναλογίες των αντικειμένων, γÏαμμών ή σχημάτων. ΥπάÏχει μια ποικιλία μεγεθών στα αντικείμενα είτε Ï€Ïαγματικά είτε φανταστικά. - - ΜΕΓΑΛΟ - μικÏÏŒ - - ΧώÏος + + ΜΕΓΑΛΟ + μικÏÏŒ + + ΧώÏος - + ΧώÏος είναι η κενή ή ανοικτή πεÏιοχή μεταξÏ, γÏÏω, πάνω από, κάτω από ή μέσα στα αντικείμενα. Σχήματα και μοÏφές δημιουÏγοÏνται από το χώÏο γÏÏω και μέσα τους. Ο χώÏος αποκαλείται συχνά Ï„Ïισδιάστατος ή δισδιάστατος. Ο θετικός χώÏος γεμίζεται από ένα σχήμα ή μοÏφή. Ο αÏνητικός χώÏος πεÏιβάλλει ένα σχήμα ή μοÏφή. - - - - - - ΧÏώμα + + + + + + ΧÏώμα - + @@ -166,11 +166,11 @@ - - - Υφή + + + Υφή - + @@ -188,14 +188,14 @@ - - - - - - Τιμή + + + + + + Τιμή - + @@ -222,70 +222,70 @@ - - - - - - - ΑÏχές σχεδίασης + + + + + + + ΑÏχές σχεδίασης - + Οι αÏχές χÏησιμοποιοÏν τα στοιχεία σχεδίασης για δημιουÏγία μιας σÏνθεσης. - - ΙσοÏÏοπία + + ΙσοÏÏοπία - + ΙσοÏÏοπία είναι μια αίσθηση οπτικής ισότητας στο σχήμα, μοÏφή, τιμή, χÏώμα κλ. Η ισοÏÏοπία μποÏεί να είναι συμμετÏική ή ομοιόμοÏφα ισοÏÏοπημένη ή ασÏμμετÏη και ανομοιόμοÏφα ισοÏÏοπημένη. Αντικείμενα, τιμές, χÏώματα, υφές, σχήματα, μοÏφές, κλ., μποÏοÏν να χÏησιμοποιηθοÏν στη δημιουÏγία ισοÏÏοπίας σε μια σÏνθεση. - - - - - - - - Αντίθεση + + + + + + + + Αντίθεση - + Αντίθεση είναι η παÏάθεση αντιτιθέμενων στοιχείων - - - - - - Έμφαση + + + + + + Έμφαση - + Έμφαση χÏησιμοποιείται ώστε κάποια μέÏη των καλλιτεχνικών εÏγασιών να ξεχωÏίζουν και να Ï„ÏαβοÏν την Ï€Ïοσοχή σας. Το κέντÏο του ενδιαφέÏοντος ή σημείο εστίασης είναι ο θέση που μια δουλειά έλκει το μάτι σας Ï€Ïώτα. - - - - - - - Αναλογία + + + + + + + Αναλογία - + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Τυχαίο μυÏμήγκι & 4x4 - Εικόνα SVG που δημιουÏγήθηκε από τον Andrew FitzsimonΠÏοσφοÏά της βιβλιοθήκης Open Clip Arthttp://www.openclipart.org/ - + Τυχαίο μυÏμήγκι & 4x4 + Εικόνα SVG που δημιουÏγήθηκε από τον Andrew FitzsimonΠÏοσφοÏά της βιβλιοθήκης Open Clip Arthttp://www.openclipart.org/ + @@ -403,12 +403,12 @@ - - - - Μοτίβο + + + + Μοτίβο - + @@ -425,13 +425,13 @@ - - - - - Διαβάθμιση + + + + + Διαβάθμιση - + @@ -448,16 +448,16 @@ - - - - - - - - ΣÏνθεση + + + + + + + + ΣÏνθεση - + @@ -544,48 +544,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - ΒιβλιογÏαφία + + + ΒιβλιογÏαφία - + Αυτή είναι μεÏική βιβλιογÏαφία που χÏησιμοποιήθηκε για το χτίσιμο Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… εγγÏάφου. - - + + @@ -593,8 +593,8 @@ http://www.makart.com/resources/artclass/EPlist.html - - + + @@ -602,8 +602,8 @@ http://www.princetonol.com/groups/iad/Files/elements2.htm - - + + @@ -611,8 +611,8 @@ http://www.johnlovett.com/test.htm - - + + @@ -620,8 +620,8 @@ http://digital-web.com/articles/elements_of_design/ - - + + @@ -629,14 +629,14 @@ http://digital-web.com/articles/principles_of_design/ - + Πολλές ευχαÏιστίες στη Linda Kim (http://www.coroflot.com/redlucite/) για τη βοήθεια της (http://www.rejon.org/) σε αυτό το μάθημα. Επίσης, ευχαÏιστώ το Open Clip Art Library (http://www.openclipart.org/) και τα άτομα των γÏαφικών για αυτό το έÏγο. - + diff --git a/share/tutorials/tutorial-elements.es.svg b/share/tutorials/tutorial-elements.es.svg index 6e949936f..995446c73 100644 --- a/share/tutorials/tutorial-elements.es.svg +++ b/share/tutorials/tutorial-elements.es.svg @@ -36,61 +36,61 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::ELEMENTOS + + ::ELEMENTS OF DESIGN - - + + Este tutorial demostrará los principios y elementos del diseño, los cuales son impartidos a estudiantes principiantes de artes, esto para entender varias propiedades usadas en la creación de arte. Esta no es una lista exhaustiva, así que por favor agregue, sustriaga y combine para hacer este tutorial más completo. - - - - Elementos - Principles - Color - Línea - Forma - Espacio - Textura - Valores - Tamaño - Balance - Contraste - Énfasis - Proporción - Patrones - Gradación - Composición - Overview - - Elementos del Diseño + + + + Elementos + Principles + Color + Línea + Forma + Espacio + Textura + Valores + Tamaño + Balance + Contraste + Énfasis + Proporción + Patrones + Gradación + Composición + Overview + + Elementos del Diseño - - + + Los siguientes elementos son las bases que costruyen el Diseño. - - Línea + + Línea - - + + Una línea es definida como una marca con longitud y dirección, creada mediante un punto que se mueve a lo largo de una superficie. Una línea puede variar en longitud, ancho, dirección, curvatura y color. La línea puede ser de dos dimensiones (una línea de lápiz sobre papel), o tres dimensiones implícitas. - + @@ -102,54 +102,54 @@ - - Forma + + Forma - - + + Un fígura plana o una forma es creada cuando líneas actuales o implícitas se encuentran alrededor de un espacio. Un cambio en el color o el sombreado puede definir una forma. Las formas pueden ser clasificadas en varios tipos: geométricas (cuadrado, triángulo, círculo) y orgánicas (irregulares en contorno). - + - - Tamaño + + Tamaño - - + + Este se refiere a las variaciones de las proporciones de los objetos, líneas o formas. Hay una variación de tamaño en objetos ya sean reales o imáginarios. - - BIG - small - - Espacio + + BIG + small + + Espacio - - + + Espacio es el área vacia o abierta entre, alrededor, arriba, debajo o entre objetos. Figuras y formas son realizadas en el espacio alrededor y entre él. El espacio también es llamado bidimensional o tridimensional. El espacio positivo es rellenado con formas o fíguras. El espacio negativo rodea una forma o fígura. - - - - - - Color + + + + + + Color - - + + @@ -166,12 +166,12 @@ - - - Textura + + + Textura - - + + @@ -188,15 +188,15 @@ - - - - - - Valores + + + + + + Valores - - + + @@ -222,71 +222,71 @@ - - - - - - - Principios de Diseño + + + + + + + Principios de Diseño - - + + Los principios emplean elementos del diseño para crear composiciones. - - Balance + + Balance - - + + El Balance es el sentido de equidad visual en una forma, fígura, valor, calor, etc. El Balance puede balancear simétricamente o uniformemente Objetos, valores, colores, texturas, formas, etc., igualmente puede ser usada en la creación de balances en la composición. - - - - - - - - Contraste + + + + + + + + Contraste - - + + El contraste es la juxtaposición (fusión) de los elementos opuestos - - - - - - Énfasis + + + + + + Énfasis - - + + El Énfasis es usado para crear ciertas partes de sus trabajos artísticos a través de llamado atención de manera especial. El centro de interés o punto foco es el lugar del dibujo que le invita a enfocar su mirada. - - - - - - - Proporción + + + + + + + Proporción - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant & 4WD - SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ - + Random Ant & 4WD + SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Patrones + + + + Patrones - - + + @@ -425,14 +425,14 @@ - - - - - Gradación + + + + + Gradación - - + + @@ -448,17 +448,17 @@ - - - - - - - - Composición + + + + + + + + Composición - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliografía + + + Bibliografía - - + + Esta es una bibliografía parcial usada para construir este documento. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-elements.eu.svg b/share/tutorials/tutorial-elements.eu.svg index eef07e480..4f3927e67 100644 --- a/share/tutorials/tutorial-elements.eu.svg +++ b/share/tutorials/tutorial-elements.eu.svg @@ -36,61 +36,61 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::ELEMENTUAK + + ::ELEMENTS OF DESIGN - - + + Tutorial honek diseinuaren elementu eta arauak azaltzen ditu, normalean arteko ikasleei hasieran erakusten zaienak artea egitean erabiltzen diren hainbat propietate ulertzeko. Hau ez da zerrenda oso bat, beraz tutorial hau ulergarriago egitearren nahi duzuna gehitu, kendu eta konposa ezazu. - - - - Elementuak - Arauak - Kolorea - Lerroa - Forma - Espazioa - Testura - Balioa - Tamaina - Balantzea - Kontrastea - Nabarmentzea - Proportzioa - Patroia - Mailaketa - Konposaketa - Gainbegirada - - Diseinuaren elementuak + + + + Elementuak + Arauak + Kolorea + Lerroa + Forma + Espazioa + Testura + Balioa + Tamaina + Balantzea + Kontrastea + Nabarmentzea + Proportzioa + Patroia + Mailaketa + Konposaketa + Gainbegirada + + Diseinuaren elementuak - - + + Ondorengo elementuak diseinuaren oinarrizko adreiluak dira. - - Lerroa + + Lerroa - - + + Lerro bat luzera eta norabidea duen marka bat bezala definitzen da, gainazal batean puntu bat mugituz lortzen dena. Lerro bat luzeran, zabaleran norabidean, kurbadura eta kolorean alda daiteke. Lerro bat bi dimentsiotakoa (arkatza paperean) edo inplizituki hiru dimentsio izan ditzake. - + @@ -102,54 +102,54 @@ - - Forma + + Forma - - + + Uneko edo inplizitutako lerroak elkartzen direnean hutsune baten inguran, figura laua, forma bat sortzen da. Kolore edo itzaleko aldaketek forma bat defini dezakete. Formak hainbat motetan bana daitezke: geometrikoak (laukizuzena, hirukia, borobila) eta organikoak (ertz irregularrekin). - + - - Tamaina + + Tamaina - - + + Objektu, lerro edo formen proportzioak aldatzeari deritzo. Objektuen tamaina aldaketa erreala edo irudikaria izan daiteke. - - HANDIA - txikia - - Espazioa + + HANDIA + txikia + + Espazioa - - + + Espazioa objektuen artean, inguruan, gainean, azpian edo barruan dagoen azalera huts edo irekia da. Formak inguruko eta barruko espazioekin osatzen dira. Espazioari askotan hiru-dimentsiotakoa edo bi-dimentsiotakoa esaten zaio. Espazio positiboak formen barruan daude. Espazio negatiboek formak inguratzen dituzte. - - - - - - Kolorea + + + + + + Kolorea - - + + @@ -166,12 +166,12 @@ - - - Testura + + + Testura - - + + @@ -188,15 +188,15 @@ - - - - - - Balioa + + + + + + Balioa - - + + @@ -222,71 +222,71 @@ - - - - - - - Diseinu arauak + + + + + + + Diseinu arauak - - + + Arauek diseinuko elementuak konposizioak egiteko erabiltzen dituzte. - - Balantzea + + Balantzea - - + + Balantzea bisualki itxura, forma, balioa, kolorea, eta abarren berdintasunaren sentimendua da. Balantzea simetriko edo maila berekoa ala asimetriko eta maila ezberdinetakoa izan daiteke. Objektuak, balioak, koloreak, testurak, itxurak, formak, eta abar erabil daitezke konposizio batean balantzea sortzeko. - - - - - - - - Kontrastea + + + + + + + + Kontrastea - - + + Kontrastea kontrako elementuen justaposizioa da - - - - - - Nabarmentzea + + + + + + Nabarmentzea - - + + Nabarmentzea zure atentzioa artelanaren eremu zehatz batzuetara gidatzeko erabiltzen da. Begiratzen duzun lehenengo lekua puntu fokala edo interesaren zentrua da - - - - - - - Proportzioa + + + + + + + Proportzioa - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Ausazko Inurria eta 4x4 - Andrew Fitzsimon-ek Sortutako SVG IrudiaClip Art Liburutegiak Eskeiniahttp://www.openclipart.org/ - + Ausazko Inurria eta 4x4 + Andrew Fitzsimon-ek Sortutako SVG IrudiaClip Art Liburutegiak Eskeiniahttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Patroia + + + + Patroia - - + + @@ -425,14 +425,14 @@ - - - - - Mailaketa + + + + + Mailaketa - - + + @@ -448,17 +448,17 @@ - - - - - - - - Konposaketa + + + + + + + + Konposaketa - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliiografia + + + Bibliiografia - - + + Hau dokumentua sortzeko bibliografiaren zati bat da. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-elements.fa.svg b/share/tutorials/tutorial-elements.fa.svg index 9068a8bd5..c16474a03 100644 --- a/share/tutorials/tutorial-elements.fa.svg +++ b/share/tutorials/tutorial-elements.fa.svg @@ -36,15 +36,15 @@ - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید - - ::ELEMENTS + + ::ELEMENTS OF DESIGN - - + + @@ -54,41 +54,41 @@ properties used in art making. This is not an exhaustive list, so please add, subtract, and combine to make this tutorial more comprehensive. - - - - Elements - Principles - Color - Line - Shape - Space - Texture - Value - Size - Balance - Contrast - Emphasis - Proportion - Pattern - Gradation - Composition - Overview - - Elements of Design + + + + Elements + Principles + Color + Line + Shape + Space + Texture + Value + Size + Balance + Contrast + Emphasis + Proportion + Pattern + Gradation + Composition + Overview + + Elements of Design - - + + The following elements are the building blocks of design. - - Line + + Line - - + + @@ -98,7 +98,7 @@ curvature, and color. Line can be two-dimensional (a pencil line on paper), or implied three-dimensional. - + @@ -110,11 +110,11 @@ paper), or implied three-dimensional. - - Shape + + Shape - - + + @@ -124,17 +124,17 @@ Shapes can be divided into several types: geometric (square, triangle, circle) and organic (irregular in outline). - + - - Size + + Size - - + + @@ -142,14 +142,14 @@ circle) and organic (irregular in outline). There is a variation of sizes in objects either real or imagined. - - BIG - small - - Space + + BIG + small + + Space - - + + @@ -160,15 +160,15 @@ dimensional. Positive space is filled by a shape or form. Negative space surrounds a shape or form. - - - - - - Color + + + + + + Color - - + + @@ -190,12 +190,12 @@ dullness). - - - Texture + + + Texture - - + + @@ -215,15 +215,15 @@ or pebbly. - - - - - - Value + + + + + + Value - - + + @@ -253,26 +253,26 @@ in a composition. - - - - - - - Principles of Design + + + + + + + Principles of Design - - + + The principles use the elements of design to create a composition. - - Balance + + Balance - - + + @@ -282,32 +282,32 @@ un-evenly balanced. Objects, values, colors, textures, shapes, forms, etc., can be used in creating a balance in a composition. - - - - - - - - Contrast + + + + + + + + Contrast - - + + Contrast is the juxtaposition of opposing elements - - - - - - Emphasis + + + + + + Emphasis - - + + @@ -316,16 +316,16 @@ and grab your attention. The center of interest or focal point is the place a work draws your eye to first. - - - - - - - Proportion + + + + + + + Proportion - - + + @@ -383,9 +383,9 @@ to another. - - - + + + @@ -422,9 +422,9 @@ to another. - Random Ant & 4WD - SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ - + Random Ant & 4WD + SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -444,13 +444,13 @@ to another. - - - - Pattern + + + + Pattern - - + + @@ -468,14 +468,14 @@ and over again. - - - - - Gradation + + + + + Gradation - - + + @@ -495,17 +495,17 @@ gradation from dark to light will cause the eye to move along a shape. - - - - - - - - Composition + + + + + + + + Composition - - + + @@ -591,103 +591,103 @@ gradation from dark to light will cause the eye to move along a shape. - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliography + + + Bibliography - - + + This is a partial bibliography used to build this document. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -717,8 +717,8 @@ people have submitted to that project. - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید diff --git a/share/tutorials/tutorial-elements.hu.svg b/share/tutorials/tutorial-elements.hu.svg index 40c522082..816fa4bca 100644 --- a/share/tutorials/tutorial-elements.hu.svg +++ b/share/tutorials/tutorial-elements.hu.svg @@ -36,61 +36,61 @@ - - A Ctrl+le nyíl segít a lapozásban + + A Ctrl+le nyíl segít a lapozásban - - ::ELEMEK + + ::ELEMENTS OF DESIGN - - + + Az alábbiakban a grafikai tervezés azon elemeit és alapelveit mutatjuk be, melyeket a kezdÅ‘ művészeti hallgatóknak oktatnak azért, hogy megismertessék velük a művészi rajz különbözÅ‘ sajátságait. Nem egy mindent részletezÅ‘, teljes listát nyújtunk, Ön is nyugodtan bÅ‘vítheti vagy javíthatja, hogy még átfogóbbá tegye ezt az ismertetÅ‘t. - - - - Elemek - Alapelvek - Szín - Vonal - Forma - Tér - Textúra - Érték - Méret - Egyensúly - Kontraszt - Hangsúly - Arány - Minta - Ãtmenet - Kompozíció - Ãttekintés - - A tervezés elemei + + + + Elemek + Alapelvek + Szín + Vonal + Forma + Tér + Textúra + Érték + Méret + Egyensúly + Kontraszt + Hangsúly + Arány + Minta + Ãtmenet + Kompozíció + Ãttekintés + + A tervezés elemei - - + + A következÅ‘ elemek a grafikai tervezés építÅ‘kockái: - - Vonal + + Vonal - - + + A vonal az a hosszal és iránnyal bíró jel, amelyet egy felületen végigmozgó pont hoz létre. A vonalnak változhat a hossza, a szélessége, az iránya, a görbülete és a színe. A vonal lehet sík- (egy tollvonás a papíron) vagy térhatású. - + @@ -102,54 +102,54 @@ - - Forma + + Forma - - + + A forma egy határozott alakzat, mely azáltal jön létre, hogy tényleges vagy érzékeltetett vonalak találkozása körülzár egy teret. A szín vagy árnyék változása is meghatározhat egy formát. A formák különféle típusokba sorolhatók: geometriai (négyszög, háromszög, kör) és organikus (szabálytalanságok a körvonalban). - + - - Méret + + Méret - - + + A méret az objektumok, vonalak vagy formák nagyságbeli váltakozásaira utal. A méretek különbözÅ‘sége lehet valóságos vagy látszólagos. - - NAGY - kicsi - - Tér + + NAGY + kicsi + + Tér - - + + A tér egy üres vagy nyitott terület az objektumok között, körül, felett, alatt vagy az objektumok belsejében. Az alakok és formák a körülöttük és bennük levÅ‘ tér által jönnek létre. A teret gyakran nevezik sík- vagy térhatásúnak. Egy pozitív teret valamilyen alakzat vagy forma tölt ki. Egy negatív teret valamilyen forma vagy alakzat zár körül. - - - - - - Szín + + + + + + Szín - - + + @@ -166,12 +166,12 @@ - - - Textúra + + + Textúra - - + + @@ -188,15 +188,15 @@ - - - - - - Érték + + + + + + Érték - - + + @@ -222,71 +222,71 @@ - - - - - - - Alapelvek + + + + + + + Alapelvek - - + + Az elemekbÅ‘l az alapelveket szem elÅ‘tt tartva alkotható meg a kompozíció. - - Egyensúly + + Egyensúly - - + + Az egyensúly az alakok, formák, értékek, színek stb. vizuális egyöntetűségének érzetét jelenti. Az egyensúly lehet szimmetrikus vagy egyenletes, illetve aszimmetrikus vagy nem egyenletes. A kompozíción belüli egyensúly az objektumok, értékek, színek, textúrák, alakok, formák stb. által érhetÅ‘ el. - - - - - - - - Kontraszt + + + + + + + + Kontraszt - - + + A kontraszt egymástól nagyon különbözÅ‘ vagy éppen egymásnak ellentmondó elemek egymás mellé helyezése által jön létre. - - - - - - Hangsúly + + + + + + Hangsúly - - + + A hangsúly a műalkotás bizonyos részeinek kiemelésére és a figyelem megragadására szolgál. Egy rajzon a tekintet elÅ‘ször mindig egy érdekes pontra téved. - - - - - - - Arány + + + + + + + Arány - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant & 4WD - Andrew Fitzsimon SVG-rajzaAz Open Clip Art Library szívességébÅ‘lhttp://www.openclipart.org/ - + Random Ant & 4WD + Andrew Fitzsimon SVG-rajzaAz Open Clip Art Library szívességébÅ‘lhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Minta + + + + Minta - - + + @@ -425,14 +425,14 @@ - - - - - Ãtmenet + + + + + Ãtmenet - - + + @@ -448,17 +448,17 @@ - - - - - - - - Kompozíció + + + + + + + + Kompozíció - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Irodalomjegyzék + + + Irodalomjegyzék - - + + Részleges jegyzék az e dokumentum készítéséhez felhasznált irodalomról. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - A Ctrl+fel nyíl segít a lapozásban + + A Ctrl+fel nyíl segít a lapozásban diff --git a/share/tutorials/tutorial-elements.id.svg b/share/tutorials/tutorial-elements.id.svg index 92a27324d..c8562a38a 100644 --- a/share/tutorials/tutorial-elements.id.svg +++ b/share/tutorials/tutorial-elements.id.svg @@ -36,61 +36,61 @@ - - Gunakan Ctrl+panah bawah untuk menggulung + + Gunakan Ctrl+panah bawah untuk menggulung - - ::ELEMEN + + ::ELEMENTS OF DESIGN - - + + Tutorial ini akan mendemonstrasikan elemen dan prinsip desain yang biasanya diajarkan pada murid seni untuk memahami bermacam properti yang digunakan dalam membuat karya seni. Ini bukanlah daftar yang baku, jadi silahkan tambah, keluarkan, atau mengkombinasikannya untuk membuat tutorial ini lebih komperhensif. - - - - Elemen - Prinsip - Warna - Garis - Bentuk - Ruang - Tekstur - Value - Ukuran - Keseimbangan - Kontras - Empasis - Proporsi - Pola - Gradiasi - Komposisi - Tampak kilas - - Elemen dari Desain + + + + Elemen + Prinsip + Warna + Garis + Bentuk + Ruang + Tekstur + Value + Ukuran + Keseimbangan + Kontras + Empasis + Proporsi + Pola + Gradiasi + Komposisi + Tampak kilas + + Elemen dari Desain - - + + Elemen-elemen berikut adalah yang membangun sebuah desain. - - Garis + + Garis - - + + Sebuah garis didefinisikan sebagai tanda dengan panjang dan arah, dihasilkan dengan poin yang bergerak pada sebuah bidang. Sebuah garis bisa bervariasi panjangnya, lebarnya, arahnya, kurvaturnya, dan warnanya. Garis bisa dalam dua dimensi (misalnya garis pensil pada kertas), atau tiga dimensi. - + @@ -102,54 +102,54 @@ - - Bentuk + + Bentuk - - + + Sebuah figur datar, sebuah bentuk, dihasilkan saat sebuah garis mengelilingi sebuah ruang. Perubahan warna atau bayangan bisa mendefinisikan sebuah bentuk. Bentuk bisa dibagi dalam beberapa tipe: geometrik (persegi, segi tiga, lingkaran) dan organik (iregular pada garis luarnya). - + - - Ukuran + + Ukuran - - + + Ini menunjuk pada variasi dalam proporsi obyek, garis, atau bentuk. Terdapat ragam ukuran dalam obyek baik yang nyata maupun khayalan. - - BESAR - kecil - - Ruang + + BESAR + kecil + + Ruang - - + + Ruang adalah daerah kosong atau terbuka diantara, disekitar, diatas, dibawah, atau didalam obyek. Sebuah bentuk dibentuk oleh ruang disekitar dan didalamnya. Ruang sering disebut tiga-dimensi atau dua-dimensi. Ruang positif diisi oleh sebuah bentuk, sedangkan ruang negatif dikelilingi oleh bentuk. - - - - - - Warna + + + + + + Warna - - + + @@ -166,12 +166,12 @@ - - - Tekstur + + + Tekstur - - + + @@ -188,15 +188,15 @@ - - - - - - Value + + + + + + Value - - + + @@ -222,71 +222,71 @@ - - - - - - - Prinsip dari Desain + + + + + + + Prinsip dari Desain - - + + Prinsip penggunaan elemen desain untuk menghasilkan komposisi. - - Keseimbangan + + Keseimbangan - - + + Keseimbangan adalah rasa dari melihat sesuatu seimbang dalam bentuk, formasi, value, warna, dsbg. Keseimbangan bisa simetrikal atau pas atau asimetrikal dan ganjil. Obyek, value, warna, tekstur, bentuk, formasi, dsbg., bisa digunakan untuk mendapatkan keseimbangan dalam komposisi. - - - - - - - - Kontras + + + + + + + + Kontras - - + + Kontras adalah penempatan dari dua elemen yang berlawanan. - - - - - - Empasis + + + + + + Empasis - - + + Empasis digunakan untuk membuat beberapa bagian dari karya seni terlihat mencolok dan menarik perhatian. Pusat perhatian atau focal point adalah tempat dimana sesuatu yang menarik perhatian pertama. - - - - - - - Proporsi + + + + + + + Proporsi - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant & 4WD - Gambar SVG dibuat oleh Andrew FitzsimonBagian dari Open Clip Art Libraryhttp://www.openclipart.org/ - + Random Ant & 4WD + Gambar SVG dibuat oleh Andrew FitzsimonBagian dari Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Pola + + + + Pola - - + + @@ -425,14 +425,14 @@ - - - - - Gradiasi + + + + + Gradiasi - - + + @@ -448,17 +448,17 @@ - - - - - - - - Komposisi + + + + + + + + Komposisi - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Daftar Pustaka + + + Daftar Pustaka - - + + Berikut adalah Daftar Pustaka yang digunakan untuk membuat dokumen ini. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Gunakan Ctrl+panah atas untuk menggulung + + Gunakan Ctrl+panah atas untuk menggulung diff --git a/share/tutorials/tutorial-elements.ja.svg b/share/tutorials/tutorial-elements.ja.svg index 4cad71924..282ce3182 100644 --- a/share/tutorials/tutorial-elements.ja.svg +++ b/share/tutorials/tutorial-elements.ja.svg @@ -36,61 +36,61 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::è¦ç´  + + ::ELEMENTS OF DESIGN - - + + ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã€èŠ¸è¡“ä½œå“ã®åˆ¶ä½œã«ãŠã„ã¦ç”¨ã„られるã„ã‚ã„ã‚ãªç‰¹æ€§ã‚’ç†è§£ã™ã‚‹ãŸã‚ã«ã€é€šå¸¸èŠ¸è¡“å®¶ã‚’ç›®æŒ‡ã™å­¦ç”ŸãŒåˆæœŸã«æ•™ãˆã‚‰ã‚Œã‚‹ãƒ‡ã‚¶ã‚¤ãƒ³ã®è¦ç´ ã¨åŽŸå‰‡ã«ã¤ã„ã¦ç´¹ä»‹ã—ã¾ã™ã€‚ - - - - è¦ç´  - 原則 - 色 - ç·š - シェイプ - スペース - テクスãƒãƒ£ - 明度 - サイズ - ãƒãƒ©ãƒ³ã‚¹ - コントラスト - 強調 - 比率 - パターン - グラデーション - 構図 - 概略 - - デザインã®è¦ç´  + + + + è¦ç´  + 原則 + 色 + ç·š + シェイプ + スペース + テクスãƒãƒ£ + 明度 + サイズ + ãƒãƒ©ãƒ³ã‚¹ + コントラスト + 強調 + 比率 + パターン + グラデーション + 構図 + 概略 + + デザインã®è¦ç´  - - + + 以下ãŒãƒ‡ã‚¶ã‚¤ãƒ³ã‚’æ§‹æˆã™ã‚‹è¦ç´ ã«ãªã‚Šã¾ã™ã€‚ - - ç·š + + ç·š - - + + ç·šã¯é•·ã•ã¨æ–¹å‘ã®è¨˜å·ã¨ã—ã¦å®šç¾©ã•れã€é¢ã‚’横切る点ã«ã‚ˆã£ã¦ä½œæˆã•れã¾ã™ã€‚ç·šã¯ãã®é•·ã•ã€å¹…ã€æ–¹å‘ã€æ›²çއã€ãŠã‚ˆã³è‰²ã‚’変化ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ç·šã¯äºŒæ¬¡å…ƒ (ç´™ã«ãƒšãƒ³ã§æ›¸ã‹ã‚ŒãŸç·š)ã€ã¾ãŸã¯æš—ã«ä¸‰æ¬¡å…ƒã«ãªã‚Šå¾—ã¾ã™ã€‚ - + @@ -102,54 +102,54 @@ - - シェイプ + + シェイプ - - + + å¹³é¢å›³å½¢ã®ã‚·ã‚§ã‚¤ãƒ—ã¯ã€ç©ºé–“を囲む実際ã®ã€ã¾ãŸã¯æš—示的ãªç·šã®æŽ¥ç¶šã«ã‚ˆã‚Šä½œæˆã•れã¾ã™ã€‚色や濃淡ã®å¤‰å‹•ã§ã‚·ã‚§ã‚¤ãƒ—を定義ã§ãã¾ã™ã€‚シェイプã«ã¯ã„ãã¤ã‹ã®ã‚¿ã‚¤ãƒ—ã€ã™ãªã‚ã¡å¹¾ä½•学図形 (四角形ã€ä¸‰è§’å½¢ã€å††) ã¨éžæ•´å½¢ã®ã‚¢ã‚¦ãƒˆãƒ©ã‚¤ãƒ³ã«ã‚ã‘られã¾ã™ã€‚ - + - - サイズ + + サイズ - - + + ã“れã¯ã‚ªãƒ–ジェクトã€ç·šã€ã‚ã‚‹ã„ã¯ã‚·ã‚§ã‚¤ãƒ—ã®ãƒãƒ©ãƒ³ã‚¹ã®å¤‰åŒ–ã«ã¤ã„ã¦ã®è¨€åŠã§ã™ã€‚ç¾å®Ÿã‚ã‚‹ã„ã¯æƒ³åƒã®ã‚ªãƒ–ジェクトã«ã¯ã‚µã‚¤ã‚ºã®å¤‰å‹•ãŒã‚りã¾ã™ã€‚ - - BIG - small - - スペース + + BIG + small + + スペース - - + + スペースã¯ã‚ªãƒ–ジェクトã®é–“ã€å‘¨å›²ã€ä¸Šã€ä¸‹ã€ã‚ã‚‹ã„ã¯ãã®ä¸­ã«ã‚ã‚‹ã€ç©ºã®ã€ã‚ã‚‹ã„ã¯é–‹ã‘ãŸé ˜åŸŸã®ã“ã¨ã§ã™ã€‚シェイプã¨ãƒ•ォームã¯ãれらã®ä¸­ãŠã‚ˆã³å‘¨å›²ã«ã‚るスペースã«ã‚ˆã‚Šä½œæˆã•れã¾ã™ã€‚スペースã¯ã—ã°ã—ã°ä¸‰æ¬¡å…ƒã¾ãŸã¯äºŒæ¬¡å…ƒã¨è¦‹ãªã•れã¾ã™ã€‚æ­£ã®ã‚¹ãƒšãƒ¼ã‚¹ã¯ã‚·ã‚§ã‚¤ãƒ—やフォームã§å¡—りã¤ã¶ã•れã€è² ã®ã‚¹ãƒšãƒ¼ã‚¹ã¯ã‚·ã‚§ã‚¤ãƒ—やフォームã«å›²ã¾ã‚Œã¦ã„ã¾ã™ã€‚ - - - - - - 色 + + + + + + 色 - - + + @@ -166,12 +166,12 @@ - - - テクスãƒãƒ£ + + + テクスãƒãƒ£ - - + + @@ -188,15 +188,15 @@ - - - - - - 明度 + + + + + + 明度 - - + + @@ -222,71 +222,71 @@ - - - - - - - デザインã®åŽŸå‰‡ + + + + + + + デザインã®åŽŸå‰‡ - - + + 原則ã¯ã€ãƒ‡ã‚¶ã‚¤ãƒ³ã®è¦ç´ ã‚’用ã„ã¦æ§‹å›³ã‚’作æˆã—ã¾ã™ã€‚ - - ãƒãƒ©ãƒ³ã‚¹ + + ãƒãƒ©ãƒ³ã‚¹ - - + + ãƒãƒ©ãƒ³ã‚¹ã¯ã‚·ã‚§ã‚¤ãƒ—ã€ãƒ•ã‚©ãƒ¼ãƒ ã€æ˜Žåº¦ã€è‰²ã€ãã®ä»–ã¨åŒã˜ã視覚的ãªå°è±¡ã§ã™ã€‚ãƒãƒ©ãƒ³ã‚¹ã¯å¯¾ç§°ã‚ã‚‹ã„ã¯å‡ç­‰ãªãƒãƒ©ãƒ³ã‚¹ã‚„ã€éžå¯¾ç§°ãŠã‚ˆã³å‡ä¸€ã§ãªã„ãƒãƒ©ãƒ³ã‚¹ã‚’ã¨ã‚Šå¾—ã¾ã™ã€‚ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã€æ˜Žåº¦ã€è‰²ã€ãƒ†ã‚¯ã‚¹ãƒãƒ£ã€ã‚·ã‚§ã‚¤ãƒ—ã€ãƒ•ォームã€ãã®ä»–ã¯æ§‹å›³å†…ã§ãƒãƒ©ãƒ³ã‚¹ã‚’作æˆã—ã¾ã™ã€‚ - - - - - - - - コントラスト + + + + + + + + コントラスト - - + + コントラストã¯ã€ç›¸å¯¾ã™ã‚‹è¦ç´ ã‚’並置ã™ã‚‹äº‹ã§ã™ã€‚ - - - - - - 強調 + + + + + + 強調 - - + + 強調ã¯ã€ã‚¢ãƒ¼ãƒˆãƒ¯ãƒ¼ã‚¯ã®ä¸€éƒ¨ã‚’目立ãŸã›ã€æ³¨æ„を引ãã®ã«ç”¨ã„られã¾ã™ã€‚興味ã®ä¸­å¿ƒã‚ã‚‹ã„ã¯ç„¦ç‚¹ã¯ã€ã¾ãšæœ€åˆã«ç›®ã«æ­¢ã¾ã‚‹ã‚ˆã†ã«æã‹ã‚ŒãŸå ´æ‰€ã«ãªã‚Šã¾ã™ã€‚ - - - - - - - 比率 + + + + + + + 比率 - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant & 4WD - SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ - + Random Ant & 4WD + SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - パターン + + + + パターン - - + + @@ -425,14 +425,14 @@ - - - - - グラデーション + + + + + グラデーション - - + + @@ -448,17 +448,17 @@ - - - - - - - - 構図 + + + + + + + + 構図 - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - å‚考文献 + + + å‚考文献 - - + + 以下ã¯ã“ã®æ–‡æ›¸ã‚’作æˆã™ã‚‹ã«ã‚ãŸã‚Šç”¨ã„ãŸå‚考文献ã®ä¸€éƒ¨ã§ã™ã€‚ - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-elements.nl.svg b/share/tutorials/tutorial-elements.nl.svg index 7376d9011..db818ba1f 100644 --- a/share/tutorials/tutorial-elements.nl.svg +++ b/share/tutorials/tutorial-elements.nl.svg @@ -36,61 +36,61 @@ - Gebruik Ctrl+pijl omlaag om te scrollen + Gebruik Ctrl+pijl omlaag om te scrollen handleiding - - ::ELEMENTEN + + ::ELEMENTS OF DESIGN - - + + Deze handleiding demonstreert de elementen en ontwerpbeginselen die normaal aan kunststudenten aangeleerd worden om de verschillende aspecten in kunst te begrijpen. Dit is geen exclusieve lijst, dus voeg toe, haal uit en combineer om deze handleiding meer omvattend te maken. - - - - Elementen - Principes - Kleur - Lijn - Vorm - Ruimte - Textuur - Helderheid - Grootte - Balans - Contrast - Klemtoon - Proportie - Patroon - Gradatie - Compositie - Overzicht - - Ontwerpbeginselen + + + + Elementen + Principes + Kleur + Lijn + Vorm + Ruimte + Textuur + Helderheid + Grootte + Balans + Contrast + Klemtoon + Proportie + Patroon + Gradatie + Compositie + Overzicht + + Ontwerpbeginselen - - + + De volgende elementen zijn de bauwstenen van een ontwerp. - - Lijn + + Lijn - - + + Een lijn is gedefinieerd als een merkteken met lengte en richting, gemaakt door een punt dat langs een oppervlak beweegt. Een lijn kan variëren in lengte, breedte, richting, kromming en kleur. Een lijn kan tweedimensionaal (een potloodlijn op papier) of impliciet 3D zijn. - + @@ -102,54 +102,54 @@ - - Vorm + + Vorm - - + + Een vorm wordt gemaakt wanneer lijnen elkaar snijden en een ruimte omgeven. Een verandering in kleur of schaduw kan een vorm definiëren. Vormen kunnen verdeeld worden in verschillende types: geometrisch (vierkant, driehoek, cirkel) of organisch (onregelmatig). - + - - Grootte + + Grootte - - + + Grootte refereert naar variaties in de proporties van objecten, lijnen of vormen. Er is zowel werkelijke als veronderstelde variatie in objectgrootte. - - GR - klein - - Ruimte + + GR + klein + + Ruimte - - + + Ruimte zijn de lege of open gebieden tussen, rond, boven, onder of in objecten. Vormen worden bepaald door de ruimte rondom en binnenin ze. Ruimte wordt vaak drie- of tweedimensionaal genoemd. Positieve ruimte wordt gevuld door een vorm. Negatieve ruimte omgeeft een vorm. - - - - - - Kleur + + + + + + Kleur - - + + @@ -166,12 +166,12 @@ - - - Textuur + + + Textuur - - + + @@ -188,15 +188,15 @@ - - - - - - Helderheid + + + + + + Helderheid - - + + @@ -222,71 +222,71 @@ - - - - - - - Ontwerpprincipes + + + + + + + Ontwerpprincipes - - + + De principes gebruiken de ontwerpelementen om een compositie te maken. - - Balans + + Balans - - + + Balans is het gevoel van visuele gelijkheid in vorm, helderheid, kleur, etc. Balans kan symmetrisch of asymmetrisch zijn. Objecten, helderheid, kleuren, texturen, vormen, etc. kunnen gebruikt worden voor de balans in een compositie. - - - - - - - - Contrast + + + + + + + + Contrast - - + + Contrast is de nevenschikking van tegengestelde elementen. - - - - - - Klemtoon + + + + + + Klemtoon - - + + Klemtoon wordt gebruikt om bepaalde delen van het kunstwerk te accentueren en je aandacht te trekken. Het middelpunt van de aandacht of focaal punt is de plaats in een werk waar je oog het eerst naar kijkt. - - - - - - - Proportie + + + + + + + Proportie - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random mier & 4x4 - SVG-afbeelding gemaakt door Andrew FitzsimonMet dank aan de Open Clip Art Libraryhttp://www.openclipart.org/ - + Random mier & 4x4 + SVG-afbeelding gemaakt door Andrew FitzsimonMet dank aan de Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Patroon + + + + Patroon - - + + @@ -425,14 +425,14 @@ - - - - - Gradatie + + + + + Gradatie - - + + @@ -448,17 +448,17 @@ - - - - - - - - Compositie + + + + + + + + Compositie - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliografie + + + Bibliografie - - + + Dit is een gedeeltelijke bibliografie die gebruikt is voor het maken van dit document. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Gebruik Ctrl+pijl omhoog om te scrollen + + Gebruik Ctrl+pijl omhoog om te scrollen diff --git a/share/tutorials/tutorial-elements.pl.svg b/share/tutorials/tutorial-elements.pl.svg index f5dbe5513..6c6508205 100644 --- a/share/tutorials/tutorial-elements.pl.svg +++ b/share/tutorials/tutorial-elements.pl.svg @@ -36,61 +36,61 @@ - - Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć + + Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - - ::ELEMENTY + + ::ELEMENTS OF DESIGN - - + + Ten poradnik przedstawia elementy i zasady projektowania, których naucza siÄ™ poczÄ…tkujÄ…cych studentów akademii sztuk piÄ™knych, by zrozumieli różne techniki używane przy tworzeniu sztuki. Poradnik nie obejmuje wszystkich zagadnieÅ„ zwiÄ…zanych z tworzeniem sztuki, zatem dodawaj do niego, usuwaj, co niepotrzebne i przerabiaj go, aby staÅ‚ siÄ™ bardziej wyczerpujÄ…cy. - - - - Elementy - SkÅ‚adniki - Kolor - Linia - KsztaÅ‚t - PrzestrzeÅ„ - Tekstura - Walor - Wielkość - Równowaga - Kontrast - Emfaza - Proporcje - DeseÅ„ - Stopniowanie - Kompozycja - PrzeglÄ…d - - Elementy projektu + + + + Elementy + SkÅ‚adniki + Kolor + Linia + KsztaÅ‚t + PrzestrzeÅ„ + Tekstura + Walor + Wielkość + Równowaga + Kontrast + Emfaza + Proporcje + DeseÅ„ + Stopniowanie + Kompozycja + PrzeglÄ…d + + Elementy projektu - - + + NastÄ™pujÄ…ce elementy stanowiÄ… podstawÄ™ projektu: - - Linia + + Linia - - + + LiniÄ™ definiuje siÄ™ jako znak o dÅ‚ugoÅ›ci i kierunku utworzony przez punkt poruszajÄ…cy siÄ™ po powierzchni. Linia może mieć różnÄ… dÅ‚ugość, szerokość, kierunek, krzywiznÄ™ i kolor. Może być dwuwymiarowa (linia utworzona ołówkiem na papierze) lub pseudo trójwymiarowa. - + @@ -102,54 +102,54 @@ - - KsztaÅ‚t + + KsztaÅ‚t - - + + KsztaÅ‚t jest figurÄ… pÅ‚askÄ…. Jest tworzony, kiedy rzeczywiste lub domniemane linie łączÄ… siÄ™ otaczajÄ…c przestrzeÅ„. KsztaÅ‚t może być definiowany przez zmianÄ™ koloru lub cieniowania. KsztaÅ‚ty można podzielić na kilka typów: geometryczne (kwadrat, trójkÄ…t, koÅ‚o) oraz organiczne (o nieregularnym obrysie). - + - - Wielkość + + Wielkość - - + + Wielkość odnosi siÄ™ do różnic w proporcjach obiektów, linii lub ksztaÅ‚tów. Różnice wielkoÅ›ci obiektów mogÄ… być rzeczywiste albo wyobrażone. - - DUÅ»Y - maÅ‚y - - PrzestrzeÅ„ + + DUÅ»Y + maÅ‚y + + PrzestrzeÅ„ - - + + PrzestrzeÅ„ to pusty lub otwarty obszar pomiÄ™dzy obiektami, dookoÅ‚a, powyżej, poniżej lub wewnÄ…trz nich. KsztaÅ‚ty i formy sÄ… tworzone przez przestrzeÅ„ znajdujÄ…cÄ… siÄ™ dookoÅ‚a bÄ…dź wewnÄ…trz nich. PrzestrzeÅ„ nazywa siÄ™ czÄ™sto dwu lub trójwymiarowÄ…. PrzestrzeÅ„ pozytywna jest wypeÅ‚niana przez ksztaÅ‚t lub formÄ™, negatywna otacza je. - - - - - - Kolor + + + + + + Kolor - - + + @@ -166,12 +166,12 @@ - - - Tekstura + + + Tekstura - - + + @@ -188,15 +188,15 @@ - - - - - - Walor + + + + + + Walor - - + + @@ -222,71 +222,71 @@ - - - - - - - Zasady projektowania + + + + + + + Zasady projektowania - - + + KompozycjÄ™ tworzy siÄ™ z elementów projektu wedÅ‚ug okreÅ›lonych zasad. - - Równowaga + + Równowaga - - + + Równowaga jest wrażeniem wizualnego zrównoważenia ksztaÅ‚tu, formy, waloru, koloru itp. Równowaga może być symetryczna (równomiernie zrównoważona) albo asymetryczna (nierównomiernie zrównoważona). Do tworzenia równowagi w kompozycji mogÄ… być używane obiekty, walory, kolory, tekstury, ksztaÅ‚ty, formy itp. - - - - - - - - Kontrast + + + + + + + + Kontrast - - + + Kontrast jest zestawieniem przeciwstawnych elementów. - - - - - - Emfaza + + + + + + Emfaza - - + + Emfazy używa siÄ™, by wyróżnić pewne elementy kompozycji oraz przyciÄ…gnąć do nich uwagÄ™ odbiorcy. OÅ›rodkiem zainteresowania czy punktem centralnym jest miejsce, które pierwsze przyciÄ…ga wzrok. - - - - - - - Proporcje + + + + + + + Proporcje - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Mrówka i samochód z napÄ™dem na 4 koÅ‚a - Obrazek SVG autorstwa Andrew FitzsimonaDziÄ™ki uprzejmoÅ›ci Open Clip Art LIbraryhttp://www.openclipart.org/ - + Mrówka i samochód z napÄ™dem na 4 koÅ‚a + Obrazek SVG autorstwa Andrew FitzsimonaDziÄ™ki uprzejmoÅ›ci Open Clip Art LIbraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - DeseÅ„ + + + + DeseÅ„ - - + + @@ -425,14 +425,14 @@ - - - - - Stopniowanie + + + + + Stopniowanie - - + + @@ -448,17 +448,17 @@ - - - - - - - - Kompozycja + + + + + + + + Kompozycja - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliografia + + + Bibliografia - - + + Bibliografia wykorzystana w trakcie pisania tego poradnika. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć + + Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć diff --git a/share/tutorials/tutorial-elements.ru.svg b/share/tutorials/tutorial-elements.ru.svg index 76d95d9f1..9b232ea9e 100644 --- a/share/tutorials/tutorial-elements.ru.svg +++ b/share/tutorials/tutorial-elements.ru.svg @@ -36,61 +36,61 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - - ::ЭЛЕМЕÐТЫ + + ::ELEMENTS OF DESIGN - - + + Этот раздел учебника опиÑывает оÑновы и правила дизайна, которым обучают начинающих дизайнеров. Это не полный ÑпиÑок правил, и его можно Ñмело дополнÑть. - - - - Элементы - Правила - Цвет - Ð›Ð¸Ð½Ð¸Ñ - Фигура - ПроÑтранÑтво - Ð˜Ð¼Ð¸Ñ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ñ‚ÐµÐºÑтура - ИнтенÑивноÑть - Размер - Ð‘Ð°Ð»Ð°Ð½Ñ - КонтраÑÑ‚ - Ðкцент - ÐŸÑ€Ð¾Ð¿Ð¾Ñ€Ñ†Ð¸Ñ - ТекÑтура - Ð“Ñ€Ð°Ð´Ð°Ñ†Ð¸Ñ - ÐšÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ - Общее предÑтавление - - ОÑновы дизайна + + + + Элементы + Правила + Цвет + Ð›Ð¸Ð½Ð¸Ñ + Фигура + ПроÑтранÑтво + Ð˜Ð¼Ð¸Ñ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ñ‚ÐµÐºÑтура + ИнтенÑивноÑть + Размер + Ð‘Ð°Ð»Ð°Ð½Ñ + КонтраÑÑ‚ + Ðкцент + ÐŸÑ€Ð¾Ð¿Ð¾Ñ€Ñ†Ð¸Ñ + ТекÑтура + Ð“Ñ€Ð°Ð´Ð°Ñ†Ð¸Ñ + ÐšÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ + Общее предÑтавление + + ОÑновы дизайна - - + + Приведённые ниже оÑновы ÑвлÑÑŽÑ‚ÑÑ Ð² дизайне оÑновополагающими. - - Ð›Ð¸Ð½Ð¸Ñ + + Ð›Ð¸Ð½Ð¸Ñ - - + + Ð›Ð¸Ð½Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð° как отрезок прÑмой, имеющий длину и направление. Ð›Ð¸Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ менÑтьÑÑ Ð¿Ð¾ длине, ширине, направлению, кривизне и цвету. Ð›Ð¸Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть двухмерной (линиÑ, оÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÐºÐ°Ñ€Ð°Ð½Ð´Ð°ÑˆÐ¾Ð¼ на бумаге) или заключённой в три измерениÑ. - + @@ -102,54 +102,54 @@ - - Фигура + + Фигура - - + + ПлоÑÐºÐ°Ñ Ñ„Ð¸Ð³ÑƒÑ€Ð° получаетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾ÑтранÑтва линиÑми. МенÑющийÑÑ Ñ†Ð²ÐµÑ‚ или оттенок могут быть характериÑтикой фигуры. Фигуры могут быть разделены на неÑколько типов: геометричеÑкие (квадрат, треугольник, круг) и органичеÑкие (неправильные очертаниÑ). - + - - Размер + + Размер - - + + Размер имеет отношение к изменению пропорций объектов, линий или фигур. Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð¾Ð² объектов могут быть как реальными, так и воображаемыми. - - БОЛЬШОЙ - малый - - ПроÑтранÑтво + + БОЛЬШОЙ + малый + + ПроÑтранÑтво - - + + ПроÑтранÑтво — Ñто пуÑÑ‚Ð°Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ð¾Ð±Ð»Ð°Ñть между, вокруг, над, под или вне объекта. Фигуры и формы — Ñто чаÑти проÑтранÑтва. ЧаÑто проÑтранÑтво называют трёхмерным или двухмерным. Положительное проÑтранÑтво заполнено фигурой или формой. Отрицательное проÑтранÑтво окружает фигуру или форму. - - - - - - Цвет + + + + + + Цвет - - + + @@ -166,12 +166,12 @@ - - - Ð˜Ð¼Ð¸Ñ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ñ‚ÐµÐºÑтура + + + Ð˜Ð¼Ð¸Ñ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ñ‚ÐµÐºÑтура - - + + @@ -188,15 +188,15 @@ - - - - - - ИнтенÑивноÑть + + + + + + ИнтенÑивноÑть - - + + @@ -222,71 +222,71 @@ - - - - - - - Правила дизайна + + + + + + + Правила дизайна - - + + Правила иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлементов дизайна Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ð¸. - - Ð‘Ð°Ð»Ð°Ð½Ñ + + Ð‘Ð°Ð»Ð°Ð½Ñ - - + + Ð‘Ð°Ð»Ð°Ð½Ñ â€” Ñто ощущение визуального равенÑтва в фигуре, форме, цвете и Ñ‚.д. Ð‘Ð°Ð»Ð°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть Ñимметричным, Ñ‚.е. полноÑтью уравновешенным, либо аÑимметричным, Ñ‚.е. неуравновешенным. Объекты, цвета, текÑтуры, фигуры, формы и Ñ‚.д. могут быть иÑпользованы Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð±Ð°Ð»Ð°Ð½Ñа в композиции. - - - - - - - - КонтраÑÑ‚ + + + + + + + + КонтраÑÑ‚ - - + + КонтраÑÑ‚ — Ñто ÑопоÑтавление противоположноÑтей. - - - - - - Ðкцент + + + + + + Ðкцент - - + + Ðкцент иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ðº чаÑти иллюÑтрации. Это центр работы или та её чаÑть, на которой фокуÑируетÑÑ Ð²Ð°ÑˆÐµ внимание. - - - - - - - ÐŸÑ€Ð¾Ð¿Ð¾Ñ€Ñ†Ð¸Ñ + + + + + + + ÐŸÑ€Ð¾Ð¿Ð¾Ñ€Ñ†Ð¸Ñ - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Ðеопределённый Ant & 4WD - SVG изображение, автор — Эндрю ФитцÑаймонПредоÑтавлен Clip Art Libraryhttp://www.openclipart.org/ - + Ðеопределённый Ant & 4WD + SVG изображение, автор — Эндрю ФитцÑаймонПредоÑтавлен Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - ТекÑтура + + + + ТекÑтура - - + + @@ -425,14 +425,14 @@ - - - - - Ð“Ñ€Ð°Ð´Ð°Ñ†Ð¸Ñ + + + + + Ð“Ñ€Ð°Ð´Ð°Ñ†Ð¸Ñ - - + + @@ -448,17 +448,17 @@ - - - - - - - - ÐšÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ + + + + + + + + ÐšÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Ð‘Ð¸Ð±Ð»Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ + + + Ð‘Ð¸Ð±Ð»Ð¸Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ - - + + Вот ÑпиÑок чаÑти документов, иÑпользованных Ð´Ð»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ñтого учебника. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,9 +670,9 @@ people have submitted to that project. - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх diff --git a/share/tutorials/tutorial-elements.sk.svg b/share/tutorials/tutorial-elements.sk.svg index 80462ad4b..fa5935b5a 100644 --- a/share/tutorials/tutorial-elements.sk.svg +++ b/share/tutorials/tutorial-elements.sk.svg @@ -36,61 +36,61 @@ - - Na posunutie Äalej použite Ctrl+šípka dolu + + Na posunutie Äalej použite Ctrl+šípka dolu - - ::PRVKY NÃVRHU + + ::ELEMENTS OF DESIGN - - + + Tento návod predvedie prvky a princípy návrhu, ktoré sa bežne na zaÄiatku uÄia Å¡tudenti umeleckých smerov, aby porozumeli rozliÄným vlastnostiam používaným pri tvorbe výtvarných diel. Toto nie je vyÄerpávajúci zoznam, preto prosím pridávajte, odoberajte a kombinujte, aby bol tento návod prehľadnejší. - - - - Prvky návrhu - Princípy - Farba - ÄŒiara - Útvar - Priestor - Textúra - Hodnota - VeľkosÅ¥ - Vyváženie - Kontrast - Dôraz - Proporcie - Vzorka - Stupňovanie - Kompozícia - Prehľad - - Prvky návrhu + + + + Prvky návrhu + Princípy + Farba + ÄŒiara + Útvar + Priestor + Textúra + Hodnota + VeľkosÅ¥ + Vyváženie + Kontrast + Dôraz + Proporcie + Vzorka + Stupňovanie + Kompozícia + Prehľad + + Prvky návrhu - - + + Nasledovné prvky sú stavebnými blokmi návrhu. - - ÄŒiara + + ÄŒiara - - + + ÄŒiara je definované ako znaÄka s dĺžkou a smerom vytvorená bodom pohybujúcim sa po povrchu. ÄŒiara môžu maÅ¥ rozliÄnú dĺžku, šírku, smer, zakrivenie a farbu. ÄŒiara môže byÅ¥ dvojrozmerná (stopa ceruzky na papieri) alebo predpokladaná trojrozmerná. - + @@ -102,54 +102,54 @@ - - Útvar + + Útvar - - + + PloÅ¡ný objekt - útvar - sa tvorí, keÄ sa skutoÄné alebo predpokladané Äiary stretnú, aby obklopili priestor. Zmena farby alebo tieňovania môže definovaÅ¥ útvar. Útvary môžeme rozdeliÅ¥ do niekoľkých typov: geometrické (Å¡tvorec, trojuholník, kruh) a organické (s nepravidelným obrysom). - + - - VeľkosÅ¥ + + VeľkosÅ¥ - - + + Znamená zmeny v proporciách objektov, Äiar alebo útvarov. Veľkosti objektov sú premenlivé, Äi už sú reálne alebo imaginárne. - - VEĽKà - malý - - Priestor + + VEĽKà + malý + + Priestor - - + + Priestor je prázdna alebo otvorená oblasÅ¥ medzi, okolo, nad, pod alebo vnútri objektov. Útvary sú tvorené priestorom okolo nich a v ich vnútri. Priestor sa Äasto delí na trojrozmerný a dvojrozmerný. Kladný priestor je vyplnený útvarom. Záporný priestor obklopuje útvar. - - - - - - Farba + + + + + + Farba - - + + @@ -166,12 +166,12 @@ - - - Textúra + + + Textúra - - + + @@ -188,15 +188,15 @@ - - - - - - Hodnota + + + + + + Hodnota - - + + @@ -222,71 +222,71 @@ - - - - - - - Princípy návrhu + + + + + + + Princípy návrhu - - + + Princípy používajú prvky návrhu na vytvorenie kompozície. - - Vyváženie + + Vyváženie - - + + Vyváženie je pocit vizuálnej rovnosti v tvare, forme, hodnote, farbe atÄ. Vyváženie môže byÅ¥ symetrické (rovnomerne vyvážené) alebo asymetrické (nerovnomerne vyvážené). Na vytvorenie vyváženia v kompozícii možno použiÅ¥ objekty, hodnoty, farby, textúry, tvary, formy atÄ. - - - - - - - - Kontrast + + + + + + + + Kontrast - - + + Kontrast je juxtapozícia protikladných objektov. - - - - - - Dôraz + + + + + + Dôraz - - + + Dôraz sa používa na to, aby urÄité Äasti výtvarného diela vyÄnievali a zachytili vaÅ¡u pozornosÅ¥. Stredom záujmu alebo ohniskom je miesto, kam dielo najprv pritiahne váš zrak. - - - - - - - Proporcie + + + + + + + Proporcie - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Mravec a terénne vozidlo - SVG obrázok vytvoril Andrew FitzsimonPochádza z Open Clip Art Libraryhttp://www.openclipart.org/ - + Mravec a terénne vozidlo + SVG obrázok vytvoril Andrew FitzsimonPochádza z Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Vzorka + + + + Vzorka - - + + @@ -425,14 +425,14 @@ - - - - - Stupňovanie + + + + + Stupňovanie - - + + @@ -448,17 +448,17 @@ - - - - - - - - Kompozícia + + + + + + + + Kompozícia - - + + @@ -544,103 +544,99 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliografia + + + Bibliografia - - + + Toto je ÄiastoÄná bibliografia použitá na zostavenie tohto dokumentu. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics -people have submitted to that project. - + Zvláštne poÄakovanie si zaslúži Linda Kim (http://www.coroflot.com/redlucite/) za to, že mi pomohla (http://www.rejon.org/) s týmto návodom. Tiež Äakujem Open Clip Art Library (http://www.openclipart.org/) za grafiku, ktorú ľudia do tohto projektu zaslali. - + @@ -670,8 +666,8 @@ people have submitted to that project. - - Na posunutie späť použite Ctrl+šípka hore + + Na posunutie späť použite Ctrl+šípka hore diff --git a/share/tutorials/tutorial-elements.sl.svg b/share/tutorials/tutorial-elements.sl.svg index aaf621387..92637c596 100644 --- a/share/tutorials/tutorial-elements.sl.svg +++ b/share/tutorials/tutorial-elements.sl.svg @@ -36,61 +36,61 @@ - - Uporabite Ctrl+puÅ¡Äica navzdol za drsenje + + Uporabite Ctrl+puÅ¡Äica navzdol za drsenje - - ::ELEMENTI + + ::ELEMENTS OF DESIGN - - + + V tem vodiÄu vam bomo predstavili temeljne koncepte in naÄela oblikovanja, kot jih obiÄajno uÄijo v zaÄetnih letih Å¡tudija umetnosti da pokažejo pomen razliÄnih lastnosti oblikovanja. Spisek ne bo popoln, zato ga razÅ¡irite, povežite in naredite bolj izÄrpnega s svojimi lastnimi izkuÅ¡njami in znanjem. - - - - Elementi - NaÄela - Barva - ÄŒrta - Oblika - Prostor - Tekstura - Vrednost - Velikost - Ravnovesje - Kontrast - Poudarek - Razmerje - Vzorec - Gradacija - Kompozicija - Pregled - - Sestavine oblikovanja + + + + Elementi + NaÄela + Barva + ÄŒrta + Oblika + Prostor + Tekstura + Vrednost + Velikost + Ravnovesje + Kontrast + Poudarek + Razmerje + Vzorec + Gradacija + Kompozicija + Pregled + + Sestavine oblikovanja - - + + SledeÄe sestavine so gradniki oblikovanja. - - ÄŒrta + + ÄŒrta - - + + ÄŒrta je definirana kot znak z dolžino in smerjo, ustvarjen s toÄko, ki se giblje po povrÅ¡ini. ÄŒrte imajo lahko razliÄne dolžine, debeline, smeri, krivost, barvo. ÄŒrta je lahko dvorazsežna (sled svinÄnika na papirju), trorazsežna (žica) ali namiÅ¡ljena. - + @@ -102,54 +102,54 @@ - - Oblika + + Oblika - - + + Ravna figura oz. oblika nastane, ko se veÄ dejanskih ali namiÅ¡ljenih Ärt združi in zajame prostor. Spremeba v barvi ali senci lahko doloÄi obliko. Poznamo veÄ vrst oblik: geometrijske (kvadrat, trikotnik, krog) in organske (nepravilnega obrisa). - + - - Velikost + + Velikost - - + + To se nanaÅ¡a na raznolikost razmerij predmetov, Ärt ali oblik. Ta je lahko resniÄna ali namiÅ¡ljena. - - VELIKO - majhno - - Prostor + + VELIKO + majhno + + Prostor - - + + Prostor je prazna ali odprta povrÅ¡ina med, okrog, nad, pod ali znotraj predmeta. Oblike ustvarja prostor okrog in znotraj njih. Prostor je dvo- ali trorazsežen. Pozitiven prostor je zapolnjen z obliko, negativen jo obkroža. - - - - - - Barva + + + + + + Barva - - + + @@ -166,12 +166,12 @@ - - - Tekstura + + + Tekstura - - + + @@ -188,15 +188,15 @@ - - - - - - Vrednost + + + + + + Vrednost - - + + @@ -222,71 +222,71 @@ - - - - - - - NaÄela oblikovanja + + + + + + + NaÄela oblikovanja - - + + S temi naÄeli iz sestavin ustvarimo kompozicijo. - - Ravnovesje + + Ravnovesje - - + + Ravnovesje je obÄutje grafiÄne enakomernosti oblike, vrednosti, barve,.. Ravnovesje je lahko simetriÄno ali enakomerno urejeno ali pa asimetriÄno ali neenakomerno razporejeno. Za ustvarjanje ravnovesja v kompoziciji lahko uporabljamo predmete, vrednosti, barve, teksture,... - - - - - - - - Kontrast + + + + + + + + Kontrast - - + + Kontrast je postavitev nasprotujoÄih si sestavin v neko celoto - - - - - - Poudarek + + + + + + Poudarek - - + + Poudarek uporabimo, Äe želimo, da nek del izdelka izstopa in privlaÄi pozornost. SrediÅ¡Äe zanimanja ali žariÅ¡Äe pogleda je toÄka, k kateri izdelek najprej pritegne pogled. - - - - - - - Razmerje + + + + + + + Razmerje - - + + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant in 4WD - Sliko SVG je ustvaril Andrew FitzsimonHrani Open Clip Art Libraryhttp://www.openclipart.org/ - + Random Ant in 4WD + Sliko SVG je ustvaril Andrew FitzsimonHrani Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -403,13 +403,13 @@ - - - - Vzorec + + + + Vzorec - - + + @@ -425,14 +425,14 @@ - - - - - Gradacija + + + + + Gradacija - - + + @@ -448,17 +448,17 @@ - - - - - - - - Kompozicija + + + + + + + + Kompozicija - - + + @@ -544,103 +544,103 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Literatura + + + Literatura - - + + Delen seznam literature, ki je bila uporabljena pri pripravi tega dokumenta. - - - + + + - http://www.makart.com/resources/artclass/EPlist.html + http://www.makart.com/resources/artclass/EPlist.html - - - + + + - http://www.princetonol.com/groups/iad/Files/elements2.htm + http://www.princetonol.com/groups/iad/Files/elements2.htm - - - + + + - http://www.johnlovett.com/test.htm + http://www.johnlovett.com/test.htm - - - + + + - http://digital-web.com/articles/elements_of_design/ + http://digital-web.com/articles/elements_of_design/ - - - + + + - http://digital-web.com/articles/principles_of_design/ + http://digital-web.com/articles/principles_of_design/ - - + + - Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping -me (http://www.rejon.org/) with this tutorial. Also, thanks to the -Open Clip Art Library (http://www.openclipart.org/) and the graphics + Special thanks to Linda Kim (http://www.coroflot.com/redlucite/) for helping +me (http://www.rejon.org/) with this tutorial. Also, thanks to the +Open Clip Art Library (http://www.openclipart.org/) and the graphics people have submitted to that project. - + @@ -670,8 +670,8 @@ people have submitted to that project. - - Uporabite Ctrl+puÅ¡Äica navzgor za drsenje + + Uporabite Ctrl+puÅ¡Äica navzgor za drsenje diff --git a/share/tutorials/tutorial-elements.svg b/share/tutorials/tutorial-elements.svg index 3ee6c8963..b71f1709d 100644 --- a/share/tutorials/tutorial-elements.svg +++ b/share/tutorials/tutorial-elements.svg @@ -40,10 +40,10 @@ Use Ctrl+down arrow to scroll - - ::ELEMENTS + + ::ELEMENTS OF DESIGN - + @@ -54,40 +54,40 @@ properties used in art making. This is not an exhaustive list, so please add, subtract, and combine to make this tutorial more comprehensive. - - - - Elements - Principles - Color - Line - Shape - Space - Texture - Value - Size - Balance - Contrast - Emphasis - Proportion - Pattern - Gradation - Composition - Overview - - Elements of Design + + + + Elements + Principles + Color + Line + Shape + Space + Texture + Value + Size + Balance + Contrast + Emphasis + Proportion + Pattern + Gradation + Composition + Overview + + Elements of Design - + The following elements are the building blocks of design. - - Line + + Line - + @@ -98,7 +98,7 @@ curvature, and color. Line can be two-dimensional (a pencil line on paper), or implied three-dimensional. - + @@ -110,10 +110,10 @@ paper), or implied three-dimensional. - - Shape + + Shape - + @@ -124,16 +124,16 @@ Shapes can be divided into several types: geometric (square, triangle, circle) and organic (irregular in outline). - + - - Size + + Size - + @@ -142,13 +142,13 @@ circle) and organic (irregular in outline). There is a variation of sizes in objects either real or imagined. - - BIG - small - - Space + + BIG + small + + Space - + @@ -160,14 +160,14 @@ dimensional. Positive space is filled by a shape or form. Negative space surrounds a shape or form. - - - - - - Color + + + + + + Color - + @@ -190,11 +190,11 @@ dullness). - - - Texture + + + Texture - + @@ -215,14 +215,14 @@ or pebbly. - - - - - - Value + + + + + + Value - + @@ -253,25 +253,25 @@ in a composition. - - - - - - - Principles of Design + + + + + + + Principles of Design - + The principles use the elements of design to create a composition. - - Balance + + Balance - + @@ -282,16 +282,16 @@ un-evenly balanced. Objects, values, colors, textures, shapes, forms, etc., can be used in creating a balance in a composition. - - - - - - - - Contrast + + + + + + + + Contrast - + @@ -299,14 +299,14 @@ etc., can be used in creating a balance in a composition. Contrast is the juxtaposition of opposing elements - - - - - - Emphasis + + + + + + Emphasis - + @@ -316,15 +316,15 @@ and grab your attention. The center of interest or focal point is the place a work draws your eye to first. - - - - - - - Proportion + + + + + + + Proportion - + @@ -383,9 +383,9 @@ to another. - - - + + + @@ -422,9 +422,9 @@ to another. - Random Ant & 4WD - SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ - + Random Ant & 4WD + SVG Image Created by Andrew FitzsimonCourtesy of Open Clip Art Libraryhttp://www.openclipart.org/ + @@ -444,12 +444,12 @@ to another. - - - - Pattern + + + + Pattern - + @@ -468,13 +468,13 @@ and over again. - - - - - Gradation + + + + + Gradation - + @@ -495,16 +495,16 @@ gradation from dark to light will cause the eye to move along a shape. - - - - - - - - Composition + + + + + + + + Composition - + @@ -591,48 +591,48 @@ gradation from dark to light will cause the eye to move along a shape. - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - Bibliography + + + Bibliography - + This is a partial bibliography used to build this document. - - + + @@ -640,8 +640,8 @@ gradation from dark to light will cause the eye to move along a shape. http://www.makart.com/resources/artclass/EPlist.html - - + + @@ -649,8 +649,8 @@ gradation from dark to light will cause the eye to move along a shape. http://www.princetonol.com/groups/iad/Files/elements2.htm - - + + @@ -658,8 +658,8 @@ gradation from dark to light will cause the eye to move along a shape. http://www.johnlovett.com/test.htm - - + + @@ -667,8 +667,8 @@ gradation from dark to light will cause the eye to move along a shape. http://digital-web.com/articles/elements_of_design/ - - + + @@ -676,7 +676,7 @@ gradation from dark to light will cause the eye to move along a shape. http://digital-web.com/articles/principles_of_design/ - + @@ -687,7 +687,7 @@ Open Clip Art Library (htt people have submitted to that project. - + diff --git a/share/tutorials/tutorial-elements.zh_TW.svg b/share/tutorials/tutorial-elements.zh_TW.svg index b6ef9c765..e09b7cfe6 100644 --- a/share/tutorials/tutorial-elements.zh_TW.svg +++ b/share/tutorials/tutorial-elements.zh_TW.svg @@ -50,47 +50,47 @@ 這篇教學示範設計的è¦ç´ å’ŒåŽŸå‰‡ï¼Œåœ¨åˆæœŸæ•™å°Žæ­£è¦ç¾Žè¡“學生這些是為了ç†è§£ç”¨åœ¨è—術創作的å„ç¨®æ€§è³ªã€‚é€™ä¸æ˜¯ä¸€å€‹è©³ç›¡çš„列表,所以請補充ã€åˆªæ¸›å’Œçµåˆå…¶ä»–內容讓這個教學更全é¢ã€‚ - - - - è¦ç´  - 原則 - é¡è‰² - ç·šæ¢ - 形狀 - 空間 - ç´‹ç† - 明暗 - å¤§å° - 平衡 - å°æ¯” - 強調 - 比例 - 圖案 - 層次 - çµ„åˆ - æ¦‚è¦ - - 設計è¦ç´  + + + + è¦ç´  + 原則 + é¡è‰² + ç·šæ¢ + 形狀 + 空間 + ç´‹ç† + 明暗 + å¤§å° + 平衡 + å°æ¯” + 強調 + 比例 + 圖案 + 層次 + çµ„åˆ + æ¦‚è¦ + + 設計è¦ç´  - + ä¸‹åˆ—å¹¾é …å…ƒç´ æ˜¯è¨­è¨ˆçš„ç©æœ¨ã€‚ - - ç·šæ¢ + + ç·šæ¢ - + ç·šæ¢è¢«å®šç¾©ç‚ºè¡¨ç¤ºé•·åº¦å’Œæ–¹å‘的特徵,由一點建立並移動跨越一個表é¢ã€‚ç·šæ¢èƒ½æœ‰å„種長度ã€å¯¬åº¦ã€æ–¹å‘ã€æ›²çŽ‡å’Œé¡è‰²ã€‚ç·šæ¢å¯ä»¥æ˜¯äºŒç¶­ (紙張上的鉛筆線),或是隱å«çš„三維。 - + @@ -102,53 +102,53 @@ - - 形狀 + + 形狀 - + 當實際或隱å«çš„ç·šæ¢æŽ¥åˆåœç¹žä¸€å€‹ç©ºé–“時就建立出一個平é¢åœ–å½¢ã€å½¢ç‹€ã€‚é¡è‰²æˆ–明暗變化å¯å®šç¾©ä¸€å€‹å½¢ç‹€ã€‚形狀å¯åˆ†ç‚ºå¹¾ç¨®é¡žåž‹ï¼šå¹¾ä½• (正方形ã€ä¸‰è§’å½¢ã€åœ“å½¢) å’Œ 有機 (ä¸è¦å‰‡çš„輪廓)。 - + - - å¤§å° + + å¤§å° - + 這項涉åŠç‰©ä»¶ã€ç·šæ¢æˆ–形狀的比例差異。物件ä¸è«–在實際或視覺上都有大å°å·®ç•°ã€‚ - - BIG - small - - 空間 + + BIG + small + + 空間 - + 空間是物件周åœã€ä¸Šé¢ã€ä¸‹é¢æˆ–裡é¢çš„空白或開放é¢ç©ã€‚由空間的周åœå’Œå…§éƒ¨è£½é€ å‡ºå½¢ç‹€å’Œçµæ§‹ã€‚ç©ºé–“å¸¸è¢«ç¨±ç‚ºä¸‰ç¶­æˆ–äºŒç¶­ã€‚å¯¦ç©ºé–“æ˜¯ç”±ä¸€å€‹å½¢ç‹€æˆ–çµæ§‹å¡«å……。虛空間則åœç¹žä¸€å€‹å½¢ç‹€æˆ–çµæ§‹ã€‚ - - - - - - é¡è‰² + + + + + + é¡è‰² - + @@ -166,11 +166,11 @@ - - - ç´‹ç† + + + ç´‹ç† - + @@ -188,14 +188,14 @@ - - - - - - 明暗 + + + + + + 明暗 - + @@ -222,70 +222,70 @@ - - - - - - - 設計原則 + + + + + + + 設計原則 - + 原則是é‹ç”¨è¨­è¨ˆè¦ç´ å‰µä½œå‡ºä¸€å€‹çµ„åˆé«”。 - - 平衡 + + 平衡 - + 平衡是一種在形狀ã€çµæ§‹ã€æ˜Žæš—ã€é¡è‰²ç­‰ä¸Šé¢çš„視覺å‡ç­‰æ„Ÿå—。平衡感å¯ä»¥æ˜¯å°ç¨±çš„æˆ–å‡å‹»çš„平衡或者éžå°ç¨±çš„å’Œéžå‡å‹»çš„å¹³è¡¡ã€‚ç‰©ä»¶ã€æ˜Žæš—ã€é¡è‰²ã€ç´‹ç†ã€å½¢ç‹€ã€çµæ§‹ç­‰å¯ä»¥ç”¨æ–¼å»ºç«‹ä¸€å€‹åˆæˆé«”的平衡感。 - - - - - - - - å°æ¯” + + + + + + + + å°æ¯” - + å°æ¯”是幾項相å°çš„元素並列一起。 - - - - - - 強調 + + + + + + 強調 - + 強調是用來使作å“çš„æŸäº›éƒ¨ä»½è„«ç©Žè€Œå‡ºä¸¦å¼•起你的注æ„。趣味中心或焦點的作用是å¸å¼•你的第一次目光。 - - - - - - - 比例 + + + + + + + 比例 - + @@ -342,9 +342,9 @@ - - - + + + @@ -381,9 +381,9 @@ - Random Ant & 4WD - SVG 圖åƒä½œè€…為 Andrew Fitzsimon開放美工圖庫的美æ„http://www.openclipart.org/ - + Random Ant & 4WD + SVG 圖åƒä½œè€…為 Andrew Fitzsimon開放美工圖庫的美æ„http://www.openclipart.org/ + @@ -403,12 +403,12 @@ - - - - 圖案 + + + + 圖案 - + @@ -425,13 +425,13 @@ - - - - - 層次 + + + + + 層次 - + @@ -448,16 +448,16 @@ - - - - - - - - çµ„åˆ + + + + + + + + çµ„åˆ - + @@ -544,48 +544,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - åƒè€ƒæ–‡ç» + + + åƒè€ƒæ–‡ç» - + 這是用於文件的部份åƒè€ƒæ–‡ç»ã€‚ - - + + @@ -593,8 +593,8 @@ http://www.makart.com/resources/artclass/EPlist.html - - + + @@ -602,8 +602,8 @@ http://www.princetonol.com/groups/iad/Files/elements2.htm - - + + @@ -611,8 +611,8 @@ http://www.johnlovett.com/test.htm - - + + @@ -620,8 +620,8 @@ http://digital-web.com/articles/elements_of_design/ - - + + @@ -629,14 +629,14 @@ http://digital-web.com/articles/principles_of_design/ - + ç‰¹åˆ¥æ„Ÿè¬ Linda Kim (http://www.redlucite.org/redlucite/) 給予我 (http://www.rejon.org/) 和這篇教學的幫助。也感è¬é–‹æ”¾ç¾Žå·¥åœ–庫 (http://www.openclipart.org/) å’Œéžäº¤åˆ°é€™å€‹è¨ˆåŠƒçš„ä½œå“ã€ä½œè€…。 - + diff --git a/share/tutorials/tutorial-interpolate.be.svg b/share/tutorials/tutorial-interpolate.be.svg index 204484537..1ddb69b93 100644 --- a/share/tutorials/tutorial-interpolate.be.svg +++ b/share/tutorials/tutorial-interpolate.be.svg @@ -1,6 +1,6 @@ - + @@ -36,74 +36,74 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - + ::ІÐТЭРПÐЛЯЦЫЯ -Ryan Lerch, ryanlerch на gmail кропка com - - + + + У гÑтым дакумÑнце тлумачыцца Ñк выкарыÑтоўваць пашыральнік Inkscape «ІнтÑрпалÑцыÑ». - - Уводзіны + + Уводзіны - - + + Даны пашыральнік робіць ліненую інтÑрпалÑцыю між двума ці большай колькаÑьцю вылучаных шлÑхоў. ГÑта значыць, збольшага, што ён «запаўнÑе прагалы» між шлÑхамі й ператварае Ñ–Ñ… адпаведна зададзенай колькаÑьці крокаў. - - + + - Каб ÑкарыÑтацца ÑÑ„Ñктам інтÑраплÑцыі вылучыце шлÑÑ…Ñ–, ÑÐºÑ–Ñ Ð¶Ð°Ð´Ð°ÐµÑ†Ðµ ператварыць, Ñ– выберыце з мÑню ЭфÑкты > Стварыць Ñа шлÑху > ІнтÑрпалÑцыÑ. + Каб ÑкарыÑтацца ÑÑ„Ñктам інтÑраплÑцыі вылучыце шлÑÑ…Ñ–, ÑÐºÑ–Ñ Ð¶Ð°Ð´Ð°ÐµÑ†Ðµ ператварыць, Ñ– выберыце з мÑню ЭфÑкты > Стварыць Ñа шлÑху > ІнтÑрпалÑцыÑ. - - + + - Ðб'екты, ÑÐºÑ–Ñ Ð²Ñ‹ зьбіраецеÑÑ Ñ–Ð½Ñ‚ÑрпалÑваць, Ñпачатку муÑÑць быць Ð¿ÐµÑ€Ð°Ñ‚Ð²Ð¾Ñ€Ð°Ð½Ñ‹Ñ Ñž шлÑÑ…Ñ–. Ð”Ð»Ñ Ð³Ñтага вылучыце аб'ект Ñ– ÑкарыÑтайце ШлÑх > Ðб'ект у шлÑÑ… ці Shift+Ctrl+C. Калі Ð²Ð°ÑˆÑ‹Ñ Ð°Ð±'екты не зьÑўлÑюцца шлÑхамі, то ÑÑ„Ñкт нічога Ð½Ñ Ð·Ñ€Ð¾Ð±Ñ–Ñ†ÑŒ. + Ðб'екты, ÑÐºÑ–Ñ Ð²Ñ‹ зьбіраецеÑÑ Ñ–Ð½Ñ‚ÑрпалÑваць, Ñпачатку муÑÑць быць Ð¿ÐµÑ€Ð°Ñ‚Ð²Ð¾Ñ€Ð°Ð½Ñ‹Ñ Ñž шлÑÑ…Ñ–. Ð”Ð»Ñ Ð³Ñтага вылучыце аб'ект Ñ– ÑкарыÑтайце ШлÑх > Ðб'ект у шлÑÑ… ці Shift+Ctrl+C. Калі Ð²Ð°ÑˆÑ‹Ñ Ð°Ð±'екты не зьÑўлÑюцца шлÑхамі, то ÑÑ„Ñкт нічога Ð½Ñ Ð·Ñ€Ð¾Ð±Ñ–Ñ†ÑŒ. - - ІнтÑрпалÑÑ†Ñ‹Ñ Ð¼Ñ–Ð¶ двума аднолькавымі вузламі + + ІнтÑрпалÑÑ†Ñ‹Ñ Ð¼Ñ–Ð¶ двума аднолькавымі вузламі - - + + ÐайпраÑьцейшае выкарыÑтаньне ÑÑ„Ñкту інтÑрпалÑцыі — інтÑпалÑÑ†Ñ‹Ñ Ð¼Ñ–Ð¶ двума ідÑнтычнымі шлÑхамі. ПаÑÑŒÐ»Ñ Ð²Ñ‹ÐºÐ»Ñ–ÐºÑƒ ÑÑ„Ñкту праÑтора між двума шлÑхамі будзе Ð·Ð°Ð¿Ð¾ÑžÐ½ÐµÐ½Ð°Ñ ÐºÐ¾Ð¿Ñ–Ñмі Ñпачатных шлÑхоў. КолькаÑьць крокаў вызначае колькі гÑтых копій будзе разьмешчана. - - + + Ðапрыклад, возьмем наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð´Ð²Ð° шлÑÑ…Ñ–: - + - - + + Зараз вылучыце два шлÑÑ…Ñ– й выканайце інтÑрпалÑцыю з наÑтройкамі, паказанымі на наÑтупным відарыÑе. - + @@ -114,44 +114,44 @@ Ryan Lerch, ryanlerch на gmail кропка com - Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена + Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена - - + + Як бачна з выніку ўверÑе, праÑтора між двума шлÑхамі Ñž форме акружыны была Ð·Ð°Ð¿Ð¾ÑžÐ½ÐµÐ½Ð°Ñ 6 (колькаÑьць крокаў інтÑрпалÑцыі) іншымі акружынамі. Заўважце такÑама, што ÑÑ„Ñкт ґрупуе гÑÑ‚Ñ‹Ñ Ñ„Ñ–Ò‘ÑƒÑ€Ñ‹ разам. - - ІнтÑрпалÑÑ†Ñ‹Ñ Ð¼Ñ–Ð¶ двума рознымі вузламі + + ІнтÑрпалÑÑ†Ñ‹Ñ Ð¼Ñ–Ð¶ двума рознымі вузламі - - + + Калі інтÑрпалююцца два Ñ€Ð¾Ð·Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–, праґрама інтÑрпалюе фіґуру шлÑху з адной у другую. У выніку маем між шлÑхамі зьменную паÑьлÑдоўнаÑьць, Ñ‡Ñ‹Ñ Ñ€ÑґулÑрнаÑьць такÑама вызначаецца значÑньнем колькаÑьці крокаў інтÑрпалÑцыі. - - + + Ðапрыклад, возьмем наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ Ð´Ð²Ð° шлÑÑ…Ñ–: - + - - + + Зараз вылучыце два шлÑÑ…Ñ– й выканайце інтÑрпалÑцыю. Вынік муÑіць быць падобным на гÑты: - + @@ -162,30 +162,30 @@ Ryan Lerch, ryanlerch на gmail кропка com - Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена + Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена - - + + Як можаце бачыць з выніку ўверÑе, праÑтора між круглым шлÑхам Ñ– трохкутнікам такÑама Ð·Ð°Ð¿Ð¾ÑžÐ½ÐµÐ½Ð°Ñ 6 шлÑхамі, ÑÐºÑ–Ñ Ð·ÑŒÐ¼ÑнÑюць фіґуру ад аднаго шлÑху да другога. - - + + Калі інтÑрпалюеце два Ñ€Ð¾Ð·Ð½Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ– важнае Ñтановішча пачатковага вузла кожнага шлÑху. Каб адшукаць пачатковы вузел шлÑху вылучыце шлÑÑ…, потым выберыце «Вузел», каб зьÑвіліÑÑ Ð²ÑƒÐ·Ð»Ñ‹ й націÑьніце TAB. Першы вылучаны вузел Ñ– Ñ‘Ñьць пачатковым. - - + + ПаглÑдзіце на Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ ÑƒÐ½Ñ–Ð·Ðµ, Ñкі ідÑнтычны папÑÑ€ÑднÑму прыкладу, за выключÑньнем таго, Ñк Ð¿Ð°ÐºÐ°Ð·Ð°Ð½Ñ‹Ñ Ð²ÑƒÐ·Ð»Ñ‹. ЗÑлёны вузел на кожным шлÑху — пачатковы. - + @@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + ПапÑÑ€Ñдні прыклад (ізноў паказаны ўнізе) быў зроблены з гÑтымі пачатковымі вузламі. - + @@ -214,16 +214,16 @@ Ryan Lerch, ryanlerch на gmail кропка com - Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена + Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена - - + + Зараз зьвÑрніце ўвагу на зьмÑненьне выніку інтÑрпалÑцыі, калі шлÑÑ… трохкутніка быў адбіты люÑÑ‚Ñркава, каб пачатковы вузел апынуўÑÑ Ñž іншым меÑцы: - + @@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch на gmail кропка com - + @@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch на gmail кропка com - - МÑтад інтÑрпалÑцыі + + МÑтад інтÑрпалÑцыі - - + + Ðдзін з парамÑтраў інтÑрпалÑцыі — мÑтад інтÑрпалÑцыі. РÑÐ°Ð»Ñ–Ð·Ð°Ð²Ð°Ð½Ñ‹Ñ Ð´Ð²Ð° мÑтады інтÑрпалÑцыі, Ñны адрозьніваюцца тым, Ñк Ñны разьлічваюць ÐºÑ€Ñ‹Ð²Ñ‹Ñ Ð½Ð¾Ð²Ñ‹Ñ… фіґур. Можна выбраць мÑтад інтÑрпалÑцыі 1 або 2. - - + + У прыкладах уверÑе мы выкарыÑтоўвалі мÑтад 2, Ñ– вынік быў: - + @@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + Зараз параўнайце Ñго з мÑтадам 1: - + @@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + РазглÑд адрозьненьнÑÑž таго, Ñк гÑÑ‚Ñ‹Ñ Ð¼Ñтады робÑць разьлікі, выходзіць за межы гÑтага дакумÑнта, таму проÑта паÑпрабуйце абодва й выберыце, Ñкі дае вынік, бліжÑйшы да патрÑбнага. - - Паказьнік Ñтупені + + Паказьнік Ñтупені - - + + ПарамÑтар паказьнік Ñтупені кіруе прагаламі між крокам інтÑрпалÑцыі. Паказьнік, роўны 0, робіць уÑе прагалы між копіÑмі роўнымі. - - + + ВоÑÑŒ вынік іншага аÑноўнага прыкладу з паказьнікам 0. - + @@ -331,16 +331,16 @@ Ryan Lerch, ryanlerch на gmail кропка com - Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена + Паказьнік Ñтупені: 0,0Крокаў інтÑрпалÑцыі: 6МÑтад інтÑрпалÑцыі: 2Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ–: абÑзьдзейненаІнтÑрпалÑваць Ñтыль: абÑзьдзейнена - - + + Той жа прыклад з паказьнікам 1: - + @@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + з паказьнікам 2: - + @@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + Ñ– з паказьнікам -1: - + @@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + Пры працы з паказьнікамі Ñтупені Ñž ÑÑ„Ñкце «ІнтÑрпалÑцыÑ» важны парадак, у Ñкім Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ñ‹Ñ Ð°Ð±'екты. У прыкладах уверÑе зорка зьлева была Ð²Ñ‹Ð»ÑƒÑ‡Ð°Ð½Ð°Ñ Ð¿ÐµÑ€ÑˆÐ°Ð¹, а шаÑьцікутнік Ñправа быў вылучаны другім. - - + + ПаглÑдзіце на вынік, калі правы шлÑÑ… вылучыць першым. Паказьнік Ñтупені Ñž гÑтым прыкладзе роўны 1: - + @@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch на gmail кропка com - - Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ– + + Падвоіць ÐºÐ°Ð½Ñ†Ð°Ð²Ñ‹Ñ ÑˆÐ»ÑÑ…Ñ– - - + + ГÑты парамÑтар вызначае ці будзе ґрупа шлÑхоў, Ñтвораных ÑÑ„Ñктам, уключаць копію Ñпачатнага шлÑху, да Ñкога ўжылі інтÑрпалÑцыю. - - ІнтÑрпалÑваць Ñтыль + + ІнтÑрпалÑваць Ñтыль - - + + ГÑты парамÑтар — адна з клÑÑных функцый ÑÑ„Ñкту «ІнтÑрпалÑцыÑ». Ðн кажа ÑÑ„Ñкту Ñпрабаваць зьмÑніць Ñтыль шлÑхоў на кожным кроку. Таму, калі пачатковы й канцавы шлÑÑ…Ñ– маюць Ñ€Ð¾Ð·Ð½Ñ‹Ñ ÐºÐ¾Ð»ÐµÑ€Ñ‹, то Ñž Ñтвораных шлÑхоў колер будзе паÑтупова мÑнÑцца. - - + + ВоÑÑŒ прыклад, дзе Ñ„ÑƒÐ½ÐºÑ†Ñ‹Ñ Ñ–Ð½Ñ‚ÑрпалÑцыі Ñтылю выкарыÑтоўваецца Ð´Ð»Ñ Ð·Ð°Ð¿Ð°ÑžÐ½ÐµÐ½ÑŒÐ½Ñ ÑˆÐ»Ñху: - + @@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + ІнтÑрпалÑÑ†Ñ‹Ñ Ñтылю такÑама ўплывае на контур шлÑху: - + @@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch на gmail кропка com - - + + Ð’Ñдома, шлÑÑ… пачатковага пункту й канцавы пункт такÑама Ð½Ñ Ð¼ÑƒÑÑць быць аднолькавымі: - + @@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch на gmail кропка com - - ВыкарыÑтоўваньне інтÑрпалÑцыі Ð´Ð»Ñ ÑžÐ´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ð°Ñž нÑправільнай формы + + ВыкарыÑтоўваньне інтÑрпалÑцыі Ð´Ð»Ñ ÑžÐ´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ð°Ñž нÑправільнай формы - - + + У Inkscape немагчыма (пакуль што) Ñтварыць ґрадыент, адрозны ад лінейнага (прамой лініі) ці кругавога (круга). Ðднак, Ñго можна ўдаваць, выкарыÑтоўваючы ÑÑ„Ñкт інтÑрпалÑцыі з інтÑрпалÑцыÑй Ñтылю. ВоÑÑŒ проÑты прыклад, нарыÑуйце дзьве лініі з рознымі контурамі: - + - - + + І інтÑрпалюйце між двума лініÑмі, каб Ñтварыць ваш ґрадыент: - + @@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch на gmail кропка com - - Ð’Ñ‹Ñновы + + Ð’Ñ‹Ñновы - - + + Як паказаны вышÑй, ÑÑ„Ñкт Inkscape «ІнтÑрпалÑцыÑ» зьÑўлÑецца магутным інÑтрумÑнтам. ГÑты падручнік ахоплівае аÑновы гÑтага ÑÑ„Ñкту, але ÑкÑпÑрымÑнтаваньне — ключ да далейшага даÑÑŒÐ»ÐµÐ´Ð°Ð²Ð°Ð½ÑŒÐ½Ñ Ñ–Ð½Ñ‚ÑрпалÑцыі. - + @@ -586,8 +586,8 @@ Ryan Lerch, ryanlerch на gmail кропка com - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць diff --git a/share/tutorials/tutorial-interpolate.de.svg b/share/tutorials/tutorial-interpolate.de.svg index 1339d6ad2..2fe0a1258 100644 --- a/share/tutorials/tutorial-interpolate.de.svg +++ b/share/tutorials/tutorial-interpolate.de.svg @@ -43,7 +43,7 @@ ::INTERPOLIEREN -Ryan Lerch, ryanlerch at gmail dot com + diff --git a/share/tutorials/tutorial-interpolate.el.svg b/share/tutorials/tutorial-interpolate.el.svg index f903ff776..a300eaf52 100644 --- a/share/tutorials/tutorial-interpolate.el.svg +++ b/share/tutorials/tutorial-interpolate.el.svg @@ -40,70 +40,70 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - + ::ΠΑΡΕΜΒΟΛΉ -Ryan Lerch, ryanlerch at gmail dot com - + + Αυτό το έγγÏαφο εξηγεί τη χÏήση της επέκτασης παÏεμβολής του Inkscape - - Εισαγωγή + + Εισαγωγή - + Η παÏεμβολή κάνει μια γÏαμμική παÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Î´Ïο ή πεÏισσότεÏων επιλεγμένων μονοπατιών. Βασικά σημαίνει ότι “γεμίζει τα ÎºÎµÎ½Î¬â€ Î¼ÎµÏ„Î±Î¾Ï Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹ÏŽÎ½ και τα μετασχηματίζει σÏμφωνα με τον αÏιθμό των δοσμένων βημάτων. - + Για να χÏησιμοποιήσετε την επέκταση παÏεμβολής, επιλέξτε τα μονοπάτια που επιθυμείτε να μετασχηματίσετε και διαλέξτε από το Î¼ÎµÎ½Î¿Ï Î•Ï€ÎµÎºÏ„Î¬ÏƒÎµÎ¹Ï‚Â > ΔημιουÏγία από μονοπάτι > ΠαÏεμβολή. - + ΠÏιν την κλήση της επέκτασης, τα αντικείμενα που Ï€Ïόκειται να μετασχηματίσετε χÏειάζεται να είναι μονοπάτια. Αυτό γίνεται επιλέγοντας το αντικείμενο και χÏησιμοποιώντας Μονοπάτι > Αντικείμενο σε μονοπάτι ή Shift+Ctrl+C. Εάν τα αντικείμενα σας δεν είναι μονοπάτια, η επέκταση δεν θα κάνει τίποτα. - - ΠαÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Î´Ïο ταυτόσημων μονοπατιών + + ΠαÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Î´Ïο ταυτόσημων μονοπατιών - + Η πιο απλή χÏήση της επέκτασης παÏεμβολή είναι η παÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Î´Ïο μονοπατιών που είναι ταυτόσημα. Όταν καλείται η επέκταση, το αποτέλεσμα είναι ότι ο χώÏος Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ δÏο μονοπατιών γεμίζει με διπλότυπα των αÏχικών μονοπατιών. Ο αÏιθμός των βημάτων καθοÏίζει πόσα διπλότυπα τοποθετοÏνται. - + Για παÏάδειγμα, πάÏτε τα παÏακάτω δÏο μονοπάτια: - + - + ΤώÏα, επιλέξτε τα δÏο μονοπάτια και Ï„Ïέξτε την επέκταση παÏεμβολής με τις Ïυθμίσεις που εμφανίζονται στην εικόνα που ακολουθεί. - + @@ -116,42 +116,42 @@ Ryan Lerch, ryanlerch at gmail dot com Εκθέτης: 0,0Βήματα παÏεμβολής: 6Μέθοδος παÏεμβολής: 2Διπλασιασμός άκÏου μονοπατιών: ασημείωτοΜοÏφοποίηση παÏεμβολής: ασημείωτη - + Όπως μποÏεί να ιδωθεί από το πιο πάνω αποτέλεσμα, ο χώÏος Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ δÏο κυκλικών μονοπατιών γέμισε με 6 (ο αÏιθμός των βημάτων παÏεμβολής) άλλα κυκλικά μονοπάτια. Επίσης σημειώστε ότι οι επεκτάσεις ομαδοποιοÏν αυτά τα σχήματα μαζί. - - ΠαÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Î´Ïο διαφοÏετικών μονοπατιών + + ΠαÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Î´Ïο διαφοÏετικών μονοπατιών - + Όταν γίνεται παÏεμβολή σε δÏο διαφοÏετικά μονοπάτια, το Ï€ÏόγÏαμμα παÏεμβάλει το σχήμα του Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Î±Ï€ÏŒ το ένα στο άλλο. Το αποτέλεσμα είναι ότι παίÏνετε μια σειÏά μοÏφισμών Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ μονοπατιών, με την κανονικότητα ακόμα καθοÏιζόμενη από την τιμή βημάτων παÏεμβολής. - + Για παÏάδειγμα, πάÏτε τα παÏακάτω δÏο μονοπάτια: - + - + ΤώÏα, επιλέξτε τα δÏο μονοπάτια και Ï„Ïέξτε την επέκταση παÏεμβολής. Το αποτέλεσμα θα είναι όπως αυτό: - + @@ -164,28 +164,28 @@ Ryan Lerch, ryanlerch at gmail dot com Εκθέτης: 0,0Βήματα παÏεμβολής: 6Μέθοδος παÏεμβολής: 2Διπλασιασμός άκÏου μονοπατιών: ασημείωτοΜοÏφοποίηση παÏεμβολής: ασημείωτη - + Όπως μποÏεί να ιδωθεί από το πιο πάνω αποτέλεσμα, ο χώÏος Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï… ÎºÏ…ÎºÎ»Î¹ÎºÎ¿Ï Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï ÎºÎ±Î¹ του Ï„ÏÎ¹Î³Ï‰Î½Î¹ÎºÎ¿Ï Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Î³Î­Î¼Î¹ÏƒÎµ με 6 μονοπάτια που Ï€ÏοχωÏοÏν Ï€Ïοοδευτικά από το ένα μονοπάτι στο άλλο. - + Όταν χÏησιμοποιείτε την επέκταση παÏεμβολής σε δÏο διαφοÏετικά μονοπάτια, η θέση του αÏÏ‡Î¹ÎºÎ¿Ï ÎºÏŒÎ¼Î²Î¿Ï… κάθε Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï ÎµÎ¯Î½Î±Î¹ σημαντική. Για να βÏείτε τον αÏχικό κόμβο ενός μονοπατιοÏ, επιλέξτε το μονοπάτι, έπειτα διαλέξτε το εÏγαλείο κόμβου, έτσι ώστε να φαίνονται οι κόμβοι και πατήστε TAB. Ο Ï€Ïώτος κόμβος που επιλέχτηκε είναι ο αÏχικός κόμβος Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μονοπατιοÏ. - + Δείτε, την πιο κάτω εικόνα, που είναι ταυτόσημη με το Ï€ÏοηγοÏμενο παÏάδειγμα, πέÏα από τα σημεία κόμβων που εμφανίζονται. Ο κόμβος που είναι Ï€Ïάσινος σε κάθε μονοπάτι είναι ο αÏχικός κόμβος. - + @@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + Το Ï€ÏοηγοÏμενο παÏάδειγμα (που εμφανίζεται πάλι πιο κάτω) έγινε με αυτοÏÏ‚ τους κόμβους να είναι οι αÏχικοί. - + @@ -216,14 +216,14 @@ Ryan Lerch, ryanlerch at gmail dot com Εκθέτης: 0,0Βήματα παÏεμβολής: 6Μέθοδος παÏεμβολής: 2Διπλασιασμός άκÏου μονοπατιών: ασημείωτοΜοÏφοποίηση παÏεμβολής: ασημείωτη - + ΤώÏα, σημειώστε ότι οι αλλαγές στην παÏεμβολή καταλήγουν όταν το Ï„Ïιγωνικό μονοπάτι αντανακλάται, ώστε ο αÏχικός κόμβος να είναι σε διαφοÏετική θέση: - + @@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch at gmail dot com - + @@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch at gmail dot com - - Μέθοδος παÏεμβολής + + Μέθοδος παÏεμβολής - + Μία από τις παÏαμέτÏους επέκτασης παÏεμβολής είναι η μέθοδος επέκτασης. ΥπάÏχουν δÏο υποστηÏιζόμενες μέθοδοι παÏεμβολής και διαφέÏουν στον Ï„Ïόπο που υπολογίζουν τις καμπÏλες των νέων σχημάτων. Οι επιλογές είναι είτε μέθοδος παÏεμβολής 1 ή 2. - + Στα πιο πάνω παÏαδείγματα, χÏησιμοποιήσαμε τη μέθοδο παÏεμβολής 2 και το αποτέλεσμα ήταν: - + @@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + ΤώÏα συγκÏίνετε αυτό με τη μέθοδο παÏεμβολής 1: - + @@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch at gmail dot com - + Οι διαφοÏές στον υπολογισμό των αÏιθμών αυτών των μεθόδων είναι πέÏα από το σκοπό Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… εγγÏάφου, έτσι απλά δοκιμάστε και τις δÏο και χÏησιμοποιήστε όποια σας δίνει το καλÏτεÏο αποτέλεσμα στις Ï€Ïοθέσεις σας. - - Εκθέτης + + Εκθέτης - + Η εκθετική παÏάμετÏος ελέγχει το διάκενο Î¼ÎµÏ„Î±Î¾Ï Î²Î·Î¼Î¬Ï„Ï‰Î½ της παÏεμβολής. Ένας εκθέτης 0 κάνει το διάκενο Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ αντιγÏάφων ομοιόμοÏφο. - + Î™Î´Î¿Ï Ï„Î¿ αποτέλεσμα ενός Î²Î±ÏƒÎ¹ÎºÎ¿Ï Ï€Î±Ïαδείγματος με εκθέτη 0. - + @@ -333,14 +333,14 @@ Ryan Lerch, ryanlerch at gmail dot com Εκθέτης: 0,0Βήματα παÏεμβολής: 6Μέθοδος παÏεμβολής: 2Διπλασιασμός άκÏου μονοπατιών: ασημείωτοΜοÏφοποίηση παÏεμβολής: ασημείωτη - + Το ίδιο παÏάδειγμα με εκθέτη1: - + @@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + με εκθέτη 2: - + @@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + και με εκθέτη -1: - + @@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch at gmail dot com - + Όταν ασχολείσθε με εκθέτες στη επέκταση παÏεμβολής, η σειÏά που επιλέγετε τα αντικείμενα είναι σημαντική. Στα πιο πάνω παÏαδείγματα, το αστεÏοειδές μονοπάτι στα αÏιστεÏά επιλέχτηκε Ï€Ïώτο και το εξαγωνικό μονοπάτι στα δεξιά επιλέχτηκε δεÏτεÏο. - + Δείτε το αποτέλεσμα όταν το μονοπάτι στα δεξιά επιλέχτηκε Ï€Ïώτο. Ο εκθέτης σε αυτό το παÏάδειγμα οÏίστηκε σε 1: - + @@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch at gmail dot com - - Διπλασιασμός τελικών μονοπατιών + + Διπλασιασμός τελικών μονοπατιών - + Αυτή η παÏάμετÏος καθοÏίζει εάν η ομάδα των μονοπατιών που δημιουÏγήθηκε με την επέκταση πεÏιέχει ένα αντίγÏαφο των αÏχικών μονοπατιών στα οποία εφαÏμόστηκε η παÏεμβολή. - - ΜοÏφοποίηση παÏεμβολής + + ΜοÏφοποίηση παÏεμβολής - + Αυτή η παÏάμετÏος είναι μία έξυπνη συνάÏτηση της επέκτασης παÏεμβολής. Λέει στην επέκταση να Ï€Ïοσπαθήσει να αλλάξει τη μοÏφοποίηση των μονοπατιών σε κάθε βήμα. Έτσι εάν το αÏχικό και τελικό μονοπάτι έχουν διαφοÏετικό χÏώμα, τα μονοπάτια που δημιουÏγοÏνται θα αλλάξουν σταδιακά επίσης. - + Îα ένα παÏάδειγμα όπου η συνάÏτηση μοÏφοποίησης παÏεμβολής χÏησιμοποιείται στο γέμισμα ενός μονοπατιοÏ: - + @@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + Η μοÏφοποίηση παÏεμβολής επηÏεάζει επίσης την πινελιά ενός μονοπατιοÏ: - + @@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + Φυσικά, το αÏχικό και το τελικό σημείο του Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï Î´ÎµÎ½ χÏειάζεται να είναι τα ίδιο: - + @@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch at gmail dot com - - ΧÏήση παÏεμβολής για απομίμηση ανώμαλων διαβαθμίσεων + + ΧÏήση παÏεμβολής για απομίμηση ανώμαλων διαβαθμίσεων - + Δεν είναι δυνατό στο Inkscape (ακόμα) να δημιουÏγήσετε μια διαβάθμιση πέÏα από τη γÏαμμική (ευθεία γÏαμμή) ή ακτινική (στÏογγυλή). Όμως, μποÏεί να γίνει απομίμηση χÏησιμοποιώντας την επέκταση παÏεμβολής και μοÏφοποίηση παÏεμβολής. Ένα απλό παÏάδειγμα ακολουθεί — σχεδιάστε δÏο γÏαμμές με διαφοÏετικές πινελιές: - + - + Και παÏεμβολή Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ δÏο γÏαμμών για δημιουÏγία της διαβάθμισης σας: - + @@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch at gmail dot com - - ΣυμπέÏασμα + + ΣυμπέÏασμα - + Όπως επιδεικνÏεται πιο πάνω, η επέκταση παÏεμβολής του Inkscape είναι ένα ισχυÏÏŒ εÏγαλείο. Αυτό το μάθημα καλÏπτει τα βασικά αυτής της επέκτασης, αλλά ο πειÏαματισμός είναι το κλειδί της παÏαπέÏα εξεÏεÏνησης της παÏεμβολής. - + diff --git a/share/tutorials/tutorial-interpolate.hu.svg b/share/tutorials/tutorial-interpolate.hu.svg index 1191da994..b345ff2ed 100644 --- a/share/tutorials/tutorial-interpolate.hu.svg +++ b/share/tutorials/tutorial-interpolate.hu.svg @@ -1,15 +1,15 @@ - + - + - - - + + + @@ -25,542 +25,542 @@ - - - - - - - - - - + + + + + + + + + + - - A Ctrl+le nyíl segít a lapozásban - + + A Ctrl+le nyíl segít a lapozásban + - - ::INTERPOLÃLÃS + + ::INTERPOLÃLÃS -Ryan Lerch, ryanlerch at gmail dot com - - + + + Ez a dokumentum az Inkscape Interpolálás effektusát ismerteti. - - Bevezetés + + Bevezetés - - + + Az Interpolálás effektus lineáris interpolációt hajt végre két vagy több útvonal között. AlapvetÅ‘en ez annyit jelent, hogy az útvonalak közti „területet betölti†megadott számú, a kezdÅ‘ útvonalból fokozatosan a másik útvonalba átalakuló formákkal. - - + + - To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. + To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. - - + + - Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. + Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. - - Interpolation between two identical paths + + Interpolation between two identical paths - - + + The simplest use of the Interpolate extension is to interpolate between two paths that are identical. When the extension is called, the result is that the space between the two paths is filled with duplicates of the original paths. The number of steps defines how many of these duplicates are placed. - - + + Az alábbi két útvonalat például véve: - - - + + + - - + + Now, select the two paths, and run the Interpolate extension with the settings shown in the following image. - - - - - - - - - - + + + + + + + + + + - KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva + KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva - - + + As can be seen from the above result, the space between the two circle-shaped paths has been filled with 6 (the number of interpolation steps) other circle-shaped paths. Also note that the extension groups these shapes together. - - Két különbözÅ‘ útvonal közötti interpolálás + + Két különbözÅ‘ útvonal közötti interpolálás - - + + Két eltérÅ‘ alakú útvonal közötti interpoláláskor a közbensÅ‘ útvonalak formája az egyik eredeti útvonal formájából indulva, az Interpolációs lépések paraméter által meghatározott szabályszerűséggel alakul át a másik eredeti útvonal formájába. - - + + Az alábbi két útvonalat például véve: - - - + + + - - + + Now, select the two paths, and run the Interpolate extension. The result should be like this: - - - - - - - - - + + + + + + + + + - - KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva + + KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva - - + + Láthatja, hogy ebben az esetben a kör és a háromszög közötti területre 6 olyan útvonal került, melyek alakja fokozatosan alakul át egyik formából a másikba. - - + + When using the Interpolate extension on two different paths, the position of the starting node of each path is important. To find the starting node of a path, select the path, then choose the Node Tool so that the nodes appear and press TAB. The first node that is selected is the starting node of that path. - - + + Az alábbi képen az elÅ‘bbi példa látható, de bejelöltük rajta a csomópontokat is. Mindkét útvonalon zöld szín mutatja a kezdÅ‘ csomópont helyét. - - - - - - - - - - + + + + + + + + + + - - + + Az elÅ‘zÅ‘ példán (alább újra láthatja) ilyen volt a kezdÅ‘ csomópontok helyzete. - - - - - - - - - + + + + + + + + + - - KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva + + KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva - - + + Az alábbi ábrán megfigyelheti, hogyan változik az interpolálás eredménye a háromszög tükrözésével más pozícióba mozgatott kezdÅ‘ csomópont hatására. - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - Interpolációs módszer + + Interpolációs módszer - - + + One of the parameters of the Interpolate extension is the Interpolation Method. There are 2 interpolation methods implemented, and they differ in the way that they calculate the curves of the new shapes. The choices are either Interpolation Method 1 or 2. - - + + Az alábbi példában az Interpolációs módszer értéke 2, ami ilyen eredményt ad: - - - - - - - - - + + + + + + + + + - + - - + + Vesse össze az alábbi ábrával, ahol a paraméter értéke 1: - - - - - - - - - - + + + + + + + + + + - - + + A két módszer számítási eljárása közti eltérés kifejtése meghaladná ezen írás kereteit, ezért csak azt javasoljuk, hogy próbálja ki mindkettÅ‘t, és használja mindig azt, amelyik az elvárásaihoz közelebbi eredményt adja. - - KitevÅ‘ + + KitevÅ‘ - - + + A KitevÅ‘ paraméter az interpolációs lépések térközét szabályozza. Ha a kitevÅ‘ 0, az elemek között egyforma lesz a távolság. - - + + Az alábbi példa is 0 kitevÅ‘vel készült: - - - - - - - - - - + + + + + + + + + + - KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva + KitevÅ‘: 0,0Interpolációs lépések: 6Interpolációs módszer: 2Vég-útvonalak kettÅ‘zése: nincs kiválasztvaStílus interpolálása: nincs kiválasztva - - + + Ugyanaz a példa, de most a kitevÅ‘ értéke 1: - - - - - - - - - - + + + + + + + + + + - - + + A kitevÅ‘ értéke 2: - - - - - - - - - - + + + + + + + + + + - - + + Végül a kitevÅ‘ értéke −1: - - - - - - - - - - + + + + + + + + + + - - + + When dealing with exponents in the Interpolate extension, the order that you select the objects is important. In the examples above, the star-shaped path on the left was selected first, and the hexagon-shaped path on the right was selected second. - - + + A következÅ‘ rajz úgy készült, hogy a jobb oldali útvonalat jelöltük ki elÅ‘ször. A kitevÅ‘ ez esetben 1 volt: - - - - - - - - - - + + + + + + + + + + - - Vég-útvonalak kettÅ‘zése + + Vég-útvonalak kettÅ‘zése - - + + This parameter defines whether the group of paths that is generated by the extension includes a copy of the original paths that interpolate was applied on. - - Stílus interpolálása + + Stílus interpolálása - - + + This parameter is one of the neat functions of the interpolate extension. It tells the extension to attempt to change the style of the paths at each step. So if the start and end paths are different colors, the paths that are generated will incrementally change as well. - - + + Ez a példa a Stílus interpolálása paraméter hatását mutatja az útvonalak kitöltésére: - - - - - - - - - - + + + + + + + + + + - - + + A Stílus interpolálása a körvonalra is hatással van: - - - - - - - - - - + + + + + + + + + + - - + + Természetesen a kezdÅ‘- és a vég-útvonal eltérÅ‘ alakú is lehet: - - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - Szabálytalan színátmenet interpolálás segítségével + + Szabálytalan színátmenet interpolálás segítségével - - + + It is not possible in Inkscape (yet) to create a gradient other than linear (straight line) or radial (round). However, it can be faked using the Interpolate extension and Interpolate Style. A simple example follows — draw two lines of different strokes: - - - + + + - - + + Ezután interpolálással hozza létre közöttük a színátmenetet: - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - Zárszó + + Zárszó - - + + As demonstrated above, the Inkscape Interpolate extension is a powerful tool. This tutorial covers the basics of this extension, but experimentation is the key to exploring interpolation further. - + - - - + + + @@ -576,19 +576,19 @@ Ryan Lerch, ryanlerch at gmail dot com - - - - - - - - - + + + + + + + + + - - A Ctrl+fel nyíl segít a lapozásban - + + A Ctrl+fel nyíl segít a lapozásban + diff --git a/share/tutorials/tutorial-interpolate.ja.svg b/share/tutorials/tutorial-interpolate.ja.svg index 11f2f6bb6..600a6babe 100644 --- a/share/tutorials/tutorial-interpolate.ja.svg +++ b/share/tutorials/tutorial-interpolate.ja.svg @@ -1,6 +1,6 @@ - + @@ -36,74 +36,74 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::補間 -Ryan Lerch, ryanlerch at gmail dot com - - + + + ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã¯ Inkscape ã®è£œé–“エクステンションã®ä½¿ã„æ–¹ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚ - - ã¯ã˜ã‚ã« + + ã¯ã˜ã‚ã« - - + + 補間エクステンション㯠2 ã¤ä»¥ä¸Šã®é¸æŠžãƒ‘スã®é–“ã«å¯¾ã—ã¦ç·šå½¢è£œé–“を行ã„ã¾ã™ã€‚ã“れã¯ã™ãªã‚ã¡ã€ãƒ‘スã¨ãƒ‘スã®é–“ã®ã€Œéš™é–“を埋ã‚ã‚‹ã€ã€ãŠã‚ˆã³æŒ‡å®šã•れãŸã‚¹ãƒ†ãƒƒãƒ—æ•°ã«å¾“ã£ã¦ãれらを変形ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ - - + + - 補間エクステンションを使用ã™ã‚‹ã«ã¯ã€å¤‰å½¢ã—ãŸã„ãƒ‘ã‚¹ã‚’é¸æŠžã—ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ エクステンション > パスã‹ã‚‰ç”ŸæˆÂ > 補間 ã‚’é¸æŠžã—ã¾ã™ã€‚ + 補間エクステンションを使用ã™ã‚‹ã«ã¯ã€å¤‰å½¢ã—ãŸã„ãƒ‘ã‚¹ã‚’é¸æŠžã—ã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ エクステンション > パスã‹ã‚‰ç”ŸæˆÂ > 補間 ã‚’é¸æŠžã—ã¾ã™ã€‚ - - + + - ã“ã®ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã‚’呼ã³å‡ºã™å‰ã«ã€å¤‰å½¢ã—ãŸã„オブジェクトを パス ã«å¤‰æ›ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚パスã¸ã®å¤‰æ›ã¯ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ãƒ‘ス > オブジェクトをパス㸠をé¸ã¶ã€ã¾ãŸã¯ Shift+Ctrl+C を押ã—ã¾ã™ã€‚é¸æŠžã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒãƒ‘スã§ã¯ãªã‹ã£ãŸå ´åˆã¯ã“ã®ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã¯ä½•ã‚‚ã—ã¾ã›ã‚“。 + ã“ã®ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã‚’呼ã³å‡ºã™å‰ã«ã€å¤‰å½¢ã—ãŸã„オブジェクトを パス ã«å¤‰æ›ã—ã¦ãŠãå¿…è¦ãŒã‚りã¾ã™ã€‚パスã¸ã®å¤‰æ›ã¯ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ãƒ‘ス > オブジェクトをパス㸠をé¸ã¶ã€ã¾ãŸã¯ Shift+Ctrl+C を押ã—ã¾ã™ã€‚é¸æŠžã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒãƒ‘スã§ã¯ãªã‹ã£ãŸå ´åˆã¯ã“ã®ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã¯ä½•ã‚‚ã—ã¾ã›ã‚“。 - - 2 ã¤ã®åŒã˜å½¢çжã®ãƒ‘ス間ã®è£œé–“ + + 2 ã¤ã®åŒã˜å½¢çжã®ãƒ‘ス間ã®è£œé–“ - - + + è£œé–“ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã®æœ€ã‚‚ç°¡å˜ãªä½¿ã„æ–¹ã¯ã€åŒã˜å½¢çŠ¶ã® 2 ã¤ã®ãƒ‘スã®é–“を補間ã™ã‚‹ã“ã¨ã§ã™ã€‚ã“ã®ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ãŒå®Ÿè¡Œã•れるã¨ã€2 ã¤ã®ãƒ‘スã®é–“ã®ã‚¹ãƒšãƒ¼ã‚¹ãŒã‚ªãƒªã‚¸ãƒŠãƒ«ã®ãƒ‘スã®è¤‡è£½ã§åŸ‹ã‚られã¾ã™ã€‚何個ã®è¤‡è£½ã‚’é…ç½®ã™ã‚‹ã‹ã¯ã‚¹ãƒ†ãƒƒãƒ—æ•°ã§æŒ‡å®šã—ã¾ã™ã€‚ - - + + 例ãˆã°ã€ä»¥ä¸‹ã®ãƒ‘ã‚¹ã«æ³¨ç›®ã—ã¦ãã ã•ã„: - + - - + + ã“ã® 2 ã¤ã®ãƒ‘ã‚¹ã‚’é¸æŠžã—ã€ã‚¤ãƒ¡ãƒ¼ã‚¸ã®ä¸‹ã«è¡¨ç¤ºã•れã¦ã„る設定ã§è£œé–“エクステンションを実行ã—ã¦ã¿ã¾ã—ょã†ã€‚ - + @@ -114,44 +114,44 @@ Ryan Lerch, ryanlerch at gmail dot com - 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— + 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— - - + + 上図ã®ã‚ˆã†ã«ã€2 ã¤ã®å††å½¢ã®ãƒ‘スã®é–“ã®ã‚¹ãƒšãƒ¼ã‚¹ãŒ 6 (補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°) 個ã®è¤‡è£½ã•れãŸå††å½¢ã®ãƒ‘スã§åŸ‹ã‚られã¾ã™ã€‚ã“れらã®å›³å½¢ã¯ã‚°ãƒ«ãƒ¼ãƒ—化ã•れるã“ã¨ã‚‚覚ãˆã¦ãŠã„ã¦ãã ã•ã„。 - - 2 ã¤ã®ç•°ãªã‚‹ãƒ‘ス間ã®è£œé–“ + + 2 ã¤ã®ç•°ãªã‚‹ãƒ‘ス間ã®è£œé–“ - - + + 補間㌠2 ã¤ã®ç•°ãªã‚‹å½¢çжã®ãƒ‘スã«å¯¾ã—ã¦å®Ÿè¡Œã•れãŸã¨ãã€ãƒ—ログラムã¯ãれãžã‚Œã®ãƒ‘スã®å½¢çŠ¶ã‚‚è£œé–“ã—ã¾ã™ã€‚ãã®çµæžœã¯ãƒ‘スã¨ãƒ‘スã®é–“を指定ã•れãŸè£œé–“ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°ã®è¦å‰‡æ€§ã§ãƒ¢ãƒ¼ãƒ•ィングã—ãŸã‚‚ã®ã«ãªã‚Šã¾ã™ã€‚ - - + + 例ãˆã°ã€ä»¥ä¸‹ã®ãƒ‘ã‚¹ã«æ³¨ç›®ã—ã¦ãã ã•ã„: - + - - + + 2 ã¤ã®ãƒ‘ã‚¹ã‚’é¸æŠžã—補間エクステンションを実行ã—ã¦ã¿ã¾ã—ょã†ã€‚以下ã®ã‚ˆã†ãªçµæžœã«ãªã‚‹ã¯ãšã§ã™: - + @@ -162,30 +162,30 @@ Ryan Lerch, ryanlerch at gmail dot com - 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— + 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— - - + + 上図ã®ã‚ˆã†ã«ã€å††å½¢ã®ãƒ‘スã¨ä¸‰è§’å½¢ã®ãƒ‘スã®é–“ã®ã‚¹ãƒšãƒ¼ã‚¹ãŒ 6 個ã®ã€ä¸€æ–¹ã‹ã‚‰ä»–æ–¹ã¸ã®å½¢çжãŒå¤‰åŒ–ã™ã‚‹ãƒ‘スã§åŸ‹ã‚られã¾ã™ã€‚ - - + + 2 ã¤ã®ç•°ãªã‚‹å½¢çжã®ãƒ‘スã«å¯¾ã—ã¦è£œé–“エクステンションを使用ã™ã‚‹ã¨ãã€å„パスã®å§‹ç‚¹ãƒŽãƒ¼ãƒ‰ã®ä½ç½®ãŒé‡è¦ã§ã™ã€‚パスã®å§‹ç‚¹ãƒŽãƒ¼ãƒ‰ã‚’確èªã™ã‚‹ã«ã¯ã€ãƒ‘ã‚¹ã‚’é¸æŠžã—ã€ãƒŽãƒ¼ãƒ‰ãƒ„ãƒ¼ãƒ«ã‚’é¸æŠžã—ã¾ã™ã€‚ノードãŒè¡¨ç¤ºã•れã¾ã™ã®ã§ã€TAB を押ã—ã¦ãã ã•ã„。最åˆã«é¸æŠžã•れãŸãƒŽãƒ¼ãƒ‰ãŒãƒ‘スã®å§‹ç‚¹ãƒŽãƒ¼ãƒ‰ã§ã™ã€‚ - - + + 以下ã®ã‚¤ãƒ¡ãƒ¼ã‚¸ã‚’見ã¦ãã ã•ã„。上ã®ä¾‹ã¨åŒã˜ãƒ‘スã§ãƒŽãƒ¼ãƒ‰ãŒè¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚緑色ã®ãƒŽãƒ¼ãƒ‰ãŒãれãžã‚Œã®å§‹ç‚¹ãƒŽãƒ¼ãƒ‰ã§ã™ã€‚ - + @@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 上ã®ä¾‹ (以下ã«ã‚‚ã†ä¸€åº¦ç¤ºã—ã¾ã™) ã¯ãれらãŒå§‹ç‚¹ãƒŽãƒ¼ãƒ‰ã§ã‚ã‚‹ã“ã¨ã«ã‚ˆã‚‹çµæžœã§ã™ã€‚ - + @@ -214,16 +214,16 @@ Ryan Lerch, ryanlerch at gmail dot com - 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— + 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— - - + + 三角形ã®ãƒ‘スを水平ã«å転ã•ã›ã€å§‹ç‚¹ãƒŽãƒ¼ãƒ‰ã®ä½ç½®ã‚’変ãˆã‚‹ã¨ã€è£œé–“ã®çµæžœã¯ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰åŒ–ã—ã¾ã™: - + @@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch at gmail dot com - + @@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch at gmail dot com - - è£œé–“æ–¹å¼ + + è£œé–“æ–¹å¼ - - + + 補間エクステンションã®ãƒ‘ラメーターã®ä¸€ã¤ã«è£œé–“æ–¹å¼ãŒã‚りã¾ã™ã€‚2 種類ã®è£œé–“æ–¹å¼ãŒå®Ÿè£…ã•れã¦ãŠã‚Šã€æ–°ã—ã„å½¢çŠ¶ã®æ›²ç·šã®è¨ˆç®—方法ãŒç•°ãªã‚Šã¾ã™ã€‚補間方å¼ã¯ 1 ã‹ 2 ã®ã©ã¡ã‚‰ã‹ãŒé¸ã¹ã¾ã™ã€‚ - - + + 上ã®ä¾‹ã§ã¯è£œé–“æ–¹å¼ 2 を使用ã—ã€ä»¥ä¸‹ã®çµæžœã«ãªã‚Šã¾ã—ãŸ: - + @@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 補間方å¼Â 1 ã¨æ¯”ã¹ã¦ã¿ã¦ãã ã•ã„: - + @@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + ã“れら補間方å¼ã®è¨ˆç®—方法ã®é•ã„ã«ã¤ã„ã¦ã®èª¬æ˜Žã¯ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã§ã¯å‰²æ„›ã—ã¾ã™ã€‚儿–¹å¼ã‚’試ã—ã€ã‚ãªãŸãŒæœŸå¾…ã—ãŸçµæžœã«æœ€ã‚‚è¿‘ã„ã‚‚ã®ã‚’使用ã—ã¦ãã ã•ã„。 - - 指数 + + 指数 - - + + 指数 パラメーターã¯è£œé–“ã®å„ステップ間ã®é–“隔を制御ã—ã¾ã™ã€‚指数 0 ã¯ã™ã¹ã¦ã®è¤‡è£½ã‚’等間隔ã«é…ç½®ã—ã¾ã™ã€‚ - - + + 指数 0 ã®åŸºæœ¬çš„ãªä¾‹ã§ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªçµæžœã«ãªã‚Šã¾ã™: - + @@ -331,16 +331,16 @@ Ryan Lerch, ryanlerch at gmail dot com - 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— + 指数: 0.0補間ã®ã‚¹ãƒ†ãƒƒãƒ—æ•°: 6è£œé–“ã®æ–¹æ³•: 2補間終端パスを複製ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã—スタイルを補間ã™ã‚‹: ãƒã‚§ãƒƒã‚¯ãƒžãƒ¼ã‚¯ãªã— - - + + åŒã˜ä¾‹ã§æŒ‡æ•°ã‚’ 1 ã«ã—ã¦ã¿ã¾ã™: - + @@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + 指数を 2 ã«ã—ã¦ã¿ã¾ã™: - + @@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + ãã—ã¦æŒ‡æ•°ãŒ -1 ã®å ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: - + @@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + è£œé–“ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã§æŒ‡æ•°ã‚’使用ã™ã‚‹å ´åˆã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ãŸé †ç•ªãŒé‡è¦ã«ãªã‚Šã¾ã™ã€‚上ã®ä¾‹ã§ã¯ã€å·¦ã®æ˜Ÿå½¢ã®ãƒ‘ã‚¹ãŒæœ€åˆã«é¸æŠžã•れã€å³ã®å…­è§’å½¢ã®ãƒ‘ã‚¹ãŒæ¬¡ã«é¸æŠžã•れã¦ã„ã¾ã™ã€‚ - - + + å³ã®ãƒ‘スを最åˆã«é¸æŠžã—ãŸå ´åˆã®çµæžœã‚’確èªã—ã¦ãã ã•ã„。指数㫠1 を設定ã—ãŸå ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: - + @@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch at gmail dot com - - 終端パスを複製ã™ã‚‹ + + 終端パスを複製ã™ã‚‹ - - + + ã“ã®ãƒ‘ラメーターã¯ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã§ãƒ‘スã®ã‚°ãƒ«ãƒ¼ãƒ—を生æˆã™ã‚‹éš›ã«è£œé–“ãŒé©ç”¨ã•れるオリジナルã®ãƒ‘スã®è¤‡è£½ã‚‚生æˆã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚ - - スタイルを補間ã™ã‚‹ + + スタイルを補間ã™ã‚‹ - - + + ã“ã®ãƒ‘ラメーターã¯è£œé–“エクステンションã®è³¢ã„機能ã®ä¸€ã¤ã§ã™ã€‚ã“ã®æ©Ÿèƒ½ã¯å„ステップã”ã¨ã«ã‚¹ã‚¿ã‚¤ãƒ«ã®å¤‰æ›´ã‚’試ã¿ã¾ã™ã€‚最åˆã®ãƒ‘ã‚¹ã¨æœ€å¾Œã®ãƒ‘スã®è‰²ãŒç•°ãªã‚‹å ´åˆã€ç”Ÿæˆã•れるパスã®è‰²ã‚‚å¾ã€…ã«å¤‰åŒ–ã—ã¾ã™ã€‚ - - + + 以下ã¯ãƒ‘スã®ãƒ•ィルã«ã‚¹ã‚¿ã‚¤ãƒ«ã®è£œé–“機能ãŒé©ç”¨ã•れãŸä¾‹ã§ã™: - + @@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + スタイルã®è£œé–“ã¯ãƒ‘スã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã«å¯¾ã—ã¦ã‚‚作用ã—ã¾ã™ã€‚ - + @@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + ã‚‚ã¡ã‚ã‚“ã€å§‹ç‚¹ãŠã‚ˆã³çµ‚点ã®ãƒ‘スã¯åŒã˜å½¢çжã§ãªãã¦ã‚‚æ§‹ã„ã¾ã›ã‚“。 - + @@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch at gmail dot com - - 補間を利用ã—ã¦ä¸è¦å‰‡ãªå½¢çжã®ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã½ã見ã›ã‚‹ + + 補間を利用ã—ã¦ä¸è¦å‰‡ãªå½¢çжã®ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã½ã見ã›ã‚‹ - - + + Inkscape ã§ã¯ (ã¾ã ) ç·šå½¢ (ç›´ç·š) ãŠã‚ˆã³æ”¾å°„状 (円状) 以外ã®ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’作æˆã§ãã¾ã›ã‚“。ã—ã‹ã—ã€è£œé–“エクステンションã¨ã‚¹ã‚¿ã‚¤ãƒ«ã®è£œé–“を利用ã—ã¦ãれã£ã½ã見ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ç°¡å˜ãªä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ — ç•°ãªã‚‹ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã® 2 ã¤ã®ç·šã‚’æãã¾ã™: - + - - + + ãã—ã¦ãれらã®ç·šã®é–“を補間ã™ã‚‹ã¨ã€ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã®ã‚ˆã†ã«ãªã‚Šã¾ã™: - + @@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch at gmail dot com - - 最後㫠+ + 最後㫠- - + + ã“ã“ã¾ã§ç´¹ä»‹ã—ãŸã‚ˆã†ã«ã€Inkscape ã®è£œé–“エクステンションã¯å¼·åŠ›ãªãƒ„ールã§ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã§ã¯æœ¬ã‚¨ã‚¯ã‚¹ãƒ†ãƒ³ã‚·ãƒ§ãƒ³ã®åŸºæœ¬çš„ãªéƒ¨åˆ†ã«ã—ã‹è§¦ã‚Œã¦ã„ã¾ã›ã‚“ãŒã€è‡ªåˆ†ã§è§¦ã£ã¦ã¿ã‚‹ã“ã¨ã“ããŒè£œé–“ã«ã¤ã„ã¦ã‚ˆã‚Šæ·±ãçŸ¥ã‚‹æœ€ã‚‚è‰¯ã„æ‰‹æ®µã¨ãªã‚‹ã§ã—ょã†ã€‚ - + @@ -586,8 +586,8 @@ Ryan Lerch, ryanlerch at gmail dot com - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-interpolate.nl.svg b/share/tutorials/tutorial-interpolate.nl.svg index e3de52523..0b547fc36 100644 --- a/share/tutorials/tutorial-interpolate.nl.svg +++ b/share/tutorials/tutorial-interpolate.nl.svg @@ -1,15 +1,15 @@ - + - + - - - + + + @@ -25,542 +25,542 @@ - - - - - - - - - + + + + + + + + + - - Gebruik Ctrl+pijl omlaag om te scrollen - - handleiding + + Gebruik Ctrl+pijl omlaag om te scrollen + + handleiding - - ::INTERPOLEREN + + ::INTERPOLEREN -Ryan Lerch, ryanlerch at gmail dot com - - + + + Dit document legt uit hoe je de Inkscape-uitbreiding Interpoleren gebruikt - - Introductie + + Introductie - - + + Interpoleren maakt een lineaire interpolatie tussen twee of meer geselecteerde paden. Eenvoudig gezegd betekent het dat het “de gaten vult†tussen de paden en deze transformeert in overeenstemming met het aantal gegeven stappen. - - + + - Selecteer voor het gebruik van Interpoleren de paden die je wil transformeren en kies Uitbreidingen > Genereren uit pad > Interpoleren in het menu. + Selecteer voor het gebruik van Interpoleren de paden die je wil transformeren en kies Uitbreidingen > Genereren uit pad > Interpoleren in het menu. - - + + - Vooraleer de uitbreiding toe passen, moeten de objecten die je wil transformeren, omgezet worden in paden. Dit kan door de objecten te selecteren en Paden > Object naar pad of Shift+Ctrl+Cte gebruiken. Indien je objecten geen paden zijn, doet de uitbreiding niets. + Vooraleer de uitbreiding toe passen, moeten de objecten die je wil transformeren, omgezet worden in paden. Dit kan door de objecten te selecteren en Paden > Object naar pad of Shift+Ctrl+Cte gebruiken. Indien je objecten geen paden zijn, doet de uitbreiding niets. - - Interpolatie tussen twee identieke paden + + Interpolatie tussen twee identieke paden - - + + Het eenvoudigste gebruik van de uitbreiding Interpoleren is interpoleren tussen twee identieke paden. Wanneer deze aangeroepen wordt, is het resultaat dat de ruimte tussen de twee paden opgevuld wordt met duplicaten van de originele paden. Het aantal stappen bepaalt het aantal geplaatste duplicaten. - - + + Neem bijvoorbeeld de volgende twee paden: - - - + + + - - + + Selecteer nu beide paden en voer Interpoleren uit met de instellingen zoals getoond in de volgende afbeelding. - - - - - - - - - - + + + + + + + + + + - Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt + Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt - - + + Zoals je kan zien in het bovenstaande resultaat, is de ruimte tussen de twee cirkelvormige paden gevuld met zes (het aantal interpolatiestappen) andere cirkelvormige paden. Noteer ook dat Interpoleren deze vormen groepeert. - - Interpolatie tussen twee verschillende paden + + Interpolatie tussen twee verschillende paden - - + + Wanneer interpolatie toegepast wordt op twee verschillende paden interpoleert het programma de vorm van het ene pad in het andere. Het resultaat is dat je een morphingsequentie tussen de twee paden krijgt, waarbij de regelmatigheid bepaald wordt door het aantal interpolatiestappen. - - + + Neem bijvoorbeeld de volgende twee paden: - - - + + + - - + + Selecteer nu de twee paden en pas Interpoleren toe. Het resultaat zou ongeveer zo moeten zijn: - - - - - - - - - + + + + + + + + + - - Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt + + Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt - - + + Zoals je kan zien in het bovenstaande resultaat, is de ruimte tussen het cirkelvormige pad en het driehoekpad opgevuld met zes paden die gradueel van de ene vorm in de andere overgaan. - - + + Bij het gebruik van de uitbreiding Interpoleren op twee verschillende paden, is de positie van het beginknooppunt van elk pad van belang. Om het beginknooppunt te vinden, selecteer je het pad en schakel je over naar het knooppuntengereedschap opdat de knooppunten verschijnen. Druk op TAB. Het eerste geselecteerde knooppunt is het beginknooppunt van het pad. - - + + Bekijk onderstaande afbeelding die identiek is aan het vorige voorbeeld, behalve dat de knooppunten worden weergegeven. Het groene knooppunt op elk pad is het beginknooppunt. - - - - - - - - - - + + + + + + + + + + - - + + Het vorige voorbeeld (hier nogmaals weergegeven) werd toegepast met deze knooppunten als de beginknooppunten. - - - - - - - - - + + + + + + + + + - - Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt + + Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt - - + + Bekijk nu de veranderingen in het interpolatieresultaat wanneer de driehoek gespiegeld wordt opdat het startknooppunt zich in een andere positie bevindt: - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - Interpolatiemethode + + Interpolatiemethode - - + + Een van de parameters van de Interpoleren is de Interpolatiemethode. Er zijn twee interpolatiemethoden geïmplementeerd die verschillen in de wijze waarop de curven van de nieuwe paden berekend worden. De mogelijke keuzen zijn Interpolatiemethode 1 of 2. - - + + In bovenstaande voorbeelden gebruikten we Interpolatiemethode 2 en was het resultaat: - - - - - - - - - + + + + + + + + + - + - - + + Vergelijk dit met Interpolatiemethode 1: - - - - - - - - - - + + + + + + + + + + - - + + De verschillen on hoe deze methoden de getallen berekenen valt buiten scope van dit document. Probeer dus gewoon beide en gebruik het resultaat dat het dichtste aanleunt bij wat je in gedachten had. - - Exponent + + Exponent - - + + De parameter exponent bepaalt de afstand tussen de stappen van de interpolatie. Een exponent 0 zorgt voor een gelijke afstand tussen de kopieën - - + + Hier is het resultaat van nog een eenvoudig voorbeeld met exponent 0. - - - - - - - - - - + + + + + + + + + + - Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt + Exponent: 0.0Interpolatiestappen: 6Interpolatiemethode: 2Eindpaden dupliceren: uitgevinktStijl interpoleren: uitgevinkt - - + + Hetzelfde voorbeeld met exponent 1: - - - - - - - - - - + + + + + + + + + + - - + + met exponent 2: - - - - - - - - - - + + + + + + + + + + - - + + met exponent -1: - - - - - - - - - - + + + + + + + + + + - - + + Wanneer je exponenten gebruikt bij Interpoleren, is de volgorde waarin je de objecten selecteert van belang. In de bovenstaande voorbeelden is het stervormige pad links eerst geselecteerd en het hexagonale pad rechts als tweede. - - + + Bekijk het resultaat wanneer het rechtse pad eerst was geselecteerd. De exponent in dit voorbeeld is 1: - - - - - - - - - - + + + + + + + + + + - - Eindpaden dupliceren + + Eindpaden dupliceren - - + + Deze parameter bepaalt of de groep paden die door de uitbreiding gegenereert wordt, een kopie bevat van de originele paden waarop Interpoleren toegepast werd. - - Stijl interpoleren + + Stijl interpoleren - - + + Deze parameter is een van de mooie functies van Interpoleren. Het zorgt ervoor dat Interpoleren bij elke stap de stijl van de paden tracht te veranderen. Bijgevolg, indien het begin- en eindpad verschillende kleuren hebben, zullen de gegeneerde paden incrementeel van kleur veranderen. - - + + Dit is een voorbeeld waarbij Stijl interpoleren gebruikt is op de vulling van een pad. - - - - - - - - - - + + + + + + + + + + - - + + Stijl interpoleren beïnvloedt ook de omlijning van een pad: - - - - - - - - - - + + + + + + + + + + - - + + Begin- en eindpad hoeven uiteraard niet hetzelfde te zijn: - - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - Gebruik voor imitatie van onregelmatige kleurverlopen + + Gebruik voor imitatie van onregelmatige kleurverlopen - - + + Het is in Inkscape (nog) niet mogelijk om andere dan linaire (rechte lijn) of randiale (ronde) kleurverlopen te maken. Dit kan echter geïmiteerd worden door Interpoleren met Stijl interpoleren. Zie het volgende eenvoudige voorbeeld - teken twee lijnen met verschillende omlijning: - - - + + + - - + + En interpoleer tussen de twee lijnen om je kleurverloop te maken: - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - Conclusie + + Conclusie - - + + Zoals hierboven gedemonstreerd, is de Inskcapeuitbreiding Interpoleren een krachtige tool. Deze handleiding omvat de basis van de uitbreiding, maar proberen is de weg naar het verder exploreren van interpolatie. - + - - - + + + @@ -576,19 +576,19 @@ Ryan Lerch, ryanlerch at gmail dot com - - - - - - - - - + + + + + + + + + - - Gebruik Ctrl+pijl omhoog om te scrollen - + + Gebruik Ctrl+pijl omhoog om te scrollen + diff --git a/share/tutorials/tutorial-interpolate.pl.svg b/share/tutorials/tutorial-interpolate.pl.svg index f8bdd2d4b..08144b0ea 100644 --- a/share/tutorials/tutorial-interpolate.pl.svg +++ b/share/tutorials/tutorial-interpolate.pl.svg @@ -1,15 +1,15 @@ - + - + - - - + + + @@ -25,542 +25,542 @@ - - - - - - - - - - + + + + + + + + + + - - Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - + + Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć + - - ::INTERPOLACJA + + ::INTERPOLACJA -Ryan Lerch, ryanlerch at gmail dot com - - + + + Ten poradnik wyjaÅ›nia, jak używać rozszerzenia „Interpolacja†- - WstÄ™p + + WstÄ™p - - + + Interpolacja jest liniowym wypeÅ‚nieniem pomiÄ™dzy dwoma lub wiÄ™cej zaznaczonymi Å›cieżkami. Oznacza to wypeÅ‚nienie odstÄ™pu pomiÄ™dzy Å›cieżkami i przeksztaÅ‚canie go wedÅ‚ug liczby zadanych kroków. - - + + - To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. + To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. - - + + - Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. + Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. - - Interpolation between two identical paths + + Interpolation between two identical paths - - + + The simplest use of the Interpolate extension is to interpolate between two paths that are identical. When the extension is called, the result is that the space between the two paths is filled with duplicates of the original paths. The number of steps defines how many of these duplicates are placed. - - + + Dla przykÅ‚adu weźmy nastÄ™pujÄ…ce dwie Å›cieżki: - - - + + + - - + + Now, select the two paths, and run the Interpolate extension with the settings shown in the following image. - - - - - - - - - - + + + + + + + + + + - WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone + WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone - - + + As can be seen from the above result, the space between the two circle-shaped paths has been filled with 6 (the number of interpolation steps) other circle-shaped paths. Also note that the extension groups these shapes together. - - Interpolacja pomiÄ™dzy dwoma różnymi Å›cieżkami + + Interpolacja pomiÄ™dzy dwoma różnymi Å›cieżkami - - + + Gdy interpolacja jest wykonywana pomiÄ™dzy dwoma różnymi Å›cieżkami, program interpoluje ksztaÅ‚t jednej Å›cieżki do drugiej. W wyniku tego otrzymuje siÄ™ pÅ‚ynne przejÅ›cie z jednej Å›cieżki do drugiej z regularnoÅ›ciÄ… okreÅ›lonÄ… przez liczbÄ™ kroków interpolacji. - - + + Dla przykÅ‚adu weźmy nastÄ™pujÄ…ce dwie Å›cieżki: - - - + + + - - + + Now, select the two paths, and run the Interpolate extension. The result should be like this: - - - - - - - - - + + + + + + + + + - - WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone + + WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone - - + + Jak można zauważyć powyżej, przestrzeÅ„ pomiÄ™dzy okrÄ…gÅ‚ym ksztaÅ‚tem a trójkÄ…tnym, zostaÅ‚a wypeÅ‚niona szeÅ›cioma Å›cieżkami z przejÅ›ciem ksztaÅ‚tu od jednej do drugiej Å›cieżki. - - + + When using the Interpolate extension on two different paths, the position of the starting node of each path is important. To find the starting node of a path, select the path, then choose the Node Tool so that the nodes appear and press TAB. The first node that is selected is the starting node of that path. - - + + Popatrz na obrazek znajdujÄ…cy siÄ™ poniżej. Jest on identyczny, jak w poprzednim przykÅ‚adzie, ale sÄ… wyÅ›wietlone wÄ™zÅ‚y. WÄ™zÅ‚y wyÅ›wietlone na zielono sÄ… wÄ™zÅ‚ami poczÄ…tkowymi. - - - - - - - - - - + + + + + + + + + + - - + + Poprzedni przykÅ‚ad (teraz wyÅ›wietlany poniżej) zostaÅ‚ wykonany przy użyciu tych wÄ™złów poczÄ…tkowych. - - - - - - - - - + + + + + + + + + - - WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone + + WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone - - + + Zaobserwuj zmiany podczas lustrzanego odbijania trójkÄ…tnego ksztaÅ‚tu, gdy wÄ™zeÅ‚ poczÄ…tkowy jest w innej pozycji: - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - Metoda interpolacji + + Metoda interpolacji - - + + One of the parameters of the Interpolate extension is the Interpolation Method. There are 2 interpolation methods implemented, and they differ in the way that they calculate the curves of the new shapes. The choices are either Interpolation Method 1 or 2. - - + + W powyższym przykÅ‚adzie zostaÅ‚a użyta metoda nr 2 i jej wynik jest nastÄ™pujÄ…cy: - - - - - - - - - + + + + + + + + + - + - - + + Teraz porównamy to z metodÄ… nr 1: - - - - - - - - - - + + + + + + + + + + - - + + Ten poradnik nie obejmuje swoim zakresem opisu różnic w sposobie przeliczania liczb przez te metody, tak wiÄ™c wypróbuj te metody i zastosuj tÄ™, która Ci najbardziej odpowiada. - - WykÅ‚adnik + + WykÅ‚adnik - - + + Parametr wykÅ‚adnik odpowiada za odstÄ™py pomiÄ™dzy krokami interpolacji. Wartość 0 daje w rezultacie równy odstÄ™p pomiÄ™dzy kopiami. - - + + Tutaj znajduje siÄ™ wynik innego podstawowego przykÅ‚adu z wykÅ‚adnikiem 0. - - - - - - - - - - + + + + + + + + + + - WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone + WykÅ‚adnik: 0.0Kroki interpolacji: 6Metoda interpolacji: 2Powiel Å›cieżki koÅ„cowe: niezaznaczoneModelowanie: niezaznaczone - - + + Ten sam przykÅ‚ad z wykÅ‚adnikiem 1: - - - - - - - - - - + + + + + + + + + + - - + + z wykÅ‚adnikiem 2: - - - - - - - - - - + + + + + + + + + + - - + + i z wykÅ‚adnikiem -1: - - - - - - - - - - + + + + + + + + + + - - + + When dealing with exponents in the Interpolate extension, the order that you select the objects is important. In the examples above, the star-shaped path on the left was selected first, and the hexagon-shaped path on the right was selected second. - - + + Zobacz wynik, gdy ksztaÅ‚t po prawej zostaÅ‚ zaznaczony jako pierwszy. WykÅ‚adnik w tym przykÅ‚adzie byÅ‚ ustawiony na 1: - - - - - - - - - - + + + + + + + + + + - - Powiel Å›cieżki koÅ„cowe + + Powiel Å›cieżki koÅ„cowe - - + + This parameter defines whether the group of paths that is generated by the extension includes a copy of the original paths that interpolate was applied on. - - Modelowanie + + Modelowanie - - + + This parameter is one of the neat functions of the interpolate extension. It tells the extension to attempt to change the style of the paths at each step. So if the start and end paths are different colors, the paths that are generated will incrementally change as well. - - + + To jest przykÅ‚ad użycia funkcji „Modelowanie†na wypeÅ‚nieniu Å›cieżki: - - - - - - - - - - + + + + + + + + + + - - + + Modelowanie oddziaÅ‚uje także na kontur Å›cieżki: - - - - - - - - - - + + + + + + + + + + - - + + Åšcieżka w punkcie poczÄ…tkowym i koÅ„cowym nie musi być taka sama, ale: - - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - Stosowanie interpolacji do imitowania nieregularnych gradientów + + Stosowanie interpolacji do imitowania nieregularnych gradientów - - + + It is not possible in Inkscape (yet) to create a gradient other than linear (straight line) or radial (round). However, it can be faked using the Interpolate extension and Interpolate Style. A simple example follows — draw two lines of different strokes: - - - + + + - - + + Użyj interpolacji pomiÄ™dzy tymi dwoma liniami, aby utworzyć gradient: - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - Podsumowanie + + Podsumowanie - - + + As demonstrated above, the Inkscape Interpolate extension is a powerful tool. This tutorial covers the basics of this extension, but experimentation is the key to exploring interpolation further. - + - - - + + + @@ -576,19 +576,19 @@ Ryan Lerch, ryanlerch at gmail dot com - - - - - - - - - + + + + + + + + + - - Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć - + + Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć + diff --git a/share/tutorials/tutorial-interpolate.ru.svg b/share/tutorials/tutorial-interpolate.ru.svg index a3db157a7..6cdc9669e 100644 --- a/share/tutorials/tutorial-interpolate.ru.svg +++ b/share/tutorials/tutorial-interpolate.ru.svg @@ -1,6 +1,6 @@ - + @@ -36,74 +36,74 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - + ::ИÐТЕРПОЛЯЦИЯ -Ryan Lerch, ryanlerch at gmail dot com - - + + + Этот раздел учебника опиÑывает иÑпользование раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Inkscape ИнтерполÑÑ†Ð¸Ñ - - Ð’Ñтупление + + Ð’Ñтупление - - + + ИнтерполÑÑ†Ð¸Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ñет линейную интерполÑцию между Ð´Ð²ÑƒÐ¼Ñ Ð¸ более выбранными оконтуренными объектами. Суть данной функции — заполнение раÑÑтоÑÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ объектами и их транÑÑ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð² ÑоответÑтвии Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ чиÑлом шагов. - - + + - Чтобы иÑпользовать раÑширение ИнтерполÑциÑ, выберите объекты, которые вы хотите преобразовать, и выберите в меню РаÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ > Создание из контура > ИнтерполÑциÑ. + Чтобы иÑпользовать раÑширение ИнтерполÑциÑ, выберите объекты, которые вы хотите преобразовать, и выберите в меню РаÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ > Создание из контура > ИнтерполÑциÑ. - - + + - Перед применением Ñффекта объекты, которые вы ÑобираетеÑÑŒ преобразовать, должны быть оконтурены. Это делаетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° и иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÑŽ Контур > Оконтурить объект или Shift+Ctrl+C. ЕÑли объекты не оконтурены, то Ñффект применÑтьÑÑ Ð½Ðµ будет. + Перед применением Ñффекта объекты, которые вы ÑобираетеÑÑŒ преобразовать, должны быть оконтурены. Это делаетÑÑ Ð¿ÑƒÑ‚Ñ‘Ð¼ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° и иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÑŽ Контур > Оконтурить объект или Shift+Ctrl+C. ЕÑли объекты не оконтурены, то Ñффект применÑтьÑÑ Ð½Ðµ будет. - - ИнтерполÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ объектами + + ИнтерполÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ объектами - - + + Самым проÑтым иÑпользованием раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ ÑвлÑетÑÑ Ð¸Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ объектами. При применении раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑтоÑние между Ð´Ð²ÑƒÐ¼Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°Ð¼Ð¸ заполнÑетÑÑ Ð´ÑƒÐ±Ð»Ð¸ÐºÐ°Ñ‚Ð°Ð¼Ð¸ оригинальных объектов. ЧиÑло шагов определÑет количеÑтво Ñтих дубликатов. - - + + Ðапример, возьмём Ñледующие два объекта: - + - - + + Теперь выделите два объекта и запуÑтите интерполÑцию Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸, показанными на риÑунке ниже. - + @@ -114,44 +114,44 @@ Ryan Lerch, ryanlerch at gmail dot com - ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто + ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто - - + + Как видно из приведённого выше результата, проÑтранÑтво между Ð´Ð²ÑƒÐ¼Ñ ÐºÑ€ÑƒÐ³Ð°Ð¼Ð¸ было заполнено 6-ÑŽ (чиÑло шагов интерполÑции) другими такими же кругами. Также заметим, что раÑширение Ñгруппировало их вмеÑте. - - ИнтерполÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ объектами + + ИнтерполÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ объектами - - + + При интерполÑции двух различных объектов программа изменÑет форму контура одного объекта в форму контура другого. Ð’ результате Ñтого вы получаете промежуточные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ объектами, регулÑрноÑть которых определÑетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ шагов интерполÑции. - - + + Ðапример, возьмём Ñледующие два объекта: - + - - + + Теперь выделите два объекта и запуÑтите интерполÑцию. Результат должен быть примерно такой: - + @@ -162,30 +162,30 @@ Ryan Lerch, ryanlerch at gmail dot com - ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто + ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто - - + + Как видно из приведённого выше результата, проÑтранÑтво между кругом и треугольником заполнено 6-ÑŽ объектами, приближающими форму одного контура к другому. - - + + Когда раÑширение ИнтерполÑÑ†Ð¸Ñ Ð¸ÑпользуетÑÑ Ð´Ð»Ñ Ð´Ð²ÑƒÑ… различных объектов, важно положение начального узла каждого объекта. Чтобы найти начальный узел Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð°, выделите объект, затем выберите инÑтрумент Узлы так, чтобы узлы поÑвилиÑÑŒ и нажмите TAB. Первый выделенный узел ÑвлÑетÑÑ Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¼ узлом Ñтого объекта. - - + + ПоÑмотрите на изображение ниже. Оно идентично предыдущему примеру, за иÑключением Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÑƒÐ·Ð»Ð¾Ð²Ñ‹Ñ… точек. Зелёный узел на каждом объекте — начальный. - + @@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + Предыдущий пример (Ñм. Ñнова ниже) был Ñоздан, иÑÑ…Ð¾Ð´Ñ Ð¸Ð· данных положений начального узла. - + @@ -214,16 +214,16 @@ Ryan Lerch, ryanlerch at gmail dot com - ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто + ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто - - + + Теперь обратите внимание на изменение результата интерполÑции, еÑли начальный узел контура треугольника находитÑÑ Ð² другой позиции: - + @@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch at gmail dot com - + @@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch at gmail dot com - - СпоÑоб интерполÑции + + СпоÑоб интерполÑции - - + + Одним из параметров раÑÑˆÐ¸Ñ€ÐµÐ½Ð¸Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»ÑÑ†Ð¸Ñ ÑвлÑетÑÑ CпоÑоб интерполÑции. ЕÑть 2 реализованных ÑпоÑоба интерполÑции и их различие в том, как они вычиÑлÑÑŽÑ‚ кривые Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… объектов. Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñ‹ можете выбрать ÑпоÑоб интерполÑции 1 или 2. - - + + Ð’ приведённых выше примерах мы иÑпользовали ÑпоÑоб интерполÑции 2 и в результате получили: - + @@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + Теперь Ñравните Ñто Ñ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼, полученным ÑпоÑобом интерполÑции 1: - + @@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + ОпиÑание Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ ÑпоÑобов вычиÑÐ»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ параметра выходит за границы Ñтого документа, так что проще проÑто попробовать оба ÑпоÑоба и иÑпользовать тот, который даёт результат, близкий к необходимому. - - ЭкÑпонента + + ЭкÑпонента - - + + Параметр Ñкcпонента контролирует раÑÑтоÑние между шагами интерполÑции. ЭкÑпонента 0 делает раÑÑтоÑние между копиÑми объектов равным. - - + + ЗдеÑÑŒ приведён результат другого проÑтого примера Ñ ÑкÑпонентой 0. - + @@ -331,16 +331,16 @@ Ryan Lerch, ryanlerch at gmail dot com - ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто + ЭкÑпонента: 0.0Шагов интерполÑции: 6СпоÑоб интерполÑции: 2Продублировать оконечные контуры: ÑнÑтоИнтерполировать Ñтиль: ÑнÑто - - + + Тот же пример Ñ ÑкÑпонентой 1: - + @@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + Ñ ÑкÑпонентой 2: - + @@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + и Ñ ÑкÑпонентой -1: - + @@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + Когда имеешь дело Ñ ÑкÑпонентой в раÑширении ИнтерполÑциÑ, очень важен порÑдок выбора объектов. Ð’ приведённых выше примерах, звезда Ñлева была выбрана первой, а шеÑтиугольник Ñправа был выбран вторым. - - + + ПоÑмотрите результат выбора фигуры Ñправа первой. ЭкÑпонента в Ñтом примере была уÑтановлена в 1: - + @@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch at gmail dot com - - Продублировать оконечные контуры + + Продублировать оконечные контуры - - + + Этот параметр определÑет, будет ли группа Ñгенерированных раÑширением объектов Ñодержать копию оригинального контура, к которому применÑлаÑÑŒ интерполÑциÑ. - - Интерполировать Ñтиль + + Интерполировать Ñтиль - - + + Этот параметр ÑвлÑетÑÑ Ð¾Ð´Ð½Ð¾Ð¹ из приÑтных функций Ñффекта интерполÑции. Он предоÑтавлÑет раÑширению возможноÑть Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑ‚Ð¸Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð² на каждом шаге. Так что, еÑли начальный и конечный объекты разных цветов, генерируемые объекты будут поÑтепенно менÑтьÑÑ. - - + + Вот пример, в котором Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð¿Ð¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ Ñтиль была применена по отношению к заливке объекта: - + @@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + Параметр Интерполировать Ñтиль также влиÑет на обводку объекта: - + @@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch at gmail dot com - - + + РазумеетÑÑ, начальный и конечный объекты не обÑзательно должны быть одинаковыми: - + @@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch at gmail dot com - - ИÑпользование интерполÑции Ð´Ð»Ñ Ð¸Ð¼Ð¸Ñ‚Ð°Ñ†Ð¸Ð¸ неÑтандартных градиентов + + ИÑпользование интерполÑции Ð´Ð»Ñ Ð¸Ð¼Ð¸Ñ‚Ð°Ñ†Ð¸Ð¸ неÑтандартных градиентов - - + + Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² Inkscape возможно Ñоздать только линейный и радиальный градиент. Тем не менее, можно имитировать градиент, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ€Ð°Ñширение ИнтерполÑÑ†Ð¸Ñ Ð¸ Интерполировать Ñтиль. Ð’ Ñледующем примере иÑпользуютÑÑ Ð´Ð²Ðµ ломанные линии: - + - - + + ИнтерполÑÑ†Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ Ð´Ð²ÑƒÐ¼Ñ Ð»Ð¸Ð½Ð¸Ñми Ñоздаёт градиент: - + @@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch at gmail dot com - - Заключение + + Заключение - - + + Как показано выше, раÑширение Inkscape ИнтерполÑÑ†Ð¸Ñ ÑвлÑетÑÑ Ð¼Ð¾Ñ‰Ð½Ñ‹Ð¼ инÑтрументом. Этот раздел учебника опиÑывает лишь оÑновы иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтого раÑширениÑ. ЭкÑперименты ÑвлÑÑŽÑ‚ÑÑ ÐºÐ»ÑŽÑ‡Ð¾Ð¼ к дальнейшему изучению интерполÑции. - + @@ -586,9 +586,9 @@ Ryan Lerch, ryanlerch at gmail dot com - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх diff --git a/share/tutorials/tutorial-interpolate.sk.svg b/share/tutorials/tutorial-interpolate.sk.svg index b54d58b95..c6ff6da55 100644 --- a/share/tutorials/tutorial-interpolate.sk.svg +++ b/share/tutorials/tutorial-interpolate.sk.svg @@ -1,15 +1,15 @@ - + - + - - - + + + @@ -25,542 +25,542 @@ - - - - - - - - - - + + + + + + + + + + - - Na posunutie Äalej použite Ctrl+šípka dolu - + + Na posunutie Äalej použite Ctrl+šípka dolu + - - ::INTERPOLÃCIA + + ::INTERPOLÃCIA -Ryan Lerch, ryanlerch na gmail bodka com - - + + + Tento dokument vysvetľuje ako používaÅ¥ rozšírenie Inkscape Interpolácia. - - Úvod + + Úvod - - + + Interpolácia vykonáva lineárnu interpoláciu medzi dvomi alebo viacerými vybranými cestami. V podstate to znamená, že „vypĺňa medzery“ medzi cestami a transformuje ich podľa poÄtu požadovaných krokov. - - + + - To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. + Rozšírenie Interpolácia použijete tak, že vyberiete dve cesty, ktoré chcete transformovaÅ¥ a zvolíte z ponuky Rozšírenia > VytvoriÅ¥ z cesty > Interpolácia. - - + + - Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. + Pred spustením rozšírenia musia byÅ¥ objekty, ktoré sa chystáte transformovaÅ¥, cesty. To docielite tak, že vyberiete objekt a použijete Cesta > Objekt na cestu alebo Shift+Ctrl+C. Ak vaÅ¡e objekty nie sú cesty, efekt neurobí niÄ. - - Interpolation between two identical paths + + Interpolácia medzi dvomi zhodnými cestami - - + + - The simplest use of the Interpolate extension is to interpolate between two paths that are identical. When the extension is called, the result is that the space between the two paths is filled with duplicates of the original paths. The number of steps defines how many of these duplicates are placed. + Najjednoduchším použitím rozšírenia Interpolácia je interpolácia medzi dvomi cestami, ktoré sú identické. Po zavolaní efektu je výsledkom vyplnenie priestoru medzi dvomi cestami duplikátmi pôvodných ciest. PoÄet krokov definuje koľko týchto duplikátov sa umiestni. - - + + Vezmime si napríklad nasledovné dve cesty: - - - + + + - - + + - Now, select the two paths, and run the Interpolate extension with the settings shown in the following image. - - - - - - - - - - - + Teraz tieto dve cesty vyberte a spustite rozšírenie Interpolácia s nastaveniami podľa nasledovného obrázka. + + + + + + + + + + + - Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté + Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté - - + + - As can be seen from the above result, the space between the two circle-shaped paths has been filled with 6 (the number of interpolation steps) other circle-shaped paths. Also note that the extension groups these shapes together. + Ako vidno z výsledku hore, priestor medzi dvomi cestami v tvare kružnice bol vyplnený Å¡iestimi (poÄet krokov interpolácie) Äalšími cestami v tvare kružnice. Tiež si vÅ¡imnite, že rozšírenie tieto útvary zoskupí. - - Interpolácia medzi dvomi odliÅ¡nými cestami + + Interpolácia medzi dvomi odliÅ¡nými cestami - - + + Pri vykonaní Interpolácie na dvoch odliÅ¡ných cestách program bude interpolovaÅ¥ tvar cesty z jednej po druhú. Výsledkom je meniaca sa postupnosÅ¥ medzi cestami, priÄom pravidelnosÅ¥ definuje hodnota Krokov interpolácie. - - + + Vezmime si napríklad nasledovné dve cesty: - - - + + + - - + + - Now, select the two paths, and run the Interpolate extension. The result should be like this: - - - - - - - - - - + Teraz vyberte tieto dve cesty a spustite rozšírenie Interpolácia. Výsledok by mal byÅ¥ nasledovný: + + + + + + + + + + - - Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté + + Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté - - + + Ako vidno z výsledku hore, priestor medzi cestou v tvare kružnice a cestou v tvare trojuholníka bol vyplnený Å¡iestimi cestami v tvaroch postupujúcich od kružnice po trojuholník. - - + + - When using the Interpolate extension on two different paths, the position of the starting node of each path is important. To find the starting node of a path, select the path, then choose the Node Tool so that the nodes appear and press TAB. The first node that is selected is the starting node of that path. + Pri použití rozšírenia Interpolácia na dve odliÅ¡né cesty, na polohe poÄiatoÄného uzla každej cesty záleží. PoÄiatoÄný uzol cesty nájdete tak, že cestu vyberiete, potom vyberiete nástroj Uzol, aby sa zobrazili uzly a stlaÄíte Tab. Prvý vybraný uzol je poÄiatoÄný uzol danej cesty. - - + + Pozrite si obrázok dolu, ktorý je rovnaký ako predchádzajúci príklad okrem toho, že tu sú zobrazené body uzlov. Uzol vyznaÄený zelenou na každej ceste je poÄiatoÄný uzol. - - - - - - - - - - + + + + + + + + + + - - + + Predchádzajúci príklad (znova zobrazený dolu) bol vykonaný s týmito uzlami ako poÄiatoÄnými. - - - - - - - - - + + + + + + + + + - - Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté + + Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté - - + + Teraz si vÅ¡imnite zmeny vo výsledku interpolácie, keÄ je trojuholníková cesta zrkadlovo otoÄená, takže poÄiatoÄný uzol je v inej polohe: - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - Metóda interpolácie + + Metóda interpolácie - - + + - One of the parameters of the Interpolate extension is the Interpolation Method. There are 2 interpolation methods implemented, and they differ in the way that they calculate the curves of the new shapes. The choices are either Interpolation Method 1 or 2. + Jedným z parametrov rozšírenia Interpolácia je metóda interpolácie. Sú implementované dve metódy interpolácie a líšia sa spôsobom, akým prebieha výpoÄet kriviek nových tvarov. Možnosti sú buÄ metóda interpolácie 1 alebo 2. - - + + V príkladoch hore sme použili Metódu interpolácie 2 a výsledkom bolo: - - - - - - - - - + + + + + + + + + - + - - + + Teraz ho porovnajte s výsledkom Metódy interpolácie 1: - - - - - - - - - - + + + + + + + + + + - - + + Rozdiel v spôsobe výpoÄtu Äísiel medzi týmito metódami je nad rozsah tohto dokumentu, preto jednoducho skúste obe a použite tú, ktorá dosiahne výsledok blízky tomu, Äo ste si predstavovali. - - Exponent + + Exponent - - + + Parameter exponent ovláda rozostupy medzi krokmi interpolácie. Exponent 0 znamená, že rozostupy medzi jednotlivými kópiami sú rovnomerné. - - + + Tu je výsledok ÄalÅ¡ieho jednoduchého príkladu s exponentom 0. - - - - - - - - - - + + + + + + + + + + - Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté + Exponent: 0.0Krokov interpolácie: 6Metóda interpolácie: 2DuplikovaÅ¥ konce ciest: nezaÅ¡krtnutéInterpolovaÅ¥ Å¡týl: nezaÅ¡krtnuté - - + + Rovnaký príklad s exponentom 1: - - - - - - - - - - + + + + + + + + + + - - + + s exponentom 2: - - - - - - - - - - + + + + + + + + + + - - + + a s exponentom -1: - - - - - - - - - - + + + + + + + + + + - - + + - When dealing with exponents in the Interpolate extension, the order that you select the objects is important. In the examples above, the star-shaped path on the left was selected first, and the hexagon-shaped path on the right was selected second. + Pri práci s exponentami rozšírenia Interpolácia na poradí v akom objekty vyberiete záleží. V hore uvedených príkladoch bol najskôr vybraný útvar v tvare hviezdy vľavo a Å¡esÅ¥uholníkový útvar vpravo bol vybraný druhý v poradí. - - + + Pozrite si výsledok dosiahnutý vybraním najprv útvaru vpravo. Exponent v tomto príklade bol nastavený na 1: - - - - - - - - - - + + + + + + + + + + - - DuplikovaÅ¥ konce ciest + + DuplikovaÅ¥ konce ciest - - + + - This parameter defines whether the group of paths that is generated by the extension includes a copy of the original paths that interpolate was applied on. + Tento parameter definuje, Äi skupina ciest vytvorených týmto rozšírením obsahuje kópiu pôvodných ciest, na ktoré sa interpolácia aplikovala. - - InterpolovaÅ¥ Å¡týl + + InterpolovaÅ¥ Å¡týl - - + + - This parameter is one of the neat functions of the interpolate extension. It tells the extension to attempt to change the style of the paths at each step. So if the start and end paths are different colors, the paths that are generated will incrementally change as well. + Tento parameter je jedna z pekných funkcií rozšírenia Interpolácia. Hovorí efektu, aby sa pokúsil zmeniÅ¥ Å¡týl ciest v každom kroku. Takže ak má poÄiatoÄná a koncová cesta odliÅ¡nú farbu, vytvorené cesty sa budú tiež postupne medzi nimi meniÅ¥. - - + + Tu je príklad, kde bola funkcia InterpolovaÅ¥ Å¡týl použitá na výplň cesty: - - - - - - - - - - + + + + + + + + + + - - + + InterpolovaÅ¥ Å¡týl tiež berie do úvahy Å¥ah cesty: - - - - - - - - - - + + + + + + + + + + - - + + Samozrejme, ani cesta poÄiatoÄného bodu a koncového bodu nemusí byÅ¥ rovnaká: - - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - Použitie Interpolácie na vytvorenie nepravých farebných prechodov s nepravidelným tvarom + + Použitie Interpolácie na vytvorenie nepravých farebných prechodov s nepravidelným tvarom - - + + - It is not possible in Inkscape (yet) to create a gradient other than linear (straight line) or radial (round). However, it can be faked using the Interpolate extension and Interpolate Style. A simple example follows — draw two lines of different strokes: + V Inkscape (zatiaľ) nie je možné vytvoriÅ¥ iný farebný prechod ako lineárny (priama Äiara) alebo radiálny (okrúhly). Je ich vÅ¡ak možné napodobniÅ¥ pomocou rozšírenia Interpolácia a voľby InterpolovaÅ¥ Å¡týl. Nasleduje jednoduchý príklad — nakreslite dve Äiary s odliÅ¡nými Å¥ahmi: - - - + + + - - + + A interpolujte medzi týmito dvomi Äiarami, Äím sa vytvorí farebný prechod: - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - Záver + + Záver - - + + - As demonstrated above, the Inkscape Interpolate extension is a powerful tool. This tutorial covers the basics of this extension, but experimentation is the key to exploring interpolation further. + Ak bolo predvedené vyššie, rozšírenia Inkscape Interpolácia je mocný nástroj. Tento návod pokrýva základy použitia tohto efektu, ale experimentovanie je kľúÄom k ÄalÅ¡iemu objavovaniu interpolácie. - + - - - + + + @@ -576,19 +576,19 @@ Ryan Lerch, ryanlerch na gmail bodka com - - - - - - - - - + + + + + + + + + - - Na posunutie späť použite Ctrl+šípka hore - + + Na posunutie späť použite Ctrl+šípka hore + diff --git a/share/tutorials/tutorial-interpolate.svg b/share/tutorials/tutorial-interpolate.svg index 8cbf06044..9e21fcd34 100644 --- a/share/tutorials/tutorial-interpolate.svg +++ b/share/tutorials/tutorial-interpolate.svg @@ -40,70 +40,70 @@ Use Ctrl+down arrow to scroll - + ::INTERPOLATE -Ryan Lerch, ryanlerch at gmail dot com - + + This document explains how to use Inkscape's Interpolate extension - - Introduction + + Introduction - + Interpolate does a linear interpolation between two or more selected paths. It basically means that it “fills in the gaps†between the paths and transforms them according to the number of steps given. - + To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. - + Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. - - Interpolation between two identical paths + + Interpolation between two identical paths - + The simplest use of the Interpolate extension is to interpolate between two paths that are identical. When the extension is called, the result is that the space between the two paths is filled with duplicates of the original paths. The number of steps defines how many of these duplicates are placed. - + For example, take the following two paths: - + - + Now, select the two paths, and run the Interpolate extension with the settings shown in the following image. - + @@ -116,42 +116,42 @@ Ryan Lerch, ryanlerch at gmail dot com Exponent: 0.0Interpolation Steps: 6Interpolation Method: 2Duplicate Endpaths: uncheckedInterpolate Style: unchecked - + As can be seen from the above result, the space between the two circle-shaped paths has been filled with 6 (the number of interpolation steps) other circle-shaped paths. Also note that the extension groups these shapes together. - - Interpolation between two different paths + + Interpolation between two different paths - + When interpolation is done on two different paths, the program interpolates the shape of the path from one into the other. The result is that you get a morphing sequence between the paths, with the regularity still defined by the Interpolation Steps value. - + For example, take the following two paths: - + - + Now, select the two paths, and run the Interpolate extension. The result should be like this: - + @@ -164,28 +164,28 @@ Ryan Lerch, ryanlerch at gmail dot com Exponent: 0.0Interpolation Steps: 6Interpolation Method: 2Duplicate Endpaths: uncheckedInterpolate Style: unchecked - + As can be seen from the above result, the space between the circle-shaped path and the triangle-shaped path has been filled with 6 paths that progress in shape from one path to the other. - + When using the Interpolate extension on two different paths, the position of the starting node of each path is important. To find the starting node of a path, select the path, then choose the Node Tool so that the nodes appear and press TAB. The first node that is selected is the starting node of that path. - + See the image below, which is identical to the previous example, apart from the node points being displayed. The node that is green on each path is the starting node. - + @@ -196,14 +196,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + The previous example (shown again below) was done with these nodes being the starting node. - + @@ -216,14 +216,14 @@ Ryan Lerch, ryanlerch at gmail dot com Exponent: 0.0Interpolation Steps: 6Interpolation Method: 2Duplicate Endpaths: uncheckedInterpolate Style: unchecked - + Now, notice the changes in the interpolation result when the triangle path is mirrored so the starting node is in a different position: - + @@ -236,7 +236,7 @@ Ryan Lerch, ryanlerch at gmail dot com - + @@ -248,24 +248,24 @@ Ryan Lerch, ryanlerch at gmail dot com - - Interpolation Method + + Interpolation Method - + One of the parameters of the Interpolate extension is the Interpolation Method. There are 2 interpolation methods implemented, and they differ in the way that they calculate the curves of the new shapes. The choices are either Interpolation Method 1 or 2. - + In the examples above, we used Interpolation Method 2, and the result was: - + @@ -277,14 +277,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + Now compare this to Interpolation Method 1: - + @@ -296,31 +296,31 @@ Ryan Lerch, ryanlerch at gmail dot com - + The differences in how these methods calculate the numbers is beyond the scope of this document, so simply try both, and use which ever one gives the result closest to what you intend. - - Exponent + + Exponent - + The exponent parameter controls the spacing between steps of the interpolation. An exponent of 0 makes the spacing between the copies all even. - + Here is the result of another basic example with an exponent of 0. - + @@ -333,14 +333,14 @@ Ryan Lerch, ryanlerch at gmail dot com Exponent: 0.0Interpolation Steps: 6Interpolation Method: 2Duplicate Endpaths: uncheckedInterpolate Style: unchecked - + The same example with an exponent of 1: - + @@ -352,14 +352,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + with an exponent of 2: - + @@ -371,14 +371,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + and with an exponent of -1: - + @@ -390,21 +390,21 @@ Ryan Lerch, ryanlerch at gmail dot com - + When dealing with exponents in the Interpolate extension, the order that you select the objects is important. In the examples above, the star-shaped path on the left was selected first, and the hexagon-shaped path on the right was selected second. - + View the result when the path on the right was selected first. The exponent in this example was set to 1: - + @@ -416,34 +416,34 @@ Ryan Lerch, ryanlerch at gmail dot com - - Duplicate Endpaths + + Duplicate Endpaths - + This parameter defines whether the group of paths that is generated by the extension includes a copy of the original paths that interpolate was applied on. - - Interpolate Style + + Interpolate Style - + This parameter is one of the neat functions of the interpolate extension. It tells the extension to attempt to change the style of the paths at each step. So if the start and end paths are different colors, the paths that are generated will incrementally change as well. - + Here is an example where the Interpolate Style function is used on the fill of a path: - + @@ -455,14 +455,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + Interpolate Style also affects the stroke of a path: - + @@ -474,14 +474,14 @@ Ryan Lerch, ryanlerch at gmail dot com - + Of course, the path of the start point and the end point does not have to be the same either: - + @@ -503,28 +503,28 @@ Ryan Lerch, ryanlerch at gmail dot com - - Using Interpolate to fake irregular-shaped gradients + + Using Interpolate to fake irregular-shaped gradients - + It is not possible in Inkscape (yet) to create a gradient other than linear (straight line) or radial (round). However, it can be faked using the Interpolate extension and Interpolate Style. A simple example follows — draw two lines of different strokes: - + - + And interpolate between the two lines to create your gradient: - + @@ -546,17 +546,17 @@ Ryan Lerch, ryanlerch at gmail dot com - - Conclusion + + Conclusion - + As demonstrated above, the Inkscape Interpolate extension is a powerful tool. This tutorial covers the basics of this extension, but experimentation is the key to exploring interpolation further. - + diff --git a/share/tutorials/tutorial-interpolate.vi.svg b/share/tutorials/tutorial-interpolate.vi.svg index 02987588e..f68f29785 100644 --- a/share/tutorials/tutorial-interpolate.vi.svg +++ b/share/tutorials/tutorial-interpolate.vi.svg @@ -1,15 +1,15 @@ - + - + - - - + + + @@ -25,542 +25,542 @@ - - - - - - - - - - + + + + + + + + + + - - Use Ctrl+down arrow to scroll - + + Use Ctrl+down arrow to scroll + - - ::NỘI SUY + + ::NỘI SUY -Ryan Lerch, ryanlerch at gmail dot com - - + + + Tài liệu này hướng dẫn bạn cách dùng phần mở rá»™ng Ná»™i suy cá»§a Inkscape - - Giá»›i thiệu + + Giá»›i thiệu - - + + Ná»™i suy tức là tạo ra má»™t phép ná»™i suy tuyến tính giữa 2 hoặc nhiá»u đưá»ng nét. Nói cách khác, phép ná»™i suy “lấp chá»— trống†giữa các đưá»ng nét và chuyển dạng chúng tương ứng vá»›i số bước được cho. - - + + - To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. + To use the Interpolate extension, select the paths that you wish to transform, and choose Extensions > Generate From Path > Interpolate from the menu. - - + + - Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. + Before invoking the extension, the objects that you are going to transform need to be paths. This is done by selecting the object and using Path > Object to Path or Shift+Ctrl+C. If your objects are not paths, the extension will do nothing. - - Interpolation between two identical paths + + Interpolation between two identical paths - - + + The simplest use of the Interpolate extension is to interpolate between two paths that are identical. When the extension is called, the result is that the space between the two paths is filled with duplicates of the original paths. The number of steps defines how many of these duplicates are placed. - - + + Ví dụ, lấy 2 đưá»ng nét sau: - - - + + + - - + + Now, select the two paths, and run the Interpolate extension with the settings shown in the following image. - - - - - - - - - - + + + + + + + + + + - Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n + Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n - - + + As can be seen from the above result, the space between the two circle-shaped paths has been filled with 6 (the number of interpolation steps) other circle-shaped paths. Also note that the extension groups these shapes together. - - Ná»™i suy giữa 2 đưá»ng nét khác biệt + + Ná»™i suy giữa 2 đưá»ng nét khác biệt - - + + Khi áp dụng hiệu ứng Ná»™i suy lên 2 đưá»ng nét khác biệt, Inkscape tạo các đưá»ng nét ná»™i suy biến đổi từ hình dạng nét thứ nhất đến nét còn lại. Kết quả là bạn có nhiá»u nét có hình dạng biến đổi từ nét này đến nét kia, và tham số Bước ná»™i suy Ä‘iá»u chỉnh mức độ biến đổi giữa 2 nét liên tiếp. - - + + Ví dụ, lấy 2 đưá»ng nét sau: - - - + + + - - + + Now, select the two paths, and run the Interpolate extension. The result should be like this: - - - - - - - - - + + + + + + + + + - - Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n + + Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n - - + + Như trên, khoảng cách giữa đưá»ng nét hình tròn và đưá»ng nét hình tam giác đã được lấp đầy bằng 6 đưá»ng nét có hình dạng chuyển dần từ hình tròn vá» hình tam giác. - - + + When using the Interpolate extension on two different paths, the position of the starting node of each path is important. To find the starting node of a path, select the path, then choose the Node Tool so that the nodes appear and press TAB. The first node that is selected is the starting node of that path. - - + + Xem ảnh bên dưới, giống vá»›i ví dụ bên trên, nhưng khác nút được hiển thị. Nút màu xanh trong má»—i đưá»ng nét là nút đầu tiên. - - - - - - - - - - + + + + + + + + + + - - + + Ví dụ trên (lặp lại bên dưới) được thá»±c hiện vá»›i các nút này được đặt làm nút đầu tiên. - - - - - - - - - + + + + + + + + + - - Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n + + Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n - - + + Giá», hãy quan sát sá»± thay đổi trong kết quả cá»§a phép ná»™i suy khi đưá»ng nét hình tam giác được lật đối xứng, khiến cho nút đầu tiên nằm ở vị trí khác: - + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - Các phương pháp ná»™i suy + + Các phương pháp ná»™i suy - - + + One of the parameters of the Interpolate extension is the Interpolation Method. There are 2 interpolation methods implemented, and they differ in the way that they calculate the curves of the new shapes. The choices are either Interpolation Method 1 or 2. - - + + Trong ví dụ trên, ta dùng Phương pháp ná»™i suy 2, và kết quả là: - - - - - - - - - + + + + + + + + + - + - - + + Giá», hãy so sánh vá»›i kết quả cá»§a Phương thức Ná»™i suy 1: - - - - - - - - - - + + + + + + + + + + - - + + Sá»± khác biệt vá» mặt phương pháp tính toán giữa 2 phương thức nằm ngoài phạm vi cá»§a tài liệu này, nên bạn hãy thá»­ cả 2 phương thức, và dùng phương thức nào cho kết quả tốt nhất mà bạn muốn. - - MÅ© + + MÅ© - - + + Tham số Luỹ thừa Ä‘iá»u chỉnh khoảng cách giữa 2 bước cá»§a phép ná»™i suy. Luỹ thừa bằng 0 sẽ làm cho khoảng cách giữa 2 đưá»ng nét ná»™i suy là giống nhau. - - + + Äây là kết quả thu được khi tham số LÅ©y thừa bằng 0. - - - - - - - - - - + + + + + + + + + + - Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n + Luỹ thừa: 0.0Bước ná»™i suy: 6Phương pháp ná»™i suy: 2Nhân đôi đưá»ng nét cuối: không chá»nNá»™i suy kiểu dáng: không chá»n - - + + Còn đây là khi Luỹ thừa bằng 1: - - - - - - - - - - + + + + + + + + + + - - + + Luỹ thừa bằng 2: - - - - - - - - - - + + + + + + + + + + - - + + và Luỹ thừa bằng -1: - - - - - - - - - - + + + + + + + + + + - - + + When dealing with exponents in the Interpolate extension, the order that you select the objects is important. In the examples above, the star-shaped path on the left was selected first, and the hexagon-shaped path on the right was selected second. - - + + Xem kết quả cá»§a phép ná»™i suy khi chá»n nét bên phải trước. Luỹ thừa trong ví dụ này được đặt bằng 1: - - - - - - - - - - + + + + + + + + + + - - Nhân đôi đưá»ng nét cuối + + Nhân đôi đưá»ng nét cuối - - + + This parameter defines whether the group of paths that is generated by the extension includes a copy of the original paths that interpolate was applied on. - - Ná»™i suy kiểu dáng + + Ná»™i suy kiểu dáng - - + + This parameter is one of the neat functions of the interpolate extension. It tells the extension to attempt to change the style of the paths at each step. So if the start and end paths are different colors, the paths that are generated will incrementally change as well. - - + + Äây là 1 ví dụ khi chá»n Ná»™i suy Kiểu dáng áp dụng lên màu tô cá»§a đưá»ng nét: - - - - - - - - - - + + + + + + + + + + - - + + Ná»™i suy Kiểu dáng cÅ©ng có tác dụng đối vá»›i nét viá»n cá»§a đưá»ng nét: - - - - - - - - - - + + + + + + + + + + - - + + Tất nhiên, đưá»ng nét đầu và cuối không nhất thiết phải giống nhau: - - - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - Dùng Ná»™i suy để làm giả các chuyển sắc độc đáo + + Dùng Ná»™i suy để làm giả các chuyển sắc độc đáo - - + + It is not possible in Inkscape (yet) to create a gradient other than linear (straight line) or radial (round). However, it can be faked using the Interpolate extension and Interpolate Style. A simple example follows — draw two lines of different strokes: - - - + + + - - + + Và ná»™i suy giữa 2 đưá»ng này để tạo ra chuyển sắc bạn cần: - - - + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - Kết luận + + Kết luận - - + + As demonstrated above, the Inkscape Interpolate extension is a powerful tool. This tutorial covers the basics of this extension, but experimentation is the key to exploring interpolation further. - + - - - + + + @@ -576,19 +576,19 @@ Ryan Lerch, ryanlerch at gmail dot com - - - - - - - - - + + + + + + + + + - - Use Ctrl+up arrow to scroll - + + Use Ctrl+up arrow to scroll + diff --git a/share/tutorials/tutorial-interpolate.zh_TW.svg b/share/tutorials/tutorial-interpolate.zh_TW.svg index b696c5015..42bc8ceaa 100644 --- a/share/tutorials/tutorial-interpolate.zh_TW.svg +++ b/share/tutorials/tutorial-interpolate.zh_TW.svg @@ -51,59 +51,59 @@ 這篇文章說明如何使用 Inkscape çš„å…§æ’æ“´å……功能 - - 介紹 + + 介紹 - + å…§æ’æ˜¯åœ¨å…©å€‹æˆ–多個é¸å–路徑之間作線性內æ’。大致上來說就是在路徑的間隔填入æ±è¥¿ä¸¦ä¸”根據給定的階層數轉變它們。 - + é–‹å§‹ä½¿ç”¨å…§æ’æ“´å……功能,é¸å–你想è¦è½‰è®Šçš„路徑,並從é¸å–®ä¸­é¸æ“‡ 擴充功能 > 從路徑產生 > å…§æ’。 - + 調用此擴充功能å‰ï¼Œä½ å¿…é ˆå…ˆå°‡ç‰©ä»¶è½‰æ›æˆè·¯å¾‘。é¸å–物件然後使用 路徑 > 物件轉æˆè·¯å¾‘ 或 Shift+Ctrl+Cã€‚å¦‚æžœä½ çš„ç‰©ä»¶ä¸æ˜¯è·¯å¾‘,那麼執行內æ’䏿œƒæœ‰ä»»ä½•作用。 - - 兩個相åŒè·¯å¾‘çš„å…§æ’ + + 兩個相åŒè·¯å¾‘çš„å…§æ’ - + å…§æ’特效最簡單的用法是在兩個完全相åŒçš„è·¯å¾‘ä¹‹é–“åŸ·è¡Œå…§æ’æ“´å……功能。當呼å«é€™å€‹ç‰¹æ•ˆæ™‚ï¼Œå…¶çµæžœä¾¿æ˜¯ä»¥æ•¸å€‹åŽŸå§‹ç‰©ä»¶çš„å†è£½ç‰©ä»¶å¡«å…¥é€™å…©å€‹è·¯å¾‘之間的空間。階層數會決定放置多少個複製物件。 - + ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰å…©å€‹è·¯å¾‘: - + - + ç¾åœ¨ï¼Œé¸å–這兩個路徑,然後以下é¢åœ–ç‰‡è£¡çš„è¨­å®šå€¼ä¾†åŸ·è¡Œå…§æ’æ“´å……功能。 - + @@ -116,42 +116,42 @@ 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - + 如åŒä¸Šåœ–ä¸­æ‰€è¦‹åŸ·è¡Œå¾Œçš„çµæžœï¼Œå…©çš„圓形路徑之間的地方被填入 6 個 (å…§æ’階層數) å…¶ä»–çš„åœ“å½¢è·¯å¾‘ã€‚ä¸¦æ³¨æ„æ­¤æ“´å……功能會把這些形狀群組在一起。 - - å…©å€‹ç›¸ç•°è·¯å¾‘çš„å…§æ’ + + å…©å€‹ç›¸ç•°è·¯å¾‘çš„å…§æ’ - + ç•¶å…§æ’用在兩個ä¸åŒçš„è·¯å¾‘ä¸Šæ™‚ï¼Œç¨‹å¼æ‰€æ’入的路徑之形狀會從其中一個漸漸變為å¦ä¸€å€‹ã€‚你會ç²å¾—路徑之間連續的形狀轉變效果,形狀轉變的數é‡ä»æ˜¯ç”±å…§æ’階層數決定。 - + ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰å…©å€‹è·¯å¾‘: - + - + ç¾åœ¨ï¼Œé¸å–é€™å…©å€‹è·¯å¾‘ï¼Œä¸¦åŸ·è¡Œå…§æ’æ“´å……åŠŸèƒ½ã€‚åŸ·è¡Œå¾Œçš„çµæžœå¦‚䏋颿‰€ç¤ºï¼š - + @@ -164,28 +164,28 @@ 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - + å¦‚ä¸Šåœ–ä¸­çœ‹åˆ°çš„çµæžœï¼Œåœ“形路徑和三角形路徑之間的地方被填入 6 個路徑,且路徑的形狀從圓形漸漸轉變æˆä¸‰è§’形。 - + ç•¶å…§æ’æ“´å……功能用於兩個相異的路徑時,æ¯å€‹è·¯å¾‘起始節點的ä½ç½®å°±å¾ˆé‡è¦ã€‚è¦æŸ¥è©¢è·¯å¾‘的起始節點,先é¸å–è·¯å¾‘ï¼Œç„¶å¾Œé¸æ“‡ç¯€é»žå·¥å…·æœƒå‡ºç¾è·¯å¾‘ç¯€é»žï¼Œå†æŒ‰ TAB éµã€‚第一個被é¸å–的就是路徑的起始節點。 - + 看下é¢çš„圖åƒï¼Œé™¤äº†é¡¯ç¤ºç¯€é»žä»¥å¤–其他部份和上一個範例完全相åŒã€‚æ¯å€‹è·¯å¾‘上的綠色節點便是起始節點。 - + @@ -196,14 +196,14 @@ - + 上一個範例 (下圖所示) æ–¼æ¯å€‹è·¯å¾‘上標示起始節點。 - + @@ -216,14 +216,14 @@ 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - + ç¾åœ¨ï¼Œç¿»è½‰ä¸‰è§’形路徑使得起始節點ä½ç½®ä¸åŒï¼Œæ³¨æ„å…§æ’æ•ˆæžœç”¢ç”Ÿçš„變化: - + @@ -236,7 +236,7 @@ - + @@ -248,24 +248,24 @@ - - æ’å…¥æ–¹å¼ + + æ’å…¥æ–¹å¼ - + æ’å…¥æ–¹å¼æ˜¯å…§æ’æ“´å……åŠŸèƒ½çš„å…¶ä¸­ä¸€å€‹åƒæ•¸ã€‚有 2 種ä¸åŒçš„æ’å…¥æ–¹å¼ï¼Œå…©è€…的差別在於用ä¸åŒçš„æ–¹å¼ä¾†è¨ˆç®—新形狀的曲線。æ’å…¥æ–¹å¼ 1 或 2 åªèƒ½äºŒé¸ä¸€ã€‚ - + 在上é¢çš„範例中,我們使用æ’å…¥æ–¹å¼ 2ï¼Œçµæžœå¦‚下: - + @@ -277,14 +277,14 @@ - + ç¾åœ¨å’Œæ’å…¥æ–¹å¼ 1 作比較: - + @@ -296,31 +296,31 @@ - + è‡³æ–¼å…©è€…æ•¸å€¼è¨ˆç®—çš„æ–¹å¼æœ‰ä½•差別ä¸åœ¨æœ¬æ–‡è¬›è¿°çš„範åœï¼Œæ‰€ä»¥ç›´æŽ¥è©¦çœ‹çœ‹é€™å…©ç¨®æ–¹å¼ï¼Œç„¶å¾Œé¸ç”¨ç”¢ç”Ÿæ•ˆæžœæœ€æŽ¥è¿‘你想è¦çš„那一種。 - - 指數 + + 指數 - + æŒ‡æ•¸åƒæ•¸å¯æŽ§åˆ¶æ’入路徑之間的間隔è·é›¢ã€‚指數為 0 會使複本之間的間隔è·é›¢å¹³å‡åˆ†é…。 - + 䏋颿˜¯å¦ä¸€å€‹ç¯„例且指數為 0 的效果。 - + @@ -333,14 +333,14 @@ 指數: 0.0å…§æ’階層數: 6æ’入方å¼: 2å†è£½çµ‚點路徑: æœªå‹¾é¸æ’入樣å¼: æœªå‹¾é¸ - + åŒæ¨£çš„範例但指數為 1: - + @@ -352,14 +352,14 @@ - + 指數為 2: - + @@ -371,14 +371,14 @@ - + 指數為 -1: - + @@ -390,21 +390,21 @@ - + ç•¶å…§æ’æ“´å……åŠŸèƒ½è™•ç†æŒ‡æ•¸æ™‚,é¸å–ç‰©ä»¶çš„é †åºæ˜¯å¾ˆé‡è¦çš„。下é¢çš„範例中,先é¸å–左邊的星形路徑,å†é¸å–å³é‚Šçš„六邊形路徑。 - + å†çœ‹çœ‹è‹¥å…ˆé¸å³é‚Šè·¯å¾‘æƒ…å½¢ä¸‹çš„çµæžœã€‚這範例的指數設定為 1: - + @@ -416,34 +416,34 @@ - - å†è£½çµ‚點路徑 + + å†è£½çµ‚點路徑 - + é€™å€‹åƒæ•¸æ±ºå®šå…§æ’擴充功能生æˆçš„路徑群組是å¦åŒ…å«åŽŸå§‹è·¯å¾‘çš„è¤‡æœ¬ã€‚ - - æ’å…¥æ¨£å¼ + + æ’å…¥æ¨£å¼ - + é€™å€‹åƒæ•¸æ˜¯å…§æ’擴充功能美妙功能的其中一項。æ’å…¥æ¨£å¼æœƒä½¿æ“´å……功能於æ¯éšŽå±¤éƒ½è©¦è‘—改變路徑的樣å¼ã€‚因此如果起點路徑的é¡è‰²å’Œçµ‚點路徑ä¸åŒï¼Œç”Ÿæˆçš„è·¯å¾‘æœƒé€æ¼¸è®Šæˆä¸€æ¨£ã€‚ - + 下é¢çš„範例中æ’入樣å¼åŠŸèƒ½è¢«ç”¨æ–¼è·¯å¾‘çš„å¡«è‰²ä¸Šï¼š - + @@ -455,14 +455,14 @@ - + æ’入樣å¼å°è·¯å¾‘的邊框é¡è‰²ä¹Ÿæœ‰ä½œç”¨ï¼š - + @@ -474,14 +474,14 @@ - + 當然,起點和終點的路徑ä¸ä¸€å®šè¦ç›¸åŒï¼š - + @@ -503,28 +503,28 @@ - - 用內æ’仿造ä¸è¦å‰‡æ¼¸å±¤ + + 用內æ’仿造ä¸è¦å‰‡æ¼¸å±¤ - + Inkscape 還無法建立線性 (ç›´ç·š) 或放射狀 (圓形) 以外的漸層。ä¸éŽï¼Œå¯ä»¥ç”¨å…§æ’擴充功能和æ’入樣å¼ä¾†ä»¿é€ å…¶ä»–種類的漸層。一個簡單的例å­å¦‚下 — ç•«å…©æ¢ä¸åŒé‚Šæ¡†é¡è‰²çš„ç·šæ¢ï¼š - + - + 然後å°é€™å…©æ¢ç·šæ®µä½¿ç”¨å…§æ’來建立漸層效果: - + @@ -546,17 +546,17 @@ - - çµè«– + + çµè«– - + 如åŒä¸Šé¢å…§å®¹æ‰€å‘ˆç¾ï¼ŒInkscape çš„å…§æ’æ“´å……功能是éžå¸¸å¼·å¤§çš„å·¥å…·ã€‚é€™ç¯‡æ•™å­¸è¬›è¿°äº†å…§æ’æ“´å……功能的基本用法,但經éŽå¯¦é©—和練習æ‰èƒ½å®Œå…¨æŽŒæ¡å…§æ’的特性。 - + diff --git a/share/tutorials/tutorial-shapes.be.svg b/share/tutorials/tutorial-shapes.be.svg index 243d08e0f..770355ced 100644 --- a/share/tutorials/tutorial-shapes.be.svg +++ b/share/tutorials/tutorial-shapes.be.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - ЭліпÑÑ‹ + + ЭліпÑÑ‹ @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Зоркі + + Зоркі @@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow. - - Сьпіралі + + Сьпіралі @@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow. - - Ð’Ñ‹Ñновы + + Ð’Ñ‹Ñновы diff --git a/share/tutorials/tutorial-shapes.de.svg b/share/tutorials/tutorial-shapes.de.svg index 90de85b93..5ba8912e7 100644 --- a/share/tutorials/tutorial-shapes.de.svg +++ b/share/tutorials/tutorial-shapes.de.svg @@ -473,8 +473,8 @@ - - Ellipsen + + Ellipsen @@ -622,8 +622,8 @@ - - Sterne + + Sterne @@ -909,8 +909,8 @@ - - Spiralen + + Spiralen @@ -1049,8 +1049,8 @@ - - Fazit + + Fazit diff --git a/share/tutorials/tutorial-shapes.el.svg b/share/tutorials/tutorial-shapes.el.svg index a14d0a728..4102d4aa2 100644 --- a/share/tutorials/tutorial-shapes.el.svg +++ b/share/tutorials/tutorial-shapes.el.svg @@ -473,8 +473,8 @@ - - Ελλείψεις + + Ελλείψεις @@ -622,8 +622,8 @@ - - ΑστέÏια + + ΑστέÏια @@ -909,8 +909,8 @@ - - ΣπείÏες + + ΣπείÏες @@ -1049,8 +1049,8 @@ - - ΣυμπέÏασμα + + ΣυμπέÏασμα diff --git a/share/tutorials/tutorial-shapes.gl.svg b/share/tutorials/tutorial-shapes.gl.svg index 9faba9d89..d9c703cfc 100644 --- a/share/tutorials/tutorial-shapes.gl.svg +++ b/share/tutorials/tutorial-shapes.gl.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - Elipses + + Elipses @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Estrelas + + Estrelas @@ -945,8 +945,8 @@ from -0.2 to 0.2: - - Espirais + + Espirais @@ -1085,8 +1085,8 @@ from -0.2 to 0.2: - - Conclusión + + Conclusión diff --git a/share/tutorials/tutorial-shapes.hu.svg b/share/tutorials/tutorial-shapes.hu.svg index dcc74b512..cecdec123 100644 --- a/share/tutorials/tutorial-shapes.hu.svg +++ b/share/tutorials/tutorial-shapes.hu.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - Ellipszisek + + Ellipszisek @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Csillagok + + Csillagok @@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow. - - Spirálok + + Spirálok @@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow. - - Zárszó + + Zárszó diff --git a/share/tutorials/tutorial-shapes.id.svg b/share/tutorials/tutorial-shapes.id.svg index bb6bb6886..f1417f617 100644 --- a/share/tutorials/tutorial-shapes.id.svg +++ b/share/tutorials/tutorial-shapes.id.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - Elips + + Elips @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Bintang + + Bintang @@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow. - - Spiral + + Spiral @@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow. - - Akhir + + Akhir diff --git a/share/tutorials/tutorial-shapes.ja.svg b/share/tutorials/tutorial-shapes.ja.svg index 93fb61548..fed5f2c65 100644 --- a/share/tutorials/tutorial-shapes.ja.svg +++ b/share/tutorials/tutorial-shapes.ja.svg @@ -51,21 +51,21 @@ ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ 4 ã¤ã®ã‚·ã‚§ã‚¤ãƒ—ツール (矩形ã€å††/å¼§ã€æ˜Ÿå½¢ã€ã‚‰ã›ã‚“) ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚Inkscape ã®ã‚·ã‚§ã‚¤ãƒ—ã§ä½•ãŒã§ãã‚‹ã‹ã€ãã—ã¦ã©ã®ã‚ˆã†ãªå ´åˆã«ã©ã®ã‚ˆã†ã«ä½¿ç”¨ã™ã‚‹ã‹ã‚’示ã—ã¾ã™ã€‚ - + Ctrl+矢å°ã€ マウスホイールã€ã‚‚ã—ã㯠中央ボタンを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã‚’使ã„ページを下ã«ã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«ã—ã¦ãã ã•ã„。オブジェクトã®ä½œæˆã€é¸æŠžã€å¤‰å½¢ã®åŸºæœ¬ã«ã¤ã„ã¦ã¯ã€Help > ヘルプ > ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ« ã‹ã‚‰åŸºæœ¬ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’ã”覧ãã ã•ã„。 - + Inkscape ã«ã¯å¤šç”¨é€”ã® 4 ã¤ã®ã‚·ã‚§ã‚¤ãƒ—ツールãŒã‚りã€ã©ã®ãƒ„ールã§ã‚‚シェイプã®ä½œæˆã¨ç·¨é›†ãŒè¡Œãˆã¾ã™ã€‚シェイプã¯ã€ãƒ‰ãƒ©ãƒƒã‚°å¯èƒ½ãªãƒãƒ³ãƒ‰ãƒ«ã¨ã€æ•°å€¤ãƒ‘ラメーターã«ã‚ˆã£ã¦å½¢çŠ¶ãŒæ±ºå®šã•れã€å„シェイプã«å›ºæœ‰ã®æ–¹æ³•ã§å¤‰æ›´ã‚’加ãˆã‚‹ã“ã¨ãŒå¯èƒ½ãªã‚ªãƒ–ジェクトã§ã™ã€‚ - + @@ -76,17 +76,17 @@ path, but it's often more interesting and useful. You can always convert a to a path (Shift+Ctrl+C), but the reverse conversion is not possible. - + シェイプツールã«ã¯ã€çŸ©å½¢ã€å††/å¼§ã€æ˜Ÿå½¢ã€ãŠã‚ˆã³ã‚‰ã›ã‚“ãŒã‚りã¾ã™ã€‚ã¾ãšã¯ã˜ã‚ã«ã€ä¸€èˆ¬çš„ã«ã©ã†å‹•作ã™ã‚‹ã‹è¦‹ã¦ã¿ã¾ã—ょã†ã€‚ãれã‹ã‚‰å„シェイプã«ã¤ã„ã¦è¦‹ã¦ã„ãã¾ã™ã€‚ - - 一般的ãªç”¨æ³• + + 一般的ãªç”¨æ³• - + @@ -98,28 +98,28 @@ marks (depending on the tools), so you can immediately edit what you created by dragging these handles. - + 4 種ã®ã‚·ã‚§ã‚¤ãƒ—ã¯ã™ã¹ã¦ã€ãƒŽãƒ¼ãƒ‰ãƒ„ールã¨åŒã˜ãシェイプツールã§ãƒãƒ³ãƒ‰ãƒ«ã‚’表示ã—ã¾ã™ (F2)。カーソルをãƒãƒ³ãƒ‰ãƒ«ã®ä¸Šã«ç½®ãã¨ã€ã•ã¾ã–ã¾ãªä¿®é£¾ã‚­ãƒ¼ã‚’押ã—ãŸå ´åˆã«ãƒãƒ³ãƒ‰ãƒ«ãŒãƒ‰ãƒ©ãƒƒã‚°ã‚„クリックã§ã©ã†å¤‰åŒ–ã™ã‚‹ã‹ãŒã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒãƒ¼ã«è¡¨ç¤ºã•れã¾ã™ã€‚ - + ã¾ãŸã€å„シェイプツールã¯ãƒ„ールコントロールãƒãƒ¼ (キャンãƒã‚¹ã®ä¸Š) ã«ã€ãƒ‘ラメーターを表示ã—ã¾ã™ã€‚通常ãã“ã«ã¯ã„ãã¤ã‹ã®æ•°å€¤å…¥åŠ›åŸŸã¨ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã«æˆ»ã™ä¸€ã¤ã®ãƒœã‚¿ãƒ³ãŒã‚りã¾ã™ã€‚ç¾åœ¨ã®ãƒ„ールタイプã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã™ã‚‹ã¨ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã®å€¤ã‚’変更ã™ã‚‹ã“ã¨ã§é¸æŠžã—ãŸã‚ªãƒ–ジェクトãŒå¤‰å½¢ã—ã¾ã™ã€‚ - + ツールコントロールã«åŠ ãˆã‚‰ã‚ŒãŸå¤‰æ›´ã¯è¨˜æ†¶ã•れã€ãã®ãƒ„ールを使ã£ã¦æ¬¡ã®ã‚ªãƒ–ジェクトをæãã¨ãã«ä½¿ç”¨ã•れã¾ã™ã€‚例ãˆã°ã€æ˜Ÿå½¢ã®é ‚ç‚¹ã®æ•°ã‚’変更ã—ãŸã‚ã¨æ–°è¦ã«ä½œæˆã—ãŸæ˜Ÿå½¢ã®é ‚点数ã¯å‰ã«æã„ãŸæ˜Ÿã®é ‚点数ã«ãªã‚Šã¾ã™ã€‚ã•らã«ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã¦ãƒ„ールコントロールãƒãƒ¼ã«å€¤ã‚’åæ˜ ã—ãŸã ã‘ã§ã‚‚ã€æ–°ã—ã„æ˜Ÿå½¢ã«ã¯ãã®å€¤ãŒé©ç”¨ã•れã¾ã™ã€‚ - + @@ -129,270 +129,270 @@ on it. Ctrl+click (select in group) and (select under) also work as they do in Selector tool. Esc deselects. - - 矩形 + + 矩形 - + 矩形ã¯ç°¡å˜ã§ã™ãŒãŠãらããƒ‡ã‚¶ã‚¤ãƒ³ã‚„ã‚¤ãƒ©ã‚¹ãƒˆåˆ¶ä½œã§æœ€ã‚‚一般的ãªã‚·ã‚§ã‚¤ãƒ—ã§ã—ょã†ã€‚Inkscape ã¯çŸ©å½¢ã®ä½œæˆã¨ç·¨é›†ã‚’ã§ãã‚‹é™ã‚Šç°¡å˜ã‹ã¤ä¾¿åˆ©ã«è¡Œãˆã‚‹ã‚ˆã†ã«è¨­è¨ˆã•れã¦ã„ã¾ã™ã€‚ - + F4 を押ã™ã‹ãƒ„ールãƒãƒ¼ã®ãƒœã‚¿ãƒ³ã‚’押ã—ã¦çŸ©å½¢ãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆã¾ã™ã€‚æ–°ã—ã矩形をã“ã®é’ã„çŸ©å½¢ã®æ¨ªã«æã„ã¦ã¿ã¾ã—ょã†: - ã“ã“ã«æã - - + ã“ã“ã«æã + + ãã—ã¦ã€çŸ©å½¢ãƒ„ールを抜ã‘ã‚‹ã“ã¨ãªãã€ã‚¯ãƒªãƒƒã‚¯ã—ã¦ä»–ã®çŸ©å½¢ã«é¸æŠžã‚’切り替ãˆã¦ãã ã•ã„。 - + 矩形æç”»ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã«ã¯ä»¥ä¸‹ã®ã‚‚ã®ãŒã‚りã¾ã™: - - + + Ctrl を押ã—ãªãŒã‚‰ã§ã€æ•´æ•°ã®ç¸¦æ¨ªæ¯” (2:3ã€3:1 ãªã©) ã®çŸ©å½¢ã‚’æç”»ã™ã‚‹ã€‚ - - + + Shift を押ã—ãªãŒã‚‰ã§ã€å§‹ç‚¹ã‚’中心点ã¨ã—ã¦æç”»ã™ã‚‹ã€‚ - + 見ã¦ã®ã¨ãŠã‚Šé¸æŠžã•れãŸçŸ©å½¢ (ã§ããŸã¦ã®çŸ©å½¢ã¯å¸¸ã«é¸æŠžçŠ¶æ…‹ã«ã‚りã¾ã™) ã«ã¯ 3 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ãŒè§’ã«ã‚りã¾ã™ã€‚実際ã«ã¯ 4 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ãŒã‚ã‚‹ã®ã§ã™ãŒã€ãã®ã†ã¡ã® 2 㤠(å³ä¸Š) ã¯çŸ©å½¢ã®è§’ãŒä¸¸ã¾ã£ã¦ã„ãªã„ã¨ãã«ã¯é‡ãªã£ã¦ã„ã¾ã™ã€‚ã“ã® 2 ã¤ã¯ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ã€ä»–ã® 2 ã¤ã¯ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã§ã™ã€‚ - + ã¯ã˜ã‚ã«ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ã‚’見ã¦ã¿ã¾ã—ょã†ã€‚ãã®ã†ã¡ã®ä¸€ã¤ã‚’ã¤ã‹ã‚“ã§å¼•ã下ã’ã¦ã¿ã¦ãã ã•ã„。矩形㮠4 ã¤ã®è§’ãŒä¸¸ããªã‚Šã€è§’ã®å…ƒã®å ´æ‰€ã« 2 ã¤ç›®ã®ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ãŒè¦‹ãˆãŸã¯ãšã§ã™ã€‚円状ã«ä¸¸ã‚ãŸã„ã®ã§ã‚れã°ã“れã ã‘ã§äº‹è¶³ã‚Šã¾ã™ã€‚ã‚‚ã—è§’ã®ä¸€æ–¹ã®è¾ºå´ã‚’ã‚‚ã†ä¸€æ–¹ã‚ˆã‚Šä¸¸ã‚ãŸã„ã®ã§ã‚れã°ã‚‚ã†ä¸€æ–¹ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’å·¦ã«å‹•ã‹ã™ã“ã¨ã§è¡Œãˆã¾ã™ã€‚ - + 最åˆã® 2 ã¤ã¯è§’を円状ã«ä¸¸ã‚ãŸçŸ©å½¢ã€ä»–ã® 2 ã¤ã¯è§’を楕円状ã«ä¸¸ã‚ãŸçŸ©å½¢ã§ã™: - 角を楕円状ã«ä¸¸ã‚ãŸçŸ©å½¢ - 角を円状ã«ä¸¸ã‚ãŸçŸ©å½¢ - - - - - + 角を楕円状ã«ä¸¸ã‚ãŸçŸ©å½¢ + 角を円状ã«ä¸¸ã‚ãŸçŸ©å½¢ + + + + + çŸ©å½¢ã‚’é¸æŠžã—ã¦ã€çŸ©å½¢ãƒ„ールã®ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ã«ã¤ã„ã¦ã‚‚ã†å°‘ã—ã¿ã¦ã¿ã¾ã—ょã†ã€‚ - + ã—ã°ã—ã°ã€è§’ã‚’æŒã¤ã‚·ã‚§ã‚¤ãƒ—ã®ä¸¸ã‚åŠå¾„ã¨å½¢çжã¯ä½œå“全体ã«ã‚ãŸã‚Šä¸€å®šã§ã‚ã‚‹ã“ã¨ãŒå¿…è¦ã¨ã•れã¾ã™ã€‚矩形ã®å¤§ãã•ãŒç•°ãªã£ã¦ã„ã¦ã‚‚ (色々ãªå¤§ãã•ã®è§’を丸ã‚ãŸç®±ã§æã‹ã‚ŒãŸå›³ã‚’考ãˆã¦ã¿ã¦ãã ã•ã„) ã“れã¯å¿…è¦ãªã“ã¨ã§ã™ã€‚Inkscape ã§ã“れを実ç¾ã™ã‚‹ã®ã¯ç°¡å˜ã§ã™ã€‚é¸æŠžãƒ„ãƒ¼ãƒ«ã«åˆ‡ã‚Šæ›¿ãˆã¦ãã ã•ã„。ツールコントロールãƒãƒ¼ã®å³å´ã« 4 ã¤ã®ãƒˆã‚°ãƒ«ãƒœã‚¿ãƒ³ãŒã‚りã€ãã®å·¦ã‹ã‚‰ 2 番目ã«åŒå¿ƒã®ä¸¸ã‚ãŸè§’ãŒè¡¨ç¤ºã•れã¦ã„ã¾ã™ã€‚ã“ã®ãƒœã‚¿ãƒ³ã§ã€ä¸¸ã‚ãŸè§’ã‚’çŸ©å½¢ãŒæ‹¡å¤§ç¸®å°ã•れãŸã¨ãã«ä¸¸ã‚も拡大縮å°ã™ã‚‹ã‹ã‚’制御ã—ã¾ã™ã€‚ - + 例ãˆã°ã€ã“ã“ã«ã‚ªãƒªã‚¸ãƒŠãƒ«ã®èµ¤ã„矩形ã¨ã€â€œçŸ©å½¢ã®ä¸¸ã‚られãŸè§’を拡大縮å°â€ãƒœã‚¿ãƒ³ã‚’オフã«ã—ã¦è¤‡è£½ã•ã‚Œã€æ‹¡å¤§ç¸®å°ã‚’掛ã‘ãŸã„ãã¤ã‹ã®çŸ©å½¢ãŒã‚りã¾ã™: - 角を丸ã‚ãŸçŸ©å½¢ã®æ‹¡å¤§ç¸®å°"矩形ã®ä¸¸ã‚られãŸè§’を拡大縮å°" ãŒã‚ªãƒ•ã®å ´åˆ - - - - - - - - - + 角を丸ã‚ãŸçŸ©å½¢ã®æ‹¡å¤§ç¸®å°"矩形ã®ä¸¸ã‚られãŸè§’を拡大縮å°" ãŒã‚ªãƒ•ã®å ´åˆ + + + + + + + + + å³ä¸Šã§ã™ã¹ã¦ã®ä¸¸ã‚ãŸè§’ãŒæ­£ç¢ºã«ä¸€è‡´ã—ã¦ã„ã¦ã€çŸ©å½¢ã®è§’ã®å½¢ãŒç­‰ã—ã„ã®ã‚’確èªã—ã¦ãã ã•ã„。ã™ã¹ã¦ã®ç ´ç·šã§æã‹ã‚ŒãŸçŸ©å½¢ã¯å…ƒã®èµ¤ã„矩形ã‹ã‚‰æ´¾ç”Ÿã—ãŸã‚‚ã®ã§ã€é¸æŠžãƒ„ãƒ¼ãƒ«ã§æ‹¡å¤§ç¸®å°ã ã‘を掛ã‘ã¦ã‚りã€ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ã§ã®èª¿æ•´ã¯è¡Œã£ã¦ã„ã¾ã›ã‚“。 - + 比較ã®ãŸã‚ã«ã€åŒã˜ç”»åƒã‚’“矩形ã®ä¸¸ã‚られãŸè§’を拡大縮å°â€ãƒœã‚¿ãƒ³ã‚’オンã«ã—ã¦ä½œæˆã—ãŸã®ãŒä¸‹ã®ä¾‹ã§ã™: - 角を丸ã‚ãŸçŸ©å½¢ã®æ‹¡å¤§ç¸®å°"矩形ã®ä¸¸ã‚られãŸè§’を拡大縮å°" ãŒã‚ªãƒ³ã®å ´åˆ - - - - - - - - - + 角を丸ã‚ãŸçŸ©å½¢ã®æ‹¡å¤§ç¸®å°"矩形ã®ä¸¸ã‚られãŸè§’を拡大縮å°" ãŒã‚ªãƒ³ã®å ´åˆ + + + + + + + + + 丸ã‚ãŸè§’ã¯ãã®çŸ©å½¢ã¨åŒã˜ãらã„オリジナルã‹ã‚‰å¤‰ã‚ã£ã¦ãŠã‚Šã€å³ä¸Šã®è§’ã§ã‚‚ã‚ãšã‹ãªä¸€è‡´ã‚‚見られã¾ã›ã‚“ (ズームインã—ã¦ç¢ºèªã—ã¦ãã ã•ã„)。ã“れã¯ã€å…ƒã®çŸ©å½¢ã‚’パスã«å¤‰æ› (Ctrl+Shift+C) ã—ã¦ã€ãれをパスã¨ã—ã¦æ‹¡å¤§ç¸®å°ã—ãŸå ´åˆã¨åŒã˜ (視覚的) çµæžœã«ãªã£ã¦ã„ã¾ã™ã€‚ - + 矩形ã®ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã«ã¯ä»¥ä¸‹ã®ã‚‚ã®ãŒã‚りã¾ã™: - - + + Ctrl を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã§ã€ã‚‚ã†ä¸€æ–¹ã®åŠå¾„ã‚’ç­‰ã—ãã™ã‚‹ (円状ã®ä¸¸ã‚)。 - - + + Ctrl+クリック ã§ãƒ‰ãƒ©ãƒƒã‚°ãªã—ã§ã‚‚ã†ä¸€æ–¹ã®åŠå¾„ã‚’åŒã˜ã«ã™ã‚‹ã€‚ - - + + Shift+クリック ã§ä¸¸ã‚ã‚’å–り除ã。 - + 矩形ツールã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã«ã¯æ°´å¹³ (Rx) ã¨åž‚ç›´ (Ry) ã®ä¸¸ã‚åŠå¾„ãŒè¡¨ç¤ºã•れã¦ãŠã‚Šã€ã©ã®å˜ä½ã‚’使ã£ã¦ã‚‚正確ã«åŠå¾„を設定ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。角をシャープ㫠ボタンã¯é¸æŠžã—ãŸçŸ©å½¢ã‹ã‚‰ä¸¸ã‚ã‚’å–り除ãã¾ã™ã€‚ - + コントロールを使ã†ã“ã¨ã®é‡è¦ãªç‚¹ã¯ã€ãŸãã•ã‚“ã®çŸ©å½¢ã«å¯¾ã—ã¦ä¸€åº¦ã«åŠ¹åŠ›ã‚’åŠã¼ã™ã“ã¨ãŒã§ãã‚‹ã“ã¨ã§ã™ã€‚例ãˆã°ã€ã‚‚ã—レイヤー内ã®ã™ã¹ã¦ã®çŸ©å½¢ã‚’変更ã—ãŸã„ãªã‚‰ã€Ctrl+A (ã™ã¹ã¦ã‚’é¸æŠž) ã¨ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã®ãƒ‘ラメーターを必è¦ãªå€¤ã«è¨­å®šã™ã‚‹ã ã‘ã§ã§ãã¾ã™ã€‚ã‚‚ã—ã€çŸ©å½¢ã§ãªã„オブジェクトãŒé¸æŠžã•れã¦ã„ãŸã¨ã—ã¦ã‚‚ãれらã¯ç„¡è¦–ã•れ矩形ã®ã¿ãŒå¤‰æ›´ã•れã¾ã™ã€‚ - + 今度ã¯ã€çŸ©å½¢ã®ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã‚’見ã¦ã¿ã¾ã—ょã†ã€‚ãªãœã“れãŒå¿…è¦ãªã®ã‹ä¸æ€è­°ã«æ€ã†ã‹ã‚‚ã—れã¾ã›ã‚“ã€é¸æŠžãƒ„ールã§çŸ©å½¢ã®ã‚µã‚¤ã‚ºã‚’変更ã™ã‚Œã°ã„ã„ã®ã§ã¯ãªã„ã‹? - + é¸æŠžãƒ„ãƒ¼ãƒ«ã®å•題点ã¯ã€æ°´å¹³ãŠã‚ˆã³åž‚ç›´ã®æ¦‚念ãŒå¸¸ã«ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆãƒšãƒ¼ã‚¸ã®æ°´å¹³ãŠã‚ˆã³åž‚ç›´æ–¹å‘ã§ã‚ã‚‹ã“ã¨ã§ã™ã€‚決ã¾ã‚Šã¨ã—ã¦ã€çŸ©å½¢ã®ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã¯ã€çŸ©å½¢ãŒå›žè»¢ã—ã¦ã‚‚歪んã§ã„ã¦ã‚‚ 矩形ã®è¾ºã«æ²¿ã£ã¦æ‹¡å¤§ç¸®å°ã‚’行ã„ã¾ã™ã€‚例ãˆã°ã€æœ€åˆã«é¸æŠžãƒ„ールã§ã‚µã‚¤ã‚ºå¤‰æ›´ã—ãŸçŸ©å½¢ã‚’次ã«çŸ©å½¢ãƒ„ールã®ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã§ã‚µã‚¤ã‚ºå¤‰æ›´ã—ã¦ã¿ã¦ãã ã•ã„: - - + + リサイズãƒãƒ³ãƒ‰ãƒ«ã¯ 2 ã¤ã‚ã‚‹ã®ã§ã€ã©ã®æ–¹å‘ã¸ã‚‚サイズ変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã—ã€è¾ºã«æ²¿ã£ã¦ç§»å‹•ã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚リサイズãƒãƒ³ãƒ‰ãƒ«ã¯å¸¸ã«ä¸¸ã‚åŠå¾„ã‚’ç¶­æŒã—ã¾ã™ã€‚ - + リサイズãƒãƒ³ãƒ‰ãƒ«ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™: - - + + Ctrl を押ã—ã¦ãƒ‰ãƒ©ãƒƒã‚°ã§ã€çŸ©å½¢ã®è¾ºã‚„対角線をスナップã™ã‚‹ã€‚è¨€ã„æ›ãˆã‚‹ã¨ã€Ctrl ã¯ã€çŸ©å½¢ã®å¹…ã€é«˜ã•ã®ã©ã¡ã‚‰ã‹ã€ã‚‚ã—ãã¯ç¸¦æ¨ªæ¯”ã‚’ä¿æŒã™ã‚‹ (繰り返ã—ã¾ã™ãŒã€å›žè»¢ã—ã¦ã„ã¦ã‚‚歪んã§ã„ã¦ã‚‚矩形ã®åº§æ¨™ç³»ã§)。 - + ã“ã“ã«ä¸Šå›³ã¨åŒã˜çŸ©å½¢ãŒã‚りã¾ã™ã€‚ç°è‰²ã®ç ´ç·šã¯ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ãŒ Ctrl を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã—ãŸã¨ãã«å¼µã‚Šä»˜ãæ–¹å‘を示ã—ã¦ã„ã¾ã™ (試ã—ã¦ã¿ã¦ãã ã•ã„): - + - - 矩形ã®ã‚¹ãƒŠãƒƒãƒ— — Ctrl を押ã—ãªãŒã‚‰ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ« - + + 矩形ã®ã‚¹ãƒŠãƒƒãƒ— — Ctrl を押ã—ãªãŒã‚‰ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ« + 傾ã‘ãŸã‚Šå›žè»¢ã—ãŸçŸ©å½¢ã‚’複製ã—リサイズãƒãƒ³ãƒ‰ãƒ«ã§ã‚µã‚¤ã‚ºã‚’変更ã—ã€3D ã®æ§‹å›³ã‚’ç°¡å˜ã«ä½œã‚‹ã“ã¨ãŒã§ãã¾ã™: - - - - - - - - - - - - - - - - - - - - - 3個ã®ã‚ªãƒªã‚¸ãƒŠãƒ«çŸ©å½¢ - 一部ãŒãƒãƒ³ãƒ‰ãƒ« (ã»ã¨ã‚“ã©ã®å ´åˆ Ctrl ã§) ã§è¤‡è£½ãŠã‚ˆã³ã‚µã‚¤ã‚ºå¤‰æ›´ã•れãŸçŸ©å½¢ - + + + + + + + + + + + + + + + + + + + + + 3個ã®ã‚ªãƒªã‚¸ãƒŠãƒ«çŸ©å½¢ + 一部ãŒãƒãƒ³ãƒ‰ãƒ« (ã»ã¨ã‚“ã©ã®å ´åˆ Ctrl ã§) ã§è¤‡è£½ãŠã‚ˆã³ã‚µã‚¤ã‚ºå¤‰æ›´ã•れãŸçŸ©å½¢ + @@ -463,135 +463,135 @@ on it. Ctrl+click (select in group) and - - - - - - - - - - - - - - - - - - - - - - - - 円/å¼§ + + + + + + + + + + + + + + + + + + + + + + + + 円/å¼§ - + 円/弧ツール (F5) ã¯æ¥•円や円を作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚楕円や円ã¯å¼§ã‚„扇形ã«ã‚‚変æ›ã§ãã¾ã™ã€‚æç”»ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯çŸ©å½¢ãƒ„ールã¨åŒã˜ã§ã™: - - + + Ctrl を押ã—ãªãŒã‚‰ã§ã€æ•´æ•°ã®ç¸¦æ¨ªæ¯” (2:3ã€3:1 ç­‰) ã§æ¥•円をæç”»ã™ã‚‹ã€‚ - - + + Shift を押ã—ãªãŒã‚‰ã§ã€å§‹ç‚¹ã‚’中心点ã¨ã—ã¦æç”»ã™ã‚‹ã€‚ - + 楕円ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’ã„ã˜ã£ã¦ã¿ã¾ã—ょã†ã€‚ã“ã®æ¥•å††ã‚’é¸æŠžã—ã¦ãã ã•ã„: - - + + ã“ã“ã§ã‚‚ 3 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ãŒã‚ã‚‹ã“ã¨ã«æ°—ãŒä»˜ã„ãŸã¨æ€ã„ã¾ã™ãŒã€å®Ÿã¯ 4 ã¤ã‚りã¾ã™ã€‚å³ã®ãƒãƒ³ãƒ‰ãƒ«ã¯æ¥•円を“開ãâ€ã“ã¨ã®ã§ãã‚‹ 2 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ãŒé‡ãªã£ã¦ã„ã¾ã™ã€‚å³ã«ã‚ã‚‹ãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã™ã‚‹ã¨ã‚‚ã†ä¸€ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ãŒä¸‹ã‹ã‚‰è¦‹ãˆã¾ã™ã€‚ã“れã§å¼§ã‚„扇形を作るã“ã¨ãŒã§ãã¾ã™: - - - - - - - - + + + + + + + + 扇形 (弧㨠2 ã¤ã®åŠå¾„ã‹ã‚‰ãªã‚‹) を作るã«ã¯æ¥•円ã®å¤–å´ã‚’ドラッグã—ã€å¼§ã‚’作るã«ã¯å†…å´ã‚’ドラッグã—ã¾ã™ã€‚上図ã®å·¦å´ã«ã¯ 4 ã¤ã®æ‰‡å½¢ã€å³å´ã«ã¯ï¼“ã¤ã®å¼§ãŒã‚りã¾ã™ã€‚å¼§ã¯é–‰ã˜ã¦ã„ãªã„シェイプã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。ã¤ã¾ã‚Šã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã¯æ¥•円ã«ãã£ã¦ã„ã¾ã™ãŒç«¯ç‚¹ã¯ã¤ãªãŒã£ã¦ã„ã¾ã›ã‚“。フィルを削除ã—ã¦ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã ã‘ã«ã™ã‚‹ã¨æ˜Žã‚‰ã‹ã«ãªã‚Šã¾ã™: - + 15 - 扇形 - å¼§ - - - - - - - - - - - - - - - - - - - - + 扇形 + å¼§ + + + + + + + + + + + + + + + + + + + + 左図ã«ã‚ã‚‹ã›ã¾ã„扇形ã¯ã€Ctrl を押ã—ã¦è§’度をスナップã™ã‚‹ã“ã¨ã§ç°¡å˜ã«ä½œã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚å¼§/扇形ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™: - - + + Ctrl を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã§ãƒãƒ³ãƒ‰ãƒ«ã¯ 15 度ã”ã¨ã«ã‚¹ãƒŠãƒƒãƒ—ã™ã‚‹ã€‚ - - + + Shift+クリック ã§æ¥•円全形ã«ãªã‚‹ (弧や扇形ã§ã¯ãªã)。 - + @@ -599,68 +599,68 @@ on it. Ctrl+click (select in group) and The snap angle can be changed in Inkscape Preferences (in Behavior > Steps). - + 楕円ã®ãã®ä»–ã® 2 ã¤ãƒãƒ³ãƒ‰ãƒ«ã¯ä¸­å¿ƒã‚’基準ã¨ã—ãŸã‚µã‚¤ã‚ºå¤‰æ›´ã«ä½¿ç”¨ã—ã¾ã™ã€‚ショートカットã¯çŸ©å½¢ã®ä¸¸ã‚ãƒãƒ³ãƒ‰ãƒ«ã«ä¼¼ã¦ã„ã¾ã™: - - + + Ctrl を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã§ã€å††ã«ãªã‚‹ (ã‚‚ã†ä¸€æ–¹ã®åŠå¾„ãŒç­‰ã—ããªã‚‹)。 - - + + Ctrl+クリック ã§ãƒ‰ãƒ©ãƒƒã‚°ã›ãšã«å††ã‚’作æˆã™ã‚‹ã€‚ - + ãã—ã¦ã€çŸ©å½¢ã®ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã®æ§˜ã«ã€æ¥•円ã®ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã‚‚楕円ã®é«˜ã•ã¨å¹…を楕円ã®åº§æ¨™ç³»ã§å¤‰æ›´ã—ã¾ã™ã€‚ã“れã¯å›žè»¢ã—ãŸã‚Šæ­ªã‚“ã ã‚Šã—ã¦ã„る楕円ã§ã‚‚ã€å›žè»¢ã‚„æ­ªã¿ã¯ãã®ã¾ã¾ã§å…ƒã®åº§æ¨™ç³»ã«æ²¿ã£ã¦ä¼¸å¼µã—ãŸã‚Šåœ§ç¸®ã—ãŸã‚Šã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ã“ã‚Œã‚‰ã®æ¥•円ã®ãƒªã‚µã‚¤ã‚ºãƒãƒ³ãƒ‰ãƒ«ã§ã‚µã‚¤ã‚ºå¤‰æ›´ã‚’試ã—ã¦ã¿ã¾ã—ょã†: - - - - - - - - 星形 + + + + + + + + 星形 - + 星形ã¯ã‚‚ã£ã¨ã‚‚複雑ã§åˆºæ¿€çš„㪠Inkscape ã®ã‚·ã‚§ã‚¤ãƒ—ã§ã™ã€‚ã‚‚ã—å‹äººã‚’ Inkscape ã§é©šã‹ã›ã‚‹ãªã‚‰ã€æ˜Ÿå½¢ãƒ„ールを使ã‚ã›ã¦ã¿ã¦ãã ã•ã„。ã“れã¯ã‚‚ã†é£½ãã®æ¥ãªã„é¢ç™½ã•ã€ã¾ã•ã«ä¸­æ¯’çš„! - + 星形ツール㯠2 ã¤ã®è‰¯ãä¼¼ãŸã€ã—ã‹ã—ç•°ãªã‚‹ç¨®é¡žã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã€æ˜Ÿå½¢ã¨å¤šè§’形を作æˆã—ã¾ã™ã€‚星形ã¯é ‚点ã®é•·ã•ã¨å½¢ã‚’決ã‚ã‚‹ 2 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’æŒã¡ã€å¤šè§’å½¢ã¯ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦å›žè»¢ã¨ã‚µã‚¤ã‚ºå¤‰æ›´ã‚’行ㆠ1 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’æŒã¡ã¾ã™: - + 星形 - + 多角形 - + @@ -672,412 +672,412 @@ Controls bar. The allowed range is from 3 (obviously) to 1024, but you shouldn&a large numbers (say, over 200) if your computer is slow. - + æ–°è¦ã«æ˜Ÿå½¢ã‚„多角形を作るã¨ãã¯ã€ - - + + Ctrl を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨è§’度ã®å¢—分㌠15 度ã«ã‚¹ãƒŠãƒƒãƒ—ã•れる。 - + 生æ¥ã€æ˜Ÿå½¢ã¯æ–­ç„¶é¢ç™½ã„シェイプã§ã™ (ã—ã°ã—ã°å¤šè§’å½¢ã®æ–¹ãŒã‚ˆã‚Šæœ‰ç”¨ã§ã™ãŒ)。星形ã®äºŒã¤ã®ãƒãƒ³ãƒ‰ãƒ«ã¯ã‚ãšã‹ã«ç•°ãªã‚‹æ©Ÿèƒ½ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ã¯ã˜ã‚ã®ãƒãƒ³ãƒ‰ãƒ« (åˆæœŸçŠ¶æ…‹ã§é ‚点ã«ã‚ã‚‹ãƒãƒ³ãƒ‰ãƒ«ã€ã¤ã¾ã‚Šæ˜Ÿå½¢ã® 凸 ãªè§’ã«ã‚ã‚‹æ–¹) ã¯æ˜Ÿã®å…‰èŠ’ã®é•·ã•を調整ã—ã¾ã™ã€‚ã—ã‹ã—ã€ãƒãƒ³ãƒ‰ãƒ«ã‚’回ã™ã¨ (シェイプã®ä¸­å¿ƒã§ç›¸å¯¾çš„ã«)ã€ã‚‚ã†ä¸€æ–¹ã®ãƒãƒ³ãƒ‰ãƒ«ã‚‚ãれã«å¿œã˜ã¦å›žè»¢ã—ã¾ã™ã€‚ã“ã®ã“ã¨ã¯æ˜Ÿå½¢ã®å…‰èŠ’ã¯ã“ã®ãƒãƒ³ãƒ‰ãƒ«ã§ã¯æ­ªã‚られãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ - + ã‚‚ã†ä¸€æ–¹ã®ãƒãƒ³ãƒ‰ãƒ« (åˆæœŸçŠ¶æ…‹ã§é ‚点ã®é–“㮠凹 ãªè§’ã«ã‚ã‚‹) ã¯ã€é€†ã«ã€åŠå¾„æ–¹å‘ã«ã‚‚接線方å‘ã«ã‚‚頂点ãƒãƒ³ãƒ‰ãƒ«ã«å½±éŸ¿ã‚’ã‚ãŸãˆãšã«è‡ªç”±ã«å‹•ãã¾ã™ (実際ã€ã“ã®ãƒãƒ³ãƒ‰ãƒ«ã¯ã‚‚ã†ä¸€æ–¹ã®ãƒãƒ³ãƒ‰ãƒ«ã‚ˆã‚Šé ãã«å‹•ã„ã¦é ‚点ã«ãªã‚‹ã“ã¨ã‚‚ã§ãã¾ã™)。ã“ã®ãƒãƒ³ãƒ‰ãƒ«ã¯æ˜Ÿå½¢ã®é ‚点を歪ã¾ã›ã€å…‰èŠ’ã‚’ã‚らゆる種類ã®çµæ™¶åž‹ã€æ›¼è¼ç¾…模様ã€é›ªç‰‡å½¢ã€ãƒ¤ãƒžã‚¢ãƒ©ã‚·å½¢ã«ã—ã¾ã™: - - - - - - - - - - + + + + + + + + + + ã‚‚ã—ã€é£¾ã‚Šã®ãªã„æ™®é€šã®æ˜Ÿå½¢ã‚’作りãŸã„ãªã‚‰ã€ãƒãƒ³ãƒ‰ãƒ«ã®æ­ªã¿ã®å‹•ãã‚’è¦åˆ¶ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™: - - + + Ctrl を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã“ã¨ã§ã€å…‰èŠ’ã‚’åŠå¾„æ–¹å‘ã«é™å®š (æ­ªã¿ãªã—) ã™ã‚‹ã€‚ - - + + Ctrl+クリック ã§ãƒ‰ãƒ©ãƒƒã‚°ã›ãšã«æ­ªã¿ã‚’ã¨ã‚‹ã€‚ - + キャンãƒã‚¹ä¸Šã§ã®ãƒãƒ³ãƒ‰ãƒ«ã®ãƒ‰ãƒ©ãƒƒã‚°ã®æœ‰ç”¨ãªè£œè¶³ã¨ã—ã¦ã€2 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ã®ä¸­å¿ƒã‹ã‚‰ã®è·é›¢ã®æ¯”ã€ã‚¹ãƒãƒ¼ã‚¯æ¯” ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒãƒ¼ã«ã‚りã¾ã™ã€‚ - + Inkscape ã®æ˜Ÿå½¢ã¯ä»–ã«ã‚‚ 2 ã¤ã®ä»•掛ã‘ãŒã‚りã¾ã™ã€‚幾何学ã®ä¸–界ã§ã¯å¤šè§’å½¢ã¯é‹­è§’ã‹ã‚‰ç›´ç·šã®è¾ºã‚’æŒã¡ã¾ã™ãŒã€ç¾å®Ÿä¸–界ã§ã¯æ§˜ã€…ãªåº¦æ•°ã®æ›²ãŒã‚Šã‚„丸ã•ãŒå­˜åœ¨ã—ã¾ã™ã€‚ãã—㦠Inkscape ã‚‚ãれを実ç¾å¯èƒ½ã¨ã—ã¦ã„ã¾ã™ã€‚ãŸã ã—ã€å¤šè§’å½¢ã®ä¸¸ã‚ã¯çŸ©å½¢ã®ä¸¸ã‚ã¨ã¯å°‘ã—ç•°ãªã‚‹ä½œç”¨ã‚’ã—ã¾ã™ã€‚丸ã‚ã‚‹ã«ã¯ãƒãƒ³ãƒ‰ãƒ«ã‚’使ã†å¿…è¦ãŒã‚りã¾ã›ã‚“。以下ã®ã‚ˆã†ã«ã—ã¾ã™: - - + + 接線方å‘ã« Shift+ドラッグ ã§æ˜Ÿå½¢ã‚„多角形を丸ã‚る。 - - + + Shift+クリック ã§ä¸¸ã‚ã‚’å–り除ã。 - + “接線方å‘â€ã¨ã¯ä¸­å¿ƒã«å¯¾ã—ã¦ç›´è§’æ–¹å‘ã¨è¨€ã†æ„味ã§ã™ã€‚Shift を押ã—ãªãŒã‚‰ãƒãƒ³ãƒ‰ãƒ«ã‚’åæ™‚計方å‘ã«â€œå›žè»¢â€ã™ã‚‹ã¨ã€ä¸¸ã‚ã®å€¤ã¯æ­£ã«ãªã‚Šã€æ™‚計方å‘ã«å›žã™ã¨è² ã®ä¸¸ã‚ã«ãªã‚Šã¾ã™ (下ã®è² ã®ä¸¸ã‚ã®ä¾‹ã‚’見ã¦ãã ã•ã„)。 - + ã“ã“ã§ã€ä¸¸ã‚ãŸæ­£æ–¹å½¢ (矩形ツール) ã¨ä¸¸ã‚ãŸæ­£ 4 è§’å½¢ (星形ツール) を比較ã—ã¦ã¿ã¾ã—ょã†: - + 丸ã‚㟠多角形 - + 丸ã‚㟠矩形 - + 見ã¦åˆ†ã‹ã‚‹ã‚ˆã†ã«ã€ä¸¸ã‚ãŸçŸ©å½¢ã¯è¾ºã«ç›´ç·šåŒºé–“ã¨å††å¼§çж (一般的ã«ã¯æ¥•円弧) ã®åŒºé–“ãŒã‚りã€ä¸¸ã‚ãŸå¤šè§’å½¢ã¨æ˜Ÿå½¢ã«ã¯ç›´ç·šåŒºé–“ãŒå…¨ãã‚りã¾ã›ã‚“ã€‚æ›²çŽ‡ã¯æœ€å¤§ (è§’ã®éƒ¨åˆ†) ã‹ã‚‰æœ€å° (è§’ã¨è§’ã®ä¸­é–“) ã¸ã¨æ»‘らã‹ã«å¤‰åŒ–ã—ã¾ã™ã€‚Inkscape ã¯ãŸã é€£ç¶šãªãƒ™ã‚¸ã‚¨ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’シェイプã®é ‚点ã«è¿½åŠ ã—ã¦ã„ã‚‹ã ã‘ã§ã™ (シェイプをパスã«å¤‰æ›ã™ã‚Œã°ãƒ™ã‚¸ã‚§ãƒãƒ³ãƒ‰ãƒ«ã‚’見るã“ã¨ã€èª¿ã¹ã‚‹ã“ã¨ãŒã§ãã¾ã™)。 - + コントロールãƒãƒ¼ã® ä¸¸ã‚ ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã¯æŽ¥ç·šã¨è¿‘接ã™ã‚‹å¤šè§’å½¢/星形ã®è¾ºã®é•·ã•ã®æ¯”ã§ã™ã€‚ã“ã®ãƒ‘ラメーターã¯è² ã®å€¤ã‚’å–ã‚‹ã“ã¨ã‚‚ã§ãã€ãã®å ´åˆã¯æŽ¥ç·šã®å‘ãã‚’å転ã—ã¾ã™ã€‚0.2 ã‹ã‚‰ 0.4 ã®å€¤ã§ã¯ "普通ã®" 丸ã‚ã«ãªã‚Šã¾ã™ã€‚ä»–ã®å€¤ã«ã™ã‚‹ã¨ç¾Žã—ã„ã€å…¥ã‚Šçµ„ã‚“ã ã€ã‚ã‚‹ã„ã¯äºˆæ¸¬ä¸å¯èƒ½ãªå½¢ã«ãªã‚‹å‚¾å‘ãŒã‚りã¾ã™ã€‚大ããªä¸¸ã‚å€¤ã®æ˜Ÿå½¢ã¯ãƒãƒ³ãƒ‰ãƒ«ã®ä½ç½®ã‚’大ãã上回る形状ã«ãªã‚Šã¾ã™ã€‚ã„ãã¤ã‹ã®ä¾‹ã‚’示ã—ã¾ã™ã€‚数値ã¯ä¸¸ã‚値を表ã—ã¾ã™: - - - - - - - - - - - - - - 0.25 - 0.25 - 0.25 - 0.37 - - 0.43 - 3.00 - -3.00 - - 0.41 - 5.43 - 1.85 - 0.21 - -3.00 - - -0.43 - - -8.94 - - 0.39 - + + + + + + + + + + + + + + 0.25 + 0.25 + 0.25 + 0.37 + + 0.43 + 3.00 + -3.00 + + 0.41 + 5.43 + 1.85 + 0.21 + -3.00 + + -0.43 + + -8.94 + + 0.39 + 頂点を鋭ãã€å‡¹ãªè¾ºã‚’滑らã‹ã«ã—ãŸã„å ´åˆã€ã‚‚ã—ãã¯ãã®é€†ã®å½¢çжãŒã»ã—ã„å ´åˆã¯ã€æ˜Ÿå½¢ã‹ã‚‰ã‚ªãƒ•セット (Ctrl+J) を作るã“ã¨ã§ç°¡å˜ã«å®Ÿç¾ã§ãã¾ã™: - - - - ã‚ªãƒªã‚¸ãƒŠãƒ«ã®æ˜Ÿå½¢ - リンクã•れãŸã‚ªãƒ•セットã€ã‚¤ãƒ³ã‚»ãƒƒãƒˆ - リンクã•れãŸã‚ªãƒ•セットã€ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆ - + + + + ã‚ªãƒªã‚¸ãƒŠãƒ«ã®æ˜Ÿå½¢ + リンクã•れãŸã‚ªãƒ•セットã€ã‚¤ãƒ³ã‚»ãƒƒãƒˆ + リンクã•れãŸã‚ªãƒ•セットã€ã‚¢ã‚¦ãƒˆã‚»ãƒƒãƒˆ + Inkscape ã®æ˜Ÿå½¢ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’Shift+ドラッグã™ã‚‹ã“ã¨ã¯ã€æœ€ã‚‚ã™ã°ã‚‰ã—ã„æ¥½ã—ã¿ã®ä¸€ã¤ã§ã™ã€‚ã—ã‹ã—ã‚‚ã£ã¨æ¥½ã—ã‚€ã“ã¨ãŒã§ãã¾ã™ã€‚ - + ç¾å®Ÿä¸–界ã®å½¢çжã«ã‚ˆã‚Šä¼¼ã›ã‚‹ãŸã‚ã«ã€Inkscape ã¯æ˜Ÿå½¢ã¨å¤šè§’å½¢ã®ãƒ©ãƒ³ãƒ€ãƒ åŒ– (乱雑ãªã²ãšã¿) ã‚’å‚™ãˆã¦ã„ã¾ã™ã€‚ã‚ãšã‹ãªãƒ©ãƒ³ãƒ€ãƒ åŒ–ã¯ã€æ˜Ÿå½¢ã‚’å°‘ã—ä¹±ã—ã¾ã™ã€ã‚ˆã‚Šäººé–“らã—ãã€ã‚ˆã‚Šå¯ç¬‘ã—ã。強ã„ãƒ©ãƒ³ãƒ€ãƒ åŒ–ã¯æ§˜ã€…ãªç†±ç‹‚çš„ã§äºˆæ¸¬ä¸å¯èƒ½ãªå½¢çŠ¶ã‚’ä½œã‚Šå‡ºã™åˆºæ¿€çš„ãªæ–¹æ³•ã§ã™ã€‚丸ã‚ã‚’æ–½ã—ãŸæ˜Ÿå½¢ã¯ä¹±é›‘ã•を加ãˆã¦ã‚‚丸ã¾ã£ãŸã¾ã¾ã§ã™ã€‚ショートカットã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™: - - + + ãƒãƒ³ãƒ‰ãƒ«ã‚’接線方å‘ã« Alt+ドラッグ ã§æ˜Ÿå½¢ã¨å¤šè§’形をランダム化ã™ã‚‹ã€‚ - - + + ãƒãƒ³ãƒ‰ãƒ«ã‚’ Alt+クリック ã§ãƒ©ãƒ³ãƒ€ãƒ åŒ–ã‚’å–り除ã。 - + ãƒ©ãƒ³ãƒ€ãƒ ãªæ˜Ÿå½¢ã‚’æã„ãŸã‚Šã€ãƒãƒ³ãƒ‰ãƒ«ã‚’ドラッグã—ã¦ç·¨é›†ã—ãŸã‚Šã™ã‚‹ã¨ã€æ˜Ÿå½¢ã¯ "振動" ã—ã¾ã™ã€‚ãªãœãªã‚‰ãƒãƒ³ãƒ‰ãƒ«ã®å›ºæœ‰ã®ä½ç½®ã¯ãã®å›ºæœ‰ã®ãƒ©ãƒ³ãƒ€ãƒ åŒ–ã«å¯¾å¿œã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚ã§ã™ã‹ã‚‰ã€Alt を押ã•ãšã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨åŒã˜ãƒ©ãƒ³ãƒ€ãƒ åŒ–ã®ãƒ¬ãƒ™ãƒ«ã§ãƒãƒ³ãƒ‰ãƒ«ã¯å‹•ãã€ä¸€æ–¹ Alt を押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨ãƒ©ãƒ³ãƒ€ãƒ åŒ–ã—ã¾ã™ãŒãã®ãƒ¬ãƒ™ãƒ«ã¯èª¿æ•´ã•れã¾ã™ã€‚ã“ã“ã«å°‘ã—ã ã‘ãƒãƒ³ãƒ‰ãƒ«ã‚’å‹•ã‹ã—ã¦ãƒ©ãƒ³ãƒ€ãƒ ã«ã—㟠(ランダム化㯠0.1 ã¾ã§) 以外ã¯åŒã˜ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’ã‚‚ã¤æ˜Ÿå½¢ãŒã‚りã¾ã™: - - - - - - + + + + + + ãã—ã¦ã€ã“ã“ã«ä¸Šã®çœŸä¸­ã®æ˜Ÿå½¢ã®ä¹±é›‘ã•ã‚’ -0.2 ã‹ã‚‰ 0.2 ã¾ã§å¤‰åŒ–ã•ã›ãŸã‚‚ã®ãŒã‚りã¾ã™: - +0.2 - +0.1 - 0 - -0.1 - -0.2 - - - - - - + +0.2 + +0.1 + 0 + -0.1 + -0.2 + + + + + + çœŸã‚“ä¸­ã®æ˜Ÿå½¢ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’ Alt+ドラッグ ã—ã¦ã€å·¦å³ã®ã€ãã—ã¦ã•らã«ãã®éš£ã®æ˜Ÿå½¢ã«å¤‰å½¢ã—ã¦ã„ãã¨ã“ã‚を観察ã—ã¦ãã ã•ã„。 - + ãã®ã†ã¡ã€è‡ªåˆ†ãªã‚Šã®ãƒ©ãƒ³ãƒ€ãƒ ãªæ˜Ÿå½¢ã®ä½¿ã„é“ãŒè¦‹ã¤ã‹ã‚‹ã§ã—ょã†ã€‚ã—ã‹ã—ç§ã¯ç‰¹ã«ä¸¸ã‚ãŸã‚¢ãƒ¡ãƒ¼ãƒçжã®ã—ã¿ã¨å¤§ããè’れãŸå¹»æƒ³çš„ãªç¨œç·šã‚’ã‚‚ã¤æƒ‘星ã®å½¢ãŒæ°—ã«å…¥ã£ã¦ã„ã¾ã™: - - - - - - - - - - - らã›ã‚“ + + + + + + + + + + + らã›ã‚“ - + Inkscape ã®ã‚‰ã›ã‚“ã¯å¤šæ©Ÿèƒ½ãªã‚·ã‚§ã‚¤ãƒ—ã§ã™ã€‚ãã—ã¦æ˜Ÿå½¢ã»ã©å¤¢ä¸­ã«ãªã‚Œã¾ã›ã‚“ãŒã€ã¨ãã«ã¨ã¦ã‚‚有用ã§ã™ã€‚らã›ã‚“ã¯æ˜Ÿå½¢ã®ã‚ˆã†ã«ä¸­å¿ƒã‹ã‚‰æç”»ã•れã¾ã™ã€‚ã“ã‚Œã¯æç”»ä¸­ã‚‚ç·¨é›†ä¸­ã¨åŒæ§˜ã§ã™ã€‚ - - + + Ctrl+ドラッグ ã§è§’度ã®å¢—分を 15 度ã«ã‚¹ãƒŠãƒƒãƒ—ã™ã‚‹ã€‚ - + æç”»ã•れるã¨ã€ã‚‰ã›ã‚“ã¯å†…å´ã¨å¤–å´ã®ç«¯ç‚¹ã« 2 ã¤ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’ã‚‚ã¡ã¾ã™ã€‚ã©ã¡ã‚‰ã®ãƒãƒ³ãƒ‰ãƒ«ã‚‚らã›ã‚“ã‚’å·»ã„ãŸã‚Šã€è§£ã„ãŸã‚Šã—ã¾ã™ (ã¤ã¾ã‚Šã€"ç¶šã‘ã¦" å·»ãæ•°ã‚’変ãˆã¾ã™)。ãã®ä»–ã®ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ä»¥ä¸‹ã®ã¨ãŠã‚Šã§ã™: - + 外å´ã®ãƒãƒ³ãƒ‰ãƒ«ï¼š - - + + Shift+ドラッグ ã§ã‚‰ã›ã‚“ã®ä¸­å¿ƒã‹ã‚‰ã®æ‹¡å¤§ç¸®å°/回転 (å·»ã/è§£ãã¯ã—ãªã„)。 - - + + Alt+ドラッグ ã§å·»ã/è§£ãã®é–“éš”ã€åŠå¾„を固定ã™ã‚‹ã€‚ - + 内å´ã®ãƒãƒ³ãƒ‰ãƒ«ï¼š - - + + Alt+ドラッグ 垂直ã«å‹•ã‹ã™ã¨åŽã‚Œã‚“/発散ã™ã‚‹ã€‚ - - + + Alt+クリック ã§åŽã‚Œã‚“/発散をå–り消ã™ã€‚ - - + + Shift+クリック ã§å†…å´ã®ãƒãƒ³ãƒ‰ãƒ«ã‚’中心ã«ç§»å‹•ã™ã‚‹ã€‚ - + らã›ã‚“㮠発散度 ã¯å·»ãã®éžç·šå½¢åº¦ã®å°ºåº¦ã§ã™ã€‚発散度㌠1 ãªã‚‰ã€ã‚‰ã›ã‚“ã¯å‡ä¸€ã«ãªã‚Šã¾ã™ã€‚ã“れ㌠1 よりå°ã•ã‘れ㰠(Alt+上ã¸ãƒ‰ãƒ©ãƒƒã‚°)ã€å¤–周ã§å¯†åº¦ãŒé«˜ããªã‚Šã€ 1 より大ãã‘れ㰠(Alt+下ã¸ãƒ‰ãƒ©ãƒƒã‚°)ã€ä¸­å¿ƒã«å‘ã‹ã£ã¦å¯†åº¦ãŒé«˜ããªã‚Šã¾ã™: - 0.2 - 0.5 - 6 - 2 - 1 - - - - - - + 0.2 + 0.5 + 6 + 2 + 1 + + + + + + å·»ãæ•°ã®æœ€å¤§å€¤ã¯ 1024 ã§ã™ã€‚ - + 円/å¼§ãƒ„ãƒ¼ãƒ«ãŒæ¥•円ã ã‘ã§ãªãå¼§ (曲率ãŒä¸€å®šã®ç·š) も作æˆã§ãるよã†ã«ã€ã‚‰ã›ã‚“ãƒ„ãƒ¼ãƒ«ã¯æ»‘らã‹ã«å¤‰åŒ–ã™ã‚‹æ›²ç·šã‚’作るã“ã¨ã‚‚ã§ãã¾ã™ã€‚通常ã®ãƒ™ã‚¸ã‚¨æ›²ç·šã«æ¯”ã¹ã€å¼§ã‚„らã›ã‚“ã¯ã‚ˆã‚Šåˆ©ä¾¿æ€§ãŒé«˜ã„ã§ã—ょã†ã€‚ãªãœãªã‚‰å½¢çжã«å¤‰æ›´ã‚’加ãˆãšã«æ›²ç·šã«æ²¿ã£ã¦ãƒãƒ³ãƒ‰ãƒ«ã‚’å‹•ã‹ã™ã“ã¨ã§é•·ãã—ãŸã‚ŠçŸ­ãã—ãŸã‚Šã§ãã‚‹ã‹ã‚‰ã§ã™ã€‚ã¾ãŸé€šå¸¸ã€ã‚‰ã›ã‚“ã¯ãƒ•ィルãªã—ã§æã‹ã‚Œã¾ã™ãŒã€ãƒ•ィルã®è¿½åŠ ã‚„ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®å‰Šé™¤ã§é¢ç™½ã„効果ãŒå‡ºã›ã¾ã™ã€‚ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + 特ã«é¢ç™½ã„ã®ã¯ã‚‰ã›ã‚“ã«ç ´ç·šã®ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã‚’与ãˆã‚‹ã“ã¨ã§ã™ã€‚滑らã‹ãªåŽã‚Œã‚“ã¨ç­‰é–“éš”ã®å° (点や短ã„ç·š) ã¯ç›¸ã¾ã£ã¦ç¾Žã—ã„モアレ効果ã¨ãªã‚Šã¾ã™: - - - - - 最後㫠+ + + + + 最後㫠- + Inkscape ã®ã‚·ã‚§ã‚¤ãƒ—ツールã¯ã¨ã¦ã‚‚強力ã§ã™ã€‚技術を学ã³ã€æš‡ãªã¨ãã«éŠã‚“ã§ã¿ã‚‹ã“ã¨ã§ãƒ‡ã‚¶ã‚¤ãƒ³ã™ã‚‹éš›ã®åŠ›ã«ãªã‚‹ã§ã—ょã†ã€‚ãªãœãªã‚‰ç°¡å˜ãªãƒ‘スã®ä»£ã‚りã«ã‚·ã‚§ã‚¤ãƒ—を使ã†ã“ã¨ã§ãƒ™ã‚¯ã‚¿ãƒ¼ã‚¢ãƒ¼ãƒˆã‚’速ã作りã€ç°¡å˜ã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã‹ã‚‰ã§ã™ã€‚ã‚‚ã—ã€ã•らãªã‚‹ã‚·ã‚§ã‚¤ãƒ—ã®æ”¹å–„ã®ææ¡ˆãŒã‚れã°ã€é–‹ç™ºè€…ã¾ã§é€£çµ¡ã—ã¦ãã ã•ã„。 - + diff --git a/share/tutorials/tutorial-shapes.nl.svg b/share/tutorials/tutorial-shapes.nl.svg index 3b67cc779..0928de7d1 100644 --- a/share/tutorials/tutorial-shapes.nl.svg +++ b/share/tutorials/tutorial-shapes.nl.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - Ellipsen + + Ellipsen @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Sterren + + Sterren @@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow. - - Spiralen + + Spiralen @@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow. - - Conclusies + + Conclusies diff --git a/share/tutorials/tutorial-shapes.pl.svg b/share/tutorials/tutorial-shapes.pl.svg index b1002e1d1..ebce0a3fb 100644 --- a/share/tutorials/tutorial-shapes.pl.svg +++ b/share/tutorials/tutorial-shapes.pl.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - Elipsy + + Elipsy @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Gwiazdy + + Gwiazdy @@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow. - - Spirale + + Spirale @@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow. - - Podsumowanie + + Podsumowanie diff --git a/share/tutorials/tutorial-shapes.ru.svg b/share/tutorials/tutorial-shapes.ru.svg index 80e255646..bfa32095a 100644 --- a/share/tutorials/tutorial-shapes.ru.svg +++ b/share/tutorials/tutorial-shapes.ru.svg @@ -487,8 +487,8 @@ on it. Ctrl+click (select in group) and - - ЭллипÑÑ‹ + + ЭллипÑÑ‹ @@ -637,8 +637,8 @@ on it. Ctrl+click (select in group) and - - Звёзды + + Звёзды @@ -929,8 +929,8 @@ large numbers (say, over 200) if your computer is slow. - - Спирали + + Спирали @@ -1008,7 +1008,7 @@ large numbers (say, over 200) if your computer is slow. Shift+щелчок Ð´Ð»Ñ ÑÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ¹ ручки к центру. - + @@ -1069,8 +1069,8 @@ large numbers (say, over 200) if your computer is slow. - - Заключение + + Заключение diff --git a/share/tutorials/tutorial-shapes.sk.svg b/share/tutorials/tutorial-shapes.sk.svg index 78cb85fc6..a3ec50b0b 100644 --- a/share/tutorials/tutorial-shapes.sk.svg +++ b/share/tutorials/tutorial-shapes.sk.svg @@ -478,8 +478,8 @@ created by dragging these handles. - - Elipsy + + Elipsy @@ -627,8 +627,8 @@ created by dragging these handles. - - Hviezdy + + Hviezdy @@ -919,8 +919,8 @@ large numbers (say, over 200) if your computer is slow. - - Å pirály + + Å pirály @@ -1059,8 +1059,8 @@ large numbers (say, over 200) if your computer is slow. - - Záver + + Záver diff --git a/share/tutorials/tutorial-shapes.sl.svg b/share/tutorials/tutorial-shapes.sl.svg index 240f5bb09..1582f4067 100644 --- a/share/tutorials/tutorial-shapes.sl.svg +++ b/share/tutorials/tutorial-shapes.sl.svg @@ -485,8 +485,8 @@ on it. Ctrl+click (select in group) and - - Elipse + + Elipse @@ -635,8 +635,8 @@ on it. Ctrl+click (select in group) and - - Zvezde + + Zvezde @@ -927,8 +927,8 @@ large numbers (say, over 200) if your computer is slow. - - Spirale + + Spirale @@ -1067,8 +1067,8 @@ large numbers (say, over 200) if your computer is slow. - - ZakljuÄek + + ZakljuÄek diff --git a/share/tutorials/tutorial-shapes.zh_CN.svg b/share/tutorials/tutorial-shapes.zh_CN.svg index cac766cd3..215476f6c 100644 --- a/share/tutorials/tutorial-shapes.zh_CN.svg +++ b/share/tutorials/tutorial-shapes.zh_CN.svg @@ -51,21 +51,21 @@ 本教程涵盖四ç§å½¢çŠ¶å·¥å…·ï¼šçŸ©å½¢ã€æ¤­åœ†ã€æ˜Ÿå½¢å’Œèžºæ—‹çº¿ã€‚我们将å‘你展示Inkscape在形状绘制上的能力,并通过实例演示这些工具的用法和用途。 - + 通过Ctrl+Arrows, 滚轮, 或 中键拖动 将绘图页é¢å‘下å·åŠ¨ã€‚ç»˜å›¾å¯¹è±¡çš„åˆ›å»ºã€é€‰æ‹©ã€å˜æ¢ç­‰åŸºæœ¬æ“作,请å‚考帮助Help > 教程Tutorials中的基础教程。 - + Inkscape有四ç§é€šç”¨çš„形状工具,å¯ä»¥åˆ›å»ºå’Œç¼–辑相应的形状。æ¯ç§å½¢çŠ¶ç±»åž‹éƒ½å…·æœ‰å…±åŒçš„特å¾ï¼Œå¯ä»¥é€šè¿‡æ‹–动å¼çš„æŽ§åˆ¶æŸ„å’Œä¸€äº›æ•°å€¼å‚æ•°æ¥è°ƒèŠ‚ï¼Œä½¿å…¶å…·æœ‰ä¸åŒçš„外观。 - + @@ -76,17 +76,17 @@ path, but it's often more interesting and useful. You can always convert a to a path (Shift+Ctrl+C), but the reverse conversion is not possible. - + 形状工具包括:矩形, 椭圆, 星形, å’Œ 螺旋线。首先,我们看一下形状工具的基本工作模å¼ï¼Œç„¶åŽå†åˆ†åˆ«è¯¦ç»†ä»‹ç»ã€‚ - - 一般性æ“作 + + 一般性æ“作 - + @@ -98,28 +98,28 @@ marks (depending on the tools), so you can immediately edit what you created by dragging these handles. - + 在任æ„一ç§å½¢çŠ¶å·¥å…·æ¨¡å¼ä¸‹ï¼Œæˆ–在节点工具模å¼ä¸‹(F2),选择任æ„类型的形状,都å¯ä»¥ä½¿å½¢çŠ¶çš„æŽ§åˆ¶æŸ„æ˜¾çŽ°å‡ºæ¥ã€‚当鼠标悬åœåœ¨æŽ§åˆ¶æŸ„ä¸Šæ—¶ï¼Œåº•éƒ¨çš„çŠ¶æ€æ å°†ä¼šå‘Šè¯‰ä½ æ‹–动或点击将产生的编辑效果。 - + æ¯ä¸€ç§å½¢çŠ¶å·¥å…·åœ¨ç»˜å›¾åŒºé¡¶éƒ¨éƒ½ä¼šæ˜¾ç¤ºä¸€ä¸ªæ°´å¹³çš„å·¥å…·æŽ§åˆ¶æ ã€‚通常包括几个数字输入框和æ¢å¤é»˜è®¤å‚数的按钮。如果当å‰é€‰æ‹©çš„形状工具类型与当å‰å¯¹è±¡çš„形状类型一致,在控制æ ä¸­è¾“入数字也å¯ä»¥æ”¹å˜è¢«é€‰å¯¹è±¡çš„形状。 - + 工具控制æ ä¸­å‚数的修改将应用到新创建的形状上。例如,如果将星形的顶点数改å˜ï¼Œæ–°çš„æ˜Ÿå½¢çš„顶点数将与改å˜åŽçš„æ•°å€¼ä¸€è‡´ã€‚å¦å¤–,选择形状åŽï¼Œä¹Ÿä¼šå°†å…¶å…·æœ‰çš„特å¾å‚数显示在工具控制æ ï¼Œä»Žè€Œå½±å“以åŽåˆ›å»ºçš„æ–°å½¢çŠ¶ã€‚ - + @@ -129,270 +129,270 @@ on it. Ctrl+click (select in group) and (select under) also work as they do in Selector tool. Esc deselects. - - 矩形 + + 矩形 - + çŸ©å½¢æ˜¯è®¾è®¡å’Œç»˜å›¾ä¸­æœ€å¸¸ç”¨ã€æœ€ç®€å•的形状。Inkscape尽力使矩形的创建和编辑简å•å¿«æ·ã€‚ - + F4或者点击工具列中相应的图标,å¯ä»¥åˆ‡æ¢åˆ°çŸ©å½¢å·¥å…·æ¨¡å¼ã€‚请在这个è“色矩形æ—å†ç”»ä¸€ä¸ªçŸ©å½¢ï¼š - 在这里画 - - + 在这里画 + + ä¿æŒåœ¨çŸ©å½¢å·¥å…·æ¨¡å¼ä¸‹ï¼Œé€šè¿‡å•击,交替选择两个矩形。 - + 矩形绘制技巧: - - + + é…åˆCtrl键,å¯ä»¥ç»˜åˆ¶æ­£æ–¹å½¢æˆ–边长为整数比率(2:1,3:1ç­‰)的矩形。 - - + + é…åˆShift键,从中心开始绘制。 - + 刚绘制的矩形(新绘的矩形总是自动被选中)在三个角上显示3个控制柄,但实际上有四个控制柄,如果矩形没有圆角,å³ä¸Šè§’的两个是é‡åˆåœ¨ä¸€èµ·çš„。这两个是倒圆控制柄;å¦å¤–两个(左上和å³ä¸‹)是缩放控制柄。 - + 首先看倒圆控制柄,抓ä½ä¸€ä¸ªå‘下拖动,四个角都æˆåœ†å½¢ï¼Œå¹¶ä¸”第二个倒圆控制柄也显露出æ¥(在角上的原始ä½ç½®)。现在的圆角是等åŠå¾„的,如果è¦ä½¿å…¶æˆä¸ºä¸ç­‰åŠå¾„的圆角,就需è¦å‘左移动å¦ä¸€ä¸ªæŽ§åˆ¶æŸ„。 - + 下图中å‰ä¸¤ä¸ªçŸ©å½¢å…·æœ‰ç­‰åŠå¾„圆角,åŽä¸¤ä¸ªåˆ™æ˜¯æ¤­åœ†å½¢åœ†è§’: - 椭圆形圆角 - ç­‰åŠå¾„圆角 - - - - - + 椭圆形圆角 + ç­‰åŠå¾„圆角 + + + + + 在矩形工具模å¼ä¸‹ï¼Œç‚¹å‡»é€‰æ‹©è¿™äº›çŸ©å½¢ï¼Œçœ‹çœ‹ä»–们的倒圆控制柄的区别。 - + 有时,在整个绘图中,我们希望圆角的åŠå¾„å’Œå½¢çŠ¶ä¿æŒä¸å˜ï¼Œè€Œä¸æ˜¯éšç€çŸ©å½¢çš„大å°è€Œå˜åŒ–(例如æµç¨‹å›¾ä¸­ï¼Œä¸åŒå¤§å°çš„矩形具有相åŒçš„圆角)。这在Inkscape中å¯ä»¥è½»æ¾å®žçŽ°ã€‚åˆ‡æ¢åˆ°é€‰æ‹©å·¥å…·ï¼Œåœ¨å·¥å…·æŽ§åˆ¶æ çš„尾部,有四个开关按钮,左数第二个按钮(显示两个åŒå¿ƒåœ†è§’),å¯ä»¥æŽ§åˆ¶ç¼©æ”¾çŸ©å½¢æ—¶åœ†è§’是å¦ä¹ŸåŒæ­¥ç¼©æ”¾ã€‚ - + ä¾‹å¦‚ï¼Œåœ¨å…³é—­â€œç¼©æ”¾åœ†è§’â€æƒ…况下,下图中原始的红色矩形被å¤åˆ¶å’Œç¼©æ”¾äº†æ•°æ¬¡ï¼Œå„自具有ä¸åŒçš„长宽比例: - 缩放圆角矩形关闭 "缩放圆角Scale rounded corners" - - - - - - - - - + 缩放圆角矩形关闭 "缩放圆角Scale rounded corners" + + + + + + + + + æ³¨æ„æ‰€æœ‰çŸ©å½¢çš„圆角的大å°å’Œå½¢çŠ¶éƒ½æ˜¯ç›¸åŒçš„,在å³ä¸Šè§’çš„ä½ç½®å¯ä»¥ç²¾ç¡®åœ°é‡åˆåœ¨ä¸€èµ·ã€‚所有的è“色虚线矩形都是从原始的红色矩形缩放得到,没有对倒圆控制柄åšä»»ä½•修改。 - + ä½œä¸ºå¯¹ç…§ï¼Œä¸‹å›¾ä¸­æ˜¯åœ¨æ‰“å¼€â€œç¼©æ”¾åœ†è§’â€æ—¶çš„æƒ…形: - 缩放圆角矩形打开 "缩放圆角Scale rounded corners" - - - - - - - - - + 缩放圆角矩形打开 "缩放圆角Scale rounded corners" + + + + + + + + + 矩形的圆角å„ä¸ç›¸åŒï¼Œåœ¨å³ä¸Šè§’没有一个细微的地方是é‡åˆçš„(å¯ä»¥æ”¾å¤§äº†çœ‹)。在将原始矩形转为路径åŽ(Ctrl+Shift+C),缩放时产生的也是这样的效果。 - + 矩形的倒圆控制柄的æ“作技巧如下: - - + + 按ä½Ctrl拖动,使两个控制柄的åŠå¾„相åŒ(ç­‰åŠå¾„圆角)。 - - + + Ctrl+click使å¦ä¸€ä¸ªæŽ§åˆ¶æŸ„çš„åŠå¾„与当å‰ç›¸åŒï¼Œä¸éœ€è¦æ‹–动。 - - + + Shift+click删除圆角。 - + ä½ å¯èƒ½ä¹Ÿå·²ç»æ³¨æ„到,矩形工具的控制æ ä¸­æœ‰æ°´å¹³(Rx)和垂直(Ry)圆角åŠå¾„,å¯ä»¥ç²¾ç¡®æŽ§åˆ¶å…¶å°ºå¯¸ã€‚é¡¾åæ€ä¹‰ï¼Œä¸å€’圆 Not rounded按钮å¯ä»¥åˆ é™¤é€‰ä¸­çŸ©å½¢ä¸­çš„倒角。 - + 这些æ“作å¯ä»¥åŒæ—¶å¯¹å¤šä¸ªçŸ©å½¢èµ·ä½œç”¨ã€‚ä¾‹å¦‚ï¼Œè¦æ”¹å˜å½“å‰å›¾å±‚的多个矩形,åªéœ€è¦Ctrl+A (全部选择),然åŽåœ¨æŽ§åˆ¶æ ä¸­è®¾ç½®éœ€è¦çš„傿•°ï¼Œè€ŒåŒæ—¶è¢«é€‰ä¸­çš„其他类型的形状则ä¸ä¼šå—到影å“。 - + 䏋颿ˆ‘们æ¥çœ‹ä¸€ä¸‹ç¼©æ”¾æŽ§åˆ¶æŸ„。你å¯èƒ½ä¼šæƒ³ï¼Œæ—¢ç„¶å¯ä»¥é€šè¿‡é€‰æ‹©å·¥å…·ç¼©æ”¾ï¼Œè¦è¿™ä¸ªç¼©æ”¾æŽ§åˆ¶æŸ„䏿˜¯å¤šä½™äº†å—? - + 选择工具缩放存在的问题是,它总是沿ç€é¡µé¢çš„æ–¹å‘进行水平和竖直缩放,而矩形缩放控制柄是沿边的方å‘进行缩放,å³ä½¿çŸ©å½¢ç»è¿‡é€‰æ‹©æˆ–倾斜。请试一下用选择工具和(矩形工具模å¼ä¸‹çš„)缩放控制柄对下é¢çš„矩形进行缩放的区别: - - + + 由于有两个缩放控制柄,å¯ä»¥æ²¿ä»»æ„æ–¹å‘缩放矩形,甚至å¯ä»¥è®©å®ƒæ²¿ç€ä¸€æ¡è¾¹çš„æ–¹å‘移动。这ç§ç¼©æ”¾æ¨¡å¼ä¿æŒåœ†è§’åŠå¾„ä¸å˜ã€‚ - + 缩放控制柄的技巧: - - + + Ctrl拖动沿æŸä¸€è¾¹æˆ–对角线方å‘缩放。æ¢å¥è¯æ‰€ï¼ŒCtrlæ‹–åŠ¨ä¿æŒå®½åº¦ã€é«˜åº¦æˆ–宽高比ä¸å˜(å³ä½¿å…¶æœ¬èº«çš„åæ ‡ç³»ç»è¿‡ç¼©æ”¾å’Œå€¾æ–œ)。 - + 䏋颿˜¯åŒæ ·çš„矩形,请用Ctrl拖动,使之沿虚线方å‘缩放: - + - - 按ä½Ctrlæ•æ‰çŸ©å½¢çš„缩放控制柄 - + + 按ä½Ctrlæ•æ‰çŸ©å½¢çš„缩放控制柄 + 通过倾斜和旋转矩形,然åŽå¤åˆ¶å’Œç¼©æ”¾ï¼Œå¯ä»¥å¾ˆå®¹æ˜“地生æˆä¸‰ç»´æ•ˆæžœï¼š - - - - - - - - - - - - - - - - - - - - - 3个原始矩形 - æ‹·è´äº†è‹¥å¹²ä¸ªçŸ©å½¢å¹¶ä¸”通过控制柄缩放, 多通过Ctrl - + + + + + + + + + + + + + + + + + + + + + 3个原始矩形 + æ‹·è´äº†è‹¥å¹²ä¸ªçŸ©å½¢å¹¶ä¸”通过控制柄缩放, 多通过Ctrl + @@ -463,135 +463,135 @@ on it. Ctrl+click (select in group) and - - - - - - - - - - - - - - - - - - - - - - - - 椭圆 + + + + + + + + + + + + + + + + + + + + + + + + 椭圆 - + 椭圆工具(F5) å¯ä»¥åˆ›å»ºæ¤­åœ†å’Œåœ†ï¼Œç„¶åŽä¹Ÿå¯ä»¥å°†å…¶åˆ†ä¸ºåˆ†å‰²æˆ–圆弧段。绘制技巧与矩形工具相åŒï¼š - - + + Ctrl绘制圆或整数比率(2:1, 3:1,...)椭圆。 - - + + é…åˆShift键,从中心开始绘制。 - + 让我们详细看一下椭圆的控制柄。首先选择这个椭圆: - - + + 与矩形工具相似,å¯ä»¥çœ‹åˆ°ä¸‰ä¸ªæŽ§åˆ¶æŸ„,实际上是四个。最å³ä¾§çš„æ˜¯ä¸¤ä¸ªé‡åˆåœ¨ä¸€èµ·ï¼Œå¯ä»¥é€šè¿‡å®ƒâ€œæ‰“å¼€â€æ¤­åœ†ã€‚拖动最å³ä¾§çš„æŽ§åˆ¶æŸ„,然åŽå†æ‹–动新出现的一个,å¯ä»¥å¾—到å„ç§æ‰‡å½¢çš„分割和弧线: - - - - - - - - + + + + + + + + è¦å¾—到分割segment(åŠå¾„å°é—­),拖动时鼠标è¦ä¿æŒåœ¨æ¤­åœ†çš„外é¢ï¼Œç›¸å,如果鼠标在椭圆里é¢ï¼Œåˆ™å¾—到弧线arc。上图中,左侧共有四个分割,å³ä¾§æœ‰ä¸‰ä¸ªå¼§çº¿ã€‚注æ„,弧线是ä¸å°é—­çš„,仅弧线上有轮廓线,两端没有连接在一起。如果去掉填充色,åªä¿ç•™è½®å»“,看得就更清楚一些: - + 15 - 分割 - 圆弧 - - - - - - - - - - - - - - - - - - - - + 分割 + 圆弧 + + + + + + + + + + + + + + + + + + + + 注æ„左侧看起æ¥åƒæ‰‡å­çš„很窄的分割,它是通过Ctrlå¯¹æŽ§åˆ¶æŸ„è¿›è¡Œè§’åº¦æ•æ‰å®žçŽ°çš„ã€‚ä¸‹é¢æ˜¯å¼§çº¿å’Œåˆ†å‰²æŽ§åˆ¶æŸ„的一些æ“作技巧: - - + + é…åˆCtrlé”®æ‹–åŠ¨æ—¶ï¼ŒæŽ§åˆ¶æŸ„æ¯æ¬¡æ”¹å˜15度角。 - - + + Shift+clickä½¿å…¶é‡æ–°æˆä¸ºå®Œæ•´çš„æ¤­åœ†ã€‚ - + @@ -599,68 +599,68 @@ on it. Ctrl+click (select in group) and The snap angle can be changed in Inkscape Preferences (in Behavior > Steps). - + å¦å¤–两个控制柄使椭圆绕中心缩放。æ“作技巧åŒçŸ©å½¢çš„æŽ§åˆ¶æŸ„是相似的: - - + + Ctrl拖动å¯ä»¥ä½¿æ¤­åœ†æˆä¸ºåœ†(长短轴åŠå¾„相等)。 - - + + Ctrl+å•击使椭圆æˆä¸ºåœ†ï¼Œä¸éœ€è¦é¼ æ ‡æ‹–动。 - + ä¸ŽçŸ©å½¢çš„ç¼©æ”¾æŽ§åˆ¶æŸ„ç±»ä¼¼ï¼Œæ¤­åœ†çš„ç¼©æ”¾æŽ§åˆ¶æŸ„ä¹Ÿæ˜¯æ²¿å…¶è‡ªèº«çš„åæ ‡è½´æ–¹å‘调整其长度和宽度。也就是说,旋转或倾斜åŽä»ç„¶å¯ä»¥æ²¿å…¶æœ¬èº«çš„长短轴方å‘进行拉伸和挤压。试一下通过缩放控制柄对下é¢çš„æ¤­åœ†è¿›è¡Œç¼©æ”¾ï¼š - - - - - - - - 星形 + + + + + + + + 星形 - + 星形是Inkscapeä¸­æœ€å¤æ‚,最å¸å¼•人的形状。如果你想用Inkscape让你的朋å‹ä»¬çœ¼å‰ä¸€äº®(Wowï¼),åªéœ€è¦ç»™ä»–们展示一下星形工具。它简直是ä¹è¶£æ— ç©·ã€‚ - + 星形工具å¯ä»¥åˆ›å»ºä¸¤ç§ç±»ä¼¼ä½†çœ‹èµ·æ¥å·®åˆ«å¾ˆå¤§çš„å½¢çŠ¶ï¼šæ˜Ÿå½¢å’Œå¤šè¾¹å½¢ã€‚æ˜Ÿå½¢æœ‰ä¸¤ä¸ªæŽ§åˆ¶æŸ„ï¼Œå†³å®šæ˜Ÿå½¢è§’çš„é•¿åº¦å’Œå½¢çŠ¶ï¼›å¤šè¾¹å½¢åªæœ‰ä¸€ä¸ªæŽ§åˆ¶æŸ„,拖动时控制旋转和缩放: - + 星形 - + 多边形 - + @@ -672,412 +672,412 @@ Controls bar. The allowed range is from 3 (obviously) to 1024, but you shouldn&a large numbers (say, over 200) if your computer is slow. - + 当绘制一个新的星形或多边形时, - - + + Ctrl使得其旋转角度为15度的整数å€ã€‚ - + 一般æ¥è¯´ï¼Œæ˜Ÿå½¢çœ‹èµ·æ¥æ›´å¸å¼•人(实际上多边形更实用)。星形的两个控制柄的差异略有ä¸åŒã€‚第一个åˆå§‹ä½ç½®åœ¨è§’的顶端,控制角的长短,但相对于星形的中心旋转时,å¦ä¸€ä¸ªæŽ§åˆ¶æŸ„ä¹Ÿè·Ÿç€æ—‹è½¬ã€‚也就是说,这个控制柄ä¸èƒ½è®©æ˜Ÿå½¢çš„角倾斜。 - + å¦å¤–一个控制柄,åˆå§‹ä½ç½®åœ¨ä¸¤ä¸ªè§’中间的底端,å¯ä»¥æ²¿åŠå¾„或圆周方å‘ä»»æ„移动,而ä¸å½±å“角顶端的控制柄(实际上,它的ä½ç½®å¯ä»¥è¶…过现有角的顶点而产生新的角)。这个控制柄å¯ä»¥ä½¿æ˜Ÿå½¢çš„角倾斜,获得晶体ã€é›ªèŠ±ã€ æ›¼è¼ç½—以åŠporcupinesç­‰å„ç§å½¢çŠ¶ã€‚ - - - - - - - - - - + + + + + + + + + + 如果你è¦çš„åªæ˜¯ä¸€ä¸ªè§„则的星形,ä¸éœ€è¦è¿™äº›è£…饰性的工艺,你å¯ä»¥æŠ‘制倾斜控制柄的倾斜功能: - - + + Ctrl拖动时å¯ä»¥è®©æ˜Ÿçš„è§’ä¿æŒåŠå¾„æ–¹å‘(ä¸äº§ç”Ÿå€¾æ–œ)。 - - + + Ctrl+å•击喿¶ˆå€¾æ–œï¼Œä¸ç”¨æ‹–动鼠标。 - + 作为在画布上拖动控制柄的一ç§è¡¥å……方法,控制æ ä¸­çš„è½®è¾æ¯”Spoke ratioå¯ä»¥æŒ‡å®šä¸¤ç§æŽ§åˆ¶æŸ„相对于中心è·ç¦»çš„æ¯”值。 - + Inkscape兜里还有两个å°ç»æŠ€ã€‚ä»Žå‡ ä½•ä¸Šæ¥æ•°ï¼Œå¤šè¾¹å½¢æ˜¯ç”±ç›´è¾¹å’Œé”角组æˆï¼Œä½†çŽ°å®žä¸­ï¼Œä¼šå‡ºçŽ°å„ç§å„样的边和圆角,这在Inkscape中也å¯ä»¥å®žçŽ°ã€‚å€’åœ†æ˜Ÿå½¢å’Œå¤šè¾¹å½¢ä¸ŽçŸ©å½¢ç•¥æœ‰ä¸åŒï¼Œå¹¶æ²¡æœ‰ä¸“门的控制柄。但是, - - + + Shift+æ‹–åŠ¨åˆ‡å‘æ‹–动控制柄æ¥å€’圆星形或多边形。 - - + + Shift+点击控制柄æ¥å–消圆角。 - + “切å‘â€è¡¨ç¤ºåž‚直于指å‘中心的åŠå¾„的方å‘ã€‚å¦‚æžœæ²¿é€†æ—¶é’ˆæ–¹å‘æ‹–åŠ¨ï¼Œå¾—åˆ°æ­£åœ†è§’ï¼Œé¡ºæ—¶é’ˆæ–¹å‘æ‹–动,则得到负圆角。(看下é¢å›¾ä¸­è´Ÿåœ†è§’的例å­ã€‚) - + 这里比较一下由矩形工具产生的圆角正方形和由星形工具产生的圆角正四边形: - + 倒圆的多边形 - + 倒圆的矩形 - + å¯ä»¥çœ‹åˆ°ï¼Œåœ†è§’矩形由边和圆角构æˆï¼Œè€Œåœ†è§’多边形和星形则没有边,从角的顶点圆滑过渡到底端的点。Inkscape通过在å„个顶点产生切线方å‘一致的Besizer曲线æ¥å¹³æ»‘星形(正多边形)。(将其转为路径åŽï¼Œç”¨èŠ‚ç‚¹å·¥å…·å¯ä»¥çœ‹å‡ºæ¥ã€‚) - + 控制æ ä¸­çš„圆角Rounded傿•°æ˜¯åˆ‡çº¿ç›¸å¯¹äºŽå¤šè¾¹å½¢/星形的边的长度的比例。为负值时改å˜åˆ‡çº¿çš„æ–¹å‘。其值介于0.2-0.4时是一个“正常â€çš„åœ†è§’ï¼Œå…¶å®ƒå€¼å°†ä¼šäº§ç”Ÿå¤æ‚ã€ä¼˜ç¾Žçš„图案。对于星形,圆角数值过大时曲线沿控制柄延伸很远。下é¢çš„例å­ç»™å‡ºäº†ä¸€äº›æ•°å€¼å¯¹åº”的图案: - - - - - - - - - - - - - - 0.25 - 0.25 - 0.25 - 0.37 - - 0.43 - 3.00 - -3.00 - - 0.41 - 5.43 - 1.85 - 0.21 - -3.00 - - -0.43 - - -8.94 - - 0.39 - + + + + + + + + + + + + + + 0.25 + 0.25 + 0.25 + 0.37 + + 0.43 + 3.00 + -3.00 + + 0.41 + 5.43 + 1.85 + 0.21 + -3.00 + + -0.43 + + -8.94 + + 0.39 + 如果希望星形的角上尖é”而底部平滑或相å,å¯ä»¥é€šè¿‡å¯¹æ˜Ÿå½¢åš åç§»offset (Ctrl+J)æ¥å®žçŽ°ï¼š - - - - 原始星形 - å…³è”å移,å‘内 - å…³è”å移,å‘外 - + + + + 原始星形 + å…³è”å移,å‘内 + å…³è”å移,å‘外 + Shift+drag拖动控制柄是是调节圆角的最精细的方法之一,å¯ä»¥å¤„ç†å¾—很好。 - + 为了模仿真实的形状,Inkscapeå¯ä»¥å¯¹æ˜Ÿå½¢å’Œå¤šè¾¹å½¢åšéšæœºåŒ–randomize处ç†ã€‚è½»å¾®çš„éšæœºä½¿å½¢çŠ¶çš„è§„åˆ™æ€§ä¸‹é™ï¼Œæ›´éšæ„ï¼Œæ›´æœ‰è¶£ï¼›è€Œæ›´å¼ºçš„éšæœºåˆ™å¯ä»¥äº§ç”Ÿæ— æ³•é¢„æµ‹çš„â€œç–¯ç‹‚â€æ•ˆæžœã€‚ å…·æœ‰åœ†è§’çš„æ˜Ÿå½¢éšæœºåŒ–åŽä»ç„¶ä¿æŒåœ†è§’。其中的一些技巧: - - + + Alt+dragåˆ‡å‘æ‹–åŠ¨æŽ§åˆ¶æŸ„ï¼Œäº§ç”Ÿéšæœºæ•ˆæžœã€‚ - - + + Alt+clickå–æ¶ˆéšæœºæ•ˆæžœã€‚ - + å½“ç»˜åˆ¶æˆ–æ‹–åŠ¨æŽ§åˆ¶æŸ„éšæœºåŒ–星形时,形状会“抖动â€ï¼Œå› ä¸ºæŽ§åˆ¶æŸ„çš„æ¯ä¸ªä½ç½®éƒ½å¯¹åº”一ç§å”¯ä¸€çš„éšæœºåŒ–效果。ä¸ä½¿ç”¨Alt,仅移动控制柄,则在当å‰çš„éšæœºåŒ–æ°´å¹³ä¸Šé‡æ–°äº§ç”Ÿä¸€ç§éšæœºåŒ–æ•ˆæžœï¼Œä½¿ç”¨Altï¼Œæ‹–åŠ¨æŽ§åˆ¶æŸ„æ—¶ï¼Œä¿æŒå½“å‰çš„éšæœºåŒ–效果,仅改å˜éšæœºåŒ–çš„ç¨‹åº¦ã€‚ä¸‹é¢çš„æ˜Ÿå½¢å…·æœ‰ç›¸åŒçš„傿•°ï¼Œä»…略微移动控制柄,具有ä¸åŒçš„éšæœºåŒ–效果(éšæœºåŒ–程度0.1)。 - - - - - - + + + + + + 䏋颿˜¯ä¸Šå›¾ä¸­ä¸­é—´çš„æ˜Ÿå½¢ï¼Œä½†éšæœºåŒ–ç¨‹åº¦ä»‹äºŽ-0.2到0.2: - +0.2 - +0.1 - 0 - -0.1 - -0.2 - - - - - - + +0.2 + +0.1 + 0 + -0.1 + -0.2 + + + + + + Alt+drag拖动该行中间星形的控制柄,å¯ä»¥çœ‹åˆ°å®ƒå¯ä»¥å˜å½¢æˆä¸ºä¸¤è¾¹çš„形状。 - + 在你自己的工作中,你将会å‘çŽ°éšæœºåŒ–星形具有的å„ç§ç”¨é€”,但我个人尤其喜欢这ç§åƒå˜å½¢è™«å’Œå‡¸å‡¹ä¸å¹³çš„æ˜Ÿçƒè¡¨é¢ä¸€æ ·å……满幻想的图案: - - - - - - - - - - - 螺旋线 + + + + + + + + + + + 螺旋线 - + Inkscape中的螺旋线是一ç§çµæ´»çš„形状,尽管ä¸åƒæ˜Ÿå½¢å·¥å…·é‚£æ ·å¸å¼•äººï¼Œæœ‰æ—¶ä¹Ÿæœ‰å¾ˆå¤§çš„ç”¨é€”ã€‚èžºæ—‹çº¿åƒæ˜Ÿå½¢ä¸€æ ·ï¼Œä¹Ÿä»Žä¸­å¿ƒç»˜åˆ¶ï¼Œç¼–辑也是相对于中心的, - - + + Ctrl+dragä¿æŒè§’度为15的整数å€ã€‚ - + 画好åŽï¼Œèžºæ—‹çº¿æœ‰ä¸¤ä¸ªæŽ§åˆ¶æŸ„,分别ä½äºŽå†…部的起点和终点。拖动时都å¯ä»¥æ”¹å˜èžºæ—‹çš„角度(增å‡åœˆæ•°ï¼‰ã€‚其它的æ“作技巧: - + 外部控制柄: - - + + Shift+drag相对于中心缩放/æ—‹è½¬ï¼ˆä¸æ”¹å˜èžºæ—‹çš„角度)。 - - + + Alt+drag改å˜èžºæ—‹è§’æ—¶ä¿æŒåŠå¾„ä¸å˜ã€‚ - + 内部控制柄: - - + + Alt+drag竖直拖动改å˜å‘散度,å‘中心汇èš/分散。 - - + + Alt+clické‡è®¾èžºæ—‹å‘散度。 - - + + Shift+click将内部控制柄移动到螺旋线的中心。 - + èžºæ—‹çº¿çš„å‘æ•£åº¦divergence用æ¥è¡¡é‡å…¶èžºæ—‹çš„éžçº¿æ€§ç¨‹åº¦ã€‚值为1时,为标准的螺旋线;å°äºŽ1(Alt+drag å‘上),边缘密集,大于1(Alt+drag å‘下),中心密集: - 0.2 - 0.5 - 6 - 2 - 1 - - - - - - + 0.2 + 0.5 + 6 + 2 + 1 + + + + + + 螺旋线的最大圈数为1024。 - + 椭圆工具ä¸ä»…å¯ä»¥äº§ç”Ÿæ¤­åœ†ï¼Œä¹Ÿå¯ä»¥äº§ç”Ÿåœ†å¼§ï¼ˆå…·æœ‰å¸¸æ›²çŽ‡ï¼‰ï¼Œèžºæ—‹çº¿åˆ™å¯ä»¥äº§ç”Ÿæ›²çŽ‡å¹³æ»‘æ”¹å˜çš„æ›²çº¿ã€‚与普通的Bezier曲线相比,圆弧和螺旋线更方便,å¯ä»¥é𿄿”¹å˜é•¿åº¦ï¼ˆæ‹–动控制柄),而ä¸ä¼šå½±å“åˆ°å…¶å½¢çŠ¶ã€‚èžºæ—‹çº¿é»˜è®¤æ²¡æœ‰å¡«å……ï¼ŒåŠ ä¸Šå¡«å……ï¼Œå–æ¶ˆè½®å»“线,也å¯ä»¥äº§ç”Ÿä¸€äº›æœ‰è¶£çš„æ•ˆæžœã€‚ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + 最有趣的是,轮廓线为点时产生的效果:å‘内旋转和(点或短线)等间隔分布å¯ä»¥ç»„åˆæˆå¾ˆä¼˜ç¾Žçš„æ³¢çº¹æ•ˆæžœï¼š - - - - - å°ç»“ + + + + + å°ç»“ - + Inkscape形状工具的功能éžå¸¸å¼ºå¤§ã€‚有时间请注æ„多加练习,在实际的设计工作中他们ä¸ä¼šè®©ä½ å¤±æœ›çš„。而且,矢é‡ç»˜å›¾ä¸­å½¢çŠ¶å·¥å…·é€šå¸¸æ¯”è·¯å¾„å·¥å…·ä½¿ç”¨èµ·æ¥æ›´å¿«é€Ÿï¼Œç¼–è¾‘èµ·æ¥æ›´æ–¹ä¾¿ã€‚如果你对这些工具有一些改进的建议,请与开å‘人员è”系。 - + diff --git a/share/tutorials/tutorial-shapes.zh_TW.svg b/share/tutorials/tutorial-shapes.zh_TW.svg index cc15f43aa..0b26db0e0 100644 --- a/share/tutorials/tutorial-shapes.zh_TW.svg +++ b/share/tutorials/tutorial-shapes.zh_TW.svg @@ -51,336 +51,336 @@ é€™ç¯‡æ•™å­¸å°‡æœƒè§£èªªå››ç¨®å½¢ç‹€å·¥å…·ï¼šçŸ©å½¢ã€æ©¢åœ“å½¢ã€æ˜Ÿå½¢å’Œèžºæ—‹ã€‚我們會示範 Inkscape å„種形狀的功能和說明這些工具該如何使用和何時該使用。 - + 使用 Ctrl+æ–¹å‘éµã€æ»‘é¼ æ»¾è¼ªæˆ–æŒ‰è‘—æ»‘é¼ ä¸­éµæ‹–曳å¯å‘下æ²å‹•é é¢ã€‚關於建立ã€é¸å–和改變物件的基本方法,請閱讀 說明 > 指導手冊 中的基本教學。 - + Inkscape 有四種è¬ç”¨çš„形狀工具,æ¯ç¨®å·¥å…·éƒ½æœ‰å»ºç«‹å’Œç·¨è¼¯è‡ªå·±å½¢ç‹€é¡žåž‹çš„功能。形狀屬於一種物件,所以你能用ç¨ç‰¹çš„æ–¹å¼ä¾†ä¿®æ”¹å½¢ç‹€çš„æ¨£å¼ï¼Œä½¿ç”¨å¯æ‹–曳的控制點和數字形å¼çš„åƒæ•¸ä¾†æ±ºå®šå½¢ç‹€çš„外觀。 - + 例如,你å¯ä»¥æ”¹è®Šä¸€å€‹æ˜Ÿå½¢çš„尖角數ã€é•·åº¦ã€è§’度ã€åœ“角化程度...ç­‰ — 但是星形ä»ç„¶æ˜¯æ˜Ÿå½¢ã€‚形狀比起簡單的路徑比較有 â€œä¾·é™æ€§â€œï¼Œä½†å½¢ç‹€ä»ç„¶å¾ˆæœ‰è¶£ä¸”很有用。你å¯éš¨æ™‚將形狀轉æˆè·¯å¾‘ (Ctrl+Shift+C),但無法逆å‘轉æ›å›žå½¢ç‹€ã€‚ - + å½¢ç‹€å·¥å…·åˆ†ç‚ºçŸ©å½¢ã€æ©¢åœ“å½¢ã€æ˜Ÿå½¢å’Œèžºæ—‹å½¢ã€‚我們先大致瞭解形狀工具的使用方å¼ï¼›ç„¶å¾Œå†æ·±å…¥æŽ¢è¨Žæ¯ç¨®å½¢ç‹€é¡žåž‹çš„細節。 - - 一般技巧 + + 一般技巧 - + ä½¿ç”¨å°æ‡‰çš„工具在畫布上拖曳å¯å»ºç«‹ä¸€å€‹æ–°å½¢ç‹€ã€‚一旦建立形狀 (åªè¦æ˜¯å½¢ç‹€è¢«é¸å–),便會顯示白色方塊形狀記號作為它的控制點,所以你拖動這些控制點就能直接進行編輯。 - + 四種形狀在使用形狀工具時都會顯示它們的控制點,與使用節點工具 (F2) 時一樣。當你的滑鼠åœç•™åœ¨æŽ§åˆ¶é»žä¸Šæ™‚ï¼Œç¨‹å¼æœƒåœ¨ç‹€æ…‹åˆ—告訴使用者當拖曳或點擊會有什麼ä¸åŒçš„修改效果。 - + åŒæ¨£åœ°ï¼Œæ¯ç¨®å½¢ç‹€å·¥å…·æœƒåœ¨å·¥å…·æŽ§åˆ¶åˆ—é¡¯ç¤ºå®ƒçš„åƒæ•¸ (使–¼ç•«å¸ƒä¸Šæ–¹çš„æ©«å‘ä½ç½®)。通常控制列上有一些數值輸入欄和一個å¯é‡è¨­ç‚ºé è¨­å€¼çš„æŒ‰éˆ•。當é¸å–ç›®å‰å·¥å…·æ‰€å±¬çš„å½¢ç‹€æ™‚ï¼Œç·¨è¼¯æŽ§åˆ¶åˆ—ä¸Šçš„æ•¸å€¼å¯æ”¹è®Šé¸å–的形狀。 - + ç¨‹å¼æœƒè¨˜ä½å·¥å…·æŽ§åˆ—的任何變更,並且會用於下次所繪製的物件上。舉例來說,你改變星形的尖角數é‡ä¹‹å¾Œï¼Œç¹ªè£½ä¸€å€‹æ˜Ÿå½¢æœƒæœ‰ç›¸åŒçš„尖角數。此外,還能簡單地é¸å–一個形狀傳é€å®ƒçš„åƒæ•¸åˆ°å·¥å…·æŽ§åˆ¶åˆ—ï¼Œä¸¦å°‡é€™äº›åƒæ•¸å€¼å¥—用到新建立的åŒé¡žåž‹å½¢ç‹€ã€‚ - + 當使用形狀工具時,在形狀上點擊滑鼠左éµå¯é¸å–物件。Ctrl+點擊 (é¸å–群組中的形狀) å’Œ Alt+點擊 (é¸å–下é¢çš„形狀) 也å¯ç•¶æˆé¸å–工具使用。Esc éµ å¯å–消é¸å–。 - - 矩形 + + 矩形 - + 矩形是最簡單的,但或許也是在設計和æ’畫中最常見的形狀。Inkscape 試著讓建立和編輯矩形盡å¯èƒ½è®Šå¾—ç°¡å–®ã€æ–¹ä¾¿ã€‚ - + 按 F4 或點擊工具箱上的按鈕來切æ›åˆ°çŸ©å½¢å·¥å…·ã€‚沿著這個è—色矩形的邊繪製一個新矩形: - 畫在這裡 - - + 畫在這裡 + + 接著,繼續使用矩形工具,然後é‹ç”¨é»žæ“Šå¾žä¸€å€‹çŸ©å½¢åˆ‡æ›é¸å–å¦ä¸€å€‹ã€‚ - + 矩形繪製快æ·éµï¼š - - + + 按著 Ctrl,å¯ç¹ªè£½æ­£æ–¹å½¢æˆ–整數比例 (2:1ã€3:1 ç­‰) 的矩形。 - - + + 按著 Shift,以起始點作為中心來繪製。 - + 正如你所見,被é¸å–的矩形 (剛繪製好的矩形都會呈é¸å–狀態) 在三個角上會顯示三個控制點。實際上有四個控制點,但如果éžåœ“角矩形其中兩個 (å³ä¸Šè§’) 會é‡ç–Šåœ¨ä¸€èµ·ã€‚其中兩個是圓角控制點;其餘兩個 (左上角和å³ä¸‹è§’) 是大å°èª¿æ•´æŽ§åˆ¶é»žã€‚ - + 先來看圓角控制點。抓ä½å…¶ä¸­ä¸€å€‹ä¸¦å¾€ä¸‹æ‹–動。矩形的四個角全部都會變æˆåœ“角,而你å¯ä»¥çœ‹åˆ°ç¬¬äºŒå€‹åœ“角控制點 — 在原來的ä½ç½®ä¸Šã€‚é€™æ™‚å€™æ˜¯åœ“å½¢çš„åœ“è§’ã€‚å¦‚æžœä½ æƒ³è®“åœ“è§’æˆæ©¢åœ“形,便å‘左移動其他控制點。 - + 下圖,å‰é¢å…©å€‹çŸ©å½¢ç‚ºåœ“形圓角,而其餘兩個則是橢圓形圓角: - 橢圓形圓角 - 圓形圓角 - - - - - + 橢圓形圓角 + 圓形圓角 + + + + + 在使用矩形工具的情形下,點擊這些矩形來é¸å–,並觀察它們的圓角控制點。 - + 常會需è¦è®“整個形體內的圓角åŠå¾‘和形狀固定ä¸è®Šï¼Œå³ä½¿çŸ©å½¢çš„大å°ä¸åŒ (想åƒä¸€ä¸‹åœ–表中å„種大å°çš„圓角方形)。Inkscape 能輕易地åšåˆ°ã€‚切æ›ç‚ºé¸å–工具;在工具控制列上有四個開關按鈕,左邊數來第二個呈ç¾å…©å€‹åŒå¿ƒåœ“角的圖案。這個開關按鈕å¯è®“你控制矩形縮放時圓角是å¦éš¨è‘—縮放。 - + 例如,å†è£½ä¸‹é¢åŽŸå§‹çš„ç´…è‰²çŸ©å½¢ï¼Œç„¶å¾Œé—œé–‰ã€Œç¸®æ”¾åœ“è§’ã€æŒ‰éˆ•的情æ³ä¸‹ç¸®æ”¾å¹¾æ¬¡ã€ä¸Šä¸‹ç§»å‹•ã€æ”¹è®Šæ¯”例: - ç¸®æ”¾åœ“è§’çŸ©å½¢é—œé–‰åŒæ™‚ "縮放圓角" - - - - - - - - - + ç¸®æ”¾åœ“è§’çŸ©å½¢é—œé–‰åŒæ™‚ "縮放圓角" + + + + + + + + + å¯ç™¼ç¾åœ¨æ‰€æœ‰çŸ©å½¢ä¸­åœ“角的大å°å’Œå½¢ç‹€éƒ½ä¸æœƒæ”¹è®Šï¼Œæ‰€ä»¥å…¨éƒ¨å³ä¸Šè§’的圓角完全é‡ç–Šåœ¨ä¸€èµ·ã€‚全部點線邊框的è—色矩形都是從紅色矩形用é¸å–工具進行縮放得到的,且ä¸ä½œä»»ä½•圓角控制點的手動調整。 - + ç¾åœ¨ä¾†åšå€‹æ¯”è¼ƒï¼Œä¸‹é¢æœ‰åŒæ¨£çš„組æˆä½†åœ¨é–‹å•Ÿã€Œç¸®æ”¾åœ“è§’ã€æŒ‰éˆ•的情形下建立: - ç¸®æ”¾åœ“è§’çŸ©å½¢é–‹å•ŸåŒæ™‚ "縮放圓角" - - - - - - - - - + ç¸®æ”¾åœ“è§’çŸ©å½¢é–‹å•ŸåŒæ™‚ "縮放圓角" + + + + + + + + + 這時æ¯å€‹çŸ©å½¢çš„圓角大å°çš†ä¸åŒï¼Œä¸”å³ä¸Šè§’完全沒有å°é½Š (放大畫é¢ä¾†è§€å¯Ÿ)。這個和你將原本的矩形轉為路徑 (Ctrl+Shift+C) 然後縮放大å°çš„æ•ˆæžœä¸€æ¨£ (看起來)。 - + 䏋颿˜¯çŸ©å½¢åœ“角控制點的快æ·éµï¼š - - + + 按著 Ctrl 拖曳滑鼠å¯ç”¢ç”Ÿå…¶ä»–ç­‰åŠå¾‘圓角 (圓形圓角)。 - - + + Ctrl+點擊 ä¸éœ€æ‹–動滑鼠便å¯ç”¢ç”Ÿå…¶ä»–的等åŠå¾‘圓角。 - - + + Shift+點擊 å¯ç§»é™¤åœ“角。 - + ä½ å¯èƒ½å·²ç¶“注æ„到矩形工具列上會顯示é¸å–矩形的水平 (Rx) 和垂直 (Ry) 圓角åŠå¾‘,讓你å¯ä»¥æº–確地設定圓角åŠå¾‘和使用å„種長度單ä½ã€‚而無圓角按鈕的作用是 — 從é¸å–的矩形上移除圓角。 - + 這些æ“作有一個é‡è¦çš„優點那就是å¯ä»¥ä¸€æ¬¡æ”¹è®Šè¨±å¤šçŸ©å½¢ã€‚ä¾‹å¦‚ï¼Œå¦‚æžœä½ æƒ³è¦æ”¹è®Šåœ–層中全部的矩形,åªè¦æŒ‰ Ctrl+A (å…¨é¸) 並在控制列上設定你è¦çš„åƒæ•¸ã€‚如有é¸å–到其他éžçŸ©å½¢çš„物件,會自動忽略那些物件 — åªæœ‰çŸ©å½¢æœƒç”¢ç”Ÿè®ŠåŒ–。 - + ç¾åœ¨æˆ‘們來看矩形的大å°èª¿æ•´æŽ§åˆ¶é»žã€‚ä½ å¯èƒ½æƒ³çŸ¥é“既然我們å¯ç”¨é¸å–工具縮放矩形為什麼還需è¦å¤§å°èª¿æ•´æŽ§åˆ¶é»žï¼Ÿ - + é¸å–工具的å•題在於水平和垂直縮放都是沿著文件é é¢çš„æ–¹å‘。相較之下,矩形的大å°èª¿æ•´æŽ§åˆ¶é»žæ˜¯æ²¿è‘—矩形的邊進行縮放,å³ä½¿æ˜¯æ—‹è½‰æˆ–傾斜矩形。例如,先試著用é¸å–工具調整這個矩形的大å°ç„¶å¾Œå†ç”¨çŸ©å½¢å·¥å…·èª¿æ•´æŽ§åˆ¶é»žï¼š - - + + 由於有兩個大å°èª¿æ•´æŽ§åˆ¶é»žï¼Œä½ å¯ä»¥å¾€ä»»ä½•æ–¹å‘調整大å°ç”šè‡³æ²¿è‘—矩形的邊移動。大å°èª¿æ•´æŽ§åˆ¶é»žæœƒä¸€ç›´å›ºå®šåœ“è§’åŠå¾‘。 - + 䏋颿˜¯å¤§å°èª¿æ•´æŽ§åˆ¶é»žçš„å¿«æ·éµï¼š - - + + 按著 Ctrl 拖曳å¯è²¼é½ŠçŸ©å½¢çš„邊或å°è§’線進行。æ›å¥è©±èªªï¼ŒCtrl 會固定矩形的寬度ã€é«˜åº¦æˆ–寬高比 (å³ä¾¿æ—‹è½‰æˆ–å‚¾æ–œè‡ªå·±çš„åæ¨™)。 - + 䏋颿œ‰ä¸€å€‹ç›¸åŒçš„矩形,按著 Ctrl 拖曳時讓大å°èª¿æ•´æŽ§åˆ¶é»žä¿æŒä»¥ç°è‰²è™›ç·šæŒ‡ç¤ºçš„æ–¹å‘移動 (試試看): - + - - 矩形的貼齊 - 按 Ctrl 拖動大å°èª¿æ•´æŽ§åˆ¶é»ž - + + 矩形的貼齊 - 按 Ctrl 拖動大å°èª¿æ•´æŽ§åˆ¶é»ž + 傾斜和旋轉一個矩形,然後å†è£½çŸ©å½¢ä¸¦ç”¨æŽ§åˆ¶é»žèª¿æ•´å¤§å°ï¼Œä¾¿èƒ½è¼•易地製作立體效果: - - - - - - - - - - - - - - - - - - - - - 3 個原始矩形 - 一些由控制點調整大å°çš„複製之矩形,大部分按著 Ctrl æ“作 - + + + + + + + + + + + + + + + + + + + + + 3 個原始矩形 + 一些由控制點調整大å°çš„複製之矩形,大部分按著 Ctrl æ“作 + @@ -451,615 +451,615 @@ - - - - - - - - - - - - - - - - - - - - - - - - 橢圓形 + + + + + + + + + + + + + + + + + + + + + + + + 橢圓形 - + 橢圓形工具 (F5) 能建立橢圓形和圓形,也å¯è½‰æ›ç‚ºæ‰‡å½¢æˆ–弧。橢圓形工具的快æ·éµèˆ‡çŸ©å½¢å·¥å…·ç›¸åŒï¼š - - + + 按著 Ctrl å¯ç¹ªè£½åœ“形或整數比例 (2:1ã€3:1 ç­‰) 的橢圓形。 - - + + 按著 Shift,以起始點作為中心來繪製。 - + 讓我們來探索橢圓形控制點的特性。é¸å–下é¢çš„æ©¢åœ“形: - - + + 與之å‰ä¸€æ¨£ï¼Œä½ æœƒçœ‹åˆ°ä¸‰å€‹æŽ§åˆ¶é»žï¼Œä½†å¯¦éš›ä¸Šæœ‰å››å€‹ã€‚最å³é‚Šçš„æŽ§åˆ¶é»žæ˜¯å…©å€‹é‡ç–Šçš„æŽ§åˆ¶é»žè®“ä½ å¯ä»¥ã€Œæ‰“é–‹ã€é€™å€‹æ©¢åœ“形。拖動最å³é‚Šçš„æŽ§åˆ¶é»žï¼Œç„¶å¾Œæ‹–動在剛剛控制點底下的控制點å¯å¾—到å„種餅形的扇形或弧形: - - - - - - - - + + + + + + + + 拖曳時游標在橢圓形的外é¢ç§»å‹•å¯å¾—到一個扇形 (一個弧形加上兩個åŠå¾‘);拖曳時游標在橢圓形的內部移動則å¯å¾—到一個弧形。上é¢çš„左邊有 4 個扇形而å³é‚Šæœ‰ 3 個弧形。注æ„那些弧形是未閉åˆçš„形狀,也就是說邊框沿著橢圓形但弧形的兩端點沒有接åˆåœ¨ä¸€èµ·ã€‚如果你移除填色åªç•™ä¸‹é‚Šæ¡†å¯è®“這個特徵更明顯: - + 15 - 扇形 - å¼§ - - - - - - - - - - - - - - - - - - - - + 扇形 + å¼§ + + + + + + + + + + + + + + + + + + + + 注æ„左邊狹窄線段的扇å­å½¢ç‹€ç¾¤çµ„。按著 Ctrl 利用控制點的角度æ‰å–å¯è¼•易地製作出這些扇形。弧/扇形控制點的快æ·éµï¼š - - + + 按著 Ctrl æ‹–æ›³æ™‚æœƒä»¥æ¯æ¬¡ 15 度改變控製點。 - - + + Shift+點擊 å¯è£½ä½œå®Œæ•´çš„æ©¢åœ“å½¢ (䏿˜¯å¼§æˆ–扇形)。 - + 在 Inkscape çš„å好設定 (行為 > 階層數分é ) 坿›´æ”¹è²¼é½Šè§’度。 - + 其餘兩個控制點用於以中心點調整橢圓形的大å°ã€‚這兩個控制點的快æ·éµæ“作類似矩形的圓角控制點: - - + + 按著 Ctrl 拖曳å¯è£½ä½œåœ“å½¢ (使åŠå¾‘相等)。 - - + + Ctrl+點擊 ä¸éœ€æ‹–動滑鼠å¯ä½¿æ©¢åœ“形變æˆåœ“形。 - + 如åŒçŸ©å½¢å¤§å°èª¿æ•´æŽ§åˆ¶é»žï¼Œé€™äº›æ©¢åœ“形控制點å¯åœ¨è‡ªå·±çš„忍™å…§èª¿æ•´é«˜åº¦å’Œå¯¬åº¦ã€‚這表示旋轉或傾斜éŽçš„æ©¢åœ“形能輕易地沿著原本的軸線繼續伸長或壓縮。試著用控制點調整這些橢圓形的大å°ï¼š - - - - - - - - 星形 + + + + + + + + 星形 - + 星形工具是 Inkscape 中最複雜也是最令人興奮的形狀。如果你想讓你的朋å‹é«”é©— Inkscape 的奧妙,讓他們玩這個工具。它有無窮的樂趣 — æœƒè®“äººå¾¹åº•ä¸Šç™®ï¼ - + 星形工具能建立兩種類似但外觀ä¸åŒçš„物件:星形和多邊形。一個星形有兩個控制點,控制點的ä½ç½®æ±ºå®šæ˜Ÿå½¢å°–角的長度和形狀;而一個多邊形僅有一個控制點,當拖曳這個控制點å¯ç°¡å–®åœ°æ—‹è½‰å’Œèª¿æ•´å¤šé‚Šå½¢çš„大å°ï¼š - + 星形 - + 多邊形 - + 在星形工具的控制列上,å‰å…©å€‹æŒ‰éˆ•æ˜¯æŽ§åˆ¶æ˜Ÿå½¢ç¹ªè£½æ–¹å¼ (普通多邊形或星形)。下一項,數字輸入欄å¯è¨­å®šæ˜Ÿå½¢æˆ–å¤šé‚Šå½¢çš„é ‚é»žæ•¸ç›®ã€‚é€™é …åƒæ•¸åªèƒ½ç¶“由控制列進行編輯。容許範åœå¾ž 3 到 1024,但是如果你的電腦é‹ç®—èƒ½åŠ›è¼ƒå·®ä¸æ‡‰è©²åšè©¦éŽå¤§çš„æ•¸å€¼ (æ¯”å¦‚èªªï¼Œè¶…éŽ 200)。 - + 當繪製一個新的星形或多邊形, - - + + 按著 Ctrl æ‹–æ›³å¯æ¯æ¬¡ä»¥ 15 度增加角度。 - + 當然,星形較為有趣 (雖然實際上多邊形比較有用)。星形的兩個控制點有截然ä¸åŒçš„功能。第一個控制點 (䏀開始使–¼é ‚點上,å³åœ¨æ˜Ÿå½¢çš„凸角上) å¯ä½¿æ˜Ÿå½¢çš„光芒變長或變短,但是當你旋轉它時 (ç›¸å°æ–¼å½¢ç‹€çš„中心點),å¦ä¸€å€‹æŽ§åˆ¶é»žä¹Ÿæœƒè·Ÿè‘—旋轉。這表示你ä¸èƒ½ç”¨é€™å€‹æŽ§åˆ¶é»žä¾†å‚¾æ–œæ˜Ÿå½¢çš„光芒。 - + å¦ä¸€å€‹æŽ§åˆ¶é»ž (䏀開始使–¼å…©å€‹é ‚點之間的凹角上) 能任æ„地沿徑å‘和切線方å‘ç§»å‹•ï¼Œè€Œä¸æœƒå½±éŸ¿é ‚點的控制點。(事實上,這個控制點å¯ç¶“由移動超éŽå¦ä¸€å€‹æŽ§åˆ¶é»žä½ç½®ä½¿å…¶è®Šæˆé ‚點) 它å¯ä»¥å‚¾æ–œæ˜Ÿå½¢çš„尖角來ç²å¾—å„種樣å¼çš„çµæ™¶ã€æ›¼é™€ç¾…ã€é›ªèŠ±å’Œè±ªè±¬ï¼š - - - - - - - - - - + + + + + + + + + + 如果你è¦çš„åªæ˜¯ç°¡å–®ã€è¦å‰‡çš„æ˜Ÿå½¢è€Œä¸æ˜¯é€™ç¨®èŠ±é‚Šå‰µä½œï¼Œä½ å¯ä»¥è®“星形ä¸è¦å‚¾æ–œï¼š - - + + 按著 Ctrl æ‹–æ›³ä½¿æ˜Ÿå½¢å…‰èŠ’å®Œå…¨åœ°ä¿æŒåŠå¾‘æ–¹å‘ (無傾斜)。 - - + + Ctrl+點擊 ä¸éœ€æ‹–å‹•å¯ç§»é™¤æ˜Ÿå½¢çš„傾斜。 - + 補充一點有關畫布上拖曳控制點的æ“作,控制列上有輪輻比率輸入欄å¯å®šç¾©å…©å€‹æŽ§åˆ¶é»žåˆ°ä¸­å¿ƒé»žè·é›¢çš„æ¯”值。 - + Inkscape 的星形工具還有兩個技巧。在幾何上,多邊形是帶有直線邊和尖角的形狀。實際上會有å„種角度的曲線和圓角化 — 而 Inkscape 也能作出å„種效果。ä¸éŽæ˜Ÿå½¢æˆ–多邊形的圓角化效果與圓角矩形有很大的差異。沒有專屬的控制點來åšé€™äº›è®ŠåŒ–,但 - - + + 按著 Shift ä¸¦æ²¿åˆ‡ç·šæ–¹å‘æ‹–曳控制點å¯è®“星形或多邊形圓角化。 - - + + 按著 Shift 並點擊控制點å¯ç§»é™¤åœ“角化。 - + 「切線方å‘ã€è¡¨ç¤ºèˆ‡åŠå¾‘垂直的方å‘。如果你按著 Shift 繞著中心點逆時é˜ã€Œæ—‹è½‰ã€æŽ§åˆ¶é»žï¼Œå¯å¾—åˆ°æ­£åœ“è§’ï¼›é †æ™‚é˜æ—‹è½‰ï¼Œå‰‡å¯å¾—到負圓角。(看下é¢çš„負圓角範例) - + 比較一下圓角正方形 (矩形工具) 和圓角四邊形 (星形工具) 的差別: - + 圓角多邊形 - + 圓角矩形 - + 正如你所見,圓角矩形有直線段的邊和圓形 (一般為橢圓形) 圓角,而圓角多邊形或星形整體上沒有直線段;曲率從最大值 (頂點) 平順地變化為最å°å€¼ (頂點間的中途)。Inkscape 藉由將åŒä¸€ç›´ç·šçš„è²èŒ²åˆ‡ç·šåŠ å…¥åˆ°å½¢ç‹€çš„æ¯å€‹ç¯€é»žè¼•易地產生這種效果 (如果把形狀轉æˆè·¯å¾‘並用節點工具查看路徑å¯è¦‹åˆ°è©³ç´°æƒ…å½¢)。 - + åœ¨æŽ§åˆ¶åˆ—çš„åœ“è§’åŒ–åƒæ•¸èƒ½è®“你調整切線長度和多邊形/æ˜Ÿå½¢é‚Šé•·çš„æ¯”å€¼ã€‚é€™å€‹åƒæ•¸å¯ä»¥æ˜¯è² å€¼ï¼Œé€™æ¨£ä½¿åˆ‡ç·šçš„æ–¹å‘å轉。在 0.2 到 0.4 之間的數值會得到「一般性ã€çš„åœ“è§’é¡žåž‹ï¼›å…¶ä»–æ•¸å€¼å‰‡å‚¾å‘æ–¼ç”¢ç”Ÿå„ªç¾Žã€éŒ¯ç¶œè¤‡é›œä¸”å®Œå…¨ç„¡æ³•é æ¸¬çš„åœ–æ¡ˆã€‚åœ“è§’åŒ–åƒæ•¸å¤§çš„æ˜Ÿå½¢å¯èƒ½æœƒå»¶ä¼¸åˆ°é›¢æŽ§åˆ¶é»žå¾ˆé çš„åœ°æ–¹ã€‚ä¸‹é¢æœ‰ä¸€äº›ç¯„例,æ¯å€‹åœ–éƒ½æœ‰æ¨™ç¤ºæ˜Ÿå½¢çš„åœ“è§’åŒ–åƒæ•¸å€¼ï¼š - - - - - - - - - - - - - - 0.25 - 0.25 - 0.25 - 0.37 - - 0.43 - 3.00 - -3.00 - - 0.41 - 5.43 - 1.85 - 0.21 - -3.00 - - -0.43 - - -8.94 - - 0.39 - + + + + + + + + + + + + + + 0.25 + 0.25 + 0.25 + 0.37 + + 0.43 + 3.00 + -3.00 + + 0.41 + 5.43 + 1.85 + 0.21 + -3.00 + + -0.43 + + -8.94 + + 0.39 + 如果你想讓星形的尖角呈ç¾å°–銳但凹角部份平滑或者åéŽä¾†ï¼Œæœ€ç°¡å–®çš„æ–¹æ³•是藉由åç§» (Ctrl+J) 來锿ˆï¼š - - - - 原始星形 - 連çµå移,內縮 - 連çµå移,外擴 - + + + + 原始星形 + 連çµå移,內縮 + 連çµå移,外擴 + Shift+拖曳星形的控制點是 Inkscape 調整圓角已知的最佳方å¼ä¹‹ä¸€ã€‚但ä»å¯ä»¥è®Šå¾—更好。 - + 為了摹擬更接近真實世界的的形狀,Inkscape 能使星形和多邊形隨機化 (å³éš¨æ©Ÿæ‰­æ›²)。輕微的隨機化會使星形有點ä¸è¦å‰‡ã€æ›´äººæ€§ã€æ›´å¥½çŽ©ï¼›é«˜åº¦éš¨æ©ŸåŒ–å‰‡å¯ç²å¾—å„種瘋狂ä¸å¯é çŸ¥çš„形狀。圓角星形隨機化時ä»ä¿æœ‰å¹³æ»‘åœ“è§’ã€‚ä¸‹é¢æœ‰ç›¸é—œå¿«æ·éµï¼š - - + + ä»¥åˆ‡ç·šæ–¹å‘ Alt+拖曳 控制點來隨機化星形或多邊形。 - - + + Alt+點擊 控制點來移除隨機化。 - + 當你繪製或拖曳控制點編輯隨機化的星形時,星形會出ç¾ã€Œé¡«æŠ–ã€ç¾è±¡æ˜¯å› ç‚ºæ¯å€‹æŽ§åˆ¶é»žéƒ½æœ‰ç¨ä¸€ç„¡äºŒçš„ä½ç½®ç›¸ç•¶æ–¼éƒ½æœ‰è‡ªå·±ç¨ä¸€ç„¡äºŒçš„éš¨æ©ŸåŒ–ã€‚æ‰€ä»¥åœ¨åŒæ¨£çš„隨機化程度下沒有按著 Alt éµç§»å‹•æŽ§åˆ¶é»žæœƒé‡æ–°éš¨æ©ŸåŒ–,當按著 Alt 鵿‹–å‹•æŽ§åˆ¶é»žæ™‚æœƒåœ¨ä¿æŒç›¸åŒéš¨æ©ŸåŒ–效果情形下調整隨機化的程度。下é¢å¹¾å€‹æ˜Ÿå½¢çš„åƒæ•¸å®Œå…¨ä¸€æ¨£ï¼Œä½†æ¯å€‹éƒ½éžå¸¸è¼•å¾®åœ°ç§»å‹•æŽ§åˆ¶é»žä¾†é‡æ–°éš¨æ©ŸåŒ– (隨機化程度始終為 0.1): - - - - - - + + + + + + 而下é¢çš„圖案是上é¢ä¸­é–“çš„æ˜Ÿå½¢ï¼Œå°æ‡‰éš¨æ©ŸåŒ–程度從 -0.2 變為 0.2: - +0.2 - +0.1 - 0 - -0.1 - -0.2 - - - - - - + +0.2 + +0.1 + 0 + -0.1 + -0.2 + + + + + + Alt+拖曳 上é¢ä¸­é–“星形的控制點並觀察它演變為左å³å…©é‚Šçš„æ˜Ÿå½¢åœ–案。 - + ä½ å¯èƒ½å·²ç¶“想到如何é‹ç”¨é€™äº›éš¨æ©ŸåŒ–星形圖案,但我特別喜愛變形蟲外觀的汙點和帶有夢幻色彩的的粗糙表é¢è¡Œæ˜Ÿï¼š - - - - - - - - - - - 螺旋形 + + + + + + + + + + + 螺旋形 - + Inkscape 的螺旋形是多用途的形狀,雖然ä¸å¦‚星形那般地迷人,但有時候éžå¸¸å¥½ç”¨ã€‚èžºæ—‹å½¢åƒæ˜Ÿå½¢ä¸€æ¨£æ˜¯å¾žä¸­å¿ƒé»žç¹ªè£½ï¼›ç·¨è¼¯æ™‚也是一樣。 - - + + Ctrl+拖曳 坿¯æ¬¡ä»¥ 15 度增加角度。 - + 螺旋形在內ã€å¤–çš„ç«¯é»žä¸Šå…·æœ‰å…©å€‹æŽ§åˆ¶é»žã€‚ç•¶æ‹–å‹•é€™å…©å€‹æŽ§åˆ¶é»žæ™‚ï¼Œå¯æ²èµ·æˆ–展開螺旋形。 (å³ã€ŒæŽ¥çºŒã€èžºæ—‹ç·šæ®µï¼Œæ”¹è®Šåœˆæ•¸)。其他快æ·éµï¼š - + 外控制點: - - + + Shift+拖曳 å¯ç¹žè‘—中心點縮放/旋轉 (䏿²èµ·/ä¸å±•é–‹)。 - - + + Alt+拖曳 坿–¼æ²èµ·/展開時鎖定åŠå¾‘。 - + 內控制點: - - + + Alt+垂直拖曳 å¯èšé›†/發散。 - - + + Alt+點擊 å¯é‡è¨­ç™¼æ•£ç¨‹åº¦ã€‚ - - + + Shift+點擊 å¯æŠŠå…§æŽ§åˆ¶é»žç§»å‹•åˆ°ä¸­å¿ƒã€‚ - + 螺旋形的發散程度是指繞圈的éžç·šæ€§ç¨‹åº¦ã€‚ 當等於 1 時,螺旋形為å‡å‹»çš„ï¼›ç•¶å°æ–¼ 1 時 (Alt+拖曳 å¯å‘上),外åœéƒ¨ä»½è¼ƒå¯†é›†ï¼›ç•¶å¤§æ–¼ 1 時 (Alt+拖曳 å¯å‘下),é è¿‘中心的部份較密集: - 0.2 - 0.5 - 6 - 2 - 1 - - - - - - + 0.2 + 0.5 + 6 + 2 + 1 + + + + + + 最大螺旋圈數為 1024。 - + å°±å¦‚åŒæ©¢åœ“形工具ä¸åƒ…å¯ç¹ªè£½æ©¢åœ“也能繪製弧形 (固定曲率的線æ¢)ï¼Œèžºæ—‹å½¢å·¥å…·å°æ–¼è£½ä½œå¹³æ»‘彎曲變化的曲線時éžå¸¸å¥½ç”¨ã€‚和普通的è²èŒ²æ›²ç·šæ¯”較起來,弧形或螺旋常常較為便利,因為你å¯ä»¥è—‰ç”±æ‹–動控制點來沿著曲線變短或變長而ä¸å½±éŸ¿å½¢ç‹€å¤–觀。å¦å¤–,一般繪製出來的螺旋形沒有填色,你å¯åŠ å…¥å¡«è‰²ä¸¦ç§»é™¤é‚Šæ¡†ä¾†ç”¢ç”Ÿæœ‰è¶£çš„æ•ˆæžœã€‚ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + 點狀邊框的螺旋形特別地有趣 — èžåˆå¹³æ»‘的集中形狀和è¦å‰‡çš„å‡å‹»åˆ†ä½ˆå¯è£½ä½œå‡ºå„ªç¾Žçš„æ³¢ç´‹æ¨™èªŒ (點或線段): - - - - - çµè«– + + + + + çµè«– - + Inkscape 的形狀工具是éžå¸¸å¼·å¤§çš„。學習形狀工具的技巧並於空閒時練習使用 — 這會讓你進行設計工作時ç²å¾—益處,因為常常使用形狀會å¯è®“å‘釿’圖創作更快速且更容易修改。如果你有任何改進形狀工具的æ„見,請è¯çµ¡é–‹ç™¼äººå“¡ã€‚ - + diff --git a/share/tutorials/tutorial-tips.be.svg b/share/tutorials/tutorial-tips.be.svg index 3ec36b105..2c0cce348 100644 --- a/share/tutorials/tutorial-tips.be.svg +++ b/share/tutorials/tutorial-tips.be.svg @@ -36,271 +36,274 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - + ::ПÐРÐДЫ - - + + ГÑты падручнік пакажа Ñ€Ð¾Ð·Ð½Ñ‹Ñ Ð¿Ð°Ñ€Ð°Ð´Ñ‹ й штукі, ÑÐºÑ–Ñ ÐºÐ°Ñ€Ñ‹Ñтальнікі вывучылі Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð²Ñ‹ÐºÐ°Ñ€Ñ‹ÑÑ‚Ð°Ð½ÑŒÐ½Ñ Inkscape, а такÑама Ð½ÐµÐºÐ°Ñ‚Ð¾Ñ€Ñ‹Ñ Â«ÑхаваныÑ» магчымаÑьці, ÑÐºÑ–Ñ Ð¼Ð¾Ð³ÑƒÑ†ÑŒ паÑкорыць вашую працу. - - РадыÑльнае разьмÑшчÑньне мазаічных клонаў + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Калі ваш кругавы ўзор патрабуе толькі 3, 4, 6, 8 ці 12 ÑлемÑнтаў, тады можаце паÑпрабаваць ÑымÑтрыю P3, P31M, P3M1, P4, P4M, P6 ці P6M. Яны выдатна працуюць Ñа ÑьнÑжынкамі й падобным. Больш агульны ÑпоÑаб, аднак, пададзены ўнізе. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Выберыце ÑымÑтрыю P1 (проÑты пераноÑ), а потым кампÑнÑуйце пераноÑ, перайшоўшы на ўкладку Зрух Ñ– задаўшы Ðа радок/Зрух па Y Ñ– Ðа Ñлупок/Зрух па X у -100%. ЦÑпер уÑе клоны будуць Ñ€Ð°Ð·ÑŒÐ¼ÐµÑˆÑ‡Ð°Ð½Ñ‹Ñ Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ð° наверÑе арыґінала. УÑÑ‘, што заÑтаецца зрабіць, — перайÑьці на ўкладку Паварот Ñ– задаць пÑўны вугал павароту на Ñлупок, потым Ñтварыце узор з аднаго радка й некалькіх Ñлупкоў. Ðапрыклад, воÑÑŒ узор, зроблены з гарызантальнай лініі, з 30 Ñлупкоў, кожны Ñлупок павернуты на 6 ґрадуÑаў: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Выберыце ÑымÑтрыю P1 (проÑты пераноÑ), а потым кампÑнÑуйце пераноÑ, перайшоўшы на ўкладку Зрух Ñ– задаўшы Ðа радок/Зрух па Y Ñ– Ðа Ñлупок/Зрух па X у -100%. ЦÑпер уÑе клоны будуць Ñ€Ð°Ð·ÑŒÐ¼ÐµÑˆÑ‡Ð°Ð½Ñ‹Ñ Ð´Ð°ÐºÐ»Ð°Ð´Ð½Ð° наверÑе арыґінала. УÑÑ‘, што заÑтаецца зрабіць, — перайÑьці на ўкладку Паварот Ñ– задаць пÑўны вугал павароту на Ñлупок, потым Ñтварыце узор з аднаго радка й некалькіх Ñлупкоў. Ðапрыклад, воÑÑŒ узор, зроблены з гарызантальнай лініі, з 30 Ñлупкоў, кожны Ñлупок павернуты на 6 ґрадуÑаў: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Каб з гÑтага атрымаць цыфÑрблÑÑ‚, уÑÑ‘ што трÑба — выразаць ці проÑта перакрыць цÑнтральную чаÑтку ÑžÑÑго круга (каб рабіць лÑÒ‘Ñ–Ñ‡Ð½Ñ‹Ñ Ð°Ð¿Ñрацыі з клонамі Ñпачатку адлучыце Ñ–Ñ…). - - + + Ð¦Ñ–ÐºÐ°Ð²ÐµÐ¹ÑˆÑ‹Ñ ÑÑ„Ñкты можна зрабіць, выкарыÑтоўваючы Ñ– радкі, Ñ– Ñлупкі. ВоÑÑŒ узор з 10 Ñлупкамі й 8 радкамі, з паваротам па 2 ґрадуÑÑ‹ на радок Ñ– 18 ґрадуÑаў на Ñлупок. ÐšÐ¾Ð¶Ð½Ð°Ñ Ò‘Ñ€ÑƒÐ¿Ð° ліній тут — «Ñлупок», такім чынам, ґрупы за 18 ґрадуÑаў адна ад адной, унутры кожнага Ñлупка аÑÐ¾Ð±Ð½Ñ‹Ñ Ð»Ñ–Ð½Ñ–Ñ– Ð¿Ð°Ð´Ð·ÐµÐ»ÐµÐ½Ñ‹Ñ 2 ґрадуÑамі: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Як рабіць разразаньне (на некалькі праÑтакутных абÑÑгаў)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Як рабіць разразаньне (на некалькі праÑтакутных абÑÑгаў)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,39 +311,47 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i вызначнік абÑÑгу -t файл.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - ÐÐµÐ»Ñ–Ð½ÐµÐ¹Ð½Ñ‹Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ñ‹ + + ÐÐµÐ»Ñ–Ð½ÐµÐ¹Ð½Ñ‹Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ñ‹ - - + + Ð’ÑÑ€ÑÑ–Ñ SVG 1.1 не падтрымлівае нелінейных ґрадыентаў (г.зн. ÑÐºÑ–Ñ Ð¼Ð°ÑŽÑ†ÑŒ Ð½ÐµÐ»Ñ–Ð½ÐµÐ¹Ð½Ñ‹Ñ Ð¿ÐµÑ€Ð°Ñ…Ð¾Ð´Ñ‹ між колерамі). Можна, тым Ð½Ñ Ð¼ÐµÐ½Ñˆ, ÑмулÑваць Ñ–Ñ… з дапамогай шматÑпынавых ґрадыентаў. - - + + - Пачніце з проÑтага двухÑпынавага ґрадыенту. Ðдкрыйце Ñ€Ñдактар ґрадыентаў (напр., двойчы пÑтрыкнуўшы па любой ручцы ґрадыенту інÑтрумÑнтам «Òрадыент»). Дадайце новы Ñпын ґрадыенту Ñž ÑÑÑ€Ñдзіну, крыху пацÑгніце Ñго. Потым дадайце ÑÑˆÑ‡Ñ Ñпынаў Ñ– пацÑгніце Ñ–Ñ… такÑама, каб ґрадыент Ñтаў згладжаным. Чым болей Ñпынаў дадаÑце, тым больш згладжаным можаце зрабіць выніковы ґрадыент. ВоÑÑŒ Ñпачатны чорна-белы ґрадыент з двума Ñпынамі: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -348,11 +359,11 @@ use the Extensions > Web > Slicer - - - + + + - + І воÑÑŒ тут Ñ€Ð¾Ð·Ð½Ñ‹Ñ Â«Ð½ÐµÐ»Ñ–Ð½ÐµÐ¹Ð½Ñ‹Ñ» шматÑÐ¿Ñ‹Ð½Ð°Ð²Ñ‹Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ñ‹ (даÑьледуйце Ñ–Ñ… у Ñ€Ñдактары ґрадыентаў): @@ -437,21 +448,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - ЭкÑцÑÐ½Ñ‚Ñ€Ñ‹Ñ‡Ð½Ñ‹Ñ ÐºÑ€ÑƒÐ³Ð°Ð²Ñ‹Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ñ‹ + + + + + + + + + + ЭкÑцÑÐ½Ñ‚Ñ€Ñ‹Ñ‡Ð½Ñ‹Ñ ÐºÑ€ÑƒÐ³Ð°Ð²Ñ‹Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ñ‹ - - + + - + РадыÑÐ»ÑŒÐ½Ñ‹Ñ Ò‘Ñ€Ð°Ð´Ñ‹ÐµÐ½Ñ‚Ñ‹ Ð½Ñ Ð¼ÑƒÑÑць быць ÑымÑтрычнымі. ІнÑтрумÑнтам «Òрадыент» пацÑгніце цÑнтральную ручку Ñліптычнага ґрадыенту з Shift. ГÑта паÑуне крыжыкападобную фокуÑную ручку ґрадыенту ад цÑнтру. Калі гÑта вам не патрÑбнаÑ, можаце вернуць Ñ„Ð¾ÐºÑƒÑ Ð½Ð°Ð·Ð°Ð´, перацÑгнуўшы Ñго блізка да цÑнтру. @@ -465,191 +476,202 @@ use the Extensions > Web > Slicer - - - - Раўнаваньне па ÑÑÑ€Ñдзіне Ñтаронкі + + + + Раўнаваньне па ÑÑÑ€Ñдзіне Ñтаронкі - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - ÐчыÑтка дакумÑнта + + ÐчыÑтка дакумÑнта - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Ð¡Ñ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñьці й Ñ€Ñдактар XML + + Ð¡Ñ…Ð°Ð²Ð°Ð½Ñ‹Ñ Ð¼Ð°Ð³Ñ‡Ñ‹Ð¼Ð°Ñьці й Ñ€Ñдактар XML - - + + - + РÑдактар XML (Shift+Ctrl+X) дазвалÑе зьмÑнÑць амаль уÑе аÑпÑкты дакумÑнта, не выкарыÑтоўваючы вонкавага Ñ‚ÑкÑтавага Ñ€Ñдактару. ТакÑама Inkscape звычайна падтрымлівае больш магчымаÑьцÑÑž SVG, чым даÑÑжна з ÒІК. РÑдактар XML — адзін Ñа ÑпоÑабаў дабрацца да гÑтых магчымаÑьцÑÑž (калі ведаеце SVG). - - ЗьмÑненьне адзінак вымÑÑ€ÑÐ½ÑŒÐ½Ñ Ð»Ñ–Ð½ÐµÐ¹ÐºÑ– + + ЗьмÑненьне адзінак вымÑÑ€ÑÐ½ÑŒÐ½Ñ Ð»Ñ–Ð½ÐµÐ¹ÐºÑ– - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Штампаваньне + + Штампаваньне - - + + - + Каб хутка Ñтварыць шмат копій аб'екта карыÑтайцеÑÑ ÑˆÑ‚Ð°Ð¼Ð¿Ð°Ð²Ð°Ð½ÑŒÐ½ÐµÐ¼. ПроÑта пацÑгніце аб'ект (ці зьмÑніце памер ці паварот) Ñ–, трымаючы націÑнутай кнопку мышы, націÑьніце Прабел. ГÑтым пакінеце «штамп» фіґурай бÑгучага аб'екта. Можаце паўтарыць колькі трÑба. - - Парады да выкарыÑÑ‚Ð°Ð½ÑŒÐ½Ñ Â«ÐÑадкі» + + Парады да выкарыÑÑ‚Ð°Ð½ÑŒÐ½Ñ Â«ÐÑадкі» - - + + - + ІнÑтрумÑнт «ÐÑадка» («БÑзье») мае наÑÑ‚ÑƒÐ¿Ð½Ñ‹Ñ ÑпоÑабы Ñкончыць бÑгучую лінію: - - - + + + - + ÐаціÑнуць Enter - - - + + + - + Двойчы пÑтрыкнуць левай кнопкай мышы - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Выбраць іншы інÑтрумÑнт - - + + - + - Заўважце, што покуль шлÑÑ… Ð½Ñ Ñкончаны (г.зн. паказаны зÑлёным, а бÑгучы адрÑзак — чырвоным) ён не Ñ–Ñнуе Ñк аб'ект дакумÑнта. Таму, каб адмÑніць Ñго, карыÑтайцеÑÑ Ð°Ð±Ð¾ Esc (адмÑніць увеÑÑŒ шлÑÑ…) ці Backspace (прыбраць апошні адрÑзак нÑÑкончанага шлÑха), а не загадам ÐдмÑніць. + Заўважце, што покуль шлÑÑ… Ð½Ñ Ñкончаны (г.зн. паказаны зÑлёным, а бÑгучы адрÑзак — чырвоным) ён не Ñ–Ñнуе Ñк аб'ект дакумÑнта. Таму, каб адмÑніць Ñго, карыÑтайцеÑÑ Ð°Ð±Ð¾ Esc (адмÑніць увеÑÑŒ шлÑÑ…) ці Backspace (прыбраць апошні адрÑзак нÑÑкончанага шлÑха), а не загадам ÐдмÑніць. - - + + - + Каб дадаць падшлÑÑ… да наÑўнага шлÑху вылучыце гÑты шлÑÑ… Ñ– пачніце рыÑаваць з Shift ад адвольнага пункту. Калі, уÑÑ‘ ж такі, вы проÑта жадаеце працÑгнуць наÑўны шлÑÑ…, то Shift непатрÑбны, проÑта пачніце рыÑаваць ад аднаго з канцавых Ñкараў вылучанага шлÑху. - - Уводжаньне значÑньнÑÑž Unicode + + Уводжаньне значÑньнÑÑž Unicode - - + + - + Пры працы з Ñ‚ÑкÑтам націÑканьне Ctrl+U пераключае між нармальным Ñ€Ñжымам Ñ– юнікодавым. У юнікодавым Ñ€Ñжыме ÐºÐ¾Ð¶Ð½Ð°Ñ Ò‘Ñ€ÑƒÐ¿Ð° з уведзеных 4 шаÑнаццаткавых лічбаў Ñтановіцца адным знакам Unicode, што дазвалÑе ўводзіць Ð°Ð´Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ñ Ð·Ð½Ð°ÐºÑ– (калі ведаеце іхны код у Unicode, а шрыфты Ñ–Ñ… падтрымліваюць). Каб Ñкончыць уводжаньне знакаў Unicode націÑьніце Enter. Ðапрыклад, Ctrl+U 2 0 1 4 Enter уÑтаўлÑе М-працÑжнік (—). Каб выйÑьці зь юнікодавага Ñ€Ñжыму, не ÑžÑтаўлÑючы анічога, націÑьніце Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - ВыкарыÑтаньне Ñеткі Ð´Ð»Ñ Ñ€Ñ‹ÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð·Ð½Ð°Ñ‡Ð°Ðº + + ВыкарыÑтаньне Ñеткі Ð´Ð»Ñ Ñ€Ñ‹ÑÐ°Ð²Ð°Ð½ÑŒÐ½Ñ Ð·Ð½Ð°Ñ‡Ð°Ðº - - + + - + - ÐÑхай вы хочаце Ñтварыць значку 24×24 пікÑÑлі. Стварыце палатно 24×24 Ð¿ÐºÑ (праз УлаÑьціваÑьці дакумÑнту) Ñ– ÑžÑталюйце Ñетку праз 0,5 Ð¿ÐºÑ (48×48 ліній). Зараз, калі зробіце раўнаваньне запоўненых аб'ектаў па цотных лініÑÑ…, а контурных аб'ектаў — па нÑцотных, з таўшчынёй контураў, роўнай нÑцотнаму ліку, Ñ– ÑкÑпартуеце Ñго пры прадвызначаных 90 п/ц (1 Ð¿ÐºÑ Ñтане 1 пунктам раÑтра), атрымаеце выразны раÑтравы Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ Ð±ÐµÐ·ÑŒ непатрÑбнага згладжваньнÑ. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Паварочваньне аб'ектаў + + Паварочваньне аб'ектаў - - + + - + - Калі працуце з «Вылучальнікам», пÑтрыкніце па аб'екце каб пабачыць ÑÐ³Ð¾Ð½Ñ‹Ñ ÑтрÑлкі зьмÑÐ½ÐµÐ½ÑŒÐ½Ñ Ð¿Ð°Ð¼ÐµÑ€Ñƒ, потым пÑтрыкніце ізноў па ім, каб пабачыць ÑтрÑлкі Ð¿Ð°Ð²Ð°Ñ€Ð¾Ñ‡Ð²Ð°Ð½ÑŒÐ½Ñ Ð¹ нахіленьнÑ. Калі вы пÑтрыкнеце й пацÑгнеце ÑтрÑлкі Ñž кутах, то аб'ект будзе паварочвацца вакол цÑнтру (паказаны крыжыкам). Калі Ð¿Ð°Ð´Ñ‡Ð°Ñ Ð³Ñтага націÑьніце й будзеце трымаць Shift, паварочваньне будзе адбывацца вакол Ñупрацьлеглага кута. Ð’Ñ‹ такÑама можаце перацÑгнуць цÑнтар павароту куды заўгодна. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Ðльбо можаце паварочваць з клÑвіÑтуры, націÑкаючы [ Ñ– ] (на 15 ґрадуÑаў) ці Ctrl+[ Ñ– Ctrl+] (на 90 ґрадуÑаў). Ð¢Ñ‹Ñ Ð¶ клÑвішы [] з Alt зьдзÑйÑьнÑюць павольнае папікÑÑльнае паварочваньне. - - ÐŸÐ°Ð´Ð°ÑŽÑ‡Ñ‹Ñ Ñ†ÐµÐ½Ñ– + + ÐŸÐ°Ð´Ð°ÑŽÑ‡Ñ‹Ñ Ñ†ÐµÐ½Ñ– - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -658,53 +680,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - РазьмÑшчÑньне Ñ‚ÑкÑту на шлÑху + + РазьмÑшчÑньне Ñ‚ÑкÑту на шлÑху - - + + - + - Каб разьмеÑьціць Ñ‚ÑкÑÑ‚ уздоўж крывой вылучыце разам Ñ‚ÑкÑÑ‚ Ñ– крывую й выберыце РазьмеÑьціць на шлÑху з мÑню «ТÑкÑт». ТÑкÑÑ‚ пачнецца ад пачатку шлÑху. Звычайна налепей бывае, калі Ñўна Ñтвараюць Ñ‚ÑкÑÑ‚, па Ñкім будзе разьмешчаны Ñ‚ÑкÑÑ‚, чым даÑтаÑоўваць Ñго да нейкага іншага ÑлемÑнту рыÑунку — гÑта дазволіць лепш кантралÑваць працÑÑ Ð±Ñзь лішніх праблем. + Каб разьмеÑьціць Ñ‚ÑкÑÑ‚ уздоўж крывой вылучыце разам Ñ‚ÑкÑÑ‚ Ñ– крывую й выберыце РазьмеÑьціць на шлÑху з мÑню «ТÑкÑт». ТÑкÑÑ‚ пачнецца ад пачатку шлÑху. Звычайна налепей бывае, калі Ñўна Ñтвараюць Ñ‚ÑкÑÑ‚, па Ñкім будзе разьмешчаны Ñ‚ÑкÑÑ‚, чым даÑтаÑоўваць Ñго да нейкага іншага ÑлемÑнту рыÑунку — гÑта дазволіць лепш кантралÑваць працÑÑ Ð±Ñзь лішніх праблем. - - ВылучÑньне арыґіналу + + ВылучÑньне арыґіналу - - + + - + Калі маеце Ñ‚ÑкÑÑ‚ на шлÑху, злучаны зрух ці клон, іхны выточны аб'ект/шлÑÑ… чаÑам цÑжка вылучыць, бо ён можа быць проÑта пад нізам, ці зроблены нÑбачным Ñ–/ці замкнутым. Дапаможа Ñ‡Ð°Ñ€Ð¾ÑžÐ½Ð°Ñ ÐºÐ»Ñвіша Shift+D, вылучыце Ñ‚ÑкÑÑ‚, зрух ці клон Ñ– націÑніце Shift+D каб вылучыць адпаведны шлÑÑ…, крыніцу зруха ці арыґінал клона. - - Ðднаўленьне вакна, Ñкое апынулаÑÑ Ð¿Ð°-за Ñкранам + + Ðднаўленьне вакна, Ñкое апынулаÑÑ Ð¿Ð°-за Ñкранам - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - ПразрыÑтаÑьць, ґрадыенты й ÑкÑпартаваньне Ñž PostScript + + ПразрыÑтаÑьць, ґрадыенты й ÑкÑпартаваньне Ñž PostScript - - - - - - Фарматы PostScript ці EPS не падтрымліваюць празрыÑтаÑьць, таму ніколі не выкарыÑтоўвайце Ñе, калі зьбіраецеÑÑ ÑкÑпартаваць у PS/EPS. У выпадку ÑуцÑльнай празрыÑтаÑьці, ÑÐºÐ°Ñ Ð·Ð½Ð°Ñ…Ð¾Ð´Ð·Ñ–Ñ†Ñ†Ð° паверх ÑуцÑльнага колера, гÑта лёгка паправіць: вылучыце адзін з празрыÑтых аб'ектаў, пераключыцеÑÑ Ð½Ð° «Піпетку» (F7); упÑўніцеÑÑ, што Ñна Ñž Ñ€Ñжыме «браць бачны колер без празрыÑтаÑьці», пÑтрыкніце па тым жа аб'екце. Будзе ўзÑты бачны колер Ñ– прызначаны назад аб'екту, але гÑтым разам без празрыÑтаÑьці. Паўтарыце Ð´Ð»Ñ ÑžÑÑ–Ñ… празрыÑтых аб'ектаў. Калі Ð²Ð°ÑˆÑ‹Ñ Ð¿Ñ€Ð°Ð·Ñ€Ñ‹ÑÑ‚Ñ‹Ñ Ð°Ð±'екты перакрываюць Ñ€Ð¾Ð·Ð½Ñ‹Ñ Ð°Ð±ÑÑгі ÑуцÑльнага колеру, то вы муÑіце разьбіць Ñго на кавалкі й паўтарыць гÑтую працÑдуру з кожным кавалкам. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -734,8 +768,8 @@ option to save window geometry (Inkscape Preference - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць diff --git a/share/tutorials/tutorial-tips.el.svg b/share/tutorials/tutorial-tips.el.svg index 70d5fe88c..975957500 100644 --- a/share/tutorials/tutorial-tips.el.svg +++ b/share/tutorials/tutorial-tips.el.svg @@ -40,286 +40,306 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - + ::ΣΥΜΒΟΥΛΈΣ ΚΑΙ ΚΌΛΠΑ - + Αυτό το μάθημα θα παÏουσιάσει ποικίλες συμβουλές και κόλπα που οι χÏήστες έμαθαν μέσα από τη χÏήση του Inkscape και μεÏικά “κÏυφά†χαÏακτηÏιστικά που μποÏοÏν να σας βοηθήσουν να επιταχÏνετε τις εÏγασίες παÏαγωγής. - - Ακτινική τοποθέτηση με κλώνους πλακιδίου + + Radial placement with Tiled Clones - + - Είναι εÏκολο να δείτε τη χÏήση του διαλόγου ΔημιουÏγία κλώνων παÏάθεσης για οÏθογώνια πλέγματα και μοτίβα. Αλλά τι γίνεται εάν χÏειάζεσθε ακτινική τοποθέτηση, όπου τα αντικείμενα μοιÏάζονται ένα κοινό κέντÏο πεÏιστÏοφής; Είναι επίσης δυνατό! + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and +patterns. But what if you need radial placement, where objects +share a common center of rotation? It's possible too! + - + - Εάν το ακτινικό σας μοτίβο χÏειάζεται να έχει μόνο 3, 4, 6, 8 ή 12 στοιχεία, τότε μποÏείτε να δοκιμάσετε τις συμμετÏίες P3, P31M, P3M1, P4, P4M, P6 ή P6M. Αυτές θα δουλέψουν όμοÏφα για νιφάδες και τα παÏόμοια. Μια πιο γενική μέθοδος, όμως, είναι η ακόλουθη. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - + Επιλέξτε τη συμμετÏία P1 (απλή μετατόπιση) και έπειτα αντιστάθμιση για αυτήν την μετατόπιση πηγαίνοντας στην καÏτέλα μετατόπιση και οÏίζοντας ανά γÏαμμή/μετατόπιση Y and ανά στήλη/μετατόπιση X και τις δυο στο -100%. ΤώÏα όλοι οι κλώνοι θα στοιβαχθοÏν ακÏιβώς στην κοÏυφή της αÏχικής. Αυτό που μένει να γίνει είναι να πάτε στην καÏτέλα πεÏιστÏοφή και να οÏίσετε κάποια γωνία πεÏιστÏοφής ανά στήλη, έπειτα δημιουÏγήστε το μοτίβο με μία γÏαμμή και πολλαπλές στήλες. Π.χ., Î¹Î´Î¿Ï Î­Î½Î± μοτίβο φτιαγμένο από μια οÏιζόντια γÏαμμή, με Ï„Ïιάντα στήλες, με κάθε στήλη πεÏιστÏεμμένη κατά 6 μοίÏες: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Για να πάÏετε μια πλάκα ÏολογιοÏ, χÏειαζόσαστε να κόψετε ή απλά να επικαλÏψετε το κεντÏικό μέÏος με ένα λευκό κÏκλο (για Ï€Ïάξεις boole σε κλώνους, αποσυνδέστε τους Ï€Ïώτα). - + Πιο ενδιαφέÏοντα εφέ μποÏοÏν να δημιουÏγηθοÏν χÏησιμοποιώντας γÏαμμές και στήλες. Î™Î´Î¿Ï Î­Î½Î± μοτίβο με 10 στήλες και 8 γÏαμμές, με πεÏιστÏοφή 2 μοιÏών ανά γÏαμμή και 18 μοιÏών ανά στήλη. Κάθε ομάδα γÏαμμών εδώ είναι μία “στήληâ€, έτσι οι ομάδες είναι 18 μοίÏες Î¼ÎµÏ„Î±Î¾Ï Ï„Î¿Ï…Ï‚. Μέσα σε κάθε στήλη, οι ατομικές γÏαμμές είναι μακÏιά 2 μοίÏες: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Στα παÏαπάνω παÏαδείγματα, η γÏαμμή πεÏιστÏάφηκε γÏÏω από το κέντÏο της. Αλλά τι γίνεται εάν θέλετε το κέντÏο να είναι έξω από το σχήμα σας; Απλά δημιουÏγήστε ένα αόÏατο (χωÏίς γέμισμα, χωÏίς πινελιά) οÏθογώνιο που θα μποÏοÏσε να καλÏψει το σχήμα σας και του οποίου το κέντÏο είναι στο σημείο που χÏειάζεσθε, ομαδοποιήστε το σχήμα και το οÏθογώνιο μαζί και έπειτα χÏησιμοποιήστε ΔημιουÏγία κλώνων παÏάθεσης σε αυτήν την ομάδα. Έτσι μποÏείτε να κάνετε όμοÏφες “εκÏήξεις†ή “αστεÏοσκόνες†με τυχαία κλιμάκωση, πεÏιστÏοφή και ίσως αδιαφάνεια: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Πώς να τεμαχίσετε (πεÏιοχές εξαγωγής πολλαπλών οÏθογωνίων); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Πώς να τεμαχίσετε (πεÏιοχές εξαγωγής πολλαπλών οÏθογωνίων); - + ΔημιουÏγήστε μια νέα στÏώση και σε αυτή τη στÏώση δημιουÏγήστε αόÏατα οÏθογώνια που καλÏπτουν μέÏη της εικόνας σας. Βεβαιωθείτε ότι το έγγÏαφό σας χÏησιμοποιεί μονάδες px (Ï€Ïοεπιλογή), ενεÏγοποιήστε πλέγμα και Ï€Ïοσκόλληση των οÏθογωνίων στο πλέγμα, έτσι ώστε το καθένα να καλÏπτει ένα συνολικό αÏιθμό μονάδων εικονοστοιχείων. Δώστε ταυτότητες με νόημα στα οÏθογώνια και εξάγετε καθένα στο αÏχείο του (ΑÏχείο > Εξαγωγή εικόνας PNG (Shift+Ctrl+E)). Έπειτα τα οÏθογώνια θα θυμοÏνται τα ονόματα αÏχείων εξαγωγής τους. Μετά από αυτό, είναι Ï€Î¿Î»Ï ÎµÏκολο να ξαναεξάγετε μεÏικά από τα οÏθογώνια: μετάβαση στη στοιβάδα εξαγωγής, χÏησιμοποιήστε Tab για επιλογή του ÎµÏ€Î¹Î¸Ï…Î¼Î·Ï„Î¿Ï (ή χÏησιμοποιήστε εÏÏεση κατά αναγνωÏιστικό) και πατήστε εξαγωγή στον διάλογο. Ή μποÏείτε να γÏάψετε ένα σενάÏιο κελÏφους ή ομαδικό αÏχείο για εξαγωγή όλων των πεÏιοχών σας, με μια εντολή όπως: - + inkscape -i area-id -t filename.svg - + για κάθε εξαγόμενη πεÏιοχή. Ο διακόπτης -t της λέει να χÏησιμοποιήσει την υπόδειξη υπόμνησης ονόματος αÏχείου, αλλιώς μποÏείτε να δώσετε το όνομα αÏχείου εξαγωγής με το διακόπτη -e. Εναλλακτικά, μποÏείτε να χÏησιμοποιήσετε τις επεκτάσεις Επεκτάσεις > Ιστός > Τεμαχιστής, ή Επεκτάσεις > Εξαγωγή > Λαιμητόμος για παÏόμοια αποτελέσματα. - - Μη γÏαμμικές διαβαθμίσεις + + Μη γÏαμμικές διαβαθμίσεις - + Η έκδοση 1.1 του SVG δεν υποστηÏίζει μη γÏαμμικές διαβαθμίσεις (δηλαδή διαβαθμίσεις που έχουν μη γÏαμμικές μετατοπίσεις Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ χÏωμάτων). ΜποÏείτε, όμως, να τις Ï€Ïοσομοιώσετε με διαβαθμίσεις πολλαπλών φάσεων. - + - Ξεκίνημα με μια απλή διαβάθμιση δÏο φάσεων. Ανοίξτε τον επεξεÏγαστή διαβαθμίσεων (Ï€.χ. διπλοπατώντας σε οποιαδήποτε λαβή του εÏγαλείου διαβάθμισης). ΠÏοσθέστε μια νέα διαβαθμισμένη φάση στο μέσο. ΣÏÏτε την λίγο. Έπειτα Ï€Ïοσθέστε πεÏισσότεÏες φάσεις Ï€Ïιν και μετά τη μεσαία φάση και σÏÏτε τες επίσης, έτσι ώστε η διαβάθμιση να είναι ομαλή. Όσες πεÏισσότεÏες φάσεις Ï€Ïοσθέτετε, τόσο πιο ομαλή τελική διαβάθμιση μποÏείτε να πάÏετε. Î™Î´Î¿Ï Î· αÏχική ασπÏόμαυÏη διαβάθμιση με δÏο φάσεις: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -327,11 +347,11 @@ - - + + - + Και εδώ είναι ποικίλες “μη γÏαμμικές†πολυφασικές διαβαθμίσεις (εξετάστε τες στον επεξεÏγαστή διαβαθμίσεων): @@ -416,21 +436,21 @@ - - - - - - - - - - ΕκκεντÏικές ακτινικές διαβαθμίσεις + + + + + + + + + + ΕκκεντÏικές ακτινικές διαβαθμίσεις - + - + Οι ακτινικές διαβαθμίσεις δεν Ï€Ïέπει να είναι συμμετÏικές. Στο εÏγαλείο διαβάθμισης, σÏÏτε την κεντÏική λαβή της ελλειπτικής διαβάθμισης με Shift. Αυτό θα μετακινήσει την σχήματος x λαβή εστίασης της διαβάθμισης μακÏιά από το κέντÏο της. Όταν δεν την χÏειάζεσθε, μποÏείτε να Ï€Ïοσκολλήσετε την εστίαση πίσω σÏÏοντας την κοντά στο κέντÏο. @@ -444,216 +464,247 @@ - - - - ΕυθυγÏάμμιση στο κέντÏο της σελίδας + + + + ΕυθυγÏάμμιση στο κέντÏο της σελίδας - + - + Για να ευθυγÏαμμίσετε κάτι στο κέντÏο ή την πλευÏά της σελίδας, επιλέξτε το αντικείμενο ή την ομάδα και έπειτα διαλέξτε Σελίδα από τον κατάλογο Σχετικά με: στο διάλογο ΕυθυγÏάμμιση και κατανομή (Ctrl+Shift+A). - - ΚαθαÏίζοντας το έγγÏαφο + + ΚαθαÏίζοντας το έγγÏαφο - + - + Πολλές από τις μη χÏησιμοποιοÏμενες διαβαθμίσεις, μοτίβα και σημειωτές (με πιο ακÏίβεια, αυτές που επεξεÏγαστήκατε χειÏοκίνητα) παÏαμένουν στις αντίστοιχες παλέτες και μποÏοÏν να ξαναχÏησιμοποιηθοÏν για νέα αντικείμενα. Όμως, εάν θέλετε να βελτιώσετε το αντικείμενο σας, χÏησιμοποιήστε την εντολή ΚαθαÏισμός οÏισμών στο Î¼ÎµÎ½Î¿Ï Î±Ïχείο. Θα αφαιÏέσει κάθε διαβάθμιση, μοτίβο ή σημειωτή που δεν χÏησιμοποιείται από κάτι στο έγγÏαφο, κάνοντας το αÏχείο μικÏότεÏο. - - ΚÏυμμένα χαÏακτηÏιστικά και ο επεξεÏγαστής XML + + ΚÏυμμένα χαÏακτηÏιστικά και ο επεξεÏγαστής XML - + - + Ο επεξεÏγαστής XML (Shift+Ctrl+X) σας επιτÏέπει να αλλάξετε σχεδόν κάθε όψη του εγγÏάφου χωÏίς να χÏησιμοποιήσετε έναν εξωτεÏικό επεξεÏγαστή κειμένου. Επίσης, το Inkscape συνήθως υποστηÏίζει πεÏισσότεÏα χαÏακτηÏιστικά SVG από όσα είναι Ï€Ïοσβάσιμα από το GUI. Ο επεξεÏγαστής XML είναι ένας Ï„Ïόπος να Ï€Ïοσπελάσετε αυτά τα χαÏακτηÏιστικά (εάν ξέÏετε SVG). - - Αλλαγή των μονάδων μέτÏησης του χάÏακα + + Αλλαγή των μονάδων μέτÏησης του χάÏακα - + - + - Στο Ï€Ïοεπιλεγμένο Ï€Ïότυπο, η μονάδα μέτÏησης που χÏησιμοποιείται από τους χάÏακες είναι px (“μονάδα χÏήστη SVGâ€, που στο Inkscape είναι ίση με 0,8pt ή 1/90 της ίντσας). Αυτή είναι επίσης η μονάδα που χÏησιμοποιείται στην εμφάνιση συντεταγμένων στην κάτω αÏιστεÏή γωνία και Ï€Ïοεπιλεγμένη για όλα τα Î¼ÎµÎ½Î¿Ï Î¼Î¿Î½Î¬Î´Ï‰Î½. (ΜποÏείτε να αφήσετε το ποντίκι σας πάνω από έναν χάÏακα για να δείτε την συμβουλή με τις μονάδες που χÏησιμοποιεί.) Για να το αλλάξετε αυτό, ανοίξτε το Ιδιότητες εγγÏάφου (Ctrl+Shift+D) και αλλάξτε το ΠÏοεπιλεγμένες μονάδες στην καÏτέλα Σελίδα. + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in +displaying coordinates at the lower-left corner and preselected in all units menus. (You +can always hover your mouse over a ruler to see the tooltip with the units it uses.) To +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. + - - ΣφÏάγισμα + + ΣφÏάγισμα - + - + Για να δημιουÏγήσετε πολλά αντίγÏαφα ενός αντικειμένου, χÏησιμοποιήστε σφÏάγισμα. Απλά σÏÏτε ένα αντικείμενο (ή κλιμακώστε το ή πεÏιστÏέψτε το) και ενώ κÏατάτε το πλήκτÏο του Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï Ï€Î±Ï„Î·Î¼Î­Î½Î¿, πιέστε διάστημα. Αυτό αφήνει μια “σφÏαγίδα†του Ï„Ïέχοντος σχήματος του αντικειμένου. ΜποÏείτε να το επαναλάβετε όσες φοÏές θέλετε. - - Κόλπα εÏγαλείου πένας + + Κόλπα εÏγαλείου πένας - + - + Στο εÏγαλείο πένας (Bezier), έχετε τις παÏακάτω επιλογές για να τελειώσετε την Ï„Ïέχουσα γÏαμμή: - - + + - + Πατήστε Enter - - + + - + Διπλό κλικ με το αÏιστεÏÏŒ πλήκτÏο του Ï€Î¿Î½Ï„Î¹ÎºÎ¹Î¿Ï - - + + - + - Επιλέξτε το εÏγαλείο πένας από την εÏγαλειοθήκη + Click with the right mouse button + - - + + - + Επιλέξτε ένα άλλο εÏγαλείο - + - + Σημειώστε ότι ενώ το μονοπάτι είναι ατελείωτο (δηλαδή φαίνεται Ï€Ïάσινο, με το Ï„Ïέχον κομμάτι κόκκινο) δεν υπάÏχει ακόμα ως αντικείμενο στο έγγÏαφο. Συνεπώς, για να το ακυÏώσετε χÏησιμοποιήστε είτε Esc (ακÏÏωση όλου του μονοπατιοÏ) ή οπισθοδιαγÏαφή (αφαιÏεί το τελευταίο κομμάτι του ατελείωτου μονοπατιοÏ) αντί για ΑναίÏεση. - + - + Για να Ï€Ïοσθέσετε ένα νέο υπομονοπάτι σε ένα υπάÏχον μονοπάτι, επιλέξτε αυτό το μονοπάτι και αÏχίστε τη σχεδίαση με Shift από ένα ελεÏθεÏο σημείο. Εάν, όμως, θέλετε απλά να συνεχίσετε ένα υπάÏχον μονοπάτι, το Shift δεν είναι απαÏαίτητο. Απλά ξεκινήστε να σχεδιάζετε από μία από τις τελικές άγκυÏες Ïου επιλεγμένου μονοπατιοÏ. - - Εισαγωγή τιμών Unicode + + Εισαγωγή τιμών Unicode - + - + Ενώ βÏίσκεσθε στο εÏγαλείο κειμένου, πατώντας Ctrl+U εναλλάσσεται η κατάσταση Î¼ÎµÏ„Î±Î¾Ï Unicode και κανονικής. Στην κατάσταση Unicode, κάθε ομάδα των 4 δεκαεξαδικών ψηφίων που πληκτÏολογείτε γίνεται ένας μόνο χαÏακτήÏας Unicode, έτσι σας επιτÏέπει να εισάγετε ελεÏθεÏα σÏμβολα (εφόσον ξέÏετε τα σημεία ÎºÏ‰Î´Î¹ÎºÎ¿Ï Unicode και η γÏαμματοσειÏά τα υποστηÏίζει). Για να τελειώσετε την είσοδο Unicode, πατήστε Enter. Π.χ., Ctrl+U 2 0 1 4 Enter εισάγει μια em-dash (—). Για να αφήσετε την κατάσταση Unicode χωÏίς να εισάγετε τίποτα πατήστε Esc. - + - + ΜποÏείτε να χÏησιμοποιήσετε επίσης τον διάλογο Κείμενο > γλυφες για να αναζητήσετε και να εισάγετε γλÏφες στο έγγÏαφό σας. - - ΧÏησιμοποιώντας το πλέγμα για σχεδίαση εικόνων + + ΧÏησιμοποιώντας το πλέγμα για σχεδίαση εικόνων - + - + - Ας υποθέσουμε ότι θέλετε να δημιουÏγήσετε ένα εικονίδιο 24x24 εικονοστοιχείων. ΔημιουÏγήστε έναν καμβά 24x24 px (χÏησιμοποιήστε την εντολή Ιδιότητες εγγÏάφου) και οÏίστε το πλέγμα σε 0,5 px (48x48 γÏαμμές πλέγματος). ΤώÏα, εάν ευθυγÏαμμίσετε τα γεμισμένα αντικείμενα σε ζυγές γÏαμμές πλέγματος και τα βαμμένα αντικείμενα σε μονές γÏαμμές πλέγματος με το πλάτος της πινελιάς σε px να είναι ζυγός αÏιθμός και το εξάγετε στο Ï€Ïοεπιλεγμένο 90dpi (έτσι ώστε 1 px να γίνεται 1 px ψηφιογÏαφίας), παίÏνετε μια καθαÏή ψηφιογÏαφική εικόνα χωÏίς αχÏείαστη εξομάλυνση. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - ΠεÏιστÏοφή αντικειμένου + + ΠεÏιστÏοφή αντικειμένου - + - + - ΕυÏισκόμενοι στο εÏγαλείο επιλογής, κλικ σε ένα αντικείμενο για να δείτε τα κλιμακοÏμενα βέλη, έπειτα κλικ ξανά στο αντικείμενο για να δείτε την πεÏιστÏοφή και τα βέλη μετατόπισης. Εάν τα βέλη στις γωνίες πατηθοÏν και συÏθοÏν, το αντικείμενο θα πεÏιστÏαφεί γÏÏω από το κέντÏο (φαίνεται σαν σταυÏός). Αν κÏατήσετε πατημένο το πλήκτÏο Shiftενώ κάνετε αυτό, η πεÏιστÏοφή θα συμβεί γÏÏω από την αντίθετη γωνία. ΜποÏείτε επίσης να σÏÏετε το κέντÏο πεÏιστÏοφής σε οποιαδήποτε θέση. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - + - + Ή, μποÏείτε να πεÏιστÏέψετε από το πληκτÏολόγιο πατώντας [ και ] (κατά 15 μοίÏες) ή Ctrl+[ και Ctrl+] (κατά 90 μοίÏες). Τα ίδια πλήκτÏα [] με Alt εκτελοÏν αÏγή πεÏιστÏοφή μεγέθους εικονοστοιχείου. - - Πίπτουσες σκιές + + Πίπτουσες σκιές - + - + Για τη γÏήγοÏη δημιουÏγία πιπτουσών σκιών για αντικείμενα, χÏησιμοποιήστε το γνώÏισμα ΦίλτÏα > Σκιές και λάμψεις > Πίπτουσα σκιά.... - + - + ΜποÏείτε επίσης να δημιουÏγήσετε εÏκολα θολές πίπτουσες σκιές για αντικείμενα χειÏοκίνητα με θόλωση στον διάλογο Γέμισμα και πινελιά. Διαλέξτε ένα αντικείμενο, διπλασιάστε το με Ctrl+D, πατήστε PgDown για να το βάλετε κάτω από το αÏχικό αντικείμενο, βάλτε το λίγο στα δεξιά και χαμηλότεÏα από το αÏχικό αντικείμενο. ΤώÏα ανοίξτε τον διάλογο Γέμισμα και πινελιά και αλλάξτε την τιμή θόλωσης σε, ας ποÏμε, 5,0. Αυτό είναι! - - Τοποθετώντας κείμενο σε μονοπάτι + + Τοποθετώντας κείμενο σε μονοπάτι - + - + Για τοποθέτηση κειμένου κατά μήκος της καμπÏλης, επιλέξτε το κείμενο και την καμπÏλη μαζί και διαλέξτε Τοποθέτηση σε μονοπάτι από το Î¼ÎµÎ½Î¿Ï ÎºÎµÎ¹Î¼Î­Î½Î¿Ï…. Το κείμενο θα ξεκινά στην αÏχή του μονοπατιοÏ. Γενικά, είναι καλÏτεÏο να δημιουÏγείτε ένα μονοπάτι στο οποίο θέλετε να ταιÏιάσετε το κείμενο, παÏά να το Ï€ÏοσαÏμόζετε σε κάποιο άλλο στοιχείο σχεδίασης — αυτό θα σας δώσει πεÏισσότεÏο έλεγχο χωÏίς αλλαγές στο σχέδιο. - - Επιλογή του αÏÏ‡Î¹ÎºÎ¿Ï + + Επιλογή του αÏÏ‡Î¹ÎºÎ¿Ï - + - + Όταν έχετε κείμενο στο μονοπάτι, μια συνδεμένη μετατόπιση, ή ένας κλώνος, το πηγαίο αντικείμενο/μονοπάτι ίσως να είναι δÏσκολο να επιλεγεί, επειδή μποÏεί να είναι ακÏιβώς από κάτω ή να είναι αόÏατο και/ή κλειδωμένο. Το μαγικό κλειδί Shift+D θα σας βοηθήσει. Επιλέξτε το κείμενο, τη συνδεμένη μετατόπιση ή τον κλώνο και πατήστε Shift+D για να μετακινήσετε την επιλογή στο αντίστοιχο μονοπάτι, πηγή μετατόπισης ή αÏχικό κλώνο. - - Ανάκτηση παÏαθÏÏου εκτός οθόνης + + Ανάκτηση παÏαθÏÏου εκτός οθόνης - + - + Όταν μετακινείται αντικείμενα Î¼ÎµÏ„Î±Î¾Ï ÏƒÏ…ÏƒÏ„Î·Î¼Î¬Ï„Ï‰Î½ με διαφοÏετικές αναλÏσεις ή αÏιθμό οθονών, μποÏεί να βÏείτε ότι το Inkscape αποθήκευσε τη θέση του παÏαθÏÏου που τοποθετεί το παÏάθυÏο εκτός της δικής σας οθόνης. Απλά μεγιστοποιήστε το παÏάθυÏο (που θα το ξαναεμφανίσει, χÏησιμοποιώντας τη γÏαμμή εÏγασιών), αποθηκεÏστε και επαναφοÏτώστε. ΜποÏείτε να το αποφÏγετε γενικά αποεπιλέγοντας τη γενική επιλογή αποθήκευσης της γεωμετÏίας του παÏαθÏÏου (ΠÏοτιμήσεις Inkscape, ενότητα Διεπαφή > ΠαÏάθυÏα). - - Εξαγωγή διαφάνειας, διαβάθμισης και PostScript + + Εξαγωγή διαφάνειας, διαβάθμισης και PostScript - - - - - - PostScript ή μοÏφές EPS δεν υποστηÏίζουν διαφάνεια, έτσι δεν θα Ï€Ïέπει ποτέ να τις χÏησιμοποιήσετε, εάν Ï€Ïόκειται να εξάγετε σε PS/EPS. Στην πεÏίπτωση της επίπεδης διαφάνειας που επικαλÏπτει επίπεδο χÏώμα, είναι εÏκολο να το φιάξετε: Επιλέξτε ένα από τα διαφανή αντικείμενα, μετάβαση στο εÏγαλείο σταγονόμετÏου (F7). Βεβαιωθείτε ότι είναι στην κατάσταση “επιλογή οÏÎ±Ï„Î¿Ï Ï‡Ïώματος χωÏίς άλφαâ€. Κλικ στο ίδιο αντικείμενο. Θα επιλέξει το οÏατό χÏώμα και θα το αποδώσει πίσω στο αντικείμενο, αλλά αυτή τη φοÏά χωÏίς διαφάνεια. Επανάληψη για όλα τα διαφανή αντικείμενα. Εάν το διαφανές σας αντικείμενο επικαλÏπτει πολλές επίπεδες χÏωματικές πεÏιοχές, θα Ï€Ïέπει να το σπάσετε κατάλληλα σε κομμάτια και να εφαÏμόσετε αυτή τη διαδικασία σε κάθε κομμάτι. - - + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + + + diff --git a/share/tutorials/tutorial-tips.es.svg b/share/tutorials/tutorial-tips.es.svg index 158db2e4c..236dec0ae 100644 --- a/share/tutorials/tutorial-tips.es.svg +++ b/share/tutorials/tutorial-tips.es.svg @@ -36,271 +36,274 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::TRUCOS Y CONSEJOS - - + + Este tutorial mostrará varios trucos y consejos que los usuarios han aprendido a través del uso de Inkscape y algunas caracterñsiticas y opciones "ocultas" que le ayudaran a aumentar la velocidad en la producción de sus trabajos. - - Colocación Radial con Colenes en Mosaico + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Si su patrón radial requiere tener sólo 3, 4, 6, 8 o 12 elementos, entonces usted puede intentar las simetrías P3, P31M, P3M1, P4, P4M, P6, o P6M. Estas pueden funcionar perfecto para copos de nieve y similares. Un método más general es el siguiente. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Escoja la simetría P1 (traslación simple) y después compensar para que esa traslación vaya a la pestaña Desplazamiento y configure Por Fila/Y y Por columna/X ambos a -100%. Ahora todos los clones serán colocados en la parte superior del original. Todo lo que queda por hacer es ir a la pestaña Rotación y configurar con algún ángulo de rotación por columna, después cree el patrón con una fila con múltiples columnas. Por ejemplo, he aquí un patrón hecho a partir de una línea horizontal, con 30 columnas, cada columna rotada 6 grados: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Escoja la simetría P1 (traslación simple) y después compensar para que esa traslación vaya a la pestaña Desplazamiento y configure Por Fila/Y y Por columna/X ambos a -100%. Ahora todos los clones serán colocados en la parte superior del original. Todo lo que queda por hacer es ir a la pestaña Rotación y configurar con algún ángulo de rotación por columna, después cree el patrón con una fila con múltiples columnas. Por ejemplo, he aquí un patrón hecho a partir de una línea horizontal, con 30 columnas, cada columna rotada 6 grados: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Para obtener un radio de reloj, todo lo que tiene que hacer es cortar o simplemente superponer la parte central mediante un círculo blanco (para hacer operaciones booleanas sobre clones, desconéctelos primero). - - + + Efectos más interesantes pueden ser creados mediante el uso de ambas filas y columnas. Aquí hay un patrón con 10 columnas y 8 filas, con rotación de 2 grados por fila y 18 grados por columna. Aquí cada grupo de líneas es una "columna", así los grupos están a 18 grados del otro; en cada columna, líneas individuales están 2 grados aparte: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Gradientes No-lineales + + Gradientes No-lineales - - + + La versión 1.1 de SVG no soporta gradientes no-lineales (i.e. aquellos que poseen una traslación no-lineal entre colores). Usted puede, sin embargo, los emula mediante los gradientes multiparada. - - + + - Inicie con un simple gradiente dos-puntos. Abra el editor de Gradiente (e.g. mediante doble-click en cualquier manejador de gradiente en la herramienta Gradiente). Agregue un nuevo punto de gradiente en el medio; arrastrelo un poco. Entonces adiciones dos puntos más antes y después del punto medio y arrastrelos tanbién, así el gradiente es suave. A mayor número de puntos que sean agregados, más suave va a ser el gradiente resultante. Aquí podemos observar el gradiente inicial negro-blanco con dos puntos: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +360,11 @@ use the Extensions > Web > Slicer - - - + + + - + Y aquí hay varios gradientes "no-lineales" multi-punto (examínelos en el Editor de Gradientes): @@ -438,21 +449,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Gradientes Radiales Excentricos + + + + + + + + + + Gradientes Radiales Excentricos - - + + - + Los gradientes radiales no tienen por que ser simétricos. En la herramienta Gradiente, arrastre el manejador central de un gradiente elíptico con Mayus. Esto moverá el manejador de foco del gradiente lejos de su centro. cuando usted no lo necesite, puede ajustar el foco a un esto anterior arrastrándolo cerca del centro. @@ -466,42 +477,42 @@ use the Extensions > Web > Slicer - - - - Alineando al centro de la página + + + + Alineando al centro de la página - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Limpiar el documento + + Limpiar el documento - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Características ocultas del editor de XML + + Características ocultas del editor de XML - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -509,97 +520,96 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Cambiando las unidades de medida de las reglas + + Cambiando las unidades de medida de las reglas - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Estampado + + Estampado - - + + - + Para crear varias copias de un objeto, use estampado. Tan sólo arrastre un objeto (o escálelo o rótelo), y mientras lo mantiene presionado con el ratón, presione Barra Espaceadora. Esto permite una "estampilla" del objeto o forma actual. Usted puede repetir tantas veces como lo desee. - - Trucos de la herramienta Pluma + + Trucos de la herramienta Pluma - - + + - + En la herramienta Pluma (Bezier), usted puede obtener las siguientes opciones para finalizar la línea actual: - - - + + + - + Presione Enter - - - + + + - + Doble click con el botón izquiero del ratón - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Seleccione otra herramienta - - + + - + - Note que mientras el trazo no está finalizado (i.e. es mostrado verde, con el segmento actual de color rojo) este no existe aún como un objeto en el documento. aemás, para cancelar esto, use o Esc (cancela todo el trazo) o Barra Espaceadora (remueva el último segmento del trazo sin finalizar) en vez del comando Deshacer. + Note que mientras el trazo no está finalizado (i.e. es mostrado verde, con el segmento actual de color rojo) este no existe aún como un objeto en el documento. aemás, para cancelar esto, use o Esc (cancela todo el trazo) o Barra Espaceadora (remueva el último segmento del trazo sin finalizar) en vez del comando Deshacer. - - + + - + Para agregar un nuevo subtrazo para un trazo existente, seleccione el trazoo y inicie a dibujar con Mayus desde un punto arbitrario. Si, sin embargo, lo que quiere simplificarIf, however, what you want is to simply continue an existing path, Mayus is not necessary; just start drawing from one of the end anchors of the selected path. - - Ingresando valores Unicode + + Ingresando valores Unicode - - + + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -610,58 +620,70 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Usando la rejilla para dibujar íconos + + Usando la rejilla para dibujar íconos - - + + - + - Supongamos que desea crear íconos de 24x24 pixeles. Cree una pizarra de 24x24 pixeles (use Preferencias de Documento) y configure la pizarra a 0.5 px (48x48 líneas de rejilla). Ahora, si desea alinear objetos rellenos hasta las líneas de rejilla, y objetos bordeados a líneas de rejillas impares con el ancho del borde en px siendo un número costante, y exportelos al por defecto 90dpi (así que 1 px se convierta en 1 pixel de mapa de bits), uste puede obtener una imagen interesante sin necesidad de antializado. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Rotación de Objetos + + Rotación de Objetos - - + + - + - Estando con la herramienta Selección, haga clicksobre un objeto para ver las flechas de escalado, entonces haga click nuevamente sobre el objeto para observar las flechas de rotación y cambio. Si Las flechas en las esquinas son clickeadas y arrastradas, el objeto rotará alrededor del centro (mostrado con una marca de cruz). Si mantiene presionada la tecla Mayus mientras hace esto, la rotación será alrededor de la esquina opuesta. También puede arrastrar el centro de rotación a cualquier lugar. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + O, puede rotar desde el teclado presionando [ y ] (por 15 grados) o Ctrl+[ y Ctrl+] (por 90 grados). Las mismas teclas [] junto con Alt desarrollan una lenta rotación a partir del tamaño de pixel. - - Mapa de bits arrojando sombras + + Mapa de bits arrojando sombras - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -670,53 +692,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Colocando texto sobre un trazo + + Colocando texto sobre un trazo - - + + - + - Para colocar texto a lo largo de una curva, seleccione el texto y la curva y escoja Poner en trayecto desde el menú Texto. El texto iniciará en el principio del trazo. En general este es la mejor manera de crear un trazo explícito del cual desea que el texto este ajustado, mejor que esto, ajústelo a otros elementos de dibujo — esto le dará un mayor control sin tener que atornillarlo a su dibujo. + Para colocar texto a lo largo de una curva, seleccione el texto y la curva y escoja Poner en trayecto desde el menú Texto. El texto iniciará en el principio del trazo. En general este es la mejor manera de crear un trazo explícito del cual desea que el texto este ajustado, mejor que esto, ajústelo a otros elementos de dibujo — esto le dará un mayor control sin tener que atornillarlo a su dibujo. - - Selecting the original + + Selecting the original - - + + - + When you have a text on path, a linked offset, or a clone, their source object/path may be difficult to select because it may be directly underneath, or made invisible and/or locked. The magic key Mayus+D will help you; select the text, linked offset, or clone, and press Mayus+D to move selection to the corresponding path, offset source, or clone original. - - Recuperación de la salida de la ventana + + Recuperación de la salida de la ventana - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Exporte de Trasparencias, gradientes y PostScript + + Exporte de Trasparencias, gradientes y PostScript - - - - - - Los formatos PostScript o EPS no admiten trasparencias, así que usted nunca los emplea si los va a exportar a PS/EPS. En el caso de trsparencias planas las cuales superpongan colores planos, es sencillo arreglar esto: seleccione uno de los objetos trasparentes; cambie a la herramienta Cuentagotas (F7); asegurese que este está en el modo "escoger color visible sin alfa"; de click sobre ese mismo objeto. Este escogerá el color visible y lo asignará al objeto, pero esta vez sin trasparencia. Repita para todos los objetos trasparentes. Si sus colores trasparentes superponen múltiples áreas de color, usted necesitará el quebrales en piezas respectivamente y aplicar este procedimiento a cada pieza. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -746,8 +780,8 @@ option to save window geometry (Inkscape Preference - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tips.eu.svg b/share/tutorials/tutorial-tips.eu.svg index d89c87eb6..750b84aee 100644 --- a/share/tutorials/tutorial-tips.eu.svg +++ b/share/tutorials/tutorial-tips.eu.svg @@ -36,89 +36,89 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::TIPS AND TRICKS - - + + Tutorial honek erabiltzaileen eskarmentuagatik ikasitako iradokizun eta trikimailu batzuk azalduko ditu, baita zure lana azkartzen lagun zaitzaketen Inkscape-ko “izkutuko†ezaugarriak ere. - - Mosaikoak klonatu eta erradialki kokatu + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - If your radial pattern need only have 3, 4, 6, 8, or 12 elements, then you can try the -P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These would work nicely for snowflakes + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes and the like. A more general method, however, is as follows. - - + + Choose the P1 symmetry (simple translation) and then compensate for -that translation by going to the Shift tab and setting Per -row/Shift Y and Per column/Shift X both to -100%. Now all +that translation by going to the Shift tab and setting Per +row/Shift Y and Per column/Shift X both to -100%. Now all clones will be stacked exactly on top of the original. All that remains to do is to go -to the Rotation tab and set some rotation angle per column, then +to the Rotation tab and set some rotation angle per column, then create the pattern with one row and multiple columns. For example, here's a pattern made out of a horizontal line, with 30 columns, each column rotated 6 degrees: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -126,8 +126,8 @@ out of a horizontal line, with 30 columns, each column rotated 6 degrees: central part by a white circle (to do boolean operations on clones, unlink them first). - - + + @@ -137,186 +137,186 @@ column. Each group of lines here is a “columnâ€, so the groups are 18 degrees other; within each column, individual lines are 2 degrees apart: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -324,40 +324,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Gradiente ez linealak + + Gradiente ez linealak - - + + SVG-ren 1.1 bertsioak ez du gradiente ez linearrentzako gaitasunik (hau da, koloreen artean bilakaera ez linearra dutenak). Dena den, hauek emulatu ditzakezu eten anitzeko gradienteekin. - - + + - Bi etengunedun gradiente sinple batekin has zaitez. Irekin Gradienteen editorea (Gradiente tresna, edozein heldulekutan klik bikoitza eginez, adibidez). Gehitu eten berri bat erdialdean; mugitu apur bat. Ondoren, gehitu baita eten gehiago erdiko etenaren aurrean eta atzean, gradientea leuna izan dadin. Gero eta eten gehiago jarriz gradientea gero eta leunagoa lor dezakezu. Hona hemen hasierako gradiente zuri-beltza bi etenekin: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -365,11 +373,11 @@ use the Extensions > Web > Slicer - - - + + + - + Eta hemen eten anitzeko gradiente “ez linearrak†(Gradiente editorearekin aztertu): @@ -454,21 +462,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Zentrutik aldendutako gradiente erradialak + + + + + + + + + + Zentrutik aldendutako gradiente erradialak - - + + - + Gradiente radialak ez dute zertan simetrikoak izan behar. Gradiente tresnan, gradiente eliptiko baten erdiko heldulekua arrastatu Shift sakatuta. Honek gradientearen x-itxurako fokatze heldulekua erdigunetik mugituko du. Behar ez duzunean fokatzea erdigunera arrastatu dezakezu berriro. @@ -482,42 +490,42 @@ use the Extensions > Web > Slicer - - - - Orriaren erdiarekiko lerrokatzen + + + + Orriaren erdiarekiko lerrokatzen - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Dokumentua garbitzen + + Dokumentua garbitzen - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Izkutuko ezaugarriak eta XML editorea + + Izkutuko ezaugarriak eta XML editorea - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -525,30 +533,29 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Changing the rulers' unit of measure + + Changing the rulers' unit of measure - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Stamping + + Stamping - - + + - + To quickly create many copies of an object, use stamping. Just drag an object (or scale or rotate it), and while holding the mouse button down, press @@ -556,70 +563,70 @@ drag an object (or scale or rotate it), and while holding the mouse button down, repeat it as many times as you wish. - - Luma tresnaren trikimailuak + + Luma tresnaren trikimailuak - - + + - + Luma (Bezier) tresnan, uneko lerroa bukatzeko ondoko aukerak dituzu: - - - + + + - + Enter sakatu. - - - + + + - + Saguko ezkerreko klik bikoitza egin - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Beste tresna bat hautatu - - + + - + - Ohar zaitez bidea bukatu gabe dagoen bitartean (hau da, berdez dago, uneko segmentua gorriz) dokumentuan ez dela objektu bezala existitzen. Beraz, ezeztatzeko, bai Esc (bide osoa ezeztatzeko) bai Atzera (bukatu gabeko bidearen azkeneko segmentua kendu) erabil itzazu Desegin komandoaren ordez. + Ohar zaitez bidea bukatu gabe dagoen bitartean (hau da, berdez dago, uneko segmentua gorriz) dokumentuan ez dela objektu bezala existitzen. Beraz, ezeztatzeko, bai Esc (bide osoa ezeztatzeko) bai Atzera (bukatu gabeko bidearen azkeneko segmentua kendu) erabil itzazu Desegin komandoaren ordez. - - + + - + Uneko bideari azpibide berri bat gehitzeko, bidea hautatu eta Shift sakatuta duzula marrazten has zaitez edozein puntutik. Hala ere, existitzen den bide bat jarraitu nahi baduzu, Shift ez da beharrezkoa: nahikoa da hautatutako bidearen bukaera-aingura batetik marrazten hastea. - - Unicode balioak sartzen + + Unicode balioak sartzen - - + + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -630,58 +637,70 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Ikonoak marrazteko sareta erabiltzen + + Ikonoak marrazteko sareta erabiltzen - - + + - + - Suposatu 24x24 pixeletako ikono bat sortu nahi duzula. 24x24 px-eko oihal ( Dokumentuaren Propietateak) bat sortu eta sareta 0.5 px-etara konfiguratu (48x48 lerrotako sareta). Betetako objektuak saretaren lerro bikoitietara eta trazuko objektuak lerro bakoitietara atxikitu, trazuaren lodiera pixeletan bikoitia mantendu eta esportatu defektuzko 90dpi-ra (px 1 bit-maparen pixel bat izateko). Horrela antialiasing gabeko bit-mapa karraskatsua lortuko duzu. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Objektuen biratzea + + Objektuen biratzea - - + + - + - Hautatu tresnan gaudela, klik egin objekturen batean eskalatzeko geziak ikusteko eta klik egin berriro biratzeko eta desplazatzeko geziak agertzeko. Izkinetako geziak klikatu eta arrastatzean objektua erdigunearekiko biratuko du (gurutze formako marka bat ikusiko da). Hau egiten duzun bitartean Shift sakatuta mantenduz gero, biraketa aurkako izkina erdigune bezala hartuta gertatuko da. Biraketaren erdigunea edozein puntutan jar dezakezu, baita ere. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Edo teklatua erabiliz biratzeko [ eta ] (15 graduka) edo ktrl+[ eta Ktrl+] (90 graduka) erabil dezakezu. [] tekla hauek Alt sakatuta erabiliz gero, pixelez-pixeleko biraketa geldoa burutuko da. - - Itzalak jaurti + + Itzalak jaurti - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -690,53 +709,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Bide batean testua sartzen + + Bide batean testua sartzen - - + + - + - Testu batek kurba bat jarrai dezan, hautatu testua eta kurba eta Testua menuko Jarri bidean komandoa erabili. Testua bidearen hasieran hasiko da. Normalean hobe da testurako bide zehatz bat sortzea beste elementu batera gehitzea baino — honela kontrol handiagoa izango duzu irudia hondatu gabe + Testu batek kurba bat jarrai dezan, hautatu testua eta kurba eta Testua menuko Jarri bidean komandoa erabili. Testua bidearen hasieran hasiko da. Normalean hobe da testurako bide zehatz bat sortzea beste elementu batera gehitzea baino — honela kontrol handiagoa izango duzu irudia hondatu gabe - - Originala aukeratzen + + Originala aukeratzen - - + + - + Testua bidean, edo desplazamendu estekatua edo klon bat duzula, jatorrizko objektua edo bidea hautatzea zaila bihurtzen da, azpian edo ikusezin edo blokeatuta dagoelako. Shift+D tekla magikoek lagunduko dizute; testua, edo desplazamendu estekatua edo klona hautatu eta Shift+D sakatu hautapena dagokion bide, desplazamendu sorrera edo klon originalera - - Leihoaren gehiegizko tamaina konpontzen + + Leihoaren gehiegizko tamaina konpontzen - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Gardentasuna, gradienteak eta PostScript-era esportatzea + + Gardentasuna, gradienteak eta PostScript-era esportatzea - - - - - - PostScript edo EPS formatuek ezin dute gardentasuna kudeatu, beraz formatu hauek erabili nahi badituzu hobe ez bazenu inoiz erabiltzen; hortarako Tanta-kontagailua (F7) tresna hautatu “uneko kolorea hautatu alfarik gabe†moduan eta klik egin objektu berean. Honela ikusgai dagoen kolorea hautatu eta objektuari berriz ezarriko dio, gardentasunik gabe. Prozedura errepikatu objektu garden guztientzat. Objektu gardenak objektu lauekin gainjartzen badira, zatitan banatu eta prozedura zati bakoitzeko errepikatu beharko duzu. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -766,8 +797,8 @@ option to save window geometry (Inkscape Preference - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tips.fa.svg b/share/tutorials/tutorial-tips.fa.svg index 31f7f9a75..5edc8f517 100644 --- a/share/tutorials/tutorial-tips.fa.svg +++ b/share/tutorials/tutorial-tips.fa.svg @@ -36,15 +36,15 @@ - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید - + ::TIPS AND TRICKS - - + + @@ -53,75 +53,75 @@ the use of Inkscape and some “hidden†features that can help you speed up pr tasks. - - Radial placement with Tile Clones + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - If your radial pattern need only have 3, 4, 6, 8, or 12 elements, then you can try the -P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These would work nicely for snowflakes + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes and the like. A more general method, however, is as follows. - - + + Choose the P1 symmetry (simple translation) and then compensate for -that translation by going to the Shift tab and setting Per -row/Shift Y and Per column/Shift X both to -100%. Now all +that translation by going to the Shift tab and setting Per +row/Shift Y and Per column/Shift X both to -100%. Now all clones will be stacked exactly on top of the original. All that remains to do is to go -to the Rotation tab and set some rotation angle per column, then +to the Rotation tab and set some rotation angle per column, then create the pattern with one row and multiple columns. For example, here's a pattern made out of a horizontal line, with 30 columns, each column rotated 6 degrees: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129,8 +129,8 @@ out of a horizontal line, with 30 columns, each column rotated 6 degrees: central part by a white circle (to do boolean operations on clones, unlink them first). - - + + @@ -140,186 +140,186 @@ column. Each group of lines here is a “columnâ€, so the groups are 18 degrees other; within each column, individual lines are 2 degrees apart: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -327,29 +327,29 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Non-linear gradients + + Non-linear gradients - - + + @@ -357,16 +357,19 @@ use the Extensions > Web > Slicer non-linear translations between colors). You can, however, emulate them by multistop gradients. - - + + - Start with a simple two-stop gradient. Open the Gradient editor (e.g. by -double-clicking on any gradient handle in the Gradient tool). Add a new gradient stop in -the middle; drag it a bit. Then add more stops before and after the middle stop and drag -them too, so that the gradient is smooth. The more stops you add, the smoother you can -make the resulting gradient. Here's the initial black-white gradient with two stops: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: @@ -375,11 +378,11 @@ make the resulting gradient. Here's the initial black-white gradient with t - - - + + + - + And here are various “non-linear†multi-stop gradients (examine them in the Gradient Editor): @@ -466,21 +469,21 @@ Editor): - - - - - - - - - - Excentric radial gradients + + + + + + + + + + Excentric radial gradients - - + + - + Radial gradients don't have to be symmetric. In Gradient tool, drag the central handle of an elliptic gradient with Shift. This will move the x-shaped @@ -498,42 +501,42 @@ need it, you can snap the focus back by dragging it close to the center. - - - - Aligning to the center of the page + + + + Aligning to the center of the page - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Cleaning up the document + + Cleaning up the document - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Hidden features and the XML editor + + Hidden features and the XML editor - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -541,30 +544,29 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Changing the rulers' unit of measure + + Changing the rulers' unit of measure - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Stamping + + Stamping - - + + - + To quickly create many copies of an object, use stamping. Just drag an object (or scale or rotate it), and while holding the mouse button down, press @@ -572,68 +574,68 @@ drag an object (or scale or rotate it), and while holding the mouse button down, repeat it as many times as you wish. - - Pen tool tricks + + Pen tool tricks - - + + - + In the Pen (Bezier) tool, you have the following options to finish the current line: - - - + + + - + Press Enter - - - + + + - + Double click with the left mouse button - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Select another tool - - + + - + Note that while the path is unfinished (i.e. is shown green, with the current segment red) it does not yet exist as an object in the document. Therefore, to cancel it, use either Esc (cancel the whole path) or Backspace -(remove the last segment of the unfinished path) instead of Undo. +(remove the last segment of the unfinished path) instead of Undo. - - + + - + To add a new subpath to an existing path, select that path and start drawing with Shift from an arbitrary point. If, however, what you want is to simply @@ -641,13 +643,13 @@ either Esc (cancel the whole path) or - - Entering Unicode values + + Entering Unicode values - - + + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -658,51 +660,51 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Using the grid for drawing icons + + Using the grid for drawing icons - - + + - + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the -Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). Now, if you align filled objects to even gridlines, and stroked objects to odd gridlines with the stroke width in px being an even -number, and export it at the default 90dpi (so that 1 px becomes 1 bitmap pixel), you +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you get a crisp bitmap image without unneeded antialiasing. - - Object rotation + + Object rotation - - + + - + - When in the Select tool, click on an object to see the scaling arrows, -then click again on the object to see the rotation and shift arrows. If + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If the arrows at the corners are clicked and dragged, the object will rotate around the center (shown as a cross mark). If you hold down the Shift key while doing this, the rotation will occur around the opposite corner. You can also drag the rotation center to any place. - - + + - + Or, you can rotate from keyboard by pressing [ and ] (by 15 degrees) or Ctrl+[ and Ctrl+] (by 90 @@ -710,22 +712,22 @@ degrees). The same [] keys with - - Drop shadows + + Drop shadows - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -734,28 +736,28 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Placing text on a path + + Placing text on a path - - + + - + To place text along a curve, select the text and the curve together and choose -Put on Path from the Text menu. The text will start at the beginning +Put on Path from the Text menu. The text will start at the beginning of the path. In general it is best to create an explicit path that you want the text to be fitted to, rather than fitting it to some other drawing element — this will give you more control without screwing over your drawing. - - Selecting the original + + Selecting the original - - + + - + When you have a text on path, a linked offset, or a clone, their source object/path may be difficult to select because it may be directly underneath, or made invisible and/or @@ -764,42 +766,45 @@ offset, or clone, and press Shift+D to m corresponding path, offset source, or clone original. - - Window off-screen recovery + + Window off-screen recovery - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Transparency, gradients, and PostScript export + + Transparency, gradients, and PostScript export - - + + - + PostScript or EPS formats do not support transparency, so you should never use it if you are going to export to PS/EPS. In the case of flat transparency which overlays flat color, it's easy to fix it: Select one of the -transparent objects; switch to the Dropper tool (F7); make sure it's in -the “pick visible color without alpha†mode; click on that same object. That will pick +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick the visible color and assign it back to the object, but this time without transparency. Repeat for all transparent objects. If your transparent object overlays several flat color areas, you will need to break it correspondingly into pieces and -apply this procedure to each piece. +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. - + @@ -829,8 +834,8 @@ apply this procedure to each piece. - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید diff --git a/share/tutorials/tutorial-tips.hu.svg b/share/tutorials/tutorial-tips.hu.svg index 891ce7b7e..f40e58bdd 100644 --- a/share/tutorials/tutorial-tips.hu.svg +++ b/share/tutorials/tutorial-tips.hu.svg @@ -36,271 +36,274 @@ - - A Ctrl+le nyíl segít a lapozásban + + A Ctrl+le nyíl segít a lapozásban - + ::TIPPEK - - + + Az alábbi tippek és trükkök segítenek elsajátítani az Inkscape használatát, és bemutatunk néhány munkát gyorsító „rejtett†tulajdonságot is. - - Sugaras elrendezés a Csempézett klónokkal + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Ha a sugaras minta csak 3, 4, 6, 8 vagy 12 elemet igényel, akkor választható a P3, P31M, P3M1, P4, P4M, P6 vagy P6M szimmetria. Ezek jók lesznek hópehelyszerű és hasonló dolgokhoz. Viszont egy általánosabb megoldás a következÅ‘: + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Válassza a P1 szimmetriát (egyszerű eltolás), majd az Eltolás lapon ellensúlyozza ezt az eltolást úgy, hogy a Soronként / Y irányú eltolás és az Oszloponként / X irányú eltolás értékét is −100%-ra állítja. Ãgy minden klón pontosan az eredeti objektumra halmozódik. Már csak annyit kell tennie, hogy a Forgatás lapon megad némi oszloponkénti elforgatást, és a mintát egy sorból és több oszlopból készíti. Az alábbi példa egy függÅ‘leges vonalból készült 30 oszloppal, minden oszlop 6°-os elforgatásával: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Válassza a P1 szimmetriát (egyszerű eltolás), majd az Eltolás lapon ellensúlyozza ezt az eltolást úgy, hogy a Soronként / Y irányú eltolás és az Oszloponként / X irányú eltolás értékét is −100%-ra állítja. Ãgy minden klón pontosan az eredeti objektumra halmozódik. Már csak annyit kell tennie, hogy a Forgatás lapon megad némi oszloponkénti elforgatást, és a mintát egy sorból és több oszlopból készíti. Az alábbi példa egy függÅ‘leges vonalból készült 30 oszloppal, minden oszlop 6°-os elforgatásával: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + EbbÅ‘l már könnyen kaphat egy óralapot, ha a középsÅ‘ részt kivágja vagy egyszerűen letakarja egy fehér körrel (kapcsolja le a klónt, ha logikai műveletet akar végezni rajta). - - + + Még érdekesebb hatás érhetÅ‘ el sorokat és oszlopokat is használva. Az alábbi minta 10 oszloppal és 8 sorral készült, soronként 2°-os, oszloponként 18°-os forgatással. Itt minden vonalcsoport egy „oszlopâ€, így a csoportok 18°-onként követik egymást; az egyedi vonalak minden oszlopban 2°-onként helyezkednek el: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Nemlineáris színátmenetek + + Nemlineáris színátmenetek - - + + Az SVG 1.1-es verziója nem támogatja a nemlineáris színátmeneteket (vagyis ahol nemlineáris átmenet van egyik színbÅ‘l a másikba). Azonban mégis készíthetÅ‘ hasonló, többfázisú színátmenettel. - - + + - ElÅ‘ször készítsen egy egyszerű, kétfázisú színátmenetet. Ezután nyissa meg a Színátmenet-szerkesztÅ‘t (pl. a Színátmenet eszközzel duplán kattintva bármelyik színátmenet-vezérlÅ‘n). Adjon a színátmenet közepére egy új fázist; kicsit húzza el. Végül e középsÅ‘ fázis elé és mögé is vegyen fel további fázisokat, melyeket szintén mozgasson el kissé, hogy az átmenet egyenletes legyen. Minél több fázispont van, annál folyamatosabb lesz az átmenet. Ez a kiinduló fekete-fehér, kétfázisú színátmenet: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +360,11 @@ use the Extensions > Web > Slicer - - - + + + - + Itt pedig néhány „nemlineárisâ€, többfázisú színátmenetet láthat (vizsgálja meg Å‘ket a Színátmenet-szerkesztÅ‘vel): @@ -438,21 +449,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Excentrikus sugárirányú színátmenetek + + + + + + + + + + Excentrikus sugárirányú színátmenetek - - + + - + A sugárirányú színátmenet nem csak szimmetrikus lehet. A Színátmenet eszközzel a Shift nyomva tartása mellett húzza el a középsÅ‘ vezérlÅ‘elemet. Ãgy tudja elmozgatni a középpontból az átmenet X alakú fókuszvezérlÅ‘jét. Ezt a vezérlÅ‘elemet bármikor visszaigazíthatja középre, elég ha a színátmenet középpontjának közelébe húzza. @@ -466,42 +477,42 @@ use the Extensions > Web > Slicer - - - - Igazítás a lap közepére + + + + Igazítás a lap közepére - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - A dokumentum tisztítása + + A dokumentum tisztítása - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Rejtett sajátságok és az XML-szerkesztÅ‘ + + Rejtett sajátságok és az XML-szerkesztÅ‘ - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -509,152 +520,163 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - A vonalzók mértékegységének módosítása + + A vonalzók mértékegységének módosítása - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - BélyegzÅ‘ + + BélyegzÅ‘ - - + + - + Egy objektumról gyorsan készíthet sok másolatot a bélyegzÅ‘ funkcióval. Mialatt egy objektumot mozgat (vagy méretez vagy forgat), az egérgomb nyomva tartása közben nyomja le a Szóköz billentyűt. Ez egy „lenyomatot†hagy az adott objektumról. A műveletet ismételheti, ahányszor csak tetszik. - - A Toll eszköz fortélyai + + A Toll eszköz fortélyai - - + + - + A Toll (Bézier) eszközzel befejezheti az aktuális vonalat: - - - + + + - + az Enter megnyomásával; - - - + + + - + a bal egérgombbal duplán kattintva; - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + egy másik eszköz kiválasztásával. - - + + - + - Amíg egy útvonal befejezetlen (azaz zöld, az aktuális szakasz pedig vörös), addig objektumként nem létezik a dokumentumban. Ezért ilyenkor a Visszavonás helyett az Esc (az egész útvonal törlése) vagy a Backspace (az utolsó szakasz törlése) billentyűvel lehet érvényteleníteni az útvonalat. + Amíg egy útvonal befejezetlen (azaz zöld, az aktuális szakasz pedig vörös), addig objektumként nem létezik a dokumentumban. Ezért ilyenkor a Visszavonás helyett az Esc (az egész útvonal törlése) vagy a Backspace (az utolsó szakasz törlése) billentyűvel lehet érvényteleníteni az útvonalat. - - + + - + Egy létezÅ‘ útvonalhoz új al-útvonal adható az útvonal kijelölése után, a Shift nyomva tartása mellett tetszÅ‘leges helyen kezdve a rajzolást. De ha egyszerűen csak folytatni szeretne egy útvonalat, akkor a Shift nem is kell; elég a kijelölt útvonal egyik horgonyától kezdenie rajzolni. - - Unicode-értékek bevitele + + Unicode-értékek bevitele - - + + - + A Szöveg eszközzel dolgozva a Ctrl+U lenyomásával válthat a Unicode és a szokásos beviteli mód között. Unicode módban minden karaktert egy 4 jegyű hexadecimális szám megadásával tud beírni, így lehetÅ‘ség van tetszÅ‘leges jelek bevitelére (feltéve, hogy Ön ismeri az adott karakter Unicode-értékét, és az aktuális betűkészlet tartalmazza is a karaktert). A Unicode módot az Enter billentyűvel hagyhatja el. Például a Ctrl+U 2 0 1 4 Enter beszúrja az em-dash (—) karaktert. Ha beszúrás nélkül szeretne kilépni a Unicode módból, akkor nyomja le az Esc billentyűt. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Ikonok rajzolása rács segítségével + + Ikonok rajzolása rács segítségével - - + + - + - Tegyük fel, hogy rajzolni akar egy 24×24 pixeles ikont. Ãllítsa a vászon méretét 24×24 pixelre (a Dokumentum-beállítások ablakban), a rácstávolság pedig legyen 0,5 px (48×48 rácsvonal). Ha ezután a kitöltött objektumokat a páros, a körvonalas objektumokat pedig a páratlan rácsvonalakhoz igazítja, és a körvonalak szélessége pixelben megadva páros szám, továbbá a rajzot az alapértelmezett 90 dpi felbontással (úgy, hogy 1 px megfelel 1 bitkép-pixelnek) exportálja, akkor egy éles bitképet kap, nincs szükség élsimításra. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Objektumforgatás + + Objektumforgatás - - + + - + - A KijelölÅ‘ eszközzel egy objektumra kattintva láthatja a méretezÅ‘ nyilakat, ismételt kattintásra a forgató és nyíró nyilak jelennek meg. A sarkokban levÅ‘ valamelyik nyíl húzásával forgathatja az objektumot a középpontja (egy kereszt alakú jel) körül. Ha forgatás közben nyomva tartja a Shift billentyűt, akkor a forgatás középpontja átkerül az átellenes sarokba. A forgatás középpontja egérrel is elhúzható bárhová. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Forgathat (15°-onként) a [ és a ] billentyűkkel, vagy (90°-onként) a Ctrl+[ és Ctrl+] billentyűkkel is. Ha az Alt módosítóval használja a [ vagy ] billentyűk valamelyikét, akkor lassan, pixelenként forgathat. - - Vetett árnyék + + Vetett árnyék - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -663,53 +685,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Szöveg útvonalra illesztése + + Szöveg útvonalra illesztése - - + + - + - Egy szöveg útvonalra illesztéséhez a szöveget és a görbét is jelölje ki, majd a Szöveg menübÅ‘l válassza az Útvonalra való illesztés parancsot. A szöveg az útvonal elején fog kezdÅ‘dni. Ajánlott egy külön erre a célra készült útvonalra illeszteni, és nem valamelyik másik rajzelemre – ez több módosítási lehetÅ‘séget biztosít anélkül, hogy a már kész elemeket kellene bolygatni. + Egy szöveg útvonalra illesztéséhez a szöveget és a görbét is jelölje ki, majd a Szöveg menübÅ‘l válassza az Útvonalra való illesztés parancsot. A szöveg az útvonal elején fog kezdÅ‘dni. Ajánlott egy külön erre a célra készült útvonalra illeszteni, és nem valamelyik másik rajzelemre – ez több módosítási lehetÅ‘séget biztosít anélkül, hogy a már kész elemeket kellene bolygatni. - - Az eredeti kijelölése + + Az eredeti kijelölése - - + + - + Ha van egy útvonalra illesztett szövege, egy kapcsolt pereme vagy egy klónja, nehézkes lehet kijelölni a forrásobjektumot vagy ‑útvonalat, mert alul van, láthatatlan vagy zárolt. De a mágikus Shift+D billentyűparancs a segítségére siet; jelölje ki a szöveget, kapcsolt peremet vagy klónt, és a Shift+D hatására a kijelölés áttevÅ‘dik a megfelelÅ‘ útvonalra, peremforrásra vagy a klón eredetijére. - - Az ablakgeometria helyreállítása + + Az ablakgeometria helyreállítása - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Ãtlátszóság, színátmenetek és PostScript-exportálás + + Ãtlátszóság, színátmenetek és PostScript-exportálás - - - - - - Az átlátszóságot a PostScript és az EPS formátum nem támogatja, így célszerű kerülni a használatát, ha ilyen formátumokba készül exportálni. Ha egyenletesen átlátszó objektum takar egyszínű objektumot, akkor a következÅ‘t teheti: jelölje ki az átlátszó objektumot; váltson a Pipetta eszközre (F7); gyÅ‘zÅ‘djön meg arról, hogy az eszköz a „látható szín leolvasása alfa nélkül†módban működik; kattintson ugyanarra az objektumra. Ezáltal a pipetta felveszi és egyben be is állítja a látható színt, de ezúttal már átlátszóság nélkül. Ismételje ezt minden átlátszó objektumra. Ha az átlátszó objektum különféle egyszínű objektumokat takar, akkor megfelelÅ‘en fel kell darabolni, és a műveletet ezeken a darabokon kell végrehajtani. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -739,8 +773,8 @@ option to save window geometry (Inkscape Preference - - A Ctrl+fel nyíl segít a lapozásban + + A Ctrl+fel nyíl segít a lapozásban diff --git a/share/tutorials/tutorial-tips.id.svg b/share/tutorials/tutorial-tips.id.svg index d344fb747..dcffb56c2 100644 --- a/share/tutorials/tutorial-tips.id.svg +++ b/share/tutorials/tutorial-tips.id.svg @@ -36,271 +36,274 @@ - - Gunakan Ctrl+panah bawah untuk menggulung + + Gunakan Ctrl+panah bawah untuk menggulung - + ::TIPS DAN TRIK - - + + Tutorial ini akan mendemonstrasikan bermacam-macam tips dan trik yang sudah dipelajari oleh pengguna dalam menggunakan Inkscape dan beberapa fitur “tersembunyi“ yang bisa membantu mempercepat pekerjaan. - - Penempatan radial dengan Tile Clones + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Jika pola radial hanya membutuhkan 3, 4, 6, 8, atau 12 elemen, anda bisa mencoba simetri P3, P31M, P3M1, P4, P4M, P6, atau P6M. Ini akan menghasilkan bentuk seperti salju dan sejenisnya. Meskipun begitu, terdapat metode umum, yaitu, + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Pilihlah simetri P1 (translasi sederhana - simple translation) kemudian kompensasikan translasi tersebut dengan tab Shift dan aturlah Per row/Shift Y dan Per coloumn/Shift X masing-masing -100%. Kini semua klon akan disusun tepat diatas asalnya. Yang tersisa hanyalah merotasinya dengan tab Rotation dan mengatur sudut rotasi per kolom, kemudian membuat polanya dengan satu baris dan banyak kolom. Sebagai contoh, berikut adalah pola yang dihasilkan dengan garis horisontal, dengan 30 kolom, masing-masing diputar 6 derajat: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Pilihlah simetri P1 (translasi sederhana - simple translation) kemudian kompensasikan translasi tersebut dengan tab Shift dan aturlah Per row/Shift Y dan Per coloumn/Shift X masing-masing -100%. Kini semua klon akan disusun tepat diatas asalnya. Yang tersisa hanyalah merotasinya dengan tab Rotation dan mengatur sudut rotasi per kolom, kemudian membuat polanya dengan satu baris dan banyak kolom. Sebagai contoh, berikut adalah pola yang dihasilkan dengan garis horisontal, dengan 30 kolom, masing-masing diputar 6 derajat: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Untuk mendapatkan clock dial - bentuk muka jam, yang anda butuhkan hanyal memotong atau meng-overlay bagian tengah dari lingkaran putih (untuk melakukan operasi boolean pada klon, unlinklah terlebih dahulu). - - + + Efek yang lebih menarik bisa dihasilkan dengan menggunakan baris dan kolom. Berikut adalah sebuah pola dengan 10 kolom dan 8 baris, dengan rotasi sebesar 2 derajat per baris dan 18 per kolom. Masing-masing grup garis adalah â€kolomâ€, jadi, grup-grup tersebut masing-masing berjarak 18 derajat, garis individualnya terpisah 2 derajat: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,39 +311,47 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t namaberkas.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Gradien non-linear + + Gradien non-linear - - + + SVG versi 1.1 tidak mendukung gradien non-linear (mis. yang memiliki translasi non-linear antar warna). Pun begitu, anda bisa mengemulasikannya dengan gradien multistop. - - + + - Mulailah dengan dua-titik gradien yang sederhana. Bukalah editor Gradient (klik ganda pada handle gradien pada Gradient tooL). Tambahkan gradient stop baru ditengah; seret sedikit. Kemudian tambahkan lagi stop sebelum dan sesudah stop tengah tersebut kemudian geret lagi, sehingga gradien yang dihasilkan halus. Semakin banyak stop yang anda tambahkan, semakin halus hasilnya. Berikut adalah gradien hitam-putih dengan dua stop: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -348,11 +359,11 @@ use the Extensions > Web > Slicer - - - + + + - + Dan berikut adalah macam-macam gradien multi-stop “non-linear†(periksalah dengan Gradient Editor): @@ -437,21 +448,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Gradien radial eksentrik + + + + + + + + + + Gradien radial eksentrik - - + + - + Gradien radial tidaklah harus simetrik. Pada Gradient tool, seret handle tenga dari gradien eliptik dengan Shift. Ini akan memindahkan focus handle bertanda x dari gradien menjauh dari titik tengahnya. Saat anda tidak membutuhkannya, anda bisa menjepit fokusnya kembali dengan menyeretnya ke tengah. @@ -465,42 +476,42 @@ use the Extensions > Web > Slicer - - - - Meratakan ke tengah halaman + + + + Meratakan ke tengah halaman - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Membersihkan dokumen + + Membersihkan dokumen - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Fitur tersembunyi dari editor XML + + Fitur tersembunyi dari editor XML - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -508,152 +519,163 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Merubah takaran satuan ukur + + Merubah takaran satuan ukur - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Cap + + Cap - - + + - + Untuk membuat banyak duplikat sebuah obyek secara cepat, gunakanlah fitur stamping-cap. Seret sebuah obyek (atau skala ulang atau rotasilah), dan sambil tetap menekan tombol tetikus, tekan Spasi pada keyboard. Ini akan meninggalkan â€cap†pada bentuk dan lokasi obyek saat itu. Anda bisa mengulangnya sebanyak yang anda inginkan. - - Trik pen tool + + Trik pen tool - - + + - + Pada tool Pen (Bezier), anda memiliki pilihan-pilihan berikut dalam menyelesaikan sebuah garis: - - - + + + - + Menekan Enter - - - + + + - + Klik ganda dengan tombol kiri tetikus - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Memilih tool yang lain - - + + - + - Ingatlah jika path belum selesai (ditampilkan dalam hijau, dengan segmen merah) ia tidak akan eksis sebagai obyek pada dokumen. Untuk itu, jika anda ingin membatalkan, gunakan Esc (membatalkan seluruh path) atau Backspace (menghilangkan segmen terakhir yang belum selesai) ketimbang menggunakan Undo. + Ingatlah jika path belum selesai (ditampilkan dalam hijau, dengan segmen merah) ia tidak akan eksis sebagai obyek pada dokumen. Untuk itu, jika anda ingin membatalkan, gunakan Esc (membatalkan seluruh path) atau Backspace (menghilangkan segmen terakhir yang belum selesai) ketimbang menggunakan Undo. - - + + - + Untuk menambahkan subpath baru pada path yang sudah ada, pilihlah path tersebut dan mulailah menggambar dengan Shift dari titik arbitarynya. Jika apa yang anda inginkan hanyalah meneruskan sebuah path yang ada, Shift tidak diperlukan; Langsung mulai saja menggambar dari salah satu anchor pada ujungnya. - - Memasukkan nilai Unicode + + Memasukkan nilai Unicode - - + + - + Saat menggunakan Text tool, menekan Ctrl+U akan memindahkan anda dari mode normal ke Unicode. Dalam mode Unicode, setiap grup dari 4 digit heksadesmal yang anda ketikkan menjadi sebuah karakter Unicode, yang membuat anda bisa memasukkan simbol arbitrary (selama anda mengetahui poin kode Unicodenya dan fonta yang mendukungnya). Untuk menyelesaikan masukan Unicode, tekan Enter. Sebagai contoh, Ctrl+U 2 0 1 4 Enter akan menghasilkan em-dash (—). Untuk keluar dari mode Unicode tanpa memasukkan apapun, tekan Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Menggunakan grid untuk menggambar ikon + + Menggunakan grid untuk menggambar ikon - - + + - + - Misalkan anda ingin membuat sebuah ikon berukuran 24x24 piksel. Buatlah sebuah kanvas berukuran 24x24 (menggunakan Document Preferences) dan atur gridnya menjadi 0.5 px (48x48 gridline). Sekarang, jika anda menata sebuah obyek sejajar dengan gridline - garis grid genap, dan memberikan stroke pada obyek sejajar dengan gridline ganjil yang lebar strokenya adalah sebuah nomor genap, kemudian mengekspornya dalam bawaan 90dpi (sehingga 1 px = 1 bitmap pixel), anda akan mendapatkan sebuah gambar bitmap tanpa perlu antialiasing. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Rotasi obyek + + Rotasi obyek - - + + - + - Pada Select tool, klik pada sebuah obyek untuk memunculkan panah skalanya, kemudian klil lagi pada obyek tersebut untuk melihat panah rotasi dan shiftnya. Jika panah yang ditengah diklik kemudian diseret, titik rotasinya akan berpatokan pada titik tersebut (tanda silang). Jika anda menahan Shift saat melakukan ini, rotasi akan dilakukan dengan sudut yang berlawanan. Anda bisa menyeret titik rotasi tersebut kemana saja. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Atau, anda juga bisa menggunakan keyboard dengan menekan [ dan ] (per 15 derajat) atau Ctrl+[ dan Ctrl+] (per 90 derajat). Tombol-tombol [] jika ditengan menggunakan keycap akan merotasi per pixel. - - Bayangan + + Bayangan - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -662,53 +684,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Meletakkan teks dalam sebuah path + + Meletakkan teks dalam sebuah path - - + + - + - Untuk peletakkan teks mengikuti sebuah kurva, pilih teks dan kurvanya, kemudian pilih Put on Path lewat menu Text. Teks tersebut akan mulai dari awal path. Pada umumnya lebih baik membuat sebuah path baru sebagai jalur teks ketimbang menggunakan elemen gambar yang sudah ada - ini akan memberikan anda kontrol yang lebih banyak tanpa merusak gambar. + Untuk peletakkan teks mengikuti sebuah kurva, pilih teks dan kurvanya, kemudian pilih Put on Path lewat menu Text. Teks tersebut akan mulai dari awal path. Pada umumnya lebih baik membuat sebuah path baru sebagai jalur teks ketimbang menggunakan elemen gambar yang sudah ada - ini akan memberikan anda kontrol yang lebih banyak tanpa merusak gambar. - - Memilih obyek asal + + Memilih obyek asal - - + + - + Saat anda memiliki teks dalam path, offset yang berhubungan, atau sebuah klon, obyek asal/sumbernya biasanya sulit untuk diseleksi karna biasanya berada dibawah atau dibuat tidak terlihat dan/atau terkunci. Tombol ajaib Shift+D bisa membantu anda; pilih teks, offset ataupun klon, kemudian tekan Shift+D untuk memindahkan seleksi ke path yang berhubungan, sumber offset, atau klon asal. - - Mengembalikan jendela yang off-screen + + Mengembalikan jendela yang off-screen - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Transparansi, gradien, dan ekspor PostScrip + + Transparansi, gradien, dan ekspor PostScrip - - - - - - PostScript atau format EPS tidak mendukung transparansi, sehingga anda sebaiknya tidak menggunakannya jika anda akan mengekspornya kedala PS/EPS. Dalam kasus transparansi sederhana yang hanya memberikan overlay pada satu warna, sangatlah mudah untuk memperbaikinya: Pilih salah satu obyek transparan; berpindahlah ke Dropper tool (F7); pastikan ia berada dalam mode “pick visible color without alphaâ€; klik pada obyek yang sama. Itu akan mengambil warna yang tampak kemudian memberikan warna tersebut ke obyek, tapi kali ini, tanpa transparansi. Ulangi untuk semua obyek transparan. Jika obyek transparan anda mengoverlay beberapa area warna, anda harus memecahnya menjadi beberapa potongan dan melakukan prosedur tersebut untuk masing-masing potongan. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -738,8 +772,8 @@ option to save window geometry (Inkscape Preference - - Gunakan Ctrl+panah atas untuk menggulung + + Gunakan Ctrl+panah atas untuk menggulung diff --git a/share/tutorials/tutorial-tips.it.svg b/share/tutorials/tutorial-tips.it.svg index e8024c778..8ca58d13d 100644 --- a/share/tutorials/tutorial-tips.it.svg +++ b/share/tutorials/tutorial-tips.it.svg @@ -36,271 +36,274 @@ - - Ctrl+freccia giù per scorrere il documento + + Ctrl+freccia giù per scorrere il documento - + ::TRUCCHI - - + + Questo tutorial dimostrerà vari trucchi che gli utenti hanno imparato nell'uso di Inkscape e qualche caratteristica "nascosta" che può aiutarti a velocizzare la produzione. - - Piazzamento radiale mediante "Cloni in serie" + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Se il tuo motivo radiale deve avere solo 3,4,6,8 o 12 elementi, puoi provare con le simmetrie P3, P31M, P3M1, P4, P4M, P6, o P6M. Queste funzionano bene per i fiocchi di neve e simili. Un metodo più generale, comunque, è il seguente. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Scegli la simmetria P1 (traslazione semplice) e allora compensa questa traslazione andando nella scheda Spostamento e impostando a -100% lo spostamento Y per riga e lo spostamento X per colonna. Ora tutti i cloni saranno disposti esattamente sopra l'originale. Tutto ciò che riamane da fare e andare nella scheda Rotazione e impostare un angolo di rotazione per colonna, quindi crea il motivo con una riga e colonne multiple. Per esempio, qui c'è un motivo realizzato con linee orizzontali, con 30 colonne, ognuna ruotata di 6 gradi: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Scegli la simmetria P1 (traslazione semplice) e allora compensa questa traslazione andando nella scheda Spostamento e impostando a -100% lo spostamento Y per riga e lo spostamento X per colonna. Ora tutti i cloni saranno disposti esattamente sopra l'originale. Tutto ciò che riamane da fare e andare nella scheda Rotazione e impostare un angolo di rotazione per colonna, quindi crea il motivo con una riga e colonne multiple. Per esempio, qui c'è un motivo realizzato con linee orizzontali, con 30 colonne, ognuna ruotata di 6 gradi: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Per avere un quadrante di orologio partendo da questo, tutto ciò che devi fare è togliere o semplicemente sovrapporre la parte centrale con un cerchio bianco (per fare operazioni booleane sui cloni, scollegali prima). - - + + Effetti più interessanti possono essere creati usando sia le righe che le colonne. Qui c'è un motivo con 10 colonne e 8 righe, con rotazione di 2 gradi per riga e 18 per colonna. Ogni gruppo di linee qui è una "colonna", cosi i gruppi sono a 18 gradi l'uno dall'altro; all'interno di ogni colonna, le singole linee sono separate da 2 gradi: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Gradienti non-lineari + + Gradienti non-lineari - - + + La versione 1.1 di SVG non supporta i gradienti non-lineari (cioè quelli che hanno una transizione non-lineare tra i colori). Puoi comunque emularli mediante i gradienti multistop. - - + + - Iniziamo con un semplice gradiente a due stop. Apri l'editor dei Gradienti (facendo doppio click su una qualunque maniglia con lo strumento Gradiente). Aggiungi un nuovo passaggio (stop) nel mezzo; spostalo un po'. Allora aggiungi più passaggi prima e dopo il passaggio di mezzo e spostali, in modo che il gradiente risulti liscio. Più stop aggiungi, più liscio puoi rendere il tuo gradiente. Qui trovi il gradiente iniziale bianco-nero con due passaggi: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +360,11 @@ use the Extensions > Web > Slicer - - - + + + - + E qui trovi vari gradienti non-lineari con multistop (analizzali mediante l'editor dei Gradienti): @@ -438,21 +449,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Gradienti radiali eccentrici + + + + + + + + + + Gradienti radiali eccentrici - - + + - + I gradienti radiali non devono essere necessariamente simmetrici. Con lo strumento Gradiente, sposta con Maiusc la maniglia centrale di un gradiente ellittico. Questo sposterà la maniglia a forma di X del fuoco lontana dal suo centro. Quando non ne hai bisogno, puoi spostare il fuoco nuovamente al centro. @@ -466,42 +477,42 @@ use the Extensions > Web > Slicer - - - - Allineamento al centro della pagina + + + + Allineamento al centro della pagina - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Pulizia del documento + + Pulizia del documento - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Proprietà nascoste e l'editor XML + + Proprietà nascoste e l'editor XML - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -509,97 +520,96 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Cambiare le unità di misura del righello + + Cambiare le unità di misura del righello - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Duplicazione veloce + + Duplicazione veloce - - + + - + Per creare molte copie di un oggetto in maniera rapida, prendilo e mentre tieni premuto il pulsante del mouse calca Spazio. Lascerai una sorta di timbro dove e quante volte vorrai. - - Trucchi con lo strumento Penna + + Trucchi con lo strumento Penna - - + + - + Con lo strumento Penna, hai le seguenti opzioni per terminare la tua linea: - - - + + + - + Premere Invio - - - + + + - + Doppio click con il pulsante sinistro del mouse - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Selezionare un altro strumento - - + + - + - Nota che quando il tracciato non è finito (ovvero esso è verde, con l'ultimo segmento in rosso) esso non esiste ancora come oggetto del documento. Perciò, per cancellarlo, usa o Esc (cancella l'intero tracciato) o Backspace (rimuove l'ultimo segmento non concluso) al posto di Annulla nel menù Modifica. + Nota che quando il tracciato non è finito (ovvero esso è verde, con l'ultimo segmento in rosso) esso non esiste ancora come oggetto del documento. Perciò, per cancellarlo, usa o Esc (cancella l'intero tracciato) o Backspace (rimuove l'ultimo segmento non concluso) al posto di Annulla nel menù Modifica. - - + + - + Per aggiungere un nuovo sottotracciato ad un tracciato esistente, seleziona il tracciato e inizia a disegnare premendo Maiusc da un punto arbitrario. Se, comunque, vuoi semplicemente continuare un tracciato esistente, non è necessario premere Maiusc; inizia il disegno da uno dei due punti di ancoraggio del tracciato selezionato. - - Inserire valori Unicode + + Inserire valori Unicode - - + + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -610,58 +620,70 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Uso della griglia per disegnare icone + + Uso della griglia per disegnare icone - - + + - + - Mettiamo che tu voglia creare una icona 24x24. Crea una pagina di 24x24 px (usa Proprietà Documento) e imposta la griglia a 0.5 px (griglia 48x48). Ora, se tu allinei gli oggetti riempiti alle linee griglia pari, e gli oggetti con contorno a quelle dispari con un contorno di spessore un numero di px pari, e lo esporti con una risoluzione di 90dpi (cosi che 1px diventa 1 pixel bitmap), otterrai un immagine bitmap precisa senza anti-aliasing superfluo. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Rotazione di oggetti + + Rotazione di oggetti - - + + - + - Con lo strumento Selezione, clicca su un oggetto per mostrare le frecce di ridimensionamento, allora clicca di nuovo sull'oggetto per mostrare quelle di rotazione e slittamento. Se le frecce agli angoli vengono cliccate e spostate, l'oggetto ruoterà attorno al centro (mostrato con un segno a croce). Se premi anche lo Maiusc mentre fai ciò, la rotazione avverrà attorno all'angolo opposto. Puoi anche spostare il punto di rotazione ovunque. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Oppure, puoi ruotare mediante la tastiera premendo [ and ] (di 15 gradi) o Ctrl+[ and Ctrl+] (di 90 gradi). Sempre mediante [] ma con il tasto Alt ruoterà di un pixel. - - Ombre + + Ombre - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -670,53 +692,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Posizionare un testo su un tracciato + + Posizionare un testo su un tracciato - - + + - + - Per posizionare un testo su un tracciato, seleziona un testo e il tracciato insieme e scegli Metti su tracciato dal menù Testo. Il testo inizierà all'inizio del tracciato. In generale è meglio creare un apposito tracciato che sia adatto al testo, piuttosto che adattare del testo ad un disegno esistente - questo ti darà maggior controllo senza distorcere i tuoi disegni. + Per posizionare un testo su un tracciato, seleziona un testo e il tracciato insieme e scegli Metti su tracciato dal menù Testo. Il testo inizierà all'inizio del tracciato. In generale è meglio creare un apposito tracciato che sia adatto al testo, piuttosto che adattare del testo ad un disegno esistente - questo ti darà maggior controllo senza distorcere i tuoi disegni. - - Selezionare l'originale + + Selezionare l'originale - - + + - + Quando hai un testo su un tracciato, una proiezione collegata, o un clone, il loro oggetto/tracciato sorgente può essere difficile da selezionare perchè esso è esattamente sottostante o reso invisibile e/o bloccato. Il tasto magico Maiusc+D ti aiuterà; seleziona il testo, la proiezione collegata, o il clone e premi Maiusc+D per muovere la selezione verso il corrispondente tracciato, la sorgente della proiezione o il clone originale. - - Recupero di finestre fuori dallo schermo + + Recupero di finestre fuori dallo schermo - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Trasparenze, gradienti e esportare PostScript + + Trasparenze, gradienti e esportare PostScript - - - - - - I formati PostScript o EPS non supportano la trasparenza,quindi non dovrai mai usarla se hai intenzione di esportare in PS/EPS. Nel caso di trasparenza piatta che si sovrappone ad un colore piatto, è facile rimediare: seleziona un oggetto trasparente, seleziona lo strumento Contagocce (F7); assicurati che sia nella modalità "prendi colori senza alfa"; clicca sullo stesso oggetto. Prenderai cosi il colore visibile e lo assegnerai direttamente all'oggetto, ma questa volta senza trasparenza. Ripeti per tutti gli oggetti con trasparenza. Se il tuo oggetto trasparente ricopre parecchie aree di colore piatto, avrai bisogno di dividerlo in pezzi in corrispondenza delle aree e applicare questa procedura per ogni pezzo. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -746,8 +780,8 @@ option to save window geometry (Inkscape Preference - - Ctrl+freccia sù per scorrere il documento + + Ctrl+freccia sù per scorrere il documento diff --git a/share/tutorials/tutorial-tips.ja.svg b/share/tutorials/tutorial-tips.ja.svg index 39d0baae0..6da1d8a4d 100644 --- a/share/tutorials/tutorial-tips.ja.svg +++ b/share/tutorials/tutorial-tips.ja.svg @@ -36,271 +36,274 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::ヒントやコツ - - + + ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã€ä½œå“制作を助ã‘効率化を図るã„ãã¤ã‹ã®ã€Œéš ã—機能ã€ã‚„ユーザーãŒè¦‹ã¤ã‘ãŸã•ã¾ã–ã¾ãªãƒ’ントやコツを紹介ã—ã¦ã„ã¾ã™ã€‚ - - タイルクローンを使ã£ãŸæ”¾å°„状ã®é…ç½® + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - 作りãŸã„放射状パターンãŒã€3ã€4ã€6ã€8ã€ã‚ã‚‹ã„㯠12 ã®è¦ç´ ã ã‘ã§ã„ã„ãªã‚‰ã€å¯¾ç§°åŒ–ã® P3ã€P31Mã€P3M1ã€P4ã€P4Mã€P6ã€ã‚ã‚‹ã„㯠P6M を試ã—ã¦ã¿ã¦ãã ã•ã„。ã“れã¯é›ªç‰‡ãªã©ã‚’作æˆã™ã‚‹ã®ã«é©ã—ã¦ã„ã¾ã™ã€‚ã—ã‹ã—ã€ã‚‚ã£ã¨æ±Žç”¨çš„ãªã‚„り方ã ã¨æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - 対称化㮠P1 (シンプル移動) ã‚’é¸ã³ã€ã‚·ãƒ•ト タブ㧠行ã”ã¨/垂直シフト ãŠã‚ˆã³ 列ã”ã¨/水平シフト ã‚’ãれãžã‚Œ -100% ã«è¨­å®šã—ã€ç§»å‹•を平衡ã•ã›ã¾ã™ (訳注: 「タイルを考慮ã—ãªã„ã€ã‚’é¸ã‚“ã§ã‚‚ã§ãã¾ã™)。ã“れã§ã™ã¹ã¦ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã¯ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä¸Šã«æ­£ç¢ºã«ç©ã¿é‡ãªã‚Šã¾ã™ã€‚ã‚ã¨ã¯ 回転 タブã§åˆ—ã”ã¨ã®å›žè»¢è§’度を設定ã—ã€è¡ŒãŒ 1ã€åˆ—ãŒè¤‡æ•°ã«ãªã‚‹ã‚ˆã†ã«ã—ã¦ä½œæˆã—ã¾ã™ã€‚例ã¨ã—ã¦ã€ä»¥ä¸‹ã«æ°´å¹³ç·šã€åˆ—æ•° 30ã€å›žè»¢è§’度 6°ã§ä½œæˆã—ãŸãƒ‘ターンを示ã—ã¾ã™ã€‚ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 対称化㮠P1 (シンプル移動) ã‚’é¸ã³ã€ã‚·ãƒ•ト タブ㧠行ã”ã¨/垂直シフト ãŠã‚ˆã³ 列ã”ã¨/水平シフト ã‚’ãれãžã‚Œ -100% ã«è¨­å®šã—ã€ç§»å‹•を平衡ã•ã›ã¾ã™ (訳注: 「タイルを考慮ã—ãªã„ã€ã‚’é¸ã‚“ã§ã‚‚ã§ãã¾ã™)。ã“れã§ã™ã¹ã¦ã®ã‚¯ãƒ­ãƒ¼ãƒ³ã¯ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ä¸Šã«æ­£ç¢ºã«ç©ã¿é‡ãªã‚Šã¾ã™ã€‚ã‚ã¨ã¯ 回転 タブã§åˆ—ã”ã¨ã®å›žè»¢è§’度を設定ã—ã€è¡ŒãŒ 1ã€åˆ—ãŒè¤‡æ•°ã«ãªã‚‹ã‚ˆã†ã«ã—ã¦ä½œæˆã—ã¾ã™ã€‚例ã¨ã—ã¦ã€ä»¥ä¸‹ã«æ°´å¹³ç·šã€åˆ—æ•° 30ã€å›žè»¢è§’度 6°ã§ä½œæˆã—ãŸãƒ‘ターンを示ã—ã¾ã™ã€‚ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ã“れを時計ã®ç›®ç››ã‚Šæ¿ã®ã‚ˆã†ã«ã™ã‚‹ã«ã¯ã€åˆ‡ã‚ŠæŠœãã‹ã€ã‚·ãƒ³ãƒ—ルã«ç™½ã„円ã§ä¸­å¿ƒéƒ¨ã‚’覆ã„éš ã—ã¾ã™ (クローン上ã§ãƒ–ーリアン演算を行ã†ã«ã¯ã€ã¾ãšã“れらã®ãƒªãƒ³ã‚¯ã‚’解除ã—ã¦ãã ã•ã„)。 - - + + 行ã¨åˆ—ã®ä¸¡æ–¹ã‚’使ã†ã“ã¨ã«ã‚ˆã£ã¦ã€ã‚‚ã£ã¨ãŠã‚‚ã—ã‚ã„効果を作り出ã›ã¾ã™ã€‚ã“ã“ã«æŒ™ã’ãŸãƒ‘ターンã¯ã€åˆ—æ•° 10ã€è¡Œæ•° 8ã€è¡Œã”ã¨ã®å›žè»¢è§’度 2°ã€åˆ—ã”ã¨ã®å›žè»¢è§’度 18°ã§ä½œæˆã—ãŸã‚‚ã®ã§ã™ã€‚ã“ã“ã§ã®å„ç·šã®ã‚°ãƒ«ãƒ¼ãƒ—ãŒã€Œåˆ—ã€ã§ã‚りã€ã‚°ãƒ«ãƒ¼ãƒ—ã¯ãれãžã‚Œ 18°ãšã¤é›¢ã‚Œã¦ã„ã¾ã™ã€‚å„列内ã§ã¯ã€å€‹ã€…ã®ç·šã¯ 2°ãšã¤é›¢ã‚Œã¦ã„ã¾ã™: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - スライス (領域を複数ã®çŸ©å½¢ã«åˆ†ã‘ã¦ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ) ã™ã‚‹ã«ã¯ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + スライス (領域を複数ã®çŸ©å½¢ã«åˆ†ã‘ã¦ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ) ã™ã‚‹ã«ã¯ - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,39 +311,47 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - éžç·šå½¢ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ + + éžç·šå½¢ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ - - + + SVG ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 1.1 ã¯éžç·šå½¢ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ (ã™ãªã‚ã¡è‰²ã®éžç·šå½¢å¤‰æ›) をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。ã—ã‹ã—ã€ãƒžãƒ«ãƒã‚¹ãƒˆãƒƒãƒ— グラデーションã«ã‚ˆã£ã¦ã‚¨ãƒŸãƒ¥ãƒ¬ãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - - + + - ã¾ãšã€ã‚·ãƒ³ãƒ—ル㪠2 åœæ­¢ç‚¹ã®ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’作æˆã—ã¾ã™ã€‚グラデーションエディターを開ã (グラデーションツールã§ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ãƒãƒ³ãƒ‰ãƒ«ã‚’ダブルクリック)ã€ä¸­é–“ã«æ–°ã—ã„色フェーズを追加ã—ã¾ã™ (ã™ã“ã—ドラッグã—ã¦ãã ã•ã„)。ã•らã«è‰²ãƒ•ェーズを追加ã—ã€ãれらもドラッグã™ã‚‹ã“ã¨ã§ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã¯æ»‘らã‹ã«ãªã‚Šã¾ã™ã€‚ãã—ã¦ã•らã«è‰²ãƒ•ェーズを追加ã™ã‚Œã°ã€ã‚ˆã‚Šãªã‚らã‹ãªã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ãŒã§ãã‚ãŒã‚Šã¾ã™ã€‚ä»¥ä¸‹ã¯æœ€åˆã®ç™½ã¨é»’ã® 2 åœæ­¢ç‚¹ã®ã¿ã®ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã§ã™: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -348,11 +359,11 @@ use the Extensions > Web > Slicer - - - + + + - + ãã—ã¦ä»¥ä¸‹ã¯ã•ã¾ã–ã¾ãªã€Œéžç·šå½¢ã€ãƒžãƒ«ãƒã‚¹ãƒˆãƒƒãƒ—グラデーションã§ã™ (グラデーションエディターã§èª¿ã¹ã¦ã¿ã¦ãã ã•ã„)。 @@ -437,21 +448,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - 一風変ã‚ã£ãŸæ”¾å°„状グラデーション + + + + + + + + + + 一風変ã‚ã£ãŸæ”¾å°„状グラデーション - - + + - + 放射状グラデーションã¯å¯¾ç§°æ€§ã‚’æŒã¡ã¾ã›ã‚“。グラデーションツールã§ã€æ¥•円グラデーションã®ä¸­å¿ƒãƒãƒ³ãƒ‰ãƒ«ã‚’ Shift キーを押ã—ãªãŒã‚‰ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨ã€Ã—å­—å½¢ã®ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã®ç„¦ç‚¹ãƒãƒ³ãƒ‰ãƒ«ãŒä¸­å¿ƒã‚’離れã¦ç§»å‹•ã—ã¾ã™ã€‚ã‚‚ã—焦点を中心ã¨åŒã˜ä½ç½®ã«æˆ»ã—ãŸã„å ´åˆã¯ã€ä¸­å¿ƒãƒãƒ³ãƒ‰ãƒ«ä»˜è¿‘ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚Œã°ä¸­å¿ƒã«ã‚¹ãƒŠãƒƒãƒ—ã•れã¾ã™ã€‚ @@ -465,191 +476,202 @@ use the Extensions > Web > Slicer - - - - ページ中央ã¸ã®é…ç½® + + + + ページ中央ã¸ã®é…ç½® - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - ドキュメントã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ— + + ドキュメントã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ— - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - XML エディターã®éš ã—機能 + + XML エディターã®éš ã—機能 - - + + - + XML エディター (Shift+Ctrl+X) ã§ã¯ã€å¤–部ã®ãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ã‚’使用ã›ãšã«ã€ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’ã»ã¨ã‚“ã©ã™ã¹ã¦ã®é¢ã‹ã‚‰å¤‰æ›´ã§ãã¾ã™ã€‚Inkscape 㯠GUI ã‹ã‚‰ç·¨é›†ã§ãるよりも多ãã® SVG 機能をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ãŒã€XML エディターã¯ã“ã‚Œã‚‰ã®æ©Ÿèƒ½ã‚’利用ã™ã‚‹ä¸€ã¤ã®æ‰‹æ®µã§ã™ (ã‚‚ã—ã‚ãªãŸãŒ SVG ã«ã¤ã„ã¦ã”存知ãªã‚‰ã°)。 - - ルーラーã®å˜ä½ã®å¤‰æ›´ + + ルーラーã®å˜ä½ã®å¤‰æ›´ - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - スタンプ + + スタンプ - - + + - + オブジェクトã®è¤‡è£½ã‚’ç´ æ—©ã作æˆã™ã‚‹ã«ã¯ã€ã‚¹ã‚¿ãƒ³ãƒ— 機能を使ã„ã¾ã™ã€‚オブジェクトをドラッグ (ã¾ãŸã¯æ‹¡å¤§ç¸®å°ã‚„回転) ã—ã€ãƒžã‚¦ã‚¹ãƒœã‚¿ãƒ³ã‚’押ã—ã¦ã„る間㫠スペース キーを押ã—ã¾ã™ã€‚ãã®æ™‚点ã§ã®ã‚ªãƒ–ジェクトãŒã€Œã‚¹ã‚¿ãƒ³ãƒ—ã€ã¨ã—ã¦æ®‹ã‚Šã¾ã™ã€‚好ããªã ã‘ã“れを繰り返ã›ã¾ã™ã€‚ - - ペンツールã®è£æŠ€ + + ペンツールã®è£æŠ€ - - + + - + ペン (ベジエ) ãƒ„ãƒ¼ãƒ«ã§æç”»ä¸­ã®ç·šã‚’完了ã•ã›ã‚‹ã«ã¯ä»¥ä¸‹ã®ã‚ªãƒ—ションãŒã‚りã¾ã™: - - - + + + - + Enter キーを押㙠- - - + + + - + マウスã®å·¦ãƒœã‚¿ãƒ³ã§ãƒ€ãƒ–ルクリックã™ã‚‹ - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + ä»–ã®ãƒ„ãƒ¼ãƒ«ã‚’é¸æŠžã™ã‚‹ - - + + - + - パスãŒå®Œäº†ã—ã¦ã„ãªã„é–“ (æç”»ã—ãŸç·šãŒç·‘色ã€ç¾åœ¨ã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã¯èµ¤è‰²) ã¯ã€ã‚ªãƒ–ジェクトã¯ã¾ã ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä¸Šã«å­˜åœ¨ã—ã¦ã„ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。従ã£ã¦ã€ãれをキャンセルã™ã‚‹ã«ã¯ã€å…ƒã«æˆ»ã™ ã®ã§ã¯ãªãã€Esc キー (パス全体をキャンセル) ã¾ãŸã¯ Backspace キー (未完了ã®ãƒ‘ã‚¹ã®æœ€å¾Œã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã®ã¿å‰Šé™¤) を使用ã—ã¾ã™ã€‚ + パスãŒå®Œäº†ã—ã¦ã„ãªã„é–“ (æç”»ã—ãŸç·šãŒç·‘色ã€ç¾åœ¨ã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã¯èµ¤è‰²) ã¯ã€ã‚ªãƒ–ジェクトã¯ã¾ã ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆä¸Šã«å­˜åœ¨ã—ã¦ã„ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。従ã£ã¦ã€ãれをキャンセルã™ã‚‹ã«ã¯ã€å…ƒã«æˆ»ã™ ã®ã§ã¯ãªãã€Esc キー (パス全体をキャンセル) ã¾ãŸã¯ Backspace キー (未完了ã®ãƒ‘ã‚¹ã®æœ€å¾Œã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã®ã¿å‰Šé™¤) を使用ã—ã¾ã™ã€‚ - - + + - + 既存ã®ãƒ‘ã‚¹ã«æ–°è¦ã«ã‚µãƒ–パスを追加ã™ã‚‹ã«ã¯ã€ãƒ‘ã‚¹ã‚’é¸æŠžã— Shift キーを押ã—ãªãŒã‚‰ä»»æ„ã®ãƒã‚¤ãƒ³ãƒˆã‚’æç”»ã—ã¦ãã ã•ã„。ã—ã‹ã—ã€æ—¢å­˜ã®ãƒ‘スを伸ã°ã—ãŸã„ã ã‘ãªã‚‰ã°ã€Shift を押ã™å¿…è¦ã¯ã‚りã¾ã›ã‚“。å˜ã«é¸æŠžã—ãŸãƒ‘スã®çµ‚点ã‹ã‚‰æç”»ã‚’é–‹å§‹ã—ã¦ãã ã•ã„。 - - Unicode 値ã®å…¥åŠ› + + Unicode 値ã®å…¥åŠ› - - + + - + テキストツールã§ã¯ã€Ctrl+U を押ã™ã“ã¨ã§ Unicode ã¨é€šå¸¸ãƒ¢ãƒ¼ãƒ‰ã‚’切り替ãˆã¾ã™ã€‚Unicode モードã§ã¯ 4 個㮠16 進数ã®ã‚°ãƒ«ãƒ¼ãƒ—を入力ã™ã‚‹ã“ã¨ã§ Unicode 1 文字ã«ãªã‚Šã¾ã™ã®ã§ã€(ã‚ãªãŸãŒãれら㮠Unicode を知ã£ã¦ãŠã‚Šã€ãƒ•ォントãŒã‚µãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹é™ã‚Š) ä»»æ„ã®è¨˜å·ã‚’入力ã™ã‚‹äº‹ãŒã§ãã¾ã™ã€‚Unicode 入力を終了ã™ã‚‹ã«ã¯ Enter キーを押ã—ã¾ã™ã€‚例ãˆã°ã€Ctrl+U 2 0 1 4 Enter ã§ emダッシュ(—) ãŒæŒ¿å…¥ã•れã¾ã™ã€‚何も入力ã›ãšã« Unicode を抜ã‘ã‚‹ã«ã¯ Esc キーを押ã—ã¾ã™ã€‚ - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - アイコンæç”»ã®ãŸã‚ã®ã‚°ãƒªãƒƒãƒ‰ã®ä½¿ç”¨ + + アイコンæç”»ã®ãŸã‚ã®ã‚°ãƒªãƒƒãƒ‰ã®ä½¿ç”¨ - - + + - + - 24×24 ピクセルã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’作æˆã—ãŸã„å ´åˆã¯ã€24×24 px ã®ã‚­ãƒ£ãƒ³ãƒã‚¹ã‚’ä½œæˆ (ドキュメントã®è¨­å®š) ã—ã€ã‚°ãƒªãƒƒãƒ‰ã‚’ 0.5 px (48×48 ã®ã‚°ãƒªãƒƒãƒ‰ç·šã«è¨­å®š) ã—ã¾ã™ã€‚フィルã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’å¶æ•°ã®ã‚°ãƒªãƒƒãƒ‰ç·šã«ã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ã®ã‚ªãƒ–ジェクトを奇数ã®ã‚°ãƒªãƒƒãƒ‰ç·šã«é…ç½®ã—ãŸã‚‰ã€ãれをデフォルト㮠90dpi (1 px 㯠1 ビットマップピクセルã«ãªã‚Šã¾ã™) ã§ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ã™ã‚‹ã¨ã‚¢ãƒ³ãƒã‚¨ã‚¤ãƒªã‚¢ã‚¹ã®ã‹ã‹ã£ã¦ã„ãªã„ビットマップ画åƒãŒå‡ºæ¥ä¸ŠãŒã‚Šã¾ã™ã€‚ + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - オブジェクトã®å›žè»¢ + + オブジェクトã®å›žè»¢ - - + + - + - é¸æŠžãƒ„ãƒ¼ãƒ«ã®æ™‚ã«ã€ã‚ªãƒ–ジェクトをクリックã™ã‚‹ã¨ã€æ‹¡å¤§ç¸®å°ã®çŸ¢å°ãŒè¡¨ç¤ºã•れã€ãã®ã‚ªãƒ–ジェクト上ã§å†åº¦ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ã¨å›žè»¢ãŠã‚ˆã³ã‚·ãƒ•トã®çŸ¢å°ãŒè¡¨ç¤ºã•れã¾ã™ã€‚è§’ã®çŸ¢å°ã‚’クリックãŠã‚ˆã³ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã¨ã€ã‚ªãƒ–ジェクトã¯ãã®ä¸­å¿ƒã‚’軸 (+å°ãŒè¡¨ç¤ºã•れã¾ã™) ã¨ã—ã¦å›žè»¢ã—ã¾ã™ã€‚Shift キーを押ã™ã¨ã€å¯¾è§’を軸ã¨ã—ã¦å›žè»¢ã—ã¾ã™ã€‚回転軸ã¯ãƒ‰ãƒ©ãƒƒã‚°ã§å¥½ããªä½ç½®ã«ç½®ãã“ã¨ãŒã§ãã¾ã™ã€‚ + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + ã¾ãŸã€ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã‹ã‚‰ [ ãŠã‚ˆã³ ] キーを押ã™ã¨ 15°ãšã¤å›žè»¢ã—ã€Ctrl+[ ãŠã‚ˆã³ Ctrl+] キーを押ã™ã¨90°ãšã¤å›žè»¢ã—ã¾ã™ã€‚Alt キーを押ã—ãªãŒã‚‰ã ã¨ã€ãƒ”クセルサイズå˜ä½ã®ã‚†ã£ãりã¨ã—ãŸå›žè»¢ã«ãªã‚Šã¾ã™ã€‚ - - 影をè½ã¨ã™ + + 影をè½ã¨ã™ - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -658,53 +680,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - パス上ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’ç½®ã + + パス上ã«ãƒ†ã‚­ã‚¹ãƒˆã‚’ç½®ã - - + + - + - æ›²ç·šã«æ²¿ã£ã¦ãƒ†ã‚­ã‚¹ãƒˆã‚’é…ç½®ã™ã‚‹ã«ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆã¨æ›²ç·šã‚’一緒ã«é¸æŠžã—ã€ã€Œãƒ†ã‚­ã‚¹ãƒˆã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ テキストをパス上ã«é…ç½® ã‚’é¸ã³ã¾ã™ã€‚テキストã¯ãƒ‘スã®å…ˆé ­ã‹ã‚‰ãƒ‘ã‚¹ã«æ²¿ã£ã¦è¡¨ç¤ºã•れã¾ã™ã€‚一般ã«ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’沿ã‚ã›ã‚‹ã«ã¯ãれ用ã«ãƒ‘スを作æˆã™ã‚‹ã®ãŒæœ€é©ã§ã™ã€‚ + æ›²ç·šã«æ²¿ã£ã¦ãƒ†ã‚­ã‚¹ãƒˆã‚’é…ç½®ã™ã‚‹ã«ã¯ã€ãƒ†ã‚­ã‚¹ãƒˆã¨æ›²ç·šã‚’一緒ã«é¸æŠžã—ã€ã€Œãƒ†ã‚­ã‚¹ãƒˆã€ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‹ã‚‰ テキストをパス上ã«é…ç½® ã‚’é¸ã³ã¾ã™ã€‚テキストã¯ãƒ‘スã®å…ˆé ­ã‹ã‚‰ãƒ‘ã‚¹ã«æ²¿ã£ã¦è¡¨ç¤ºã•れã¾ã™ã€‚一般ã«ã€ãƒ†ã‚­ã‚¹ãƒˆã‚’沿ã‚ã›ã‚‹ã«ã¯ãれ用ã«ãƒ‘スを作æˆã™ã‚‹ã®ãŒæœ€é©ã§ã™ã€‚ - - ã‚ªãƒªã‚¸ãƒŠãƒ«ã‚’é¸æŠžã™ã‚‹ + + ã‚ªãƒªã‚¸ãƒŠãƒ«ã‚’é¸æŠžã™ã‚‹ - - + + - + パス上ã«é…ç½®ã—ãŸãƒ†ã‚­ã‚¹ãƒˆã€ãƒªãƒ³ã‚¯ã‚ªãƒ•セットã€ã‚ã‚‹ã„ã¯ã‚¯ãƒ­ãƒ¼ãƒ³ãŒã‚ã‚‹å ´åˆã€å ´åˆã«ã‚ˆã£ã¦ã¯ãれらã®ã‚‚ã¨ã¨ãªã‚‹ã‚ªãƒ–ジェクト/パスを探ã™ã®ãŒé›£ã—ããªã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ãªãœãªã‚‰ã€ãれã¯ç›´ä¸‹ã«ã‚ã‚‹ã¨ã‹ã€è¦‹ãˆãªãã—ã¦ã„ã‚‹ã€ã‚ã‚‹ã„ã¯ãƒ­ãƒƒã‚¯ã•れã¦ã„ã‚‹ã‹ã‚‚ã—れãªã„ã‹ã‚‰ã§ã™ã€‚マジックキー Shift+D ãŒãれを助ã‘ã¦ãれã¾ã™ã€‚テキストã€ãƒªãƒ³ã‚¯ã‚ªãƒ•セットã€ã‚ã‚‹ã„ã¯ã‚¯ãƒ­ãƒ¼ãƒ³ã‚’é¸æŠžã—ã€Shift+D を押ã™ã¨å¯¾å¿œã™ã‚‹ãƒ‘スã€ã‚ªãƒ•セットソースã€ã‚ã‚‹ã„ã¯ã‚¯ãƒ­ãƒ¼ãƒ³ã‚ªãƒªã‚¸ãƒŠãƒ«ãŒé¸æŠžã•れã¾ã™ã€‚ - - ç”»é¢ã®å¤–ã«å‡ºã¦ã—ã¾ã£ãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å›žå¾© + + ç”»é¢ã®å¤–ã«å‡ºã¦ã—ã¾ã£ãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®å›žå¾© - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - 逿˜Žã€ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã€ãã—㦠PostScript エクスãƒãƒ¼ãƒˆ + + 逿˜Žã€ã‚°ãƒ©ãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã€ãã—㦠PostScript エクスãƒãƒ¼ãƒˆ - - - - - - PostScript ã‚„ EPS å½¢å¼ã¯é€æ˜Žåº¦ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。ãªã®ã§ã€ãれを決ã—㦠PS/EPS ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ãªã„ã§ãã ã•ã„。å‡ä¸€ãªé€æ˜Žãƒ‡ãƒ¼ã‚¿ãŒå˜ä¸€è‰²ã‚’覆ã£ã¦ã„ã‚‹å ´åˆã¯ç°¡å˜ã«è§£æ±ºã§ãã¾ã™ã€‚逿˜Žã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’é¸æŠžã—ã€ã‚¹ãƒã‚¤ãƒˆãƒ„ールã«åˆ‡ã‚Šæ›¿ãˆ (F7)ã€ã€ŒæŽ¡å–ã€(ä¸é€æ˜Žåº¦ã®æŽ¡å–モード) をオフã«ã—ã¦ã€åŒã˜ã‚ªãƒ–ジェクトをクリックã—ã¾ã™ã€‚è¡¨ç¤ºè‰²ãŒæŽ¡å–ã•れã€ã‚ªãƒ–ジェクトã®èƒŒå¾Œã«å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¾ã™ãŒã€ã“ã®æ™‚点ã§é€æ˜Žåº¦ã¯å­˜åœ¨ã—ã¾ã›ã‚“。ã™ã¹ã¦ã®é€æ˜Žã‚ªãƒ–ジェクトã§ã“れを繰り返ã—ã¾ã™ã€‚逿˜Žã‚ªãƒ–ジェクトãŒã„ãã¤ã‹ã®è‰²ã®é ˜åŸŸã‚’覆ã£ã¦ã„ã‚‹å ´åˆã€ãれã«å¿œã˜ã¦é€æ˜Žã‚ªãƒ–ジェクトを分割ã—ã€ãれãžã‚Œã«ã“ã®æ‰‹é †ã‚’é©ç”¨ã—ã¾ã™ã€‚ + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -734,8 +768,8 @@ option to save window geometry (Inkscape Preference - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tips.nl.svg b/share/tutorials/tutorial-tips.nl.svg index 6c42d360e..9d287619a 100644 --- a/share/tutorials/tutorial-tips.nl.svg +++ b/share/tutorials/tutorial-tips.nl.svg @@ -36,271 +36,274 @@ - Gebruik Ctrl+pijl omlaag om te scrollen + Gebruik Ctrl+pijl omlaag om te scrollen handleiding - + ::TIPS EN TRUCS - - + + Deze handleiding demonstreert verschillende tips en trucs die gebruikers leerden door het gebruik van Inkscape, alsook enkele “verborgen†features die je werk kunnen versnellen. - - Radiale positionering met behulp van Tegelen met klonen + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Indien je radiaal patroon slechts 3, 4, 6, 8, of 12 elementen bevat, probeer dan P3-, P31M-, P3M1-, P4-, P4M-, P6- of P6M-symmetrie. Deze geven een mooi resultaat voor sneeuwvlokken en dergelijke. Dit is echter een meer algemene methode. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Kies de P1-symmetrie (eenvoudige verplaatsing) en compenseer vervolgens voor de verplaatsing door naar de tab Verplaatsing te gaan en Per rij / Y-verplaatsing en Per kolom / X-verplaatsing beide op -100% in te stellen. Nu zullen alle klonen exact op het origineel liggen. Alles wat nu nog gedaan moet worden is naar de tab Rotatie te gaan en een rotatie per kolom in te stellen. Creëer vervolgens het patroon met een rij en meerdere kolommen. Hier is bijvoorbeeld een patroon gemaakt uit een horizontale lijn met 30 kolommen en elke kolom geroteerd over 6 graden: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Kies de P1-symmetrie (eenvoudige verplaatsing) en compenseer vervolgens voor de verplaatsing door naar de tab Verplaatsing te gaan en Per rij / Y-verplaatsing en Per kolom / X-verplaatsing beide op -100% in te stellen. Nu zullen alle klonen exact op het origineel liggen. Alles wat nu nog gedaan moet worden is naar de tab Rotatie te gaan en een rotatie per kolom in te stellen. Creëer vervolgens het patroon met een rij en meerdere kolommen. Hier is bijvoorbeeld een patroon gemaakt uit een horizontale lijn met 30 kolommen en elke kolom geroteerd over 6 graden: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Om hier een wijzerplaat van een klok van te maken is het centrale deel wegsnijden (ontlink eerst de klonen voor booleaanse operaties) of overtekenen met een witte cirkel. - - + + Interessantere effecten kunnen gemaakt worden door van zowel rijen als kolommen gebruik te maken. Hier is een patroon met 10 kolommen en 8 rijen met een rotatie van 2 graden per rij en 18 per kolom. Elke groep lijnen is hier een “kolom†zodat de groepen 18 graden van elkaar liggen, met in elke kolom individuele lijnen die 2 graden uit elkaar liggen: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Uitsnijden (verschillende rechthoekige exportgebieden) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Uitsnijden (verschillende rechthoekige exportgebieden) - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,39 +311,47 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i rechthoek-id -t bestandsnaam.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Niet-lineaire kleurverlopen + + Niet-lineaire kleurverlopen - - + + SVG-versie 1.1 ondersteunt geen niet-lineaire kleurverlopen (dit is deze die geen niet-lineaire overgang hebben tussen de kleuren). Je kan deze echter emuleren door multi-stop kleurverlopen. - - + + - Begin met een eenvoudig tweestopskleurverloop. Open de kleurverloop-editor (bijvoorbeeld door te dubbelklikken op een kleurverloophandvat). Voeg een nieuw kleurverloop toe in het midden en versleep het een beetje. Voeg vervolgens meer kleurverlopen toe voor en na de overgang in het midden zodat het verloop vloeiend is. Hoe meer overgangen, hoe vloeiender je het uiteindelijke kleurverloop kan maken. Hier is het initiële zwart-wit kleurverloop met twee stops: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -348,11 +359,11 @@ use the Extensions > Web > Slicer - - - + + + - + Dit zijn diverse “niet-lineaire†multi-stop kleurverlopen (bekijk ze in de kleurverloop-editor): @@ -437,21 +448,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Excentrische radiale kleurverlopen + + + + + + + + + + Excentrische radiale kleurverlopen - - + + - + Radiale kleurverlopen moeten niet symmetrisch zijn. Sleep in het kleurverloopgereedschap het centrale handvat van een elliptisch kleurverloop met Shift. Dit verplaatst het x-vormige brandpunt van het kleurverloop uit het centrum. Wanneer je het niet nodig hebt, kan je het brandpunt terugbrengen door het dichtbij het middelpunt te slepen. @@ -465,191 +476,202 @@ use the Extensions > Web > Slicer - - - - Uitlijnen naar het midden van de pagina + + + + Uitlijnen naar het midden van de pagina - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Document opruimen + + Document opruimen - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Verborgen features en de XML-editor + + Verborgen features en de XML-editor - - + + - + De XML-editor laat je toe om bijna alle aspecten van het document te bewerken zonder een externe tekstbewerker. Bovendien ondersteunt Inkscape dikwijls meer features dan dat er toegankelijk zijn via de GUI. De XML-editor is een manier om toegang te krijgen tot deze features, indien je SVG kent. - - Aanpassen van de eenheid van de liniaal + + Aanpassen van de eenheid van de liniaal - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Stempelen + + Stempelen - - + + - + Om snel meerdere kopieën van een object te maken, kan je stempelen. Sleep een object (of schaal of roteer het) en tijdens het ingedrukt houden van de linkermuisknop, druk je op de Spatiebalk. Dit maakt een stempel van de huidige objectvorm. Je kan het zo vaak herhalen als je wil. - - Trucken met de pen + + Trucken met de pen - - + + - + In het pengereedschap (Bezier), heb je de volgende mogelijkheden om een lijn te beëindigen: - - - + + + - + Drukken op Enter - - - + + + - + Dubbelklikken met de linkermuisknop - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Een ander gereedschap selecteren - - + + - + - Noteer dat terwijl het pad nog niet beëindigd is (dit is getoond in groen en het huidige segment rood), het nog niet bestaat als object in het document. Bijgevolg gebruik je om het te annuleren op Esc (volledige pad annuleren) of Backspace (het laatste segment verwijderen) in plaats van Ongedaan maken. + Noteer dat terwijl het pad nog niet beëindigd is (dit is getoond in groen en het huidige segment rood), het nog niet bestaat als object in het document. Bijgevolg gebruik je om het te annuleren op Esc (volledige pad annuleren) of Backspace (het laatste segment verwijderen) in plaats van Ongedaan maken. - - + + - + Om een nieuw subpad aan een bestaand pad toe te voegen, selecteer je dat pad en begin je te tekenen met Shift van een willekeurig punt. Indien je echter eenvoudigweg wil voortgaan met een bestaand pad, is Shift niet nodig; begin dan te tekenen vanaf een van de uiteinden. - - Ingeven van Unicode tekens + + Ingeven van Unicode tekens - - + + - + In het tekstgereedscap schakelt Ctrl+U tussen Unicode en normale modus. In Unicode modus wordt elke groep van 4 hexadecimale cijfers die je ingeeft een enkel Unicode karakter. Dit laat je toe om arbitraire symbolen in te geven (zolang je de Unicode waarden kent en het lettertype deze ondersteunt). Om Unicode-invoer te beëindigen, druk je op Enter. Bijvoorbeeld, Ctrl+U 2 0 1 4 Enter voegt een liggend streepje (—) in. Om de Unicode modus te verlaten zonder iets in te voegen, druk je op Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Het raster gebruiken voor het tekenen van iconen + + Het raster gebruiken voor het tekenen van iconen - - + + - + - Veronderstel dat je een 24x24 pixel icoon wil maken. Creëer een 24x24 px canvas (gebruik de Documenteigenschappen) en stel het raster in op 0.5px (48x48 rasterlijnen). Indien je nu gevulde objecten uitlijnd op even rasterlijnen, contouren op oneven rasterlijnen met een lijnbreedte een even nummer in px en exporteert op de standaard 90ppi resolutie (opdat 1 px 1 bitmap pixel wordt), verkrijg je een scherp beeld zonder dat anti-aliasing nodig is. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Objectrotatie + + Objectrotatie - - + + - + - In het selectiegereedschap klik je op een object om de schaalhandvatten te tonen. Klik dan opnieuw op het object om de handvatten voor rotatie en scheeftrekken te tonen. Indien je op de handvatten op de hoeken klikt en sleept draait het object rond het centrum (kruisteken). Indien je tegelijkertijd Shift ingedrukt houdt, wordt geroteerd rond de tegenovergestelde hoek.Je kan ook het rotatiecentrum naar gelijk welke plaats slepen. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Je kan ook roteren met het toetsenbord met [ en ] (per 15 graden) of Ctrl+[ en Ctrl+] (per 90 graden). Dezelfde [] toetsen met Alt zorgen voor pixelgrootte rotatie. - - Slagschaduwen + + Slagschaduwen - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -658,53 +680,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Tekst op een pad plaatsen + + Tekst op een pad plaatsen - - + + - + - Om tekst op een pad te plaatsen, selecteer je de tekst en de curve en kies je Op pad plaatsen in het menu Tekst. De tekst zal starten bij het begin van het pad. Algemeen is het best om een expliciet pad te maken waaraan je de tekst wil fitten in plaats van het te fitten op een andere object — dit geeft je meer controle zonder je afbeelding om zeep te helpen. + Om tekst op een pad te plaatsen, selecteer je de tekst en de curve en kies je Op pad plaatsen in het menu Tekst. De tekst zal starten bij het begin van het pad. Algemeen is het best om een expliciet pad te maken waaraan je de tekst wil fitten in plaats van het te fitten op een andere object — dit geeft je meer controle zonder je afbeelding om zeep te helpen. - - Het origineel selecteren + + Het origineel selecteren - - + + - + Wanneer je tekst op een pad hebt, een gekoppelde rand of een kloon, kan het moeilijk zijn om het bronobject/-pad te selecteren, omdat het er direct onder kan liggen, onzichtbaar kan zijn of vergrendeld. De magische toets Shift+D helpt hierbij; selecteer de test, gekoppelde rand of kloon en druk Shift+D om het corresponderende originele pad, rand of kloon te selecteren. - - Indien het venster niet op het scherm staat + + Indien het venster niet op het scherm staat - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Transparantie, kleurverlopen en PostScript export + + Transparantie, kleurverlopen en PostScript export - - - - - - PostScript of EPS formaten ondersteunen geen transparency zodat je dit nooit zou mogen gebruiken indien je het naar PS/EPS gaat exporteren. In het geval van een egale transparantie over een egaal kleurvlak is het eenvoudig op te lossen: selecteer een van de transparante objecten, schakel over naar de pipet (F7); zorg dat je in de modus “Zowel kleur als alfa onder de cursor nemen†bent, klik vervolgens op het geselecteerde object. Zo wordt de zichtbare kleur genomen en terug toegekend aan het object, maar dan zonder transparantie. Herhaal dit voor alle transparante objecten. Indien je transparant object over verschillende egale kleurvlakken ligt, moet je het in de overeenkomstige delen opbreken en de procedure voor elk deel toepasen. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -734,8 +768,8 @@ option to save window geometry (Inkscape Preference - - Gebruik Ctrl+pijl omhoog om te scrollen + + Gebruik Ctrl+pijl omhoog om te scrollen diff --git a/share/tutorials/tutorial-tips.pl.svg b/share/tutorials/tutorial-tips.pl.svg index d0859cb8f..4ad4376d7 100644 --- a/share/tutorials/tutorial-tips.pl.svg +++ b/share/tutorials/tutorial-tips.pl.svg @@ -36,271 +36,274 @@ - - Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć + + Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - + ::PORADY I SZTUCZKI - - + + W poradniku tym zostanÄ… przedstawione różne porady i sztuczki, których użytkownicy nauczyli siÄ™, używajÄ…c Inkscape'a, oraz kilka „ukrytych†funkcji mogÄ…cych przyspieszyć pracÄ™. - - Promieniowe rozmieszczanie wielokrotnych klonów + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - JeÅ›li promieniowy deseÅ„ ma mieć tylko 3, 4, 6, 8 lub 12 elementów, można spróbować symetrii P3, P31M, P3M1, P4, P4M, P6 lub P6M. Te polecenia Å›wietnie nadajÄ… siÄ™ do tworzenia pÅ‚atków Å›niegu i tym podobnych. Poniżej zostaÅ‚a opisana bardziej ogólna metoda. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Wybierz symetriÄ™ P1 (proste przesuniÄ™cie), a nastÄ™pnie wyrównaj to przesuniÄ™cie przechodzÄ…c do karty „PrzesuniÄ™cieâ€. Wartość „PrzesuniÄ™cie Y†dla wierszy i „PrzesuniÄ™cie X†dla kolumn ustaw na -100%. Teraz wszystkie klony zostanÄ… uÅ‚ożone w stos nad oryginaÅ‚em. Aby dokoÅ„czyć dzieÅ‚a, należy jeszcze wykonać obrócenie. Przejdź do karty „Obrót†i ustaw jakiÅ› kÄ…t obrotu dla kolumny, a nastÄ™pnie utwórz deseÅ„ zÅ‚ożony z jednego wiersza i wielu kolumn. Oto deseÅ„ utworzony z poziomej linii z 30 kolumnami, z każdÄ… kolumnÄ… obróconÄ… o 6 stopni. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Wybierz symetriÄ™ P1 (proste przesuniÄ™cie), a nastÄ™pnie wyrównaj to przesuniÄ™cie przechodzÄ…c do karty „PrzesuniÄ™cieâ€. Wartość „PrzesuniÄ™cie Y†dla wierszy i „PrzesuniÄ™cie X†dla kolumn ustaw na -100%. Teraz wszystkie klony zostanÄ… uÅ‚ożone w stos nad oryginaÅ‚em. Aby dokoÅ„czyć dzieÅ‚a, należy jeszcze wykonać obrócenie. Przejdź do karty „Obrót†i ustaw jakiÅ› kÄ…t obrotu dla kolumny, a nastÄ™pnie utwórz deseÅ„ zÅ‚ożony z jednego wiersza i wielu kolumn. Oto deseÅ„ utworzony z poziomej linii z 30 kolumnami, z każdÄ… kolumnÄ… obróconÄ… o 6 stopni. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aby otrzymać z tego tarczÄ™ zegarowÄ…, należy przyciąć lub przykryć Å›rodkowÄ… część biaÅ‚ym koÅ‚em. PamiÄ™taj, że przed wykonaniem operacji logicznych należy najpierw odłączyć klony. - - + + Bardziej interesujÄ…ce efekty można tworzyć używajÄ…c jednoczeÅ›nie wierszy i kolumn. Oto deseÅ„ skÅ‚adajÄ…cy siÄ™ z 10 kolumn i 8 wierszy z rotacjÄ… 2 stopni dla wiersza i 18 dla kolumny. Każda grupa linii jest tutaj „kolumnÄ…â€, wiÄ™c grupy te sÄ… rozÅ‚ożone co 18 stopni, a wewnÄ…trz każdej kolumny pojedyncze linie sÄ… oddalone od siebie o 2 stopnie: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Gradienty nieliniowe + + Gradienty nieliniowe - - + + SVG w wersji 1.1 nie wspiera nieliniowych gradientów tj. takich, które majÄ… nieliniowe przejÅ›cia miÄ™dzy kolorami. Można jednak naÅ›ladować je za pomocÄ… gradientów wielopunktowych. - - + + - Zacznij od prostego gradientu dwupunktowego. Otwórz „Edytor gradientu†(np. poprzez dwukrotne klikniÄ™cie dowolnego uchwytu narzÄ™dziem „Gradientâ€). W Å›rodku dodaj nowy punkt i delikatnie go przeciÄ…gnij. Aby gradient miaÅ‚ gÅ‚adsze przejÅ›cia, dodaj po obu stronach punktu Å›rodkowego po jednym nowym punkcie i także je trochÄ™ przeciÄ…gnij – gradient bÄ™dzie bardziej wygÅ‚adzony. Im wiÄ™cej punktów dodasz, tym gÅ‚adsze bÄ™dÄ… przejÅ›cia w gradiencie wynikowym. Oto wyjÅ›ciowy czarno-biaÅ‚y gradient z dwoma punktami: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +360,11 @@ use the Extensions > Web > Slicer - - - + + + - + A oto różne „nieliniowe†wielopunktowe gradienty – sprawdź je w edytorze gradientu: @@ -438,21 +449,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Niesymetryczne gradienty radialne + + + + + + + + + + Niesymetryczne gradienty radialne - - + + - + Gradienty radialne nie muszÄ… być symetryczne. BÄ™dÄ…c w trybie narzÄ™dzia „Gradientâ€, ze wciÅ›niÄ™tym klawiszem [ Shift ] przeciÄ…gnij centralny uchwyt gradientu radialnego. W wyniku tego uchwyt ogniska gradientu w ksztaÅ‚cie litery x, zostanie odsuniÄ™ty od Å›rodka i okreÅ›li nowe poÅ‚ożenie ogniska gradientu. Uchwyt ten – jeÅ›li nie chcesz zmiany poÅ‚ożenia ogniska – można przeciÄ…gnąć z powrotem do Å›rodka gradientu. @@ -466,42 +477,42 @@ use the Extensions > Web > Slicer - - - - Wyrównywanie do Å›rodka strony + + + + Wyrównywanie do Å›rodka strony - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Czyszczenie dokumentu + + Czyszczenie dokumentu - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Ukryte funkcje i edytor XML + + Ukryte funkcje i edytor XML - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -509,152 +520,163 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Zmiana jednostek pomiarowych linijek + + Zmiana jednostek pomiarowych linijek - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Stemplowanie + + Stemplowanie - - + + - + Aby szybko utworzyć wiele kopii obiektu, użyj „stemplowaniaâ€. W tym celu przeciÄ…gnij obiekt (lub przeskaluj go bÄ…dź obróć) i trzymajÄ…c wciÅ›niÄ™ty klawisz myszy, naciÅ›nij spacjÄ™. Operacja ta pozostawi „stempel†aktualnego ksztaÅ‚tu obiektu. Stemplowanie może być wielokrotnie powtórzone. - - Sztuczki z narzÄ™dziem „Pióro†+ + Sztuczki z narzÄ™dziem „Pióro†- - + + - + NarzÄ™dzie „Pióro†wyposażone jest w nastÄ™pujÄ…ce opcje zakoÅ„czenia linii: - - - + + + - + NaciÅ›nij [ Enter ] - - - + + + - + Kliknij dwukrotnie lewym przyciskiem myszy - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Wybierz inne narzÄ™dzie - - + + - + - Zauważ, że kiedy Å›cieżka jest nieukoÅ„czona tj. wyÅ›wietlana na zielono, a ostatni jej segment na czerwono, nie istnieje jeszcze jako obiekt w dokumencie. Tak wiÄ™c, by jÄ… usunąć, można zamiast polecenia „Wycofajâ€, użyć klawisza [ Esc ] – anuluje całą Å›cieżkÄ™ lub klawisza [ Backspace ] – usuwa ostatni segment nieukoÅ„czonej Å›cieżki. + Zauważ, że kiedy Å›cieżka jest nieukoÅ„czona tj. wyÅ›wietlana na zielono, a ostatni jej segment na czerwono, nie istnieje jeszcze jako obiekt w dokumencie. Tak wiÄ™c, by jÄ… usunąć, można zamiast polecenia „Wycofajâ€, użyć klawisza [ Esc ] – anuluje całą Å›cieżkÄ™ lub klawisza [ Backspace ] – usuwa ostatni segment nieukoÅ„czonej Å›cieżki. - - + + - + Aby do istniejÄ…cej Å›cieżki dodać nowÄ… subÅ›cieżkÄ™, zaznacz Å›cieżkÄ™ i zacznij tworzyć jÄ… z dowolnego punktu z przytrzymanym klawiszem [ Shift ]. JeÅ›li chcesz kontynuować istniejÄ…cÄ… Å›cieżkÄ™, klawisz [ Shift ] nie jest konieczny, po prostu rozpocznij rysowanie od jednego z koÅ„ców zaznaczonej Å›cieżki. - - Wprowadzanie wartoÅ›ci Unicode + + Wprowadzanie wartoÅ›ci Unicode - - + + - + W trybie narzÄ™dzia „Tekst†naciÅ›niÄ™cie skrótu [ Ctrl+U ] przełącza pomiÄ™dzy trybem Unicode a normalnym. W trybie Unicode każda grupa 4 szesnastkowych napisanych cyfr staje siÄ™ pojedynczym znakiem Unicode. UÅ‚atwia to wpisywanie zwykÅ‚ych symboli pod warunkiem, że znasz odpowiednie kody Unicode i masz zainstalowanÄ… wÅ‚aÅ›ciwÄ… czcionkÄ™. Aby zakoÅ„czyć wpisywanie symboli Unicode, należy nacisnąć klawisz [ Enter ]. Na przykÅ‚ad Ctrl+U 2 0 1 4 Enter wypisuje dÅ‚ugi myÅ›lnik (—). Aby opuÅ›cić tryb Unicode bez wstawiania niczego, naciÅ›nij klawisz Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Stosowanie siatki do rysowania ikon + + Stosowanie siatki do rysowania ikon - - + + - + - Załóżmy, że chcesz narysować ikonÄ™ o rozmiarze 24x24 pikseli. Stwórz dokument o takim wÅ‚aÅ›nie rozmiarze (użyj „WÅ‚aÅ›ciwoÅ›ci dokumentuâ€) i ustaw odstÄ™py siatki na 0,5 px (siatka 48x48). Jeżeli teraz wyrównasz wypeÅ‚nione obiekty do parzystych linii siatki, a obiekty z konturem (kontur o szerokoÅ›ci podanej w px i liczbie parzystej) do nieparzystych linii siatki i nastÄ™pnie wyeksportujesz w domyÅ›lnej rozdzielczoÅ›ci 90 dpi (1 px stanie siÄ™ 1 pikselem bitmapy), otrzymasz wyrazisty obrazek bitmapowy bez niepotrzebnego antyaliasingu. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Obracanie obiektu + + Obracanie obiektu - - + + - + - BÄ™dÄ…c w trybie narzÄ™dzia „Wskaźnikâ€, kliknij obiekt – zostanÄ… wyÅ›wietlone strzaÅ‚ki skalowania. Ponowne klikniÄ™cie obiektu spowoduje wyÅ›wietlenie strzaÅ‚ek sÅ‚użących do obracania i pochylania. KlikniÄ™cie i ciÄ…gniÄ™cie dowolnej narożnej strzaÅ‚ki powoduje obrót obiektu dookoÅ‚a Å›rodka wyÅ›wietlonego jako znaczek krzyżyka. Ze wciÅ›niÄ™tym klawiszem [ Shift ], nastÄ…pi obrót wzglÄ™dem przeciwnego narożnika. Åšrodek obrotu można umieÅ›cić w dowolnym miejscu poprzez jego przeciÄ…gniÄ™cie. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Obiekt można także obracać za pomocÄ… klawiatury klawiszami [ [ ] i [ ] ] – obrót o 15 stopni lub skrótu [ Ctrl+[ ] i [ Ctrl+] ] – obrót o 90 stopni. Te same klawisze [ [] ] z przytrzymanym klawiszem [ Alt ] wykonujÄ… obrót o rozmiarze piksela. - - Tworzenie cienia + + Tworzenie cienia - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -663,53 +685,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Umieszczanie tekstu na Å›cieżce + + Umieszczanie tekstu na Å›cieżce - - + + - + - Aby umieÅ›cić tekst wzdÅ‚uż krzywej, zaznacz zarówno tekst, jak i krzywÄ…. Z menu „Tekst†wybierz polecenie „Wstaw na Å›cieżkÄ™â€. Tekst pojawi siÄ™ na poczÄ…tku Å›cieżki. Ogólnie rzecz biorÄ…c, lepiej jest utworzyć osobnÄ… Å›cieżkÄ™, do której chcesz, żeby tekst byÅ‚ dopasowany, zamiast dopasowywać go do innego elementu rysunku – umożliwi to lepszÄ… kontrolÄ™ bez znieksztaÅ‚cania rysunku. + Aby umieÅ›cić tekst wzdÅ‚uż krzywej, zaznacz zarówno tekst, jak i krzywÄ…. Z menu „Tekst†wybierz polecenie „Wstaw na Å›cieżkÄ™â€. Tekst pojawi siÄ™ na poczÄ…tku Å›cieżki. Ogólnie rzecz biorÄ…c, lepiej jest utworzyć osobnÄ… Å›cieżkÄ™, do której chcesz, żeby tekst byÅ‚ dopasowany, zamiast dopasowywać go do innego elementu rysunku – umożliwi to lepszÄ… kontrolÄ™ bez znieksztaÅ‚cania rysunku. - - Zaznaczanie oryginaÅ‚u + + Zaznaczanie oryginaÅ‚u - - + + - + Kiedy masz już tekst na Å›cieżce, odsuniÄ™cie połączone lub klon, zaznaczenie źródÅ‚owego obiektu/Å›cieżki może być trudne, ponieważ może on leżeć poniżej lub być niewidoczny/zablokowany. Wówczas pomoże ci magiczny klawisz [ Shift+D ]. Zaznacz tekst, odsuniÄ™cie połączone lub klon i użyj skrótu [ Shift+D ], by przenieść zaznaczenie na odpowiedniÄ… Å›cieżkÄ™, źródÅ‚o przesuniÄ™cia lub oryginaÅ‚ klonu. - - Przywracanie okna spoza ekranu + + Przywracanie okna spoza ekranu - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Przezroczystość, gradienty i eksport do PostSCriptu + + Przezroczystość, gradienty i eksport do PostSCriptu - - - - - - Formaty PostSCript i EPS nie obsÅ‚ugujÄ… przezroczystoÅ›ci, wiÄ™c nie należy jej używać, jeżeli zamierza siÄ™ eksportować dokument do PS/EPS. Åatwo to naprawić w przypadku równej przezroczystoÅ›ci naÅ‚ożonej na jednolity kolor. Zaznacz jeden z przezroczystych obiektów, włącz narzÄ™dzie „Próbnik koloru†[ F7 ], upewnij siÄ™, że jest tylko w trybie wybierania kolorów i kliknij ten sam obiekt. W ten sposób pobierzesz widoczny kolor i przypiszesz go z powrotem do obiektu, ale tym razem bez przezroczystoÅ›ci. Powtórz tÄ™ czynność dla wszystkich przezroczystych obiektów. JeÅ›li twój przezroczysty obiekt pokrywa kilka obszarów o jednolitej barwie, należy podzielić go odpowiednio na fragmenty i zastosować tÄ™ procedurÄ™ do każdego z nich. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -739,8 +773,8 @@ option to save window geometry (Inkscape Preference - - Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć + + Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć diff --git a/share/tutorials/tutorial-tips.ru.svg b/share/tutorials/tutorial-tips.ru.svg index d770bc0c9..f5849fe0d 100644 --- a/share/tutorials/tutorial-tips.ru.svg +++ b/share/tutorials/tutorial-tips.ru.svg @@ -36,272 +36,274 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - + ::СОВЕТЫ И ХИТРОСТИ - - + + Ð’ Ñтом разделе учебника вы ознакомитеÑÑŒ Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ хитроÑÑ‚Ñми и «Ñкрытыми» возможноÑÑ‚Ñми Inkscape, заметно уÑкорÑющими работу. - - РаÑпределение объектов по радиуÑу круга -Ñ Ð¸Ñпользованием функции «Узор из клонов» + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - ЕÑли ваш радиальный узор будет ÑоÑтоÑть из 3, 4, 6, 8 или 12 Ñлементов, попробуйте типы Ñимметрии P3, P31M, P3M1, P4, P4M, P6 или P6M. Они прекраÑно подходÑÑ‚ Ð´Ð»Ñ Ñнежинок и Ñхожих Ñ Ð½Ð¸Ð¼Ð¸ фигур. Более общий ÑпоÑоб Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð´Ð¸Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ узора опиÑан ниже. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Выберите Ñимметрию P1 (проÑтое Ñмещение) и ÑкомпенÑируйте Ñто Ñмещение, Ð¿ÐµÑ€ÐµÐ¹Ð´Ñ Ð½Ð° вкладку «Смещение» и уÑтановив значение «Ðа Ñтроку/Смещение по Y» и «Ðа Ñтолбец/Смещение по X» равным -100%. За Ñчёт Ñтого вÑе клоны будут раÑположены точно над оригиналом. Ð’Ñе, что оÑтаётÑÑ — Ñто перейти на вкладку «Поворот» и уÑтановить некоторый угол Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° Ñтолбец, а затем Ñоздать узор в одну Ñтроку и неÑколько Ñтолбцов. Вот пример шаблона из горизонтальной линии и 30 Ñтолбцов, каждый из которых повёрнут на шеÑть градуÑов: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Выберите Ñимметрию P1 (проÑтое Ñмещение) и ÑкомпенÑируйте Ñто Ñмещение, Ð¿ÐµÑ€ÐµÐ¹Ð´Ñ Ð½Ð° вкладку «Смещение» и уÑтановив значение «Ðа Ñтроку/Смещение по Y» и «Ðа Ñтолбец/Смещение по X» равным -100%. За Ñчёт Ñтого вÑе клоны будут раÑположены точно над оригиналом. Ð’Ñе, что оÑтаётÑÑ — Ñто перейти на вкладку «Поворот» и уÑтановить некоторый угол Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° Ñтолбец, а затем Ñоздать узор в одну Ñтроку и неÑколько Ñтолбцов. Вот пример шаблона из горизонтальной линии и 30 Ñтолбцов, каждый из которых повёрнут на шеÑть градуÑов: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Чтобы получить из Ñтого чаÑовой циферблат, вам нужно лишь вырезать центральную чаÑть или положить поверх неё белый круг (отÑоедините клоны, чтобы иметь возможноÑть выполнÑть логичеÑкие дейÑÑ‚Ð²Ð¸Ñ Ñ Ð½Ð¸Ð¼Ð¸). - - + + Более интереÑный Ñффект может быть Ñоздан при иÑпользовании Ñтрок и Ñтолбцов одновременно. Вот шаблон из 10 Ñтолбцов и 8 Ñтрок Ñ Ð¿Ð¾Ð²Ð¾Ñ€Ð¾Ñ‚Ð¾Ð¼ в 2 градуÑа на Ñтроку и 18 градуÑов на Ñтолбец. ÐšÐ°Ð¶Ð´Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° линий здеÑь — «Ñтолбец», так что ÐºÐ°Ð¶Ð´Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° отÑтоит от другой на 18 градуÑов; внутри каждого Ñтолбца интервал между линиÑми равен 2 градуÑам: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Как Ñделать нарезку работы (на неÑколько прÑмоугольных облаÑтей)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Как Ñделать нарезку работы (на неÑколько прÑмоугольных облаÑтей)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -309,39 +311,47 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Ðелинейные градиенты + + Ðелинейные градиенты - - + + ВерÑÐ¸Ñ 1.1 SVG не поддерживает нелинейные градиенты (Ñ‚.е. нелинейно переходÑщие из цвета в цвет), но вы можете Ñоздать их подобие, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð³Ñ€Ð°Ð´Ð¸ÐµÐ½Ñ‚ Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвом опорных точек. - - + + - Ðачните Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ градиента из двух опорных точек. Откройте редактор градиента (двойной щелчок курÑором по узлу градиента инÑтрумента Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€Ð°Ð´Ð¸ÐµÐ½Ñ‚Ð¾Ð²). Добавьте новую опорную точку поÑередине и ÑмеÑтите её немного. Добавьте ещё неÑколько опорных точек до и поÑле Ñтой, а затем тоже ÑмеÑтите их так, чтобы градиент получилÑÑ Ñ€Ð¾Ð²Ð½Ñ‹Ð¼. Чем больше опорных точек вы добавите, тем более мÑгкими будут переходы в градиенте. Ðиже изображён иÑходный чёрно-белый градиент Ñ Ð´Ð²ÑƒÐ¼Ñ Ð¾Ð¿Ð¾Ñ€Ð½Ñ‹Ð¼Ð¸ точками: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +359,11 @@ use the Extensions > Web > Slicer - - - + + + - + Ртут — примеры разных «нелинейных» градиентов Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтвом опорных точек (проверьте Ñто при помощи инÑтрумента Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€Ð°Ð´Ð¸ÐµÐ½Ñ‚Ð°). @@ -438,21 +448,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Радиальный градиент Ñо Ñмещённым фокуÑом + + + + + + + + + + Радиальный градиент Ñо Ñмещённым фокуÑом - - + + - + Радиальные градиенты не обÑзательно должны быть Ñимметричными. ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¸Ð½Ñтрумент Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ñ€Ð°Ð´Ð¸ÐµÐ½Ñ‚Ð¾Ð², ÑмеÑтите центральный узел ÑллиптичеÑкого градиента Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишей Shift. Это Ñдвинет креÑтик, ÑвлÑющийÑÑ ÑƒÐ·Ð»Ð¾Ð¼ фокуÑа градиента. ЕÑли вам Ñто не нужно, вы можете вернуть узел фокуÑа в центр, проÑто перетащив его в центр. @@ -466,191 +476,202 @@ use the Extensions > Web > Slicer - - - - Выравнивание по центру Ñтраницы + + + + Выравнивание по центру Ñтраницы - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Удаление ненужного из документа + + Удаление ненужного из документа - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Скрытые возможноÑти и редактор XML + + Скрытые возможноÑти и редактор XML - - + + - + XML-редактор (Shift+Ctrl+X) позволÑет вам изменить почти вÑе параметры документа без необходимоÑти иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ³Ð¾ текÑтового редактора. Кроме того, Inkscape обычно поддерживает больше возможноÑтей формата SVG, чем доÑтупно через графичеÑкий интерфейÑ. К ним отноÑÑÑ‚ÑÑ, например, отображение маÑок и обтравочных контуров, которые Ð½ÐµÐ»ÑŒÐ·Ñ Ð½Ð¸ Ñоздать, ни изменить через графичеÑкий интерфейÑ. XML-редактор позволÑет иÑпользовать Ñти возможноÑти (еÑли вы знаете SVG). - - Изменение единицы измерений Ð´Ð»Ñ Ð»Ð¸Ð½ÐµÐµÐº + + Изменение единицы измерений Ð´Ð»Ñ Ð»Ð¸Ð½ÐµÐµÐº - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Штамповка + + Штамповка - - + + - + Ð”Ð»Ñ Ð±Ñ‹Ñтрого ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва копий объекта иÑпользуйте штамповку. ПроÑто перемещайте объект (либо менÑйте его размер или поворачивайте) и, не отпуÑÐºÐ°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ¸ мыши, нажимайте Пробел. Это оÑтавит «штамп», а попроÑту копию данного объекта на том меÑте, где он находилÑÑ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°. Ð’Ñ‹ можете Ñделать Ñколько угодно штампов. - - Трюки Ñ Ð¿ÐµÑ€Ð¾Ð¼ + + Трюки Ñ Ð¿ÐµÑ€Ð¾Ð¼ - - + + - + ИÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¸Ð½Ñтрумент, риÑующий кривые Безье и прÑмые линии, вы можете завершить контур неÑколькими ÑпоÑобами, опиÑанными ниже: - - - + + + - + Ðажать клавишу Ввод - - - + + + - + Дважды щёлкнуть левой клавишей мыши - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Выбрать другой инÑтрумент - - + + - + - Обратите внимание, что пока контур не завершён (Ñ‚.е. отображаетÑÑ Ð·ÐµÐ»Ñ‘Ð½Ñ‹Ð¼ или, еÑли Ñегмент текущий, то краÑным) он ещё не ÑвлÑетÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð¼ документа. Следовательно, чтобы отменить его, можно иÑпользовать клавишу Esc (отменить веÑÑŒ контур) или клавишу Backspace (убрать поÑледний Ñегмент незаконченного контура) вмеÑто команды «Отменить». + Обратите внимание, что пока контур не завершён (Ñ‚.е. отображаетÑÑ Ð·ÐµÐ»Ñ‘Ð½Ñ‹Ð¼ или, еÑли Ñегмент текущий, то краÑным) он ещё не ÑвлÑетÑÑ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð¼ документа. Следовательно, чтобы отменить его, можно иÑпользовать клавишу Esc (отменить веÑÑŒ контур) или клавишу Backspace (убрать поÑледний Ñегмент незаконченного контура) вмеÑто команды «Отменить». - - + + - + Ð”Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñегмента контура к уже ÑущеÑтвующему контуру, выберите контур и начните риÑовать, ÑƒÐ´ÐµÑ€Ð¶Ð¸Ð²Ð°Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишу Shift любого из узлов. ЕÑли вÑÑ‘, что вам нужно — Ñто продолжить контур, то Shift не нужен, проÑто начните риÑовать Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ из конечных узлов выбранного контура. - - Ввод значений Unicode + + Ввод значений Unicode - - + + - + При иÑпользовании инÑтрумента ТекÑÑ‚, нажатие Ctrl+U переключает режим ввода Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ на Unicode и обратно. Ð’ режиме Unicode ÐºÐ°Ð¶Ð´Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° из вводимых вами четырёх шеÑтнадцатеричных цифр превращаетÑÑ Ð² Ñимвол Unicode. Это позволÑет вам вводить произвольные Ñимволы (конечно, еÑли вы знаете их Unicode-коды и шрифт). По окончании ввода Unicode нажмите Enter. Ðапример, Ð²Ð²ÐµÐ´Ñ Ctrl+U 2 0 1 4 Enter, вы получите тирe (—). Ð”Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из Unicode-режима нажмите Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - ИÑпользование Ñетки Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð² + + ИÑпользование Ñетки Ð´Ð»Ñ Ñ€Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð² - - + + - + - Предположим, вы хотите нариÑовать значок размером 24×24 пикÑелов. Создайте холÑÑ‚ 24×24 px (иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð´Ð¸Ð°Ð»Ð¾Ð³ «СвойÑтва документа») и уÑтановите Ñетку в 0,5 px (48×48 переÑекающихÑÑ Ð»Ð¸Ð½Ð¸Ð¹). Теперь, когда вы выравниваете заполненные объекты по чётным линиÑм Ñетки, а объекты Ñо штрихом — по нечётным Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð¾Ð¹ штриха, ÑвлÑющейÑÑ Ñ†ÐµÐ»Ñ‹Ð¼ чиÑлом пикÑелов, и ÑкÑпортируете их Ñ Ð¸Ð·Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ñ‹Ð¼ значением dpi равным 90 (Ñ‚.е. каждый пикÑел холÑта ÑтановитÑÑ Ð¾Ð´Ð½Ð¸Ð¼ пикÑелом изображениÑ), вы получаете чёткую раÑтровую картинку без ÑглаживаниÑ. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Вращение объекта + + Вращение объекта - - + + - + - Выбрав инÑтрумент Выделение, щёлкните мышью по какому-нибудь объекту, чтобы увидеть его Ñтрелки Ð´Ð»Ñ Ñмены размера. Щёлкните мышью по объекту ещё раз, и вы увидите Ñтрелки Ð´Ð»Ñ Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¸ ÑкашиваниÑ. ЕÑли перемещать угловые Ñтрелки, объект будет поворачиватьÑÑ Ð²Ð¾ÐºÑ€ÑƒÐ³ центра (центр изображён креÑтиком). ЕÑли нажать клавишу Shift в момент поворота, поворот будет проиÑходить вокруг противоположного угла. Ð’Ñ‹ также можете перемеÑтить центр Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ ÐºÑƒÐ´Ð° угодно. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Вращение можно производить и Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñ‹ нажатием клавиш [ и ] (на 15 градуÑов) или Ctrl+[ и Ctrl+] (на 90 градуÑов). Эти же клавиши [] Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¸ÐµÐ¼ Alt поворачивают объект(Ñ‹) Ñ ÑˆÐ°Ð³Ð¾Ð¼ в один пикÑел. - - ОтбраÑывание тени у раÑтровых изображений + + ОтбраÑывание тени у раÑтровых изображений - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -659,53 +680,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Размещение текÑта по контуру + + Размещение текÑта по контуру - - + + - + - Чтобы размеÑтить текÑÑ‚ по поверхноÑти кривой, выберите текÑÑ‚ и контур одновременно и иÑпользуйте функцию «РазмеÑтить по контуру» из меню «ТекÑт». ТекÑÑ‚ будет размещён от начала контура. Лучший вариант — иÑпользовать отдельный контур Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑтом, чем заполнÑть текÑтом один из ÑущеÑтвующих Ñлементов — Ñто даÑÑ‚ вам больше ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð±ÐµÐ· лишних проблем. + Чтобы размеÑтить текÑÑ‚ по поверхноÑти кривой, выберите текÑÑ‚ и контур одновременно и иÑпользуйте функцию «РазмеÑтить по контуру» из меню «ТекÑт». ТекÑÑ‚ будет размещён от начала контура. Лучший вариант — иÑпользовать отдельный контур Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚ÐµÐºÑтом, чем заполнÑть текÑтом один из ÑущеÑтвующих Ñлементов — Ñто даÑÑ‚ вам больше ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð±ÐµÐ· лишних проблем. - - ПоиÑк оригинала + + ПоиÑк оригинала - - + + - + Когда у Ð²Ð°Ñ ÐµÑть текÑÑ‚, направленный по контуру, ÑвÑзанный объект или клон, то порой очень Ñложно найти их иÑходный объект, потому что он может находитьÑÑ Ð¿Ð¾Ð´ другими объектами, быть невидимым или проÑто закрытым Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ (Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Â«Ð·Ð°Ð¿ÐµÑ€ÐµÑ‚ÑŒÂ»). МагичеÑÐºÐ°Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ Shift+D поможет вам. Выберите текÑÑ‚, ÑвÑзанный объект или клон и нажмите Shift+D, чтобы выделение переключилоÑÑŒ на ÑоответÑтвующий контур, оригинал клона или оригинал ÑвÑзанного объекта. - - Возвращение ушедших за Ñкран окон. + + Возвращение ушедших за Ñкран окон. - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - ПрозрачноÑть, градиенты и ÑкÑпорт в формат PostScript + + ПрозрачноÑть, градиенты и ÑкÑпорт в формат PostScript - - - - - - Форматы PostScript и EPS не поддерживают прозрачноÑть, так что никогда не иÑпользуйте её, еÑли ÑобираетеÑÑŒ ÑкÑпортировать риÑунок в PS/EPS. При однородной прозрачноÑти объектов Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ñ€ÐµÑˆÐ°ÐµÑ‚ÑÑ Ð¿Ñ€Ð¾Ñто. Выберите один полупрозрачных объектов, переключитеÑÑŒ на инÑтрумент Пипетка (F7), удоÑтоверьтеÑÑŒ, что включён режим «Брать видимый цвет без альфа-канала», и щёлкните по уже выбранному объекту. Видимый цвет будет получен и заново приÑвоен объекту, но уже без полупрозрачноÑти. Повторите Ñту процедуру Ñ Ð¾Ñтальными объектами. ЕÑли полупрозрачный объект перекрывает неÑколько объектов Ñ Ð¿Ñ€Ð¾Ñтой заливкой, вам придётÑÑ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÑŒ его на чаÑти и повторить процедуру Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ из куÑочков. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -735,9 +768,9 @@ option to save window geometry (Inkscape Preference - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх diff --git a/share/tutorials/tutorial-tips.sk.svg b/share/tutorials/tutorial-tips.sk.svg index b853b9ac5..625ce26dd 100644 --- a/share/tutorials/tutorial-tips.sk.svg +++ b/share/tutorials/tutorial-tips.sk.svg @@ -36,311 +36,310 @@ - - Na posunutie Äalej použite Ctrl+šípka dolu + + Na posunutie Äalej použite Ctrl+šípka dolu - + ::TIPY A TRIKY - - + + Tento návod vám predstaví rozliÄné tipy a triky, ktoré používatelia objavili poÄas používania programu Inkscape a tiež „skryté vlastnosti“, ktoré zvýšia vaÅ¡u produktivitu poÄas kreslenia. - - Kruhové rozmiestnenie s dlaždicovými klonmi + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Ak má vaÅ¡a radiálna vzorka maÅ¥ 3, 4, 6, 8, alebo 12 prvkov, môžete skúsiÅ¥ symetrie P3, P31M, P3M1, P4, P4M, P6 alebo P6M. Tieto sú vhodné pre snehové vloÄky a podobne. Predstavíme vám vÅ¡ak o nieÄo vÅ¡eobecnejší spôsob. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Vyberte symetriu P1 (jednoduché posunutie) a potom vynulujte posunutie na záložke Posun nastavením hodnôt posunov Na riadok/Posun Y a Na stĺpec/Posun X na -100%. Teraz budú vÅ¡etky klony umiestnené presne na mieste originálu. Už zostáva len nastaviÅ¥ nejaký uhol pootoÄenia o stĺpec na záložke Rotácia a následne vytvoriÅ¥ vzorku s jedným riadkom a viacerými stĺpcami. Tu je vzorka zostavená z vodorovnej Äiary s 30 stĺpcami, každý stĺpec je pootoÄený o 6 stupňov: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Vyberte symetriu P1 (jednoduché posunutie) a potom vynulujte posunutie na záložke Posun nastavením hodnôt posunov Na riadok/Posun Y a Na stĺpec/Posun X na -100%. Teraz budú vÅ¡etky klony umiestnené presne na mieste originálu. Už zostáva len nastaviÅ¥ nejaký uhol pootoÄenia o stĺpec na záložke Rotácia a následne vytvoriÅ¥ vzorku s jedným riadkom a viacerými stĺpcami. Tu je vzorka zostavená z vodorovnej Äiary s 30 stĺpcami, každý stĺpec je pootoÄený o 6 stupňov: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Na vyrobenie hodinového ciferníka z tohoto útvaru vám bude staÄiÅ¥ vyrezaÅ¥ alebo jednoducho prekryÅ¥ strednú ÄasÅ¥ bielym kruhom (pred tým, než budete na klonoch vykonávaÅ¥ booleovské operácie ich rozpojte). - - + + Viac zaujímavých efektov sa dá vytvoriÅ¥ použitím riadkov a zároveň stĺpcov. Toto je vzorka s 10 stĺpcami a 8 riadkami, s pootoÄením o 2 stupne na riadok a 18 stupňov na stĺpec. Každá skupina riadkov tu je „stĺpcom“, takže skupiny sú 18 stupňov od seba; v každom stĺpci sú riadky 2 stupne od seba: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ako na odrezávanie (viacero obdĺžnikových oblastí na export)? - - + + - Create a new layer, in that layer create invisible rectangles covering parts of your -image. Make sure your document uses the px unit (default), turn on grid and snap the -rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File -> Export PNG Image (Shift+Ctrl+E)). Then the rects will remember -their export filenames. After that, it's very easy to re-export some of the rects: -switch to the export layer, use Tab to select the one you need (or use Find by id), and -click Export in the dialog. Or, you can write a shell script or batch file to export -all of your areas, with a command like: - + Vytvorte novú vrstvu, v nej vytvorte neviditeľné obdĺžniky pokrývajúce Äasti obrázku. Skontrolujte, Äi sa v dokumente používa jednotka px (predvolená), zapnite mriežku a prichyÅ¥te obdĺžniky k mriežke tak, aby každý pokrýval celoÄíselný poÄet pixlov. Obdĺžnikom priraÄte identifikátory (id) a exportujte každý obdĺžnik do samostatného súboru (Súbor > ExportovaÅ¥ obrázok PNG (Shift+Ctrl+E)). Obdĺžniky si potom budú pamätaÅ¥ názvy svojich súborov na export. Teraz je ľahké znovu exportovaÅ¥ niektoré z obdĺžnikov: prepnite sa na exportnú vrstvu, pomocou tabulátora vyberte obdĺžnik, ktorý potrebujete (môžete použiÅ¥ hľadanie podľa ID), a v dialógu kliknite Export. Na exportovanie oblastí je tiež možné použiÅ¥ shell skript alebo dávkový súbor s príkazom: - - + + inkscape -i id-oblasti -t nazov_suboru.svg - - + + - for each exported area. The -t switch tells it to use the remembered filename hint, -otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - + pre každú exportovanú oblasÅ¥. PrepínaÄ -t zabezpeÄí použitie zapamätaného názvu súboru, inak môžete vložiÅ¥ názov súboru na export pomocou prepínaÄa -e. Podobné výsledky dosiahnete aj pomocou nástroja Rozšírenia > Web > Výrezy alebo Rozšírenia > Export > Gilotína. - - Nelineárne farebné prechody + + Nelineárne farebné prechody - - + + Verzia 1.1 formátu SVG nepodporuje nelineárne farebné prechody (tie, ktoré majú nelineárne prechody medzi farbami). Môžete ich vÅ¡ak emulovaÅ¥ pomocou prechodov s viacerými priehradkami. - - + + - ZaÄnite jednoduchým prechodom s dvomi priehradkami. Otvorte editor prechodov (napríklad dvojitým kliknutím na páÄku pomocou nástroja prechodu). Pridajte do stredu prechodu novú priehradku; o trochu ju posuňte. Pridajte viaceré priehradky pred a za prostrednú priehradku a tiež ich posuňte, aby bol prechod hladký. Čím viac priehradiek pridáte, tým hladší bude výsledný prechod. Tu je základný Äiernobiely prechod s dvomi priehradkami: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -348,11 +347,11 @@ use the Extensions > Web > Slicer - - - + + + - + A tu sú rôzne „nelineárne“ viacpriehradkové prechody (preskúmajte ich v Editore prechodov): @@ -437,21 +436,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Excentrické radiálne prechody + + + + + + + + + + Excentrické radiálne prechody - - + + - + Radiálne prechody nemusia byÅ¥ symetrické. V nástroji Prechod Å¥ahajte prostredný bod elipsového prechodu so stlaÄeným klávesom Shift. Toto presunie páÄku prechodu mimo jeho stred. Ak to nepotrebujete, môžete prilepiÅ¥ intenzitu späť tým, že ho pretiahnete blízko k stredu. @@ -465,250 +464,247 @@ use the Extensions > Web > Slicer - - - - Zarovnanie na stred alebo okraj strany + + + + Zarovnanie na stred alebo okraj strany - - + + - + - To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the -Align and Distribute dialog (Shift+Ctrl+A). - + Ak chcete nieÄo zarovnaÅ¥ na stred alebo okraj stránky, vyberte objekt alebo skupinu a následne v dialógu Zarovnanie a umiestnenie (Ctrl+Shift+A) v ponuke Relatívne k: vyberiete možnosÅ¥ Stránka - - VyÄistenie dokumentu + + VyÄistenie dokumentu - - + + - + - Many of the no-longer-used gradients, patterns, and markers (more precisely, those which -you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers -which are not used by anything in the document, making the file smaller. - + Mnohé už nepoužívané prechody, vzorky a znaÄky (presnejÅ¡ie tie, ktoré ste ruÄne upravili) zostávajú v prísluÅ¡ných paletách a dajú sa použiÅ¥ pre nové objekty. Ak vÅ¡ak chcete optimalizovaÅ¥ svoj dokument, použite príkaz VyÄistiÅ¥ dokument v ponuke Súbor. VÅ¡etky prechody, vzorky alebo znaÄky, ktoré nie sú v dokumente využité sa odstránia a zmenší sa tak veľkosÅ¥ súboru. - - Skryté funkcie a XML editor + + Skryté funkcie a XML editor - - + + - + - The XML editor (Shift+Ctrl+X) allows you to change almost all aspects -of the document without using an external text editor. Also, Inkscape usually supports -more SVG features than are accessible from the GUI. The XML editor is one way to get -access to these features (if you know SVG). - + XML editor (Shift+Ctrl+X) vám umožňuje meniÅ¥ takmer vÅ¡etky vlastnosti dokumentu bez použitia externého textového editora. A Inkscape zvyÄajne podporuje viac SVG vlastností ako vlastnosti dostupné z používateľského rozhrania. Pomocou XML editora máte prístup k týmto funkciám (ak poznáte formát SVG). - - Zmena jednotiek pravítka + + Zmena jednotiek pravítka - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - PeÄiatkovanie + + PeÄiatkovanie - - + + - + Na rýchle vytvorenie mnohých kópií objektu použite peÄiatkovanie. Iba Å¥ahajte objekt (alebo meňte jeho mierku Äi otáÄajte), a poÄas držania stlaÄeného tlaÄidla myÅ¡i stlaÄte medzerník. Tým zanecháte „peÄiatku“ objektu. Môžete to opakovaÅ¥ ľubovoľný poÄet krát. - - Triky pomocou pera + + Triky pomocou pera - - + + - + DokonÄiÅ¥ Äiaru pomocou nástroja Pero (Bézier) môžete nasledujúcimi spôsobmi: - - - + + + - + StlaÄte Enter - - - + + + - + Dvakrát kliknite ľavým tlaÄidlom myÅ¡i - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Vyberte iný nástroj - - + + - + - VÅ¡imnite si, že pokým je cesta nedokonÄená (zobrazuje sa ako zelená s novým úsekom Äerveným), zatiaľ neexistuje ako objekt v dokumente. Preto na zruÅ¡enie cesty použite buÄ Esc (zruší celú cestu) alebo Backspace (zruší posledný segment nedokonÄenej cesty), namiesto funkcie Späť. + VÅ¡imnite si, že pokým je cesta nedokonÄená (zobrazuje sa ako zelená s novým úsekom Äerveným), zatiaľ neexistuje ako objekt v dokumente. Preto na zruÅ¡enie cesty použite buÄ Esc (zruší celú cestu) alebo Backspace (zruší posledný segment nedokonÄenej cesty), namiesto funkcie Späť. - - + + - + Ak chcete pridaÅ¥ nový úsek do existujúcej cesty, vyberte cestu a zaÄnite kresliÅ¥ s klávesom Shift z niektorého bodu. Ak vÅ¡ak chcete pokraÄovaÅ¥ v predlžovaní cesty, Shift nie je potrebný; iba zaÄnite kresliÅ¥ z jednej z koncových kotiev cesty. - - Zadávanie hodnôt v Unicode + + Zadávanie hodnôt v Unicode - - + + - + StlaÄením Ctrl+U v nástroji text môžete prepnúť medzi Unicode a normálnym režimom. V režime Unicode sa každá skupina 4 napísaných Å¡estnástkových Äíslic stane jedným znakom Unicode, teda môžete zadávaÅ¥ ľubovoľné symboly (pokiaľ viete ich Unicode kódy a vybrané písmo ich podporuje). Zadávanie znakov Unicode ukonÄíte stlaÄením Enter. Napríklad Ctrl+U 2 0 1 4 Enter vkladá dlhú pomlÄku (—). Režim Unicode môžete ukonÄiÅ¥ klávesom Esc bez toho, aby sa Äokoľvek vložilo. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert -glyphs into your document. - + Môžete použiÅ¥ aj dialógové okno Text > Grafémy na vyhľadanie a vloženie znakov do dokumentu. - - Použitie mriežky na kreslenie ikon + + Použitie mriežky na kreslenie ikon - - + + - + - Povedzme, že chcete vytvoriÅ¥ 24x24-pixlovú ikonu. Vytvorte 24x24 px plátno (použite Vlastnosti dokumentu) a nastavte mriežku na 0,5 px (48x48 Äiar mriežky). Teraz ak zarovnáte vyplnené objekty na párne Äiary mriežky a obtiahnuté objekty na nepárne Äiary mriežky so šírkou Å¥ahu párnym Äíslom a exportujete dokument pri predvolených 90 dpi (teda 1 px bude zodpovedaÅ¥ 1 pixlu bitmapy), dostanete ostrý bitmapový obrázok bez nepotrebného antialiasingu. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - OtáÄanie objektu + + OtáÄanie objektu - - + + - + - KeÄ používate nástroj Výber, kliknutím na objekt zobrazíte šípky na zmenu veľkosti, Äalším kliknutím zobrazíte šípky na otáÄacie a skosenie. Ťahaním šípok na rohoch otáÄate objekt okolo stredu. Ak poÄas otáÄania podržíte kláves Shift, bude sa otáÄaÅ¥ okolo protiľahlého rohu. Môžete tiež presunúť stred otáÄania na ľubovoľné miesto. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Alebo môžete otáÄaÅ¥ pomocou klávesnice stlaÄením [ a ] (o 15 stupňov) alebo Ctrl+[ a Ctrl+] (o 90 stupňov). Tie isté klávesy [] s klávesom Alt vykonávajú pomalé otáÄanie po pixloch. - - Tiene + + Tiene - - + + - + - To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. - + Ak chcete rýchlo vytvoriÅ¥ tiene objektov, použite funkciu Filtre > Tiene a žiary > Tieň.... - - + + - + - You can also easily create blurred drop shadows for objects manually with blur in the -Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press -PgDown to put it beneath original object, place it a little to the right -and lower than original object. Now open Fill And Stroke dialog and change Blur value to, -say, 5.0. That's it! - + Môžete jednoducho ruÄne vytváraÅ¥ rozostrené tiene objektov pomocou dialógu Výplňa a Å¥ah. Vyberte objekt, duplikujte ho pomocou Ctrl+D, stlaÄením PgDown ho umiestnite pod pôvodný objekt, posuňte ho trochu doľava a dolu oproti pôvodnému objektu. Teraz otvorte dialóg Výplň a Å¥ah a zmeňte hodnotu Rozostrenia na povedzme 5,0. To je vÅ¡etko! - - Umiestnenie textu na cestu + + Umiestnenie textu na cestu - - + + - + - Text pozdĺž krivky umiestnite tak, že vyberiete text aj krivku a vyberiete možnosÅ¥ UmiestniÅ¥ na cestu z ponuky Text. Text zaÄne na zaÄiatku cesty. ÄŒasto sa oplatí vytvoriÅ¥ samostatnú cestu na ktorú sa umiestni text namiesto umiestnenia ho na iný už nakreslený prvok — dá vám to väÄÅ¡iu kontrolu bez nutnosti zložitých zmien v kresbe. + Text pozdĺž krivky umiestnite tak, že vyberiete text aj krivku a vyberiete možnosÅ¥ UmiestniÅ¥ na cestu z ponuky Text. Text zaÄne na zaÄiatku cesty. ÄŒasto sa oplatí vytvoriÅ¥ samostatnú cestu na ktorú sa umiestni text namiesto umiestnenia ho na iný už nakreslený prvok — dá vám to väÄÅ¡iu kontrolu bez nutnosti zložitých zmien v kresbe. - - Výber originálu + + Výber originálu - - + + - + Ak máte text na ceste, prepojený posun alebo klon, ich zdrojový objekt alebo cestu môže byÅ¥ Å¥ažké vybraÅ¥, pretože môže byÅ¥ priamo pod ním, neviditeľný alebo uzamknutý. ZázraÄný kláves Shift+D vám pomôže; vyberte text, prepojený posun alebo klon a stlaÄením Shift+D vyberiete prísluÅ¡nú cestu, zdroj posunu alebo originál klonu. - - Vrátenie okna späť na viditeľnú obrazovku + + Vrátenie okna späť na viditeľnú obrazovku - - + + - + - When moving documents between systems with different resolutions or number of displays, -you may find Inkscape has saved a window position that places the window out of reach on -your screen. Simply maximise the window (which will bring it back into view, use the -task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). - + Pri prenose dokumentov medzi systémami s odliÅ¡nými rozlíšeniami alebo iným poÄtom obrazoviek sa môže staÅ¥ že Inkscape v súbore uloží polohu okna programu, ktorá sa nachádza mimo dosahu vaÅ¡ej obrazovky. Jednoducho maximalizujte okno (vráti sa späť na obrazovku, použite na to panel úloh), uložte dokument a znovu ho naÄítajte. Môžete sa tomu celkom vyhnúť ak vypnete voľbu ukladania rozmerov okna (Nastavenia Inkscape, ÄasÅ¥ Rozhranie > Okná). - - PriesvitnosÅ¥, farebné prechody a export do PostScriptu + + PriesvitnosÅ¥, farebné prechody a export do PostScriptu - - - - - - Formáty PostScript a EPS nepodporujú priesvitnosÅ¥, preto by ste ju nikdy nemali používaÅ¥, ak budete exportovaÅ¥ do PS/EPS. V prípade rovnomernej priesvitnosti, ktorá prekrýva jednoduchú farbu je to jednoduché napraviÅ¥: Vyberte jeden z priesvitných objektov, vyberte nástroj Pipeta (F7); uistite sa, že ste v režime „vybraÅ¥ viditeľnú farbu bez priesvitnosti“ a kliknite na rovnaký objekt. Tým sa vyberie viditeľná farba a priradí sa späť objektu, ale tentoraz bez priesvitnosti. Opakujte to na vÅ¡etkých priesvitných objektoch. Ak váš priesvitný objekt prekrýva viacero oblastí s rôznymi jednoduchými farbami, budete ho musieÅ¥ podľa toho rozdeliÅ¥ na Äasti a použiÅ¥ uvedený postup na každú ÄasÅ¥ zvlášť. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -738,8 +734,8 @@ option to save window geometry (Inkscape Preference - - Na posunutie späť použite Ctrl+šípka hore + + Na posunutie späť použite Ctrl+šípka hore diff --git a/share/tutorials/tutorial-tips.sl.svg b/share/tutorials/tutorial-tips.sl.svg index feb45bd08..0f722f925 100644 --- a/share/tutorials/tutorial-tips.sl.svg +++ b/share/tutorials/tutorial-tips.sl.svg @@ -36,271 +36,274 @@ - - Uporabite Ctrl+puÅ¡Äica navzdol za drsenje + + Uporabite Ctrl+puÅ¡Äica navzdol za drsenje - + ::NASVETI - - + + V tem vodiÄu vam bomo predstavili razne trike, ki so jih naÅ¡i uporabniki spoznali med uporabljanjem Inkscapa, pa tudi nekatere bolj "skrite" možnosti programa, ki vam lahko pomagajo pri delu. - - Krožno tlakovanje z ukazom Tlakuj klone + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - ÄŒe vaÅ¡ krožni vzorec potrebuje le 3, 4, 6, 8 ali 12 elementov, potem lahko poskusite vrste tlakovanja P3, P31M, P3M1, P4, P4M, P6, ali P6M. Ta tlakovanja so uporabna za npr. snežinke in podobne vzorce. Bolj sploÅ¡en naÄin pa je opisan tu. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Izberite tlakovanje P1 (enostavni premik) in potem kompenzirajte ta prenos v zavihku Premik, kjer nastavite obe opciji Na vrsto/Premik Y and Na stolpec/Premik X na -100 %. Sedaj bodo vsi kloni zloženi na vrh originala. Sedaj je treba samo Å¡e v zavihku Vrtenje nastaviti nekaj vrtenj na stolpec, ustvariti vzorec z eno vrstico in veÄimi stolpci. Primer: vzorec, sestavljen iz vodoravne Ärte, s 30 stolpci, vsak od njih je zavrten za 6 stopinj: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Izberite tlakovanje P1 (enostavni premik) in potem kompenzirajte ta prenos v zavihku Premik, kjer nastavite obe opciji Na vrsto/Premik Y and Na stolpec/Premik X na -100 %. Sedaj bodo vsi kloni zloženi na vrh originala. Sedaj je treba samo Å¡e v zavihku Vrtenje nastaviti nekaj vrtenj na stolpec, ustvariti vzorec z eno vrstico in veÄimi stolpci. Primer: vzorec, sestavljen iz vodoravne Ärte, s 30 stolpci, vsak od njih je zavrten za 6 stopinj: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ÄŒe želite iz tega ustvariti urino krožnico, preprosto izrežite ali prekrijte sredinski del z belim krogom (Äe želite izvajati matematiÄne operacije na klonih, jih prej razvežite). - - + + Bolj zanimivi uÄinki se dajo doseÄi z uporabo tako stolpcev kot tudi vrstic. Tu je vzorec z desetimi stolpci in osmimi vrsticami, vrtenjem 2 stopinji na vrstico in 18 stopinj na stolpec. Vsaka skupina Ärt je "stolpec", tako da so skupine 18 stopinj vsaksebi. Znotraj vsakega stolpca so posamezne Ärte 2 stopinji vsaksebi. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Nezvezni prelivi + + Nezvezni prelivi - - + + Trenutna razliÄica SVGja ne podpira nezveznih prelivov. Lahko pa jih ustvarite z veÄstopenjskimi prelivi. - - + + - ZaÄnite s preprostim dvostopenjskim prelivom. Odprite Urejevalnik prelivov (npr. z dvoklikom na katerokoli roÄico na orodju Prelivi). Dodajte nov postanek na sredino in ga malce premaknite. Nato dodajte Å¡e nekaj postankov okrog tega in popravite preliv, da postane spet gladek. VeÄ postankov boste dodali, bolj natanÄno ga boste lahko zmehÄali. Tu je primer osnovnega Ärno-belega preliva z dvema postankoma: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +360,11 @@ use the Extensions > Web > Slicer - - - + + + - + Tu pa je nekaj "nezveznih" prelivov z veÄ postanki (raziskujte jih z Urejevalnikom prelivov (ki ga najdete pod gumbom Uredi v pogovornem oknu Polnilo in obroba): @@ -438,21 +449,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Nesredinski krožni prelivi + + + + + + + + + + Nesredinski krožni prelivi - - + + - + Krožni prelivi niso nujno simetriÄni. ÄŒe v polju za prelive v pogovornem oknu Polnilo in obroba držite tipko Shift in povleÄete srednjo roÄico, boste premaknili srediÅ¡Äe preliva. Ko tega ne potrebujete veÄ, lahko srediÅ¡Äe premaknete nazaj na sredino tako, da ga povleÄete blizu sredine. @@ -466,42 +477,42 @@ use the Extensions > Web > Slicer - - - - Poravnava na sredino strani + + + + Poravnava na sredino strani - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - ÄŒiÅ¡Äenje dokumenta + + ÄŒiÅ¡Äenje dokumenta - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Skrite možnosti in urejevalnik XML + + Skrite možnosti in urejevalnik XML - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -509,97 +520,96 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Spreminjanje enote ravnila + + Spreminjanje enote ravnila - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Žigosanje + + Žigosanje - - + + - + Za hitro kopiranje predmetov lahko uporabite žig. Povlecite predmet z miÅ¡ko (ali pa ga vrtite oz. mu spreminjajte velikost) in pritiskajte na preslednico. Vsak pritisk pusti za seboj odtis predmeta. - - Nasveti za orodje Pero + + Nasveti za orodje Pero - - + + - + Za dokonÄanje Ärte z orodjem Pero (Bezier) imate veÄ možnosti: - - - + + + - + Pritisnite Enter - - - + + + - + Dvokliknite z levim gumbom miÅ¡ke - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Izberite kako drugo orodje - - + + - + - Dokler je pot nedokonÄana (obarvana je zeleno, izbrani segment pa rdeÄe), v dokumentu ne obstaja kot objekt. Za prekinitev poti uporabite Esc (izbris celotne poti) ali Backscape (izbris zadnjega segmenta Å¡e nedokonÄane poti) namesto ukaza Razveljavi. + Dokler je pot nedokonÄana (obarvana je zeleno, izbrani segment pa rdeÄe), v dokumentu ne obstaja kot objekt. Za prekinitev poti uporabite Esc (izbris celotne poti) ali Backscape (izbris zadnjega segmenta Å¡e nedokonÄane poti) namesto ukaza Razveljavi. - - + + - + Za dodajanje podpoti že obstojeÄi poti oznaÄite pot in držite tipko Shift ter zaÄnite risati iz poljubne toÄke. ÄŒe pa želite le nadaljevati že obstojeÄo pot, Shift ni potreben - vse, kar morate storiti je, da zaÄnete risati iz enega izmed konÄnih sider na izbrani poti. - - VnaÅ¡anje Unicode simbolov + + VnaÅ¡anje Unicode simbolov - - + + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -610,58 +620,70 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Uporaba mreže pri risanju ikon + + Uporaba mreže pri risanju ikon - - + + - + - Recimo, da želimo narisati ikono veliko 24x24 pik. Za to bi naredili dokument velikosti 24x24 milimetrov (z ukazom Nastavitve dokumenta, nastavili mrežo na 0,5 mm (48x48 Ärt). Sedaj poravnavamo polne predmete na sode Ärte, prazne, obrisane predmete pa na lihe Ärte. Ko izvozimo sliko tako pri konfiguraciji 1 mm = 1 piksel (90 dpi), dobimo prepriÄljivo sliko brez potrebe po mehÄanju robov. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Sukanje predmeta + + Sukanje predmeta - - + + - + - Z Izbirnikom kliknite na predmet, da se pokažejo puÅ¡Äice za spreminjanje velikosti. ÄŒe kliknete Å¡e enkrat, se pokažejo puÅ¡Äice za vrtenje. ÄŒe kotne puÅ¡Äice kliknete in vleÄete, se predmet vrti okrog svoje osi (oznaÄeno s križcem). ÄŒe medtem držite Shift, se predmet vrti okrog nasprotnega kota. Os vrtenja lahko premaknete tako, da kliknete na srediÅ¡Äno toÄko in jo odvleÄete na poljuben položaj. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Predmete lahko vrtite tudi s pomoÄjo tipkovnice, in sicer z naslednjimi tipkami: [ in ] (za 15 stopinj) ali Ctrl+[ in Ctrl+] (za 90 stopinj). ÄŒe poleg tipk [] držite Å¡e tipko Alt, boste predmete lahko vrteli toÄko po toÄko. - - Rastrske padajoÄe sence + + Rastrske padajoÄe sence - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -670,53 +692,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Postavljanje besedila na krivuljo + + Postavljanje besedila na krivuljo - - + + - + - Besedilo postavite na krivuljo tako, da oznaÄite tako besedilo kot tudi krivuljo in izberete ukaz Postavi na pot iz menija Besedilo. ZaÄetek besedila bo na zaÄetku poti. V sploÅ¡nem je bolje ustvariti toÄno doloÄeno pot, na katero želite postaviti tekst, kot pa prilagajati tekst kakemu drugemu elementu — ta metoda omogoÄa veÄ nadzora in manj skrbi, da bi uniÄili svojo risbo. + Besedilo postavite na krivuljo tako, da oznaÄite tako besedilo kot tudi krivuljo in izberete ukaz Postavi na pot iz menija Besedilo. ZaÄetek besedila bo na zaÄetku poti. V sploÅ¡nem je bolje ustvariti toÄno doloÄeno pot, na katero želite postaviti tekst, kot pa prilagajati tekst kakemu drugemu elementu — ta metoda omogoÄa veÄ nadzora in manj skrbi, da bi uniÄili svojo risbo. - - Izbiranje izvirnika + + Izbiranje izvirnika - - + + - + ÄŒe imate besedilo postavljeno na pot, povezan zamik ali klon, je vÄasih težko izbrati originalen objekt oz. pot, saj je takoj pod tekstom, nevidna in/ali zaklenjena. ÄŒarobna kombinacija Shift+D vam bo pomagala v tem primeru; oznaÄite besedilo, linked offset ali klon in pritisnite Shift+D, nato pa premaknite izbran objekt do originialne poti, izvirnik zamika ali klona. - - Obnova oken + + Obnova oken - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Prosojnost, prelivi in izvoz v PostScript + + Prosojnost, prelivi in izvoz v PostScript - - - - - - PostScript oz. EPS formati ne podpirajo prosojnosti, zato je ne uporabljajte, Äe želite izvažati svoje dokumente v formatih PS/EPS. V primeru enakomerne prosojnosti, ki pokrije enakomerno barvo, je to preprosto popraviti: izberite enega izmed prosojnih objektov, izberite Kapalko (F7) in se prepriÄajte, da je Kapalka v naÄinu "izberi vidno barvo brez alpha kanala", nato pa kliknite na isti objekt. To bo izbralo vidno barvo in jo doloÄilo objektu, tokrat brez prosojnosti. Postopek ponovite za vse prosojne objekte. ÄŒe prosojen objekt pokriva veÄ ploskev s plosko barvo, ga boste morali razdeliti na posamezne dele (glede na barvo) in ponoviti postopek za vsak posamezen del. + + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -746,8 +780,8 @@ option to save window geometry (Inkscape Preference - - Uporabite Ctrl+puÅ¡Äica navzgor za drsenje + + Uporabite Ctrl+puÅ¡Äica navzgor za drsenje diff --git a/share/tutorials/tutorial-tips.svg b/share/tutorials/tutorial-tips.svg index 99641a8be..9ea70815c 100644 --- a/share/tutorials/tutorial-tips.svg +++ b/share/tutorials/tutorial-tips.svg @@ -40,10 +40,10 @@ Use Ctrl+down arrow to scroll - + ::TIPS AND TRICKS - + @@ -53,30 +53,30 @@ the use of Inkscape and some “hidden†features that can help you speed up pr tasks. - - Radial placement with Tile Clones + + Radial placement with Tiled Clones - + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - + - If your radial pattern need only have 3, 4, 6, 8, or 12 elements, then you can try the -P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These would work nicely for snowflakes + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes and the like. A more general method, however, is as follows. - + @@ -90,37 +90,37 @@ create the pattern with one row and multiple columns. For example, here's a out of a horizontal line, with 30 columns, each column rotated 6 degrees: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129,7 +129,7 @@ out of a horizontal line, with 30 columns, each column rotated 6 degrees: central part by a white circle (to do boolean operations on clones, unlink them first). - + @@ -140,178 +140,178 @@ column. Each group of lines here is a “columnâ€, so the groups are 18 degrees other; within each column, individual lines are 2 degrees apart: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - + @@ -327,7 +327,7 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - + @@ -335,7 +335,7 @@ all of your areas, with a command like: inkscape -i area-id -t filename.svg - + @@ -345,10 +345,10 @@ otherwise you can provide the export filename with the -e switch. Alternatively, use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Non-linear gradients + + Non-linear gradients - + @@ -357,16 +357,19 @@ use the Extensions > Web > Slicermultistop gradients. - + - Start with a simple two-stop gradient. Open the Gradient editor (e.g. by -double-clicking on any gradient handle in the Gradient tool). Add a new gradient stop in -the middle; drag it a bit. Then add more stops before and after the middle stop and drag -them too, so that the gradient is smooth. The more stops you add, the smoother you can -make the resulting gradient. Here's the initial black-white gradient with two stops: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: @@ -375,11 +378,11 @@ make the resulting gradient. Here's the initial black-white gradient with t - - + + - + And here are various “non-linear†multi-stop gradients (examine them in the Gradient Editor): @@ -466,21 +469,21 @@ Editor): - - - - - - - - - - Excentric radial gradients + + + + + + + + + + Excentric radial gradients - + - + Radial gradients don't have to be symmetric. In Gradient tool, drag the central handle of an elliptic gradient with Shift. This will move the x-shaped @@ -498,28 +501,28 @@ need it, you can snap the focus back by dragging it close to the center. - - - - Aligning to the center of the page + + + + Aligning to the center of the page - + - + To align something to the center or side of a page, select the object or group and then choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Cleaning up the document + + Cleaning up the document - + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new @@ -527,13 +530,13 @@ objects. However if you want to optimize your document, use the - - Hidden features and the XML editor + + Hidden features and the XML editor - + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -541,30 +544,29 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Changing the rulers' unit of measure + + Changing the rulers' unit of measure - + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To change this, open Document Properties -(Shift+Ctrl+D) and change the Default units on the +(Shift+Ctrl+D) and change the Display units on the Page tab. - - Stamping + + Stamping - + - + To quickly create many copies of an object, use stamping. Just drag an object (or scale or rotate it), and while holding the mouse button down, press @@ -572,57 +574,57 @@ drag an object (or scale or rotate it), and while holding the mouse button down, repeat it as many times as you wish. - - Pen tool tricks + + Pen tool tricks - + - + In the Pen (Bezier) tool, you have the following options to finish the current line: - - + + - + Press Enter - - + + - + Double click with the left mouse button - - + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - + + - + Select another tool - + - + Note that while the path is unfinished (i.e. is shown green, with the current segment red) it does not yet exist as an object in the document. Therefore, to cancel it, use @@ -630,10 +632,10 @@ either Esc (cancel the whole path) or Undo. - + - + To add a new subpath to an existing path, select that path and start drawing with Shift from an arbitrary point. If, however, what you want is to simply @@ -641,13 +643,13 @@ either Esc (cancel the whole path) or - - Entering Unicode values + + Entering Unicode values - + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -658,51 +660,51 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - + - + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Using the grid for drawing icons + + Using the grid for drawing icons - + - + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the Document Preferences) and set the grid to 0.5 px (48x48 gridlines). Now, if you align filled objects to even gridlines, and stroked objects to odd gridlines with the stroke width in px being an even -number, and export it at the default 90dpi (so that 1 px becomes 1 bitmap pixel), you +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you get a crisp bitmap image without unneeded antialiasing. - - Object rotation + + Object rotation - + - + - When in the Select tool, click on an object to see the scaling arrows, -then click again on the object to see the rotation and shift arrows. If + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If the arrows at the corners are clicked and dragged, the object will rotate around the center (shown as a cross mark). If you hold down the Shift key while doing this, the rotation will occur around the opposite corner. You can also drag the rotation center to any place. - + - + Or, you can rotate from keyboard by pressing [ and ] (by 15 degrees) or Ctrl+[ and Ctrl+] (by 90 @@ -710,22 +712,22 @@ degrees). The same [] keys with - - Drop shadows + + Drop shadows - + - + To quickly create drop shadows for objects, use the Filters > Shadows and Glows > Drop Shadow... feature. - + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -734,13 +736,13 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Placing text on a path + + Placing text on a path - + - + To place text along a curve, select the text and the curve together and choose Put on Path from the Text menu. The text will start at the beginning @@ -749,13 +751,13 @@ be fitted to, rather than fitting it to some other drawing element — this will more control without screwing over your drawing. - - Selecting the original + + Selecting the original - + - + When you have a text on path, a linked offset, or a clone, their source object/path may be difficult to select because it may be directly underneath, or made invisible and/or @@ -764,13 +766,13 @@ offset, or clone, and press Shift+D to m corresponding path, offset source, or clone original. - - Window off-screen recovery + + Window off-screen recovery - + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on @@ -780,26 +782,29 @@ option to save window geometry (Inkscape Pref Interface > Windows section). - - Transparency, gradients, and PostScript export + + Transparency, gradients, and PostScript export - + - + PostScript or EPS formats do not support transparency, so you should never use it if you are going to export to PS/EPS. In the case of flat transparency which overlays flat color, it's easy to fix it: Select one of the -transparent objects; switch to the Dropper tool (F7); make sure it's in -the “pick visible color without alpha†mode; click on that same object. That will pick +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick the visible color and assign it back to the object, but this time without transparency. Repeat for all transparent objects. If your transparent object overlays several flat color areas, you will need to break it correspondingly into pieces and -apply this procedure to each piece. +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. - + diff --git a/share/tutorials/tutorial-tips.vi.svg b/share/tutorials/tutorial-tips.vi.svg index 881e1e421..a5a5f6e21 100644 --- a/share/tutorials/tutorial-tips.vi.svg +++ b/share/tutorials/tutorial-tips.vi.svg @@ -36,271 +36,274 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - + ::TIPS AND TRICKS - - + + Bài hướng dẫn này sẽ giá»›i thiệu cho bạn nhiá»u mẹo má»±c mà ngưá»i dùng đã thá»±c hiện cùng Inkscape, cÅ©ng như má»™t số tính năng "ẩn" có thể giúp bạn tăng tốc độ làm việc. - - Bố trí tròn các Bản sao Lát Ä‘á»u + + Radial placement with Tiled Clones - - + + - It's easy to see how to use the Create Tile Clones dialog for rectangular grids and + It's easy to see how to use the Create Tiled Clones dialog for rectangular grids and patterns. But what if you need radial placement, where objects share a common center of rotation? It's possible too! - - + + - Nếu mẫu tròn cá»§a bạn chỉ có 3, 4, 6, 8, hoặc 12 thành phần, bạn có thể dùng các phép đối xứng P3, P31M, P3M1, P4, P4M, P6, P6M. Ta sẽ thu được các hình đối xứng tương tá»± bông tuyết. Ngoài ra, bạn có thể dùng phương pháp tổng quát sau đây. + If your radial pattern only needs to have 3, 4, 6, 8, or 12 elements, then you can try the +P3, P31M, P3M1, P4, P4M, P6, or P6M symmetries. These will work nicely for snowflakes +and the like. A more general method, however, is as follows. + - - + + - Chá»n phép đối xứng P1 (di chuyển đơn giản) và bổ sung vào phép di chuyển này bằng cách chuyển sang thẻ Dá»i chá»— và đặt Má»—i hàng/Dá»i chá»— Y và Má»—i cá»™t/Dá»i chá»— X thành -100%. Giá» tất cả các bản sao sẽ được sắp chồng lên nhau tại vị trí gốc. Cuối cùng, ta chuyển sang thẻ Xoay và đặt má»™t góc xoay cho các cá»™t, rồi tạo mẫu có 1 hàng và nhiá»u cá»™t. Ví dụ, đây là má»™t mẫu được tạo ra bằng 1 đưá»ng thẳng nằm ngang, có 30 cá»™t, má»—i cá»™t xoay góc 6 độ: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Chá»n phép đối xứng P1 (di chuyển đơn giản) và bổ sung vào phép di chuyển này bằng cách chuyển sang thẻ Dá»i chá»— và đặt Má»—i hàng/Dá»i chá»— Y và Má»—i cá»™t/Dá»i chá»— X thành -100%. Giá» tất cả các bản sao sẽ được sắp chồng lên nhau tại vị trí gốc. Cuối cùng, ta chuyển sang thẻ Xoay và đặt má»™t góc xoay cho các cá»™t, rồi tạo mẫu có 1 hàng và nhiá»u cá»™t. Ví dụ, đây là má»™t mẫu được tạo ra bằng 1 đưá»ng thẳng nằm ngang, có 30 cá»™t, má»—i cá»™t xoay góc 6 độ: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Äể tạo ra 1 cái đồng hồ từ hình này, bạn chỉ việc cắt ra hoặc phá»§ lên phần giữa má»™t hình tròn trắng (bá» liên kết giữa các bản sao trước khi để thá»±c hiện các phép toán tập hợp lên chúng) - - + + Khi dùng cả hàng và cá»™t, bạn có thể tạo ra nhiá»u hiệu ứng thú vị hÆ¡n. Có má»™t mẫu 10 cá»™t và 8 hàng, góc xoay là 2 độ đối vá»›i hàng và 18 độ đối vá»›i cá»™t. Má»—i nhóm đưá»ng ở đây là 1 “cá»™tâ€, do vậy các nhóm xoay 18 độ so vá»›i nhau; đối vá»›i các cá»™t, các đưá»ng riêng biệt khác nhau 2 độ: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - In the above examples, the line was rotated around its center. But what if you want the -center to be outside of your shape? Just create an invisible (no fill, no stroke) -rectangle which would cover your shape and whose center is in the point you need, group -the shape and the rectangle together, and then use Create Tile Clones on -that group. This is how you can do nice “explosions†or “starbursts†by randomizing -scale, rotation, and possibly opacity: + In the above examples, the line was rotated around its center. But what if you want the +center to be outside of your shape? Just click on the object twice with the Selector tool +to enter rotation mode. Now move the object's rotation center (represented by a small cross-shaped handle) +to the point you would like to be the center of the rotation for the Tiled Clones operation. +Then use Create Tiled Clones on the object. This is how you can do nice “explosions†+or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - - + + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the rects to the grid so that each one spans a whole number of px units. Assign meaningful -ids to the rects, and export each one to its own file (File +ids to the rects, and export each one to its own file (File > Export PNG Image (Shift+Ctrl+E)). Then the rects will remember their export filenames. After that, it's very easy to re-export some of the rects: switch to the export layer, use Tab to select the one you need (or use Find by id), and @@ -308,40 +311,48 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - - + + inkscape -i area-id -t filename.svg - - + + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can -use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. +use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Chuyển sắc phi tuyến + + Chuyển sắc phi tuyến - - + + Phiên bản 1.1 cá»§a SVG không há»— trợ các chuyển sắc phi tuyến (tức là chuyển sắc có chuyển đổi màu không đồng nhất). Tuy nhiên, bạn có thể giả lập các chuyển sắc loại này bằng chuyển sắc nhiá»u pha. - - + + - Trước hết hãy dùng má»™t chuyển sắc có 2 pha màu. Mở bá»™ sá»­a Chuyển sắc (bằng cách bấm đúp chuá»™t lên má»™t chốt chuyển sắc bất kỳ vá»›i công cụ Chuyển sắc). Thêm má»™t pha chuyển sắc ở giữa, kéo nó lệch Ä‘i 1 chút. Sau đó thêm nhiá»u pha màu khác trước và sau pha màu ở giữa và kéo chúng lệch Ä‘i, sao cho màu sắc được chuyển đổi mượt mà. Càng nhiá»u pha được thêm vào, chuyển sắc bạn tạo ra càng mượt hÆ¡n. Dưới đây là chuyển sắc 2 pha Ä‘en-trắng ban đầu: + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog +or use the gradient tool). Now, with the gradient tool, add a new gradient stop in +the middle; either by double-clicking on the gradient line, or by selecting the square-shaped +gradient stop and clicking on the button Insert new stop in the gradient +tool's tool bar at the top. Drag the new stop a bit. Then add more stops before and after the +middle stop and drag them too, so that the gradient looks smooth. The more stops you add, the +smoother you can make the resulting gradient. Here's the initial black-white gradient with two +stops: + @@ -349,11 +360,11 @@ use the Extensions > Web > Slicer - - - + + + - + Và đây là rất nhiá»u chuyển sắc nhiá»u pha “phi tuyến†(hãy tìm hiểu chúng trong Bá»™ sá»­a Chuyển sắc): @@ -438,21 +449,21 @@ use the Extensions > Web > Slicer - - - - - - - - - - Chuyển sắc tròn lệch tâm + + + + + + + + + + Chuyển sắc tròn lệch tâm - - + + - + Các chuyển sắc tròn không nhất thiết phải đối xứng. Chá»n công cụ Chuyển sắc, kéo chốt nằm giữa cá»§a má»™t chuyển sắc elip khi giữ Shift. Thao tác này sẽ di chuyển chốt tiêu Ä‘iểm hình chữ x cá»§a chuyển sắc ra khá»i vị trí chính giữa. Khi bạn không cần hiệu ứng này nữa, bạn có thể đính tiêu Ä‘iểm trở lại bằng cách kéo nó gần vá» chính giữa. @@ -466,42 +477,42 @@ use the Extensions > Web > Slicer - - - - Sắp hàng vào giữa trang + + + + Sắp hàng vào giữa trang - - + + - + To align something to the center or side of a page, select the object or group and then -choose Page from the Relative to: list in the +choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Làm sạch tài liệu + + Làm sạch tài liệu - - + + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new -objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers +objects. However if you want to optimize your document, use the Clean up Document command in File menu. It will remove any gradients, patterns, or markers which are not used by anything in the document, making the file smaller. - - Các tính năng ẩn và Bá»™ sá»­a XML + + Các tính năng ẩn và Bá»™ sá»­a XML - - + + - + The XML editor (Shift+Ctrl+X) allows you to change almost all aspects of the document without using an external text editor. Also, Inkscape usually supports @@ -509,97 +520,96 @@ more SVG features than are accessible from the GUI. The XML editor is one way to access to these features (if you know SVG). - - Thay đổi đơn vị Ä‘o trên thước kẻ + + Thay đổi đơn vị Ä‘o trên thước kẻ - - + + - + - In the default template, the unit of measure used by the rulers is px (“SVG user unitâ€, -in Inkscape it's equal to 0.8pt or 1/90 of the inch). This is also the unit used in + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You can always hover your mouse over a ruler to see the tooltip with the units it uses.) To -change this, open Document Preferences -(Shift+Ctrl+D) and change the Default units on the -Page tab. +change this, open Document Properties +(Shift+Ctrl+D) and change the Display units on the +Page tab. - - Äóng dấu + + Äóng dấu - - + + - + Äể tạo ra nhiá»u bản sao cá»§a 1 đối tượng trong tài liệu, hãy dùng phương pháp đóng dấu. Chỉ việc di chuyển đối tượng (hoặc co giãn hay xoay nó), và trong khi vẫn giữ chuá»™t, bạn nhấn Phím cách. Thao tác này giống như “đóng dấu†xuống tài liệu, vá»›i hình dạng cá»§a đối tượng chính là con dấu. Bạn có thể lặp Ä‘i lặp lại thao tác này nhiá»u lần. - - Các mẹo sá»­ dụng công cụ Bút + + Các mẹo sá»­ dụng công cụ Bút - - + + - + Vá»›i công cụ Bút (Bezier), bạn có các tuỳ chỉnh sau để kết thúc đưá»ng nét hiện tại: - - - + + + - + Nhấn Enter - - - + + + - + Bấm đúp chuá»™t trái - - - + + + - + - Select the Pen tool from the toolbar + Click with the right mouse button - - - + + + - + Chá»n 1 công cụ khác - - + + - + - Lưu ý rằng khi đưá»ng nét chưa hoàn thiện (tức là nét có màu xanh lục, và Ä‘oạn Ä‘ang vẽ màu Ä‘á») nó chưa tồn tại dưới dạng đối tượng trong tài liệu cá»§a bạn. Vì thế, để xoá nó, hãy dùng Esc (xoá toàn bá»™ đưá»ng nét) hoặc Backspace (xoá Ä‘oạn cuối cùng Ä‘ang vẽ trong đưá»ng nét chưa hoàn chỉnh) thay vì lệnh Huá»· bước. + Lưu ý rằng khi đưá»ng nét chưa hoàn thiện (tức là nét có màu xanh lục, và Ä‘oạn Ä‘ang vẽ màu Ä‘á») nó chưa tồn tại dưới dạng đối tượng trong tài liệu cá»§a bạn. Vì thế, để xoá nó, hãy dùng Esc (xoá toàn bá»™ đưá»ng nét) hoặc Backspace (xoá Ä‘oạn cuối cùng Ä‘ang vẽ trong đưá»ng nét chưa hoàn chỉnh) thay vì lệnh Huá»· bước. - - + + - + Äể thêm 1 đưá»ng nét thành phần cho 1 đưá»ng nét có sẵn, chá»n đưá»ng nét đó và bắt đầu vẽ khi giữ Shift từ 1 Ä‘iểm bất kỳ. Tuy nhiên, nếu bạn muốn vẽ tiếp thêm vào nét Ä‘ang có, bạn không cần phải giữ Shift; chỉ việc bắt đầu vẽ từ 1 nút cuối bên trong đưá»ng nét Ä‘ang chá»n. - - Nhập các giá trị Unicode + + Nhập các giá trị Unicode - - + + - + While in the Text tool, pressing Ctrl+U toggles between Unicode and normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a @@ -610,58 +620,70 @@ an em-dash (—). To quit the Unicode mode without inserting anything press Esc. - - + + - + - You can also use the Text > Glyphs dialog to search for and insert + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Dùng lưới để vẽ biểu tượng + + Dùng lưới để vẽ biểu tượng - - + + - + - Giả sá»­ bạn muốn tạo má»™t biểu tượng có kích thước 24x24 px. Hãy tạo 1 vùng vẽ 24x24 px (dùng há»™p thoại Tuỳ thích Tài liệu) và đặt lưới là 0.5 px (48x48 đưá»ng lưới). Giá», nếu bạn sắp hàng các đối tượng vào các đưá»ng lưới chẵn, và tô nét viá»n đối tượng vào các đưá»ng lưới lẽ khi chá»n độ rá»™ng nét viá»n là 1 số nguyên px, và xuất nó ra ở chế độ mặc định 90dpi (để 1 px trở thành 1 pixel bitmap), bạn sẽ thu được má»™t ảnh giòn mà không cần khá»­ răng cưa. + Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the +Document Preferences) and set the grid to 0.5 px (48x48 gridlines). +Now, if you align filled objects to even gridlines, and stroked +objects to odd gridlines with the stroke width in px being an even +number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you +get a crisp bitmap image without unneeded antialiasing. + - - Xoay đối tượng + + Xoay đối tượng - - + + - + - Khi dùng công cụ Chá»n, bấm chuá»™t lên má»™t đối tượng để hiển thị các mÅ©i tên co giãn, rồi bấm lần nữa để hiển thị các mÅ©i tên xoay và dịch chuyển. Nếu các mÅ©i tên ở góc được bấm và di chuyển, đối tượng sẽ bị xoay quanh tâm (dấu chữ thập). Nếu bạn giữ Shift khi thá»±c hiện thao tác này, phép xoay sẽ lấy tâm là góc đối diện cá»§a đối tượng. Bạn cÅ©ng có thể di chuyển tâm xoay ra vị trí bất kỳ. + When in the Selector tool, click on an object to see the scaling arrows, +then click again on the object to see the rotation and skew arrows. If +the arrows at the corners are clicked and dragged, the object will rotate around the +center (shown as a cross mark). If you hold down the Shift key while +doing this, the rotation will occur around the opposite corner. You can also drag the +rotation center to any place. + - - + + - + Hoặc, bạn có thể xoay đối tượng bằng bàn phím thông qua phím [ và ] (má»—i lần 15 độ) hoặc Ctrl+[ và Ctrl+] (má»—i lần 90 độ). Cặp phím [] kết hợp vá»›i phím Alt cho phép ta xoay các góc nhá» theo mức Ä‘iểm ảnh. - - Äổ bóng + + Äổ bóng - - + + - + To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. +Filters > Shadows and Glows > Drop Shadow... feature. - - + + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -670,53 +692,65 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Äặt văn bản theo đưá»ng nét + + Äặt văn bản theo đưá»ng nét - - + + - + - Äể đặt văn bản dá»c theo 1 đưá»ng nét, chá»n văn bản và đưá»ng nét rồi chá»n lệnh Äể trên đưá»ng nét từ trình đơn Văn bản. Văn bản sẽ bắt đầu từ đầu đưá»ng nét. Nói chung, bạn nên tạo riêng má»™t đưá»ng nét để đặt văn bản lên trên đó, hÆ¡n là dùng các thành phần khác có sẵn trong tài liệu — việc này cho phép bạn dá»… Ä‘iá»u khiển hÆ¡n, mà không làm ảnh hưởng tá»›i các thành phần khác trong bản vẽ. + Äể đặt văn bản dá»c theo 1 đưá»ng nét, chá»n văn bản và đưá»ng nét rồi chá»n lệnh Äể trên đưá»ng nét từ trình đơn Văn bản. Văn bản sẽ bắt đầu từ đầu đưá»ng nét. Nói chung, bạn nên tạo riêng má»™t đưá»ng nét để đặt văn bản lên trên đó, hÆ¡n là dùng các thành phần khác có sẵn trong tài liệu — việc này cho phép bạn dá»… Ä‘iá»u khiển hÆ¡n, mà không làm ảnh hưởng tá»›i các thành phần khác trong bản vẽ. - - Chá»n đối tượng gốc + + Chá»n đối tượng gốc - - + + - + Nếu bạn có văn bản nằm trên đưá»ng nét, má»™t đối tượng dá»i hình liên kết, hoặc má»™t bản sao, có thể việc chá»n các đối tượng/đưá»ng nét gốc sẽ trở nên khó khăn vì có thể chúng nằm ngay phía dưới hoặc/và bị khoá. Tổ hợp phím Shift+D sẽ giúp bạn thá»±c hiện việc chá»n chúng; chá»n văn bản, đối tượng dá»i hình liên kết, hoặc bản sao, và nhấn Shift+D để chuyển vùng chá»n sang đối tượng đưá»ng nét, hình gốc tương ứng. - - Khôi phục cá»­a sổ + + Khôi phục cá»­a sổ - - + + - + When moving documents between systems with different resolutions or number of displays, you may find Inkscape has saved a window position that places the window out of reach on your screen. Simply maximise the window (which will bring it back into view, use the task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). +option to save window geometry (Inkscape Preferences, +Interface > Windows section). - - Xuất Äá»™ trong suốt, Chuyển sắc và PostScript + + Xuất Äá»™ trong suốt, Chuyển sắc và PostScript - - - - - - Các định dạng PostScript và EPS không há»— trợ độ trong suốt, nên bạn cần tránh dùng giá trị trong suốt nếu bạn xuất ra dạng PS/EPS. Trong trưá»ng hợp độ trong suốt phá»§ lên màu đồng nhất, ta có thể dá»… dàng khắc phục nhược Ä‘iểm này: Chá»n má»™t trong các đối tượng trong suốt; chuyển sang công cụ Bút chá»n màu (F7); đảm bảo rằng chế độ lấy màu là “lấy màu hiện không có alpha†+ + + + + + PostScript or EPS formats do not support transparency, so you +should never use it if you are going to export to PS/EPS. In the case of flat +transparency which overlays flat color, it's easy to fix it: Select one of the +transparent objects; switch to the Dropper tool (F7 or d); +make sure that the Opacity: Pick button in the dropper tool's tool bar +is deactivated; click on that same object. That will pick +the visible color and assign it back to the object, but this time without +transparency. Repeat for all transparent objects. If your transparent object overlays +several flat color areas, you will need to break it correspondingly into pieces and +apply this procedure to each piece. Note that the dropper tool does not change the opacity +value of the object, but only the alpha value of its fill or stroke color, so make sure that +every object's opacity value is set to 100% before you start out. + - + @@ -746,8 +780,8 @@ option to save window geometry (Inkscape Preference - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tips.zh_TW.svg b/share/tutorials/tutorial-tips.zh_TW.svg index 2fdd24d1c..29e1014bf 100644 --- a/share/tutorials/tutorial-tips.zh_TW.svg +++ b/share/tutorials/tutorial-tips.zh_TW.svg @@ -50,271 +50,271 @@ 這篇教學將說明å„種技巧和秘訣,使用者會學到é€éŽä½¿ç”¨ Inkscape 和一些「隱è—ã€åŠŸèƒ½ä¾†å¹«åŠ©ä½ å¿«é€Ÿå®Œæˆä»»å‹™ã€‚ - - 放射狀分佈鋪排仿製 + + 放射狀分佈鋪排仿製 - + 使用者很容易就懂得如何使用一般格線和圖樣的建立鋪排仿製å°è©±çª—ã€‚ä½†æ˜¯å¦‚æžœä½ éœ€è¦æ”¾å°„狀分佈,å¯ä»¥è®“物件群共用åŒä¸€å€‹æ—‹è½‰ä¸­å¿ƒå—Žï¼Ÿé€™ä¹Ÿæ˜¯èƒ½å¤ é”æˆçš„ï¼ - + 如果你的放射狀圖案åªéœ€è¦ 3ã€4ã€6ã€8 或 12 個元件,那麼你å¯ä»¥è©¦è©¦ P3ã€P31Mã€P3M1ã€P4ã€P4Mã€P6 或 P6M å°ç¨±ã€‚é€™äº›å°æ–¼è£½ä½œé›ªèŠ±æˆ–é¡žä¼¼çš„æ±è¥¿å¾ˆæœ‰ç”¨ã€‚ä¸éŽæœ‰ä¸€å€‹æ›´æ™®é的方法,如下。 - + 鏿“‡ P1 å°ç¨± (簡單平移),然後切æ›åˆ°ä½ç§»åˆ†é ä¸¦è¨­å®šæ¯è¡Œ/ä½ç§» Y å’Œæ¯åˆ—/ä½ç§» X 皆為 -100% 以補償剛剛的平移。這時全部的仿製物件會完全é‡ç–Šåœ¨åŽŸå§‹ç‰©ä»¶çš„ä¸Šé¢ã€‚繼續切æ›åˆ°æ—‹è½‰åˆ†é ä¸¦è¨­å®šæ¯åˆ—旋轉一些角度,然後以單行多列建立圖案。舉例來說,下é¢çš„圖案是用 30 列且æ¯ä¸€åˆ—旋轉 6 度製作出來的: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + è¦ç”¨é€™å€‹æ–¹æ³•製作一個時é˜åˆ»åº¦ç›¤ï¼Œåªéœ€è¦ç”¨ä¸€å€‹ç™½è‰²åœ“形切掉或覆蓋中央的部份 (è¦åœ¨ä»¿è£½ç‰©ä»¶ä¸Šé€²è¡Œå¸ƒæž—é‹ç®—å‰å…ˆå°‡ç‰©ä»¶å–消連çµ)。 - + è—‰ç”±åŒæ™‚使用行與列å¯è£½ä½œæ›´å¤šæœ‰è¶£çš„æ•ˆæžœã€‚下é¢çš„圖案是用 10 列和 8 行,且æ¯è¡Œæ—‹è½‰ 2 度而æ¯åˆ—旋轉 18 度。這裡æ¯å€‹ç›´ç·šç¾¤çµ„代表一「列ã€ï¼Œæ‰€ä»¥ç¾¤çµ„å½¼æ­¤ä¹‹é–“éƒ½ç›¸è· 18 度;æ¯åˆ—裡é¢çš„å–®ç¨ç›´ç·šå‰‡ç›¸éš” 2 度: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 在上é¢çš„例å­è£¡ï¼Œç›´ç·šç¹žè‘—自己的中心旋轉。但如果你想è¦çš„æ—‹è½‰ä¸­å¿ƒåœ¨å½¢ç‹€çš„外颿€Žéº¼è¾¦ï¼Ÿåªè¦ä½¿ç”¨é¸å–工具在物件上點擊兩下進入旋轉模å¼ã€‚將物件的旋轉中心 (外觀為å°å‰å‰å½¢ç‹€çš„æŽ§åˆ¶é»ž) 到你è¦é‹ªæŽ’的中心ä½ç½®ã€‚å°ç‰©ä»¶ä½¿ç”¨å»ºç«‹é‹ªæŽ’ä»¿è£½ã€‚é€™å°±æ˜¯åˆ©ç”¨éš¨æ©Ÿæ€§çš„ç¸®æ”¾ã€æ—‹è½‰å’Œé€æ˜Žä¾†è£½ä½œã€Œçˆ†ç‚¸ã€æˆ–ã€Œæ†æ˜Ÿçˆ†è£‚ã€æ•ˆæžœçš„æ–¹æ³•。 - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 如何將影åƒåˆ‡ç‰‡ (多個矩形輸出範åœ)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 如何將影åƒåˆ‡ç‰‡ (多個矩形輸出範åœ)? - + 建立一個新圖層,在這圖層裡建立幾個隱形矩形,讓這些矩形分æˆå¹¾å€‹éƒ¨ä»½è¦†è“‹ä½ çš„å½±åƒã€‚確èªä½ çš„æ–‡ä»¶æ˜¯ä½¿ç”¨ px å–®ä½ (é è¨­),開啟格線顯示並把矩形都貼齊格線,使æ¯å€‹çŸ©å½¢é•·åº¦éƒ½æ˜¯æ•´æ•¸ px å–®ä½ã€‚æ¯å€‹çŸ©å½¢éƒ½çµ¦äºˆä¸€å€‹æœ‰æ„義的識別å稱 (ID),並且將æ¯å€‹çŸ©å½¢åŒ¯å‡ºæˆè‡ªå·±å€‹åˆ¥çš„æª”案 (檔案 > 匯出 PNG 圖片 (Shift+Ctrl+E))。而這些矩形會記ä½åŒ¯å‡ºçš„æª”å。在那之後,就å¯ä»¥å¾ˆå®¹æ˜“çš„å†æ¬¡åŒ¯å‡ºä¸€äº›æª”案:切æ›åˆ°åŒ¯å‡ºåœ–層,使用 Tab éµä¾†é¸æ“‡ä½ è¦åŒ¯å‡ºçš„å€åŸŸ (或ä¾ç…§ ID 來尋找),然後點擊å°è©±çª—裡的匯出按鈕。或者,你å¯ä»¥å¯«ä¸€å€‹ shell 腳本或批次命令檔來匯出所有å€åŸŸï¼Œä¾‹å¦‚下é¢çš„æŒ‡ä»¤ï¼š - + inkscape -i å€åŸŸ-id -t 檔å.svg - + é‡å°æ¯å€‹è¦åŒ¯å‡ºçš„å€åŸŸã€‚åƒæ•¸ -t 會告訴程å¼ä½¿ç”¨å·²è¨˜ä½çš„æª”åæç¤ºï¼Œä¸ç„¶ä½ å¯ä»¥ç”¨åƒæ•¸ -e æä¾›åŒ¯å‡ºçš„æª”å。或者,你å¯ä»¥ä½¿ç”¨ 擴充功能 > ç¶²é  > 切片器 或 擴充功能 > 匯出 > 切片工具 锿ˆé¡žä¼¼çš„æ•ˆæžœã€‚ - - éžç·šæ€§æ¼¸å±¤ + + éžç·šæ€§æ¼¸å±¤ - + SVG 版本 1.1 䏿”¯æ´éžç·šæ€§æ¼¸å±¤ (å³é¡è‰²ä¹‹é–“有éžç·šæ€§è½‰è®Š)。ä¸éŽï¼Œä½ å¯ä»¥ç”¨å¤šåœæ­¢é»žæ¼¸å±¤æ¨¡æ“¬é¡žä¼¼çš„æ•ˆæžœã€‚ - + @@ -327,8 +327,8 @@ - - + + @@ -416,18 +416,18 @@ - - - - - - - - - - 離心放射狀漸層 + + + + + + + + + + 離心放射狀漸層 - + @@ -444,216 +444,216 @@ - - - - å°é½Šé é¢ä¸­å¿ƒ + + + + å°é½Šé é¢ä¸­å¿ƒ - + 想è¦å°é½Šé é¢ä¸­å¿ƒæˆ–邊緣,å¯é¸å–物件或群組然後在å°é½Šå’Œåˆ†ä½ˆå°è©±çª— (Ctrl+Shift+A) 裡從 ç›¸å°æ–¼: æ¸…å–®ä¸­é¸æ“‡ é é¢ã€‚ - - æ¸…ç†æ–‡ä»¶ + + æ¸…ç†æ–‡ä»¶ - + 許多沒用到的漸層ã€åœ–樣和標記 (更準確地說是你手動編輯的那些) ä¿å­˜åœ¨å°æ‡‰çš„åƒæ•¸é¢æ¿ä¸­ä¸¦å¯é‡è¤‡ä½¿ç”¨æ–¼æ–°ç‰©ä»¶ä¸Šã€‚但是如果你想è¦å°‡ä½ çš„æ–‡ä»¶æœ€ä½³åŒ–,請使用檔案é¸å–®è£¡çš„æ¸…ç†æ–‡ä»¶ 指令。它會移除文件中沒有用到的漸層ã€åœ–æ¨£æˆ–æ¨™è¨˜ï¼Œä½¿æª”æ¡ˆé«”ç©æ›´å°ã€‚ - - éš±è—特性和 XML 編輯器 + + éš±è—特性和 XML 編輯器 - + XML 編輯器 (Shift+Ctrl+X) 讓你能夠在ä¸ä½¿ç”¨å…§éƒ¨çš„編輯器情形下改變文件絕大部分的外觀。而且 Inkscape 支æ´çš„ SVG 特性通常比圖形介é¢ä¸Šå¯ä½¿ç”¨çš„還多。舉例來說,我們ç¾åœ¨æ”¯æ´é¡¯ç¤ºé®ç½©å’Œè£å‰ªè·¯å¾‘,雖然沒有圖形介é¢å¯å»ºç«‹æˆ–修改。XML 編輯器是使用這些功能的唯一方法 (如果你了解 SVG 的話)。 - - 改變尺標的測é‡å–®ä½ + + 改變尺標的測é‡å–®ä½ - + 在é è¨­çš„範本裡,尺標使用的測é‡å–®ä½ç‚º mmã€‚é€™ä¹Ÿæ˜¯å·¦ä¸‹è§’çš„é¡¯ç¤ºåæ¨™ä¸Šä½¿ç”¨çš„å–®ä½å’Œæ‰€æœ‰é¸å–®è£¡é å…ˆé¸æ“‡çš„å–®ä½ã€‚(ä½ å¯ä»¥æŠŠæ»‘鼠游標åœç•™åœ¨å°ºæ¨™ä¸Šæ–¹æœƒçœ‹è¦‹å–®ä½ä½¿ç”¨çš„相關工具æç¤ºã€‚) è‹¥è¦æ”¹è®Šå–®ä½ï¼Œé–‹å•Ÿ 文件屬性 (Shift+Ctrl+D) 並改變在 é é¢ 分é ä¸Šçš„é è¨­å–®ä½ã€‚ - - 圖章 + + 圖章 - + 想è¦å¿«é€Ÿå»ºç«‹è¨±å¤šç‰©ä»¶çš„複本,就使用圖章功能。先拖動物件(æˆ–è€…ç¸®æ”¾ã€æ—‹è½‰ç‰©ä»¶)ï¼Œç„¶å¾Œç•¶æŒ‰ä½æ»‘鼠按鈕時按空白éµã€‚這會留下目å‰ç‰©ä»¶å½¢ç‹€çš„「圖案ã€ã€‚你坿 ¹æ“šéœ€æ±‚é‡è¤‡é€™å€‹å‹•作好幾次。 - - 筆工具的技巧 + + 筆工具的技巧 - + 使用筆 (è²èŒ²æ›²ç·š) 工具,你有下列幾種方å¼ä¾†çµæŸç›®å‰çš„ç·šæ¢ï¼š - - + + 按 Enter éµ - - + + é»žæ“Šå…©ä¸‹æ»‘é¼ å·¦éµ - - + + 點擊滑鼠å³éµ - - + + 鏿“‡å…¶ä»–工具 - + 注æ„當路徑處於未完æˆç‹€æ…‹ (å³è·¯å¾‘呈ç¾ç¶ è‰²ï¼Œç›®å‰çš„線段呈ç¾ç´…色),這個路徑尚未以物件形態存在文件中。因此,å¯ç”¨ Esc (å–æ¶ˆæ•´å€‹è·¯å¾‘) 或 Backspace (移除未完æˆè·¯å¾‘的最後線段) 來喿¶ˆè·¯å¾‘,而ä¸ç”¨å¾©åŽŸã€‚ - + è¦åŠ å…¥æ–°çš„å­è·¯å¾‘åˆ°ç¾æœ‰çš„路徑,é¸å–路徑並按著 Shift 從任æ„一個點開始繪製。但是如果你åªä¸éŽæƒ³æŽ¥çºŒç¾æœ‰çš„路徑,那麼ä¸éœ€è¦æŒ‰è‘— Shift éµï¼›åƒ…需從é¸å–è·¯å¾‘çš„çµæŸéŒ¨é»žé–‹å§‹ç¹ªè£½ã€‚ - - 輸入 Unicode å­—å…ƒ + + 輸入 Unicode å­—å…ƒ - + 當使用文字工具時,按 Ctrl+U å¯åœ¨ä¸€èˆ¬æ¨¡å¼èˆ‡ Unicode 模å¼ä¹‹é–“作切æ›ã€‚在 Unicode 模å¼ä¸­ï¼Œä½ è¼¸å…¥çš„字會以 4 個å六進使•¸å­—為一組變æˆä¸€å€‹å–®ä¸€çš„ Unicode 字元,因而å…許你輸入å„種符號 (åªè¦ä½ æ›‰å¾—它們的 Unicode å€åˆ†ç¢¼ä¸”字型能支æ´)。按 Enter å¯å®Œæˆ Unicode 輸入。例如,Ctrl+U 2 0 1 4 Enter 坿’入一個 em-dash (—)。按 Esc å¯ä¸æ’入任何字元便離開 Unicode 模å¼ã€‚ - + 你也å¯ä»¥ä½¿ç”¨ 文字 > å­—å½¢ å°è©±çª—來æœå°‹å’Œæ’入字形到你的檔案中。 - - 使用格線繪製圖示 + + 使用格線繪製圖示 - + å‡è¨­ä½ æƒ³è£½ä½œä¸€å€‹ 24x24 åƒç´ çš„圖示。建立一幅寬高為 24x24 px 的畫布 (使用文件å好設定) 並設定格線為 0.5 px (48x48 的格線數)。這時,如果你將填充物件å°é½Šå¶æ•¸æ ¼ç·šï¼Œè€Œé‚Šæ¡†ç‰©ä»¶å°é½Šåˆ°å¥‡æ•¸æ ¼ç·šåŠ ä¸Š px å–®ä½çš„邊框寬度就變æˆå¶æ•¸ï¼Œä¸¦æ–¼é è¨­ 90dpi (也就是 1 px è®Šæˆ 1 點陣圖åƒç´ ) 匯出,你會得到一個清晰的點陣圖åƒï¼Œè€Œæ²’有ä¸å¿…è¦çš„平滑效果。 - - 物件旋轉 + + 物件旋轉 - + 當使用é¸å–工具,在物件上點擊會看到縮放箭頭,然後在物件上å†é»žæ“Šä¸€æ¬¡æœƒè¦‹åˆ°æ—‹è½‰ã€ä½ç§»çš„箭頭。如果點擊和拖曳四個角上的箭頭,物件會繞著中心點旋轉 (顯示為å字標誌)。如果你在åšé€™å€‹å‹•ä½œæ™‚æŒ‰ä½ Shift éµï¼Œé‚£éº¼æœƒç¹žè‘—å°è§’作旋轉。你也能將旋轉中心拖到任何地方。 - + 或者,你å¯ä»¥æŒ‰éµç›¤ä¸Šçš„ [ å’Œ ] (15 度) 或 Ctrl+[ å’Œ Ctrl+] (90 度)作旋轉。按著 Alt 並按 [] éµå¯ä½œç·©æ…¢çš„åƒç´ å¤§å°æ—‹è½‰ã€‚ - - 下è½å¼é™°å½± + + 下è½å¼é™°å½± - + 使用 æ¿¾é¡ > 陰影和光暈 > 下è½å¼é™°å½±... 功能能夠快速建立物件的下è½å¼é™°å½±ã€‚ - + 你也å¯ä»¥è—‰ç”±å¡«å……和邊框å°è©±çª—中的模糊很簡單地手動為物件加上模糊的下è½å¼é™°å½±ã€‚å…ˆé¸å–物件,用 Ctrl+D å†è£½ï¼ŒæŒ‰ PgDown 把å†è£½ç‰©ä»¶æ”¾åˆ°åŽŸå§‹ç‰©ä»¶çš„ä¸‹æ–¹ï¼Œå°‡å†è£½ç‰©ä»¶æ”¾ç½®åˆ°æ¯”原始物件下é¢ä¸€é»žåŠå³é‚Šä¸€é»žçš„ä½ç½®ã€‚ç¾åœ¨é–‹å•Ÿã€Œå¡«å……和邊框ã€å°è©±çª—並將模糊值改為 5.0ã€‚å°±æ˜¯é€™æ¨£ï¼ - - 將文字放置在路徑上 + + 將文字放置在路徑上 - + è¦å°‡æ–‡å­—æ²¿è‘—æ›²ç·šæ”¾ç½®ï¼ŒåŒæ™‚é¸å–文字和路徑並從文字é¸å–®ä¸­é¸æ“‡ç½®æ–¼è·¯å¾‘ã€‚é€™ä¸²æ–‡å­—æœƒå¾žè·¯å¾‘èµ·é»žé–‹å§‹ã€‚ä¸€èˆ¬ä¾†èªªæœ€å¥½çš„æ–¹å¼æ˜¯å»ºç«‹ä¸€å€‹ä½ æƒ³è¦å¡«å…¥çš„æ˜Žç¢ºè·¯å¾‘ï¼Œè€Œä¸æ˜¯æŠŠæ–‡å­—填入到其他繪圖元件 — é€™æœƒè®“ä½ æ›´å¥½æŽ§åˆ¶ä¸”ä¸æœƒå½±éŸ¿åˆ°ä½ çš„繪畫。 - - é¸å–原始物件 + + é¸å–原始物件 - + 當你有置於路徑上的文字ã€é€£çµå移物件或仿製物件,這些物件的來æºç‰©ä»¶/路徑å¯èƒ½å¾ˆé›£é¸å–,因為å¯èƒ½æ­£å¥½åœ¨åº•下或設定為隱形和/或鎖定。神奇的 Shift+D 會幫助你;先é¸å–文字ã€é€£çµå移物件或仿製物件,然後按 Shift+D å¯å°‡é¸å–ç§»å‹•åˆ°å°æ‡‰çš„路徑ã€åç§»ä¾†æºæˆ–仿製原始物件。 - - æ¢å¾©è¶…出螢幕的視窗 + + æ¢å¾©è¶…出螢幕的視窗 - + 當在ä¸åŒçš„è§£æžåº¦æˆ–一些顯示模å¼çš„ç³»çµ±ä¹‹é–“ç§»å‹•æ–‡ä»¶æ™‚ï¼Œä½ æœƒç™¼ç¾ Inkscape 已經儲存了視窗ä½ç½®ï¼Œç¨‹å¼æœƒæŠŠè¦–窗放置到超出螢幕的地方。直接將視窗最大化 (使用任務欄會把視窗帶回檢視å€)ï¼Œå„²å­˜ä¸¦é‡æ–°è¼‰å…¥ã€‚ä½ å¯ä»¥è—‰ç”±å–æ¶ˆå‹¾é¸æ•´é«”é¸é …變æˆå„²å­˜è¦–窗空間 (Inkscape åå¥½è¨­å®šï¼Œä»‹é¢ > 視窗部分) 來é¿å…這種å•題。 - - 逿˜Žã€æ¼¸å±¤å’Œ PostScript 匯出 + + 逿˜Žã€æ¼¸å±¤å’Œ PostScript 匯出 - + PostScript 或 EPS æ ¼å¼ä¸æ”¯æ´é€æ˜Žï¼Œå› æ­¤å¦‚果你想è¦åŒ¯å‡ºæˆ PS/EPS å°±ä¸è¦ä½¿ç”¨é€æ˜Žã€‚至於平é¢é€æ˜Žæœƒè¦†è“‹å¹³é¢è‰²å½©çš„å•題,很簡單就能解決:é¸å–逿˜Žç‰©ä»¶çš„其中一個;切æ›åˆ°æ»´ç®¡å·¥å…· (F7)ï¼›ç¢ºèªæ»´ç®¡å·¥å…·åˆ—上ä¸é€æ˜Žåº¦ï¼šæ‹¾å–按鈕為åœç”¨ç‹€æ…‹ï¼›ç„¶å¾Œåœ¨åŒç‰©ä»¶ä¸Šé»žæ“Šã€‚這會拾å–å¯è¦‹é¡è‰²ä¸¦æŒ‡æ´¾å›žåˆ°ç‰©ä»¶ã€‚å°å…¨éƒ¨å…¶ä»–逿˜Žç‰©ä»¶é‡è¤‡ä¸Šè¿°çš„æ­¥é©Ÿã€‚å¦‚æžœä½ çš„é€æ˜Žç‰©ä»¶è“‹ä½ä¸€äº›å¹³é¢é¡è‰²ç¯„åœï¼Œä½ éœ€è¦ç›¸å°åœ°å°‡å®ƒæ‰“æ•£æˆæ•¸å€‹å…ƒä»¶ä¸¦å°æ¯å€‹å…ƒä»¶å¥—ç”¨ä¸Šè¿°çš„æ­¥é©Ÿã€‚æ³¨æ„æ»´ç®¡å·¥å…·ä¸åªæœƒæ”¹è®Šç‰©ä»¶çš„ä¸é€æ˜Žåº¦ï¼Œä¹Ÿæœƒè®Šæ›´ç‰©ä»¶çš„å¡«è‰²æˆ–é‚Šæ¡†é€æ˜Žå€¼ï¼Œå› æ­¤å‹•作å‰å…ˆç¢ºèªæ¯å€‹ç‰©ä»¶ä¸é€æ˜Žå€¼è¨­å®šç‚º 100%。 - + diff --git a/share/tutorials/tutorial-tracing-pixelart.el.svg b/share/tutorials/tutorial-tracing-pixelart.el.svg index df7e253b8..980dfd788 100644 --- a/share/tutorials/tutorial-tracing-pixelart.el.svg +++ b/share/tutorials/tutorial-tracing-pixelart.el.svg @@ -40,52 +40,52 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - + ::ΕÎΤΟΠΙΣΜΌΣ ΤΈΧÎΗΣ ΕΙΚΟÎΟΣΤΟΙΧΕΊΩΠ- + ΠαλιότεÏα είχαμε Ï€Ïόσβαση σε λογισμικό επεξεÏγασίας μεγάλων γÏαφικών διανυσμάτων... - + Ακόμα πιο παλιά είχαμε οθόνες υπολογιστή 640x480... - + Ήταν συνηθισμένο να παίζουμε παιχνίδια βίντεο με Ï€Ïοσεκτικά φτιαγμένα εικονοστοιχεία σε οθόνες χαμηλών αναλÏσεων. - + Ονομάζουμε "τέχνη εικονοστοιχείων (Pixel Art)" το είδος της τέχνης που γεννήθηκε αυτήν την εποχή. - + Το Inkscape Ï„Ïοφοδοτείται από το libdepixelize με την ικανότητα αυτόματης διανυσματοποίησης αυτών των "ειδικών" εικόνων τέχνης εικονοστοιχείων. ΜποÏείτε να δοκιμάσετε άλλους Ï„Ïπους εισαγωγής εικόνων επίσης, αλλά σας Ï€ÏοειδοποιοÏμε: Το αποτέλεσμα δεν θα είναι εξίσου καλό και είναι καλÏτεÏη ιδέα να χÏησιμοποιήσετε τον άλλο ανιχνευτή του Inkscape, potrace. - + Ας αÏχίσουμε με ένα δείγμα εικόνας για να σας εμφανίσουμε τις δυνατότητες αυτής της μηχανής ανίχνευσης. ΠαÏακάτω υπάÏχει ένα παÏάδειγμα εικονογÏαφίας (που ελήφθη από μια καταχώÏιση στο Liberated Pixel Cup) στα αÏιστεÏά και την διανυσματική του έξοδο στα δεξιά. - + @@ -327,14 +327,14 @@ - + Το libdepixelize χÏησιμοποιεί τον αλγόÏιθμο Kopf-Lischinski για να κάνει διανÏσματα εικόνων. Αυτός ο αλγόÏιθμος χÏησιμοποιεί ιδέες πολλών τεχνικών της επιστήμης των υπολογιστών και μαθηματικές έννοιες για να παÏάξει ένα καλό αποτέλεσμα για εικόνες τέχνης εικονοστοιχείων. ΠÏέπει να σημειώσετε ότι το κανάλι άλφα παÏαβλέπεται ολότελα από τον αλγόÏιθμο. Το libdepixelize δεν έχει Ï€Ïος το παÏόν επεκτάσεις για να σας δώσει μια Ï€Ïώτης τάξης συμπεÏιφοÏά για αυτήν την κλάση εικόνων, αλλά όλες οι εικόνες τέχνης εικονοστοιχείων (pixel art) με υποστήÏιξη ÎºÎ±Î½Î±Î»Î¹Î¿Ï Î¬Î»Ï†Î± παÏάγουν παÏόμοια αποτελέσματα με την κÏÏια κλάση των εικόνων που αναγνωÏίζονται από τον Kopf-Lischinski. - + @@ -698,52 +698,52 @@ - + Η παÏαπάνω εικόνα έχει κανάλι άλφα και το αποτέλεσμα είναι απλώς θαυμάσιο. ΠαÏόλα αυτά, αν βÏείτε μια εικόνα τέχνης εικονοστοιχείων με άσχημο αποτέλεσμα και πιστεÏετε ότι η αιτία είναι το κανάλι άλφα, τότε επικοινωνήστε με τον συντηÏητή του libdepixelize (Ï€.χ. συμπληÏώστε ένα σφάλμα στη σελίδα έÏγου) και θα είναι ευχαÏιστημένος να επεκτείνει τον αλγόÏιθμο. Δεν μποÏεί να επεκτείνει τον αλγόÏιθμο αν δεν ξέÏει ποιες εικόνες δίνουν άσχημα αποτελέσματα. - + Η παÏακάτω εικόνα είναι ένα στιγμιότυπο του διαλόγου Ανίχνευση τέχνης εικονοστοιχείων στην αγγλική τοπικοποίηση. ΜποÏείτε να ανοίξετε αυτόν τον διάλογο χÏησιμοποιώντας το Î¼ÎµÎ½Î¿Ï Î”Î¹Î±Î´Ïομή > Ανίχνευση τέχνης εικονοστοιχείων... ή δεξιοπατώντας σε ένα αντικείμενο εικόνας και έπειτα Ανίχνευση τέχνης εικονοστοιχείων. - + - + Αυτός ο διάλογος έχει δÏο ενότητες: ΕυÏετική και έξοδος. Η ευÏετική αποσκοπεί σε Ï€ÏοχωÏημένες χÏήσεις, αλλά υπάÏχουν ήδη καλές Ï€Ïοεπιλογές και δεν Ï€Ïέπει να ανησυχείτε για αυτό, έτσι ας το αφήσουμε για αÏγότεÏα και να ξεκινήσουμε με την εξήγηση της εξόδου. - + Ο αλγόÏιθμος Kopf-Lischinski δουλεÏει (από ένα σημείο Ï…ÏˆÎ·Î»Î¿Ï ÎµÏ€Î¹Ï€Î­Î´Î¿Ï… Ï€Ïοβολής) όπως ένας μεταγλωττιστής, στη μετατÏοπή δεδομένων Î¼ÎµÏ„Î±Î¾Ï Ï€Î¿Î»Î»ÏŽÎ½ Ï„Ïπων παÏουσίασης. Σε κάθε βήμα ο αλγόÏιθμος έχει την ευκαιÏία να εξεÏευνήσει τις λειτουÏγίες που Ï€ÏοσφέÏει αυτή η απεικόνιση. Κάποιες από αυτές τις ενδιάμεσες αναπαÏαστάσεις έχουν μια σωστή οπτική παÏουσίαση (όπως η ανασχεδιασμένη έξοδος Voronoi του γÏαφήματος κελιοÏ) και κάποιες δεν έχουν (όπως το γÏάφημα ομοιότητας). Κατά την ανάπτυξη του libdepixelize οι χÏήστες συνέχισαν να ÏωτοÏν για την Ï€Ïοσθήκη της δυνατότητας εξαγωγής αυτών των ενδιάμεσων σταδίων στο libdepixelize και ο αÏχικός συγγÏαφέας του libdepixelize δέχτηκε τις επιθυμίες τους. - + Η Ï€Ïοεπιλεγμένη έξοδος Ï€Ïέπει να δίνει το πιο ομαλό αποτέλεσμα και είναι Ï€Ïοφανώς αυτή που θέλετε. Είδατε ήδη την Ï€Ïοεπιλεγμένη έξοδο στα Ï€Ïώτα δείγματα Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μαθήματος. Αν θέλετε να το δοκιμάσετε οι ίδιοι, ανοίξτε απλά τον διάλογο Ανίχνευση τέχνης εικονοστοιχείων και πατήστε στο Εντάξει μετά την επιλογή κάποιας εικόνας στο Inkscape. - + ΜποÏείτε να δείτε την παÏακάτω έξοδο Voronoi και αυτή είναι μια "ανασχεδιασμένη εικόνα εικονοστοιχείων", όπου τα κελιά (Ï€Ïοηγουμένως εικονοστοιχεία) ανασχεδιάστηκαν για να συνδέσουν εικονοστοιχεία που είναι μέÏη του ίδιου γνωÏίσματος. Δεν θα δημιουÏγηθοÏν καμπÏλες και η εικόνα συνεχίζει να αποτελείται από ευθείες γÏαμμές. Η διαφοÏά μποÏεί να παÏατηÏηθεί όταν μεγεθÏνετε την εικόνα. ΠÏοηγουμένως, τα εικονοστοιχεία δεν μποÏοÏσαν να μοιÏαστοÏν μια άκÏη με έναν διαγώνιο γείτονα, ακόμα κι αν Ï€ÏοοÏιζόταν να είναι μέÏος του ίδιου γνωÏίσματος. Αλλά τώÏα (χάÏη σε ένα γÏάφημα ομοιότητας χÏώματος και την ευÏετική μποÏείτε να πετÏχετε ένα καλÏτεÏο αποτέλεσμα), είναι δυνατό να κάνετε δÏο διαγώνια κελιά να μοιÏαστοÏν μια άκÏη (Ï€Ïοηγουμένως μόνο μεμονωμένες κοÏυφές μοιÏαζόντουσαν από δÏο διαγώνια κελιά). - + @@ -15084,42 +15084,42 @@ - + Η τυπική έξοδο Î’-ευλÏγιστων καμπυλών θα σας δώσει ομαλά αποτελέσματα, επειδή η Ï€ÏοηγοÏμενη έξοδος ΒοÏονόι θα μετατÏαπεί σε δευτεÏοβάθμιες καμπÏλες Μπεζιέ. Όμως, η μετατÏοπή δεν θα είναι 1:1 επειδή υπάÏχουν πεÏισσότεÏα ευÏετικά που δουλεÏουν για να αποφασίσουν ποιες καμπÏλες θα συγχωνευτοÏν σε μία όταν ο αλγόÏιθμος φτάσει μια ένωση Τ Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ οÏατών χÏωμάτων. Μια υπόδειξη για την ευÏετική Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… σταδίου: Δεν μποÏείτε να την συντονίσετε. - + Το τελικό στάδιο του libdepixelize (Ï€Ïος το παÏόν μη εξαγώγιμο από το GUI Inkscape λόγω της πειÏαματικής και ατελοÏÏ‚ κατάστασης) είναι "βελτιστοποίηση καμπυλών" για να αφαιÏέσετε το αποτέλεσμα της σκάλας των Î’-εÏκαμπτων καμπυλών. Αυτό το στάδιο εκτελεί επίσης μια τεχνική αναγνώÏισης οÏίου για να αποτÏέψει κάποια γνωÏίσματα από την εξομάλυνση και μια τεχνική Ï„ÏÎ¹Î³Ï‰Î½Î¹ÏƒÎ¼Î¿Ï Î³Î¹Î± να διοÏθώσει τη θέση των κόμβων μετά τη βελτιστοποίηση. Θα Ï€Ïέπει να μποÏείτε να απενεÏγοποιήσετε ξεχωÏιστά κάθε ένα από αυτά τα γνωÏίσματα όταν αυτή η έξοδος αφήνει το "πειÏαματικό στάδιο" στο libdepixelize (ελπίζουμε σÏντομα). - + Η ενότητα ευÏετικών στη γÏαφική διεπαφή σας επιτÏέπει να συντονίσετε τα χÏησιμοποιοÏμενα ευÏετικά από το libdepixelize για να αποφασίσει τι να κάνει όταν αντιμετωπίσει μια ομάδα 2x2 εικονοστοιχείων όπου οι δÏο διαγώνιοι έχουν παÏόμοια χÏώματα. "Ποια σÏνδεση Ï€Ïέπει να κÏατήσω;" είναι αυτό που Ïωτά το libdepixelize. ΠÏοσπαθεί να εφαÏμόσει όλα τα ευÏετικά στις συγκÏουόμενες διαγωνίους και κÏατά τη σÏνδεση του νικητή. Αν συμβεί ισοπαλία και οι δυο συνδέσεις σβήνονται. - + Αν θέλετε να αναλÏσετε το αποτέλεσμα κάθε ευÏÎµÏ„Î¹ÎºÎ¿Ï ÎºÎ±Î¹ να παίξετε με τους αÏιθμοÏÏ‚, η άÏιστη έξοδος είναι η έξοδος ΒοÏονόι. ΜποÏείτε να δείτε πιο εÏκολα τα αποτελέσματα των ευÏετικών στην έξοδο ΒοÏονόι και όταν είσαστε ικανοποιημένοι με τις Ïυθμίσεις που πήÏατε, μποÏείτε απλώς να αλλάξετε τον Ï„Ïπο εξόδου στον επιθυμητό. - + Η παÏακάτω εικόνα έχει μια εικόνα και την έξοδο των ευλÏγιστων καμπυλών Î’ με μόνο μια από τις ευÏετικές ενεÏγή για κάθε Ï€Ïοσπάθεια. ΠÏοσέξτε τους ποÏφυÏοÏÏ‚ κÏκλους που επισημαίνουν τις διαφοÏές που κάθε ευÏετική εκτελεί. - + @@ -15500,72 +15500,72 @@ - + Για την Ï€Ïώτη Ï€Ïοσπάθεια (πάνω εικόνα), ενεÏγοποιήσαμε μόνο τις ευÏετικές καμπÏλες. Αυτή η ευÏετική Ï€Ïοσπαθεί να κÏατήσει τις μεγάλες καμπÏλες συνδεμένες μαζί. ΜποÏείτε να σημειώστε ότι το αποτέλεσμά του είναι παÏόμοιο με την τελευταία εικόνα, όπου τα αÏαιά ευÏετικά εικονοστοιχεία εφαÏμόζονται. Μια διαφοÏά είναι ότι η "δÏναμή" του είναι πεÏισσότεÏο επαÏκής και δίνει μόνο μια υψηλή τιμή στον ψήφο του όταν είναι Ï€Ïαγματικά σημαντικό να κÏατήσετε αυτές τις συνδέσεις. Ο "επαÏκής" οÏισμός/έννοια εδώ βασίζεται στην "ανθÏώπινη διαίσθηση" με δεδομένη την αναλυμένη βάση δεδομένων του εικονοστοιχείου. Μια άλλη διαφοÏά είναι ότι αυτή η ευÏετική δεν μποÏεί να αποφασίσει τι να κάνει όταν υπάÏχουν μεγάλα μπλοκ ομάδας συνδέσεων αντί για μεγάλες καμπÏλες (σκεφτείτε μια σκακιέÏα). - + Για τη δεÏτεÏη Ï€Ïοσπάθεια (την μεσαία εικόνα), ενεÏγοποιοÏμε μόνο τις ευÏετικές νησίδων. Το μόνο Ï€Ïάγμα που αυτή η ευÏετική κάνει είναι η Ï€Ïοσπάθεια διατήÏησης της σÏνδεσης που αλλιώς θα κατέληγε σε πολλά απομονωμένα εικονοστοιχεία (νησίδες) με ένα σταθεÏÏŒ βάÏος συμφωνίας. Αυτό το είδος κατάστασης δεν είναι τόσο συνηθισμένο όσο το είδος της κατάστασης που χειÏίζονται οι άλλες ευÏετικές, αλλά αυτή η ευÏετική είναι Ï€Î¿Î»Ï ÎºÎ±Î»Î® και βοηθάει στην παÏαγωγή ακόμα καλÏτεÏων αποτελεσμάτων. - + Για την Ï„Ïίτη Ï€Ïοσπάθεια (η κάτω εικόνα), ενεÏγοποιήσαμε μόνο την αÏαιή ευÏετική των εικονοστοιχείων. Αυτή η ευÏετική Ï€Ïοσπαθεί να κÏατήσει τις καμπÏλες με το χÏώμα Ï€Ïοσκηνίου συνδεμένες. Για να βÏει ποιο είναι το χÏώμα παÏασκηνίου η ευÏετική αναλÏει ένα παÏάθυÏο με τα εικονοστοιχεία γÏÏω από τις συγκÏουόμενες καμπÏλες. Για αυτήν την ευÏετική, δεν συντονίζετε μόνο τη "δÏναμή" της, αλλά επίσης το παÏάθυÏο των εικονοστοιχείων που αναλÏει. Îα θυμόσαστε ότι όταν αυξάνετε το παÏάθυÏο των αναλυμένων εικονοστοιχείων η μέγιστη "δÏναμη" για τη συμφωνία του θα αυξηθεί επίσης και μποÏεί να θελήσετε να Ï€ÏοσαÏμόσετε τον πολλαπλασιαστή για την συμφωνία του. Ο αÏχικός συγγÏαφέας του libdepixelize θεωÏεί ότι αυτή η ευÏετική είναι υπεÏβολικά αδηφάγος και του αÏέσει να χÏησιμοποιεί την τιμή "0.25" για τον πολλαπλασιαστή του. - + Ακόμα κι αν τα αποτελέσματα των ευÏετικών καμπυλών και των αÏαιών ευÏετικών εικονοστοιχείων δίνουν παÏόμοια αποτελέσματα, μποÏεί να θελήσετε να τα αφήσετε και τα δυο ενεÏγά, επειδή οι ευÏετικές καμπÏλες μποÏεί να δώσουν μια Ï€Ïόσθετη ασφάλεια έτσι ώστε οι σημαντικές καμπÏλες των εικονοστοιχείων πεÏιγÏάμματος δεν θα εμποδίζονται και υπάÏχουν πεÏιπτώσεις που μποÏοÏν να απαντηθοÏν μόνο από την αÏαιή ευÏετική εικονοστοιχείων. - + Υπόδειξη: ΜποÏείτε να απενεÏγοποιήσετε όλες τις ευÏετικές οÏίζοντας τις τιμές του πολλαπλασιαστή/βάÏους στο μηδέν. ΜποÏείτε να κάνετε οποιαδήποτε ευÏετική Ï€Ïάξη αντίθετα Ï€Ïος τις αÏχές τους χÏησιμοποιώντας αÏνητικές τιμές για τις τιμές πολλαπλασιαστή/βάÏους. Γιατί θα θέλατε κάποτε να αντικαταστήσετε τη συμπεÏιφοÏά που δημιουÏγήθηκε για να δώσετε καλÏτεÏη ποιότητα με την αντίθετη συμπεÏιφοÏά; Επειδή μποÏείτε... επειδή μποÏεί να θελήσετε ένα "καλλιτεχνικό" αποτέλεσμα... ο,τιδήποτε απλά μποÏείτε. - + Αυτό ήτανε. Για αυτήν την αÏχική έκδοση του libdepixelize αυτές είναι όλες οι επιλογές που έχετε. Αλλά αν η αναζήτηση του αÏÏ‡Î¹ÎºÎ¿Ï ÏƒÏ…Î³Î³Ïαφέα του libdepixelize και των δημιουÏγικών συμβοÏλων πετÏχει, μποÏεί να δεχτείτε Ï€Ïόσθετες επιλογές που διευÏÏνουν ακόμα πεÏισσότεÏο το εÏÏος των εικόνων για τις οποίες το libdepixelize δίνει ένα καλό αποτέλεσμα. Îα τους ευχηθοÏμε καλή Ï„Ïχη. - + Όλες οι χÏησιμοποιοÏμενες εικόνες ελήφθησαν από το Liberated Pixel Cup Ï€Ïος αποφυγή Ï€Ïοβλημάτων πνευματικών δικαιωμάτων. Οι σÏνδεσμοι είναι: - - + + http://opengameart.org/content/memento - - + + http://opengameart.org/content/rpg-enemies-bathroom-tiles - + diff --git a/share/tutorials/tutorial-tracing-pixelart.fr.svg b/share/tutorials/tutorial-tracing-pixelart.fr.svg index 1bc503511..706a136a8 100644 --- a/share/tutorials/tutorial-tracing-pixelart.fr.svg +++ b/share/tutorials/tutorial-tracing-pixelart.fr.svg @@ -40,52 +40,52 @@ - + ::VECTORISER DU PIXEL ART - + - Avant que nous ayons accès à un logiciel d'édition de graphismes vectoriels aussi puissant… + Avant que nous ayons accès à des logiciels d'édition vectorielle aussi puissants… - + Avant même que nous ayons des moniteurs en 640×480… - + Jouer à des jeux vidéo réalisés avec des pixels savamment assemblés sur des écrans à basse résolution était pratique courante. - + Ce type d'art imaginé à cette époque est ce que nous appelons « pixel art ». - + Inkscape s'appuie sur la bibliothèque libdepixelize, ce qui lui permet de vectoriser automatiquement ces images pixel art un peu spéciales. Vous pouvez utiliser cette fonctionnalité avec d'autres types d'images, mais gardez à l'esprit que le résultat ne sera sans doute pas aussi bon qu'avec l'autre outil de vectorisation d'Inkscape, potrace. - + Commençons avec un exemple montrant les possibilités du moteur de vectorisation. Nous avons à gauche une image matricielle (extraite du concours Liberated Pixel Cup) et à droite sa version vectorisée. - + @@ -327,14 +327,14 @@ - + libdepixelize s'appuie sur l'algorithme Kopf-Lischinski pour vectoriser les images. Cet algorithme utilise les idées de plusieurs techniques informatiques et plusieurs concepts mathématiques pour produire un résultat satisfaisant avec les images pixel art. Détail d'importance, le canal alpha est complètement ignoré par l'algorithme, et il n'existe pas pour l'instant d'extensions permettant ce traitement. Cependant, la vectorisation des images pixel art contenant un canal alpha donne un résultat similaire à celle des images reconnues par Kopf-Lischinski. - + @@ -698,52 +698,52 @@ - + L'image ci-dessus contient un canal alpha et sa vectorisation est convenable. Si malgré tout vous trouvez ce résultat insatisfaisant et que vous pensez que la cause en est le canal alpha, contactez le gestionnaire de la bibliothèque libdepixelize (en saisissant un rapport de défaut sur la page du projet) qui se fera un plaisir d'améliorer son algorithme (ce qu'il ne peut pas faire en l'absence de retour sur d'éventuelles images donnant un mauvais résultat). - + L'image ci-dessous est une capture d'écran de la boîte de dialogue Vectoriser du pixel art que vous pouvez ouvrir avec le menu Chemin > Vectoriser du pixel art… ou en cliquant avec le bouton droit de la souris sur une image puis en sélectionnant l'entrée Vectoriser du pixel art. - + - + La boîte de dialogue propose deux sections : Heuristique et Résultat. Heuristique cible les usages avancés, mais comme les paramètres par défaut sont bien choisis vous ne devriez pas avoir besoin d'y toucher. Nous y reviendrons plus tard après avoir abordé la section Résultat. - + L'algorithme Kopf-Lischinski fonctionne (en nous plaçant à un haut niveau) comme un compilateur convertissant les données parmi plusieurs types de représentations. À chaque étape, l'algorithme a le choix d'explorer les opérations que cette représentation propose. Certaines de ces représentations intermédiaires ont un aspect visuel correct (comme une cellule remodelée dans un graphe de Voronoï), d'autres pas (comme un graphe de similitude). Pendant le développement de libdepixelize, les utilisateurs n'ont eu de cesse de demander à ce qu'il soit possible d'exporter ces étapes intermédiaires à partir de la bibliothèque, et l'auteur original a exaucé leurs vÅ“ux. - + Le paramétrage par défaut devrait donner le résultat le plus lisse possible, ce qui est probablement l'effet désiré. Vous avez déjà vu ce type de résultat dans le premier exemple de ce tutoriel. Pour l'expérimenter vous-même, ouvrez la boîte de dialogue Vectoriser du pixel art et cliquez sur Valider après avoir sélectionné une image. - + Le résultat de type Voronoï ci-dessous est une image de pixels remodelée, dans laquelle les cellules (précédemment des pixels) ont été remodelées pour connecter les pixels faisant partie d'une même fonction. Aucune courbe n'est créée et l'image est toujours composée de lignes droites. La différence peut être observée en agrandissant l'image. Précédemment, les pixels ne pouvaient pas partager de bord avec un voisin en diagonale, même si il ce voisin faisait partie de la même fonction. Mais maintenant (grâce à un graphe de similitude de couleur et l'heuristique que vous pouvez ajuster pour obtenir un meilleur résultat), il est possible de faire en sorte que deux cellules diagonales partagent un bord (auparavant seul un sommet pouvait être partagé entre deux voisins de ce type). - + @@ -15084,42 +15084,42 @@ - + La conversion B-spline standard apporte un résultat plus doux car l'image obtenue précédemment avec Voronoï est convertie en courbes de Bézier quadratiques. La conversion n'est cependant pas en 1:1 car elle nécessite un travail heuristique plus conséquent pour décider des courbes qui seront fusionnées lorsque l'algorithme atteint une jonction en T dans les couleurs visibles. Sachez qu'à cette étape, vous ne pouvez pas adapter l'heuristique. - + L'étape finale de libdepixelize (actuellement non exportable dans l'interface d'Inkscape du fait de son statut expérimental et incomplet) est l'optimisation des courbes, pour supprimer l'effet d'escalier des courbes B-spline. Cette étape effectue également une détection de bord pour empêcher certaines fonctions d'être lissées ainsi qu'une triangulation pour ajuster la position des nÅ“uds après l'optimisation. Il devrait être possible de désactiver chacune de ces fonctionnalités une fois qu'elles auront quitté leur statut expérimental dans la bibliothèque (bientôt, avec un peu de chance). - + La section Heuristique de l'interface vous permet d'ajuster l'heuristique utilisée par libdepixelize pour décider, lorsqu'elle rencontre un bloc de 2×2 pixels ayant deux diagonales de couleurs similaires, de la connexion à conserver. L'algorithme essaie d'appliquer l'heuristique aux diagonales en conflit puis conserve la connexion du vainqueur. En cas d'égalité, les deux connexions sont supprimées. - + Si vous souhaitez analyser l'effet de chaque heuristique et jouer avec le paramétrage, le meilleur résultat est obtenu avec un diagramme de Voronoï, qui vous permettra de visualiser facilement le rendu engendré par les valeurs choisies. Une fois satisfait de vos paramètres, vous pouvez modifier le type de résultat à votre convenance. - + L'exemple ci-dessous montre une image et sa sortie B-spline avec seulement une des heuristiques activée à chaque essai. Les différences apportées par chaque heuristique sont mises en valeur par un cercle violet. - + @@ -15500,72 +15500,72 @@ - + Au premier essai (image du haut), nous avons seulement activé l'heuristique Courbes. Cette heuristique tente de conserver les longues courbes connectées. Notez qu'un résultat identique est obtenu avec la dernière image, qui utilise pour sa part l'heuristique Pixels clairsemés. Une différence vient du fait que sa force est plus modérée et qu'elle ne donne de fortes valeurs à son vote que si la conservation des connexions est vraiment importante. La définition de modéré est ici basée sur l'intuition humaine, vue la base de pixels analysée. Une autre différence est que cette heuristique ne peut pas prendre de décision lorsque les connexions assemblent de grands blocs plutôt que des longues courbes (imaginez un jeu d'échecs). - + Le deuxième essai (image du milieu) active seulement l'heuristique ÃŽles. Sa seule action consiste à tenter de conserver la connexion entre plusieurs pixels autrement isolés (îles) avec un vote de poids constant. Ce type de situation n'est pas aussi courant que ceux traités par les autres heuristiques, mais cette heuristique amène tout de même une amélioration. - + Pour le troisième essai (image du bas), nous avons activé l'heuristique Pixels clairsemés. Cette heuristique tente de converser les courbes avec une couleur de premier plan connectées. Pour déterminer cette couleur, l'heuristique analyse une fenêtre contenant les pixels voisins de la courbe conflictuelle. Vous pouvez ainsi non seulement ajuster sa force, mais également la taille de la fenêtre de pixels à analyser. Gardez à l'esprit que l'augmentation de cette fenêtre augmente aussi la force du vote, et qu'il sera peut-être nécessaire de rééquilibrer en modifiant le multiplicateur. L'auteur original de libdepixelize estime cette heuristique trop gourmande et conseille une valeur de 0,25 pour le multiplicateur. - + Même si les heuristiques Courbes et Pixels clairsemés donnent des résultats similaires, il peut être judicieux de les conserver toutes les deux actives pour s'assurer que des pixels nécessaires aux courbes de contour ne seront pas supprimés. Par ailleurs, l'heuristique Pixels clairsemés est dans certains cas la seule solution possible. - + Astuce : vous pouvez désactiver l'heuristique en positionnant ses valeurs de multiplicateur et de poids à zéro. Vous pouvez faire en sorte que l'heuristique fonctionne à l'encontre de ses principes en utilisant des valeurs négatives pour ces mêmes paramètres. Mais pourquoi donc dégrader la qualité de l'image avec un tel choix ? Et bien, parce que c'est possible, ou parce que vous pourriez vouloir un résultat « artistique ». Quoi qu'il en soit, vous le pouvez, c'est tout. - + Et voilà ! Nous avons fait le tour de toutes les options disponibles avec la version initiale de libdepixelize. Mais si les recherches de l'auteur de cette bibliothèque et de son mentor réussissent, vous pourriez bien recevoir dans le futur de nouvelles options pour élargir le champ des images pour lesquelles le résultat est satisfaisant. Souhaitons-leur bonne chance ! - + Les images utilisées dans ce tutoriel sont issues du concours Liberated Pixel Cup (pour éviter tout problème de droit). Les liens sont les suivants : - - + + http://opengameart.org/content/memento - - + + http://opengameart.org/content/rpg-enemies-bathroom-tiles - + diff --git a/share/tutorials/tutorial-tracing-pixelart.nl.svg b/share/tutorials/tutorial-tracing-pixelart.nl.svg index 8c8a08fa1..7a563f937 100644 --- a/share/tutorials/tutorial-tracing-pixelart.nl.svg +++ b/share/tutorials/tutorial-tracing-pixelart.nl.svg @@ -1,6 +1,6 @@ - + @@ -36,56 +36,56 @@ - Gebruik Ctrl+pijl omlaag om te scrollen + Gebruik Ctrl+pijl omlaag om te scrollen handleiding - + ::PIXEL ART OVERTREKKEN - - + + Voor we toegang hadden tot goede grafische vectorgebaseerde softwarepakketten... - - + + Zelfs voor we schermen met een resolutie van 640x480 hadden... - - + + waren videospellen nauwkeurig getekende pixels op lageresolutieschermen gemeengoed. - - + + "Pixel Art" is de naam voor dit type kunst van die tijd. - - + + - Inkscape bevat libdepixelize dat deze "speciale" Pixel Art afbeeldingen automatisch kan vectoriseren. Je kan andere afbeeldingen proberen, maar let op: de resultaten zullen niet even goed zijn. Daarvoor is er een beter alternatief, potrace, ook onderdeel van Inkscape. + Inkscape bevat libdepixelize dat deze "speciale" Pixel Art afbeeldingen automatisch kan vectoriseren. Je kan andere afbeeldingen proberen, maar let op: de resultaten zullen niet even goed zijn. Daarvoor is er een beter alternatief, potrace, ook onderdeel van Inkscape. - - + + Laten we met een voorbeeldafbeelding starten om je de mogelijkheden van deze tracer te tonen. Hieronder vind je links een voorbeeldrasterafbeelding (van een vrije Pixel Cup inzending) and de gectoriseerde uitvoer rechts. - + @@ -327,14 +327,14 @@ - - + + Libdepixelize gebruikt het Kopf-Lischinski algorithme om afbeeldingen te vectoriseren. Dit algoritme maakt gebruik van verschillende computerwetenschappelijke technieken en wiskundeconcepten voor een goed resultaat bij pixel art afbeeldingen. Noteer dat het alfakanaal genegeerd wordt bij dit algoritme. libdepixelize bevat nog geen uitbreidingen om dit type afbeeldingen optimaal te verwerken, alhoewel alle pixel art afbeeldingen die het alfakanaal gebruiken, vergelijkbare resultaten geven in vergelijking met de hoofdgroep van afbeeldingen herkend door Kopf-Lischinski. - + @@ -698,52 +698,52 @@ - - + + De bovenstaande afbeelding bevat een alfakanaal en het resultaat is in orde. Echter, indien je een pixel art afbeelding vindt met een slecht resultaat en je vermoedt dat de hoofdreden daarvoor het alfakanaal zou zijn, contacteer dan de ontwikkelaar van libdepixelize (vb. maak een bugrapport op de projectpagina aan). Hij zal met plezier het algoritme uitbreiden. Het algoritme kan immers niet uitgebreid worden indien hij niet beschikt over afbeeldingen met slechte resultaten. - - + + - De onderstaande afbeelding is een schermkopie van het dialoogvenster Pixel Art overtrekken. Je kan het openen via het menu Paden > Pixel Art overtrekken... of door rechtsklikken op een afbeelding en Pixel Art overtrekken te kiezen. + De onderstaande afbeelding is een schermkopie van het dialoogvenster Pixel Art overtrekken. Je kan het openen via het menu Paden > Pixel Art overtrekken... of door rechtsklikken op een afbeelding en Pixel Art overtrekken te kiezen. - + - - + + Deze dialoog bevat twee secties: Heuristiek en Uitvoer. Heuristiek is bedoeld voor gevorderd gebruik. De standaardwaarden zijn goed en je zou er niet naar moeten omkijken. Daarom laten we ze voor wat ze zijn en beginnen we met de uitleg over de uitvoer. - - + + Het Kopf-Lischinski algorithme werkt (vanuit een high level gezichtspunt) zoals een compiler die de data tussen verschillende voorstellinswijzen converteert. Bij elke stap kan het algoritme de bewerkingen verkennen van deze voorstelling. Enkele tussenliggende voorstellingen geven een correcte visuele voorstelling (zoals de hertekende cel grafiek van de Voronoi uitvoer), andere niet (zoals de similariteitsgrafiek). Tijdens de ontwikkeling van libdepixelize vroegen gebruikers naar de mogelijkheid deze tussenliggende stappen te exporteren, hetgeen nu mogelijk is. - - + + - De standaarduitvoer zou het meest effen resultaat moeten geven, hetgeen je wellicht wil. Hierboven zag je reeds de standaarduitvoer bij de eerste voorbeelden in deze tutorial. Indien je dit zelf wil proberen, open dan het dialoogvenster Pixel Art overtrekken en klik op OK nadat je een afbeelding in Inkscape gekozen hebt. + De standaarduitvoer zou het meest effen resultaat moeten geven, hetgeen je wellicht wil. Hierboven zag je reeds de standaarduitvoer bij de eerste voorbeelden in deze tutorial. Indien je dit zelf wil proberen, open dan het dialoogvenster Pixel Art overtrekken en klik op OK nadat je een afbeelding in Inkscape gekozen hebt. - - + + Hieronder zie je de Voronoi uitvoer, hetgeen een "hertekende pixelafbeelding" is waar de cellen (voorheen pixels) vervormd werden om pixels te verbinden die deel uitmaken van hetzelfde kleurvlak. Er worden geen paden gemaakt en de afbeelding bestaat nog altijd uit rechte lijnen. Het verschil wordt duidelijk wanneer je de afbeelding vergroot. Voorheen konden pixels geen rand delen met een diagonale buur, zelfs indien het deel uitmaakt van hetzelfde kleurvlak. Maar nu (dankzij de kleurensimilariteitsgrafiek en heuristiek die je kan fijnafregelen voor een beter resultaat) is het mogelijk om twee diagonale cellen een rand te laten delen (voorheen werden slechts hoekpunten gedeeld bij twee diagonale cellen). - + @@ -15084,42 +15084,42 @@ - - + + De standaard B-splines uitvoer geeft je effen resultaten, omdat de voorgaande Voronoi-uitvoer omgezet wordt in kwadratische Bézierpaden. Echter, de omzetting is niet 1:1, omdat andere heuristieken beslissen welke paden samengevoegd worden wanneer het algoritme een T-junctie vindt bij de zichtbare kleuren. Noteer over de heuristieken van dit statium dat je ze niet kan afregelen. - - + + De uiteindelijke uitvoer van libdepixelize (niet beschikbaar in de huidige Inscape GUI vanwege het experimentele en onvolledige stadium) zijn de "geoptimaliseerde curves". Dit stadium bevat een randdetectietechniek om te verhinderen dat sommige kenmerken uitgevlakt worden en een triangulatiemethode om de positie van knooppunten te corrigeren na de optimalisatie. Je zou deze features één per één moeten kunnen uitschakelen wanneer deze features uit het "experimenteel stadium" van libdepixelize komen (hopelijk snel). - - + + De sectie heuristiek in de gui laat je toe de heuristieken van libdepixelize in te stellen om te laten beslissen wat er gebeurt bij het samenkomen van een 2x2 pixelblok waarbij de twee diagonalen vergelijkbare kleuren hebben. Wat libdepixelize vraagt is "Welke connectie moet ik behouden?". Het tracht alle heuristieken toe te passen bij de conflicterende diagonalen en behoudt de beste. Bij gelijke uitkomst worden beide verbindingen weggehaald. - - + + Indien je het effect van elke heuristiek wil analyseren en spelen met de getallen, is de Voronoi-uitvoer de beste. Je kan de effecten eenvoudiger zien in de Voronoi-uitvoer. Indien je tevreden bent met de bekomen instellingen, pas je slechts het uitvoertype aan naar diegene die je wil. - - + + De afbeelding hieronder toont de B-splines uitvoer van een afbeelding met telkens één van de heuristieken actief. Let op de purperen cirkels die de belangrijkste effecten van elke heuristiek aangeven. - + @@ -15500,72 +15500,72 @@ - - + + Voor de eerste poging (afbeelding bovenaan) passen we alleen de heuristiek paden toe. Deze heuristiek tracht lange lijnen verbonden te houden. Je kan zien dat het resultaat vergelijkbaar is met de laatste afbeelding, waar de verspreidde pixels heuristiek is toegepast. Het verschil is dat de "kracht" beter verdeeld is. Het geeft alleen een hoog gewicht, wanneer het belangrijk is de verbinding te behouden. Het concept "beter verdeeld" is hier gebaseerd op "menselijke intuïtie" voor het gegeven pixelvlak. Een bijkomend verschil is dat deze heuristiek niet kan beslissing wat er gedaan wordt wanneer verbindingen grote blokken groepen in plaats van lange curves (zoals bij een schaakbord). - - + + Voor de tweede poging (afbeelding midden), passen we alleen de heuristiek eilanden toe. Het enige streefdoel van deze heuristiek is een verbinding behouden die anders in verschillende geïsoleerde pixels zou resulteren (eilanden) met een constant gewicht. Deze situatie komt niet zoveel voor als de situaties van de overige heuristieken, al is deze heuristiek cool en kan deze toch betere resultaten geven. - - + + Voor de derde poging (afbeelding onderaan), passen we alleen de heuristiek verspreidde pixels toe. Deze heuristiek tracht paden te behouden die verbonden zijn door de voorgrondkleur. Om de voorgrondkleur te bepalen, analyseert de heuristiek een venster met pixels rond de conflicterende paden. Voor deze heuristiek kan je niet alleen zijn "gewicht", maar ook het venster met geanalyseerde pixels, tunen. Noteer echter dat voor het vergroten van het venster, het maximum "gewicht" ook zal toenemen en je de (vermenigvuldigings)factor voor het gewicht kan aanpassen. De oorspronkele libdepixelize auteur vind deze heuristiek te inhalig en gebruikt "0.25" voor de factor. - - + + Zelfs waneer de resultaten van de heuristieken curves en verspreidde pixels vergelijkbare resultaten geven, kan je beide inschakelen. Dit omdat de heuristiek curves voor een extra veiligheid kan zorgen opdat de belangrijke curves of contourpixels niet gehinderd worden en omdat andere gevallen enkel behandeld kunnen worden met de heuristiek verspreidde pixels. - - + + Tip: je kan elke heuristiek uitschakelen door zijn gewicht/factor op nul in te stellen. Je kan elke heuristiek tegengesteld laten werken door negatieve waarden voor het gewicht/factor. Waarom zou je het gedrag dat juist bedoeld was om een betere kwaliteit te bekomen, willen veranderen in tegenovergesteld gedrag? Omdat het kan ... voor het "artistieke" resultaat ... hoe het ook zij, omdat het mogelijk is. - - + + Dat is het! Voor deze initiële release van libdepixelize zijn dit alle beschikbare opties. Wanneer het onderzoek van de oorspronkelijke libdepixelize programmeur en zijn creatieve mentor slaagt, zullen extra opties beschikbaar komen zodat libdepixelize voor meer afbeeldingen een goed resultaat geeft. Duim voor ze! - - + + Alle hier gebruikte voorbeelden zijn afkomstig van de Liberated Pixel Cup om copyrightproblemen te vermijden. De links zijn: - - - + + + http://opengameart.org/content/memento - - - + + + http://opengameart.org/content/rpg-enemies-bathroom-tiles - + @@ -15595,8 +15595,8 @@ - - Gebruik Ctrl+pijl omhoog om te scrollen + + Gebruik Ctrl+pijl omhoog om te scrollen diff --git a/share/tutorials/tutorial-tracing-pixelart.svg b/share/tutorials/tutorial-tracing-pixelart.svg index 443c8b7e4..fb1c80248 100644 --- a/share/tutorials/tutorial-tracing-pixelart.svg +++ b/share/tutorials/tutorial-tracing-pixelart.svg @@ -40,10 +40,10 @@ Use Ctrl+down arrow to scroll - + ::TRACING PIXEL ART - + @@ -51,7 +51,7 @@ Before we had access to great vector graphics editing software... - + @@ -59,7 +59,7 @@ Even before we had 640x480 computer displays... - + @@ -68,7 +68,7 @@ resolutions displays. - + @@ -76,7 +76,7 @@ resolutions displays. We name "Pixel Art" the kind of art born in this age. - + @@ -87,7 +87,7 @@ types of input images too, but be warned: The result won't be equally good it is a better idea to use the other Inkscape tracer, potrace. - + @@ -97,7 +97,7 @@ engine. Below there is an example of a raster image (taken from a Liberated Pixel Cup entry) on the left and its vectorized output on the right. - + @@ -339,7 +339,7 @@ Pixel Cup entry) on the left and its vectorized output on the right. - + @@ -353,7 +353,7 @@ all pixel art images with alpha channel support are producing results similar to the main class of images recognized by Kopf-Lischinski. - + @@ -717,7 +717,7 @@ to the main class of images recognized by Kopf-Lischinski. - + @@ -729,7 +729,7 @@ project page) and he will be happy to extend the algorithm. He can't extend algorithm if he don't know what images are giving bad results. - + @@ -740,10 +740,10 @@ menu or right-clicking on an image object and then + - + @@ -753,7 +753,7 @@ advanced uses, but there already good defaults and you shouldn't worry abou that, so let's leave it for later and starting with the explanation for output. - + @@ -768,7 +768,7 @@ kept asking for adding the possibility of export these intermediate stages to the libdepixelize and the original libdepixelize author granted their wishes. - + @@ -780,7 +780,7 @@ tutorial. If you want to try it yourself, just open the + @@ -796,7 +796,7 @@ possible to make two diagonal cells share an edge (previously only single vertices were shared by two diagonal cells). - + @@ -15137,7 +15137,7 @@ vertices were shared by two diagonal cells). - + @@ -15149,7 +15149,7 @@ will be merged into one when the algorithm reaches a T-junction among the visibl colors. A hint about the heuristics of this stage: You can't tune them. - + @@ -15164,7 +15164,7 @@ when this output leaves the "experimental stage" in libdepixelize (hop soon). - + @@ -15177,7 +15177,7 @@ diagonals and keeps the connection of the winner. If a tie happens, both connections are erased. - + @@ -15188,7 +15188,7 @@ the heuristics in the Voronoi output and when you are satisfied with the settings you got, you can just change the output type to the one you want. - + @@ -15198,7 +15198,7 @@ heuristics turned on for each try. Pay attention to the purple circles that highlight the differences that each heuristic performs. - + @@ -15579,7 +15579,7 @@ highlight the differences that each heuristic performs. - + @@ -15595,7 +15595,7 @@ to do when the connections group large blocks instead of long curves (think about a chess board). - + @@ -15607,7 +15607,7 @@ kind of situation is not as common as the kind of situation handled by the other heuristics, but this heuristic is cool and help to give still better results. - + @@ -15623,7 +15623,7 @@ multiplier for its vote. The original libdepixelize author think this heuristic is too greedy and likes to use the "0.25" value for its multiplier. - + @@ -15635,7 +15635,7 @@ won't be hampered and there are cases that can be only answered by the spar pixels heuristic. - + @@ -15648,7 +15648,7 @@ Because you can... because you might want a "artistic" result... whate just can. - + @@ -15660,7 +15660,7 @@ yet the range of images for which libdepixelize gives a good result. Wish them luck. - + @@ -15669,23 +15669,23 @@ luck. problems. The links are: - - + + http://opengameart.org/content/memento - - + + http://opengameart.org/content/rpg-enemies-bathroom-tiles - + diff --git a/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg b/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg index 45cabac07..89dd13b9b 100644 --- a/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg +++ b/share/tutorials/tutorial-tracing-pixelart.zh_TW.svg @@ -50,42 +50,42 @@ 在功能強大的å‘é‡ç¹ªåœ–軟體出ç¾ä»¥å‰... - + 甚至在 640x480 電腦出ç¾ä»¥å‰... - + 用低解æžåº¦é¡¯ç¤ºå™¨çŽ©éŠæˆ²å…¶ç•«é¢é€šå¸¸çœ‹èµ·ä¾†éƒ½åƒæ˜¯ç”±è¨±å¤šç´°å°çš„åƒç´ çµ„æˆã€‚ - + 我們ç¾åœ¨å°‡é€™é¡žçš„圖形稱為「åƒç´ åœ–案ã€ã€‚ - + Inkscape 是藉由 libdepixelize 將這些「特殊ã€åƒç´ åœ–ç‰‡è½‰æ›æˆå‘é‡åœ–。你也å¯ä»¥è©¦è©¦å…¶ä»–類型的圖片,但是記ä½ï¼šè‹¥ç”¢ç”Ÿçš„å‘é‡åœ–效果ä¸ä½³ï¼Œè«‹æ”¹ç”¨å¦ä¸€ç¨® Inkscape 點陣圖æç¹ªå™¨ - potrace。 - + 讓我們用簡單的圖片來示範這款æç¹ªå¼•擎的能力。下é¢å·¦å´æœ‰ä¸€å¼µç¯„例點陣圖 (從自由開放的 Pixel Cup é …ç›®å–得的圖片),而å³å´æ˜¯è½‰æ›æˆå‘é‡åœ–å½¢çš„æˆæžœã€‚ - + @@ -327,14 +327,14 @@ - + libdepixelize 使用 Kopf-Lischinski 演算法來將圖片轉變æˆå‘é‡åœ–形。這種演算法混åˆä½¿ç”¨å¤šç¨®é›»è…¦ç§‘學技術想法和數學概念,使該算法用在åƒç´ åœ–案上能夠產生很棒的效果。值得注æ„çš„æ˜¯æ­¤æ¼”ç®—æ³•æœƒå®Œå…¨åœ°å¿½ç•¥é€æ˜Žè‰²ç‰ˆã€‚libdepixelize ç›®å‰æ²’有擴充功能æä¾›å°ˆé–€è™•ç†é€™é¡žçš„åœ–ç‰‡ï¼Œä½†æ˜¯æ‰€æœ‰å«æœ‰é€æ˜Žè‰²ç‰ˆçš„åƒç´ åœ–案ä»å¯ä»¥åƒ Kopf-Lischinski èƒ½è¾¨è­˜çš„åœ–ç‰‡ä¸€æ¨£å¾—åˆ°ç›¸è¿‘çš„çµæžœã€‚ - + @@ -698,52 +698,52 @@ - + 上é¢çš„åœ–ç‰‡æœ‰é€æ˜Žè‰²ç‰ˆï¼Œä½†çµæžœæ˜¯æ­£å¸¸çš„。ä¸éŽè‹¥ä½ çš„åƒç´ åœ–æ¡ˆçµæžœä¸æ­£å¸¸ä¸”ä½ èªç‚ºåŽŸå› å‡ºåœ¨é€æ˜Žè‰²ç‰ˆï¼Œè«‹è¯çµ¡ libdepixelize 維護人員 (例如,在專案網é ä¸Šå¡«å¯«ç¨‹å¼éŒ¯èª¤å›žå ±) è€Œä»–æœƒå¾ˆæ¨‚æ„æ”¹é€²æ¼”算法。如果維護人員ä¸çŸ¥é“åœ–ç‰‡çµæžœç•°å¸¸çš„原因便無法改進演算法。 - + 下é¢é€™å¼µåœ–片是 æç¹ªåƒç´ åœ– å°è©±çª—的螢幕擷å–圖。你å¯ä»¥å¾ž 路徑 > æç¹ªåƒç´ åœ–... é¸å–®æˆ–在圖片物件上點擊滑鼠å³éµå¾Œé¸æ“‡ æç¹ªåƒç´ åœ– 來開啟此å°è©±çª—。 - + - + å°è©±çª—分æˆå…©å€‹å€å¡Šï¼šè©¦æŽ¢æ³•(Heuristics) 和輸出。試探法是專為進階使用者設計的,但是é è¨­å€¼ä¹Ÿå¤ ä¸€èˆ¬ç”¨é€”,ä¸å¿…æ“”å¿ƒåƒæ•¸çš„設定;因此試探法的部分留到後é¢è¬›è§£ï¼Œå…ˆå¾žè¼¸å‡ºé–‹å§‹è«‡èµ·ã€‚ - + Kopf-Lischinski 演算法就åƒç·¨è­¯å™¨çš„作用一樣 (從高階程å¼èªžè¨€çš„觀點來看)ï¼Œå°‡è³‡æ–™è½‰æ›æˆè¨±å¤šç¨®ä¸åŒé¡žåž‹çš„表ç¾å½¢å¼ã€‚在æ¯å€‹éšŽæ®µä¸­æ¼”ç®—æ³•çµ¦äºˆæˆ‘å€‘æŽ¢ç´¢æ­¤è¡¨ç¾æ‰‹æ³•潛在應用的機會。æŸäº›é‹ç®—éŽç¨‹ç”¢ç”Ÿçš„åœ–æ¡ˆæœ‰æ­£ç¢ºçš„è¦–è¦ºè¡¨ç¾ (åƒé€ å½¢èŒƒæ°æ™¶æ ¼åœ–案輸出),而有些則沒有 (åƒç›¸ä¼¼åº¦åœ–å½¢)。在 libdepixelize 的開發éŽç¨‹ä¸­è¨±å¤šä½¿ç”¨è€…䏿–·è©¢å•能å¦åŠ å…¥åŒ¯å‡ºé€™äº›è™•ç†éŽç¨‹åœ–形功能的å¯èƒ½æ€§ï¼Œæœ€å¾ŒåŽŸå§‹çš„ libdepixelize ä½œè€…åŒæ„加入這些使用者所期望的功能。 - + é è¨­è¼¸å‡ºæ‡‰è©²æœƒç”¢ç”Ÿæœ€å¹³æ»‘的圖案,而該圖案å¯èƒ½æ˜¯ä½ æƒ³è¦çš„çµæžœã€‚ä½ å¯èƒ½å·²ç¶“在這篇教學的第一幅範例圖見éŽé è¨­è¼¸å‡ºçš„æ•ˆæžœã€‚如果你想自己試試,開啟 æç¹ªåƒç´ åœ– å°è©±çª—並在 Inkscape 中é¸å–æŸå¼µåœ–片後按 確定 按鈕。 - + 從下é¢ç¯„例圖你å¯ä»¥çœ‹åˆ°èŒƒæ°æ™¶æ ¼ (Voronoi) è¼¸å‡ºçµæžœä¸”這屬於「é‡å¡‘åž‹åƒç´ åœ–ã€ï¼Œæ™¶æ ¼å–®å…ƒ (以å‰çš„åƒç´ ) 會轉變æˆç›¸é€£åƒç´ è®“圖案有相åŒå¤–è§€ã€‚ä¸æœƒå»ºç«‹ä»»ä½•æ›²ç·šè€Œå½±åƒæœƒæŒçºŒä»¥ç›´ç·šæ§‹æˆã€‚ç•¶ä½ æ”¾å¤§å½±åƒæ™‚則會有差異。以å‰åƒç´ ä¸æœƒèˆ‡å°è§’相鄰的åƒç´ å…±ç”¨é‚Šç·£ï¼Œå³ä½¿æœƒåœ–å½¢æœƒè®Šæˆæœ‰ç›¸åŒçš„外觀。但ç¾åœ¨ (感è¬è‰²å½©ç›¸ä¼¼åº¦åœ–形和試探法讓你å¯ä»¥å¾—到更好的é‹ç®—çµæžœ) å»èƒ½å¤ è®“å…©çš„å°è§’單元共用邊緣 (以å‰ä¸€å€‹é ‚點åªèƒ½ç”±å…©å€‹å°è§’單元所共用)。 - + @@ -15084,7 +15084,7 @@ - + @@ -15098,28 +15098,28 @@ ç”± libdepixelize (Inkscape ç›®å‰ä¸æä¾›åœ–形介é¢ï¼Œå› ç‚ºæœ¬èº«è™•於實驗且尚未開發完整階段) åŒ¯å‡ºçš„æœ€å¾Œä¸€å¼µè¼¸å‡ºçµæžœæ˜¯ç”¨ã€Œæœ€ä½³åŒ–曲線ã€ç§»é™¤è²æ°é›²å½¢ç·šçš„階梯ç¾è±¡ã€‚æ­¤é‹ç®—éšŽæ®µåŒæ™‚åŸ·è¡Œäº†é‚Šç•Œåµæ¸¬æŠ€è¡“來é¿å…æŸäº›å¤–觀變得平滑,以åŠä¸‰è§’æ¸¬é‡æŠ€è¡“ä¾†ä¿®æ­£æœ€ä½³åŒ–å¾Œçš„ç¯€é»žä½ç½®ã€‚ç•¶ libdepixelize çš„é–‹ç™¼è„«é›¢ã€Œå¯¦é©—éšŽæ®µã€æ™‚ (希望是ä¸ä¹…之後),你應該就å¯ä»¥å€‹åˆ¥åœ°åœç”¨é€™äº›åŠŸèƒ½çš„ä»»ä½•ä¸€é …ã€‚ - + 圖形介é¢ä¸­çš„試探法部分讓你å¯ä»¥èª¿æ•´ libdepixelize çš„è©¦æŽ¢æ³•åƒæ•¸ä»¥æ±ºå®šç¨‹å¼é‡åˆ° 2x2 åƒç´ æ™‚哪兩個å°è§’åƒç´ æœ‰ç›¸åŒçš„é¡è‰²ã€‚libdepixelize çš„å•é¡Œå°±æ˜¯ã€Œåœ–æ¡ˆä¸­å“ªäº›é—œè¯æ€§æ˜¯æˆ‘該ä¿ç•™çš„?ã€ã€‚ç¨‹å¼æœƒè©¦è‘—å°ä¸ä¸€è‡´çš„å°è§’åƒç´ å¥—用所有試探法並ä¿ç•™æ¯”è¼ƒå¥½çš„é—œè¯æ€§ã€‚如果出ç¾å…©å€‹ä¸€æ¨£å¥½çš„æƒ…å½¢æ™‚ï¼Œå‰‡é—œè¯æ€§éƒ½æœƒè¢«åˆªé™¤ã€‚ - + 若你想è¦åˆ†æžæ¯æ¬¡è©¦æŽ¢æ³•的效果並用這些數字åšå…¶ä»–æœ‰è¶£çš„è©¦é©—ï¼Œé‚£éº¼èŒƒæ°æ™¶æ ¼å°±æ˜¯æœ€ä½³çš„輸出方å¼ã€‚ä½ å¯ä»¥ç°¡å–®åœ°åœ¨èŒƒæ°æ™¶æ ¼è¼¸å‡ºä¸­çœ‹åˆ°æ›´å¤šè©¦æŽ¢æ³•的效果,而當你滿æ„自己的設定值時,你便能將輸出類型改æˆä½ æƒ³è¦çš„那一種。 - + 下é¢çš„åœ–ç‰‡é¡¯ç¤ºæ¯æ¬¡åªæœ‰é–‹å•Ÿä¸€ç¨®è©¦æŽ¢æ³•çš„è²æ°é›²å½¢ç·šè¼¸å‡ºã€‚請注æ„用紫色圓圈特別標示的ä½ç½®ï¼Œé‚£æ˜¯æ¯ç¨®è©¦æŽ¢æ³•åŸ·è¡Œæ™‚çµæžœä¸åŒçš„地方。 - + @@ -15500,72 +15500,72 @@ - + 第一次試驗 (最上é¢çš„圖片),我們åªå•Ÿç”¨æ›²ç·šè©¦æŽ¢æ³•。這種試探法會試著ä¿ç•™ç›¸é€£ä¸€èµ·çš„長曲線。你會注æ„åˆ°çµæžœå¾ˆé¡žä¼¼æœ€å¾Œä¸€å¼µåœ–片,而最後一張是套用稀ç–åƒç´ è©¦æŽ¢æ³•çš„çµæžœã€‚ä¸åŒçš„åœ°æ–¹æ˜¯å®ƒçš„ã€Œå¼·åº¦ã€æ›´å‡è¡¡ä¸”é‡åˆ°çœŸçš„æœƒå½±éŸ¿åˆ°ä¿ç•™é€£æŽ¥æ€§æ™‚åªæœƒæŠŠé«˜çš„æ•¸å€¼ä½œç‚ºæŠ•票值。這裡的「å‡è¡¡ã€ä¸€è©žä»£è¡¨çš„定義/概念是根據「人類直覺ã€çµ¦å®šçš„åƒç´ è³‡æ–™åº«åˆ†æžè€Œä¾†ã€‚其他差異則是é‡åˆ°ç›¸é€£éƒ¨åˆ†ç¾¤çµ„æˆå¤§åž‹åœ–å¡Šè€Œä¸æ˜¯é•·æ›²ç·š (想åƒä¸€ä¸‹æ£‹ç›¤) 時試探法無法決定該怎麼åšã€‚ - + 第二次試驗 (中間那幅圖片),我們åªå•Ÿç”¨å­¤ç«‹è©¦æŽ¢æ³•ã€‚è©¦æŽ¢æ³•åªæœ‰è©¦è‘—ä¿ç•™ç›¸é€£éƒ¨åˆ†ï¼Œæ›è¨€ä¹‹åœ–ç‰‡çµæžœæ˜¯å«æœ‰å›ºå®šæ¬Šé‡æŠ•票的æŸäº›éš”離åƒç´  (孤立)。這種情形與其他試探法處ç†ä¸ç›¸åŒï¼Œä½†è©²è©¦æŽ¢æ³•ä»ç„¶å¾ˆæ£’ä¸”æœ‰åŠ©æ–¼å¾—åˆ°æ›´å¥½çš„çµæžœã€‚ - + 第三次試驗 (底下的那張圖片),我們åªå•Ÿç”¨ç¨€ç–åƒç´ è©¦æŽ¢æ³•。這種試探法會試著ä¿ç•™èˆ‡å‰æ™¯é¡è‰²ç›¸é€£çš„æ›²ç·šã€‚試探法藉由分æžä¸ä¸€è‡´æ›²ç·šå‘¨åœçš„åƒç´ å€åŸŸä¾†æ‰¾åˆ°å‰æ™¯é¡è‰²ã€‚使用這種試探法,你ä¸åªèƒ½å¤ èª¿æ•´ã€Œå¼·åº¦ã€ï¼Œä¹Ÿå¯ä»¥èª¿æ•´è¦åˆ†æžçš„åƒç´ å€åŸŸã€‚但記ä½ä¸€ä»¶äº‹ï¼Œç•¶ä½ å¢žåŠ åƒç´ å€åŸŸåˆ†æžçš„æœ€å¤§ã€Œå¼·åº¦ã€æ™‚其投票也會增加,你å¯èƒ½æœƒéœ€è¦ä¿®æ”¹æŠ•ç¥¨çš„å€æ•¸ã€‚原始的 libdepixelize 作者èªç‚ºæ­¤ç¨®è©¦æŽ¢æ³•å¤ªè²ªå¿ƒå› è€Œæ¯”è¼ƒå–œæ­¡å°‡å€æ•¸æ”¹ç‚ºã€Œ0.25ã€ã€‚ - + å³ä½¿æ›²ç·šè©¦æŽ¢æ³•和稀ç–åƒç´ è©¦æŽ¢æ³•æœƒå¾—åˆ°é¡žä¼¼çš„çµæžœï¼Œä½ ä»æœƒæƒ³éƒ½å•Ÿç”¨é€™å…©ç¨®è©¦æŽ¢æ³•,因為曲線試探法å¯èƒ½æ¥µç‚ºä¿å®ˆåœ°ä¿ç•™è¼ªå»“åƒç´ é‡è¦æ›²ç·šï¼Œè€ŒæŸäº›æƒ…å½¢åªæœ‰ç¨€ç–åƒç´ è©¦æŽ¢æ³•能符åˆéœ€æ±‚。 - + 尿Ѐ巧æç¤ºï¼šä½ å¯ä»¥å°‡å€æ•¸/權é‡è¨­å®šå€¼è¨­å®šç‚ºé›¶ä¾†åœç”¨æ‰€æœ‰çš„è©¦æŽ¢æ³•ã€‚ä½ ä¹Ÿèƒ½å°‡ä»»ä½•ä¸€ç¨®è©¦æŽ¢æ³•çš„å€æ•¸/æ¬Šé‡æ•¸å€¼è¨­ç‚ºè² å€¼è®“çµæžœç”¢ç”Ÿèˆ‡åŽŸç†ç›¸å的效果。至於你為什麼想用åå‘行為去å–ä»£ç”¨æ¨™æº–è¡Œç‚ºæ‰€å¾—åˆ°çš„è‰¯å¥½ç•«è³ªçµæžœå‘¢ï¼Ÿå› ç‚ºä½ èƒ½é€™éº¼åš...因為你å¯èƒ½æƒ³è¦ä¸€ç¨®æœ‰ã€Œäººé€ æ„Ÿã€çš„æ•ˆæžœ...ä¸ç®¡ä»€éº¼åŽŸå› ...你就是å¯ä»¥é€™æ¨£åšã€‚ - + 就這樣ï¼ä¸Šé¢æ‰€è¿°å°±æ˜¯ libdepixelize åˆæ¬¡ç™¼ä½ˆç‰ˆæœ¬æä¾›çš„全部é¸é …。但å‡å¦‚ libdepixelize 原始作者和創作導師的研究能夠æˆåŠŸï¼Œé‚£éº¼ä½ å¯èƒ½èƒ½ä½¿ç”¨æ›´å¤šé¡å¤–çš„é¸é …,甚至能讓用 libdepixelize ç”¢ç”Ÿè‰¯å¥½çµæžœçš„圖片範åœè®Šå¾—更廣。希望他們開發éŽç¨‹é †åˆ©ã€‚ - + 這篇文章使用的所有圖片都來自 Liberated Pixel Cup 以é¿å…著作權å•題。連çµï¼š - - + + http://opengameart.org/content/memento - - + + http://opengameart.org/content/rpg-enemies-bathroom-tiles - + diff --git a/share/tutorials/tutorial-tracing.be.svg b/share/tutorials/tutorial-tracing.be.svg index 9675f90e9..179a313b2 100644 --- a/share/tutorials/tutorial-tracing.be.svg +++ b/share/tutorials/tutorial-tracing.be.svg @@ -36,59 +36,59 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўніз каб пракручваць - - ::ÐБВОДЖÐÐЬÐЕ + + ::TRACING BITMAPS - - + + Ðдна з аÑабліваÑьцÑÑž Inkscape — гÑта інÑтрумÑнт Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ Ñ€Ð°Ñтравых відарыÑаў у ÑлемÑнт рыÑунку SVG <path> (шлÑÑ…). ГÑÑ‚Ñ‹Ñ ÑьціÑÐ»Ñ‹Ñ Ð·Ð°Ñ†ÐµÐ¼ÐºÑ– муÑÑць дапамагчы вам пазнаёміцца Ñк ён працуе. - - + + - Ð¡Ñ‘Ð½ÑŒÐ½Ñ Inkscape карыÑтаецца рухавіком Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ Potrace (potrace.sourceforge.net), напіÑаным Peter Selinger. У будучыні мы, напÑўна, дазволім Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ñ€Ð°Ò‘Ñ€Ð°Ð¼Ñ‹ абводжаньнÑ, ÑÑ‘Ð½ÑŒÐ½Ñ Ð¶, аднак, гÑты выдатны інÑтрумÑнт цалкам задавальнÑе Ð½Ð°ÑˆÑ‹Ñ Ð¿Ð°Ñ‚Ñ€Ñбы. + Ð¡Ñ‘Ð½ÑŒÐ½Ñ Inkscape карыÑтаецца рухавіком Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ Potrace (potrace.sourceforge.net), напіÑаным Peter Selinger. У будучыні мы, напÑўна, дазволім Ñ–Ð½ÑˆÑ‹Ñ Ð¿Ñ€Ð°Ò‘Ñ€Ð°Ð¼Ñ‹ абводжаньнÑ, ÑÑ‘Ð½ÑŒÐ½Ñ Ð¶, аднак, гÑты выдатны інÑтрумÑнт цалкам задавальнÑе Ð½Ð°ÑˆÑ‹Ñ Ð¿Ð°Ñ‚Ñ€Ñбы. - - + + Майце на ўвазе, што прызначÑньне абводжаньніка Ð½Ñ Ñž тым, каб Ñтвараць дакладную копію Ñпачатнага відарыÑа, Ñ– Ð½Ñ Ñž тым, каб Ñтвараць канчатковы прадукт. ÐÑ–Ñкі аўтаабводжаньнік Ð½Ñ Ð¼Ð¾Ð¶Ð° гÑтага зрабіць. Што ён можа — Ñтварыць набор крывых, ÑÐºÑ–Ñ Ð¼Ð¾Ð¶Ð½Ð° выкарыÑтоўваць Ñк Ñ€ÑÑÑƒÑ€Ñ Ð´Ð»Ñ Ñ€Ñ‹Ñунку. - - + + Potrace апрацоўвае чорна-белы раÑтар Ñ– Ñтварае набор крывых. Ð”Ð»Ñ Potrace мы ÑÑ‘Ð½ÑŒÐ½Ñ Ð¼Ð°ÐµÐ¼ тры віды ўваходных фільтраў ператварÑÐ½ÑŒÐ½Ñ Ð· Ñырога відарыÑа Ñž нешта, што Potrace можа выкарыÑтоўваць. - - + + Звычайна, чым цÑÐ¼Ð½ÐµÐ¹ÑˆÑ‹Ñ Ð¿Ñ–ÐºÑÑлі Ñž прамежкавым раÑтры, тым больш абводжаньнÑÑž Potrace будзе рабіць. Чым больш абводжаньнÑÑž, тым больш чаÑу працÑÑара патрÑбна, а ÑлемÑнт <path> Ñтановіцца ÑžÑÑ‘ большым. Пажадана, каб карыÑтальнік паÑкÑпÑрымÑнтаваў Ñпачатку з больш Ñьветлым прамежкавым відарыÑам, паÑтупова зацÑмнÑючы Ñго, каб атрымаць Ð¿Ð°Ð¶Ð°Ð´Ð°Ð½Ñ‹Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ‹Ñ– й ÑкладанаÑьць выніковага шлÑха. - - + + - Каб выкарыÑтоўваць абводжаньнік загрузіце ці імпартуйце відарыÑ, вылучыце Ñго й выберыце Ñž мÑню ШлÑÑ… > ÐбвеÑьці раÑтар ці націÑьніце Shift+Alt+B. + Каб выкарыÑтоўваць абводжаньнік загрузіце ці імпартуйце відарыÑ, вылучыце Ñго й выберыце Ñž мÑню ШлÑÑ… > ÐбвеÑьці раÑтар ці націÑьніце Shift+Alt+B. - Ð“Ð°Ð»Ð¾ÑžÐ½Ñ‹Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ñ‹ дыÑлёґу Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ - + Ð“Ð°Ð»Ð¾ÑžÐ½Ñ‹Ñ Ð²Ñ‹Ð±Ð¾Ñ€Ñ‹ дыÑлёґу Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ + - + @@ -96,7 +96,7 @@ - + @@ -104,21 +104,21 @@ - + Тут проÑта выкарыÑтоўваецца Ñума чырвонага, зÑлёнага й ÑінÑга (ці адценьнÑÑž шÑрага) Ñкладнікаў пікÑÑÐ»Ñ ÐºÐ°Ð± вызначыць, муÑіць ён быць чорным ці белым. Парог можна задаваць ад 0,0 (чорны) да 1,0 (белы). Чым большы парог, тым Ð¼ÐµÐ½ÑˆÐ°Ñ ÐºÐ¾Ð»ÑŒÐºÐ°Ñьць пікÑÑлÑÑž будзе Ð·Ð°Ð»Ñ–Ñ‡Ð°Ð½Ð°Ñ Ñž «белыÑ», Ñ– прамежкавы Ð²Ñ‹Ð´Ð°Ñ€Ñ‹Ñ Ñтане цÑмнейшым. - Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ - ÐдÑÑчÑньне ÑркаÑьціÐутро, бÑз контура - ÐдÑÑчÑньне ÑркаÑьціКонтур, без нутра + Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ + ÐдÑÑчÑньне ÑркаÑьціÐутро, бÑз контура + ÐдÑÑчÑньне ÑркаÑьціКонтур, без нутра - + @@ -126,70 +126,70 @@ - + Тут выкарыÑтоўваецца альґарытм вызначÑÐ½ÑŒÐ½Ñ ÐºÑ€Ð°ÑŽ, прыдуманы J. Canny Ñк ÑпоÑаб хуткага пошуку ізакліналÑÑž падобнага кантраÑту. Тут Ñтвараецца прамежкавы відарыÑ, Ñкі Ð½Ñ Ñ‚Ð°Ðº падобны на Ñпачатны відарыÑ, Ñк вынік ÐдÑÑчÑÐ½ÑŒÐ½Ñ ÑркаÑьці, але, найхутчÑй, выдаÑьць інфармацыю аб крывых, ÑÐºÐ°Ñ Ñž іншым выпадку будзе праіґнараванаÑ. ÐаÑтройка парогу (0,0 — 1,0) Ñ€Ñґулюе ці будзе пікÑÑль, Ñумежны да краю кантраÑту, уключаны Ñž вынік. ГÑÑ‚Ð°Ñ Ð½Ð°Ñтройка можа Ñ€ÑґулÑваць цёмнаÑьць ці таўшчыню краю Ñž выніку. - Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ - Край вызначаныÐутро, бÑз контура - Край вызначаныКонтур, без нутра + Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ + Край вызначаныÐутро, бÑз контура + Край вызначаныКонтур, без нутра - + Ðгрубленьне колераў - + Вынік фільтру Ñтварае прамежкавы відарыÑ, Ñкі вельмі адрозьніваецца ад першых двух, але, ÑžÑÑ‘ адно, вельмі карыÑны. ЗамеÑÑ‚ паказу ізакліналÑÑž ÑкраÑьці ці кантраÑту, тут шукаюцца краі, дзе мÑнÑюцца колеры, нават пры аднолькавых ÑркаÑьці й кантраÑьце. ÐаÑтройка, КолькаÑьць колераў, вызначае колькі выніковых колераў будзе, калі прамежкавы Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ â€” калÑровы. Потым вызначаецца чорны/белы на падÑтаве таго, цотны ці нÑцотны індÑÐºÑ Ð¼Ð°Ðµ колер. - Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ - Ðгрублены (12 колераў)Ðутро, бÑз контура - Ðгрублены (12 колераў)Контур, без нутра + Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ + Ðгрублены (12 колераў)Ðутро, бÑз контура + Ðгрублены (12 колераў)Контур, без нутра - + КарыÑтальнік муÑіць паÑпрабаваць уÑе тры фільтры, Ñ– паназіраць за рознымі вынікамі Ð´Ð»Ñ Ñ€Ð¾Ð·Ð½Ñ‹Ñ… відаў уваходных відарыÑаў. Заўжды будзе відарыÑ, зь Ñкім нейкі фільтар працуе лепш за іншыÑ. - + - ПаÑÑŒÐ»Ñ Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ, пажадана ÑкарыÑтаць ШлÑÑ… > СпроÑьціць (Ctrl+L) на выніковым шлÑху, каб зьменшыць колькаÑьць вузлоў. ГÑта зробіць вынік Potrace больш проÑтым Ð´Ð»Ñ Ð¿Ñ€Ð°ÑžÐºÑ–. Ðапрыклад, воÑÑŒ Ñ‚Ñ‹Ð¿Ð¾Ð²Ñ‹Ñ Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ– Старога чалавека, Ñкі іграе на ґітары: + ПаÑÑŒÐ»Ñ Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ, пажадана ÑкарыÑтаць ШлÑÑ… > СпроÑьціць (Ctrl+L) на выніковым шлÑху, каб зьменшыць колькаÑьць вузлоў. ГÑта зробіць вынік Potrace больш проÑтым Ð´Ð»Ñ Ð¿Ñ€Ð°ÑžÐºÑ–. Ðапрыклад, воÑÑŒ Ñ‚Ñ‹Ð¿Ð¾Ð²Ñ‹Ñ Ð°Ð±Ð²Ð¾Ð´Ð¶Ð°Ð½ÑŒÐ½Ñ– Старога чалавека, Ñкі іграе на ґітары: - Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ - Ðбведзены Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ / Выніковы шлÑÑ…(1.551 вузел) + Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ + Ðбведзены Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ / Выніковы шлÑÑ…(1.551 вузел) - + ЗьвÑрніце ўвагу на аграмадную колькаÑьць вузлоў на шлÑху. ПаÑÑŒÐ»Ñ Ð½Ð°Ñ†Ñ–ÑÐºÐ°Ð½ÑŒÐ½Ñ Ctrl+L, атрымоўваеем тыповы вынік: - Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ - Ðбведзены Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ / Выніковы шлÑÑ… — Ñпрошчаны(384 вузлы) + Спачатны Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ + Ðбведзены Ð²Ñ–Ð´Ð°Ñ€Ñ‹Ñ / Выніковы шлÑÑ… — Ñпрошчаны(384 вузлы) - + @@ -225,8 +225,8 @@ - - КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць + + КарыÑтайцеÑÑ Ctrl+ÑтрÑлка ўверх каб пракручваць diff --git a/share/tutorials/tutorial-tracing.el.svg b/share/tutorials/tutorial-tracing.el.svg index a9c347f7f..227cdbb46 100644 --- a/share/tutorials/tutorial-tracing.el.svg +++ b/share/tutorials/tutorial-tracing.el.svg @@ -40,160 +40,160 @@ ΧÏήση Ctrl+κάτω βέλος για κÏλιση - - ::ΑÎΊΧÎΕΥΣΗ + + ::TRACING BITMAPS - + Ένα από τα χαÏακτηÏιστικά του Inkscape είναι ένα εÏγαλείο για ανίχνευση μιας ψηφιογÏαφίας στο στοιχείο <μονοπάτι> για το σχέδιό σας SVG. Αυτές οι σÏντομες σημειώσεις θα σας βοηθήσουν να εξοικειωθείτε με τον Ï„Ïόπο εÏγασίας. - + ΠÏος το παÏόν το Inkscape χÏησιμοποιεί την μηχανή αναζήτησης ψηφιογÏαφίας Potrace (potrace.sourceforge.net) από τον Peter Selinger. Στο μέλλον ελπίζουμε να επιτÏέψουμε εναλλακτικά Ï€ÏογÏάμματα ανίχνευσης. ΠÏος το παÏόν, όμως, αυτό το εξαιÏετικό εÏγαλείο είναι πεÏισσότεÏο από επαÏκές για τις ανάγκες μας. - + Θυμηθείτε ότι ο σκοπός του ανιχνευτή δεν είναι η αναπαÏαγωγή ενός ακÏιβοÏÏ‚ διπλότυπου της αÏχικής εικόνας, οÏτε η παÏαγωγή ενός Ï„ÎµÎ»Î¹ÎºÎ¿Ï Ï€Ïοϊόντος. Κανένας αυτόματος ανιχνευτής δεν μποÏεί να το κάνει. Αυτό που κάνει είναι να σας δώσει ένα σÏνολο καμπυλών που μποÏείτε να χÏησιμοποιήσετε ως πηγή για το σχέδιο σας. - + Το Potrace εÏμηνεÏει μια ασπÏόμαυÏη ψηφιογÏαφία και παÏάγει ένα σÏνολο καμπυλών. Για το Potrace, έχουμε Ï€Ïος το παÏόν Ï„Ïεις Ï„Ïπους φίλτÏων εισόδου για μετατÏοπή από μια ακατέÏγαστη εικόνα σε κάτι που το Potrace μποÏεί να χÏησιμοποιήσει. - + Γενικά όσο πιο σκοτεινά τα εικονοστοιχεία στην ενδιάμεση ψηφιογÏαφία, τόσο καλÏτεÏη ανίχνευση θα κάνει το Potrace. Καθώς το ποσό της ανίχνευσης αυξάνει, πεÏισσότεÏος χÏόνος CPU θα απαιτείται και το στοιχείο <μονοπάτι> θα γίνει Ï€Î¿Î»Ï Î¼ÎµÎ³Î±Î»ÏτεÏο. ΠÏοτείνεται ο χÏήστης να πειÏαματιστεί με πιο ανοικτές ενδιάμεσες εικόνες αÏχικά, αυξάνοντας σταδιακά σε πιο σκοτεινές για να πάÏει την επιθυμητή αναλογία και πεÏιπλοκότητα του Î¼Î¿Î½Î¿Ï€Î±Ï„Î¹Î¿Ï ÎµÎ¾ÏŒÎ´Î¿Ï…. - + Για να χÏησιμοποιήσετε τον ανιχνευτή, φοÏτώστε ή εισάγετε μια εικόνα, επιλέξτε την και επιλέξτε το στοιχείο Μονοπάτι > Ανίχνευση ψηφιογÏαφίας ή Shift+Alt+B. - ΚÏÏιες επιλογές με το διάλογο ανίχνευσης - - + ΚÏÏιες επιλογές με το διάλογο ανίχνευσης + + Ο χÏήστης θα δείτε τις Ï„Ïεις διαθέσιμες επιλογές φίλτÏου: - - + + Αποκοπή λαμπÏότητας - + Αυτό απλά χÏησιμοποιεί το άθÏοισμα κόκκινου, Ï€Ïάσινου και μπλε (ή αποχÏώσεις του γκÏι) ενός εικονοστοιχείου ως δείκτη θεώÏησης μαÏÏου ή άσπÏου. Το κατώφλι μποÏεί να οÏιστεί από 0,0 (μαÏÏο) μέχÏι 1,0 (άσπÏο). Όσο πιο υψηλή η ÏÏθμιση κατωφλιοÏ, τόσο μικÏότεÏος ο αÏιθμός των εικονοστοιχείων που μποÏοÏν να θεωÏηθοÏν “άσπÏα†και η ενδιάμεση εικόνα γίνεται πιο σκοτεινή. - ΑÏχική εικόνα - Κατώφλι φωτεινότηταςΓέμισμα, όχι πινελιά - Κατώφλι φωτεινότηταςΠινελιά, όχι γέμισμα - - - - - + ΑÏχική εικόνα + Κατώφλι φωτεινότηταςΓέμισμα, όχι πινελιά + Κατώφλι φωτεινότηταςΠινελιά, όχι γέμισμα + + + + + Ανίχνευση ακμής - + Αυτό χÏησιμοποιεί τον αλγόÏιθμο ανίχνευσης άκÏης από τον J. Canny ως ένα Ï„Ïόπο γÏήγοÏης εÏÏεσης ισοκλινών παÏόμοιων αντιθέσεων. Αυτό θα παÏάξει μια ενδιάμεση ψηφιογÏαφία που θα δείχνει λιγότεÏο παÏόμοια με την αÏχική εικόνα απ' ότι το κατώφλι λαμπÏότητας, αλλά θα δώσει πιθανόν πληÏοφοÏίες της καμπÏλης που διαφοÏετικά θα παÏαβλέπονταν. Η ÏÏθμιση κατωφλίου εδώ (0,0 έως 1,0) Ïυθμίζει το κατώφλι λαμπÏότητας για το εάν ένα γειτονικό εικονοστοιχείο σε μια άκÏη αντίθεσης θα συμπεÏιλαμβάνεται στην έξοδο. Αυτή η ÏÏθμιση μποÏεί να Ï€ÏοσαÏμόσει το σκοτείνιασμα ή το πάχος της άκÏης στην έξοδο. - ΑÏχική εικόνα - Ανίχνευση ακμήςΓέμισμα, όχι πινελιά - Ανίχνευση ακμήςΠινελιά, όχι γέμισμα - - - - - + ΑÏχική εικόνα + Ανίχνευση ακμήςΓέμισμα, όχι πινελιά + Ανίχνευση ακμήςΠινελιά, όχι γέμισμα + + + + + Κβαντισμός χÏώματος - + Το αποτέλεσμα Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φίλτÏου θα παÏάξει μια ενδιάμεση εικόνα που είναι Ï€Î¿Î»Ï Î´Î¹Î±Ï†Î¿Ïετική από τις άλλες δÏο, αλλά είναι Ï€Î¿Î»Ï Ï‡Ïήσιμη Ï€Ïαγματικά. Αντί για Ï€Ïοβολή των ισοκλινών της λαμπÏότητας ή αντίθεσης, αυτό θα βÏει τις άκÏες όπου τα χÏώματα αλλάζουν, ακόμα και σε ίση λαμπÏότητα και αντίθεση. Η ÏÏθμιση εδώ, αÏιθμός χÏωμάτων, αποφασίζει τον αÏιθμό χÏωμάτων εξόδου που θα υπήÏχαν εάν η ενδιάμεση εικόνα ήταν χÏωματιστή. Έπειτα αποφασίζει μαÏÏο/άσπÏο ανάλογα με το εάν το χÏώμα έχει μονό ή ζυγό δείκτη. - ΑÏχική εικόνα - Κβάντωση (12 χÏώματα)Γέμισμα, όχι πινελιά - Κβάντωση (12 χÏώματα)Πινελιά, όχι γέμισμα - - - - + ΑÏχική εικόνα + Κβάντωση (12 χÏώματα)Γέμισμα, όχι πινελιά + Κβάντωση (12 χÏώματα)Πινελιά, όχι γέμισμα + + + + Ο χÏήστης θα Ï€Ïέπει να δοκιμάσει και τα Ï„Ïία φίλτÏα και να παÏατηÏήσει τους διαφοÏετικοÏÏ‚ Ï„Ïπους εξόδου των διαφοÏετικών Ï„Ïπων εικόνων εισόδου. Θα υπάÏχει πάντοτε μια εικόνα, όπου δουλεÏει κανείς καλÏτεÏα από τις άλλες. - + Μετά την ανίχνευση, Ï€Ïοτείνεται επίσης ο χÏήστης να δοκιμάσει Μονοπάτι > Απλοποίηση (Ctrl+L) στο μονοπάτι εξόδου για να μειώσει τιν αÏιθμό των κόμβων. Αυτό μποÏεί να κάνει την έξοδο του Potrace Ï€Î¿Î»Ï Ï€Î¹Î¿ εÏκολα επεξεÏγάσιμη. Π.χ., Î¹Î´Î¿Ï Î¼Î¹Î± τυπική ανίχνευση του γέÏοντα που παίζει κιθάÏα: - ΑÏχική εικόνα - Ανιχνευθείσα εικόνα/ Μονοπάτι εξόδου(1.551 κόμβοι) - - - + ΑÏχική εικόνα + Ανιχνευθείσα εικόνα/ Μονοπάτι εξόδου(1.551 κόμβοι) + + + Σημειώστε τον τεÏάστιο αÏιθμό κόμβων στο μονοπάτι. Î‘Ï†Î¿Ï Ï€Î±Ï„Î®ÏƒÎµÏ„Îµ Ctrl+L, αυτό είναι ένα τυπικό αποτέλεσμα: - ΑÏχική εικόνα - Ανιχνευθείσα εικόνα/ Μονοπάτι εξόδου - απλοποιημένο(384 κόμβοι) - - - + ΑÏχική εικόνα + Ανιχνευθείσα εικόνα/ Μονοπάτι εξόδου - απλοποιημένο(384 κόμβοι) + + + Η αναπαÏάσταση είναι λίγο πιο Ï€Ïοσεγγιστική και σκληÏή, αλλά το σχέδιο είναι Ï€Î¿Î»Ï Ï€Î¹Î¿ απλό και ευεπεξέÏγαστο. Κα θυμόσαστε ότι αυτό που θέλετε δεν είναι η ακÏιβής απόδοση της εικόνας, αλλά ένα σÏνολο καμπυλών που μποÏείτε να χÏησιμοποιήσετε στη σχεδίαση. - + diff --git a/share/tutorials/tutorial-tracing.es.svg b/share/tutorials/tutorial-tracing.es.svg index f2b5003c4..62df903ba 100644 --- a/share/tutorials/tutorial-tracing.es.svg +++ b/share/tutorials/tutorial-tracing.es.svg @@ -36,167 +36,167 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::VECTORIZAR + + ::TRACING BITMAPS - - + + Una de las funciones de Inkscape es una herramienta para vectorizado de imágenes de mapas de bits en un <trazo> elemento para el dibujado de SVG. Estas cortas notas le ayudarán a conocer como trabaja esto. - - + + - Actualmente Inkscape emplea el motor de vectorizado de mapa de bits Potrace (potrace.sourceforge.net) por Peter Selinger. En el futuro, esperamos que permita alternar programas de vectorizado; por ahora, sin embargo, esta fina herramienta es más que suficiente para lo que necesita. + Actualmente Inkscape emplea el motor de vectorizado de mapa de bits Potrace (potrace.sourceforge.net) por Peter Selinger. En el futuro, esperamos que permita alternar programas de vectorizado; por ahora, sin embargo, esta fina herramienta es más que suficiente para lo que necesita. - - + + Tenga en mente que el propósito del Vectorizar no es reproducir un duplicado exacto de la imágen original; o intentar producir un producto final. El autotrazado no hace eso. Lo que hace es darle un set de curvas las cuales usted puede emplear como una fuente de ayuda para sus dibujos. - - + + Potrace interpreta mapas de bits blanco y negro y produce un set de curvas. Para Potrace, actualmente poseemos tres tipos de filtros de salida, para convertir desde imágenes brutas a algo que Potrace pueda usar. - - + + Generalmente los pixeles más oscuros en un mapa de bit intermedio, es el mayor trazo que Potrace puede desarrollar. A mayor cantidad de trazos, más tiempo la CPU requerira y el elemento <trazo> se convertirá en uno más grande. Se sugiere que los usuarios experimenten primero con imágenes intermédias clara, configurando gradualmente la opacidad para obener la proporción y complejidad del trazo resultante. - - + + - Para usar el vectorizado, cargue o importe una imágen, selecciónela, y seleccione Trazo > Vectorizar un mapa de bits, o Mayus+Alt+B. + Para usar el vectorizado, cargue o importe una imágen, selecciónela, y seleccione Trazo > Vectorizar un mapa de bits, o Mayus+Alt+B. - Main options within the Trace dialog - - - + Main options within the Trace dialog + + + El usuario observará las tres opciones de filtro disponibles: - - - + + + Brightness Cutoff - - + + Esta usa realmente la suma del rojo, verde y azul (o escala de grices) de un pixel como un indicador de si este puede ser considerado blanco o negro. La luminosidad puede ser configurada desde 0.0 (negro) a 1.0 (blanco). La mayor configuración del umbral, el menor número de pixeles que serán considerados para ser \u201cwhite\u201d, y la imágen intermedia que se convertirá en oscura. - Original Image - Luminosidad de la imágenFill, no Stroke - Luminosidad de la imágenStroke, no Fill - - - - - - + Original Image + Luminosidad de la imágenFill, no Stroke + Luminosidad de la imágenStroke, no Fill + + + + + + Edge Detection - - + + Este filtro usa el arlgoritmo de detección de bordes desarrollado por J. Canny, el cual es un modo de búsqueda rápida de isóclinas de contrastes similares. Esto producirá un mapa de bits intermedio que será visto un poco diferente a la imágen original que como lo hace la lumínusidad de la imágen, pero provee la curva de información que de otra manera será ignorado. La configuración del umbral es (0.0 \u2013 1.0) ajustada por la luminosidad de la imágen si es un pixel adjacente al borde del contasre que será incluido en el resultado. Esta configuración puede ajustar la opacidad o grosor del borde en el resultado. - Original Image - Edge DetectedFill, no Stroke - Edge DetectedStroke, no Fill - - - - - - + Original Image + Edge DetectedFill, no Stroke + Edge DetectedStroke, no Fill + + + + + + Color Quantization - - + + El resultado de este filtro producirá una imágen intermedia que es muy diferente de la otra segunda, pero es de hecho muy útil. En vez de mostrar las isóclinas o brillo o contraste, esta buscará los bordes donde los colores cambian, uniformemente igual a brillo y contraste. Las opciones de configuración aquí son: Número de colores, decide cuantos colores de salida pueden haber, si el mapa de bits intermedio era de color. Este entonces decide blanco/negro según si el color ha sido uniforme o posee un indice raro. - Original Image - Quantization (12 colors)Fill, no Stroke - Quantization (12 colors)Stroke, no Fill - - - - - + Original Image + Quantization (12 colors)Fill, no Stroke + Quantization (12 colors)Stroke, no Fill + + + + + El usuario puede intentar todos los tres filtros y observar los diferentes tipos de resultados para diferentes tipos de imágenes de entrada. Siempre habrá una imágen donde uno trabajará mejor que otro. - - + + - Después del trazo, también se sugiere al usuario intentar Trazo > Simplificar (Ctrl+L) sobre el trazo resultante, para reducir el número de nodos. Esto puede hacer el resultado del Potrace mucho más simple de editar. Por ejemplo, aquí podemos observar el típico trazo del Hombre Viejo Tocando Guitarra: + Después del trazo, también se sugiere al usuario intentar Trazo > Simplificar (Ctrl+L) sobre el trazo resultante, para reducir el número de nodos. Esto puede hacer el resultado del Potrace mucho más simple de editar. Por ejemplo, aquí podemos observar el típico trazo del Hombre Viejo Tocando Guitarra: - Original Image - Traced Image / Output Path(1,551 nodes) - - - - + Original Image + Traced Image / Output Path(1,551 nodes) + + + + Note la gran cantidad de nodos en el trazo. Después de realizar Ctrl+L, este es un resultado típico: - Original Image - Traced Image / Output Path - Simplified(384 nodes) - - - - + Original Image + Traced Image / Output Path - Simplified(384 nodes) + + + + La representación es un poco más aproximada y áspera, pero el dibujo es mucho más simple y sencillo de editar. Mantenga en mente que lo que quiere no es una réplica exacta de la imágen, pero un set de de curvas es lo que puede usar en su dibujo. - + @@ -226,8 +226,8 @@ - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tracing.eu.svg b/share/tutorials/tutorial-tracing.eu.svg index 6fb4d173a..7129bfe87 100644 --- a/share/tutorials/tutorial-tracing.eu.svg +++ b/share/tutorials/tutorial-tracing.eu.svg @@ -36,166 +36,166 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::BEKTORIZAZIOA + + ::TRACING BITMAPS - - + + SVG marrazkietarako bit-mapa irudi bat <bide> elementu batean bektorizatzeko tresna Inkscape-ren ezaugarrietako bat da. Ohar labur hauek bere erabilpenean trebatzen lagundu beharko lizukete. - - + + - Gaur egun Inkscape-k Peter Selinger-en Potrace bit-mapak bektorizatzeko motorea (potrace.sourceforge.net) erabiltzen du. Etorkizunean bektorizatzeko programa ezberdinen artean aukeratzeko gaitasuna izatea espero dugu; oraingoz, ordea, trensa fin hau gure beharretarako nahiko eta soberakoa da. + Gaur egun Inkscape-k Peter Selinger-en Potrace bit-mapak bektorizatzeko motorea (potrace.sourceforge.net) erabiltzen du. Etorkizunean bektorizatzeko programa ezberdinen artean aukeratzeko gaitasuna izatea espero dugu; oraingoz, ordea, trensa fin hau gure beharretarako nahiko eta soberakoa da. - - + + Gogoan izan Bektorizatzailearen helburua ez dela jatorrizko irudiaren kopia zehatza lortzea; ezta bukatutako produktua lortzea ere. Ez dago hori lor dezakeen bektorizatzaile automatikorik. Egiten duena zera da, zure marrazkietan baliabide gisa erabil ditzakezun kurba multzoa sortzen du. - - + + Potrace-k zuri-beltzeko bit-mapa interpretatzen du eta kurba multzo bat sortzen du. Irudi gordin batetik Potrace-k erabil dezakeen zerbaitera heltzeko, gaur egun hiru sarrera iragazki ezberdin ditugu. - - + + Orokorrean, gero eta pixel ilun gehiago egon tarteko bit-mapan, Potrace-k bektorizazio gehiago burutuko du. Bektorizatze kopurua gora doan heinean, PUZ gehiago beharko da, eta <bide> elementua askoz handiagoa izango da. Gomendagarria da erabiltzaileak tarteko irudi argiagoekin saiatzea lehenbizi, gradualki ilunagoetara pasatuz helburuko bidearen proportzio eta konplexutasuna lortu arte. - - + + - Bektorizatzailea erabiltzeko, irudi bat kargatu edo inportatu, hautatu, eta Bektorizatu bit-mapa elementua aukeratu edo Shift+Alt+B sakatu. + Bektorizatzailea erabiltzeko, irudi bat kargatu edo inportatu, hautatu, eta Bektorizatu bit-mapa elementua aukeratu edo Shift+Alt+B sakatu. - Main options within the Trace dialog - - - + Main options within the Trace dialog + + + Erabiltzaileak erabilgarri dauden hiru iragazki aukerak ikusiko ditu: - - - + + + Brightness Cutoff - - + + Honek soilik pixel baten gorri, berde eta urdinen (edo grisen itzalen) batura erabiltzen du erabakitzeko beltza edo zuria izan behar duen. Atalasea 0,0tik (Beltza) 1.0ra (zuria) ezar daiteke. Gero eta atalase handiagoa, gero eta pixel gutxiago antzemango dira “txuri†bezala, eta bitarteko irudia ilunagoa izango da. - Jatorrizko Irudia - Distira MozketaBetetzea, Trazurik ez - Distira MozketaTrazua, Betetzerik ez - - - - - - + Jatorrizko Irudia + Distira MozketaBetetzea, Trazurik ez + Distira MozketaTrazua, Betetzerik ez + + + + + + Edge Detection - - + + Honek ertz detekziorako J. Canny-k asmatutako algoritmoa erabiltzen du antzeko kontrastea duten isoklinak azkar topatzeko. Honek jatorrizko irudiarekin antzekotasun gutxiago izango duen tarteko bit-mapa sortzen du Distira mozketarekin konparatuta, baina ziur aski beste modura galduko litzatekeen kurben informazioa eskainiko du. - Jatorrizko Irudia - Antzemandako ErtzaBetetzea, Trazurik ez - Antzemandako ErtzaTrazua, Betetzerik ez - - - - - - + Jatorrizko Irudia + Antzemandako ErtzaBetetzea, Trazurik ez + Antzemandako ErtzaTrazua, Betetzerik ez + + + + + + Kolore Kuantizazioa - - + + Iragazki honek beste biekin alderatuta tarteko irudi oso diferentea sortuko du, baina oso erabilgarria egia esanda. Distira edo kontrasteko isoklinak erakutsi ordez, kolorea aldatzen duten ertzak bilatuko ditu, nahiz eta distira eta kontraste berdina eduki. Zehaztu daitekeen balioa, Korore kopurua, tarteko bit-mapan egongo diren irteera kopurua adierazten du, tarteko irudia koloretan izatekotan. Ondoren zuri/beltza edo kolorearen indizea bakoiti edo bikoitia den erabakiko du. - Jatorrizko Irudia - Kuantizazioa (12 kolore)Betetzea, Trazurik ez - Kuantizazioa (12 kolore)Trazua, Betetzerik ez - - - - - + Jatorrizko Irudia + Kuantizazioa (12 kolore)Betetzea, Trazurik ez + Kuantizazioa (12 kolore)Trazua, Betetzerik ez + + + + + Erabiltzaileak hiru iragazkiak frogatu beharko lituzke, eta irudi mota ezberdinek sortzen dituzten emaitza ezberdinak aztertu. Beti egongo da irudi bat non iragazki bat besteak baino aproposagoa den. - - + + - Bektorizatu ondoren, gomendagarria da sortutako bidean Bidea > Soildu (Ktrl+L) komandoa erabiltzea nodo kopurua txikitzeko. Honek Potrace-ren irteera editatzea asko errazten du. Adibidez, hemen duzu Agurea Gitarra Jotzen-en bektorizazio tipiko bat: + Bektorizatu ondoren, gomendagarria da sortutako bidean Bidea > Soildu (Ktrl+L) komandoa erabiltzea nodo kopurua txikitzeko. Honek Potrace-ren irteera editatzea asko errazten du. Adibidez, hemen duzu Agurea Gitarra Jotzen-en bektorizazio tipiko bat: - Jatorrizko Irudia - Bektorizatutako Irudia / Irteera Bidea(1,551 nodo) - - - - + Jatorrizko Irudia + Bektorizatutako Irudia / Irteera Bidea(1,551 nodo) + + + + Ohar zaitez bidean dauden nodo kopuru izugarriaz. Ktrl+L sakatu eta gero, honelako emaitza lor dezakegu: - Jatorrizko Irudia - Bektorizatutako Irudia / Irteera Bidea - Sinplifikatuta(384 nodo) - - - - + Jatorrizko Irudia + Bektorizatutako Irudia / Irteera Bidea - Sinplifikatuta(384 nodo) + + + + Irudikapena apur bat zakarragoa eta originarela gutxiago hurbiltzen da, baina marrazkia askoz sinpleagoa eta editatzeko errazagoa da. Gogoan izan zuk nahi duzuna ez dela irudiaren bektorizazio zehatza, baizik eta zure marrazkian erabil ditzakezu kurba multzoa. - + @@ -225,8 +225,8 @@ - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tracing.fa.svg b/share/tutorials/tutorial-tracing.fa.svg index b478efe3d..fc5fe49e5 100644 --- a/share/tutorials/tutorial-tracing.fa.svg +++ b/share/tutorials/tutorial-tracing.fa.svg @@ -36,15 +36,15 @@ - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید - - ::TRACING + + ::TRACING BITMAPS - - + + @@ -53,18 +53,18 @@ into a <path> element for your SVG drawing. These short notes should help you become acquainted with how it works. - - + + - Currently Inkscape employs the Potrace bitmap tracing engine (potrace.sourceforge.net) by Peter Selinger. + Currently Inkscape employs the Potrace bitmap tracing engine (potrace.sourceforge.net) by Peter Selinger. In the future we expect to allow alternate tracing programs; for now, however, this fine tool is more than sufficient for our needs. - - + + @@ -74,8 +74,8 @@ that. What it does is give you a set of curves which you can use as a resource f drawing. - - + + @@ -84,8 +84,8 @@ we currently have three types of input filters to convert from the raw image to something that Potrace can use. - - + + @@ -96,19 +96,19 @@ with lighter intermediate images first, getting gradually darker to get the desi proportion and complexity of the output path. - - + + To use the tracer, load or import an image, select it, -and select the Path > Trace Bitmap item, or Shift+Alt+B. +and select the Path > Trace Bitmap item, or Shift+Alt+B. - Main options within the Trace dialog - + Main options within the Trace dialog + - + @@ -117,7 +117,7 @@ and select the Path > Trace Bitmap it - + @@ -125,7 +125,7 @@ and select the Path > Trace Bitmap it - + @@ -136,15 +136,15 @@ pixels that will be considered to be “whiteâ€, and the intermediate image wit become darker. - Original Image - Brightness ThresholdFill, no Stroke - Brightness ThresholdStroke, no Fill + Original Image + Brightness ThresholdFill, no Stroke + Brightness ThresholdStroke, no Fill - + @@ -152,7 +152,7 @@ become darker. - + @@ -165,15 +165,15 @@ contrast edge will be included in the output. This setting can adjust the darkn thickness of the edge in the output. - Original Image - Edge DetectedFill, no Stroke - Edge DetectedStroke, no Fill + Original Image + Edge DetectedFill, no Stroke + Edge DetectedStroke, no Fill - + @@ -181,7 +181,7 @@ thickness of the edge in the output. - + @@ -193,14 +193,14 @@ would be if the intermediate bitmap were in color. It then decides black/white whether the color has an even or odd index. - Original Image - Quantization (12 colors)Fill, no Stroke - Quantization (12 colors)Stroke, no Fill + Original Image + Quantization (12 colors)Fill, no Stroke + Quantization (12 colors)Stroke, no Fill - + @@ -210,22 +210,22 @@ than the others. - + - After tracing, it is also suggested that the user try Path > Simplify + After tracing, it is also suggested that the user try Path > Simplify (Ctrl+L) on the output path to reduce the number of nodes. This can make the output of Potrace much easier to edit. For example, here is a typical tracing of the Old Man Playing Guitar: - Original Image - Traced Image / Output Path(1,551 nodes) + Original Image + Traced Image / Output Path(1,551 nodes) - + @@ -233,12 +233,12 @@ of the Old Man Playing Guitar: this is a typical result: - Original Image - Traced Image / Output Path - Simplified(384 nodes) + Original Image + Traced Image / Output Path - Simplified(384 nodes) - + @@ -277,8 +277,8 @@ image, but a set of curves that you can use in your drawing. - - از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید + + از ctrl+ جهت بالا برای پیمایش به بالا Ø§Ø³ØªÙØ§Ø¯Ù‡ کنید diff --git a/share/tutorials/tutorial-tracing.fr.svg b/share/tutorials/tutorial-tracing.fr.svg index 402a2f0b2..eb041f7f1 100644 --- a/share/tutorials/tutorial-tracing.fr.svg +++ b/share/tutorials/tutorial-tracing.fr.svg @@ -40,160 +40,160 @@ - - ::VECTORISATION + + ::VECTORISER UNE IMAGE MATRICIELLE - + Inkscape permet de vectoriser des images matricielles, pour en faire un chemin (élément <path>) inséré dans votre dessin SVG. Ce didacticiel devrait vous aider à prendre en main l'outil. - + À l'heure actuelle, Inkscape utilise le moteur de vectorisation d'images matricielles Potrace (potrace.sourceforge.net) créé par Peter Selinger. Dans le futur, nous espérons permettre l'utilisation d'autres programmes/moteurs de vectorisation ; pour le moment, cependant, cet excellent outil est plus que suffisant pour nos besoins. - + Gardez à l'esprit que le but de la vectorisation avec cet outil n'est pas de produire une duplication exacte de l'image originale, ni de produire un résultat finalisé. Aucun outil de vectorisation automatique ne peut produire cela. Vous obtiendrez un ensemble de courbes que vous pourrez utiliser comme ressources dans votre dessin. - + Potrace interprète une image matricielle en noir et blanc, et produit un ensemble de courbes. Nous avons trois types de filtres d'entrée pour Potrace, afin de convertir les images brutes en quelque chose que Potrace peut exploiter. - + En général, plus il y a de pixels sombres dans l'image intermédiaire, plus la vectorisation générée par Potrace sera importante. Plus la vectorisation est importante, et plus le temps du processus sera grand et plus le chemin résultant sera important. Nous vous suggérons d'expérimenter cela avec des images intermédiaires plutôt claires, en les assombrissant autant que nécessaire afin d'obtenir les taille et complexité désirées pour le chemin résultant. - + Pour utiliser l'outil de vectorisation, ouvrez ou importez une image, sélectionnez-la, et lancez la commande Chemin > Vectoriser un objet matriciel ou appuyez sur Maj+Alt+B. - Options principales de vectorisation - - + Options principales de vectorisation + + Vous voyez trois options de filtrage disponibles : - - + + Seuil de luminosité - + Cette option utilise simplement la somme des composantes rouge, bleue et verte (ou la nuance de gris) d'un pixel pour déterminer s'il doit être considéré comme blanc ou noir. Le seuil peut être réglé entre 0,0 (noir) et 1,0 (blanc). Plus ce seuil est grand, moins les pixels considérés comme « blancs » seront nombreux et plus l'image intermédiaire sera sombre. - Image originale - Seuil de luminositéRempli, sans contour - Seuil de luminositéContour, non rempli - - - - - + Image originale + Seuil de luminositéRempli, sans contour + Seuil de luminositéContour, non rempli + + + + + Détection de contour - + Cette option utilise l'algorithme de détection des arêtes énoncé par J. Canny, afin de trouver rapidement des isoclines de contraste similaire. Cela produit une image intermédiaire qui ressemble moins à l'image originale que le résultat d'un seuil de luminosité mais qui contient souvent des courbes qui seraient ignorées autrement. Le seuil à régler ici (de 0,0 à 1,0) ajuste le seuil de luminosité afin de déterminer si un pixel adjacent à une courbe de contraste doit être inclus dans le résultat. Le réglage permet d'ajuster l'obscurité ou l'épaisseur des arêtes du résultat. - Image originale - Arêtes détectéesRempli, sans contour - Arêtes détectéesContour, non rempli - - - - - + Image originale + Arêtes détectéesRempli, sans contour + Arêtes détectéesContour, non rempli + + + + + Quantification des couleurs - + Le résultat de ce filtre produira une image intermédiaire très différente de celle produite avec les deux autres, mais pouvant être aussi très utile. Au lieu de chercher les isoclines de contraste ou de luminosité, il cherche les limites des changements de couleur, même à contraste ou luminosité constants. Le réglage ici, nombre de couleurs, permet de déterminer le nombre de couleurs que l'image intermédiaire devrait avoir si elle était en couleurs. Il exécute ensuite la détermination blanc/noir d'après l'indice pair ou impair des couleurs. - Image originale - Quantification (12 coul.)Rempli, sans contour - Quantification (12 coul.)Contour, non rempli - - - - + Image originale + Quantification (12 coul.)Rempli, sans contour + Quantification (12 coul.)Contour, non rempli + + + + Vous devriez essayer ces trois filtres et observer les résultats différents qu'ils produisent pour différents types d'images. Pour une image donnée, il y en aura un qui donnera de meilleurs résultats que les autres. - + Après la vectorisation, vous devriez essayer d'appliquer la commande Chemin > Simplifier (Ctrl+L) au chemin résultant, afin de diminuer le nombre de nÅ“uds. Cela peut rendre l'édition du résultat de Potrace bien plus facile. Par exemple, voici un exemple typique de vectorisation du « Vieil homme jouant de la guitare » : - Image originale - Image vectorisée / Chemin résultant(1 551 nÅ“uds) - - - + Image originale + Image vectorisée / Chemin résultant(1 551 nÅ“uds) + + + Notez le très grand nombre de nÅ“uds du chemin. Après avoir appuyé sur Ctrl+L, voici un résultat typique : - Image originale - Image vectorisée / Chemin résultant — Simplifié(384 nÅ“uds) - - - + Image originale + Image vectorisée / Chemin résultant — Simplifié(384 nÅ“uds) + + + La représentation est un peu plus approximative et grossière, mais le dessin est plus simple et plus facile à éditer. Gardez à l'esprit que ce que vous devez obtenir n'est pas un rendu exact de l'image mais un ensemble de courbes que vous pourrez utiliser dans votre dessin. - + diff --git a/share/tutorials/tutorial-tracing.gl.svg b/share/tutorials/tutorial-tracing.gl.svg index 1b4677b71..fd9749016 100644 --- a/share/tutorials/tutorial-tracing.gl.svg +++ b/share/tutorials/tutorial-tracing.gl.svg @@ -36,166 +36,166 @@ - - Use Ctrl+frecha abaixo para desprazar + + Use Ctrl+frecha abaixo para desprazar - - ::VECTORIZACIÓN + + ::TRACING BITMAPS - - + + Unha das funcionalidades de Inkscape é unha ferramenta para vectorizar unha imaxe de mapa de bits nun elemento <path> dun debuxo SVG. Estas pequenas notas deberían axudarlle a coñecer como funciona. - - + + - Agora mesmo Inkscape utiliza o motor de vectorización de mapas de bits Potrace (potrace.sourceforge.net) de Peter Selinger. No futuro agardamos que se poidan usar diferentes programas de vectorización; por agora, non obstante, esta excelente ferramenta é máis ca suficiente para as nosas necesidades. + Agora mesmo Inkscape utiliza o motor de vectorización de mapas de bits Potrace (potrace.sourceforge.net) de Peter Selinger. No futuro agardamos que se poidan usar diferentes programas de vectorización; por agora, non obstante, esta excelente ferramenta é máis ca suficiente para as nosas necesidades. - - + + Teña en conta que o propósito do Vectorizador non é reproducir un duplicado exacto da imaxe orixinal; está pensado para producir un producto final. Ningún vectorizador automático pode facer iso. O que fai é darlle un conxunto de curvas que pode usar coma un recurso para o seu debuxo. - - + + Potrace interpreta un mapa de bits en branco e negro, e produce un conxunto de curvas. Agora mesmo temos tres tipos de filtros de entrada para converter dende a imaxe en bruto a algo que Potrace poida usar. - - + + Xeralmente, canto máis escuros sexan os pixels na imaxe intermedia, máis vectorización realizará Potrace. Coma a cantidade de vectorización aumenta, requerirase máis tempo de CPU, e o elemento <path> será máis grande. Suxírese que o usuario experimente con imaxes intermedias máis claras primeiro, probando gradualmente con imaxes máis escuras para obter a proporción e a complexidade do camiño de saída desexados. - - + + - Para usar o vectorizador, cargue ou importe unha imaxe, selecciónea, e seleccione Camiño > Vectorizar Mapa de Bits, ou prema Shift+Alt+B. + Para usar o vectorizador, cargue ou importe unha imaxe, selecciónea, e seleccione Camiño > Vectorizar Mapa de Bits, ou prema Shift+Alt+B. - Opcións principais do diálogo de Vectorización - - - + Opcións principais do diálogo de Vectorización + + + O usuario verá as tres opcións de filtro dispoñibles: - - - + + + Brightness Cutoff - - + + Isto simplemente usa a suma do vermello, o verde e mailo azul (ou escala de gris) dun pixel coma un indicador de se debe ser considerado negro ou branco. O limiar pode establecerse dende 0.0 (negro) a 1.0 (branco). Canto maior sexa o valor do limiar, menor será o número de pixels considerados coma "branco", e a imaxe intermedia será máis escura. - Imaxe orixinal - Limiar de brilloRecheo, sen trazo - Limiar de brilloTrazo, sen recheo - - - - - - + Imaxe orixinal + Limiar de brilloRecheo, sen trazo + Limiar de brilloTrazo, sen recheo + + + + + + Edge Detection - - + + Isto usa o algoritmo de detección de bordos ideado por J. Canny coma un xeito de atopar rápidamente isoclinas de contraste similar. Isto producirá un mapa de bits intermedio que se parecerá menos á imaxe orixinal que o resultado do «Limiar de brillo», pero probablemente proporcionará información de curvas que de outro xeito se ignorarían. A opción de limiar de aquí (0.0 – 1.0) axusta o limiar de brillo para determinar se un píxel adxacente a un bordo de contraste se vai incluír na saída. Esta opción pode axustar a escuridade ou o grosor do bordo da saída. - Imaxe orixinal - Bordo detectadoRecheo, sen trazo - Bordo detectadoTrazo, sen recheo - - - - - - + Imaxe orixinal + Bordo detectadoRecheo, sen trazo + Bordo detectadoTrazo, sen recheo + + + + + + Redución de cores - - + + O resultado deste filtro producirá unha imaxe intermedia que é moi diferente das outras dúas, pero que é moi útil. En vez de mostrar isoclinas de brillo ou contraste, isto atopará os bordos onde cambian as cores, incluso con igual brillo e contraste. A opción «Número de cores» decide cantas cores haberá na saída se o mapa de bits intermedio está a cor. Tamén decide branco/negro dependendo de se a cor ten un índice par ou impar. - Imaxe orixinal - Redución de cores (12 cores)Recheo, sen trazo - Redución de cores (12 cores)Trazo, sen recheo - - - - - + Imaxe orixinal + Redución de cores (12 cores)Recheo, sen trazo + Redución de cores (12 cores)Trazo, sen recheo + + + + + O usuario debe probar os tres filtros, e observar os diferentes tipos de saída para os diferentes tipos de imaxes de entrada. Sempre haberá unha imaxe na que un funciona mellor cós outros. - - + + - Suxírese que o usuario use Camiño > Simplificar (Ctrl+L) no camiño de saída para reducir o número de nodos. Isto pode facer que a saída de Potrace sexa máis fácil de editar. Por exemplo, aquí está unha vectorización típica de Old Man Playing Guitar: + Suxírese que o usuario use Camiño > Simplificar (Ctrl+L) no camiño de saída para reducir o número de nodos. Isto pode facer que a saída de Potrace sexa máis fácil de editar. Por exemplo, aquí está unha vectorización típica de Old Man Playing Guitar: - Imaxe orixinal - Imaxe vectorizada / camiño de saída(1,551 nodos) - - - - + Imaxe orixinal + Imaxe vectorizada / camiño de saída(1,551 nodos) + + + + Mire o gran número de nodos do camiño. Despois de darlle a Ctrl+L, este é o resultado: - Imaxe orixinal - Imaxe vectorizada / camiño de saída - simplificado(384 nodos) - - - - + Imaxe orixinal + Imaxe vectorizada / camiño de saída - simplificado(384 nodos) + + + + A representación é un pouco máis aproximada e angulosa, pero o debuxo é moito máis fácil de editar. Teña en conta que o que vostede quere non é unha vectorización exacta da imaxe, senón un conxunto de curvas que poida usar no seu debuxo. - + @@ -225,8 +225,8 @@ - - Use Ctrl+frecha arriba para desprazar + + Use Ctrl+frecha arriba para desprazar diff --git a/share/tutorials/tutorial-tracing.hu.svg b/share/tutorials/tutorial-tracing.hu.svg index 17f47bc3b..b37bfe811 100644 --- a/share/tutorials/tutorial-tracing.hu.svg +++ b/share/tutorials/tutorial-tracing.hu.svg @@ -36,166 +36,166 @@ - - A Ctrl+le nyíl segít a lapozásban + + A Ctrl+le nyíl segít a lapozásban - - ::VEKTORIZÃLÃS + + ::TRACING BITMAPS - - + + Az Inkscape tartalmaz egy eszközt, amellyel pixelgrafikus képeket lehet útvonalakká alakítani. Az alábbi rövid írásból megismerheti ennek az eszköznek a működését. - - + + - Az Inkscape jelenleg a Peter Selinger által írt Potrace (potrace.sourceforge.net) nevű bitkép-vektorizáló programot alkalmazza. A jövÅ‘ben várhatóan más vektorizáló programok használata is lehetséges lesz; ám jelenleg ez a remek eszköz is több mint megfelelÅ‘. + Az Inkscape jelenleg a Peter Selinger által írt Potrace (potrace.sourceforge.net) nevű bitkép-vektorizáló programot alkalmazza. A jövÅ‘ben várhatóan más vektorizáló programok használata is lehetséges lesz; ám jelenleg ez a remek eszköz is több mint megfelelÅ‘. - - + + Vegye figyelembe, hogy a vektorizálás célja nem egy kép pontos másolatának a létrehozása; mint ahogy nem célja a végsÅ‘ eredmény előállítása sem. Egyik vektorizáló program sem nyújt ilyesmit. Ezzel szemben olyan görbékhez juthat, melyeket aztán a rajzához kiindulásként használhat. - - + + A Potrace fekete-fehér bitképeket dolgoz fel, és görbéket állít elÅ‘. Jelenleg az Inkscape háromfajta bemeneti szűrÅ‘t biztosít, melyekkel egy bitkép a Potrace számára feldolgozhatóvá válik. - - + + Ãltalában minél több sötét pixel van a közbeesÅ‘ képen, a Potrace annál több átrajzolást fog végezni. Minél több az átrajzolás, annál több processzoridÅ‘re lesz szükség, és az útvonal annál összetettebb lesz. Ajánlott, hogy elÅ‘bb világosabb közbensÅ‘ képekkel kísérletezzen, és fokozatos sötétítéssel jusson el a megfelelÅ‘ összhanghoz és összetettséghez. - - + + - A vektorizáláshoz elÅ‘ször nyisson meg vagy importáljon egy képet, jelölje ki, majd válassza az Útvonal > Bitkép vektorizálása… parancsot vagy nyomja meg a Shift+Alt+B billentyűket. + A vektorizáláshoz elÅ‘ször nyisson meg vagy importáljon egy képet, jelölje ki, majd válassza az Útvonal > Bitkép vektorizálása… parancsot vagy nyomja meg a Shift+Alt+B billentyűket. - A Bitkép vektorizálása párbeszédablak - - - + A Bitkép vektorizálása párbeszédablak + + + A párbeszédablakban a három szűrÅ‘ beállításai láthatók: - - - + + + Brightness Cutoff - - + + Ez a szűrÅ‘ pusztán a vörös, a zöld és a kék (vagy a szürke árnyalatai) színek összege alapján dönti el egy pixelrÅ‘l, hogy fehér vagy fekete legyen-e. A küszöb 0,0 (fekete) és 1,0 (fehér) között lehet. A küszöb növelésével csökken a fehérként figyelembe veendÅ‘ pixelek száma, így a közbensÅ‘ kép sötétebb lesz. - Eredeti kép - Fényesség-levágáscsak kitöltéssel - Fényesség-levágáscsak körvonallal - - - - - - + Eredeti kép + Fényesség-levágáscsak kitöltéssel + Fényesség-levágáscsak körvonallal + + + + + + Edge Detection - - + + J. Canny élkeresési algoritmusára épülÅ‘ szűrÅ‘, mellyel gyorsan elválaszthatók a hasonló kontrasztú területek. A közbensÅ‘ kép itt az elÅ‘zÅ‘ szűrÅ‘höz képest kevésbé részletes, viszont ezáltal olyan görbék is nyerhetÅ‘k, amilyenek másképpen nem. A küszöb (0,0–1,0) ezúttal egy fényességi küszöböt jelent, amely alapján egy kontrasztos éllel szomszédos pixelek bekerülnek a kimenetbe. Ezzel szabályozható a kimenetben az él sötétsége vagy vastagsága. - Eredeti kép - Élkereséscsak kitöltéssel - Élkereséscsak körvonallal - - - - - - + Eredeti kép + Élkereséscsak kitöltéssel + Élkereséscsak körvonallal + + + + + + Színek számának csökkentése - - + + Az elÅ‘zÅ‘ektÅ‘l nagyon eltérÅ‘ közbensÅ‘ képet eredményezÅ‘, ám mégis nagyon hasznos szűrÅ‘. A fényességeltérések vagy a kontrasztok helyett a színek változásai mentén keresi az éleket, akár egyenlÅ‘ fényesség vagy kontraszt mellett is. A színek számával az határozható meg, hogy a kimenetben hány szín lenne, ha a közbensÅ‘ kép színes volna. Ezután a szűrÅ‘ az alapján dönti el a fekete-fehér kérdést, hogy egy-egy szín páros vagy páratlan indexű-e. - Eredeti kép - Színek csökkentése (12)csak kitöltéssel - Színek csökkentése (12)csak körvonallal - - - - - + Eredeti kép + Színek csökkentése (12)csak kitöltéssel + Színek csökkentése (12)csak körvonallal + + + + + Célszerű kipróbálni mindhárom szűrÅ‘t, és megfigyelni a különféle típusú bemeneti képekkel kapott útvonalak közti különbségeket. Mindig van olyan kép, amelynek esetében az egyik szűrÅ‘ a többinél jobb eredményt ad. - - + + - Vektorizálás után ajánlott az eredményt az Útvonal > Egyszerűsítés (Ctrl+L) paranccsal feldolgozni, a csomópontokat csökkentendÅ‘. Ez könnyebben szerkeszthetÅ‘vé is teszi a Potrace kimenetét. Példaként álljon itt az Old Man Playing Guitar című kép vektorizálása: + Vektorizálás után ajánlott az eredményt az Útvonal > Egyszerűsítés (Ctrl+L) paranccsal feldolgozni, a csomópontokat csökkentendÅ‘. Ez könnyebben szerkeszthetÅ‘vé is teszi a Potrace kimenetét. Példaként álljon itt az Old Man Playing Guitar című kép vektorizálása: - Eredeti kép - A vektorizálás eredménye(1551 csomópont) - - - - + Eredeti kép + A vektorizálás eredménye(1551 csomópont) + + + + Figyelje meg, hogy milyen sok csomópontot tartalmaz az útvonal. És a Ctrl+L megnyomása utáni tipikus eredmény: - Eredeti kép - A vektorizálás eredménye egyszerűsítés után(384 csomópont) - - - - + Eredeti kép + A vektorizálás eredménye egyszerűsítés után(384 csomópont) + + + + A kép így kicsit elnagyoltabb lett, de sokkal egyszerűbbé is vált, ezért könnyebb szerkeszteni. Ne feledje, hogy nem a kép pontos visszaadása volt a cél, hanem olyan görbékhez jutni, melyek felhasználhatók lesznek egy rajzban. - + @@ -225,8 +225,8 @@ - - A Ctrl+fel nyíl segít a lapozásban + + A Ctrl+fel nyíl segít a lapozásban diff --git a/share/tutorials/tutorial-tracing.id.svg b/share/tutorials/tutorial-tracing.id.svg index cda3a31e3..dd809b500 100644 --- a/share/tutorials/tutorial-tracing.id.svg +++ b/share/tutorials/tutorial-tracing.id.svg @@ -36,166 +36,166 @@ - - Gunakan Ctrl+panah bawah untuk menggulung + + Gunakan Ctrl+panah bawah untuk menggulung - - ::TRACING (PERUNUTAN) + + ::TRACING BITMAPS - - + + Salah satu fitur dalam Inkscape adalah tool untuk merunut gambar bitmap menjadi elemen <path> untuk menggambar SVG. Note singkat ini bisa membantu anda memahami cara kerjanya. - - + + - Inkscape saat ini menggunakan jasa mesin perunut gambar Potrace (potrace.sourceforge.net) oleh Peter Selinger. Di masa depan kamipun berharap ada alternatif lain; untuk sekarang, bagaimanapun juga, tool (alat) ini lebih dari cukup untuk kebutuhan kita. + Inkscape saat ini menggunakan jasa mesin perunut gambar Potrace (potrace.sourceforge.net) oleh Peter Selinger. Di masa depan kamipun berharap ada alternatif lain; untuk sekarang, bagaimanapun juga, tool (alat) ini lebih dari cukup untuk kebutuhan kita. - - + + Selalu ingat bahwa tujuan dari Perunut bukanlah mereproduksi duplikat eksak dari gambar asal; juga bukanlah untuk menghasilkan produk final. Tidak ada perunut otomatis yang bisa melakukan itu. Apa yang dilakukannya adalah memberikan anda sebuah set kurva yang bisa anda gunakan sebagai bahan menggambar. - - + + Potrace menerjemahkan lewat bitmap hitam dan putih, kemudian menghasilkan sebuah set kurva. Untuk Potrace, saat ini terdapat tiga tipe filter masukan untuk mengkonversi dari gambar mentah menjadi sesuatu yang bisa digunakan oleh Potrace. - - + + Secara umum, semakin banyak pixel gelap dalam sebuah bitmap, semakin banyak runutan yang akan dilakukan oleh Potrace. Semakin besar jumlah runutan, semakin banyak waktu yang dibutuhkan oleh CPU, dan elemennya akan semakin besar. Dianjurkan agar pengguna mencoba dengan gambar yang lebih ringan dahulu, kemudian semakin digelapkan untuk mendapatkan proporsi dan kompleksitisas yang diinginkan. - - + + - Untuk menggunakan perunut, load atau import sebuah gambar, seleksi, kemudian pilih Path > Trace Bitmap, atau tekan Shift+Alt+B. + Untuk menggunakan perunut, load atau import sebuah gambar, seleksi, kemudian pilih Path > Trace Bitmap, atau tekan Shift+Alt+B. - Opsi utama dalam dialog Trace (Runut) - - - + Opsi utama dalam dialog Trace (Runut) + + + Pengguna akan melihat tiga opsi filter yang ada: - - - + + + Brightness Cutoff - - + + Ini menggunakan nilai dari merah, hijau, dan biru (atau bayangan dari abu-abu) dari sebuah pixel sebagai indikator apakah itu harus dianggap hitam atau putih. Threshold bisa diatur dari 0.0 (hitam) sampai 1.0 (putih). Semakin tinggi threshold, semakin sedikit pixel yang dianggap sebagai “putih“, dan gambar intermediate menjadi gelap. - Gambar Asal - Treshold keteranganFill (isi), tanpa Stroke (garis pinggir) - Treshold keteranganStroke (garis pinggir) tanpa Fill (isi) - - - - - - + Gambar Asal + Treshold keteranganFill (isi), tanpa Stroke (garis pinggir) + Treshold keteranganStroke (garis pinggir) tanpa Fill (isi) + + + + + + Edge Detection - - + + Guna dari alogaritma deteksi pinggir oleh J. Canny adalah sebagai cara cepat mencari isoclines dari kontras yang mirip. Ini akan menghasilkan bitmap intermediate yang akan sedikit mirip seperti gambar asal ketimbang hasil dari Brightness Treshold, tetapi akan memberikan informasi kurva yang biasanya tidak diperdulikan. Nilai threshold disini (0.0-1.0) mengatur brightness threshold dari dari apakah pixel yang berkaitan dengan pinggir kontras akan dimasukkan ke hasil. Penataan ini bisa mengatur kegelapan atau ketebalan dari pinggir pada hasil. - Gambar Asal - Pendeteksi pinggirFill (isi), tanpa Stroke (garis pinggir) - Pendeteksi pinggirStroke (garis pinggir) tanpa Fill (isi) - - - - - - + Gambar Asal + Pendeteksi pinggirFill (isi), tanpa Stroke (garis pinggir) + Pendeteksi pinggirStroke (garis pinggir) tanpa Fill (isi) + + + + + + Color Quantization (Kuantitasi warna) - - + + Hasil dari filter ini adalah gambar intermediate yang sangat berbeda dari sebelumnya, tapi memang sangat berguna. Ketimbang menampilkan isoclines dari brightness (keterangan) atau kontras, ini akan mencari pinggir dimana warna berubah, bahkan pada nilai brightness atau kontras yang sama. Penataan disini, Number of Colors (jumlah warna), menetukan berapa banyak warna hasil jika bitmap intermediate dalam warna. Ia kemudian menentukan hitam/putih pada apakah warna tersebut memiliki index genap atau ganjil. - Gambar Asal - Kuantitas (12 warna)Fill (isi), tanpa Stroke (garis pinggir) - Kuantitas (12 warna)Stroke (garis pinggir) tanpa Fill (isi) - - - - - + Gambar Asal + Kuantitas (12 warna)Fill (isi), tanpa Stroke (garis pinggir) + Kuantitas (12 warna)Stroke (garis pinggir) tanpa Fill (isi) + + + + + Pengguna sebaiknya mencoba tiga tipe filter tersebut dan mengamati tipe hasil yang berbeda dari tipe masukan yang berbeda. Selalu ada hasil gambar yang lebih baik menggunakan filter yang satu ketimbang yang lain. - - + + - Setelah merunut, disarankan juga agar pengguna mencoba Path > Simplify (Ctrl+L) pada path hasil untuk mengurangi jumlah node. Ini bisa membuat hasil dari Potrace lebih mudah diedit. Sebagai contoh, berikut adalah runutan tipikal dari Old Man Playing Guitar: + Setelah merunut, disarankan juga agar pengguna mencoba Path > Simplify (Ctrl+L) pada path hasil untuk mengurangi jumlah node. Ini bisa membuat hasil dari Potrace lebih mudah diedit. Sebagai contoh, berikut adalah runutan tipikal dari Old Man Playing Guitar: - Gambar Asal - Gambar yang dirunut / Path Keluaran(1,551 node) - - - - + Gambar Asal + Gambar yang dirunut / Path Keluaran(1,551 node) + + + + Perhatikan jumlah node yang luar biasa didalamnya. Setelah menekan Ctrl+L, inilah hasilnya: - Gambar Asal - Gambar yang dirunut / Path Keluaran - Disederhanakan(384 node) - - - - + Gambar Asal + Gambar yang dirunut / Path Keluaran - Disederhanakan(384 node) + + + + Representasinya sedikit lebih kasar, tetapi gambarnya lebih sederhana dan mudah untuk diedit. Ingatlah bahwa apa yang anda butuhkan bukanlah hasil runutan yang persis seperti gambar yang dirunut, tetapi sebuah set kurva yang bisa anda gunakan dalam gambar. - + @@ -225,8 +225,8 @@ - - Gunakan Ctrl+panah atas untuk menggulung + + Gunakan Ctrl+panah atas untuk menggulung diff --git a/share/tutorials/tutorial-tracing.ja.svg b/share/tutorials/tutorial-tracing.ja.svg index 2a7222620..b6c8aa533 100644 --- a/share/tutorials/tutorial-tracing.ja.svg +++ b/share/tutorials/tutorial-tracing.ja.svg @@ -36,166 +36,166 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::トレース + + ::TRACING BITMAPS - - + + Inkscape ã®ç‰¹å¾´ã®ä¸€ã¤ã«ãƒ“ットマップをトレースã—㦠<パス> è¦ç´ ã‚’作æˆã™ã‚‹ãƒ„ールãŒã‚りã¾ã™ã€‚ã“ã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã¯ã“ã®ãƒ„ールãŒã©ã†å‹•ãã‹ã‚’知る助ã‘ã«ãªã‚‹ã¯ãšã§ã™ã€‚ - - + + - ç¾åœ¨ Inkscape ã¯ãƒ“ットマップトレースエンジン㫠Peter Selinger ãŒåˆ¶ä½œã—㟠Potrace (potrace.sourceforge.net) を使用ã—ã¦ã„ã¾ã™ã€‚å°†æ¥çš„ã«ã¯ä»–ã®ãƒˆãƒ¬ãƒ¼ã‚·ãƒ³ã‚°ã‚¨ãƒ³ã‚¸ãƒ³ã‚‚使ãˆã‚‹ã‚ˆã†ã«ãªã‚‹ã¨æ€ã„ã¾ã™ãŒã€ä»Šã®ã¨ã“ã‚ã€ã“ã®ç´ æ™´ã‚‰ã—ã„ãƒ„ãƒ¼ãƒ«ã¯æˆ‘々ã«ã¨ã£ã¦å¿…è¦ã«ã—ã¦å分ã§ã™ã€‚ + ç¾åœ¨ Inkscape ã¯ãƒ“ットマップトレースエンジン㫠Peter Selinger ãŒåˆ¶ä½œã—㟠Potrace (potrace.sourceforge.net) を使用ã—ã¦ã„ã¾ã™ã€‚å°†æ¥çš„ã«ã¯ä»–ã®ãƒˆãƒ¬ãƒ¼ã‚·ãƒ³ã‚°ã‚¨ãƒ³ã‚¸ãƒ³ã‚‚使ãˆã‚‹ã‚ˆã†ã«ãªã‚‹ã¨æ€ã„ã¾ã™ãŒã€ä»Šã®ã¨ã“ã‚ã€ã“ã®ç´ æ™´ã‚‰ã—ã„ãƒ„ãƒ¼ãƒ«ã¯æˆ‘々ã«ã¨ã£ã¦å¿…è¦ã«ã—ã¦å分ã§ã™ã€‚ - - + + トレースã®ç›®çš„ã¯ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ç”»åƒã‚’忠実ã«å†ç¾ã™ã‚‹ã“ã¨ã§ã¯ãªãã€æœ€çµ‚çš„ãªå®Œæˆå“を作æˆã™ã‚‹ã“ã¨ã§ã‚‚ãªã„ã¨ã„ã†ã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。自動トレーサーã«ãã‚“ãªã“ã¨ã¯ã§ãã¾ã›ã‚“。トレースãŒã™ã‚‹ã“ã¨ã¯ã€ã‚ãªãŸãŒæã作å“ã®ä¸€ã¤ã®è³‡æºã¨ã—ã¦ã®ä¸€é€£ã®æ›²ç·šã‚’æä¾›ã™ã‚‹ã“ã¨ãªã®ã§ã™ã€‚ - - + + Potrace ã¯ç™½é»’ã®ãƒ“ットマップを解釈ã—ã€æ›²ç·šã®ã‚»ãƒƒãƒˆã‚’作æˆã—ã¾ã™ã€‚入力画åƒã‚’ Potrace ãŒä½¿ç”¨ã§ãるよã†ã«ã™ã‚‹ãŸã‚ã€ç¾åœ¨ 3 タイプã®ãƒ•ィルターãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚ - - + + ã»ã¨ã‚“ã©ã®å ´åˆã€Potrace ã¯ä¸­é–“åƒã®ãƒ“ットマップã®è‰²ã®æ¿ƒã„ピクセルをより多ãトレースã—ã¾ã™ã€‚トレースé‡ãŒå¢—ãˆã‚‹ã¨ã€å‡¦ç†ã«ã‹ã‹ã‚‹ CPU 時間ãŒå¢—ãˆã€<パス> è¦ç´ ã¯éžå¸¸ã«å¤šããªã‚Šã¾ã™ã€‚ã¾ãšã‚ˆã‚Šè‰²ã®è–„ã„中間åƒã§å®Ÿé¨“ã—ã€å¾ã€…ã«æ¿ƒãã—ã¦å¸Œæœ›ã™ã‚‹å‰²åˆã‚„出力パスã®è¤‡é›‘ã•を決ã‚ã¦ã„ãã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚ - - + + - トレーサーを使ã†ã«ã¯ã€ç”»åƒã‚’読ã¿è¾¼ã‚€ã‹ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã€ãƒ‘ス > ビットマップをトレース アイテムをé¸ã¶ã‹ã€Shift+Alt+B を押ã—ã¾ã™ã€‚ + トレーサーを使ã†ã«ã¯ã€ç”»åƒã‚’読ã¿è¾¼ã‚€ã‹ã‚¤ãƒ³ãƒãƒ¼ãƒˆã—ã€ãƒ‘ス > ビットマップをトレース アイテムをé¸ã¶ã‹ã€Shift+Alt+B を押ã—ã¾ã™ã€‚ - トレースダイアログã®ä¸»ãªã‚ªãƒ—ション - - - + トレースダイアログã®ä¸»ãªã‚ªãƒ—ション + + + 3 ã¤ã®ãƒ•ィルターオプションãŒè¦‹ãˆã‚‹ã§ã—ょã†: - - - + + + Brightness Cutoff - - + + ã“れã¯å˜ã«ãƒ”クセルã®èµ¤ã€é’ã€ãŠã‚ˆã³ç·‘ (ã¾ãŸã¯ã‚°ãƒ¬ãƒ¼ã®ã‚·ã‚§ãƒ¼ãƒ‰) ã®åˆè¨ˆã‚’é»’ã‚ã‚‹ã„ã¯ç™½ã¨ã¿ãªã™æŒ‡æ¨™ã¨ã—ã¦ä½¿ç”¨ã—ã¦ã„ã‚‹ã ã‘ã§ã™ã€‚ã—ãã„値㯠0.0 (é»’) ã‹ã‚‰ 1.0 (白) ãŒè¨­å®šã§ãã¾ã™ã€‚高ã„ã—ãã„値を設定ã™ã‚‹ã¨ã€å°‘æ•°ã®ãƒ”クセルã ã‘ãŒã€Œç™½ã€ã¨ã¿ãªã•れã€ä¸­é–“åƒã¯æ¿ƒããªã‚Šã¾ã™ã€‚ - ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ - 明るã•ã®å¢ƒç•Œ ã—ãã„値フィルã‚りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã— - 明るã•ã®å¢ƒç•Œ ã—ãã„値ストロークã‚りã€ãƒ•ィルãªã— - - - - - - + ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ + 明るã•ã®å¢ƒç•Œ ã—ãã„値フィルã‚りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã— + 明るã•ã®å¢ƒç•Œ ã—ãã„値ストロークã‚りã€ãƒ•ィルãªã— + + + + + + Edge Detection - - + + ã“れã¯é¡žä¼¼ã™ã‚‹ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆã®å¹³è¡¡ç·šã‚’ç´ æ—©ãæ¤œå‡ºã™ã‚‹æ‰‹æ®µã¨ã—ã¦ã€J. Canny ãŒè€ƒæ¡ˆã—ãŸã‚¨ãƒƒã‚¸æ¤œå‡ºã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’使用ã—ã¦ã„ã¾ã™ã€‚ã“ã‚Œã¯æ˜Žã‚‹ã•ã®ã—ãã„値ã®çµæžœã‚ˆã‚Šã‚‚ã‚ªãƒªã‚¸ãƒŠãƒ«ã®æƒ…報を残ã•ãªã„中間åƒã‚’生æˆã—ã¾ã™ãŒã€ãŠãらãä»–ã§ã¯ç„¡è¦–ã•れる曲線情報をæä¾›ã—ã¾ã™ã€‚ã“ã“ã§ã®ã—ãã„値ã®è¨­å®š (0.0 – 1.0) ã¯å‡ºåŠ›ã«å«ã‚€ã‚³ãƒ³ãƒˆãƒ©ã‚¹ãƒˆã®ã‚¨ãƒƒã‚¸ã«éš£æŽ¥ã—ãŸãƒ”クセルを調節ã—ã¾ã™ã€‚ã“ã®è¨­å®šã§å‡ºåŠ›ã®ã‚¨ãƒƒã‚¸ã®æš—ã•や太ã•を調整ã§ãã¾ã™ã€‚ - ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ - エッジ検出フィルã‚りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã— - エッジ検出ストロークã‚りã€ãƒ•ィルãªã— - - - - - - + ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ + エッジ検出フィルã‚りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã— + エッジ検出ストロークã‚りã€ãƒ•ィルãªã— + + + + + + 色ã®é‡å­åŒ– - - + + ã“ã®ãƒ•ィルターã®çµæžœã¯ä»–ã® 2 ã¤ã‚ˆã‚Šã‚‚大ããç•°ãªã‚‹ä¸­é–“åƒã‚’生æˆã—ã¾ã™ãŒã€å®Ÿã¯éžå¸¸ã«å½¹ã«ç«‹ã¡ã¾ã™ã€‚ã“ã‚Œã¯æ˜Žã‚‹ã•やコントラストã®å¹³è¡¡ç·šã®ä»£ã‚りã«ã€æ˜Žã‚‹ã•やコントラストãŒåŒã˜ã§ã‚ã£ã¦ã‚‚色ãŒå¤‰ã‚る境界を検出ã—ã¾ã™ã€‚ã“ã“ã§ã¯ã€ä¸­é–“åƒãŒã‚«ãƒ©ãƒ¼ã®å ´åˆã«å‡ºåŠ›ã™ã‚‹è‰²æ•°ã‚’決定ã—ã¾ã™ã€‚ã“れãŒè‰²ãŒå¶æ•°ã‹å¥‡æ•°ã‹ã§ç™½/黒を決定ã—ã¾ã™ã€‚ - ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ - é‡å­åŒ– (12 色)フィルã‚りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã— - é‡å­åŒ– (12 色)ストロークã‚りã€ãƒ•ィルãªã— - - - - - + ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ + é‡å­åŒ– (12 色)フィルã‚りã€ã‚¹ãƒˆãƒ­ãƒ¼ã‚¯ãªã— + é‡å­åŒ– (12 色)ストロークã‚りã€ãƒ•ィルãªã— + + + + + ã“れら 3 ã¤ã®ãƒ•ィルターを試ã—ã¦ã¿ã¦ã€ã•ã¾ã–ã¾ã‚¿ã‚¤ãƒ—ã®å…¥åŠ›ç”»åƒã§ã•ã¾ã–ã¾ãªã‚¿ã‚¤ãƒ—ã®å‡ºåŠ›ã‚’è¦‹æ¯”ã¹ã¦ãã ã•ã„。 - - + + - トレース後ã€å‡ºåŠ›ãƒ‘ã‚¹ã«å¯¾ã—㦠パス > パスã®ç°¡ç•¥åŒ– (Ctrl+L) を行ã£ã¦ãƒŽãƒ¼ãƒ‰æ•°ã‚’æ•´ç†ã™ã‚‹ã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚ã“れ㯠Potrace ã®å‡ºåŠ›ã‚’ã‚ˆã‚Šç·¨é›†ã—ã‚„ã™ãã—ã¾ã™ã€‚例ãˆã°ã€ã“ã“ã«ã‚®ã‚¿ãƒ¼ã‚’å¼¾ãè€äººã®å…¸åž‹çš„ãªãƒˆãƒ¬ãƒ¼ã‚¹ãŒã‚りã¾ã™: + トレース後ã€å‡ºåŠ›ãƒ‘ã‚¹ã«å¯¾ã—㦠パス > パスã®ç°¡ç•¥åŒ– (Ctrl+L) を行ã£ã¦ãƒŽãƒ¼ãƒ‰æ•°ã‚’æ•´ç†ã™ã‚‹ã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚ã“れ㯠Potrace ã®å‡ºåŠ›ã‚’ã‚ˆã‚Šç·¨é›†ã—ã‚„ã™ãã—ã¾ã™ã€‚例ãˆã°ã€ã“ã“ã«ã‚®ã‚¿ãƒ¼ã‚’å¼¾ãè€äººã®å…¸åž‹çš„ãªãƒˆãƒ¬ãƒ¼ã‚¹ãŒã‚りã¾ã™: - ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ - トレースイメージ / 出力パス(1,551 ノード) - - - - + ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ + トレースイメージ / 出力パス(1,551 ノード) + + + + パスã«ã¯åŽ–å¤§ãªæ•°ã®ãƒŽãƒ¼ãƒ‰ãŒã‚ã‚‹ã“ã¨ã«æ³¨ç›®ã—ã¦ãã ã•ã„。Ctrl+L を押ã—ãŸã‚ã¨ã®å…¸åž‹çš„ãªçµæžœãŒã“れã§ã™: - ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ - トレースイメージ / 出力パス - 簡略化(384 ノード) - - - - + ã‚ªãƒªã‚¸ãƒŠãƒ«ç”»åƒ + トレースイメージ / 出力パス - 簡略化(384 ノード) + + + + æå†™ã¯ã™ã“ã—ã ã‘ä¼¼ã¦ã„ã¦ãƒ©ãƒ•ã§ã™ãŒã€æç”»ã¯ã‚ˆã‚Šã‚·ãƒ³ãƒ—ルã«ãªã‚Šã€ç·¨é›†ã—ã‚„ã™ããªã£ã¦ã„ã¾ã™ã€‚トレースã¯ç”»åƒã‚’å¿ å®Ÿã«æå†™ã™ã‚‹ã®ã§ã¯ãªãã€ã‚ãªãŸãŒä½œå“ã‚’æç”»ã™ã‚‹ä¸­ã§ä½¿ç”¨ã™ã‚‹ä¸€é€£ã®æ›²ç·šã‚’作æˆã™ã‚‹ã‚‚ã®ã§ã‚ã‚‹ã“ã¨ã‚’忘れãªã„ã§ãã ã•ã„。 - + @@ -225,8 +225,8 @@ - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tracing.nl.svg b/share/tutorials/tutorial-tracing.nl.svg index d8c610195..78ee687f3 100644 --- a/share/tutorials/tutorial-tracing.nl.svg +++ b/share/tutorials/tutorial-tracing.nl.svg @@ -36,166 +36,166 @@ - Gebruik Ctrl+pijl omlaag om te scrollen + Gebruik Ctrl+pijl omlaag om te scrollen handleiding - - ::OVERTREKKEN + + ::TRACING BITMAPS - - + + Een van de functies in Inkscape is een gereedschap voor het overtrekken van bitmapafbeeldingen in een <path> element voor je SVG-afbeelding. Deze korte nota's helpen je mee op weg. - - + + - Op dit moment gebruikt Inkscape de Potrace engine van Peter Selinger voor het overtrekken van bitmaps (potrace.sourceforge.net). In de toekomst gaan we mogelijk alternatieve overtrekprogramma's ondersteunen. Echter, nu is deze goede tool meer dan voldoende voor onze noden. + Op dit moment gebruikt Inkscape de Potrace engine van Peter Selinger voor het overtrekken van bitmaps (potrace.sourceforge.net). In de toekomst gaan we mogelijk alternatieve overtrekprogramma's ondersteunen. Echter, nu is deze goede tool meer dan voldoende voor onze noden. - - + + Hou in het achterhoofd dat het doel van overtrekken noch het reproduceren is van een exacte kopie van het origineel, noch bedoeld is voor het maken van een finale afbeelding. Geen enkel overtrekprogramma kan dat. Het geeft je echter een set curves die je als bron voor je afbeelding kan gebruiken. - - + + Potrace interpreteert een zwart-witafbeelding en maakt hiervan een set curves. We hebben nu drie types invoerfilters voor Potrace om de ruwe afbeelding te converteren in iets dat Potrace kan gebruiken. - - + + Algemeen geldt dat hoe meer donkere pixels in de intermediaire bitmap, hoe meer Potrace zal overtrekken. Omdat de hoeveelheid overtrek vergroot, is meer CPU-tijd nodig en zal het <path>-element veel groter worden. Het is een goed idee dat je als gebruiker eerst experimenteert met lichtere afbeeldingen en dan langzaam overgaat naar donkere afbeeldingen om de gewenste proportie en complexiteit van het uitvoerpad te verkrijgen. - - + + - Om de tracer te gebruiken, laad of importeer je een afbeelding, selecteer deze en klik op het commando Paden > Bitmap overtrekken of gebruik je Shift+Alt+B. + Om de tracer te gebruiken, laad of importeer je een afbeelding, selecteer deze en klik op het commando Paden > Bitmap overtrekken of gebruik je Shift+Alt+B. - Algemene opties in het dialoogvenster Bitmap overtrekken - - - + Algemene opties in het dialoogvenster Bitmap overtrekken + + + De gebruiker zal de volgende drie beschikbare filteropties zien: - - - + + + Brightness Cutoff - - + + Deze optie gebruikt in essentie de som van de rood-, groen- en blauwwaarde (of grijstint) van een pixel als een zwart-witindicator. De grenswaarde kan ingesteld worden van 0.0 (zwart) tot 1.0 (wit). Hoe hoger de grenswaarde, hoe kleiner het aantal pixels dat als “wit†wordt gezien en bijgevolg hoe donkerder de intermediaire afbeelding. - Originele afbeelding - Helderheid grenswaardeVulling, geen lijn - Helderheid grenswaardeLijn, geen vulling - - - - - - + Originele afbeelding + Helderheid grenswaardeVulling, geen lijn + Helderheid grenswaardeLijn, geen vulling + + + + + + Edge Detection - - + + Deze optie gebruikt het randdetectiealgoritme van J. Canny als een snelle methode voor het vinden van lijnen met dezelfde kleurgradiënt of contrast. Dit zal een intermediaire afbeelding produceren die minder lijkt op de originele tekening dan met de optie Helderheid, maar zal wellicht curve-informatie bevatten die anders genegeerd wordt. De grenswaarde (0.0 - 1.0) past hier de grenswaarde voor de helderheid aan die bepaalt of een pixel langs de contrastrand in de uitvoer terug te vinden is. Deze instelling kan de donkerheid of randdikte in de uitvoer aanpassen. - Originele afbeelding - Rand gedetecteerdVulling, geen lijn - Rand gedetecteerdLijn, geen vulling - - - - - - + Originele afbeelding + Rand gedetecteerdVulling, geen lijn + Rand gedetecteerdLijn, geen vulling + + + + + + Kleurquantisatie - - + + Het resultaat van deze filter produceert een intermediaire afbeelding die zeer verschillend is van de twee andere, maar niettemin erg bruikbaar is. In tegenstelling met het tonen van lijnen met gelijke helderheid of contrast, zal deze filter randen vinden waar kleuren veranderen, zelfs bij gelijke helderheid en contrast. De instelling, aantal kleuren, bepaalt hoeveel kleuren er in de intermediaire afbeelding zouden zijn, indien deze intermediaire bitmap in kleur was. Het kent dan zwart en wit toe afhankelijk van het feit of de kleur een even of oneven index heeft. - Originele afbeelding - Quantisatie (12 kleuren)Vulling, geen lijn - Quantisatie (12 kleuren)Lijn, geen vulling - - - - - + Originele afbeelding + Quantisatie (12 kleuren)Vulling, geen lijn + Quantisatie (12 kleuren)Lijn, geen vulling + + + + + De gebruiker zou de drie filters moeten proberen en de verschillende types uitvoer voor verschillende types afbeeldingen observeren. Er is altijd een afbeelding waar de ene filter beter werkt dan de andere. - - + + - Na het overtrekken is het aan te raden om het commando Paden > Vereenvoudigen (Ctrl+L) toe te passen op het uitvoerpad om het aantal knooppunten te reduceren. Dit vereenvoudigt het bewerken van de potrace-uitvoer. Hier is bijvoorbeeld een typische overtrek van de Oude gitaarspeler: + Na het overtrekken is het aan te raden om het commando Paden > Vereenvoudigen (Ctrl+L) toe te passen op het uitvoerpad om het aantal knooppunten te reduceren. Dit vereenvoudigt het bewerken van de potrace-uitvoer. Hier is bijvoorbeeld een typische overtrek van de Oude gitaarspeler: - Originele afbeelding - Overtrokken afbeelding / uitvoer(1551 knooppunten) - - - - + Originele afbeelding + Overtrokken afbeelding / uitvoer(1551 knooppunten) + + + + Zie het enorm aantal knooppunten in het pad. Na het drukken op Ctrl+L is dit een typisch resultaat: - Originele afbeelding - Overtrokken afbeelding / uitvoer - vereenvoudigd(384 knooppunten) - - - - + Originele afbeelding + Overtrokken afbeelding / uitvoer - vereenvoudigd(384 knooppunten) + + + + De voorstelling is een iets benaderender en ruwer, maar de afbeelding is veel eenvoudiger en bewerkbaarder. Hou in het achterhoofd dat wat je wil niet een exacte rendering is van de afbeelding, maar een set curves die je kan gebruiken in je afbeelding. - + @@ -225,8 +225,8 @@ - - Gebruik Ctrl+pijl omhoog om te scrollen + + Gebruik Ctrl+pijl omhoog om te scrollen diff --git a/share/tutorials/tutorial-tracing.pl.svg b/share/tutorials/tutorial-tracing.pl.svg index f29ce4c5e..3d9876644 100644 --- a/share/tutorials/tutorial-tracing.pl.svg +++ b/share/tutorials/tutorial-tracing.pl.svg @@ -36,166 +36,166 @@ - - Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć + + Użyj Ctrl+strzaÅ‚ka w dół aby przewinąć - - ::WEKTORYZACJA + + ::TRACING BITMAPS - - + + Jednym z narzÄ™dzi Inkscape'a jest narzÄ™dzie sÅ‚użące do wektoryzowania obrazów bitmapowych. Zamienia ono bitmapÄ™ w <Å›cieżkÄ™>, którÄ… można nastÄ™pnie obrabiać jak każdy element SVG. Ten krótki poradnik pomoże ci zapoznać siÄ™ z dziaÅ‚aniem tego narzÄ™dzia. - - + + - Obecnie Inkscape wykorzystuje do wektoryzowania map bitowych silnik Potrace (potrace.sourceforge.net) autorstwa Petera Selingera. Niewykluczone, że w przyszÅ‚oÅ›ci w Inkscape'ie pojawiÄ… siÄ™ inne programy sÅ‚użące do wektoryzacji grafik rastrowych. Aktualnie Potrace jest w zupeÅ‚noÅ›ci wystarczajÄ…cym narzÄ™dziem. + Obecnie Inkscape wykorzystuje do wektoryzowania map bitowych silnik Potrace (potrace.sourceforge.net) autorstwa Petera Selingera. Niewykluczone, że w przyszÅ‚oÅ›ci w Inkscape'ie pojawiÄ… siÄ™ inne programy sÅ‚użące do wektoryzacji grafik rastrowych. Aktualnie Potrace jest w zupeÅ‚noÅ›ci wystarczajÄ…cym narzÄ™dziem. - - + + ProszÄ™ pamiÄ™tać, że celem narzÄ™dzia wektoryzujÄ…cego nie jest dokÅ‚adne odwzorowanie oryginalnego obrazka ani wytworzenie finalnego produktu – żadne narzÄ™dzie do wektoryzowania nie potrafi tego zrobić. W wyniku wektoryzacji powstanie zestaw krzywych, które bÄ™dÄ… stanowić materiaÅ‚ bazowy do dalszej pracy. - - + + Potrace interpretuje czarno–biaÅ‚e bitmapy i tworzy zestaw krzywych. Aktualnie program posiada trzy typy filtrów wejÅ›ciowych przeksztaÅ‚cajÄ…cych obrazek do formatu akceptowanego przez Potrace. - - + + Im wiÄ™cej czarnych pikseli zawiera obrazek przejÅ›ciowy, tym wiÄ™cej operacji wektoryzowania zostanie wykonanych. W przypadku wiÄ™kszej liczby przebiegów wektoryzacji zwiÄ™ksza siÄ™ użycie procesora, a także rozrasta <Å›cieżka>. Zaleca siÄ™ wykonanie najpierw kilku eksperymentów z jaÅ›niejszymi obrazkami, a nastÄ™pnie stopniowo z coraz ciemniejszymi aż do uzyskania pożądanej proporcji i zÅ‚ożonoÅ›ci Å›cieżki koÅ„cowej. - - + + Aby dokonać wektoryzacji, należy otworzyć lub zaimportować obrazek, zaznaczyć go i z menu „Ścieżka†wybrać polecenie „Wektoryzuj bitmapę…†bÄ…dź użyć skrótu klawiaturowego [ Shift+Alt+B ]. - Główne opcje okna dialogowego Wektoryzuj bitmapÄ™ - - - + Główne opcje okna dialogowego Wektoryzuj bitmapÄ™ + + + W nowo otwartym oknie dialogowym na karcie „Tryb†ukażą siÄ™ trzy dostÄ™pne opcje filtrowania: - - - + + + Brightness Cutoff - - + + Ten sposób filtrowania używa sumy koloru czerwonego, zielonego i niebieskiego, lub odcieni szaroÅ›ci piksela jako wskaźnika, które kolory należy traktować jako czarne lub biaÅ‚e. Próg może być ustawiony od 0,0 (czarny) do 1,0 (biaÅ‚y). Im wyższa wartość progu, tym mniejsza liczba pikseli bÄ™dzie uznawana za „biaÅ‚e†i obrazek przejÅ›ciowy bÄ™dzie ciemniejszy. - Oryginalny obrazek - Rozdzielenie jasnoÅ›ciWypeÅ‚nienie, brak konturu - Rozdzielenie jasnoÅ›ciKontur, brak wypeÅ‚nienia - - - - - - + Oryginalny obrazek + Rozdzielenie jasnoÅ›ciWypeÅ‚nienie, brak konturu + Rozdzielenie jasnoÅ›ciKontur, brak wypeÅ‚nienia + + + + + + Edge Detection - - + + Ten sposób filtrowania używa algorytmu wykrywania krawÄ™dzi opracowanego przez J. Canny'iego. SÅ‚uży on do szybkiego wyszukiwania izoklin – linii o podobnym kontraÅ›cie. Za pomocÄ… tego filtra zostanie utworzony obrazek przejÅ›ciowy, który bÄ™dzie wyglÄ…daÅ‚ podobnie jak obrazek oryginalny po wykonaniu rozdzielenia jasnoÅ›ci, ale bÄ™dzie zawieraÅ‚ informacje o krzywych. Ustawiony tutaj próg jasnoÅ›ci (0,0 – 1,0) bÄ™dzie decydowaÅ‚ czy piksel sÄ…siadujÄ…cy z krawÄ™dziÄ… kontrastu zostanie włączony do obrazka wyjÅ›ciowego. To ustawienie może okreÅ›lić stopieÅ„ zaciemnienia lub grubość krawÄ™dzi w obrazku wyjÅ›ciowym. - Oryginalny obrazek - Wykryta krawÄ™dźWypeÅ‚nienie, brak konturu - Wykryta krawÄ™dźKontur, brak wypeÅ‚nienia - - - - - - + Oryginalny obrazek + Wykryta krawÄ™dźWypeÅ‚nienie, brak konturu + Wykryta krawÄ™dźKontur, brak wypeÅ‚nienia + + + + + + Kwantyzacja koloru - - + + W wyniku zastosowania tego filtra zostanie utworzony obrazek przejÅ›ciowy znacznie różniÄ…cy siÄ™ od poprzednich, jednak również bardzo użyteczny. Filtr ten znajduje krawÄ™dzie w miejscach, w których zmieniajÄ… siÄ™ kolory, nawet jeÅ›li jasność i kontrast majÄ… takÄ… samÄ… wartość. Ustawiona tutaj liczba kolorów decyduje, ile bÄ™dzie kolorów wyjÅ›ciowych, jeÅ›li obrazek przejÅ›ciowy jest kolorowy. Decyduje również o tym, który piksel bÄ™dzie czarny/biaÅ‚y i czy kolor bÄ™dzie miaÅ‚ indeks parzysty czy nieparzysty. - Oryginalny obrazek - Liczba przebiegów (12 kolorów)WypeÅ‚nienie, brak konturu - Liczba przebiegów (12 kolorów)Kontur, brak wypeÅ‚nienia - - - - - + Oryginalny obrazek + Liczba przebiegów (12 kolorów)WypeÅ‚nienie, brak konturu + Liczba przebiegów (12 kolorów)Kontur, brak wypeÅ‚nienia + + + + + Należy wypróbować wszystkie trzy filtry i obserwować wyniki ich dziaÅ‚ania dla różnych typów obrazków wyjÅ›ciowych. Zawsze znajdzie siÄ™ obrazek, na którym jeden z filtrów zadziaÅ‚a lepiej niż pozostaÅ‚e. - - + + - Po wykonaniu wektoryzacji, w celu zmniejszenia liczby wÄ™złów w otrzymanej Å›cieżce, zaleca siÄ™ uruchomienie z poziomu menu „Ścieżka†polecenia „Uprość†[ Ctrl+L ]. DziÄ™ki temu Å‚atwiej bÄ™dzie edytować powstałą Å›cieżkÄ™. Oto typowa operacja wektoryzowania na przykÅ‚adowym obrazku: + Po wykonaniu wektoryzacji, w celu zmniejszenia liczby wÄ™złów w otrzymanej Å›cieżce, zaleca siÄ™ uruchomienie z poziomu menu „Ścieżka†polecenia „Uprość†[ Ctrl+L ]. DziÄ™ki temu Å‚atwiej bÄ™dzie edytować powstałą Å›cieżkÄ™. Oto typowa operacja wektoryzowania na przykÅ‚adowym obrazku: - Oryginalny obrazek - Obrazek po wektoryzacji/Wynikowa Å›cieżka(1,551 wÄ™złów) - - - - + Oryginalny obrazek + Obrazek po wektoryzacji/Wynikowa Å›cieżka(1,551 wÄ™złów) + + + + ProszÄ™ zauważyć, że otrzymana Å›cieżka posiada olbrzymiÄ… liczbÄ™ wÄ™złów. Po wykonaniu redukcji wÄ™złów otrzymujemy nastÄ™pujÄ…cy wynik: - Oryginalny obrazek - Obrazek po wektoryzacji/Uproszczona wynikowa Å›cieżka(384 wÄ™zÅ‚y) - - - - + Oryginalny obrazek + Obrazek po wektoryzacji/Uproszczona wynikowa Å›cieżka(384 wÄ™zÅ‚y) + + + + Liczba wÄ™złów w obrazku zostaÅ‚a zredukowana. Grafika jest bardziej prymitywna, ale teraz Å‚atwiej poddaje siÄ™ zmianom. W wyniku wektoryzacji nie otrzymuje siÄ™ dokÅ‚adnego odwzorowania obrazka, ale zestaw krzywych, który stanowi podstawÄ™ do dalszej obróbki. - + @@ -225,8 +225,8 @@ - - Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć + + Użyj Ctrl+strzaÅ‚ka do góry, aby przewinąć diff --git a/share/tutorials/tutorial-tracing.ru.svg b/share/tutorials/tutorial-tracing.ru.svg index 54be5b23d..bd62b1775 100644 --- a/share/tutorials/tutorial-tracing.ru.svg +++ b/share/tutorials/tutorial-tracing.ru.svg @@ -36,166 +36,166 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вниз - - ::ВЕКТОРИЗÐЦИЯ + + ::TRACING BITMAPS - - + + При помощи Inkscape можно векторизовать раÑтровое изображение, то еÑть превратить его в SVG-Ñлемент <path>. Ð’ Ñтом разделе учебника раÑÑказываетÑÑ Ð¾ том, как работает Ñта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹. - - + + - Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Inkscape иÑпользует код программы Potrace Питера Селинджера (potrace.sourceforge.net). Ð’ будущем возможно подключение других программ, но уже ÑÐµÐ¹Ñ‡Ð°Ñ Potrace вполне доÑтаточно. + Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸ Inkscape иÑпользует код программы Potrace Питера Селинджера (potrace.sourceforge.net). Ð’ будущем возможно подключение других программ, но уже ÑÐµÐ¹Ñ‡Ð°Ñ Potrace вполне доÑтаточно. - - + + Помните, что целью векторизации не ÑвлÑетÑÑ Ñоздание точной копии иÑходного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ готового продукта. Ðи одному векторизатору Ñто не под Ñилу. Ð’ÑÑ‘, что он может — Ñто дать вам набор контуров, которые вы можете иÑпользовать в Ñвоих работах. - - + + Potrace получает на входе чёрно-белые раÑтровые Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸ отдаёт на выходе набор контуров. СущеÑтвует три входных фильтра Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñходного Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð² понÑтный Ð´Ð»Ñ Potrace формат. - - + + Как правило, чем темнее пикÑелы в изображениÑÑ…, тем больше работы Ð´Ð»Ñ Potrace. Чем больше работает векторизатор, тем больше иÑпользуютÑÑ Ñ€ÐµÑурÑÑ‹ центрального процеÑÑора и тем больше опиÑание контура (Ñлемента <path>). ПоÑтому рекомендуетÑÑ Ð½Ð°Ñ‡Ð°Ñ‚ÑŒ Ñ Ð±Ð¾Ð»ÐµÐµ Ñветлых верÑий изображениÑ, поÑтепенно затемнÑÑ Ð¸Ñ… до Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼Ð¾Ð³Ð¾ ÑƒÑ€Ð¾Ð²Ð½Ñ Ð´ÐµÑ‚Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ конечного контура и пропорций. - - + + - Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð° загрузите или импортируйте изображение, выберите его и через меню выберите команду Контуры > Векторизовать раÑтр..., либо иÑпользуйте комбинацию клавиш Shift+Alt+B. + Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ‚Ð¾Ñ€Ð° загрузите или импортируйте изображение, выберите его и через меню выберите команду Контуры > Векторизовать раÑтр..., либо иÑпользуйте комбинацию клавиш Shift+Alt+B. - ОÑновные параметры диалога векторизации - - - + ОÑновные параметры диалога векторизации + + + Ð’Ñ‹ увидите три фильтра: - - - + + + Brightness Cutoff - - + + Этот фильтр проÑто иÑпользует Ñумму краÑного, зелёного и Ñинего (или оттенки Ñерого) компонентов пикÑела в качеÑтве индикатора, воÑпринимать ли его как чёрный или же как белый. Значение порога ÑркоÑти может быть задано в диапазоне от 0,0 (чёрный) до 1,0 (белый). Чем выше значение, тем меньше пикÑелов будет воÑпринÑто как «белые» и тем темнее Ñтанет изображение. - Изначальное изображение - ЯркоÑть изображениÑЗаливка без обводки - ЯркоÑть изображениÑОбводка без заливки - - - - - - + Изначальное изображение + ЯркоÑть изображениÑЗаливка без обводки + ЯркоÑть изображениÑОбводка без заливки + + + + + + Edge Detection - - + + Этот фильтр иÑпользует алгоритм Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÑ€Ð°Ñ‘Ð², придуманный Дж. Канни как ÑпоÑоб быÑтрого поиÑка изоклин и подобных контраÑтов. Этот фильтр Ñоздаёт картинку, меньше похожую на оригинал, чем результат первого фильтра, но предоÑтавлÑет информацию о кривых, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¿Ñ€Ð¸ иÑпользовании других фильтров была бы проигнорирована. Значение порога здеÑÑŒ (0,0 – 1,0) регулирует порог ÑркоÑти между Ñмежными пикÑелами, в завиÑимоÑти от которого Ñмежные пикÑелы будут или не будут ÑтановитьÑÑ Ñ‡Ð°Ñтью контраÑтного ÐºÑ€Ð°Ñ Ð¸, ÑоответÑтвенно, попадать в вывод. ФактичеÑки, Ñтот параметр определÑет темноту или толщину краÑ. - Изначальное изображение - Определение краёвЗаливка без обводки - Определение краёвОбводка без заливки - - - - - - + Изначальное изображение + Определение краёвЗаливка без обводки + Определение краёвОбводка без заливки + + + + + + Квантование цветов - - + + Результатом работы Ñтого фильтра ÑвлÑетÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, которое заметно отличаетÑÑ Ð¾Ñ‚ результата работы двух предыдущих фильтров, но при Ñтом тоже полезно. ВмеÑто того чтобы показывать изоклины ÑркоÑти или контраÑта, Ñтот фильтр ищет краÑ, где менÑетÑÑ Ñ†Ð²ÐµÑ‚, даже еÑли Ñмежные пикÑелы имеют одинаковую ÑркоÑть и контраÑÑ‚. Параметр Ñтого фильтра (количеÑтво цветов) определÑет количеÑтво цветов на выходе, как еÑли бы раÑтровое изображение было цветным. ПоÑле Ñтого фильтр определÑет чёрный Ñто пикÑел или белый в завиÑимоÑти от чётноÑти индекÑа цвета. - Изначальное изображение - Квантование (12 цветов)Заливка без обводки - Квантование (12 цветов)Обводка без заливки - - - - - + Изначальное изображение + Квантование (12 цветов)Заливка без обводки + Квантование (12 цветов)Обводка без заливки + + + + + Пользователю Ñтоит попробовать вÑе три фильтра и внимательно раÑÑмотреть Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð² результатах обработки разных изображений. Ð’Ñегда найдётÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ðµ, на котором один фильтр Ñработает лучше двух других. - - + + - ПоÑле векторизации рекомендуетÑÑ Ð²Ð¾ÑпользоватьÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹ Контур > УпроÑтить (Ctrl+L) на полученном контуре, чтобы уменьшить количеÑтво узлов. Это делает результат работы Potrace более лёгким Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. Вот пример типичной векторизации картины «Старик Ñ Ð³Ð¸Ñ‚Ð°Ñ€Ð¾Ð¹Â»: + ПоÑле векторизации рекомендуетÑÑ Ð²Ð¾ÑпользоватьÑÑ Ñ„ÑƒÐ½ÐºÑ†Ð¸ÐµÐ¹ Контур > УпроÑтить (Ctrl+L) на полученном контуре, чтобы уменьшить количеÑтво узлов. Это делает результат работы Potrace более лёгким Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ. Вот пример типичной векторизации картины «Старик Ñ Ð³Ð¸Ñ‚Ð°Ñ€Ð¾Ð¹Â»: - Изначальное изображение - Векторизованное изображение(1551 узел) - - - - + Изначальное изображение + Векторизованное изображение(1551 узел) + + + + Обратите внимание на чудовищное количеÑтво узлов. ПоÑле Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ctrl+L результат будет таким: - Изначальное изображение - Упрощённое векторизованное изображение(384 узла) - - - - + Изначальное изображение + Упрощённое векторизованное изображение(384 узла) + + + + Изображение немного грубовато, но зато теперь его значительно проще редактировать. Помните, что вам нужна не Ñ‚Ð¾Ñ‡Ð½Ð°Ñ Ð²ÐµÐºÑ‚Ð¾Ñ€Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ, а набор кривых, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ можно работать дальше. - + @@ -225,9 +225,9 @@ - + - ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх + ИÑпользуйте Ð´Ð»Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ¸ Ctrl+Ñтрелка вверх diff --git a/share/tutorials/tutorial-tracing.sk.svg b/share/tutorials/tutorial-tracing.sk.svg index bf7c7ce3f..802b68e50 100644 --- a/share/tutorials/tutorial-tracing.sk.svg +++ b/share/tutorials/tutorial-tracing.sk.svg @@ -36,166 +36,164 @@ - - Na posunutie Äalej použite Ctrl+šípka dolu + + Na posunutie Äalej použite Ctrl+šípka dolu - - ::VEKTORIZÃCIA + + ::TRACING BITMAPS - - + + Jednou z funkcií v programe Inkscape je nástroj na vektorizáciu rastrového obrázka na prvok <path> (cesta) v SVG kresbe. Tento krátky návod vám pomôže pochopiÅ¥, ako tento nástroj pracuje. - - + + - V súÄasnosti nástroj používa na vektorizáciu algoritmus Potrace (potrace.sourceforge.net) od Petra Selingera. V budúcnosti plánujeme pridanie aj Äalších vektorizaÄných programov, ale na zaÄiatok je tento nástroj viac ako postaÄujúci. + V súÄasnosti nástroj používa na vektorizáciu algoritmus Potrace (potrace.sourceforge.net) od Petra Selingera. V budúcnosti plánujeme pridanie aj Äalších vektorizaÄných programov, ale na zaÄiatok je tento nástroj viac ako postaÄujúci. - - + + Majte na pamäti, že úlohou Vektorizátora nie je reprodukovaÅ¥ originálny obrázok, ani to, aby vytvoril finálny produkt. Žiadny automatický vektorizaÄný program to nedokáže. To, Äo vedia takéto programy poskytnúť, je sada kriviek, ktoré môžete použiÅ¥ ako základ pri kreslení. - - + + Algoritmus Potrace interpretuje Äiernobielu bitmapu a vyprodukuje sadu kriviek. Pred použitím algoritmu je potrebné použiÅ¥ jeden z troch dostupných filtrov, ktoré prevedú pôvodný obrázok na nieÄo, Äo Potrace dokáže spracovaÅ¥. - - + + Vo vÅ¡eobecnosti platí, že Äím viac tmavých pixlov je v pomocnom obrázku, tým dlhÅ¡ie bude Portrace vykonávaÅ¥ vektorizáciu. DlhÅ¡ia vektorizácia znamená aj väÄÅ¡iu záťaž procesora a prvok <path> bude tiež oveľa dlhší. OdporúÄa sa, aby používateľ na zaÄiatku experimentálne nastavil svetlejší pomocný obrázok a potom ho postupne stmavoval, až kým nezíska požadované proporcie a úplnú výstupnú cestu. - - + + - Ak chcete použiÅ¥ vektorizáciu, nahrajte alebo importujte obrázok, oznaÄte ho a potom vyberte z ponuky položku Cesta > VektorizovaÅ¥ bitmapu alebo stlaÄte Shift+Alt+B. + Ak chcete použiÅ¥ vektorizáciu, nahrajte alebo importujte obrázok, oznaÄte ho a potom vyberte z ponuky položku Cesta > VektorizovaÅ¥ bitmapu alebo stlaÄte Shift+Alt+B. - hlavné možnosti v dialógu vektorizácie - - - + hlavné možnosti v dialógu vektorizácie + + + Uvidíte tri filtre, ktoré si môžete vybraÅ¥: - - - + + + - Brightness Cutoff - + Orezanie jasu - - + + Tento filter používa iba súÄet odtieňov Äervenej, zelenej a modrej (alebo odtieňov Å¡edej) pixla na to, aby urÄil, Äi pixel bude priradený k Äiernej alebo bielej farbe. Prah môže byÅ¥ nastavený od 0,0 (Äierna) po 1,0 (biela). Vyššia hodnota prahu zníži poÄet pixlov priradených k „bielej“ farbe a spôsobí to, že pomocný obrázok bude tmavší. - Pôvodný obrázok - Orezanie jasuVýplň bez Å¥ahu - Orezanie jasuŤah bez výplne - - - - - - + Pôvodný obrázok + Orezanie jasuVýplň bez Å¥ahu + Orezanie jasuŤah bez výplne + + + + + + - Edge Detection - + Detekcia hrán - - + + Tento filter používa algoritmus na detekciu hrán od J. Cannyho, ktorý dokáže rýchlo nájsÅ¥ rozhranie medzi plochami s podobným kontrastom. Vytvára pomocný obrázok, ktorý je veľmi podobný tomu, ktorý vyprodukuje filter Orezanie hrán, ale poskytuje viac informácií o krivkách, ktoré by boli inak ignorované. Nastavenie prahu pri tomto filtri (0,0 – 1,0) upravuje rozhranie jasu, ktoré urÄuje, Äi pixel susediaci s hranicou kontrastov bude zahrnutý do výstupu. Toto nastavenie môže upravovaÅ¥ hrúbku a sýtosÅ¥ výslednej Äiary. - Pôvodný obrázok - Detekované hranyVýplň bez Å¥ahu - Detekované hranyŤah bez výplne - - - - - - + Pôvodný obrázok + Detekované hranyVýplň bez Å¥ahu + Detekované hranyŤah bez výplne + + + + + + Prerozdelenie farieb - - + + Tento filter ako výsledok vytvorí pomocný obrázok, ktorý sa podstatne líši od predchádzajúcich dvoch, ale je aj tak veľmi potrebný. Miesto toho, aby vytváral oddeľujúce Äiary medzi plochami s rozdielnym jasom alebo kontrastom, nájde okraje farebných plôch, a to aj takých dvoch farieb, ktoré majú zhodný jas a kontrast. Nastavenie PoÄet farieb urÄuje, koľko výstupných farieb bude vytvorených v prípade, že bitmapa je farebná. To, Äi bude farba priradená k bielej alebo Äiernej, sa rozhodne podľa toho, Äi index farby je párny alebo nepárny. - Pôvodný obrázok - Prerozdelenie (12 farieb)Výplň bez Å¥ahu - Prerozdelenie (12 farieb)Ťah bez výplne - - - - - + Pôvodný obrázok + Prerozdelenie (12 farieb)Výplň bez Å¥ahu + Prerozdelenie (12 farieb)Ťah bez výplne + + + + + Môžete vyskúšaÅ¥ vÅ¡etky tri filtre a preskúmaÅ¥ rozdielnosÅ¥ typov výstupov s rôznymi typmi vstupných obrázkov. Pri každom obrázku zistíte, že jeden z filtrov sa hodí viac ako tie ostatné. - - + + - Po vektorizácii sa odporúÄa, aby používateľ skúsil zredukovaÅ¥ poÄet uzlov v ceste pomocou položky Cesta > ZjednoduÅ¡iÅ¥ alebo stlaÄením (Ctrl+L). To môže významne zjednoduÅ¡iÅ¥ upravovanie výstupu algoritmu Potrace. Tu je typický príklad vektorizácie obrazu Starec hrajúci na gitare: + Po vektorizácii sa odporúÄa, aby používateľ skúsil zredukovaÅ¥ poÄet uzlov v ceste pomocou položky Cesta > ZjednoduÅ¡iÅ¥ alebo stlaÄením (Ctrl+L). To môže významne zjednoduÅ¡iÅ¥ upravovanie výstupu algoritmu Potrace. Tu je typický príklad vektorizácie obrazu Starec hrajúci na gitare: - Pôvodný obrázok - Vektorizovaný obrázok(1 551 uzlov) - - - - + Pôvodný obrázok + Vektorizovaný obrázok(1 551 uzlov) + + + + VÅ¡imnite si nadmerný poÄet uzlov v ceste. Po stlaÄení Ctrl+L sa poÄet zvyÄajne zníži: - Pôvodný obrázok - Vektorizovaný obrázok - ZjednoduÅ¡enie(384 uzlov) - - - - + Pôvodný obrázok + Vektorizovaný obrázok - ZjednoduÅ¡enie(384 uzlov) + + + + Reprezentácia je trochu skreslená a drsná, ale kresba sa bude oveľa ľahÅ¡ie upravovaÅ¥. Nezabudnite, že to, Äo sme chceli dosiahnuÅ¥, nie je presné vykreslenie obrázka, ale sada kriviek, ktoré môžeme použiÅ¥ pri kreslení. - + @@ -225,8 +223,8 @@ - - Na posunutie späť použite Ctrl+šípka hore + + Na posunutie späť použite Ctrl+šípka hore diff --git a/share/tutorials/tutorial-tracing.sl.svg b/share/tutorials/tutorial-tracing.sl.svg index 640a8f6fa..b49a2d074 100644 --- a/share/tutorials/tutorial-tracing.sl.svg +++ b/share/tutorials/tutorial-tracing.sl.svg @@ -36,166 +36,166 @@ - - Uporabite Ctrl+puÅ¡Äica navzdol za drsenje + + Uporabite Ctrl+puÅ¡Äica navzdol za drsenje - - ::PRERISOVANJE + + ::TRACING BITMAPS - - + + Inkscape vsebuje tudi orodje za prerisovanje rastrskih slik v <path> elemente vaÅ¡ih SVG risb. Ta vodiÄ vam bo pomagal pri spoznavanju tega orodja. - - + + - Ta verzija Inkscapa uporablja prerisovalni rastrski pogon Potrace (potrace.sourceforge.net), ki ga je napisal Peter Selinger. V prihodnosti bo Inkscape verjetno podpiral tudi druge prerisovalne programe, zaenkrat pa to orodje popolnoma zadostuje naÅ¡im potrebam. + Ta verzija Inkscapa uporablja prerisovalni rastrski pogon Potrace (potrace.sourceforge.net), ki ga je napisal Peter Selinger. V prihodnosti bo Inkscape verjetno podpiral tudi druge prerisovalne programe, zaenkrat pa to orodje popolnoma zadostuje naÅ¡im potrebam. - - + + Vedeti morate, da orodje za prerisovanje ni namenjeno toÄni reprodukciji originalne slike; prav tako ni namenjeno izdelavi konÄnih izdelkov, saj to ni naloga orodij za prerisovanje. Prerisovalna orodja so namenjena samodejnemu ustvarjanju skupka krivulj - nekakÅ¡ne skice, ki jo lahko uporabite kot osnovo za vaÅ¡ izdelek. - - + + Potrace predela Ärnobelo rastrsko sliko v skupek krivulj. Za Potrace trenutno obstajajo trije tipi filtrov za uvažanje, ki rastrsko sliko spremenijo v Potracu uporabne podatke. - - + + NaÄeloma velja, da temnejÅ¡i kot je raster, boljÅ¡e rezultate bo pokazal Potrace. VeÄ prerisovanja pomeni veÄjo obremenitev za procesor raÄunalnika in <path> element bo precej veÄji. Najbolje je, da najprej eksperimentirate z bolj svetlimi slikami, nato pa postopoma preidete na temnejÅ¡e ter s tem dosežete željeno kompleksnost dobljene poti. - - + + - Prerisovanje uporabite tako, da naložite ali uvozite sliko, jo oznaÄite in izberete Pot > PreriÅ¡i raster ali pritisnete Shift+Alt+B. + Prerisovanje uporabite tako, da naložite ali uvozite sliko, jo oznaÄite in izberete Pot > PreriÅ¡i raster ali pritisnete Shift+Alt+B. - Glavne možnosti pogovornega okna PreriÅ¡i - - - + Glavne možnosti pogovornega okna PreriÅ¡i + + + Na voljo so vam trije filtri: - - - + + + Brightness Cutoff - - + + Ta filter uporabi seÅ¡tevek vrednosti rdeÄe, zelene in modre (oziroma odtenkov sive) barve posamezne toÄke za orientacijo, ali naj posamezno toÄko smatra kot Ärno ali belo. Prag lahko nastavite od 0,0 (Ärna) do 1,0 (bela). ViÅ¡ji kot je prag, manjÅ¡e je Å¡tevilo toÄk, ki jih orodje prepozna kot \u201cbele\u201d, in vmesna slika bo postala temnejÅ¡a. - Izvorna slika - Prag svetlostiZapolni, brez poteze - Prag svetlostiPoteza, brez polnila - - - - - - + Izvorna slika + Prag svetlostiZapolni, brez poteze + Prag svetlostiPoteza, brez polnila + + + + + + Edge Detection - - + + Ta filter za hitro zaznavanje izoklin podobnega kontrasta uporablja algoritem za zaznavanje robov, ki ga je razvil J. Canny. Rezultat tega postopka je vmesna slika, ki bo manj podobna originalu kot pa vmesna slika, ki bi jo naredil filter Prag svetlosti, vendar pa bo nudila informacije o krivuljah, ki jih drugaÄe ne bi dobili. Prag pri tem filtru (0,0 \u2013 1,0) nastavlja prag svetlosti, ki doloÄa, ali bo toÄka ob kontrastnem robu vkljuÄena v rezultat ali ne. Ta izbira doloÄa temnost in debelino robov vmesne poti. - Izvorna slika - Rob zaznanZapolni, brez poteze - Rob zaznanPoteza, brez polnila - - - - - - + Izvorna slika + Rob zaznanZapolni, brez poteze + Rob zaznanPoteza, brez polnila + + + + + + Kvantizacija barv - - + + Rezultat tega filtra je vmesna slika, ki je precej razliÄna od ostalih dveh, vendar je zelo uporabna. Namesto izoklin, svetlosti ali kontrasta ta postopek najde robove, kjer se spremeni barva, celo pri enaki svetlosti ali kontrastu. Nastavitev Å tevilo barv doloÄa koliko barv bi bilo v izhodni sliki, Äe bi bil vmesni raster v barvah. ÄŒrna oz. bela se doloÄa na podlagi lihega ali sodega indeksa. - Izvorna slika - Kvantizacija (12 barv)Zapolni, brez poteze - Kvantizacija (12 barv)Poteza, brez polnila - - - - - + Izvorna slika + Kvantizacija (12 barv)Zapolni, brez poteze + Kvantizacija (12 barv)Poteza, brez polnila + + + + + Preizkusite vse tri filtre in opazujte razliÄne rezultate, ki jih dajo razliÄni tipi vhodnih slik. Za nekatere slike je najbolj primeren en filter, za druge pa kak drug. - - + + - Ko je proces prerisovanja konÄan, na dobljeni poti preizkusite tudi ukaz Pot > Poenostavi (Ctrl+L), in tako zmanjÅ¡ajte Å¡tevilo vozliÅ¡Ä. To bo dobljeno pot naredilo lažjo za urejanje. Tu je tipiÄen preris Starca, ki igra kitaro. + Ko je proces prerisovanja konÄan, na dobljeni poti preizkusite tudi ukaz Pot > Poenostavi (Ctrl+L), in tako zmanjÅ¡ajte Å¡tevilo vozliÅ¡Ä. To bo dobljeno pot naredilo lažjo za urejanje. Tu je tipiÄen preris Starca, ki igra kitaro. - Izvorna slika - Prerisana slika / Izhodna pot(1.551 vozliÅ¡Ä) - - - - + Izvorna slika + Prerisana slika / Izhodna pot(1.551 vozliÅ¡Ä) + + + + Poglejte veliko Å¡tevilo vozliÅ¡Ä na poti. Po ukazu Pot > Poenostavi bo tipiÄen rezultat izgledal tako: - Izvorna slika - Prerisana slika / Izhodna pot - poenostavljena(384 vozliÅ¡Ä) - - - - + Izvorna slika + Prerisana slika / Izhodna pot - poenostavljena(384 vozliÅ¡Ä) + + + + Poenostavljena pot je malce bolj približna in groba, vendar je slika zato precej enostavnejÅ¡a za urejanje. Zapomnite si tudi, da to ni kopija slike, temveÄ le skupek krivulj, ki so vam lahko v pomoÄ pri risanju. - + @@ -225,8 +225,8 @@ - - Uporabite Ctrl+puÅ¡Äica navzgor za drsenje + + Uporabite Ctrl+puÅ¡Äica navzgor za drsenje diff --git a/share/tutorials/tutorial-tracing.svg b/share/tutorials/tutorial-tracing.svg index 0967b03dc..56271b980 100644 --- a/share/tutorials/tutorial-tracing.svg +++ b/share/tutorials/tutorial-tracing.svg @@ -40,10 +40,10 @@ Use Ctrl+down arrow to scroll - - ::TRACING + + ::TRACING BITMAPS - + @@ -53,7 +53,7 @@ into a <path> element for your SVG drawing. These short notes should help you become acquainted with how it works. - + @@ -63,7 +63,7 @@ In the future we expect to allow alternate tracing programs; for now, however, t tool is more than sufficient for our needs. - + @@ -74,7 +74,7 @@ that. What it does is give you a set of curves which you can use as a resource f drawing. - + @@ -84,7 +84,7 @@ we currently have three types of input filters to convert from the raw image to something that Potrace can use. - + @@ -96,7 +96,7 @@ with lighter intermediate images first, getting gradually darker to get the desi proportion and complexity of the output path. - + @@ -105,9 +105,9 @@ proportion and complexity of the output path. and select the Path > Trace Bitmap item, or Shift+Alt+B. - Main options within the Trace dialog - - + Main options within the Trace dialog + + @@ -115,8 +115,8 @@ and select the Path > Trace BitmapThe user will see the three filter options available: - - + + @@ -124,7 +124,7 @@ and select the Path > Trace BitmapBrightness Cutoff - + @@ -136,14 +136,14 @@ pixels that will be considered to be “whiteâ€, and the intermediate image wit become darker. - Original Image - Brightness ThresholdFill, no Stroke - Brightness ThresholdStroke, no Fill - - - - - + Original Image + Brightness ThresholdFill, no Stroke + Brightness ThresholdStroke, no Fill + + + + + @@ -151,7 +151,7 @@ become darker. Edge Detection - + @@ -165,14 +165,14 @@ contrast edge will be included in the output. This setting can adjust the darkn thickness of the edge in the output. - Original Image - Edge DetectedFill, no Stroke - Edge DetectedStroke, no Fill - - - - - + Original Image + Edge DetectedFill, no Stroke + Edge DetectedStroke, no Fill + + + + + @@ -180,7 +180,7 @@ thickness of the edge in the output. Color Quantization - + @@ -193,13 +193,13 @@ would be if the intermediate bitmap were in color. It then decides black/white whether the color has an even or odd index. - Original Image - Quantization (12 colors)Fill, no Stroke - Quantization (12 colors)Stroke, no Fill - - - - + Original Image + Quantization (12 colors)Fill, no Stroke + Quantization (12 colors)Stroke, no Fill + + + + @@ -209,7 +209,7 @@ different types of input images. There will always be an image where one works than the others. - + @@ -220,11 +220,11 @@ make the output of Potrace much easier to edit. For example, here is a typical of the Old Man Playing Guitar: - Original Image - Traced Image / Output Path(1,551 nodes) - - - + Original Image + Traced Image / Output Path(1,551 nodes) + + + @@ -233,11 +233,11 @@ of the Old Man Playing Guitar: this is a typical result: - Original Image - Traced Image / Output Path - Simplified(384 nodes) - - - + Original Image + Traced Image / Output Path - Simplified(384 nodes) + + + @@ -247,7 +247,7 @@ and easier to edit. Keep in mind that what you want is not an exact rendering o image, but a set of curves that you can use in your drawing. - + diff --git a/share/tutorials/tutorial-tracing.vi.svg b/share/tutorials/tutorial-tracing.vi.svg index 2c90a4484..deab16a41 100644 --- a/share/tutorials/tutorial-tracing.vi.svg +++ b/share/tutorials/tutorial-tracing.vi.svg @@ -36,166 +36,166 @@ - - Use Ctrl+down arrow to scroll + + Use Ctrl+down arrow to scroll - - ::Äá»’ LẠI + + ::TRACING BITMAPS - - + + Inkscape cung cấp má»™t công cụ để đồ lại các ảnh bitmap thành má»™t <đưá»ng nét> thành phần trong bản vẽ SVG. Äây là khả năng chuyển đổi má»™t ảnh bitmap thành ảnh vector tương ứng. Phần này sẽ hướng dẫn bạn cách sá»­ dụng chức năng này. - - + + - Hiện nay, Inkscape sá»­ dụng bá»™ vẽ lại ảnh Potrace (potrace.sourceforge.net) viết bởi Peter Selinger. Trong tương lai Inkscape có thể sá»­ dụng má»™t bá»™ đồ lại tốt hÆ¡n; nhưng hiện nay, công cụ này vẫn đáp ứng được nhu cầu cá»§a chúng ta. + Hiện nay, Inkscape sá»­ dụng bá»™ vẽ lại ảnh Potrace (potrace.sourceforge.net) viết bởi Peter Selinger. Trong tương lai Inkscape có thể sá»­ dụng má»™t bá»™ đồ lại tốt hÆ¡n; nhưng hiện nay, công cụ này vẫn đáp ứng được nhu cầu cá»§a chúng ta. - - + + Xin lưu ý rằng mục đích cá»§a công cụ đồ lại không phải là tái tạo chính xác ảnh gốc, hoặc tạo ra 1 sản phẩm hoàn chỉnh. Không có công cụ chuyển đổi tá»± động nào có thể làm được Ä‘iá»u đó! Nó chỉ cung cấp cho bạn má»™t số đưá»ng nét chính để bạn có thể tham khảo và hoàn thiện bản vẽ cá»§a mình mà thôi. - - + + Trước tiên, bá»™ vẽ lại ảnh Potrace biến đổi ảnh bitmap vá» dạng trung gian có 2 màu Ä‘en và trắng, rồi chuyển đổi ảnh Ä‘en trắng đó thành các đưá»ng nét SVG. Potrace cung cấp cho ta 3 bá»™ lá»c để chuyển đổi ảnh bitmap thành ảnh trung gian. - - + + Thông thưá»ng ảnh trung gian càng có nhiá»u màu tối, đưá»ng nét thu được càng phức tạp và chứa nhiá»u đưá»ng nét thành phần hÆ¡n. Khi ảnh cần đồ lại phức tạp, thá»i gian CPU cần để xá»­ lý cÅ©ng tăng lên, và <đưá»ng nét đầu ra> cÅ©ng lá»›n hÆ¡n. Do vậy, bạn nên thá»­ nghiệm vá»›i ảnh bitmap có nhiá»u màu sáng trước, rồi tăng dần độ tối để thu được nét có độ phức tạp hợp lý. - - + + - Trước hết, hãy mở má»™t ảnh bitmap, chá»n nó, rồi chá»n lệnh ÄÆ°á»ng nét > Äồ lại ảnh bitmap, hoặc Shift+Alt+B. + Trước hết, hãy mở má»™t ảnh bitmap, chá»n nó, rồi chá»n lệnh ÄÆ°á»ng nét > Äồ lại ảnh bitmap, hoặc Shift+Alt+B. - Main options within the Trace dialog - - - + Main options within the Trace dialog + + + Ta có 3 bá»™ lá»c sau: - - - + + + Brightness Cutoff - - + + Bá»™ lá»c này dùng tín hiệu độ sáng, được tính bằng cách cá»™ng 3 tín hiệu màu Ä‘á», xanh da trá»i và xanh lá cây lại, rồi phân tích xem mức đó được đặt thành màu trắng hay màu Ä‘en bằng cách so sánh vá»›i 1 ngưỡng tín hiệu được chỉ định. Ngưỡng này có giá trị từ 0.0 (tương ứng màu Ä‘en) đến 1.0 (tương ứng màu trắng) và được thiết lập qua ô Ngưỡng. Ngưỡng càng cao thì càng ít pixel được coi là màu trắng, và ảnh trung gian sẽ tối hÆ¡n. - Ảnh gốc - Ngưỡng sángTô màu, không có nét - Ngưỡng sángCó nét, không Màu tô - - - - - - + Ảnh gốc + Ngưỡng sángTô màu, không có nét + Ngưỡng sángCó nét, không Màu tô + + + + + + Edge Detection - - + + Bá»™ lá»c này dùng thuật toán phát hiện cạnh dá»±a vào độ tương phản được viết bởi J. Canny. Bá»™ lá»c này tạo ra ảnh trung gian khác hẳn vá»›i ảnh được tạo bởi bá»™ lá»c Ngưỡng độ sáng, nhưng cÅ©ng cung cấp các thông tin đưá»ng nét mà những bá»™ lá»c khác thưá»ng bá» qua. Giá trị trong ô Ngưỡng ở đây (0.0 đến 1.0) là ngưỡng sáng tương phản giữa các Ä‘iểm ảnh liá»n ká» nhau. Tất cả những pixel có độ tương phản gần bằng 0 sẽ được kết hợp lại thành 1 nét trong tài liệu. Bằng cách Ä‘iá»u chỉnh giá trị Ngưỡng, bạn có thể Ä‘iá»u chỉnh được độ tối hoặc độ đậm cá»§a cạnh được tìm ra. - Ảnh gốc - Phát hiện cạnhTô màu, không có nét - Phát hiện cạnhCó nét, không Màu tô - - - - - - + Ảnh gốc + Phát hiện cạnhTô màu, không có nét + Phát hiện cạnhCó nét, không Màu tô + + + + + + Lượng tá»­ hoá màu - - + + Bá»™ lá»c này cho đầu ra rất khác so vá»›i 2 bá»™ lá»c kia, nhưng lại rất hữu ích. Thay vì tạo ra các nét dá»±a trên sá»± khác biệt vỠđộ sáng hay độ tương phản, bá»™ lá»c này dá»±a vào sá»± thay đổi màu sắc, ngay cả khi độ sáng và tương phản là như nhau. Nó quy đổi nhiá»u màu gần giống nhau trong ảnh bitmap thành 1 màu trên ảnh trung gian, và sau đó chuyển má»—i màu trung gian thành 1 nét con. Giá trị trong ô Màu chỉ định số màu đã được lượng tá»­ hoá trên ảnh trung gian. Tiếp đó nó quyết định xem màu đó là Ä‘en hay trắng dá»±a vào chỉ số cá»§a màu là chẵn hay lẻ. - Ảnh gốc - Lượng tá»­ hoá (12 màu)Tô màu, không có nét - Lượng tá»­ hoá (12 màu)Có nét, không Màu tô - - - - - + Ảnh gốc + Lượng tá»­ hoá (12 màu)Tô màu, không có nét + Lượng tá»­ hoá (12 màu)Có nét, không Màu tô + + + + + Bạn nên thá»­ nghiệm cả 3 bá»™ lá»c nhiá»u lần, và quan sát sá»± khác biệt giữa chúng. Luôn luôn có trưá»ng hợp bá»™ lá»c này làm việc tốt hÆ¡n 2 bá»™ lá»c còn lại. - - + + - Sau khi vẽ lại nét, bạn cÅ©ng nên dùng chức năng đơn giản hóa các đưá»ng nét bằng lệnh ÄÆ°á»ng nét > ÄÆ¡n giản hoá (Ctrl+L) nhằm giảm số nút trong nét thu được để dá»… sá»­a lại nó hÆ¡n. Ví dụ, dưới đây là má»™t ảnh được tạo ra khi vẽ lại bức Ông già chÆ¡i Guitar cá»§a Picasso: + Sau khi vẽ lại nét, bạn cÅ©ng nên dùng chức năng đơn giản hóa các đưá»ng nét bằng lệnh ÄÆ°á»ng nét > ÄÆ¡n giản hoá (Ctrl+L) nhằm giảm số nút trong nét thu được để dá»… sá»­a lại nó hÆ¡n. Ví dụ, dưới đây là má»™t ảnh được tạo ra khi vẽ lại bức Ông già chÆ¡i Guitar cá»§a Picasso: - Ảnh gốc - Ảnh đã đồ lại / Nét đưa ra(1,551 nút) - - - - + Ảnh gốc + Ảnh đã đồ lại / Nét đưa ra(1,551 nút) + + + + Xin lưu ý số lượng rất lá»›n các nút trong nét vẽ. Sau khi nhấn Ctrl+L, đây là kết quả thu được: - Ảnh gốc - Ảnh đã đồ lại / Nét đầu ra - Äã đơn giản hoá(384 nút) - - - - + Ảnh gốc + Ảnh đã đồ lại / Nét đầu ra - Äã đơn giản hoá(384 nút) + + + + Hình thu được chỉ tương đối so vá»›i ảnh ban đầu, nhưng bạn lại có thể dá»… chỉnh sá»­a lại nó. Xin ghi nhá»› rằng đây không phải là kết quả cuối cùng, mà chỉ là những nét sưá»n để bạn tiếp tục hoàn thiện bản vẽ cá»§a mình. - + @@ -225,8 +225,8 @@ - - Use Ctrl+up arrow to scroll + + Use Ctrl+up arrow to scroll diff --git a/share/tutorials/tutorial-tracing.zh_TW.svg b/share/tutorials/tutorial-tracing.zh_TW.svg index 10a26e7cd..e8cdeecf6 100644 --- a/share/tutorials/tutorial-tracing.zh_TW.svg +++ b/share/tutorials/tutorial-tracing.zh_TW.svg @@ -50,150 +50,150 @@ Inkscape 的特點之一就是有工具能將點陣圖æç¹ªæˆ <路徑> 元件作為 SVG 圖畫。這些簡短的說明應該能幫助你熟悉它的用法。 - + ç›®å‰ Inkscape 採用 Potrace 點陣圖æç¹ªå¼•擎 (potrace.sourceforge.net) 其作者為 Peter Selinger。我們期望將來有候補的æç¹ªç¨‹å¼ï¼›ä¸éŽï¼Œç¾åœ¨é€™å€‹å„ªç§€çš„工具已經能大大滿足我們的需求。 - + è¨˜ä½æç¹ªçš„ç›®çš„ä¸¦éžä»¿é€ å‡ºåŽŸå§‹åœ–åƒçš„精確複製å“ï¼›ä¹Ÿä¸æ˜¯åˆ»æ„打造一個最終作å“。沒有自動æç¹ªç¨‹å¼å¯ä»¥åšåˆ°é‚£æ¨£ã€‚它能åšçš„æ˜¯çµ¦ä½ ä¸€çµ„æ›²ç·šä½œç‚ºç´ ææ‡‰ç”¨åˆ°ä½ çš„創作中。 - + Potrace å¯è©®é‡‹ä¸€å¹…é»‘ç™½é»žé™£åœ–ä¸¦ç”¢ç”Ÿä¸€çµ„æ›²ç·šã€‚ç›®å‰æˆ‘們有三種類型的輸入濾é¡å¯å°‡åŽŸæœ¬åœ–åƒè½‰æ›æˆ Potrace å¯ä½¿ç”¨çš„æ±è¥¿ã€‚ - + ä¸€èˆ¬ä¾†èªªä¸­é–“é»žé™£åœ–ä¸­å«æœ‰è¼ƒå¤šçš„æš—色åƒç´ ï¼Œ Potrace 會實行更多次的æç¹ªå‹•作。當æç¹ªçš„æ¬¡æ•¸å¢žåŠ æ™‚ï¼Œæœƒéœ€è¦æ›´å¤šçš„ CPU 時間,且產生的 <路徑> 元件也會大很多。建議使用者先試驗é¡è‰²è¼ƒäº®çš„ä¸­é–“é»žé™£åœ–ï¼Œå†æ…¢æ…¢åœ°æ›æˆé¡è‰²è¼ƒæš—的以得到想è¦çš„輸出路徑比例和複雜性。 - + 開始使用æç¹ªåŠŸèƒ½ï¼Œè¼‰å…¥æˆ–åŒ¯å…¥ä¸€å€‹åœ–åƒï¼Œé¸å–å®ƒä¸¦é¸æ“‡ 路徑 > æç¹ªé»žé™£åœ– 項目,或者直接按 Shift+Alt+B。 - æç¹ªå°è©±çª—的主è¦é¸é … - - + æç¹ªå°è©±çª—的主è¦é¸é … + + 這時會看到三種å¯ç”¨çš„æ¿¾é¡é¸é …: - - + + 亮度界é™å€¼ - + 這個僅僅使用åƒç´ çš„紅色ã€ç¶ è‰²ã€è—色 (或ç°åº¦) 的總和作為判定哪一個為黑或白的指標。臨界值å¯è¨­å®šç‚º 0.0 (黑色) 到 1.0 (白色)。設定較高的臨界值,åƒç´ æ•¸é‡å°‘æ–¼è‡¨ç•Œå€¼çš„æœƒåˆ¤å®šç‚ºç™½è‰²ï¼Œè€Œä¸­é–“å½±åƒæœƒè®Šå¾—較暗。 - åŽŸå§‹åœ–åƒ - 亮度臨界值填色,無邊框 - 亮度臨界值邊框,無填色 - - - - - + åŽŸå§‹åœ–åƒ + 亮度臨界值填色,無邊框 + 亮度臨界值邊框,無填色 + + + + + é‚Šç·£åµæ¸¬ - + 這個使用 J. Canny ç™¼æ˜Žçš„é‚Šç·£åµæ¸¬ç®—法作為快速發ç¾ç›¸ä¼¼å°æ¯”的等斜線的方法。這個產生的中間點陣圖看起來比使用亮度臨界值的效果還ä¸åƒåŽŸå§‹åœ–åƒï¼Œä½†æ˜¯å¾ˆå¯èƒ½æœƒæä¾›å¦ä¸€å€‹æ–¹å¼è¢«å¿½ç•¥çš„æ›²ç·šè³‡è¨Šã€‚這裡設定的臨界值 (0.0 – 1.0) å¯èª¿æ•´è¼¸å‡ºçµæžœä¸­ç›¸é„°åƒç´ æ˜¯å¦é”åˆ°é‚Šç·£å·®ç•°çš„äº®åº¦è‡¨ç•Œå€¼ã€‚é€™å€‹è¨­å®šèƒ½èª¿æ•´è¼¸å‡ºçµæžœä¸­é‚Šç·£çš„æ˜Žæš—æˆ–粗細。 - åŽŸå§‹åœ–åƒ - 嵿¸¬é‚Šç·£å¡«è‰²ï¼Œç„¡é‚Šæ¡† - 嵿¸¬é‚Šç·£é‚Šæ¡†ï¼Œç„¡å¡«è‰² - - - - - + åŽŸå§‹åœ–åƒ + 嵿¸¬é‚Šç·£å¡«è‰²ï¼Œç„¡é‚Šæ¡† + 嵿¸¬é‚Šç·£é‚Šæ¡†ï¼Œç„¡å¡«è‰² + + + + + é¡è‰²é‡åŒ– - + 這個濾é¡çš„æ•ˆæžœæœƒç”¢ç”Ÿä¸€å€‹ä¸åŒæ–¼å…¶ä»–兩種濾é¡çš„中間影åƒï¼Œä½†æ˜¯éžå¸¸æœ‰ç”¨ã€‚é€™å€‹æ¿¾é¡æœƒå°‹æ‰¾é¡è‰²è®ŠåŒ–的邊緣å³ä½¿åœ¨åŒç­‰äº®åº¦å’Œå°æ¯”ä¸‹ï¼Œè€Œä¸æ˜¯é¡¯ç¤ºäº®åº¦æˆ–å°æ¯”的等斜線。如果中間點陣圖是彩色的,é¡è‰²æ•¸ç›®çš„設定值會決定有多少種輸出é¡è‰²ã€‚還會決定黑色/ç™½è‰²æ˜¯å¦æœ‰å¶æ•¸æˆ–奇數索引。 - åŽŸå§‹åœ–åƒ - é‡åŒ– (12 種é¡è‰²)填色,無邊框 - é‡åŒ– (12 種é¡è‰²)邊框,無填色 - - - - + åŽŸå§‹åœ–åƒ + é‡åŒ– (12 種é¡è‰²)填色,無邊框 + é‡åŒ– (12 種é¡è‰²)邊框,無填色 + + + + 使用者應該嘗試全部三種濾é¡ï¼Œä¸¦ä¸”è§€å¯Ÿå°æ–¼ä¸åŒé¡žåž‹çš„輸入圖åƒç”¢ç”Ÿæ•ˆæžœçš„差異。總有æŸäº›åœ–片用其中一種濾é¡çš„æ•ˆæžœæ¯”其他兩種好。 - + æç¹ªå¾Œï¼Œå»ºè­°ä½¿ç”¨è€…在輸出路徑上試著用 路徑 > 簡化 (Ctrl+L) 以減少節點數。這樣會讓 Potrace çš„è¼¸å‡ºçµæžœæ›´å®¹æ˜“ç·¨è¼¯ã€‚ä¾‹å¦‚ï¼Œä¸‹é¢æœ‰ä¸€å¹…「è€äººå½ˆå‰ä»–ã€çš„典型æç¹ªï¼š - åŽŸå§‹åœ–åƒ - æç¹ªåœ–åƒ / 輸出路徑(1,551 個節點) - - - + åŽŸå§‹åœ–åƒ + æç¹ªåœ–åƒ / 輸出路徑(1,551 個節點) + + + 注æ„路徑中有é¾å¤§çš„節點數é‡ã€‚按 Ctrl+L 之後,這是典型的效果: - åŽŸå§‹åœ–åƒ - æç¹ªåœ–åƒ / 輸出路徑 - 已簡化(384 個節點) - - - + åŽŸå§‹åœ–åƒ + æç¹ªåœ–åƒ / 輸出路徑 - 已簡化(384 個節點) + + + 這表示有點近似和粗造,但是圖畫愈簡單愈容易編輯。記ä½ä½ å¾—åˆ°çš„ä¸æ˜¯åœ–åƒçš„精確æå¯«ï¼Œä½†ä½ å¯ä»¥ä½¿ç”¨é€™ä¸€çµ„曲線到你的繪畫中。 - + -- cgit v1.2.3 From 7d4d7564bfb77d2e9ce7b59c909e5ed5db3bb19b Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Sat, 27 Aug 2016 14:58:11 +0200 Subject: [Bug #1486403] Updating K&M reference for English (translations already updated). Fixed bugs: - https://launchpad.net/bugs/1486403 (bzr r15080) --- doc/keys.en.html | 550 +++++++++++++++++++++++++++---------------------------- 1 file changed, 270 insertions(+), 280 deletions(-) diff --git a/doc/keys.en.html b/doc/keys.en.html index 75ca30b3e..e19338625 100644 --- a/doc/keys.en.html +++ b/doc/keys.en.html @@ -11,21 +11,20 @@

    This document describes the default keyboard and mouse shortcuts of Inkscape, corresponding to the -share/keys/default.xml file in Inkscape distribution. Most (but not all) of these keys -are configurable by the user; see the default.xml file for details on how to do that.

    +share/keys/default.xml file in your Inkscape installation. Some of the keyboard shortcuts may not be available for non-US keyboard layouts, but most (not all) of these shortcuts are configurable by the user. You can create custom shortcuts and load custom keyboard shortcut files in the Inkscape Preferences, or by following the instructions in the default.xml file.

    Unless noted otherwise, keypad keys (such as arrows, Home, End, +, -, digits) are supposed to work the same as corresponding regular keys. If you have a new shortcut idea, please contact the developers (by writing to the devel mailing list -or by submitting an -RFE).

    +or by submitting a +feature request).

    @@ -48,7 +47,7 @@ RFE).

  • - Controls bar + Tool controls bar
  • - Node tool + Node tool
  • - Tweak tool + Tweak tool
  • - Zoom tool + Zoom tool
  • - Measure tool + Measure tool
  • - Rectangle tool + Rectangle tool
  • - 3D box tool + 3D box tool
  • - Ellipse tool + Ellipse tool
  • - Star tool + Star tool
  • - Spiral tool + Spiral tool
  • - Pencil tool + Pencil tool
  • - Pen (Bezier) tool + Pen (Bezier) tool
  • - Calligraphy tool + Calligraphy tool
  • - Text tool + Text tool
  • - Spray tool + Spray tool
  • - Eraser tool + Eraser tool
  • - Paint Bucket + Paint Bucket
  • - Gradient tool + Gradient tool
  • - Dropper tool + Dropper tool
  • @@ -891,7 +887,7 @@ RFE).

    +D
    @@ -1116,7 +1112,7 @@ RFE).

    - measure distance and angle between the start point and the cursor + 測é‡èµ·å§‹é»žå’Œæ¸¸æ¨™ä¹‹é–“çš„è·é›¢å’Œè§’度
    - set base of angle measurement to cursor position + 設定測é‡åˆ°æ¸¸æ¨™ä½ç½®çš„角度基準
    - snap angle measure to angle steps + 以固定角度貼齊角度測é‡
    - This restricts width/height ratio or its inverse to a whole number or the golden ratio. + 這å¯é«˜å¯¬æ¯”或å轉到整數或黃金比例。
    - 您å¯ä»¥åŒæ™‚æ‹–æ›³å…©å€‹æŽ§åˆ¶é»žè®“é ‚è§’è®Šæˆæ©¢åœ“形,或者按著 Ctrl 鵿‹–曳 / é»žæ“ŠæŽ§åˆ¶é»žè®“é ‚è§’å†æ¬¡è®Šå›žåœ“形。 + ä½ å¯ä»¥åŒæ™‚æ‹–æ›³å…©å€‹æŽ§åˆ¶é»žè®“é ‚è§’è®Šæˆæ©¢åœ“形,或者按著 Ctrl 鵿‹–曳 / é»žæ“ŠæŽ§åˆ¶é»žè®“é ‚è§’å†æ¬¡è®Šå›žåœ“形。
    - This restricts width/height ratio or its inverse to a whole number or the golden ratio. + 這å¯é«˜å¯¬æ¯”或å轉到整數或黃金比例。
    - Dragging the outer handle adjusts the "turns" parameter. + 拖曳外控制點å¯èª¿æ•´ã€Œåœˆæ•¸ã€åƒæ•¸ã€‚
    - lock radius (outer handle) + 鎖定åŠå¾‘ (外控制點)
    - Roll/unroll without changing radius. + 轉動/å–æ¶ˆè½‰å‹•䏿”¹è®ŠåŠå¾‘。
    - draw a freehand path + 繪製手繪路徑
    - If a path is selected, Shift+dragging from anywhere starts a new subpath instead of a new independent path. + 若已é¸å–路徑,在任何ä½ç½® Shift+拖曳å¯å»ºç«‹æ–°çš„å­è·¯å¾‘è€Œä¸æ˜¯å»ºç«‹æ–°çš„ç¨ç«‹è·¯å¾‘。
    - This temporarily disables snapping when you are dragging with snapping activated. + 這項能暫時åœç”¨è²¼é½Šåˆ°æ ¼é»žæˆ–åƒè€ƒç·š (當拖曳到格點或åƒè€ƒç·šä¸Šæ–¹æ™‚) 的功能。
    - start a straight path (finish with another click) + 開始直線路徑 (å†é»žæ“Šä¸€æ¬¡å¯çµæŸ)
    - finish current path + çµæŸç›®å‰è·¯å¾‘
    - finish current path + çµæŸç›®å‰è·¯å¾‘
    - double-click + 點擊兩下 - finish current path + çµæŸç›®å‰è·¯å¾‘
    - Enter or right click finish the current line, discarding the last unfinished (red) segment. Double left click finishes the current line where double-clicked. + 輸入或點擊滑鼠å³éµçµæŸç›®å‰ç›´ç·šï¼Œæ”¾æ£„ç›®å‰æœªå®Œæˆ (紅色) 的線段。點擊左éµå…©ä¸‹å¯åœ¨é»žæ“Šä½ç½®çµæŸç›®å‰ç›´ç·šã€‚
    - draw a calligraphic stroke + 繪製書法å¼ç­†åŠƒ
    - set pen width to its minimum or maximum + 將筆寬設定為其最å°å€¼æˆ–最大值
    - All these commands cancel current text selection, if any. Use them with Shift to add to / subtract from selection instead. + 若執行å‰å·²é¸å–æ–‡å­—çš„è©±ï¼Œé€™äº›æŒ‡ä»¤å…¨éƒ½æœƒå–æ¶ˆç›®å‰æ–‡å­—çš„é¸å–狀態。按著 Shift éµä½¿ç”¨é€™äº›æŒ‡ä»¤æœƒæ”¹æˆåŠ å…¥é¸å–文字/從é¸å–æ–‡å­—ä¸­å–æ¶ˆã€‚
    - double-click + 點擊兩下 é¸å–單字 @@ -8380,7 +8375,7 @@ feature request).

    - 或者,您å¯ä»¥ç”¨ 文字&å­—åž‹ 或 å¡«å……&邊框 å°è©±çª—ä¾†æŒ‡å®šé¸æ“‡æ–‡å­—的任何樣å¼ã€‚ + 或者,你å¯ä»¥ç”¨ 文字&å­—åž‹ 或 å¡«å……&邊框 å°è©±çª—ä¾†æŒ‡å®šé¸æ“‡æ–‡å­—的任何樣å¼ã€‚
    - set spray width to its minimum or maximum + 將噴ç‘寬度設定為其最å°å€¼æˆ–最大值
    - set eraser width to its minimum or maximum + 將橡皮擦寬度設定為其最å°å€¼æˆ–最大值
    - fill from each point similar to the initial point + 填充從æ¯å€‹ç›¸ä¼¼é¡è‰²é»žæ•£å¸ƒåˆ°èµ·é»ž
    - This creates gradient on selected objects. The tool controls bar lets you select linear/radial and fill/stroke for the new gradient. + 此指令å¯åœ¨é¸å–çš„ç‰©ä»¶ä¸Šå»ºç«‹æ¼¸å±¤ã€‚è©²å·¥å…·æŽ§åˆ¶åˆ—èƒ½è®“ä½ é¸æ“‡æ–°çš„æ¼¸å±¤æ˜¯ç·šæ€§ / 放射狀以åŠå¡«å…… / 邊框。
    - double-click + 點擊兩下 建立é è¨­æ¼¸å±¤ @@ -9084,7 +9079,7 @@ feature request).

    - double-click + 點擊兩下 å»ºç«‹åœæ­¢é»ž @@ -9127,7 +9122,7 @@ feature request).

    - This adds new stop(s) in the middle(s) between adjacent, selected stops or, if only one stop is selected, in the middle of the segment that starts with the selected stop. + 此指令å¯åœ¨é¸å–ã€ç›¸é„°åœæ­¢é»žçš„ä¸­é–“åŠ å…¥æ–°çš„åœæ­¢é»žï¼Œè‹¥åªé¸å–å–®ä¸€åœæ­¢é»žåŠ å…¥çš„ä½ç½®æœƒåœ¨ç·šæ®µèµ·é»žèˆ‡é¸å–åœæ­¢é»žä¹‹é–“。
    - Document Preferences + Document Properties
    @@ -1131,7 +1127,7 @@ RFE).

    @@ -1178,7 +1174,7 @@ RFE).

    @@ -1651,19 +1647,19 @@ RFE).

    +\ @@ -1675,13 +1671,13 @@ RFE).

    +3 @@ -1702,7 +1698,7 @@ RFE).

    @@ -2585,7 +2581,7 @@ RFE).

    @@ -3247,7 +3243,7 @@ RFE).

    @@ -3360,7 +3356,7 @@ RFE).

    @@ -3501,7 +3497,7 @@ RFE).

    @@ -3645,7 +3641,7 @@ RFE).

    @@ -3717,7 +3713,7 @@ RFE).

    @@ -3748,7 +3744,7 @@ RFE).

    @@ -3814,7 +3810,7 @@ RFE).

    @@ -3854,7 +3850,7 @@ RFE).

    @@ -3919,7 +3915,7 @@ RFE).

    @@ -4013,7 +4009,7 @@ RFE).

    @@ -4023,7 +4019,7 @@ RFE).

    @@ -4070,13 +4066,24 @@ RFE).

    + + + + + @@ -4142,7 +4149,7 @@ RFE).

    @@ -4176,7 +4183,7 @@ RFE).

    @@ -4229,7 +4236,7 @@ RFE).

    @@ -4253,7 +4260,7 @@ RFE).

    - The Controls bar at the top of the document window provides different buttons and controls for each tool. + The tool controls bar at the top of the document window provides different buttons and controls for each tool.
    - Use these to navigate between fields in the Controls bar (the value in the field you leave, if changed, is accepted). + Use these to navigate between fields in the tool controls bar (the value in the field you leave, if changed, is accepted).
    - toggle guides and snapping to guides + toggle guide visibility
    - If you want to see the guides but not snap to them, use the global snapping toggle (% key). + For activating / deactivating snapping to guides, use the snap bar or the global snapping toggle (% key).
    - When you create a new guide by dragging off the ruler, guide visibility and snapping are turned on. + When you create a new guide by dragging off the ruler, guide visibility is automatically turned on.
    - toggle grids and snapping to grids + toggle grids visibility
    - If you want to see the grids but not snap to them, use the global snapping toggle (% key). + For activating / deactivating snapping to grids, use the snap bar or the global snapping toggle (% key).
    - This toggle affects snapping to grids, guides, and objects in all tools. + This toggle affects snapping to grids, guides, and objects in all tools. The settings in the snap bar determine which snap targets and snapping points will snap.
    - This exports the selected object(s) (all other objects hidden) as PNG in the document's directory and imports it back. + This exports the selected object(s) (all other objects hidden) as PNG in the document's directory and imports it back as embedded bitmap.
    - click+click + double-click edit the object @@ -3278,7 +3274,7 @@ RFE).

    - Rubberband, touch selection

    + Rubberband, touch selection

    - Select (keyboard)

    + Select (keyboard)

    - Select within group, select under

    + Select within group, select under

    - Move (mouse)

    + Move (mouse)
    - This temporarily disables snapping to grid or guides when you are dragging with grid or guides on. + This temporarily disables snapping when you are dragging with snapping activated.

    - Move (keyboard)

    + Move (keyboard)

    - Transform (mouse)

    + Transform (mouse)

    - Scale by handles

    + Scale by handles

    - Scale (keyboard)

    + Scale (keyboard)
    - Scaling is uniform around the center, so that the size increment applies to the larger of the two dimensions. + The default size increment is added to (or subtracted from) either the selection's height or width, whichever one is larger. Scaling is done around the center of the selection's bounding box and keeps the proportions of the selected object(s).

    - Rotate/skew by handles

    + Rotate/skew by handles
    + + Shift + +mouse drag + + rotate around opposite corner +

    - Rotate (keyboard)

    + Rotate (keyboard)

    - Flip

    + Flip

    - Rotation center

    + Rotation center

    - Cancel

    + Cancel
    - +

    Node tool

    @@ -4263,7 +4270,7 @@ RFE).

    @@ -4321,7 +4328,7 @@ RFE).

    @@ -4393,7 +4400,7 @@ RFE).

    @@ -4441,7 +4448,7 @@ RFE).

    @@ -4554,7 +4561,7 @@ RFE).

    @@ -4610,7 +4617,7 @@ RFE).

    @@ -4626,7 +4633,7 @@ RFE).

    @@ -4665,7 +4672,7 @@ RFE).

    @@ -4759,7 +4766,7 @@ RFE).

    @@ -4825,7 +4832,7 @@ RFE).

    @@ -4851,7 +4858,7 @@ RFE).

    @@ -4906,7 +4913,7 @@ RFE).

    @@ -5000,7 +5007,7 @@ RFE).

    @@ -5082,7 +5089,7 @@ RFE).

    @@ -5102,7 +5109,7 @@ RFE).

    @@ -5180,7 +5187,7 @@ RFE).

    @@ -5190,7 +5197,7 @@ RFE).

    @@ -5248,7 +5255,7 @@ RFE).

    @@ -5288,7 +5295,7 @@ RFE).

    @@ -5326,7 +5333,7 @@ RFE).

    @@ -5410,7 +5417,7 @@ with the segment; another Shift+S will expand a second handle. @@ -5471,7 +5478,7 @@ with the segment; another Shift+S will expand a second handle. @@ -5549,7 +5556,7 @@ with the segment; another Shift+S will expand a second handle. @@ -5627,7 +5634,7 @@ with the segment; another Shift+S will expand a second handle. @@ -5649,7 +5656,7 @@ with the segment; another Shift+S will expand a second handle. @@ -5665,7 +5672,7 @@ with the segment; another Shift+S will expand a second handle. @@ -5689,7 +5696,7 @@ with the segment; another Shift+S will expand a second handle.

    - Select objects (mouse)

    + Select objects (mouse)

    - Select nodes (mouse)

    + Select nodes (mouse)

    - Rubberband selection

    + Rubberband selection

    - Select nodes (keyboard)

    + Select nodes (keyboard)

    - Grow/shrink node selection

    + Grow/shrink node selection
    - Each key press or wheel click selects the nearest unselected node or deselects the farthest selected node. + Each key press or turn of the mouse wheel selects the nearest unselected node or deselects the farthest selected node.

    - Move nodes (mouse)

    + Move nodes (mouse)
    - This restricts movement to the directions of the node's handles, their continuations and perpendiculars (total 8 snaps). + This restricts movement to the directions of the node's handles, their counter directions and perpendiculars (total 8 snaps).

    - Move nodes (keyboard)

    + Move nodes (keyboard)

    - Move node handle (mouse)

    + Move node handle (mouse)
    - The default angle step is 15 degrees. This also snaps to the handle's original angle, its continuation and perpendiculars. + The default angle step is 15 degrees. This also snaps to the handle's original angle, its counter direction and perpendiculars.

    - Scale handle (1 node selected)

    + Scale handle (1 node selected)

    - Rotate handle (1 node selected)

    + Rotate handle (1 node selected)

    - Handles visibility

    + Handles visibility

    - Scale nodes (>1 nodes selected)

    + Scale nodes (>1 nodes selected)
    - Scaling is uniform around the center, so that the size increment applies to the larger of the two dimensions. + The default size increment is added to (or subtracted from) either the node selection's height or width, whichever one is larger. Scaling keeps the proportions of the node selection.

    - Rotate nodes (>1 nodes selected)

    + Rotate nodes (>1 nodes selected)

    - Flip nodes (>1 nodes selected)

    + Flip nodes (>1 nodes selected)

    - Change segment(s)

    + Change segment(s)

    - Change node type

    + Change node type

    - Join/break

    + Join/break

    - Delete, create, duplicate

    + Delete, create, duplicate
    - click+click + double-click create node @@ -5606,7 +5613,7 @@ with the segment; another Shift+S will expand a second handle.

    - Reverse

    + Reverse

    - Edit shapes

    + Edit shapes

    - Edit fills and path effects

    + Edit fills and path effects

    - Cancel

    + Cancel
    - +

    Text tool

    @@ -7843,7 +7859,7 @@ with the segment; another Shift+S will expand a second handle. @@ -7884,7 +7900,7 @@ with the segment; another Shift+S will expand a second handle. @@ -7961,7 +7977,7 @@ with the segment; another Shift+S will expand a second handle. @@ -7971,7 +7987,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8028,7 +8044,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8097,7 +8113,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8124,7 +8140,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8207,7 +8223,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8298,7 +8314,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8375,7 +8391,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8445,7 +8461,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8523,7 +8539,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8581,7 +8597,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8636,7 +8652,7 @@ with the segment; another Shift+S will expand a second handle.

    - Select/create

    + Select/create

    - Navigate in text

    + Navigate in text
    - All these commands cancel current text selection, if any. Use them with Shift to extend selection instead. + All these commands cancel current text selection, if any. Use them with Shift to add to / subtract from selection instead.

    - Flowed text (internal frame)

    + Flowed text (internal frame)

    - Flowed text (external frame)

    + Flowed text (external frame)

    - Text on path

    + Text on path

    - Edit text

    + Edit text

    - Select text

    + Select text
    - click+click + double-click select word @@ -8337,7 +8353,7 @@ with the segment; another Shift+S will expand a second handle.

    - Style selection

    + Style selection

    - Letter spacing

    + Letter spacing

    - Line spacing

    + Line spacing

    - Kerning and shifting

    + Kerning and shifting

    - Rotate

    + Rotate
    - +

    Gradient tool

    @@ -8882,7 +8898,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8923,7 +8939,7 @@ with the segment; another Shift+S will expand a second handle. @@ -8938,13 +8954,13 @@ with the segment; another Shift+S will expand a second handle. @@ -9050,7 +9066,7 @@ with the segment; another Shift+S will expand a second handle. @@ -9069,7 +9085,7 @@ with the segment; another Shift+S will expand a second handle. @@ -9131,7 +9147,7 @@ with the segment; another Shift+S will expand a second handle. @@ -9252,7 +9268,7 @@ with the segment; another Shift+S will expand a second handle. @@ -9275,36 +9291,10 @@ with the segment; another Shift+S will expand a second handle. - - - - - - - - - - - - - - - - -

    - Select objects

    + Select objects

    - Create gradients

    + Create gradients
    - This creates gradient on selected objects. The Controls bar lets you select linear/radial and fill/stroke for the new gradient. + This creates gradient on selected objects. The tool controls bar lets you select linear/radial and fill/stroke for the new gradient.
    - click+click + double-click create default gradient @@ -8963,7 +8979,7 @@ with the segment; another Shift+S will expand a second handle.

    - Select handles

    + Select handles

    - Create/delete intermediate stops

    + Create/delete intermediate stops
    - click+click + double-click create a stop @@ -9112,7 +9128,7 @@ with the segment; another Shift+S will expand a second handle.
    - This adds new stop(s) in the middle(s) of selected segment(s), so it requires that more than two adjacent handles be selected. + This adds new stop(s) in the middle(s) between adjacent, selected stops or, if only one stop is selected, in the middle of the segment that starts with the selected stop.

    - Move handles/stops

    + Move handles/stops

    - Reverse

    + Reverse
    -

    - Gradient editor

    -
    - click+click - - open gradient editor -
    - Double clicking a gradient handle opens the Gradient Editor with that gradient and the clicked handle chosen in the stops list. -
    - +

    Dropper tool

    -- cgit v1.2.3 From 53edbe953052913dbee444e4390c7612531f8043 Mon Sep 17 00:00:00 2001 From: suv-lp <> Date: Sat, 27 Aug 2016 15:31:36 +0200 Subject: [Bug #1586568] Interpolate extension creates wrong stroke width. Fixed bugs: - https://launchpad.net/bugs/1586568 (bzr r15081) --- share/extensions/interp.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/share/extensions/interp.py b/share/extensions/interp.py index 9dbb996e4..a53ab07d9 100755 --- a/share/extensions/interp.py +++ b/share/extensions/interp.py @@ -109,8 +109,9 @@ class Interp(inkex.Effect): help="use z-order instead of selection order") def tweenstyleunit(self, property, start, end, time): # moved here so we can call 'unittouu' - sp = self.unittouu(start[property]) - ep = self.unittouu(end[property]) + scale = self.unittouu('1px') + sp = self.unittouu(start[property]) / scale + ep = self.unittouu(end[property]) / scale return str(sp + (time * (ep - sp))) def effect(self): -- cgit v1.2.3 From ac0e81e5f68f50a89d8fdc2f5401c205a42513a0 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Sat, 27 Aug 2016 23:45:38 -0400 Subject: Use new website link which allows us to control the answers provider (bzr r15082) --- share/extensions/inkscape_help_askaquestion.inx | 22 +++++++++++----------- share/extensions/launch_webbrowser.py | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/share/extensions/inkscape_help_askaquestion.inx b/share/extensions/inkscape_help_askaquestion.inx index 74462bf07..b093558cb 100644 --- a/share/extensions/inkscape_help_askaquestion.inx +++ b/share/extensions/inkscape_help_askaquestion.inx @@ -1,14 +1,14 @@ - <_name>Ask Us a Question - org.inkscape.help.askaquestion - launch_webbrowser.py - http://answers.launchpad.net/inkscape/+addquestion - - all - - + <_name>Ask Us a Question + org.inkscape.help.askaquestion + launch_webbrowser.py + <_param name="url" gui-hidden="true" type="string">https://inkscape.org/en/ask/ + + all + + diff --git a/share/extensions/launch_webbrowser.py b/share/extensions/launch_webbrowser.py index 225484393..fb2ccfd87 100755 --- a/share/extensions/launch_webbrowser.py +++ b/share/extensions/launch_webbrowser.py @@ -11,7 +11,7 @@ class VisitWebSiteWithoutLockingInkscape(threading.Thread): threading.Thread.__init__ (self) parser = OptionParser() parser.add_option("-u", "--url", action="store", type="string", - default="http://www.inkscape.org/", + default="https://www.inkscape.org/", dest="url", help="The URL to open in web browser") (self.options, args) = parser.parse_args() -- cgit v1.2.3 From 88286fa544522728a3d6e4db666ac0402c33795f Mon Sep 17 00:00:00 2001 From: alvinhochun Date: Mon, 29 Aug 2016 08:07:58 +0200 Subject: [Bug #1425542] Filter applied on group does not auto redraw when edited. Fixed bugs: - https://launchpad.net/bugs/1425542 (bzr r15083) --- src/sp-item-group.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index 097026057..aeeea5721 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -204,6 +204,13 @@ void SPGroup::modified(guint flags) { flags &= SP_OBJECT_MODIFIED_CASCADE; + if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { + for (SPItemView *v = this->display; v != NULL; v = v->next) { + Inkscape::DrawingGroup *group = dynamic_cast(v->arenaitem); + group->setStyle(this->style); + } + } + std::vector l=this->childList(true); for(std::vector::const_iterator i=l.begin();i!=l.end();++i){ SPObject *child = *i; -- cgit v1.2.3 From 7e353bc36b7c8ceaf1894aecab65b5c93217e870 Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Mon, 29 Aug 2016 08:21:22 +0200 Subject: Code design. Replacing tabs with spaces, and fixng parentheses warning. (bzr r15084) --- src/sp-item-group.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp index aeeea5721..96dcdbe30 100644 --- a/src/sp-item-group.cpp +++ b/src/sp-item-group.cpp @@ -132,7 +132,7 @@ void SPGroup::remove_child(Inkscape::XML::Node *child) { void SPGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *old_ref, Inkscape::XML::Node *new_ref) { - SPLPEItem::order_changed(child, old_ref, new_ref); + SPLPEItem::order_changed(child, old_ref, new_ref); SPItem *item = dynamic_cast(get_child_by_repr(child)); if ( item ) { @@ -199,7 +199,7 @@ void SPGroup::modified(guint flags) { // std::cout << "SPGroup::modified(): " << (getId()?getId():"null") << std::endl; SPLPEItem::modified(flags); if (flags & SP_OBJECT_MODIFIED_FLAG) { - flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; } flags &= SP_OBJECT_MODIFIED_CASCADE; @@ -352,7 +352,7 @@ Inkscape::DrawingItem *SPGroup::show (Inkscape::Drawing &drawing, unsigned int k } void SPGroup::hide (unsigned int key) { - std::vector l=this->childList(false, SPObject::ActionShow); + std::vector l=this->childList(false, SPObject::ActionShow); for(std::vector::const_iterator i=l.begin();i!=l.end();++i){ SPObject *o = *i; @@ -402,7 +402,7 @@ sp_recursive_scale_text_size(Inkscape::XML::Node *repr, double scale){ } SPCSSAttr * css = sp_repr_css_attr(repr,"style"); Glib::ustring element = g_quark_to_string(repr->code()); - if (css && element == "svg:text" || element == "svg:tspan") { + if ((css && element == "svg:text") || element == "svg:tspan") { gchar const *w = sp_repr_css_property(css, "font-size", NULL); if (w) { gchar *units = NULL; -- cgit v1.2.3 From 4f0e9e1e2b91c661060f1dcd45deb3dc53c72093 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 29 Aug 2016 14:30:41 +0200 Subject: Don't write out sodipodi:line-spacing. Don't read if 'line-height' already set. Partial fix for #1590141. (bzr r15085) --- src/sp-text.cpp | 15 ++++----------- src/ui/dialog/text-edit.cpp | 15 +++------------ 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/src/sp-text.cpp b/src/sp-text.cpp index 9beb812f5..b066ca3de 100644 --- a/src/sp-text.cpp +++ b/src/sp-text.cpp @@ -93,14 +93,16 @@ void SPText::set(unsigned int key, const gchar* value) { } else { switch (key) { case SP_ATTR_SODIPODI_LINESPACING: - // convert deprecated tag to css - if (value) { + // convert deprecated tag to css... but only if 'line-height' missing. + if (value && !this->style->line_height.set) { this->style->line_height.set = TRUE; this->style->line_height.inherit = FALSE; this->style->line_height.normal = FALSE; this->style->line_height.unit = SP_CSS_UNIT_PERCENT; this->style->line_height.value = this->style->line_height.computed = sp_svg_read_percentage (value, 1.0); } + // Remove deprecated attribute + this->getRepr()->setAttribute("sodipodi:linespacing", NULL); this->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG | SP_TEXT_LAYOUT_MODIFIED_FLAG); break; @@ -297,15 +299,6 @@ Inkscape::XML::Node *SPText::write(Inkscape::XML::Document *xml_doc, Inkscape::X this->attributes.writeTo(repr); this->rebuildLayout(); // copied from update(), see LP Bug 1339305 - // deprecated attribute, but keep it around for backwards compatibility - if (this->style->line_height.set && !this->style->line_height.inherit && !this->style->line_height.normal && this->style->line_height.unit == SP_CSS_UNIT_PERCENT) { - Inkscape::SVGOStringStream os; - os << (this->style->line_height.value * 100.0) << "%"; - this->getRepr()->setAttribute("sodipodi:linespacing", os.str().c_str()); - } else { - this->getRepr()->setAttribute("sodipodi:linespacing", NULL); - } - // SVG 2 Auto-wrapped text if( this->width.computed > 0.0 ) { sp_repr_set_svg_double(repr, "width", this->width.computed); diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index 50c6c1553..9efbcf6a8 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -505,9 +505,7 @@ SPCSSAttr *TextEdit::fillTextStyle () sp_repr_css_set_property (css, "writing-mode", "tb"); } - // Note that SVG 1.1 does not support line-height; we set it for consistency, but also set - // sodipodi:linespacing for backwards compatibility; in 1.2 we use line-height for flowtext - + // Note that SVG 1.1 does not support line-height but we use it. const gchar *sstr = gtk_combo_box_text_get_active_text ((GtkComboBoxText *) spacing_combo); sp_repr_css_set_property (css, "line-height", sstr); @@ -542,18 +540,11 @@ void TextEdit::onApply() SPCSSAttr *css = fillTextStyle (); sp_desktop_set_style(desktop, css, true); - for(auto i=item_list.begin();i!=item_list.end();++i){ + for(auto i=item_list.begin();i!=item_list.end();++i){ // apply style to the reprs of all text objects in the selection - if (SP_IS_TEXT (*i)) { - - // backwards compatibility: - (*i)->getRepr()->setAttribute("sodipodi:linespacing", sp_repr_css_property (css, "line-height", NULL)); - + if (SP_IS_TEXT (*i) || (SP_IS_FLOWTEXT (*i)) ) { ++items; } - else if (SP_IS_FLOWTEXT (*i)) - // no need to set sodipodi:linespacing, because Inkscape never supported it on flowtext - ++items; } if (items == 0) { -- cgit v1.2.3 From e1a84ff6c44588f7847258b5eb5266365e0738e1 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 29 Aug 2016 15:27:55 +0200 Subject: Fixes to helper paths. evaluate backport to 0.92.x (bzr r15086) --- src/live_effects/effect.cpp | 13 +++++++++++++ src/live_effects/effect.h | 1 + src/ui/tools/node-tool.cpp | 20 ++++++++++++++------ src/ui/tools/node-tool.h | 1 + 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index ef807d586..033eb8955 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -66,6 +66,7 @@ #include "message-stack.h" #include "document-private.h" #include "ui/tools/pen-tool.h" +#include "ui/tools/node-tool.h" #include "ui/tools-switch.h" #include "knotholder.h" #include "live_effects/lpeobject.h" @@ -454,6 +455,7 @@ void Effect::doBeforeEffect_impl(SPLPEItem const* lpeitem) sp_lpe_item->apply_to_clippath(sp_lpe_item); sp_lpe_item->apply_to_mask(sp_lpe_item); } + update_helperpath(); } /** @@ -643,6 +645,17 @@ Effect::addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vector(desktop->event_context); + nt->update_helperpath(); + } + } +} /** * This *creates* a new widget, management of deletion should be done by the caller diff --git a/src/live_effects/effect.h b/src/live_effects/effect.h index 898e089b7..840f723fa 100644 --- a/src/live_effects/effect.h +++ b/src/live_effects/effect.h @@ -102,6 +102,7 @@ public: virtual LPEPathFlashType pathFlashType() const { return DEFAULT; } void addHandles(KnotHolder *knotholder, SPDesktop *desktop, SPItem *item); std::vector getCanvasIndicators(SPLPEItem const* lpeitem); + void update_helperpath(); inline bool providesOwnFlashPaths() const { return provides_own_flash_paths || show_orig_path; diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index f7f09610c..99c98476f 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -158,6 +158,9 @@ NodeTool::~NodeTool() { if (this->helperpath_tmpitem) { this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem); } + if (this->helperpath_tmpitem_highlight) { + this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem_highlight); + } this->_selection_changed_connection.disconnect(); //this->_selection_modified_connection.disconnect(); this->_mouseover_changed_connection.disconnect(); @@ -238,13 +241,13 @@ void NodeTool::setup() { ); this->helperpath_tmpitem = NULL; + this->helperpath_tmpitem_highlight = NULL; this->cursor_drag = false; this->show_transform_handles = true; this->single_node_transform_handles = false; this->flash_tempitem = NULL; this->flashed_item = NULL; this->_last_over = NULL; - this->helperpath_tmpitem = NULL; // read prefs before adding items to selection to prevent momentarily showing the outline sp_event_context_read(this, "show_handles"); @@ -271,7 +274,7 @@ void NodeTool::setup() { } this->desktop->emitToolSubselectionChanged(NULL); // sets the coord entry fields to inactive - this->update_helperpath(); + update_helperpath(); } // show helper paths of the applied LPE, if any @@ -282,6 +285,10 @@ void NodeTool::update_helperpath () { this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem); this->helperpath_tmpitem = NULL; } + if (this->helperpath_tmpitem_highlight) { + this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem_highlight); + this->helperpath_tmpitem_highlight = NULL; + } if (SP_IS_LPE_ITEM(selection->singleItem())) { Inkscape::LivePathEffect::Effect *lpe = SP_LPE_ITEM(selection->singleItem())->getCurrentLPE(); @@ -305,6 +312,11 @@ void NodeTool::update_helperpath () { cc->reset(); } if (!c->is_empty()) { + SPCanvasItem *helperpath_highlight = sp_canvas_bpath_new(this->desktop->getTempGroup(), c); + sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(helperpath_highlight), 0xffffff9A, 2.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); + sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(helperpath_highlight), 0, SP_WIND_RULE_NONZERO); + sp_canvas_item_affine_absolute(helperpath_highlight, selection->singleItem()->i2dt_affine()); + this->helperpath_tmpitem_highlight = this->desktop->add_temporary_canvasitem(helperpath_highlight, 0); SPCanvasItem *helperpath = sp_canvas_bpath_new(this->desktop->getTempGroup(), c); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(helperpath), 0x0000ff9A, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(helperpath), 0, SP_WIND_RULE_NONZERO); @@ -468,13 +480,10 @@ bool NodeTool::root_handler(GdkEvent* event) { if (this->_selected_nodes->event(this, event)) { return true; } - switch (event->type) { case GDK_MOTION_NOTIFY: { - this->update_helperpath(); combine_motion_events(desktop->canvas, event->motion, 0); - this->update_helperpath(); SPItem *over_item = sp_event_context_find_item (desktop, event_point(event->button), FALSE, TRUE); @@ -629,7 +638,6 @@ bool NodeTool::root_handler(GdkEvent* event) { void NodeTool::update_tip(GdkEvent *event) { using namespace Inkscape::UI; - if (event && (event->type == GDK_KEY_PRESS || event->type == GDK_KEY_RELEASE)) { unsigned new_state = state_after_event(event); diff --git a/src/ui/tools/node-tool.h b/src/ui/tools/node-tool.h index 8342d66a6..bebb26dfc 100644 --- a/src/ui/tools/node-tool.h +++ b/src/ui/tools/node-tool.h @@ -69,6 +69,7 @@ private: SPItem *flashed_item; Inkscape::Display::TemporaryItem *helperpath_tmpitem; + Inkscape::Display::TemporaryItem *helperpath_tmpitem_highlight; Inkscape::Display::TemporaryItem *flash_tempitem; Inkscape::UI::Selector* _selector; Inkscape::UI::PathSharedData* _path_data; -- cgit v1.2.3 From 3a70c702b97414c4508c6871462d1fa4f1433ad7 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 29 Aug 2016 18:15:30 +0200 Subject: Add comment and fix in helper paths (bzr r15087) --- src/live_effects/effect.cpp | 3 +++ src/ui/tools/node-tool.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index 033eb8955..fd1b8e3ec 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -645,6 +645,9 @@ Effect::addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vectordesktop->emitToolSubselectionChanged(NULL); // sets the coord entry fields to inactive - update_helperpath(); + this->update_helperpath(); } // show helper paths of the applied LPE, if any -- cgit v1.2.3 From bf417e89f271cb407129979edee35db1ee59725a Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 29 Aug 2016 18:26:57 +0200 Subject: Fix some comment typos (bzr r15088) --- src/live_effects/effect.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp index fd1b8e3ec..007a8ca38 100644 --- a/src/live_effects/effect.cpp +++ b/src/live_effects/effect.cpp @@ -646,7 +646,7 @@ Effect::addCanvasIndicators(SPLPEItem const*/*lpeitem*/, std::vector Date: Mon, 29 Aug 2016 19:35:32 +0200 Subject: Fix a bug in pattern along path at first edit node after applied. Backport it to 0.92 (bzr r15089) --- src/live_effects/lpe-bendpath.cpp | 14 +++++++++----- src/live_effects/lpe-bendpath.h | 2 +- src/live_effects/lpe-patternalongpath.cpp | 17 ++++++++++------- src/live_effects/lpe-patternalongpath.h | 1 + src/ui/tools/freehand-base.cpp | 13 +++++++++++++ 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp index c24d38d7b..2ba1e32b4 100644 --- a/src/live_effects/lpe-bendpath.cpp +++ b/src/live_effects/lpe-bendpath.cpp @@ -67,6 +67,7 @@ LPEBendPath::LPEBendPath(LivePathEffectObject *lpeobject) : _provides_knotholder_entities = true; apply_to_clippath_and_mask = true; concatenate_before_pwd2 = true; + _prop_scale_store = prop_scale; } LPEBendPath::~LPEBendPath() @@ -80,6 +81,9 @@ LPEBendPath::doBeforeEffect (SPLPEItem const* lpeitem) // get the item bounding box original_bbox(lpeitem); original_height = boundingbox_Y.max() - boundingbox_Y.min(); + if(_prop_scale_store != prop_scale) { + prop_scale.param_set_value(_prop_scale_store); + } } Geom::Piecewise > @@ -120,9 +124,9 @@ LPEBendPath::doEffect_pwd2 (Geom::Piecewise > const & pwd } if ( scale_y_rel.get_value() ) { - y*=(scaling*prop_scale); + y*=(scaling*_prop_scale_store); } else { - if (prop_scale != 1.0) y *= prop_scale; + if (_prop_scale_store != 1.0) y *= _prop_scale_store; } Piecewise > output = compose(uskeleton,x) + y*compose(n,x); @@ -184,9 +188,9 @@ KnotHolderEntityWidthBendPath::knot_set(Geom::Point const &p, Geom::Point const& Geom::Point knot_pos = this->knot->pos * item->i2dt_affine().inverse(); Geom::Coord nearest_to_ray = ray.nearestTime(knot_pos); if(nearest_to_ray == 0){ - lpe->prop_scale.param_set_value(-Geom::distance(s , ptA)/(lpe->original_height/2.0)); + lpe->_prop_scale_store = -Geom::distance(s , ptA)/(lpe->original_height/2.0); } else { - lpe->prop_scale.param_set_value(Geom::distance(s , ptA)/(lpe->original_height/2.0)); + lpe->_prop_scale_store = Geom::distance(s , ptA)/(lpe->original_height/2.0); } sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true); @@ -207,7 +211,7 @@ KnotHolderEntityWidthBendPath::knot_get() const ray.setPoints(ptA,(*cubic)[1]); } ray.setAngle(ray.angle() + Geom::rad_from_deg(90)); - Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA; + Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->_prop_scale_store) + ptA; bp_helper_path.clear(); Geom::Path hp(result_point); diff --git a/src/live_effects/lpe-bendpath.h b/src/live_effects/lpe-bendpath.h index eeda86a5e..36789bb15 100644 --- a/src/live_effects/lpe-bendpath.h +++ b/src/live_effects/lpe-bendpath.h @@ -58,7 +58,7 @@ private: BoolParam vertical_pattern; Geom::Piecewise > uskeleton; Geom::Piecewise > n; - + double _prop_scale_store; void on_pattern_pasted(); LPEBendPath(const LPEBendPath&); diff --git a/src/live_effects/lpe-patternalongpath.cpp b/src/live_effects/lpe-patternalongpath.cpp index 7d6ac10ac..0814ce0da 100644 --- a/src/live_effects/lpe-patternalongpath.cpp +++ b/src/live_effects/lpe-patternalongpath.cpp @@ -95,7 +95,7 @@ LPEPatternAlongPath::LPEPatternAlongPath(LivePathEffectObject *lpeobject) : prop_scale.param_set_increments(0.01, 0.10); _provides_knotholder_entities = true; - + _prop_scale_store = prop_scale; } LPEPatternAlongPath::~LPEPatternAlongPath() @@ -111,6 +111,9 @@ LPEPatternAlongPath::doBeforeEffect (SPLPEItem const* lpeitem) if (bbox) { original_height = (*bbox)[Geom::Y].max() - (*bbox)[Geom::Y].min(); } + if(_prop_scale_store != prop_scale) { + prop_scale.param_set_value(_prop_scale_store); + } } Geom::Piecewise > @@ -213,9 +216,9 @@ LPEPatternAlongPath::doEffect_pwd2 (Geom::Piecewise > con x*=scaling; } if ( scale_y_rel.get_value() ) { - y*=(scaling*prop_scale); + y*=(scaling*_prop_scale_store); } else { - if (prop_scale != 1.0) y *= prop_scale; + if (_prop_scale_store != 1.0) y *= _prop_scale_store; } x += toffset; @@ -253,7 +256,7 @@ LPEPatternAlongPath::transform_multiply(Geom::Affine const& postmul, bool set) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool transform_stroke = prefs ? prefs->getBool("/options/transform/stroke", true) : true; if (transform_stroke && !scale_y_rel) { - prop_scale.param_set_value(prop_scale * ((postmul.expansionX() + postmul.expansionY()) / 2)); + prop_scale.param_set_value(_prop_scale_store * ((postmul.expansionX() + postmul.expansionY()) / 2)); } if (postmul.isTranslation()) { pattern.param_transform_multiply(postmul, set); @@ -299,9 +302,9 @@ KnotHolderEntityWidthPatternAlongPath::knot_set(Geom::Point const &p, Geom::Poin Geom::Point knot_pos = this->knot->pos * item->i2dt_affine().inverse(); Geom::Coord nearest_to_ray = ray.nearestTime(knot_pos); if(nearest_to_ray == 0){ - lpe->prop_scale.param_set_value(-Geom::distance(s , ptA)/(lpe->original_height/2.0)); + lpe->_prop_scale_store = -Geom::distance(s , ptA)/(lpe->original_height/2.0); } else { - lpe->prop_scale.param_set_value(Geom::distance(s , ptA)/(lpe->original_height/2.0)); + lpe->_prop_scale_store = Geom::distance(s , ptA)/(lpe->original_height/2.0); } } @@ -325,7 +328,7 @@ KnotHolderEntityWidthPatternAlongPath::knot_get() const ray.setPoints(ptA, (*cubic)[1]); } ray.setAngle(ray.angle() + Geom::rad_from_deg(90)); - Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA; + Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->_prop_scale_store) + ptA; pap_helper_path.clear(); Geom::Path hp(result_point); diff --git a/src/live_effects/lpe-patternalongpath.h b/src/live_effects/lpe-patternalongpath.h index 3d7fc02bc..eedf4c172 100644 --- a/src/live_effects/lpe-patternalongpath.h +++ b/src/live_effects/lpe-patternalongpath.h @@ -61,6 +61,7 @@ private: BoolParam prop_units; BoolParam vertical_pattern; ScalarParam fuse_tolerance; + double _prop_scale_store; void on_pattern_pasted(); LPEPatternAlongPath(const LPEPatternAlongPath&); diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index eb29ed88d..7382c37ea 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -212,6 +212,19 @@ static void spdc_paste_curve_as_freehand_shape(Geom::PathVector const &newpath, Effect::createAndApply(PATTERN_ALONG_PATH, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); static_cast(lpe)->pattern.set_new_value(newpath,true); + + // write pattern along path parameters: + lpe->getRepr()->setAttribute("copytype", "single_stretched"); + lpe->getRepr()->setAttribute("fuse_tolerance", "0"); + lpe->getRepr()->setAttribute("is_visible", "true"); + lpe->getRepr()->setAttribute("normal_offset", "0"); + lpe->getRepr()->setAttribute("prop_scale", "1"); + lpe->getRepr()->setAttribute("prop_units", "false"); + lpe->getRepr()->setAttribute("scale_y_rel", "false"); + lpe->getRepr()->setAttribute("spacing", "0"); + lpe->getRepr()->setAttribute("tang_offset", "0"); + lpe->getRepr()->setAttribute("vertical_pattern", "false"); + } static void spdc_apply_powerstroke_shape(const std::vector & points, FreehandBase *dc, SPItem *item) -- cgit v1.2.3 From 1b8b972f1e0d6ee32c1f85514ec334c654d1e29c Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 29 Aug 2016 22:39:07 +0200 Subject: Partial fix for bug 172063 while we find a better solution for XOR in helper lines (bzr r15090) --- src/display/canvas-bpath.cpp | 34 +++++++++++++++++++++++++--------- src/display/canvas-bpath.h | 6 +++--- src/display/sp-ctrlline.cpp | 2 +- src/ui/control-manager.cpp | 8 ++++---- src/ui/tools/calligraphic-tool.cpp | 8 ++++---- src/ui/tools/connector-tool.cpp | 6 +++--- src/ui/tools/eraser-tool.cpp | 6 +++--- src/ui/tools/node-tool.cpp | 15 +-------------- src/ui/tools/node-tool.h | 1 - src/ui/tools/pen-tool.cpp | 22 +++++++++++----------- src/ui/tools/pencil-tool.cpp | 2 +- 11 files changed, 56 insertions(+), 54 deletions(-) diff --git a/src/display/canvas-bpath.cpp b/src/display/canvas-bpath.cpp index 46b59d25a..fd10a96f5 100644 --- a/src/display/canvas-bpath.cpp +++ b/src/display/canvas-bpath.cpp @@ -53,6 +53,7 @@ sp_canvas_bpath_init (SPCanvasBPath * bpath) bpath->stroke_linejoin = SP_STROKE_LINEJOIN_MITER; bpath->stroke_linecap = SP_STROKE_LINECAP_BUTT; bpath->stroke_miterlimit = 11.0; + bpath->phantom_line = false; } static void sp_canvas_bpath_destroy(SPCanvasItem *object) @@ -71,7 +72,7 @@ static void sp_canvas_bpath_update(SPCanvasItem *item, Geom::Affine const &affin { SPCanvasBPath *cbp = SP_CANVAS_BPATH(item); - item->canvas->requestRedraw((int)item->x1, (int)item->y1, (int)item->x2, (int)item->y2); + item->canvas->requestRedraw((int)item->x1 - 1, (int)item->y1 - 1, (int)item->x2 + 1 , (int)item->y2 + 1); if (reinterpret_cast(sp_canvas_bpath_parent_class)->update) { reinterpret_cast(sp_canvas_bpath_parent_class)->update(item, affine, flags); @@ -86,10 +87,10 @@ static void sp_canvas_bpath_update(SPCanvasItem *item, Geom::Affine const &affin Geom::OptRect bbox = bounds_exact_transformed(cbp->curve->get_pathvector(), affine); if (bbox) { - item->x1 = (int)bbox->min()[Geom::X] - 1; - item->y1 = (int)bbox->min()[Geom::Y] - 1; - item->x2 = (int)bbox->max()[Geom::X] + 1; - item->y2 = (int)bbox->max()[Geom::Y] + 1; + item->x1 = (int)floor(bbox->min()[Geom::X]) - 1; + item->y1 = (int)floor(bbox->min()[Geom::Y]) - 1; + item->x2 = (int)ceil(bbox->max()[Geom::X]) + 1; + item->y2 = (int)ceil(bbox->max()[Geom::Y]) + 1; } else { item->x1 = 0; item->y1 = 0; @@ -131,7 +132,21 @@ sp_canvas_bpath_render (SPCanvasItem *item, SPCanvasBuf *buf) cairo_fill_preserve(buf->ct); } - if (dostroke) { + if (dostroke && cbp->phantom_line) { + ink_cairo_set_source_rgba32(buf->ct, 0xffffff7f); + cairo_set_line_width(buf->ct, 2); + if (cbp->dashes[0] != 0 && cbp->dashes[1] != 0) { + cairo_set_dash (buf->ct, cbp->dashes, 2, 0); + } + cairo_stroke(buf->ct); + cairo_set_tolerance(buf->ct, 0.5); + cairo_new_path(buf->ct); + feed_pathvector_to_cairo (buf->ct, cbp->curve->get_pathvector(), cbp->affine, area, + /* optimized_stroke = */ !dofill, 1); + ink_cairo_set_source_rgba32(buf->ct, cbp->stroke_rgba); + cairo_set_line_width(buf->ct, 1); + cairo_stroke(buf->ct); + } else if (dostroke) { ink_cairo_set_source_rgba32(buf->ct, cbp->stroke_rgba); cairo_set_line_width(buf->ct, 1); if (cbp->dashes[0] != 0 && cbp->dashes[1] != 0) { @@ -167,24 +182,25 @@ sp_canvas_bpath_point (SPCanvasItem *item, Geom::Point p, SPCanvasItem **actual_ } SPCanvasItem * -sp_canvas_bpath_new (SPCanvasGroup *parent, SPCurve *curve) +sp_canvas_bpath_new (SPCanvasGroup *parent, SPCurve *curve, bool phantom_line) { g_return_val_if_fail (parent != NULL, NULL); g_return_val_if_fail (SP_IS_CANVAS_GROUP (parent), NULL); SPCanvasItem *item = sp_canvas_item_new (parent, SP_TYPE_CANVAS_BPATH, NULL); - sp_canvas_bpath_set_bpath (SP_CANVAS_BPATH (item), curve); + sp_canvas_bpath_set_bpath (SP_CANVAS_BPATH (item), curve, phantom_line); return item; } void -sp_canvas_bpath_set_bpath (SPCanvasBPath *cbp, SPCurve *curve) +sp_canvas_bpath_set_bpath (SPCanvasBPath *cbp, SPCurve *curve, bool phantom_line) { g_return_if_fail (cbp != NULL); g_return_if_fail (SP_IS_CANVAS_BPATH (cbp)); + cbp->phantom_line = phantom_line; if (cbp->curve) { cbp->curve = cbp->curve->unref(); } diff --git a/src/display/canvas-bpath.h b/src/display/canvas-bpath.h index 72eca6eeb..686eb7c5a 100644 --- a/src/display/canvas-bpath.h +++ b/src/display/canvas-bpath.h @@ -80,7 +80,7 @@ struct SPCanvasBPath { SPStrokeJoinType stroke_linejoin; SPStrokeCapType stroke_linecap; gdouble stroke_miterlimit; - + bool phantom_line; /* State */ Shape *fill_shp; Shape *stroke_shp; @@ -92,9 +92,9 @@ struct SPCanvasBPathClass { GType sp_canvas_bpath_get_type (void); -SPCanvasItem *sp_canvas_bpath_new (SPCanvasGroup *parent, SPCurve *curve); +SPCanvasItem *sp_canvas_bpath_new (SPCanvasGroup *parent, SPCurve *curve, bool phantom_line = false); -void sp_canvas_bpath_set_bpath (SPCanvasBPath *cbp, SPCurve *curve); +void sp_canvas_bpath_set_bpath (SPCanvasBPath *cbp, SPCurve *curve, bool phantom_line = false); void sp_canvas_bpath_set_fill (SPCanvasBPath *cbp, guint32 rgba, SPWindRule rule); void sp_canvas_bpath_set_stroke (SPCanvasBPath *cbp, guint32 rgba, gdouble width, SPStrokeJoinType join, SPStrokeCapType cap, double dash=0, double gap=0); diff --git a/src/display/sp-ctrlline.cpp b/src/display/sp-ctrlline.cpp index 1bde540c0..6c5674935 100644 --- a/src/display/sp-ctrlline.cpp +++ b/src/display/sp-ctrlline.cpp @@ -84,7 +84,7 @@ void sp_ctrlline_render(SPCanvasItem *item, SPCanvasBuf *buf) Geom::Point s = cl->s * cl->affine; Geom::Point e = cl->e * cl->affine; - ink_cairo_set_source_rgba32(buf->ct, 0xffffffbf); + ink_cairo_set_source_rgba32(buf->ct, 0xffffff7f); cairo_set_line_width(buf->ct, 2); cairo_new_path(buf->ct); diff --git a/src/ui/control-manager.cpp b/src/ui/control-manager.cpp index 973625574..d0285e467 100644 --- a/src/ui/control-manager.cpp +++ b/src/ui/control-manager.cpp @@ -148,7 +148,7 @@ ControlManagerImpl::ControlManagerImpl(ControlManager &manager) : _ctrlToShape[CTRL_TYPE_NODE_AUTO] = SP_CTRL_SHAPE_CIRCLE; _ctrlToShape[CTRL_TYPE_NODE_SYMETRICAL] = SP_CTRL_SHAPE_SQUARE; - _ctrlToShape[CTRL_TYPE_ADJ_HANDLE] = SP_CTRL_SHAPE_CIRCLE; + _ctrlToShape[CTRL_TYPE_ADJ_HANDLE] =SP_CTRL_SHAPE_CIRCLE; _ctrlToShape[CTRL_TYPE_INVISIPOINT] = SP_CTRL_SHAPE_SQUARE; // ------- @@ -222,10 +222,10 @@ SPCanvasItem *ControlManagerImpl::createControl(SPCanvasGroup *parent, ControlTy { case CTRL_TYPE_ADJ_HANDLE: item = sp_canvas_item_new(parent, SP_TYPE_CTRL, - "shape", SP_CTRL_SHAPE_CIRCLE, + "shape",SP_CTRL_SHAPE_CIRCLE, "size", targetSize, - "filled", 0, - "fill_color", 0xff00007f, + "filled", 1, + "fill_color", 0xffffff7f, "stroked", 1, "stroke_color", 0x0000ff7f, NULL); diff --git a/src/ui/tools/calligraphic-tool.cpp b/src/ui/tools/calligraphic-tool.cpp index d623035d9..9b4dbb1a2 100644 --- a/src/ui/tools/calligraphic-tool.cpp +++ b/src/ui/tools/calligraphic-tool.cpp @@ -135,7 +135,7 @@ void CalligraphicTool::setup() { SPCurve *c = new SPCurve(path); - this->hatch_area = sp_canvas_bpath_new(this->desktop->getControls(), c); + this->hatch_area = sp_canvas_bpath_new(this->desktop->getControls(), c, true); c->unref(); @@ -1090,7 +1090,7 @@ void CalligraphicTool::fit_and_split(bool release) { add_cap(this->currentcurve, b2[0], b1[0], this->cap_rounding); } this->currentcurve->closepath(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve, true); } /* Current calligraphic */ @@ -1126,7 +1126,7 @@ void CalligraphicTool::fit_and_split(bool release) { SP_TYPE_CANVAS_BPATH, NULL); SPCurve *curve = this->currentcurve->copy(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH (cbp), curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH (cbp), curve, true); curve->unref(); guint32 fillColor = sp_desktop_get_color_tool (desktop, "/tools/calligraphic", true); @@ -1170,7 +1170,7 @@ void CalligraphicTool::draw_temporary_box() { } this->currentcurve->closepath(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve, true); } } diff --git a/src/ui/tools/connector-tool.cpp b/src/ui/tools/connector-tool.cpp index 84f7f318c..7e6fb4b72 100644 --- a/src/ui/tools/connector-tool.cpp +++ b/src/ui/tools/connector-tool.cpp @@ -620,7 +620,7 @@ bool ConnectorTool::_handleMotionNotify(GdkEventMotion const &mevent) { this->red_curve = path->get_curve_for_edit(); this->red_curve->transform(i2d); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve, true); ret = true; break; } @@ -811,7 +811,7 @@ void ConnectorTool::_setSubsequentPoint(Geom::Point const p) { // Recreate curve from libavoid route. recreateCurve( this->red_curve, this->newConnRef, this->curvature ); this->red_curve->transform(desktop->doc2dt()); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve, true); } @@ -1035,7 +1035,7 @@ endpt_handler(SPKnot */*knot*/, GdkEvent *event, ConnectorTool *cc) cc->red_curve = SP_PATH(cc->clickeditem)->get_curve_for_edit(); Geom::Affine i2d = (cc->clickeditem)->i2dt_affine(); cc->red_curve->transform(i2d); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(cc->red_bpath), cc->red_curve, true); cc->clickeditem->setHidden(true); diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index d18db8266..4b40262cd 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -943,7 +943,7 @@ void EraserTool::fit_and_split(bool release) { } this->currentcurve->closepath(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve, true); } /* Current eraser */ @@ -980,7 +980,7 @@ void EraserTool::fit_and_split(bool release) { SPCanvasItem *cbp = sp_canvas_item_new(desktop->getSketch(), SP_TYPE_CANVAS_BPATH, NULL); SPCurve *curve = this->currentcurve->copy(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH (cbp), curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH (cbp), curve, true); curve->unref(); guint32 fillColor = sp_desktop_get_color_tool (desktop, "/tools/eraser", true); @@ -1029,7 +1029,7 @@ void EraserTool::draw_temporary_box() { } this->currentcurve->closepath(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->currentshape), this->currentcurve, true); } } diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index c266db05c..b4fc569bb 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -158,9 +158,6 @@ NodeTool::~NodeTool() { if (this->helperpath_tmpitem) { this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem); } - if (this->helperpath_tmpitem_highlight) { - this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem_highlight); - } this->_selection_changed_connection.disconnect(); //this->_selection_modified_connection.disconnect(); this->_mouseover_changed_connection.disconnect(); @@ -241,7 +238,6 @@ void NodeTool::setup() { ); this->helperpath_tmpitem = NULL; - this->helperpath_tmpitem_highlight = NULL; this->cursor_drag = false; this->show_transform_handles = true; this->single_node_transform_handles = false; @@ -285,10 +281,6 @@ void NodeTool::update_helperpath () { this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem); this->helperpath_tmpitem = NULL; } - if (this->helperpath_tmpitem_highlight) { - this->desktop->remove_temporary_canvasitem(this->helperpath_tmpitem_highlight); - this->helperpath_tmpitem_highlight = NULL; - } if (SP_IS_LPE_ITEM(selection->singleItem())) { Inkscape::LivePathEffect::Effect *lpe = SP_LPE_ITEM(selection->singleItem())->getCurrentLPE(); @@ -312,12 +304,7 @@ void NodeTool::update_helperpath () { cc->reset(); } if (!c->is_empty()) { - SPCanvasItem *helperpath_highlight = sp_canvas_bpath_new(this->desktop->getTempGroup(), c); - sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(helperpath_highlight), 0xffffff9A, 2.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); - sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(helperpath_highlight), 0, SP_WIND_RULE_NONZERO); - sp_canvas_item_affine_absolute(helperpath_highlight, selection->singleItem()->i2dt_affine()); - this->helperpath_tmpitem_highlight = this->desktop->add_temporary_canvasitem(helperpath_highlight, 0); - SPCanvasItem *helperpath = sp_canvas_bpath_new(this->desktop->getTempGroup(), c); + SPCanvasItem *helperpath = sp_canvas_bpath_new(this->desktop->getTempGroup(), c, true); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(helperpath), 0x0000ff9A, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(helperpath), 0, SP_WIND_RULE_NONZERO); sp_canvas_item_affine_absolute(helperpath, selection->singleItem()->i2dt_affine()); diff --git a/src/ui/tools/node-tool.h b/src/ui/tools/node-tool.h index bebb26dfc..8342d66a6 100644 --- a/src/ui/tools/node-tool.h +++ b/src/ui/tools/node-tool.h @@ -69,7 +69,6 @@ private: SPItem *flashed_item; Inkscape::Display::TemporaryItem *helperpath_tmpitem; - Inkscape::Display::TemporaryItem *helperpath_tmpitem_highlight; Inkscape::Display::TemporaryItem *flash_tempitem; Inkscape::UI::Selector* _selector; Inkscape::UI::PathSharedData* _path_data; diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index 49f28ad2c..b7579b1fb 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -865,7 +865,7 @@ void PenTool::_redrawAll() { this->green_bpaths = g_slist_remove(this->green_bpaths, this->green_bpaths->data); } // one canvas bpath for all of green_curve - SPCanvasItem *canvas_shape = sp_canvas_bpath_new(this->desktop->getSketch(), this->green_curve); + SPCanvasItem *canvas_shape = sp_canvas_bpath_new(this->desktop->getSketch(), this->green_curve, true); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(canvas_shape), this->green_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(canvas_shape), 0, SP_WIND_RULE_NONZERO); @@ -877,7 +877,7 @@ void PenTool::_redrawAll() { this->red_curve->reset(); this->red_curve->moveto(this->p[0]); this->red_curve->curveto(this->p[1], this->p[2], this->p[3]); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve, true); // handles // hide the handlers in bspline and spiro modes @@ -1251,10 +1251,10 @@ bool PenTool::_handleKeyPress(GdkEvent *event) { void PenTool::_resetColors() { // Red this->red_curve->reset(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), NULL); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), NULL, true); // Blue this->blue_curve->reset(); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->blue_bpath), NULL); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->blue_bpath), NULL, true); // Green while (this->green_bpaths) { sp_canvas_item_destroy(SP_CANVAS_ITEM(this->green_bpaths->data)); @@ -1277,7 +1277,7 @@ void PenTool::_setInitialPoint(Geom::Point const p) { this->p[0] = p; this->p[1] = p; this->npoints = 2; - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), NULL); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), NULL, true); this->desktop->canvas->forceFullRedrawAfterInterruptions(5); } @@ -1343,7 +1343,7 @@ void PenTool::_bsplineSpiroColor() this->green_bpaths = g_slist_remove(this->green_bpaths, this->green_bpaths->data); } // one canvas bpath for all of green_curve - SPCanvasItem *canvas_shape = sp_canvas_bpath_new(this->desktop->getSketch(), this->green_curve); + SPCanvasItem *canvas_shape = sp_canvas_bpath_new(this->desktop->getSketch(), this->green_curve, true); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(canvas_shape), this->green_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); sp_canvas_bpath_set_fill(SP_CANVAS_BPATH(canvas_shape), 0, SP_WIND_RULE_NONZERO); this->green_bpaths = g_slist_prepend(this->green_bpaths, canvas_shape); @@ -1701,7 +1701,7 @@ void PenTool::_bsplineSpiroBuild() }else{ this->red_curve->curveto(this->p[1],this->p[2],this->p[3]); } - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve, true); curve->append_continuous(this->red_curve, 0.0625); } @@ -1722,7 +1722,7 @@ void PenTool::_bsplineSpiroBuild() LivePathEffect::sp_spiro_do_effect(curve); } - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->blue_bpath), curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->blue_bpath), curve, true); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(this->blue_bpath), this->blue_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); sp_canvas_item_show(this->blue_bpath); curve->unref(); @@ -1778,7 +1778,7 @@ void PenTool::_setSubsequentPoint(Geom::Point const p, bool statusbar, guint sta } } - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve, true); if (statusbar) { gchar *message = is_curve ? @@ -1818,7 +1818,7 @@ void PenTool::_setCtrl(Geom::Point const p, guint const state) { this->red_curve->reset(); this->red_curve->moveto(this->p[0]); this->red_curve->curveto(this->p[1], this->p[2], this->p[3]); - sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve); + sp_canvas_bpath_set_bpath(SP_CANVAS_BPATH(this->red_bpath), this->red_curve, true); } SP_CTRL(this->c0)->moveto(this->p[2]); this->cl0 ->setCoords(this->p[3], this->p[2]); @@ -1850,7 +1850,7 @@ void PenTool::_finishSegment(Geom::Point const p, guint const state) { SPCurve *curve = this->red_curve->copy(); /// \todo fixme: - SPCanvasItem *canvas_shape = sp_canvas_bpath_new(this->desktop->getSketch(), curve); + SPCanvasItem *canvas_shape = sp_canvas_bpath_new(this->desktop->getSketch(), curve, true); curve->unref(); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(canvas_shape), this->green_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); diff --git a/src/ui/tools/pencil-tool.cpp b/src/ui/tools/pencil-tool.cpp index 7cc695040..9e8005be8 100644 --- a/src/ui/tools/pencil-tool.cpp +++ b/src/ui/tools/pencil-tool.cpp @@ -847,7 +847,7 @@ void PencilTool::_fitAndSplit() { SPCurve *curve = this->red_curve->copy(); /// \todo fixme: - SPCanvasItem *cshape = sp_canvas_bpath_new(this->desktop->getSketch(), curve); + SPCanvasItem *cshape = sp_canvas_bpath_new(this->desktop->getSketch(), curve, true); curve->unref(); this->highlight_color = SP_ITEM(this->desktop->currentLayer())->highlight_color(); -- cgit v1.2.3 From b0285abe2d1329a012c116f359551a40112708df Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 29 Aug 2016 22:52:05 +0200 Subject: Decrease contrast of phantom bpath (bzr r15091) --- src/display/canvas-bpath.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/display/canvas-bpath.cpp b/src/display/canvas-bpath.cpp index fd10a96f5..fc6b79b43 100644 --- a/src/display/canvas-bpath.cpp +++ b/src/display/canvas-bpath.cpp @@ -133,7 +133,7 @@ sp_canvas_bpath_render (SPCanvasItem *item, SPCanvasBuf *buf) } if (dostroke && cbp->phantom_line) { - ink_cairo_set_source_rgba32(buf->ct, 0xffffff7f); + ink_cairo_set_source_rgba32(buf->ct, 0xffffff4d); cairo_set_line_width(buf->ct, 2); if (cbp->dashes[0] != 0 && cbp->dashes[1] != 0) { cairo_set_dash (buf->ct, cbp->dashes, 2, 0); -- cgit v1.2.3 From 5cb8c080df223593fbae945178da3e500fe762c6 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 29 Aug 2016 23:13:26 +0200 Subject: Add phantom bpath to helper (bzr r15092) --- src/ui/tools/node-tool.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index b4fc569bb..2bd4fdea3 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -523,7 +523,7 @@ bool NodeTool::root_handler(GdkEvent* event) { } c->transform(over_item->i2dt_affine()); - SPCanvasItem *flash = sp_canvas_bpath_new(desktop->getTempGroup(), c); + SPCanvasItem *flash = sp_canvas_bpath_new(desktop->getTempGroup(), c, true); sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(flash), //prefs->getInt("/tools/nodes/highlight_color", 0xff0000ff), 1.0, -- cgit v1.2.3 From 42914d527d007236fba7f2a27997d1c7c9dae432 Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Tue, 30 Aug 2016 08:27:13 +0200 Subject: [Bug #1447971] User palettes not available if all shared system palettes are deleted from installation. Fixed bugs: - https://launchpad.net/bugs/1447971 (bzr r15093) --- src/ui/dialog/swatches.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/dialog/swatches.cpp b/src/ui/dialog/swatches.cpp index 3012c5c26..87bfa9252 100644 --- a/src/ui/dialog/swatches.cpp +++ b/src/ui/dialog/swatches.cpp @@ -598,7 +598,7 @@ SwatchesPanel::SwatchesPanel(gchar const* prefsPath) : } loadEmUp(); - if ( !systemSwatchPages.empty() ) { + if ( !systemSwatchPages.empty() || !userSwatchPages.empty()) { SwatchPage* first = 0; int index = 0; Glib::ustring targetName; -- cgit v1.2.3 From 5b4f5eea12a4ee758114c3b18d95962bd87b4a19 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Tue, 30 Aug 2016 12:38:29 +0100 Subject: Use HarfBuzz instead of deprecated Pango OT Fixed bugs: - https://launchpad.net/bugs/1488159 (bzr r15094) --- CMakeScripts/DefineDependsandFlags.cmake | 9 ++- src/libnrtype/FontFactory.cpp | 125 ++++++++++++++----------------- 2 files changed, 66 insertions(+), 68 deletions(-) diff --git a/CMakeScripts/DefineDependsandFlags.cmake b/CMakeScripts/DefineDependsandFlags.cmake index 186daf33f..e3bc9258e 100644 --- a/CMakeScripts/DefineDependsandFlags.cmake +++ b/CMakeScripts/DefineDependsandFlags.cmake @@ -44,7 +44,14 @@ if(WIN32) endif() endif() -pkg_check_modules(INKSCAPE_DEP REQUIRED pangocairo pangoft2 fontconfig gthread-2.0 gsl gmodule-2.0) +pkg_check_modules(INKSCAPE_DEP REQUIRED + harfbuzz + pangocairo + pangoft2 + fontconfig + gthread-2.0 + gsl + gmodule-2.0) list(APPEND INKSCAPE_LIBS ${INKSCAPE_DEP_LDFLAGS}) list(APPEND INKSCAPE_INCS_SYS ${INKSCAPE_DEP_INCLUDE_DIRS}) diff --git a/src/libnrtype/FontFactory.cpp b/src/libnrtype/FontFactory.cpp index 35d584840..1fbdce036 100644 --- a/src/libnrtype/FontFactory.cpp +++ b/src/libnrtype/FontFactory.cpp @@ -24,6 +24,9 @@ #include "util/unordered-containers.h" #include +#include +#include + typedef INK_UNORDERED_MAP FaceMapType; // need to avoid using the size field @@ -99,7 +102,6 @@ font_factory::font_factory(void) : fontSize(512), loadedPtr(new FaceMapType()) { - // std::cout << pango_version_string() << std::endl; #ifdef USE_PANGO_WIN32 #else pango_ft2_font_map_set_resolution(PANGO_FT2_FONT_MAP(fontServer), @@ -593,13 +595,15 @@ font_instance* font_factory::FaceFromFontSpecification(char const *fontSpecifica return font; } -void dump_tag( guint32 *tag, Glib::ustring prefix = "" ) { +void dump_tag( guint32 *tag, Glib::ustring prefix = "", bool lf=true ) { std::cout << prefix << ((char)((*tag & 0xff000000)>>24)) << ((char)((*tag & 0x00ff0000)>>16)) << ((char)((*tag & 0x0000ff00)>>8)) - << ((char)((*tag & 0x000000ff)>>0)) - << std::endl; + << ((char)((*tag & 0x000000ff)>>0)); + if( lf ) { + std::cout << std::endl; + } } Glib::ustring extract_tag( guint32 *tag ) { @@ -677,74 +681,61 @@ font_instance *font_factory::Face(PangoFontDescription *descr, bool canFail) } // Extract which OpenType tables are in the font. We'll make a list of all tables - // regardless of which script and langauge they are in. These functions are deprecated but - // will eventually be replaced by newer functions (according to Behdad). - PangoOTInfo* info = pango_ot_info_get( res->theFace ); - - PangoOTTag* scripts = pango_ot_info_list_scripts( info, PANGO_OT_TABLE_GSUB ); - // std::cout << " scripts: " << std::endl; - for( unsigned i = 0; scripts[i] != 0; ++i ) { - // dump_tag( &scripts[i], " " ); - - guint script_index = -1; - if( pango_ot_info_find_script( info, PANGO_OT_TABLE_GSUB, scripts[i], &script_index )) { - - PangoOTTag* languages = - pango_ot_info_list_languages( info, PANGO_OT_TABLE_GSUB, script_index, NULL); - // if( languages[0] != 0 ) - // std::cout << " languages: " << std::endl; - - for( unsigned j = 0; languages[j] != 0; ++j ) { - // dump_tag( &languages[j], " lang: "); - - guint language_index = -1; - if( pango_ot_info_find_language(info, PANGO_OT_TABLE_GSUB, script_index, languages[j], &language_index, NULL)) { - - PangoOTTag* features = - pango_ot_info_list_features( info, PANGO_OT_TABLE_GSUB, 0, i, j ); - // if( features[0] != 0 ) - // std::cout << " features: " << std::endl; - - for( unsigned k = 0; features[k] != 0; ++k ) { - // dump_tag( &features[k], " feature: "); - ++(res->openTypeTables[ extract_tag(&features[k])]); - } - g_free( features ); - } else { - // std::cout << " No languages defined" << std::endl; - PangoOTTag* features = - pango_ot_info_list_features( info, PANGO_OT_TABLE_GSUB, 0, i, PANGO_OT_DEFAULT_LANGUAGE ); - // if( features[0] != 0 ) - // std::cout << " default features: " << std::endl; - - for( unsigned k = 0; features[k] != 0; ++k ) { - // dump_tag( &features[k], " feature: " ); - ++(res->openTypeTables[ extract_tag(&features[k])]); - } - g_free( features ); + // regardless of which script and langauge they are in. This Harfbuzz code replaces + // an earlier Pango version as the Pango functions are deprecated. + + // Empty map... bitmap fonts seem to be loaded multiple times. + res->openTypeTables.clear(); + + auto const hb_face = hb_ft_face_create(res->theFace, NULL); + + // First time to get size of array + auto script_count = hb_ot_layout_table_get_script_tags(hb_face, HB_OT_TAG_GSUB, 0, NULL, NULL); + auto const scripts_hb = g_new(hb_tag_t, script_count + 1); + + // Second time to fill array (this two step process was not necessary with Pango). + hb_ot_layout_table_get_script_tags(hb_face, HB_OT_TAG_GSUB, 0, &script_count, scripts_hb); + + for(unsigned int i = 0; i < script_count; ++i) { + auto language_count = hb_ot_layout_script_get_language_tags(hb_face, HB_OT_TAG_GSUB, i, 0, NULL, NULL); + + if(language_count > 0) { + auto const languages_hb = g_new(hb_tag_t, language_count + 1); + hb_ot_layout_script_get_language_tags(hb_face, HB_OT_TAG_GSUB, i, 0, &language_count, languages_hb); + + for(unsigned int j = 0; j < language_count; ++j) { + auto feature_count = hb_ot_layout_language_get_feature_tags(hb_face, HB_OT_TAG_GSUB, i, j, 0, NULL, NULL); + auto const features_hb = g_new(hb_tag_t, feature_count + 1); + hb_ot_layout_language_get_feature_tags(hb_face, HB_OT_TAG_GSUB, i, j, 0, &feature_count, features_hb); + + for(unsigned int k = 0; k < feature_count; ++k) { + ++(res->openTypeTables[ extract_tag(&features_hb[k])]); } + + g_free(features_hb); } - g_free( languages ); - } else { - // std::cout << " No scripts defined! " << std::endl; + + g_free(languages_hb); + } + else { + // Even if no languages are present there is still the default. + auto feature_count = hb_ot_layout_language_get_feature_tags(hb_face, HB_OT_TAG_GSUB, i, + HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX, + 0, NULL, NULL); + auto const features_hb = g_new(hb_tag_t, feature_count + 1); + hb_ot_layout_language_get_feature_tags(hb_face, HB_OT_TAG_GSUB, i, + HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX, + 0, &feature_count, features_hb); + + for(unsigned int k = 0; k < feature_count; ++k) { + ++(res->openTypeTables[ extract_tag(&features_hb[k])]); + } + + g_free(features_hb); } } - g_free( scripts ); - - PangoOTTag* features = - pango_ot_info_list_features( info, PANGO_OT_TABLE_GSUB, 0, 0, PANGO_OT_DEFAULT_LANGUAGE ); - // if( features[0] != 0 ) - // std::cout << " DFTL DFTL features: " << std::endl; - for( unsigned i = 0; features[i] != 0; ++i ) { - // dump_tag( &features[i], " feature: " ); - ++(res->openTypeTables[ extract_tag(&features[i])]); - } - // std::map::iterator it; - // for( it = res->openTypeTables.begin(); it != res->openTypeTables.end(); ++it) { - // std::cout << "Table: " << it->first << " Occurances: " << it->second << std::endl; - // } - g_free( features ); + g_free(scripts_hb); } else { // already here res = loadedFaces[descr]; -- cgit v1.2.3 From e6d8674911f03498b28af6f1ed91bd7a69239cce Mon Sep 17 00:00:00 2001 From: Nicolas Dufour Date: Tue, 30 Aug 2016 17:30:59 +0200 Subject: [Bug #1447971] User palettes not available if all shared system palettes are deleted from installation. Fixed bugs: - https://launchpad.net/bugs/1447971 (bzr r15095) --- share/tutorials/tutorial-tips.it.svg | 660 +++++++++++++++++------------------ 1 file changed, 324 insertions(+), 336 deletions(-) diff --git a/share/tutorials/tutorial-tips.it.svg b/share/tutorials/tutorial-tips.it.svg index 8ca58d13d..e907a603a 100644 --- a/share/tutorials/tutorial-tips.it.svg +++ b/share/tutorials/tutorial-tips.it.svg @@ -48,7 +48,7 @@ - Questo tutorial dimostrerà vari trucchi che gli utenti hanno imparato nell'uso di Inkscape e qualche caratteristica "nascosta" che può aiutarti a velocizzare la produzione. + Questo tutorial mostra vari trucchi che gli utenti più esperti utilizzano in Inkscape e delle funzionalità “nascosta†che possono essere utili per aumentare la propria produttività. Radial placement with Tiled Clones @@ -78,7 +78,14 @@ and the like. A more general method, however, is as follows. - Scegli la simmetria P1 (traslazione semplice) e allora compensa questa traslazione andando nella scheda Spostamento e impostando a -100% lo spostamento Y per riga e lo spostamento X per colonna. Ora tutti i cloni saranno disposti esattamente sopra l'originale. Tutto ciò che riamane da fare e andare nella scheda Rotazione e impostare un angolo di rotazione per colonna, quindi crea il motivo con una riga e colonne multiple. Per esempio, qui c'è un motivo realizzato con linee orizzontali, con 30 colonne, ognuna ruotata di 6 gradi: + Choose the P1 symmetry (simple translation) and then compensate for +that translation by going to the Shift tab and setting Per +row/Shift Y and Per column/Shift X both to -100%. Now all +clones will be stacked exactly on top of the original. All that remains to do is to go +to the Rotation tab and set some rotation angle per column, then +create the pattern with one row and multiple columns. For example, here's a pattern made +out of a horizontal line, with 30 columns, each column rotated 6 degrees: + @@ -110,104 +117,110 @@ and the like. A more general method, however, is as follows. - - - - - - Per avere un quadrante di orologio partendo da questo, tutto ciò che devi fare è togliere o semplicemente sovrapporre la parte centrale con un cerchio bianco (per fare operazioni booleane sui cloni, scollegali prima). - - - - - - - Effetti più interessanti possono essere creati usando sia le righe che le colonne. Qui c'è un motivo con 10 colonne e 8 righe, con rotazione di 2 gradi per riga e 18 per colonna. Ogni gruppo di linee qui è una "colonna", cosi i gruppi sono a 18 gradi l'uno dall'altro; all'interno di ogni colonna, le singole linee sono separate da 2 gradi: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + To get a clock dial out of this, all you need to do is cut out or simply overlay the +central part by a white circle (to do boolean operations on clones, unlink them first). + + + + + + + + More interesting effects can be created by using both rows and columns. Here's a pattern +with 10 columns and 8 rows, with rotation of 2 degrees per row and 18 degrees per +column. Each group of lines here is a “columnâ€, so the groups are 18 degrees from each +other; within each column, individual lines are 2 degrees apart: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In the above examples, the line was rotated around its center. But what if you want the center to be outside of your shape? Just click on the object twice with the Selector tool @@ -217,88 +230,88 @@ Then use Create Tiled Clones on th or “starbursts†by randomizing scale, rotation, and possibly opacity: - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - How to do slicing (multiple rectangular export areas)? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + How to do slicing (multiple rectangular export areas)? - + - + Create a new layer, in that layer create invisible rectangles covering parts of your image. Make sure your document uses the px unit (default), turn on grid and snap the @@ -311,38 +324,39 @@ click Export in the dialog. Or, you can write a shell script or batch file to ex all of your areas, with a command like: - + - + - inkscape -i area-id -t filename.svg - + inkscape -i area-id -t nomefile.svg - + - + for each exported area. The -t switch tells it to use the remembered filename hint, otherwise you can provide the export filename with the -e switch. Alternatively, you can use the Extensions > Web > Slicer extensions, or Extensions > Export > Guillotine for similar results. - - Gradienti non-lineari + + Gradienti non-lineari - + - + - La versione 1.1 di SVG non supporta i gradienti non-lineari (cioè quelli che hanno una transizione non-lineare tra i colori). Puoi comunque emularli mediante i gradienti multistop. + The version 1.1 of SVG does not support non-linear gradients (i.e. those which have a +non-linear translations between colors). You can, however, emulate them by +multistop gradients. - + - + Start with a simple two-stop gradient (you can assign that in the Fill and Stroke dialog or use the gradient tool). Now, with the gradient tool, add a new gradient stop in @@ -360,13 +374,15 @@ stops: - - + + - + - E qui trovi vari gradienti non-lineari con multistop (analizzali mediante l'editor dei Gradienti): + And here are various “non-linear†multi-stop gradients (examine them in the Gradient +Editor): + @@ -449,23 +465,27 @@ stops: - - - - - - - - - - Gradienti radiali eccentrici + + + + + + + + + + Gradienti radiali eccentrici - + - + - I gradienti radiali non devono essere necessariamente simmetrici. Con lo strumento Gradiente, sposta con Maiusc la maniglia centrale di un gradiente ellittico. Questo sposterà la maniglia a forma di X del fuoco lontana dal suo centro. Quando non ne hai bisogno, puoi spostare il fuoco nuovamente al centro. + Radial gradients don't have to be symmetric. In Gradient tool, drag the central handle +of an elliptic gradient with Shift. This will move the x-shaped +focus handle of the gradient away from its center. When you don't +need it, you can snap the focus back by dragging it close to the center. + @@ -477,28 +497,28 @@ stops: - - - - Allineamento al centro della pagina + + + + Allineamento al centro della pagina - + - + To align something to the center or side of a page, select the object or group and then choose Page from the Relative to: list in the Align and Distribute dialog (Shift+Ctrl+A). - - Pulizia del documento + + Pulizia del documento - + - + Many of the no-longer-used gradients, patterns, and markers (more precisely, those which you edited manually) remain in the corresponding palettes and can be reused for new @@ -506,27 +526,23 @@ objects. However if you want to optimize your document, use the - - Proprietà nascoste e l'editor XML + + Proprietà nascoste e l'editor XML - + - + - The XML editor (Shift+Ctrl+X) allows you to change almost all aspects -of the document without using an external text editor. Also, Inkscape usually supports -more SVG features than are accessible from the GUI. The XML editor is one way to get -access to these features (if you know SVG). - + L'editor XML (Maiusc+Ctrl+X) permette di cambiare quasi tutti gli aspetti del documento senza usare un editor esterno. Inoltre, Inkscape supporta più funzionalità SVG di quante siano accessibili dall'interfaccia grafica. L'editor XML è un modo per avere accesso a queste funzionalità (conoscendo il formato SVG). - - Cambiare le unità di misura del righello + + Cambiare le unità di misura del righello - + - + In the default template, the unit of measure used by the rulers is mm. This is also the unit used in displaying coordinates at the lower-left corner and preselected in all units menus. (You @@ -536,154 +552,132 @@ change this, open Document PropertiesPage tab. - - Duplicazione veloce + + Duplicazione veloce - + - + - Per creare molte copie di un oggetto in maniera rapida, prendilo e mentre tieni premuto il pulsante del mouse calca Spazio. Lascerai una sorta di timbro dove e quante volte vorrai. + Per creare rapidamente molte copie di un oggetto, si può selezionarlo e, tenendo premuto il pulsante del mouse, premere Spazio. Lascerà una sorta di timbro della forma dove e per quante volte desiderato. - - Trucchi con lo strumento Penna + + Pen tool tricks - + - + - Con lo strumento Penna, hai le seguenti opzioni per terminare la tua linea: + Con lo strumento Penna, si può terminare il disegno di una linea: - - + + - + - Premere Invio + Premendo Invio - - + + - + - Doppio click con il pulsante sinistro del mouse + Facendo doppio Clic con il pulsante sinistro del mouse - - + + - + - Click with the right mouse button - + Facendo doppio Clic con il pulsante destro del mouse - - + + - + - Selezionare un altro strumento + Selezionando un altro strumento - + - + - Nota che quando il tracciato non è finito (ovvero esso è verde, con l'ultimo segmento in rosso) esso non esiste ancora come oggetto del documento. Perciò, per cancellarlo, usa o Esc (cancella l'intero tracciato) o Backspace (rimuove l'ultimo segmento non concluso) al posto di Annulla nel menù Modifica. + Nota che quando il tracciato non è finito (ovvero è verde, con l'ultimo segmento in rosso), questo non esiste ancora come oggetto nel documento. Quindi, per cancellarlo, premere Esc (cancella l'intero tracciato) o Backspace (rimuove l'ultimo segmento del tracciato non concluso) invece di Annulla. - + - + - Per aggiungere un nuovo sottotracciato ad un tracciato esistente, seleziona il tracciato e inizia a disegnare premendo Maiusc da un punto arbitrario. Se, comunque, vuoi semplicemente continuare un tracciato esistente, non è necessario premere Maiusc; inizia il disegno da uno dei due punti di ancoraggio del tracciato selezionato. + Per aggiungere un nuovo sottotracciato ad un tracciato esistente, selezionare il tracciato e iniziare a disegnare premendo Maiusc da un punto arbitrario. Se si vuole semplicemente continuare un tracciato esistente, non è necessario premere Maiusc, ma solo iniziare il disegno da uno dei due punti di ancoraggio del tracciato selezionato. - - Inserire valori Unicode + + Inserire valori Unicode - + - + - While in the Text tool, pressing Ctrl+U toggles between Unicode and -normal mode. In Unicode mode, each group of 4 hexadecimal digits you type becomes a -single Unicode character, thus allowing you to enter arbitrary symbols (as long as you -know their Unicode codepoints and the font supports them). To finish the Unicode input, -press Enter. For example, Ctrl+U 2 0 1 4 Enter inserts -an em-dash (—). To quit the Unicode mode without inserting anything press -Esc. - + Con lo strumento Testo, premendo Ctrl+U si commuta tra modalità Unicode e normale. In modalità Unicode, ogni gruppo di 4 caratteri esadecimali digitati divengono un singolo carattere Unicode, permettendo di inserire simboli arbitrari (se si conosce il loro corrispondente Unicode e se il tipo di carattere li supporta). Per uscire dalla modalità Unicode premere Invio. Per esempio, Ctrl+U 2 0 1 4 Invio inserisce un trattino (—). Per uscire dalla modalità Unicode senza inserire nulla premere Esc. - + - + You can also use the Text > Glyphs dialog to search for and insert glyphs into your document. - - Uso della griglia per disegnare icone + + Uso della griglia per disegnare icone - + - + - Suppose you want to create a 24x24 pixel icon. Create a 24x24 px canvas (use the -Document Preferences) and set the grid to 0.5 px (48x48 gridlines). -Now, if you align filled objects to even gridlines, and stroked -objects to odd gridlines with the stroke width in px being an even -number, and export it at the default 96dpi (so that 1 px becomes 1 bitmap pixel), you -get a crisp bitmap image without unneeded antialiasing. - + Nel caso si voglia creare un'icona 24x24: creare una pagina di dimensioni 24x24 px (usare Proprietà Documento) e impostare la griglia a 0.5 px (griglia 48x48). Ora, se si allineano oggetti con riempimento alle linee della griglia pari, e oggetti con contorno a quelle dispari (con un contorno di spessore un numero di px pari) e lo si esporta con una risoluzione di 96dpi (cosi che 1 px diventi 1 pixel bitmap), si ottiene un'immagine bitmap precisa senza necessità di anti-aliasing. - - Rotazione di oggetti + + Rotazione di oggetti - + - + - When in the Selector tool, click on an object to see the scaling arrows, -then click again on the object to see the rotation and skew arrows. If -the arrows at the corners are clicked and dragged, the object will rotate around the -center (shown as a cross mark). If you hold down the Shift key while -doing this, the rotation will occur around the opposite corner. You can also drag the -rotation center to any place. - + Con lo strumento Selezione, Cliccando due volte su un oggetto per mostrare le frecce di rotazione e distorsione. Se le frecce agli angoli vengono cliccate e spostate, l'oggetto ruoterà attorno al centro (mostrato con un segno a croce). Premendo contemporaneamente Maiusc, la rotazione avverrà attorno all'angolo opposto. Si può spostare il punto di rotazione in qualsiasi posizione. - + - + - Oppure, puoi ruotare mediante la tastiera premendo [ and ] (di 15 gradi) o Ctrl+[ and Ctrl+] (di 90 gradi). Sempre mediante [] ma con il tasto Alt ruoterà di un pixel. + Oppure, si può ruotare con la tastiera premendo [ e ] (di 15 gradi) o Ctrl+[ e Ctrl+] (di 90 gradi). Sempre con [] ma premendo il tasto Alt ruoterà di un pixel. - - Ombre + + Ombre - + - + - To quickly create drop shadows for objects, use the -Filters > Shadows and Glows > Drop Shadow... feature. - + Per creare rapidamente ombre di oggetti, usare Filtri > Ombre e aloni > Proietta ombra.... - + - + You can also easily create blurred drop shadows for objects manually with blur in the Fill and Stroke dialog. Select an object, duplicate it by Ctrl+D, press @@ -692,49 +686,43 @@ and lower than original object. Now open Fill And Stroke dialog and change Blur say, 5.0. That's it! - - Posizionare un testo su un tracciato + + Posizionare un testo su un tracciato - + - + - Per posizionare un testo su un tracciato, seleziona un testo e il tracciato insieme e scegli Metti su tracciato dal menù Testo. Il testo inizierà all'inizio del tracciato. In generale è meglio creare un apposito tracciato che sia adatto al testo, piuttosto che adattare del testo ad un disegno esistente - questo ti darà maggior controllo senza distorcere i tuoi disegni. + Per posizionare un testo su un tracciato, selezionare il testo e il tracciato insieme e usare Metti su tracciato dal menù Testo. Il testo comincerà all'inizio del tracciato. In generale, è preferibile creare un tracciato apposito che sia adatto al testo piuttosto che adattare del testo ad un disegno esistente - questo darà maggior controllo senza distorcere il disegno. - - Selezionare l'originale + + Selezionare l'originale - + - + - Quando hai un testo su un tracciato, una proiezione collegata, o un clone, il loro oggetto/tracciato sorgente può essere difficile da selezionare perchè esso è esattamente sottostante o reso invisibile e/o bloccato. Il tasto magico Maiusc+D ti aiuterà; seleziona il testo, la proiezione collegata, o il clone e premi Maiusc+D per muovere la selezione verso il corrispondente tracciato, la sorgente della proiezione o il clone originale. + Quando si ha un testo su un tracciato, una proiezione collegata, o un clone, il loro oggetto/tracciato sorgente può essere difficile da selezionare perchè è esattamente sottostante o reso invisibile e/o bloccato. La combinazione Maiusc+D ti aiuterà. Selezionando il testo, la proiezione collegata, o il clone e premendo Maiusc+D muoverà la selezione verso il corrispondente tracciato, la sorgente della proiezione o il clone originale. - - Recupero di finestre fuori dallo schermo + + Recupero di finestre fuori dallo schermo - + - + - When moving documents between systems with different resolutions or number of displays, -you may find Inkscape has saved a window position that places the window out of reach on -your screen. Simply maximise the window (which will bring it back into view, use the -task bar), save and reload. You can avoid this altogether by unchecking the global -option to save window geometry (Inkscape Preferences, -Interface > Windows section). - + Quando si spostano documenti tra sistemi con differenti risoluzioni o numero di schermi, può capitare che Inkscape salvi la posizione di una finestra che la colloca fuori dallo schermo. Massimizza semplicemente la finestra (che tornerà ad essere visibile, usa la barra delle applicazioni), salva e ricarica. Si può evitare direttamente il problema deselezionando l'opzione globale per il salvataggio della geometria della finestra (Preferenze, Interfaccia > Finestre). - - Trasparenze, gradienti e esportare PostScript + + Trasparenze, gradienti e esportare PostScript - + - + PostScript or EPS formats do not support transparency, so you should never use it if you are going to export to PS/EPS. In the case of flat @@ -750,7 +738,7 @@ value of the object, but only the alpha value of its fill or stroke color, so ma every object's opacity value is set to 100% before you start out. - + -- cgit v1.2.3 From d311eb86bbec90bd99244cf04f0f6145b3a80828 Mon Sep 17 00:00:00 2001 From: Alex Valavanis Date: Tue, 30 Aug 2016 23:19:16 +0100 Subject: Drop unused cxxtest fork in favour of Googletest Fixed bugs: - https://launchpad.net/bugs/1094771 (bzr r15096) --- cxxtest/CMakeLists.txt | 10 - cxxtest/COPYING | 504 ----- cxxtest/README | 63 - cxxtest/TODO | 34 - cxxtest/Versions | 152 -- cxxtest/cxxtest.spec | 40 - cxxtest/cxxtest/Descriptions.cpp | 58 - cxxtest/cxxtest/Descriptions.h | 74 - cxxtest/cxxtest/DummyDescriptions.cpp | 49 - cxxtest/cxxtest/DummyDescriptions.h | 76 - cxxtest/cxxtest/ErrorFormatter.h | 281 --- cxxtest/cxxtest/ErrorPrinter.h | 55 - cxxtest/cxxtest/Flags.h | 121 -- cxxtest/cxxtest/GlobalFixture.cpp | 23 - cxxtest/cxxtest/GlobalFixture.h | 30 - cxxtest/cxxtest/Gui.h | 178 -- cxxtest/cxxtest/LinkedList.cpp | 172 -- cxxtest/cxxtest/LinkedList.h | 65 - cxxtest/cxxtest/Mock.h | 350 ---- cxxtest/cxxtest/ParenPrinter.h | 21 - cxxtest/cxxtest/QtGui.h | 271 --- cxxtest/cxxtest/RealDescriptions.cpp | 311 ---- cxxtest/cxxtest/RealDescriptions.h | 223 --- cxxtest/cxxtest/Root.cpp | 18 - cxxtest/cxxtest/SelfTest.h | 7 - cxxtest/cxxtest/StdHeaders.h | 25 - cxxtest/cxxtest/StdValueTraits.h | 229 --- cxxtest/cxxtest/StdioFilePrinter.h | 41 - cxxtest/cxxtest/StdioPrinter.h | 22 - cxxtest/cxxtest/TeeListener.h | 182 -- cxxtest/cxxtest/TestListener.h | 70 - cxxtest/cxxtest/TestRunner.h | 125 -- cxxtest/cxxtest/TestSuite.cpp | 138 -- cxxtest/cxxtest/TestSuite.h | 512 ----- cxxtest/cxxtest/TestTracker.cpp | 248 --- cxxtest/cxxtest/TestTracker.h | 114 -- cxxtest/cxxtest/ValueTraits.cpp | 140 -- cxxtest/cxxtest/ValueTraits.h | 377 ---- cxxtest/cxxtest/Win32Gui.h | 531 ------ cxxtest/cxxtest/X11Gui.h | 327 ---- cxxtest/cxxtest/YesNoRunner.h | 29 - cxxtest/cxxtestgen.pl | 551 ------ cxxtest/cxxtestgen.py | 593 ------ cxxtest/docs/convert.pl | 83 - cxxtest/docs/guide.html | 1960 -------------------- cxxtest/docs/index.html | 56 - cxxtest/docs/qt.png | Bin 10567 -> 0 bytes cxxtest/docs/qt2.png | Bin 9035 -> 0 bytes cxxtest/docs/win32.png | Bin 1610 -> 0 bytes cxxtest/docs/x11.png | Bin 735 -> 0 bytes cxxtest/sample/Construct | 64 - cxxtest/sample/CreatedTest.h | 31 - cxxtest/sample/DeltaTest.h | 27 - cxxtest/sample/EnumTraits.h | 39 - cxxtest/sample/ExceptionTest.h | 52 - cxxtest/sample/FixtureTest.h | 37 - cxxtest/sample/Makefile.PL | 32 - cxxtest/sample/Makefile.bcc32 | 94 - cxxtest/sample/Makefile.msvc | 93 - cxxtest/sample/Makefile.unix | 88 - cxxtest/sample/MessageTest.h | 30 - cxxtest/sample/SimpleTest.h | 59 - cxxtest/sample/TraitsTest.h | 69 - cxxtest/sample/aborter.tpl | 16 - cxxtest/sample/file_printer.tpl | 22 - cxxtest/sample/gui/GreenYellowRed.h | 57 - cxxtest/sample/mock/Dice.cpp | 14 - cxxtest/sample/mock/Dice.h | 13 - cxxtest/sample/mock/Makefile | 22 - cxxtest/sample/mock/MockStdlib.h | 31 - cxxtest/sample/mock/T/stdlib.h | 13 - cxxtest/sample/mock/TestDice.h | 62 - cxxtest/sample/mock/mock_stdlib.cpp | 2 - cxxtest/sample/mock/real_stdlib.cpp | 2 - cxxtest/sample/mock/roll.cpp | 11 - cxxtest/sample/msvc/CxxTest_1_Run.dsp | 93 - cxxtest/sample/msvc/CxxTest_2_Build.dsp | 94 - cxxtest/sample/msvc/CxxTest_3_Generate.dsp | 93 - cxxtest/sample/msvc/CxxTest_Workspace.dsw | 59 - cxxtest/sample/msvc/FixFiles.bat | 212 --- cxxtest/sample/msvc/Makefile | 36 - cxxtest/sample/msvc/ReadMe.txt | 30 - cxxtest/sample/only.tpl | 33 - cxxtest/sample/parts/Makefile.unix | 39 - cxxtest/sample/winddk/Makefile | 2 - cxxtest/sample/winddk/Makefile.inc | 15 - cxxtest/sample/winddk/RunTests.tpl | 13 - cxxtest/sample/winddk/SOURCES | 46 - cxxtest/sample/yes_no_runner.cpp | 11 - src/CMakeLists.txt | 15 - src/attributes-test.h | 611 ------ src/color-profile-test.h | 150 -- src/cxxtest-template.tpl | 13 - src/dir-util-test.h | 56 - src/extract-uri-test.h | 88 - src/marker-test.h | 39 - src/mod360-test.h | 56 - src/object-test.h | 234 --- src/preferences-test.h | 136 -- src/round-test.h | 91 - src/sp-gradient-test.h | 161 -- src/sp-style-elem-test.h | 166 -- src/style-test.h | 537 ------ src/test-helpers.h | 66 - src/uri-test.h | 90 - src/verbs-test.h | 86 - .../src/cxxtests-to-migrate/extract-uri-test.h | 88 + testfiles/src/cxxtests-to-migrate/marker-test.h | 39 + testfiles/src/cxxtests-to-migrate/mod360-test.h | 56 + testfiles/src/cxxtests-to-migrate/object-test.h | 234 +++ .../src/cxxtests-to-migrate/preferences-test.h | 136 ++ testfiles/src/cxxtests-to-migrate/round-test.h | 91 + .../src/cxxtests-to-migrate/sp-gradient-test.h | 161 ++ .../src/cxxtests-to-migrate/sp-style-elem-test.h | 166 ++ testfiles/src/cxxtests-to-migrate/style-test.h | 537 ++++++ testfiles/src/cxxtests-to-migrate/test-helpers.h | 66 + testfiles/src/cxxtests-to-migrate/uri-test.h | 90 + testfiles/src/cxxtests-to-migrate/verbs-test.h | 86 + 118 files changed, 1750 insertions(+), 13890 deletions(-) delete mode 100644 cxxtest/CMakeLists.txt delete mode 100644 cxxtest/COPYING delete mode 100644 cxxtest/README delete mode 100644 cxxtest/TODO delete mode 100644 cxxtest/Versions delete mode 100644 cxxtest/cxxtest.spec delete mode 100644 cxxtest/cxxtest/Descriptions.cpp delete mode 100644 cxxtest/cxxtest/Descriptions.h delete mode 100644 cxxtest/cxxtest/DummyDescriptions.cpp delete mode 100644 cxxtest/cxxtest/DummyDescriptions.h delete mode 100644 cxxtest/cxxtest/ErrorFormatter.h delete mode 100644 cxxtest/cxxtest/ErrorPrinter.h delete mode 100644 cxxtest/cxxtest/Flags.h delete mode 100644 cxxtest/cxxtest/GlobalFixture.cpp delete mode 100644 cxxtest/cxxtest/GlobalFixture.h delete mode 100644 cxxtest/cxxtest/Gui.h delete mode 100644 cxxtest/cxxtest/LinkedList.cpp delete mode 100644 cxxtest/cxxtest/LinkedList.h delete mode 100644 cxxtest/cxxtest/Mock.h delete mode 100644 cxxtest/cxxtest/ParenPrinter.h delete mode 100644 cxxtest/cxxtest/QtGui.h delete mode 100644 cxxtest/cxxtest/RealDescriptions.cpp delete mode 100644 cxxtest/cxxtest/RealDescriptions.h delete mode 100644 cxxtest/cxxtest/Root.cpp delete mode 100644 cxxtest/cxxtest/SelfTest.h delete mode 100644 cxxtest/cxxtest/StdHeaders.h delete mode 100644 cxxtest/cxxtest/StdValueTraits.h delete mode 100644 cxxtest/cxxtest/StdioFilePrinter.h delete mode 100644 cxxtest/cxxtest/StdioPrinter.h delete mode 100644 cxxtest/cxxtest/TeeListener.h delete mode 100644 cxxtest/cxxtest/TestListener.h delete mode 100644 cxxtest/cxxtest/TestRunner.h delete mode 100644 cxxtest/cxxtest/TestSuite.cpp delete mode 100644 cxxtest/cxxtest/TestSuite.h delete mode 100644 cxxtest/cxxtest/TestTracker.cpp delete mode 100644 cxxtest/cxxtest/TestTracker.h delete mode 100644 cxxtest/cxxtest/ValueTraits.cpp delete mode 100644 cxxtest/cxxtest/ValueTraits.h delete mode 100644 cxxtest/cxxtest/Win32Gui.h delete mode 100644 cxxtest/cxxtest/X11Gui.h delete mode 100644 cxxtest/cxxtest/YesNoRunner.h delete mode 100755 cxxtest/cxxtestgen.pl delete mode 100755 cxxtest/cxxtestgen.py delete mode 100644 cxxtest/docs/convert.pl delete mode 100644 cxxtest/docs/guide.html delete mode 100644 cxxtest/docs/index.html delete mode 100644 cxxtest/docs/qt.png delete mode 100644 cxxtest/docs/qt2.png delete mode 100644 cxxtest/docs/win32.png delete mode 100644 cxxtest/docs/x11.png delete mode 100644 cxxtest/sample/Construct delete mode 100644 cxxtest/sample/CreatedTest.h delete mode 100644 cxxtest/sample/DeltaTest.h delete mode 100644 cxxtest/sample/EnumTraits.h delete mode 100644 cxxtest/sample/ExceptionTest.h delete mode 100644 cxxtest/sample/FixtureTest.h delete mode 100755 cxxtest/sample/Makefile.PL delete mode 100644 cxxtest/sample/Makefile.bcc32 delete mode 100644 cxxtest/sample/Makefile.msvc delete mode 100644 cxxtest/sample/Makefile.unix delete mode 100644 cxxtest/sample/MessageTest.h delete mode 100644 cxxtest/sample/SimpleTest.h delete mode 100644 cxxtest/sample/TraitsTest.h delete mode 100644 cxxtest/sample/aborter.tpl delete mode 100644 cxxtest/sample/file_printer.tpl delete mode 100644 cxxtest/sample/gui/GreenYellowRed.h delete mode 100644 cxxtest/sample/mock/Dice.cpp delete mode 100644 cxxtest/sample/mock/Dice.h delete mode 100644 cxxtest/sample/mock/Makefile delete mode 100644 cxxtest/sample/mock/MockStdlib.h delete mode 100644 cxxtest/sample/mock/T/stdlib.h delete mode 100644 cxxtest/sample/mock/TestDice.h delete mode 100644 cxxtest/sample/mock/mock_stdlib.cpp delete mode 100644 cxxtest/sample/mock/real_stdlib.cpp delete mode 100644 cxxtest/sample/mock/roll.cpp delete mode 100644 cxxtest/sample/msvc/CxxTest_1_Run.dsp delete mode 100644 cxxtest/sample/msvc/CxxTest_2_Build.dsp delete mode 100644 cxxtest/sample/msvc/CxxTest_3_Generate.dsp delete mode 100644 cxxtest/sample/msvc/CxxTest_Workspace.dsw delete mode 100644 cxxtest/sample/msvc/FixFiles.bat delete mode 100644 cxxtest/sample/msvc/Makefile delete mode 100644 cxxtest/sample/msvc/ReadMe.txt delete mode 100644 cxxtest/sample/only.tpl delete mode 100644 cxxtest/sample/parts/Makefile.unix delete mode 100644 cxxtest/sample/winddk/Makefile delete mode 100644 cxxtest/sample/winddk/Makefile.inc delete mode 100644 cxxtest/sample/winddk/RunTests.tpl delete mode 100644 cxxtest/sample/winddk/SOURCES delete mode 100644 cxxtest/sample/yes_no_runner.cpp delete mode 100644 src/attributes-test.h delete mode 100644 src/color-profile-test.h delete mode 100644 src/cxxtest-template.tpl delete mode 100644 src/dir-util-test.h delete mode 100644 src/extract-uri-test.h delete mode 100644 src/marker-test.h delete mode 100644 src/mod360-test.h delete mode 100644 src/object-test.h delete mode 100644 src/preferences-test.h delete mode 100644 src/round-test.h delete mode 100644 src/sp-gradient-test.h delete mode 100644 src/sp-style-elem-test.h delete mode 100644 src/style-test.h delete mode 100644 src/test-helpers.h delete mode 100644 src/uri-test.h delete mode 100644 src/verbs-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/extract-uri-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/marker-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/mod360-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/object-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/preferences-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/round-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/sp-gradient-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/sp-style-elem-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/style-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/test-helpers.h create mode 100644 testfiles/src/cxxtests-to-migrate/uri-test.h create mode 100644 testfiles/src/cxxtests-to-migrate/verbs-test.h diff --git a/cxxtest/CMakeLists.txt b/cxxtest/CMakeLists.txt deleted file mode 100644 index 95cfc8c51..000000000 --- a/cxxtest/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ - -set(cxxtest_SRC - #add stuff here -) - -# Add New folders in src folder here - -add_subdirectory(cxxtest) -add_subdirectory(docs) -add_subdirectory(sample) diff --git a/cxxtest/COPYING b/cxxtest/COPYING deleted file mode 100644 index b1e3f5a26..000000000 --- a/cxxtest/COPYING +++ /dev/null @@ -1,504 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! - - diff --git a/cxxtest/README b/cxxtest/README deleted file mode 100644 index 40722cd94..000000000 --- a/cxxtest/README +++ /dev/null @@ -1,63 +0,0 @@ -Introduction ------------- - -CxxTest is a JUnit/CppUnit/xUnit-like framework for C++. - -Its advantages over existing alternatives are that it: - - Doesn't require RTTI - - Doesn't require member template functions - - Doesn't require exception handling - - Doesn't require any external libraries (including memory management, - file/console I/O, graphics libraries) - -This makes it extremely portable and usable. - -CxxTest is available under the GNU Lesser General Public Licence (LGPL). -See http://www.gnu.org/copyleft/lesser.html for the license. - -Simple user's guide -------------------- - -1. Create a test suite header file: - -MyTest.h: - #include - - class MyTestSuite : public CxxTest::TestSuite - { - public: - void testAddition( void ) - { - TS_ASSERT( 1 + 1 > 1 ); - TS_ASSERT_EQUALS( 1 + 1, 2 ); - } - }; - - -2. Generate the tests file: - - # cxxtestgen.pl -o tests.cpp MyTestSuite.h - - -3. Create a main function that runs the tests - -main.cpp: - #include - - int main( void ) - { - CxxText::ErrorPrinter::runAllTests(); - return 0; - } - - -4. Compile and run! - - # g++ -o main main.cpp tests.cpp - # ./main - Running 1 test(s).OK! - - -Advanced User's Guide ---------------------- -See docs/guide.html. diff --git a/cxxtest/TODO b/cxxtest/TODO deleted file mode 100644 index 7a7f926e5..000000000 --- a/cxxtest/TODO +++ /dev/null @@ -1,34 +0,0 @@ -This is an -*- Outline -*- of ideas for future versions of CxxTest. -It is not meant to be "human readable". - -* CxxTest To Do list - -** Mock framework - -Write some mocks - -*** Distribution -Seperate packages (w/ binaries)? How would that be used? -For Windows: .lib for "Real" and "Mock" parts. -For Linux: Maybe. Different compilers etc. -So probably only source release with Makefiles and .ds[pw]? Or just Win32 binary. - -**** Installation? -extract cxxtest-x.y.z.tar.gz -(extract cxxtest-mock-x.y.z.tar.gz) ? -make -C cxxtest/Real -make -C cxxtest/Mock - -or maybe make -C cxxtest -f Makefile.mock -but then Makefile.mock.bcc32, Makefile.mock.msvc, Makefile.mock.gcc, and heaven knows what else. - -Could put the Makefile.mock.* in cxxtest/Real and cxxtest/Mock or in cxxtest/T - -Maybe this should be a different package altogether? -Seems logical, since they evolve separately. But then you'd want to download both. - -** Thoughts --fomit-frame-pointer - -** TS_HEX - diff --git a/cxxtest/Versions b/cxxtest/Versions deleted file mode 100644 index b35cba20a..000000000 --- a/cxxtest/Versions +++ /dev/null @@ -1,152 +0,0 @@ -CxxTest Releases -================ - -Version 3.10.1 (2004-12-01): ----------------------------- - - Improved support for VC7 - - Fixed clash with some versions of STL - -Version 3.10.0 (2004-11-20): ----------------------------- - - Added mock framework for global functions - - Added TS_ASSERT_THROWS_ASSERT and TS_ASSERT_THROWS_EQUALS - - Added CXXTEST_ENUM_TRAITS - - Improved support for STL classes (vector, map etc.) - - Added support for Digital Mars compiler - - Reduced root/part compilation time and binary size - - Support C++-style commenting of tests - -Version 3.9.1 (2004-01-19): ---------------------------- - - Fixed small bug with runner exit code - - Embedded test suites are now deprecated - -Version 3.9.0 (2004-01-17): ---------------------------- - - Added TS_TRACE - - Added --no-static-init - - CxxTest::setAbortTestOnFail() works even without --abort-on-fail - -Version 3.8.5 (2004-01-08): ---------------------------- - - Added --no-eh - - Added CxxTest::setAbortTestOnFail() and CXXTEST_DEFAULT_ABORT - - Added CxxTest::setMaxDumpSize() - - Added StdioFilePrinter - -Version 3.8.4 (2003-12-31): ---------------------------- - - Split distribution into cxxtest and cxxtest-selftest - - Added `sample/msvc/FixFiles.bat' - -Version 3.8.3 (2003-12-24): ---------------------------- - - Added TS_ASSERT_PREDICATE - - Template files can now specify where to insert the preamble - - Added a sample Visual Studio workspace in `sample/msvc' - - Can compile in MSVC with warning level 4 - - Changed output format slightly - -Version 3.8.1 (2003-12-21): ---------------------------- - - Fixed small bug when using multiple --part files. - - Fixed X11 GUI crash when there's no X server. - - Added GlobalFixture::setUpWorld()/tearDownWorld() - - Added leaveOnly(), activateAllTests() and `sample/only.tpl' - - Should now run without warnings on Sun compiler. - -Version 3.8.0 (2003-12-13): ---------------------------- - - Fixed bug where `Root.cpp' needed exception handling - - Added TS_ASSERT_RELATION - - TSM_ macros now also tell you what went wrong - - Renamed Win32Gui::free() to avoid clashes - - Now compatible with more versions of Borland compiler - - Improved the documentation - -Version 3.7.1 (2003-09-29): ---------------------------- - - Added --version - - Compiles with even more exotic g++ warnings - - Win32 Gui compiles with UNICODE - - Should compile on some more platforms (Sun Forte, HP aCC) - -Version 3.7.0 (2003-09-20): ---------------------------- - - Added TS_ASSERT_LESS_THAN_EQUALS - - Minor cleanups - -Version 3.6.1 (2003-09-15): ---------------------------- - - Improved QT GUI - - Improved portability some more - -Version 3.6.0 (2003-09-04): ---------------------------- - - Added --longlong - - Some portability improvements - -Version 3.5.1 (2003-09-03): ---------------------------- - - Major internal rewrite of macros - - Added TS_ASSERT_SAME_DATA - - Added --include option - - Added --part and --root to enable splitting the test runner - - Added global fixtures - - Enhanced Win32 GUI with timers, -keep and -title - - Now compiles with strict warnings - -Version 3.1.1 (2003-08-27): ---------------------------- - - Fixed small bug in TS_ASSERT_THROWS_*() - -Version 3.1.0 (2003-08-23): ---------------------------- - - Default ValueTraits now dumps value as hex bytes - - Fixed double invocation bug (e.g. TS_FAIL(functionWithSideEffects())) - - TS_ASSERT_THROWS*() are now "abort on fail"-friendly - - Win32 GUI now supports Windows 98 and doesn't need comctl32.lib - -Version 3.0.1 (2003-08-07): ---------------------------- - - Added simple GUI for X11, Win32 and Qt - - Added TS_WARN() macro - - Removed --exit-code - - Improved samples - - Improved support for older (pre-std::) compilers - - Made a PDF version of the User's Guide - -Version 2.8.4 (2003-07-21): ---------------------------- - - Now supports g++-3.3 - - Added --have-eh - - Fixed bug in numberToString() - -Version 2.8.3 (2003-06-30): ---------------------------- - - Fixed bugs in cxxtestgen.pl - - Fixed warning for some compilers in ErrorPrinter/StdioPrinter - - Thanks Martin Jost for pointing out these problems! - -Version 2.8.2 (2003-06-10): ---------------------------- - - Fixed bug when using CXXTEST_ABORT_TEST_ON_FAIL without standard library - - Added CXXTEST_USER_TRAITS - - Added --abort-on-fail - -Version 2.8.1 (2003-01-16): ---------------------------- - - Fixed charToString() for negative chars - -Version 2.8.0 (2003-01-13): ---------------------------- - - Added CXXTEST_ABORT_TEST_ON_FAIL for xUnit-like behaviour - - Added `sample/winddk' - - Improved ValueTraits - - Improved output formatter - - Started version history - -Version 2.7.0 (2002-09-29): ---------------------------- - - Added embedded test suites - - Major internal improvements diff --git a/cxxtest/cxxtest.spec b/cxxtest/cxxtest.spec deleted file mode 100644 index 0f1ded6c5..000000000 --- a/cxxtest/cxxtest.spec +++ /dev/null @@ -1,40 +0,0 @@ -Name: cxxtest -Summary: CxxTest Testing Framework for C++ -Version: 3.10.1 -Release: 1 -Copyright: LGPL -Group: Development/C++ -Source: cxxtest-%{version}.tar.gz -BuildRoot: /tmp/cxxtest-build -BuildArch: noarch -Prefix: /usr - -%description -CxxTest is a JUnit/CppUnit/xUnit-like framework for C++. -Its advantages over existing alternatives are that it: - - Doesn't require RTTI - - Doesn't require member template functions - - Doesn't require exception handling - - Doesn't require any external libraries (including memory management, - file/console I/O, graphics libraries) - -%prep -%setup -n cxxtest - -%build - -%install -install -m 755 -d $RPM_BUILD_ROOT/usr/bin $RPM_BUILD_ROOT/usr/include/cxxtest -install -m 755 cxxtestgen.p[ly] $RPM_BUILD_ROOT/usr/bin/ -install -m 644 cxxtest/* $RPM_BUILD_ROOT/usr/include/cxxtest/ - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%attr(-, root, root) %doc README -%attr(-, root, root) %doc sample -%attr(-, root, root) /usr/include/cxxtest -%attr(-, root, root) /usr/bin/cxxtestgen.pl -%attr(-, root, root) /usr/bin/cxxtestgen.py - diff --git a/cxxtest/cxxtest/Descriptions.cpp b/cxxtest/cxxtest/Descriptions.cpp deleted file mode 100644 index 143f8f8fd..000000000 --- a/cxxtest/cxxtest/Descriptions.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef __cxxtest__Descriptions_cpp__ -#define __cxxtest__Descriptions_cpp__ - -#include - -namespace CxxTest -{ - TestDescription::~TestDescription() {} - SuiteDescription::~SuiteDescription() {} - WorldDescription::~WorldDescription() {} - - // - // Convert total tests to string - // -#ifndef _CXXTEST_FACTOR - char *WorldDescription::strTotalTests( char *s ) const - { - numberToString( numTotalTests(), s ); - return s; - } -#else // _CXXTEST_FACTOR - char *WorldDescription::strTotalTests( char *s ) const - { - char *p = numberToString( numTotalTests(), s ); - - if ( numTotalTests() <= 1 ) - return s; - - unsigned n = numTotalTests(); - unsigned numFactors = 0; - - for ( unsigned factor = 2; (factor * factor) <= n; factor += (factor == 2) ? 1 : 2 ) { - unsigned power; - - for ( power = 0; (n % factor) == 0; n /= factor ) - ++ power; - - if ( !power ) - continue; - - p = numberToString( factor, copyString( p, (numFactors == 0) ? " = " : " * " ) ); - if ( power > 1 ) - p = numberToString( power, copyString( p, "^" ) ); - ++ numFactors; - } - - if ( n > 1 ) { - if ( !numFactors ) - copyString( p, tracker().failedTests() ? " :(" : tracker().warnings() ? " :|" : " :)" ); - else - numberToString( n, copyString( p, " * " ) ); - } - return s; - } -#endif // _CXXTEST_FACTOR -}; - -#endif // __cxxtest__Descriptions_cpp__ diff --git a/cxxtest/cxxtest/Descriptions.h b/cxxtest/cxxtest/Descriptions.h deleted file mode 100644 index bd373ec76..000000000 --- a/cxxtest/cxxtest/Descriptions.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef __cxxtest__Descriptions_h__ -#define __cxxtest__Descriptions_h__ - -// -// TestDescription, SuiteDescription and WorldDescription -// hold information about tests so they can be run and reported. -// - -#include - -namespace CxxTest -{ - class TestSuite; - - class TestDescription : public Link - { - public: - virtual ~TestDescription(); - - virtual const char *file() const = 0; - virtual unsigned line() const = 0; - virtual const char *testName() const = 0; - virtual const char *suiteName() const = 0; - - virtual void run() = 0; - - virtual const TestDescription *next() const = 0; - virtual TestDescription *next() = 0; - }; - - class SuiteDescription : public Link - { - public: - virtual ~SuiteDescription(); - - virtual const char *file() const = 0; - virtual unsigned line() const = 0; - virtual const char *suiteName() const = 0; - virtual TestSuite *suite() const = 0; - - virtual unsigned numTests() const = 0; - virtual const TestDescription &testDescription( unsigned /*i*/ ) const = 0; - - virtual TestDescription *firstTest() = 0; - virtual const TestDescription *firstTest() const = 0; - virtual SuiteDescription *next() = 0; - virtual const SuiteDescription *next() const = 0; - - virtual void activateAllTests() = 0; - virtual bool leaveOnly( const char * /*testName*/ ) = 0; - }; - - class WorldDescription : public Link - { - public: - virtual ~WorldDescription(); - - virtual unsigned numSuites( void ) const = 0; - virtual unsigned numTotalTests( void ) const = 0; - virtual const SuiteDescription &suiteDescription( unsigned /*i*/ ) const = 0; - - enum { MAX_STRLEN_TOTAL_TESTS = 32 }; - char *strTotalTests( char * /*buffer*/ ) const; - - virtual SuiteDescription *firstSuite() = 0; - virtual const SuiteDescription *firstSuite() const = 0; - - virtual void activateAllTests() = 0; - virtual bool leaveOnly( const char * /*suiteName*/, const char * /*testName*/ = 0 ) = 0; - }; -} - -#endif // __cxxtest__Descriptions_h__ - diff --git a/cxxtest/cxxtest/DummyDescriptions.cpp b/cxxtest/cxxtest/DummyDescriptions.cpp deleted file mode 100644 index c862e439d..000000000 --- a/cxxtest/cxxtest/DummyDescriptions.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include - -namespace CxxTest -{ - DummyTestDescription::DummyTestDescription() {} - - const char *DummyTestDescription::file() const { return ""; } - unsigned DummyTestDescription::line() const { return 0; } - const char *DummyTestDescription::testName() const { return ""; } - const char *DummyTestDescription::suiteName() const { return ""; } - bool DummyTestDescription::setUp() { return true;} - void DummyTestDescription::run() {} - bool DummyTestDescription::tearDown() { return true;} - - TestDescription *DummyTestDescription::next() { return 0; } - const TestDescription *DummyTestDescription::next() const { return 0; } - - DummySuiteDescription::DummySuiteDescription() : _test() {} - - const char *DummySuiteDescription::file() const { return ""; } - unsigned DummySuiteDescription::line() const { return 0; } - const char *DummySuiteDescription::suiteName() const { return ""; } - TestSuite *DummySuiteDescription::suite() const { return 0; } - unsigned DummySuiteDescription::numTests() const { return 0; } - const TestDescription &DummySuiteDescription::testDescription( unsigned ) const { return _test; } - SuiteDescription *DummySuiteDescription::next() { return 0; } - TestDescription *DummySuiteDescription::firstTest() { return 0; } - const SuiteDescription *DummySuiteDescription::next() const { return 0; } - const TestDescription *DummySuiteDescription::firstTest() const { return 0; } - void DummySuiteDescription::activateAllTests() {} - bool DummySuiteDescription::leaveOnly( const char * /*testName*/ ) { return false; } - - bool DummySuiteDescription::setUp() { return true;} - bool DummySuiteDescription::tearDown() { return true;} - - DummyWorldDescription::DummyWorldDescription() : _suite() {} - - unsigned DummyWorldDescription::numSuites( void ) const { return 0; } - unsigned DummyWorldDescription::numTotalTests( void ) const { return 0; } - const SuiteDescription &DummyWorldDescription::suiteDescription( unsigned ) const { return _suite; } - SuiteDescription *DummyWorldDescription::firstSuite() { return 0; } - const SuiteDescription *DummyWorldDescription::firstSuite() const { return 0; } - void DummyWorldDescription::activateAllTests() {} - bool DummyWorldDescription::leaveOnly( const char * /*suiteName*/, const char * /*testName*/ ) { return false; } - - bool DummyWorldDescription::setUp() { return true;} - bool DummyWorldDescription::tearDown() { return true;} -} - diff --git a/cxxtest/cxxtest/DummyDescriptions.h b/cxxtest/cxxtest/DummyDescriptions.h deleted file mode 100644 index c9215d125..000000000 --- a/cxxtest/cxxtest/DummyDescriptions.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __cxxtest__DummyDescriptions_h__ -#define __cxxtest__DummyDescriptions_h__ - -// -// DummyTestDescription, DummySuiteDescription and DummyWorldDescription -// - -#include - -namespace CxxTest -{ - class DummyTestDescription : public TestDescription - { - public: - DummyTestDescription(); - - const char *file() const; - unsigned line() const; - const char *testName() const; - const char *suiteName() const; - bool setUp(); - void run(); - bool tearDown(); - - TestDescription *next(); - const TestDescription *next() const; - }; - - class DummySuiteDescription : public SuiteDescription - { - public: - DummySuiteDescription(); - - const char *file() const; - unsigned line() const; - const char *suiteName() const; - TestSuite *suite() const; - unsigned numTests() const; - const TestDescription &testDescription( unsigned ) const; - SuiteDescription *next(); - TestDescription *firstTest(); - const SuiteDescription *next() const; - const TestDescription *firstTest() const; - void activateAllTests(); - bool leaveOnly( const char * /*testName*/ ); - - bool setUp(); - bool tearDown(); - - private: - DummyTestDescription _test; - }; - - class DummyWorldDescription : public WorldDescription - { - public: - DummyWorldDescription(); - - unsigned numSuites( void ) const; - unsigned numTotalTests( void ) const; - const SuiteDescription &suiteDescription( unsigned ) const; - SuiteDescription *firstSuite(); - const SuiteDescription *firstSuite() const; - void activateAllTests(); - bool leaveOnly( const char * /*suiteName*/, const char * /*testName*/ = 0 ); - - bool setUp(); - bool tearDown(); - - private: - DummySuiteDescription _suite; - }; -} - -#endif // __cxxtest__DummyDescriptions_h__ - diff --git a/cxxtest/cxxtest/ErrorFormatter.h b/cxxtest/cxxtest/ErrorFormatter.h deleted file mode 100644 index 968c310c2..000000000 --- a/cxxtest/cxxtest/ErrorFormatter.h +++ /dev/null @@ -1,281 +0,0 @@ -#ifndef __cxxtest__ErrorFormatter_h__ -#define __cxxtest__ErrorFormatter_h__ - -// -// The ErrorFormatter is a TestListener that -// prints reports of the errors to an output -// stream. Since we cannot rely ou the standard -// iostreams, this header defines a base class -// analogout to std::ostream. -// - -#include -#include -#include -#include - -namespace CxxTest -{ - class OutputStream - { - public: - virtual ~OutputStream() {} - virtual void flush() {}; - virtual OutputStream &operator<<( unsigned /*number*/ ) { return *this; } - virtual OutputStream &operator<<( const char * /*string*/ ) { return *this; } - - typedef void (*Manipulator)( OutputStream & ); - - virtual OutputStream &operator<<( Manipulator m ) { m( *this ); return *this; } - static void endl( OutputStream &o ) { (o << "\n").flush(); } - }; - - class ErrorFormatter : public TestListener - { - public: - ErrorFormatter( OutputStream *o, const char *preLine = ":", const char *postLine = "" ) : - _dotting( true ), - _reported( false ), - _o(o), - _preLine(preLine), - _postLine(postLine) - { - } - - int run() - { - TestRunner::runAllTests( *this ); - return tracker().failedTests(); - } - - void enterWorld( const WorldDescription & /*desc*/ ) - { - (*_o) << "Running " << totalTests; - _o->flush(); - _dotting = true; - _reported = false; - } - - static void totalTests( OutputStream &o ) - { - char s[WorldDescription::MAX_STRLEN_TOTAL_TESTS]; - const WorldDescription &wd = tracker().world(); - o << wd.strTotalTests( s ) << (wd.numTotalTests() == 1 ? " test" : " tests"); - } - - void enterSuite( const SuiteDescription & ) - { - _reported = false; - } - - void enterTest( const TestDescription & ) - { - _reported = false; - } - - void leaveTest( const TestDescription & ) - { - if ( !tracker().testFailed() ) { - ((*_o) << ".").flush(); - _dotting = true; - } - } - - void leaveWorld( const WorldDescription &desc ) - { - if ( !tracker().failedTests() ) { - (*_o) << "OK!" << endl; - return; - } - newLine(); - (*_o) << "Failed " << tracker().failedTests() << " of " << totalTests << endl; - unsigned numPassed = desc.numTotalTests() - tracker().failedTests(); - (*_o) << "Success rate: " << (numPassed * 100 / desc.numTotalTests()) << "%" << endl; - } - - void trace( const char *file, unsigned line, const char *expression ) - { - stop( file, line ) << "Trace: " << - expression << endl; - } - - void warning( const char *file, unsigned line, const char *expression ) - { - stop( file, line ) << "Warning: " << - expression << endl; - } - - void failedTest( const char *file, unsigned line, const char *expression ) - { - stop( file, line ) << "Error: Test failed: " << - expression << endl; - } - - void failedAssert( const char *file, unsigned line, const char *expression ) - { - stop( file, line ) << "Error: Assertion failed: " << - expression << endl; - } - - void failedAssertEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - stop( file, line ) << "Error: Expected (" << - xStr << " == " << yStr << "), found (" << - x << " != " << y << ")" << endl; - } - - void failedAssertSameData( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *sizeStr, const void *x, - const void *y, unsigned size ) - { - stop( file, line ) << "Error: Expected " << sizeStr << " (" << size << ") bytes to be equal at (" << - xStr << ") and (" << yStr << "), found:" << endl; - dump( x, size ); - (*_o) << " differs from" << endl; - dump( y, size ); - } - - void failedAssertDelta( const char *file, unsigned line, - const char *xStr, const char *yStr, const char *dStr, - const char *x, const char *y, const char *d ) - { - stop( file, line ) << "Error: Expected (" << - xStr << " == " << yStr << ") up to " << dStr << " (" << d << "), found (" << - x << " != " << y << ")" << endl; - } - - void failedAssertDiffers( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *value ) - { - stop( file, line ) << "Error: Expected (" << - xStr << " != " << yStr << "), found (" << - value << ")" << endl; - } - - void failedAssertLessThan( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - stop( file, line ) << "Error: Expected (" << - xStr << " < " << yStr << "), found (" << - x << " >= " << y << ")" << endl; - } - - void failedAssertLessThanEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - stop( file, line ) << "Error: Expected (" << - xStr << " <= " << yStr << "), found (" << - x << " > " << y << ")" << endl; - } - - void failedAssertRelation( const char *file, unsigned line, - const char *relation, const char *xStr, const char *yStr, - const char *x, const char *y ) - { - stop( file, line ) << "Error: Expected " << relation << "( " << - xStr << ", " << yStr << " ), found !" << relation << "( " << x << ", " << y << " )" << endl; - } - - void failedAssertPredicate( const char *file, unsigned line, - const char *predicate, const char *xStr, const char *x ) - { - stop( file, line ) << "Error: Expected " << predicate << "( " << - xStr << " ), found !" << predicate << "( " << x << " )" << endl; - } - - void failedAssertThrows( const char *file, unsigned line, - const char *expression, const char *type, - bool otherThrown ) - { - stop( file, line ) << "Error: Expected (" << expression << ") to throw (" << - type << ") but it " << (otherThrown ? "threw something else" : "didn't throw") << - endl; - } - - void failedAssertThrowsNot( const char *file, unsigned line, const char *expression ) - { - stop( file, line ) << "Error: Expected (" << expression << ") not to throw, but it did" << - endl; - } - - protected: - OutputStream *outputStream() const - { - return _o; - } - - private: - ErrorFormatter( const ErrorFormatter & ); - ErrorFormatter &operator=( const ErrorFormatter & ); - - OutputStream &stop( const char *file, unsigned line ) - { - newLine(); - reportTest(); - return (*_o) << file << _preLine << line << _postLine << ": "; - } - - void newLine( void ) - { - if ( _dotting ) { - (*_o) << endl; - _dotting = false; - } - } - - void reportTest( void ) - { - if( _reported ) - return; - (*_o) << "In " << tracker().suite().suiteName() << "::" << tracker().test().testName() << ":" << endl; - _reported = true; - } - - void dump( const void *buffer, unsigned size ) - { - if ( !buffer ) - dumpNull(); - else - dumpBuffer( buffer, size ); - } - - void dumpNull() - { - (*_o) << " (null)" << endl; - } - - void dumpBuffer( const void *buffer, unsigned size ) - { - unsigned dumpSize = size; - if ( maxDumpSize() && dumpSize > maxDumpSize() ) - dumpSize = maxDumpSize(); - - const unsigned char *p = (const unsigned char *)buffer; - (*_o) << " { "; - for ( unsigned i = 0; i < dumpSize; ++ i ) - (*_o) << byteToHex( *p++ ) << " "; - if ( dumpSize < size ) - (*_o) << "... "; - (*_o) << "}" << endl; - } - - static void endl( OutputStream &o ) - { - OutputStream::endl( o ); - } - - bool _dotting; - bool _reported; - OutputStream *_o; - const char *_preLine; - const char *_postLine; - }; -}; - -#endif // __cxxtest__ErrorFormatter_h__ diff --git a/cxxtest/cxxtest/ErrorPrinter.h b/cxxtest/cxxtest/ErrorPrinter.h deleted file mode 100644 index 53d942532..000000000 --- a/cxxtest/cxxtest/ErrorPrinter.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __cxxtest__ErrorPrinter_h__ -#define __cxxtest__ErrorPrinter_h__ - -// -// The ErrorPrinter is a simple TestListener that -// just prints "OK" if everything goes well, otherwise -// reports the error in the format of compiler messages. -// The ErrorPrinter uses std::cout -// - -#include - -#ifndef _CXXTEST_HAVE_STD -# define _CXXTEST_HAVE_STD -#endif // _CXXTEST_HAVE_STD - -#include -#include - -#ifdef _CXXTEST_OLD_STD -# include -#else // !_CXXTEST_OLD_STD -# include -#endif // _CXXTEST_OLD_STD - -namespace CxxTest -{ - class ErrorPrinter : public ErrorFormatter - { - public: - ErrorPrinter( CXXTEST_STD(ostream) &o = CXXTEST_STD(cout), const char *preLine = ":", const char *postLine = "" ) : - ErrorFormatter( new Adapter(o), preLine, postLine ) {} - virtual ~ErrorPrinter() { delete outputStream(); } - - private: - class Adapter : public OutputStream - { - CXXTEST_STD(ostream) &_o; - public: - Adapter( CXXTEST_STD(ostream) &o ) : _o(o) {} - void flush() { _o.flush(); } - OutputStream &operator<<( const char *s ) { _o << s; return *this; } - OutputStream &operator<<( Manipulator m ) { return OutputStream::operator<<( m ); } - OutputStream &operator<<( unsigned i ) - { - char s[1 + 3 * sizeof(unsigned)]; - numberToString( i, s ); - _o << s; - return *this; - } - }; - }; -} - -#endif // __cxxtest__ErrorPrinter_h__ diff --git a/cxxtest/cxxtest/Flags.h b/cxxtest/cxxtest/Flags.h deleted file mode 100644 index be2f9f288..000000000 --- a/cxxtest/cxxtest/Flags.h +++ /dev/null @@ -1,121 +0,0 @@ -#ifndef __cxxtest__Flags_h__ -#define __cxxtest__Flags_h__ - -// -// These are the flags that control CxxTest -// - -#if !defined(CXXTEST_FLAGS) -# define CXXTEST_FLAGS -#endif // !CXXTEST_FLAGS - -#if defined(CXXTEST_HAVE_EH) && !defined(_CXXTEST_HAVE_EH) -# define _CXXTEST_HAVE_EH -#endif // CXXTEST_HAVE_EH - -#if defined(CXXTEST_HAVE_STD) && !defined(_CXXTEST_HAVE_STD) -# define _CXXTEST_HAVE_STD -#endif // CXXTEST_HAVE_STD - -#if defined(CXXTEST_OLD_TEMPLATE_SYNTAX) && !defined(_CXXTEST_OLD_TEMPLATE_SYNTAX) -# define _CXXTEST_OLD_TEMPLATE_SYNTAX -#endif // CXXTEST_OLD_TEMPLATE_SYNTAX - -#if defined(CXXTEST_OLD_STD) && !defined(_CXXTEST_OLD_STD) -# define _CXXTEST_OLD_STD -#endif // CXXTEST_OLD_STD - -#if defined(CXXTEST_ABORT_TEST_ON_FAIL) && !defined(_CXXTEST_ABORT_TEST_ON_FAIL) -# define _CXXTEST_ABORT_TEST_ON_FAIL -#endif // CXXTEST_ABORT_TEST_ON_FAIL - -#if defined(CXXTEST_NO_COPY_CONST) && !defined(_CXXTEST_NO_COPY_CONST) -# define _CXXTEST_NO_COPY_CONST -#endif // CXXTEST_NO_COPY_CONST - -#if defined(CXXTEST_FACTOR) && !defined(_CXXTEST_FACTOR) -# define _CXXTEST_FACTOR -#endif // CXXTEST_FACTOR - -#if defined(CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION) && !defined(_CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION) -# define _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION -#endif // CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION - -#if defined(CXXTEST_LONGLONG) -# if defined(_CXXTEST_LONGLONG) -# undef _CXXTEST_LONGLONG -# endif -# define _CXXTEST_LONGLONG CXXTEST_LONGLONG -#endif // CXXTEST_LONGLONG - -#ifndef CXXTEST_MAX_DUMP_SIZE -# define CXXTEST_MAX_DUMP_SIZE 0 -#endif // CXXTEST_MAX_DUMP_SIZE - -#if defined(_CXXTEST_ABORT_TEST_ON_FAIL) && !defined(CXXTEST_DEFAULT_ABORT) -# define CXXTEST_DEFAULT_ABORT true -#endif // _CXXTEST_ABORT_TEST_ON_FAIL && !CXXTEST_DEFAULT_ABORT - -#if !defined(CXXTEST_DEFAULT_ABORT) -# define CXXTEST_DEFAULT_ABORT false -#endif // !CXXTEST_DEFAULT_ABORT - -#if defined(_CXXTEST_ABORT_TEST_ON_FAIL) && !defined(_CXXTEST_HAVE_EH) -# warning "CXXTEST_ABORT_TEST_ON_FAIL is meaningless without CXXTEST_HAVE_EH" -# undef _CXXTEST_ABORT_TEST_ON_FAIL -#endif // _CXXTEST_ABORT_TEST_ON_FAIL && !_CXXTEST_HAVE_EH - -// -// Some minimal per-compiler configuration to allow us to compile -// - -#ifdef __BORLANDC__ -# if __BORLANDC__ <= 0x520 // Borland C++ 5.2 or earlier -# ifndef _CXXTEST_OLD_STD -# define _CXXTEST_OLD_STD -# endif -# ifndef _CXXTEST_OLD_TEMPLATE_SYNTAX -# define _CXXTEST_OLD_TEMPLATE_SYNTAX -# endif -# endif -# if __BORLANDC__ >= 0x540 // C++ Builder 4.0 or later -# ifndef _CXXTEST_NO_COPY_CONST -# define _CXXTEST_NO_COPY_CONST -# endif -# ifndef _CXXTEST_LONGLONG -# define _CXXTEST_LONGLONG __int64 -# endif -# endif -#endif // __BORLANDC__ - -#ifdef _MSC_VER // Visual C++ -# ifndef _CXXTEST_LONGLONG -# define _CXXTEST_LONGLONG __int64 -# endif -# if (_MSC_VER >= 0x51E) -# ifndef _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION -# define _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION -# endif -# endif -# pragma warning( disable : 4127 ) -# pragma warning( disable : 4290 ) -# pragma warning( disable : 4511 ) -# pragma warning( disable : 4512 ) -# pragma warning( disable : 4514 ) -#endif // _MSC_VER - -#ifdef __GNUC__ -# if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 9) -# ifndef _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION -# define _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION -# endif -# endif -#endif // __GNUC__ - -#ifdef __DMC__ // Digital Mars -# ifndef _CXXTEST_OLD_STD -# define _CXXTEST_OLD_STD -# endif -#endif - -#endif // __cxxtest__Flags_h__ diff --git a/cxxtest/cxxtest/GlobalFixture.cpp b/cxxtest/cxxtest/GlobalFixture.cpp deleted file mode 100644 index 29c6ab83a..000000000 --- a/cxxtest/cxxtest/GlobalFixture.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef __cxxtest__GlobalFixture_cpp__ -#define __cxxtest__GlobalFixture_cpp__ - -#include - -namespace CxxTest -{ - bool GlobalFixture::setUpWorld() { return true; } - bool GlobalFixture::tearDownWorld() { return true; } - bool GlobalFixture::setUp() { return true; } - bool GlobalFixture::tearDown() { return true; } - - GlobalFixture::GlobalFixture() { attach( _list ); } - GlobalFixture::~GlobalFixture() { detach( _list ); } - - GlobalFixture *GlobalFixture::firstGlobalFixture() { return (GlobalFixture *)_list.head(); } - GlobalFixture *GlobalFixture::lastGlobalFixture() { return (GlobalFixture *)_list.tail(); } - GlobalFixture *GlobalFixture::nextGlobalFixture() { return (GlobalFixture *)next(); } - GlobalFixture *GlobalFixture::prevGlobalFixture() { return (GlobalFixture *)prev(); } -} - -#endif // __cxxtest__GlobalFixture_cpp__ - diff --git a/cxxtest/cxxtest/GlobalFixture.h b/cxxtest/cxxtest/GlobalFixture.h deleted file mode 100644 index c8173633f..000000000 --- a/cxxtest/cxxtest/GlobalFixture.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __cxxtest__GlobalFixture_h__ -#define __cxxtest__GlobalFixture_h__ - -#include - -namespace CxxTest -{ - class GlobalFixture : public Link - { - public: - virtual bool setUpWorld(); - virtual bool tearDownWorld(); - virtual bool setUp(); - virtual bool tearDown(); - - GlobalFixture(); - ~GlobalFixture(); - - static GlobalFixture *firstGlobalFixture(); - static GlobalFixture *lastGlobalFixture(); - GlobalFixture *nextGlobalFixture(); - GlobalFixture *prevGlobalFixture(); - - private: - static List _list; - }; -} - -#endif // __cxxtest__GlobalFixture_h__ - diff --git a/cxxtest/cxxtest/Gui.h b/cxxtest/cxxtest/Gui.h deleted file mode 100644 index ac53b298f..000000000 --- a/cxxtest/cxxtest/Gui.h +++ /dev/null @@ -1,178 +0,0 @@ -#ifndef __CXXTEST__GUI_H -#define __CXXTEST__GUI_H - -// -// GuiListener is a simple base class for the differes GUIs -// GuiTuiRunner combines a GUI with a text-mode error formatter -// - -#include - -namespace CxxTest -{ - class GuiListener : public TestListener - { - public: - GuiListener() : _state( GREEN_BAR ) {} - virtual ~GuiListener() {} - - virtual void runGui( int &argc, char **argv, TestListener &listener ) - { - enterGui( argc, argv ); - TestRunner::runAllTests( listener ); - leaveGui(); - } - - virtual void enterGui( int & /*argc*/, char ** /*argv*/ ) {} - virtual void leaveGui() {} - - // - // The easy way is to implement these functions: - // - virtual void guiEnterWorld( unsigned /*numTotalTests*/ ) {} - virtual void guiEnterSuite( const char * /*suiteName*/ ) {} - virtual void guiEnterTest( const char * /*suiteName*/, const char * /*testName*/ ) {} - virtual void yellowBar() {} - virtual void redBar() {} - - // - // The hard way is this: - // - void enterWorld( const WorldDescription &d ) { guiEnterWorld( d.numTotalTests() ); } - void enterSuite( const SuiteDescription &d ) { guiEnterSuite( d.suiteName() ); } - void enterTest( const TestDescription &d ) { guiEnterTest( d.suiteName(), d.testName() ); } - void leaveTest( const TestDescription & ) {} - void leaveSuite( const SuiteDescription & ) {} - void leaveWorld( const WorldDescription & ) {} - - void warning( const char * /*file*/, unsigned /*line*/, const char * /*expression*/ ) - { - yellowBarSafe(); - } - - void failedTest( const char * /*file*/, unsigned /*line*/, const char * /*expression*/ ) - { - redBarSafe(); - } - - void failedAssert( const char * /*file*/, unsigned /*line*/, const char * /*expression*/ ) - { - redBarSafe(); - } - - void failedAssertEquals( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) - { - redBarSafe(); - } - - void failedAssertSameData( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*sizeStr*/, const void * /*x*/, - const void * /*y*/, unsigned /*size*/ ) - { - redBarSafe(); - } - - void failedAssertDelta( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, const char * /*dStr*/, - const char * /*x*/, const char * /*y*/, const char * /*d*/ ) - { - redBarSafe(); - } - - void failedAssertDiffers( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*value*/ ) - { - redBarSafe(); - } - - void failedAssertLessThan( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) - { - redBarSafe(); - } - - void failedAssertLessThanEquals( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) - { - redBarSafe(); - } - - void failedAssertPredicate( const char * /*file*/, unsigned /*line*/, - const char * /*predicate*/, const char * /*xStr*/, const char * /*x*/ ) - { - redBarSafe(); - } - - void failedAssertRelation( const char * /*file*/, unsigned /*line*/, - const char * /*relation*/, const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) - { - redBarSafe(); - } - - void failedAssertThrows( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/, const char * /*type*/, - bool /*otherThrown*/ ) - { - redBarSafe(); - } - - void failedAssertThrowsNot( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/ ) - { - redBarSafe(); - } - - protected: - void yellowBarSafe() - { - if ( _state < YELLOW_BAR ) { - yellowBar(); - _state = YELLOW_BAR; - } - } - - void redBarSafe() - { - if ( _state < RED_BAR ) { - redBar(); - _state = RED_BAR; - } - } - - private: - enum { GREEN_BAR, YELLOW_BAR, RED_BAR } _state; - }; - - template - class GuiTuiRunner : public TeeListener - { - int &_argc; - char **_argv; - GuiT _gui; - TuiT _tui; - - public: - GuiTuiRunner( int &argc, char **argv ) : - _argc( argc ), - _argv( argv ) - { - setFirst( _gui ); - setSecond( _tui ); - } - - int run() - { - _gui.runGui( _argc, _argv, *this ); - return tracker().failedTests(); - } - }; -}; - -#endif //__CXXTEST__GUI_H diff --git a/cxxtest/cxxtest/LinkedList.cpp b/cxxtest/cxxtest/LinkedList.cpp deleted file mode 100644 index fb81d64ca..000000000 --- a/cxxtest/cxxtest/LinkedList.cpp +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef __cxxtest__LinkedList_cpp__ -#define __cxxtest__LinkedList_cpp__ - -#include - -namespace CxxTest -{ - List GlobalFixture::_list = { 0, 0 }; - List RealSuiteDescription::_suites = { 0, 0 }; - - void List::initialize() - { - _head = _tail = 0; - } - - Link *List::head() - { - Link *l = _head; - while ( l && !l->active() ) - l = l->next(); - return l; - } - - const Link *List::head() const - { - Link *l = _head; - while ( l && !l->active() ) - l = l->next(); - return l; - } - - Link *List::tail() - { - Link *l = _tail; - while ( l && !l->active() ) - l = l->prev(); - return l; - } - - const Link *List::tail() const - { - Link *l = _tail; - while ( l && !l->active() ) - l = l->prev(); - return l; - } - - bool List::empty() const - { - return (_head == 0); - } - - unsigned List::size() const - { - unsigned count = 0; - for ( const Link *l = head(); l != 0; l = l->next() ) - ++ count; - return count; - } - - Link *List::nth( unsigned n ) - { - Link *l = head(); - while ( n -- ) - l = l->next(); - return l; - } - - void List::activateAll() - { - for ( Link *l = _head; l != 0; l = l->justNext() ) - l->setActive( true ); - } - - void List::leaveOnly( const Link &link ) - { - for ( Link *l = head(); l != 0; l = l->next() ) - if ( l != &link ) - l->setActive( false ); - } - - Link::Link() : - _next( 0 ), - _prev( 0 ), - _active( true ) - { - } - - Link::~Link() - { - } - - bool Link::active() const - { - return _active; - } - - void Link::setActive( bool value ) - { - _active = value; - } - - Link * Link::justNext() - { - return _next; - } - - Link * Link::justPrev() - { - return _prev; - } - - Link * Link::next() - { - Link *l = _next; - while ( l && !l->_active ) - l = l->_next; - return l; - } - - Link * Link::prev() - { - Link *l = _prev; - while ( l && !l->_active ) - l = l->_prev; - return l; - } - - const Link * Link::next() const - { - Link *l = _next; - while ( l && !l->_active ) - l = l->_next; - return l; - } - - const Link * Link::prev() const - { - Link *l = _prev; - while ( l && !l->_active ) - l = l->_prev; - return l; - } - - void Link::attach( List &l ) - { - if ( l._tail ) - l._tail->_next = this; - - _prev = l._tail; - _next = 0; - - if ( l._head == 0 ) - l._head = this; - l._tail = this; - } - - void Link::detach( List &l ) - { - if ( _prev ) - _prev->_next = _next; - else - l._head = _next; - - if ( _next ) - _next->_prev = _prev; - else - l._tail = _prev; - } -}; - -#endif // __cxxtest__LinkedList_cpp__ diff --git a/cxxtest/cxxtest/LinkedList.h b/cxxtest/cxxtest/LinkedList.h deleted file mode 100644 index 983a6e244..000000000 --- a/cxxtest/cxxtest/LinkedList.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef __cxxtest__LinkedList_h__ -#define __cxxtest__LinkedList_h__ - -#include - -namespace CxxTest -{ - struct List; - class Link; - - struct List - { - Link *_head; - Link *_tail; - - void initialize(); - - Link *head(); - const Link *head() const; - Link *tail(); - const Link *tail() const; - - bool empty() const; - unsigned size() const; - Link *nth( unsigned n ); - - void activateAll(); - void leaveOnly( const Link &link ); - }; - - class Link - { - public: - Link(); - virtual ~Link(); - - bool active() const; - void setActive( bool value = true ); - - Link *justNext(); - Link *justPrev(); - - Link *next(); - Link *prev(); - const Link *next() const; - const Link *prev() const; - - virtual bool setUp() = 0; - virtual bool tearDown() = 0; - - void attach( List &l ); - void detach( List &l ); - - private: - Link *_next; - Link *_prev; - bool _active; - - Link( const Link & ); - Link &operator=( const Link & ); - }; -} - -#endif // __cxxtest__LinkedList_h__ - diff --git a/cxxtest/cxxtest/Mock.h b/cxxtest/cxxtest/Mock.h deleted file mode 100644 index 647088e80..000000000 --- a/cxxtest/cxxtest/Mock.h +++ /dev/null @@ -1,350 +0,0 @@ -#ifndef __cxxtest__Mock_h__ -#define __cxxtest__Mock_h__ - -// -// The default namespace is T:: -// -#ifndef CXXTEST_MOCK_NAMESPACE -# define CXXTEST_MOCK_NAMESPACE T -#endif // CXXTEST_MOCK_NAMESPACE - -// -// MockTraits: What to return when no mock object has been created -// -#define __CXXTEST_MOCK__TRAITS \ - namespace CXXTEST_MOCK_NAMESPACE \ - { \ - template \ - class MockTraits \ - { \ - public: \ - static T defaultValue() { return 0; } \ - }; \ - }; - -// -// extern "C" when needed -// -#ifdef __cplusplus -# define CXXTEST_EXTERN_C extern "C" -#else -# define CXXTEST_EXTERN_C -#endif // __cplusplus - -// -// Prototypes: For "normal" headers -// -#define __CXXTEST_MOCK__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - namespace CXXTEST_MOCK_NAMESPACE { TYPE NAME ARGS; } - -#define __CXXTEST_MOCK_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__PROTOTYPE( MOCK, void, NAME, ARGS, REAL, CALL ) - -#define __CXXTEST_SUPPLY__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - TYPE REAL ARGS; - -#define __CXXTEST_SUPPLY_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__PROTOTYPE( MOCK, void, NAME, ARGS, REAL, CALL ) - -// -// Class declarations: For test files -// -#define __CXXTEST_MOCK__CLASS_DECLARATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - class Base_##MOCK : public CxxTest::Link \ - { \ - public: \ - Base_##MOCK(); \ - ~Base_##MOCK(); \ - bool setUp(); \ - bool tearDown(); \ - \ - static Base_##MOCK ¤t(); \ - \ - virtual TYPE NAME ARGS = 0; \ - \ - private: \ - static CxxTest::List _list; \ - }; \ - \ - class Real_##MOCK : public Base_##MOCK \ - { \ - public: \ - TYPE NAME ARGS; \ - }; \ - \ - class _Unimplemented_##MOCK : public Base_##MOCK \ - { \ - public: \ - TYPE NAME ARGS; \ - }; \ - } - -#define __CXXTEST_MOCK_VOID__CLASS_DECLARATION( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__CLASS_DECLARATION( MOCK, void, NAME, ARGS, REAL, CALL ) - -#define __CXXTEST_SUPPLY__CLASS_DECLARATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - class Base_##MOCK : public CxxTest::Link \ - { \ - public: \ - Base_##MOCK(); \ - ~Base_##MOCK(); \ - bool setUp(); \ - bool tearDown(); \ - \ - static Base_##MOCK ¤t(); \ - \ - virtual TYPE NAME ARGS = 0; \ - \ - private: \ - static CxxTest::List _list; \ - }; \ - \ - class _Unimplemented_##MOCK : public Base_##MOCK \ - { \ - public: \ - TYPE NAME ARGS; \ - }; \ - } - -#define __CXXTEST_SUPPLY_VOID__CLASS_DECLARATION( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__CLASS_DECLARATION( MOCK, void, NAME, ARGS, REAL, CALL ) - -// -// Class implementation: For test source files -// -#define __CXXTEST_MOCK__COMMON_CLASS_IMPLEMENTATION( MOCK, NAME ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - \ - CxxTest::List Base_##MOCK::_list = { 0, 0 }; \ - \ - Base_##MOCK::Base_##MOCK() { attach( _list ); } \ - Base_##MOCK::~Base_##MOCK() { detach( _list ); } \ - bool Base_##MOCK::setUp() { return true; } \ - bool Base_##MOCK::tearDown() { return true; } \ - \ - Base_##MOCK &Base_##MOCK::current() \ - { \ - if ( _list.empty() ) \ - static _Unimplemented_##MOCK unimplemented; \ - return *(Base_##MOCK *)_list.tail(); \ - } \ - } - -#define __CXXTEST_MOCK__CLASS_IMPLEMENTATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__COMMON_CLASS_IMPLEMENTATION( MOCK, NAME ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - TYPE Real_##MOCK::NAME ARGS \ - { \ - return REAL CALL; \ - } \ - \ - TYPE _Unimplemented_##MOCK::NAME ARGS \ - { \ - while ( false ) \ - return NAME CALL; \ - __CXXTEST_MOCK_UNIMPLEMENTED( NAME, ARGS ); \ - return MockTraits::defaultValue(); \ - } \ - \ - TYPE NAME ARGS \ - { \ - return Base_##MOCK::current().NAME CALL; \ - } \ - } - -#define __CXXTEST_MOCK_VOID__CLASS_IMPLEMENTATION( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__COMMON_CLASS_IMPLEMENTATION( MOCK, NAME ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - void Real_##MOCK::NAME ARGS \ - { \ - REAL CALL; \ - } \ - \ - void _Unimplemented_##MOCK::NAME ARGS \ - { \ - while ( false ) \ - NAME CALL; \ - __CXXTEST_MOCK_UNIMPLEMENTED( NAME, ARGS ); \ - } \ - \ - void NAME ARGS \ - { \ - Base_##MOCK::current().NAME CALL; \ - } \ - } - -#define __CXXTEST_SUPPLY__CLASS_IMPLEMENTATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__COMMON_CLASS_IMPLEMENTATION( MOCK, NAME ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - TYPE _Unimplemented_##MOCK::NAME ARGS \ - { \ - while ( false ) \ - return NAME CALL; \ - __CXXTEST_MOCK_UNIMPLEMENTED( NAME, ARGS ); \ - return MockTraits::defaultValue(); \ - } \ - } \ - \ - TYPE REAL ARGS \ - { \ - return CXXTEST_MOCK_NAMESPACE::Base_##MOCK::current().NAME CALL; \ - } - -#define __CXXTEST_SUPPLY_VOID__CLASS_IMPLEMENTATION( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__COMMON_CLASS_IMPLEMENTATION( MOCK, NAME ) \ - namespace CXXTEST_MOCK_NAMESPACE { \ - void _Unimplemented_##MOCK::NAME ARGS \ - { \ - while ( false ) \ - NAME CALL; \ - __CXXTEST_MOCK_UNIMPLEMENTED( NAME, ARGS ); \ - } \ - } \ - \ - void REAL ARGS \ - { \ - CXXTEST_MOCK_NAMESPACE::Base_##MOCK::current().NAME CALL; \ - } \ - -// -// Error for calling mock function w/o object -// -#define __CXXTEST_MOCK_UNIMPLEMENTED( NAME, ARGS ) \ - TS_FAIL( CXXTEST_MOCK_NAMESPACE_STR #NAME #ARGS " called with no " \ - CXXTEST_MOCK_NAMESPACE_STR "Base_" #NAME " object" ); \ - -#define CXXTEST_MOCK_NAMESPACE_STR __CXXTEST_STR(CXXTEST_MOCK_NAMESPACE) "::" -#define __CXXTEST_STR(X) __CXXTEST_XSTR(X) -#define __CXXTEST_XSTR(X) #X - -#if defined(CXXTEST_MOCK_TEST_SOURCE_FILE) -// -// Test source file: Prototypes, class declarations and implementation -// -#include - -__CXXTEST_MOCK__TRAITS; - -#define CXXTEST_MOCK( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__CLASS_DECLARATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__CLASS_IMPLEMENTATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_MOCK_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK_VOID__CLASS_DECLARATION( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK_VOID__CLASS_IMPLEMENTATION( MOCK, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__CLASS_DECLARATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__CLASS_IMPLEMENTATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY_VOID__CLASS_DECLARATION( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY_VOID__CLASS_IMPLEMENTATION( MOCK, NAME, ARGS, REAL, CALL ) - -#elif defined(CXXTEST_FLAGS) || defined(CXXTEST_RUNNING) -// -// Test file other than source: Prototypes and class declarations -// -#include - -__CXXTEST_MOCK__TRAITS; - -#define CXXTEST_MOCK( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__CLASS_DECLARATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_MOCK_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK_VOID__CLASS_DECLARATION( MOCK, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__CLASS_DECLARATION( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY_VOID__CLASS_DECLARATION( MOCK, NAME, ARGS, REAL, CALL ) - -#elif defined(CXXTEST_MOCK_REAL_SOURCE_FILE) -// -// Real source file: "Real" implementations -// -#define CXXTEST_MOCK( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - namespace CXXTEST_MOCK_NAMESPACE { TYPE NAME ARGS { return REAL CALL; } } - -#define CXXTEST_MOCK_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - namespace CXXTEST_MOCK_NAMESPACE { void NAME ARGS { REAL CALL; } } - -#else -// -// Ordinary header file: Just prototypes -// - -#define CXXTEST_MOCK( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_MOCK_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_MOCK_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY_VOID( MOCK, NAME, ARGS, REAL, CALL ) \ - __CXXTEST_SUPPLY_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) - -#endif // Ordinary header file - -// -// How to supply extern "C" functions -// -#define CXXTEST_SUPPLY_C( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - CXXTEST_EXTERN_C __CXXTEST_SUPPLY__PROTOTYPE( MOCK, TYPE, NAME, ARGS, REAL, CALL ) \ - CXXTEST_SUPPLY( MOCK, TYPE, NAME, ARGS, REAL, CALL ) - -#define CXXTEST_SUPPLY_VOID_C( MOCK, NAME, ARGS, REAL, CALL ) \ - CXXTEST_EXTERN_C __CXXTEST_SUPPLY_VOID__PROTOTYPE( MOCK, NAME, ARGS, REAL, CALL ) \ - CXXTEST_SUPPLY_VOID( MOCK, NAME, ARGS, REAL, CALL ) - -// -// Usually we mean the global namespace -// -#define CXXTEST_MOCK_GLOBAL( TYPE, NAME, ARGS, CALL ) \ - CXXTEST_MOCK( NAME, TYPE, NAME, ARGS, ::NAME, CALL ) - -#define CXXTEST_MOCK_VOID_GLOBAL( NAME, ARGS, CALL ) \ - CXXTEST_MOCK_VOID( NAME, NAME, ARGS, ::NAME, CALL ) - -#define CXXTEST_SUPPLY_GLOBAL( TYPE, NAME, ARGS, CALL ) \ - CXXTEST_SUPPLY( NAME, TYPE, NAME, ARGS, NAME, CALL ) - -#define CXXTEST_SUPPLY_VOID_GLOBAL( NAME, ARGS, CALL ) \ - CXXTEST_SUPPLY_VOID( NAME, NAME, ARGS, NAME, CALL ) - -#define CXXTEST_SUPPLY_GLOBAL_C( TYPE, NAME, ARGS, CALL ) \ - CXXTEST_SUPPLY_C( NAME, TYPE, NAME, ARGS, NAME, CALL ) - -#define CXXTEST_SUPPLY_VOID_GLOBAL_C( NAME, ARGS, CALL ) \ - CXXTEST_SUPPLY_VOID_C( NAME, NAME, ARGS, NAME, CALL ) - -// -// What to return when no mock object has been created. -// The default value of 0 usually works, but some cases may need this. -// -#define CXXTEST_MOCK_DEFAULT_VALUE( TYPE, VALUE ) \ - namespace CXXTEST_MOCK_NAMESPACE \ - { \ - template<> \ - class MockTraits \ - { \ - public: \ - static TYPE defaultValue() { return VALUE; } \ - }; \ - } - -#endif // __cxxtest__Mock_h__ diff --git a/cxxtest/cxxtest/ParenPrinter.h b/cxxtest/cxxtest/ParenPrinter.h deleted file mode 100644 index 9ecf31053..000000000 --- a/cxxtest/cxxtest/ParenPrinter.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef __cxxtest__ParenPrinter_h__ -#define __cxxtest__ParenPrinter_h__ - -// -// The ParenPrinter is identical to the ErrorPrinter, except it -// prints the line number in a format expected by some compilers -// (notably, MSVC). -// - -#include - -namespace CxxTest -{ - class ParenPrinter : public ErrorPrinter - { - public: - ParenPrinter( CXXTEST_STD(ostream) &o = CXXTEST_STD(cout) ) : ErrorPrinter( o, "(", ")" ) {} - }; -} - -#endif // __cxxtest__ParenPrinter_h__ diff --git a/cxxtest/cxxtest/QtGui.h b/cxxtest/cxxtest/QtGui.h deleted file mode 100644 index 889825106..000000000 --- a/cxxtest/cxxtest/QtGui.h +++ /dev/null @@ -1,271 +0,0 @@ -#ifndef __cxxtest__QtGui_h__ -#define __cxxtest__QtGui_h__ - -// -// The QtGui displays a simple progress bar using the Qt Toolkit. It -// has been tested with versions 2.x and 3.x. -// -// Apart from normal Qt command-line arguments, it accepts the following options: -// -minimized Start minimized, pop up on error -// -keep Don't close the window at the end -// -title TITLE Set the window caption -// -// If both are -minimized and -keep specified, GUI will only keep the -// window if it's in focus. -// - -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace CxxTest -{ - class QtGui : public GuiListener - { - public: - void enterGui( int &argc, char **argv ) - { - parseCommandLine( argc, argv ); - createApplication( argc, argv ); - } - - void enterWorld( const WorldDescription &wd ) - { - createWindow( wd ); - processEvents(); - } - - void guiEnterSuite( const char *suiteName ) - { - showSuiteName( suiteName ); - } - - void guiEnterTest( const char *suiteName, const char *testName ) - { - setCaption( suiteName, testName ); - advanceProgressBar(); - showTestName( testName ); - showTestsDone( _progressBar->progress() ); - processEvents(); - } - - void yellowBar() - { - setColor( 255, 255, 0 ); - setIcon( QMessageBox::Warning ); - getTotalTests(); - processEvents(); - } - - void redBar() - { - if ( _startMinimized && _mainWindow->isMinimized() ) - showNormal(); - setColor( 255, 0, 0 ); - setIcon( QMessageBox::Critical ); - getTotalTests(); - processEvents(); - } - - void leaveGui() - { - if ( keep() ) { - showSummary(); - _application->exec(); - } - else - _mainWindow->close( true ); - } - - private: - QString _title; - bool _startMinimized, _keep; - unsigned _numTotalTests; - QString _strTotalTests; - QApplication *_application; - QWidget *_mainWindow; - QVBoxLayout *_layout; - QProgressBar *_progressBar; - QStatusBar *_statusBar; - QLabel *_suiteName, *_testName, *_testsDone; - - void parseCommandLine( int argc, char **argv ) - { - _startMinimized = _keep = false; - _title = argv[0]; - - for ( int i = 1; i < argc; ++ i ) { - QString arg( argv[i] ); - if ( arg == "-minimized" ) - _startMinimized = true; - else if ( arg == "-keep" ) - _keep = true; - else if ( arg == "-title" && (i + 1 < argc) ) - _title = argv[++i]; - } - } - - void createApplication( int &argc, char **argv ) - { - _application = new QApplication( argc, argv ); - } - - void createWindow( const WorldDescription &wd ) - { - getTotalTests( wd ); - createMainWindow(); - createProgressBar(); - createStatusBar(); - setMainWidget(); - if ( _startMinimized ) - showMinimized(); - else - showNormal(); - } - - void getTotalTests() - { - getTotalTests( tracker().world() ); - } - - void getTotalTests( const WorldDescription &wd ) - { - _numTotalTests = wd.numTotalTests(); - char s[WorldDescription::MAX_STRLEN_TOTAL_TESTS]; - _strTotalTests = wd.strTotalTests( s ); - } - - void createMainWindow() - { - _mainWindow = new QWidget(); - _layout = new QVBoxLayout( _mainWindow ); - } - - void createProgressBar() - { - _layout->addWidget( _progressBar = new QProgressBar( _numTotalTests, _mainWindow ) ); - _progressBar->setProgress( 0 ); - setColor( 0, 255, 0 ); - setIcon( QMessageBox::Information ); - } - - void createStatusBar() - { - _layout->addWidget( _statusBar = new QStatusBar( _mainWindow ) ); - _statusBar->addWidget( _suiteName = new QLabel( _statusBar ), 2 ); - _statusBar->addWidget( _testName = new QLabel( _statusBar ), 4 ); - _statusBar->addWidget( _testsDone = new QLabel( _statusBar ), 1 ); - } - - void setMainWidget() - { - _application->setMainWidget( _mainWindow ); - } - - void showMinimized() - { - _mainWindow->showMinimized(); - } - - void showNormal() - { - _mainWindow->showNormal(); - centerWindow(); - } - - void setCaption( const QString &suiteName, const QString &testName ) - { - _mainWindow->setCaption( _title + " - " + suiteName + "::" + testName + "()" ); - } - - void showSuiteName( const QString &suiteName ) - { - _suiteName->setText( "class " + suiteName ); - } - - void advanceProgressBar() - { - _progressBar->setProgress( _progressBar->progress() + 1 ); - } - - void showTestName( const QString &testName ) - { - _testName->setText( testName + "()" ); - } - - void showTestsDone( unsigned testsDone ) - { - _testsDone->setText( asString( testsDone ) + " of " + _strTotalTests ); - } - - static QString asString( unsigned n ) - { - return QString::number( n ); - } - - void setColor( int r, int g, int b ) - { - QPalette palette = _progressBar->palette(); - palette.setColor( QColorGroup::Highlight, QColor( r, g, b ) ); - _progressBar->setPalette( palette ); - } - - void setIcon( QMessageBox::Icon icon ) - { -#if QT_VERSION >= 0x030000 - _mainWindow->setIcon( QMessageBox::standardIcon( icon ) ); -#else // Qt version < 3.0.0 - _mainWindow->setIcon( QMessageBox::standardIcon( icon, QApplication::style().guiStyle() ) ); -#endif // QT_VERSION - } - - void processEvents() - { - _application->processEvents(); - } - - void centerWindow() - { - QWidget *desktop = QApplication::desktop(); - int xCenter = desktop->x() + (desktop->width() / 2); - int yCenter = desktop->y() + (desktop->height() / 2); - - int windowWidth = (desktop->width() * 4) / 5; - int windowHeight = _mainWindow->height(); - _mainWindow->setGeometry( xCenter - (windowWidth / 2), yCenter - (windowHeight / 2), windowWidth, windowHeight ); - } - - bool keep() - { - if ( !_keep ) - return false; - if ( !_startMinimized ) - return true; - return (_mainWindow == _application->activeWindow()); - } - - void showSummary() - { - QString summary = _strTotalTests + (_numTotalTests == 1 ? " test" : " tests"); - if ( tracker().failedTests() ) - summary = "Failed " + asString( tracker().failedTests() ) + " of " + summary; - else - summary = summary + " passed"; - - _mainWindow->setCaption( _title + " - " + summary ); - - _statusBar->removeWidget( _suiteName ); - _statusBar->removeWidget( _testName ); - _testsDone->setText( summary ); - } - }; -}; - -#endif // __cxxtest__QtGui_h__ diff --git a/cxxtest/cxxtest/RealDescriptions.cpp b/cxxtest/cxxtest/RealDescriptions.cpp deleted file mode 100644 index 1e21ca762..000000000 --- a/cxxtest/cxxtest/RealDescriptions.cpp +++ /dev/null @@ -1,311 +0,0 @@ -#ifndef __cxxtest__RealDescriptions_cpp__ -#define __cxxtest__RealDescriptions_cpp__ - -// -// NOTE: If an error occur during world construction/deletion, CxxTest cannot -// know where the error originated. -// - -#include - -namespace CxxTest -{ - RealTestDescription::RealTestDescription() - { - } - - RealTestDescription::RealTestDescription( List &argList, - SuiteDescription &argSuite, - unsigned argLine, - const char *argTestName ) - { - initialize( argList, argSuite, argLine, argTestName ); - } - - void RealTestDescription::initialize( List &argList, - SuiteDescription &argSuite, - unsigned argLine, - const char *argTestName ) - { - _suite = &argSuite; - _line = argLine; - _testName = argTestName; - attach( argList ); - } - - bool RealTestDescription::setUp() - { - if ( !suite() ) - return false; - - for ( GlobalFixture *gf = GlobalFixture::firstGlobalFixture(); gf != 0; gf = gf->nextGlobalFixture() ) { - bool ok; - _TS_TRY { ok = gf->setUp(); } - _TS_LAST_CATCH( { ok = false; } ); - - if ( !ok ) { - doFailTest( file(), line(), "Error in GlobalFixture::setUp()" ); - return false; - } - } - - _TS_TRY { - _TSM_ASSERT_THROWS_NOTHING( file(), line(), "Exception thrown from setUp()", suite()->setUp() ); - } - _TS_CATCH_ABORT( { return false; } ); - - return true; - } - - bool RealTestDescription::tearDown() - { - if ( !suite() ) - return false; - - _TS_TRY { - _TSM_ASSERT_THROWS_NOTHING( file(), line(), "Exception thrown from tearDown()", suite()->tearDown() ); - } - _TS_CATCH_ABORT( { return false; } ); - - for ( GlobalFixture *gf = GlobalFixture::lastGlobalFixture(); gf != 0; gf = gf->prevGlobalFixture() ) { - bool ok; - _TS_TRY { ok = gf->tearDown(); } - _TS_LAST_CATCH( { ok = false; } ); - - if ( !ok ) { - doFailTest( file(), line(), "Error in GlobalFixture::tearDown()" ); - return false; - } - } - - return true; - } - - const char *RealTestDescription::file() const { return _suite->file(); } - unsigned RealTestDescription::line() const { return _line; } - const char *RealTestDescription::testName() const { return _testName; } - const char *RealTestDescription::suiteName() const { return _suite->suiteName(); } - - TestDescription *RealTestDescription::next() { return (RealTestDescription *)Link::next(); } - const TestDescription *RealTestDescription::next() const { return (const RealTestDescription *)Link::next(); } - - TestSuite *RealTestDescription::suite() const { return _suite->suite(); } - - void RealTestDescription::run() - { - _TS_TRY { runTest(); } - _TS_CATCH_ABORT( {} ) - ___TSM_CATCH( file(), line(), "Exception thrown from test" ); - } - - RealSuiteDescription::RealSuiteDescription() {} - RealSuiteDescription::RealSuiteDescription( const char *argFile, - unsigned argLine, - const char *argSuiteName, - List &argTests ) - { - initialize( argFile, argLine, argSuiteName, argTests ); - } - - void RealSuiteDescription::initialize( const char *argFile, - unsigned argLine, - const char *argSuiteName, - List &argTests ) - { - _file = argFile; - _line = argLine; - _suiteName = argSuiteName; - _tests = &argTests; - - attach( _suites ); - } - - const char *RealSuiteDescription::file() const { return _file; } - unsigned RealSuiteDescription::line() const { return _line; } - const char *RealSuiteDescription::suiteName() const { return _suiteName; } - - TestDescription *RealSuiteDescription::firstTest() { return (RealTestDescription *)_tests->head(); } - const TestDescription *RealSuiteDescription::firstTest() const { return (const RealTestDescription *)_tests->head(); } - SuiteDescription *RealSuiteDescription::next() { return (RealSuiteDescription *)Link::next(); } - const SuiteDescription *RealSuiteDescription::next() const { return (const RealSuiteDescription *)Link::next(); } - - unsigned RealSuiteDescription::numTests() const { return _tests->size(); } - - const TestDescription &RealSuiteDescription::testDescription( unsigned i ) const - { - return *(RealTestDescription *)_tests->nth( i ); - } - - void RealSuiteDescription::activateAllTests() - { - _tests->activateAll(); - } - - bool RealSuiteDescription::leaveOnly( const char *testName ) - { - for ( TestDescription *td = firstTest(); td != 0; td = td->next() ) { - if ( stringsEqual( td->testName(), testName ) ) { - _tests->leaveOnly( *td ); - return true; - } - } - return false; - } - - StaticSuiteDescription::StaticSuiteDescription() {} - StaticSuiteDescription::StaticSuiteDescription( const char *argFile, unsigned argLine, - const char *argSuiteName, TestSuite &argSuite, - List &argTests ) : - RealSuiteDescription( argFile, argLine, argSuiteName, argTests ) - { - doInitialize( argSuite ); - } - - void StaticSuiteDescription::initialize( const char *argFile, unsigned argLine, - const char *argSuiteName, TestSuite &argSuite, - List &argTests ) - { - RealSuiteDescription::initialize( argFile, argLine, argSuiteName, argTests ); - doInitialize( argSuite ); - } - - void StaticSuiteDescription::doInitialize( TestSuite &argSuite ) - { - _suite = &argSuite; - } - - TestSuite *StaticSuiteDescription::suite() const - { - return _suite; - } - - bool StaticSuiteDescription::setUp() { return true; } - bool StaticSuiteDescription::tearDown() { return true; } - - CommonDynamicSuiteDescription::CommonDynamicSuiteDescription() {} - CommonDynamicSuiteDescription::CommonDynamicSuiteDescription( const char *argFile, unsigned argLine, - const char *argSuiteName, List &argTests, - unsigned argCreateLine, unsigned argDestroyLine ) : - RealSuiteDescription( argFile, argLine, argSuiteName, argTests ) - { - doInitialize( argCreateLine, argDestroyLine ); - } - - void CommonDynamicSuiteDescription::initialize( const char *argFile, unsigned argLine, - const char *argSuiteName, List &argTests, - unsigned argCreateLine, unsigned argDestroyLine ) - { - RealSuiteDescription::initialize( argFile, argLine, argSuiteName, argTests ); - doInitialize( argCreateLine, argDestroyLine ); - } - - void CommonDynamicSuiteDescription::doInitialize( unsigned argCreateLine, unsigned argDestroyLine ) - { - _createLine = argCreateLine; - _destroyLine = argDestroyLine; - } - - List &RealWorldDescription::suites() - { - return RealSuiteDescription::_suites; - } - - unsigned RealWorldDescription::numSuites( void ) const - { - return suites().size(); - } - - unsigned RealWorldDescription::numTotalTests( void ) const - { - unsigned count = 0; - for ( const SuiteDescription *sd = firstSuite(); sd != 0; sd = sd->next() ) - count += sd->numTests(); - return count; - } - - SuiteDescription *RealWorldDescription::firstSuite() - { - return (RealSuiteDescription *)suites().head(); - } - - const SuiteDescription *RealWorldDescription::firstSuite() const - { - return (const RealSuiteDescription *)suites().head(); - } - - const SuiteDescription &RealWorldDescription::suiteDescription( unsigned i ) const - { - return *(const RealSuiteDescription *)suites().nth( i ); - } - - void RealWorldDescription::activateAllTests() - { - suites().activateAll(); - for ( SuiteDescription *sd = firstSuite(); sd != 0; sd = sd->next() ) - sd->activateAllTests(); - } - - bool RealWorldDescription::leaveOnly( const char *suiteName, const char *testName ) - { - for ( SuiteDescription *sd = firstSuite(); sd != 0; sd = sd->next() ) { - if ( stringsEqual( sd->suiteName(), suiteName ) ) { - if ( testName ) - if ( !sd->leaveOnly( testName ) ) - return false; - suites().leaveOnly( *sd ); - return true; - } - } - return false; - } - - bool RealWorldDescription::setUp() - { - for ( GlobalFixture *gf = GlobalFixture::firstGlobalFixture(); gf != 0; gf = gf->nextGlobalFixture() ) { - bool ok; - _TS_TRY { ok = gf->setUpWorld(); } - _TS_LAST_CATCH( { ok = false; } ); - - if ( !ok ) { - reportError( "Error setting up world" ); - return false; - } - } - - return true; - } - - bool RealWorldDescription::tearDown() - { - for ( GlobalFixture *gf = GlobalFixture::lastGlobalFixture(); gf != 0; gf = gf->prevGlobalFixture() ) { - bool ok; - _TS_TRY { ok = gf->tearDownWorld(); } - _TS_LAST_CATCH( { ok = false; } ); - - if ( !ok ) { - reportError( "Error tearing down world" ); - return false; - } - } - - return true; - } - - void RealWorldDescription::reportError( const char *message ) - { - doWarn( __FILE__, 5, message ); - } - - void activateAllTests() - { - RealWorldDescription().activateAllTests(); - } - - bool leaveOnly( const char *suiteName, const char *testName ) - { - return RealWorldDescription().leaveOnly( suiteName, testName ); - } -} - -#endif // __cxxtest__RealDescriptions_cpp__ - diff --git a/cxxtest/cxxtest/RealDescriptions.h b/cxxtest/cxxtest/RealDescriptions.h deleted file mode 100644 index 14c457de7..000000000 --- a/cxxtest/cxxtest/RealDescriptions.h +++ /dev/null @@ -1,223 +0,0 @@ -#ifndef __cxxtest__RealDescriptions_h__ -#define __cxxtest__RealDescriptions_h__ - -// -// The "real" description classes -// - -#include -#include -#include - -namespace CxxTest -{ - class RealTestDescription : public TestDescription - { - public: - RealTestDescription(); - RealTestDescription( List &argList, SuiteDescription &argSuite, unsigned argLine, const char *argTestName ); - void initialize( List &argList, SuiteDescription &argSuite, unsigned argLine, const char *argTestName ); - - const char *file() const; - unsigned line() const; - const char *testName() const; - const char *suiteName() const; - - TestDescription *next(); - const TestDescription *next() const; - - TestSuite *suite() const; - - bool setUp(); - void run(); - bool tearDown(); - - private: - RealTestDescription( const RealTestDescription & ); - RealTestDescription &operator=( const RealTestDescription & ); - - virtual void runTest() = 0; - - SuiteDescription *_suite; - unsigned _line; - const char *_testName; - }; - - class RealSuiteDescription : public SuiteDescription - { - public: - RealSuiteDescription(); - RealSuiteDescription( const char *argFile, unsigned argLine, const char *argSuiteName, List &argTests ); - - void initialize( const char *argFile, unsigned argLine, const char *argSuiteName, List &argTests ); - - const char *file() const; - unsigned line() const; - const char *suiteName() const; - - TestDescription *firstTest(); - const TestDescription *firstTest() const; - SuiteDescription *next(); - const SuiteDescription *next() const; - - unsigned numTests() const; - const TestDescription &testDescription( unsigned i ) const; - - void activateAllTests(); - bool leaveOnly( const char *testName ); - - private: - RealSuiteDescription( const RealSuiteDescription & ); - RealSuiteDescription &operator=( const RealSuiteDescription & ); - - const char *_file; - unsigned _line; - const char *_suiteName; - List *_tests; - - static List _suites; - friend class RealWorldDescription; - }; - - class StaticSuiteDescription : public RealSuiteDescription - { - public: - StaticSuiteDescription(); - StaticSuiteDescription( const char *argFile, unsigned argLine, - const char *argSuiteName, TestSuite &argSuite, - List &argTests ); - - void initialize( const char *argFile, unsigned argLine, - const char *argSuiteName, TestSuite &argSuite, - List &argTests ); - TestSuite *suite() const; - - bool setUp(); - bool tearDown(); - - private: - StaticSuiteDescription( const StaticSuiteDescription & ); - StaticSuiteDescription &operator=( const StaticSuiteDescription & ); - - void doInitialize( TestSuite &argSuite ); - - TestSuite *_suite; - }; - - class CommonDynamicSuiteDescription : public RealSuiteDescription - { - public: - CommonDynamicSuiteDescription(); - CommonDynamicSuiteDescription( const char *argFile, unsigned argLine, - const char *argSuiteName, List &argTests, - unsigned argCreateLine, unsigned argDestroyLine ); - - void initialize( const char *argFile, unsigned argLine, - const char *argSuiteName, List &argTests, - unsigned argCreateLine, unsigned argDestroyLine ); - - protected: - unsigned _createLine, _destroyLine; - - private: - void doInitialize( unsigned argCreateLine, unsigned argDestroyLine ); - }; - - template - class DynamicSuiteDescription : public CommonDynamicSuiteDescription - { - public: - DynamicSuiteDescription() {} - DynamicSuiteDescription( const char *argFile, unsigned argLine, - const char *argSuiteName, List &argTests, - S *&argSuite, unsigned argCreateLine, - unsigned argDestroyLine ) : - CommonDynamicSuiteDescription( argFile, argLine, argSuiteName, argTests, argCreateLine, argDestroyLine ) - { - _suite = &argSuite; - } - - void initialize( const char *argFile, unsigned argLine, - const char *argSuiteName, List &argTests, - S *&argSuite, unsigned argCreateLine, - unsigned argDestroyLine ) - { - CommonDynamicSuiteDescription::initialize( argFile, argLine, - argSuiteName, argTests, - argCreateLine, argDestroyLine ); - _suite = &argSuite; - } - - TestSuite *suite() const { return realSuite(); } - - bool setUp(); - bool tearDown(); - - private: - S *realSuite() const { return *_suite; } - void setSuite( S *s ) { *_suite = s; } - - void createSuite() - { - setSuite( S::createSuite() ); - } - - void destroySuite() - { - S *s = realSuite(); - setSuite( 0 ); - S::destroySuite( s ); - } - - S **_suite; - }; - - template - bool DynamicSuiteDescription::setUp() - { - _TS_TRY { - _TSM_ASSERT_THROWS_NOTHING( file(), _createLine, "Exception thrown from createSuite()", createSuite() ); - _TSM_ASSERT( file(), _createLine, "createSuite() failed", suite() != 0 ); - } - _TS_CATCH_ABORT( { return false; } ); - - return (suite() != 0); - } - - template - bool DynamicSuiteDescription::tearDown() - { - if ( !_suite ) - return true; - - _TS_TRY { - _TSM_ASSERT_THROWS_NOTHING( file(), _destroyLine, "destroySuite() failed", destroySuite() ); - } - _TS_CATCH_ABORT( { return false; } ); - - return true; - } - - class RealWorldDescription : public WorldDescription - { - public: - static List &suites(); - unsigned numSuites( void ) const; - unsigned numTotalTests( void ) const; - SuiteDescription *firstSuite(); - const SuiteDescription *firstSuite() const; - const SuiteDescription &suiteDescription( unsigned i ) const; - void activateAllTests(); - bool leaveOnly( const char *suiteName, const char *testName = 0 ); - - bool setUp(); - bool tearDown(); - static void reportError( const char *message ); - }; - - void activateAllTests(); - bool leaveOnly( const char *suiteName, const char *testName = 0 ); -} - -#endif // __cxxtest__RealDescriptions_h__ - diff --git a/cxxtest/cxxtest/Root.cpp b/cxxtest/cxxtest/Root.cpp deleted file mode 100644 index c4320fde7..000000000 --- a/cxxtest/cxxtest/Root.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __cxxtest__Root_cpp__ -#define __cxxtest__Root_cpp__ - -// -// This file holds the "root" of CxxTest, i.e. -// the parts that must be in a source file file. -// - -#include -#include -#include -#include -#include -#include -#include -#include - -#endif // __cxxtest__Root_cpp__ diff --git a/cxxtest/cxxtest/SelfTest.h b/cxxtest/cxxtest/SelfTest.h deleted file mode 100644 index 6d6b96e7d..000000000 --- a/cxxtest/cxxtest/SelfTest.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __cxxtest_SelfTest_h__ -#define __cxxtest_SelfTest_h__ - -#define CXXTEST_SUITE(name) -#define CXXTEST_CODE(member) - -#endif // __cxxtest_SelfTest_h__ diff --git a/cxxtest/cxxtest/StdHeaders.h b/cxxtest/cxxtest/StdHeaders.h deleted file mode 100644 index 7c80b76f9..000000000 --- a/cxxtest/cxxtest/StdHeaders.h +++ /dev/null @@ -1,25 +0,0 @@ -#ifndef __cxxtest_StdHeaders_h__ -#define __cxxtest_StdHeaders_h__ - -// -// This file basically #includes the STL headers. -// It exists to support warning level 4 in Visual C++ -// - -#ifdef _MSC_VER -# pragma warning( push, 1 ) -#endif // _MSC_VER - -#include -#include -#include -#include -#include -#include -#include - -#ifdef _MSC_VER -# pragma warning( pop ) -#endif // _MSC_VER - -#endif // __cxxtest_StdHeaders_h__ diff --git a/cxxtest/cxxtest/StdValueTraits.h b/cxxtest/cxxtest/StdValueTraits.h deleted file mode 100644 index 036796b0d..000000000 --- a/cxxtest/cxxtest/StdValueTraits.h +++ /dev/null @@ -1,229 +0,0 @@ -#ifndef __cxxtest_StdValueTraits_h__ -#define __cxxtest_StdValueTraits_h__ - -// -// This file defines ValueTraits for std:: stuff. -// It is #included by if you -// define CXXTEST_HAVE_STD -// - -#include -#include - -#ifdef _CXXTEST_OLD_STD -# define CXXTEST_STD(x) x -#else // !_CXXTEST_OLD_STD -# define CXXTEST_STD(x) std::x -#endif // _CXXTEST_OLD_STD - -#ifndef CXXTEST_USER_VALUE_TRAITS - -namespace CxxTest -{ - // - // NOTE: This should have been - // template - // class ValueTraits< std::basic_string > {}; - // But MSVC doesn't support it (yet). - // - - // - // If we have std::string, we might as well use it - // - class StdTraitsBase - { - public: - StdTraitsBase &operator<<( const CXXTEST_STD(string) &s ) { _s += s; return *this; } - const char *asString() const { return _s.c_str(); } - - private: - CXXTEST_STD(string) _s; - }; - - // - // std::string - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(string) &s ) - { - *this << "\""; - for ( unsigned i = 0; i < s.length(); ++ i ) { - char c[sizeof("\\xXX")]; - charToString( s[i], c ); - *this << c; - } - *this << "\""; - } - }; - - CXXTEST_COPY_CONST_TRAITS( CXXTEST_STD(string) ); - -#ifndef _CXXTEST_OLD_STD - // - // std::wstring - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits)> : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(basic_string) &s ) - { - *this << "L\""; - for ( unsigned i = 0; i < s.length(); ++ i ) { - char c[sizeof("\\x12345678")]; - charToString( (unsigned long)s[i], c ); - *this << c; - } - *this << "\""; - } - }; - - CXXTEST_COPY_CONST_TRAITS( CXXTEST_STD(basic_string) ); -#endif // _CXXTEST_OLD_STD - - // - // Convert a range defined by iterators to a string - // This is useful for almost all STL containers - // - template - void dumpRange( Stream &s, Iterator first, Iterator last ) - { - s << "{ "; - while ( first != last ) { - s << TS_AS_STRING(*first); - ++ first; - s << ((first == last) ? " }" : ", "); - } - } - -#ifdef _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION - // - // std::pair - // - template - class ValueTraits< CXXTEST_STD(pair) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(pair) &p ) - { - *this << "<" << TS_AS_STRING( p.first ) << ", " << TS_AS_STRING( p.second ) << ">"; - } - }; - - // - // std::vector - // - template - class ValueTraits< CXXTEST_STD(vector) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(vector) &v ) - { - dumpRange( *this, v.begin(), v.end() ); - } - }; - - // - // std::list - // - template - class ValueTraits< CXXTEST_STD(list) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(list) &l ) - { - dumpRange( *this, l.begin(), l.end() ); - } - }; - - // - // std::set - // - template - class ValueTraits< CXXTEST_STD(set) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(set) &s ) - { - dumpRange( *this, s.begin(), s.end() ); - } - }; - - // - // std::map - // - template - class ValueTraits< CXXTEST_STD(map) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(map) &m ) - { - dumpRange( *this, m.begin(), m.end() ); - } - }; - - // - // std::deque - // - template - class ValueTraits< CXXTEST_STD(deque) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(deque) &d ) - { - dumpRange( *this, d.begin(), d.end() ); - } - }; - - // - // std::multiset - // - template - class ValueTraits< CXXTEST_STD(multiset) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(multiset) &ms ) - { - dumpRange( *this, ms.begin(), ms.end() ); - } - }; - - // - // std::multimap - // - template - class ValueTraits< CXXTEST_STD(multimap) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(multimap) &mm ) - { - dumpRange( *this, mm.begin(), mm.end() ); - } - }; - - // - // std::complex - // - template - class ValueTraits< CXXTEST_STD(complex) > : public StdTraitsBase - { - public: - ValueTraits( const CXXTEST_STD(complex) &c ) - { - if ( !c.imag() ) - *this << TS_AS_STRING(c.real()); - else if ( !c.real() ) - *this << "(" << TS_AS_STRING(c.imag()) << " * i)"; - else - *this << "(" << TS_AS_STRING(c.real()) << " + " << TS_AS_STRING(c.imag()) << " * i)"; - } - }; -#endif // _CXXTEST_PARTIAL_TEMPLATE_SPECIALIZATION -}; - -#endif // CXXTEST_USER_VALUE_TRAITS - -#endif // __cxxtest_StdValueTraits_h__ diff --git a/cxxtest/cxxtest/StdioFilePrinter.h b/cxxtest/cxxtest/StdioFilePrinter.h deleted file mode 100644 index 47984b69b..000000000 --- a/cxxtest/cxxtest/StdioFilePrinter.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __cxxtest__StdioFilePrinter_h__ -#define __cxxtest__StdioFilePrinter_h__ - -// -// The StdioFilePrinter is a simple TestListener that -// just prints "OK" if everything goes well, otherwise -// reports the error in the format of compiler messages. -// This class uses , i.e. FILE * and fprintf(). -// - -#include -#include - -namespace CxxTest -{ - class StdioFilePrinter : public ErrorFormatter - { - public: - StdioFilePrinter( FILE *o, const char *preLine = ":", const char *postLine = "" ) : - ErrorFormatter( new Adapter(o), preLine, postLine ) {} - virtual ~StdioFilePrinter() { delete outputStream(); } - - private: - class Adapter : public OutputStream - { - Adapter( const Adapter & ); - Adapter &operator=( const Adapter & ); - - FILE *_o; - - public: - Adapter( FILE *o ) : _o(o) {} - void flush() { fflush( _o ); } - OutputStream &operator<<( unsigned i ) { fprintf( _o, "%u", i ); return *this; } - OutputStream &operator<<( const char *s ) { fputs( s, _o ); return *this; } - OutputStream &operator<<( Manipulator m ) { return OutputStream::operator<<( m ); } - }; - }; -} - -#endif // __cxxtest__StdioFilePrinter_h__ diff --git a/cxxtest/cxxtest/StdioPrinter.h b/cxxtest/cxxtest/StdioPrinter.h deleted file mode 100644 index af5bc6b63..000000000 --- a/cxxtest/cxxtest/StdioPrinter.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef __cxxtest__StdioPrinter_h__ -#define __cxxtest__StdioPrinter_h__ - -// -// The StdioPrinter is an StdioFilePrinter which defaults to stdout. -// This should have been called StdOutPrinter or something, but the name -// has been historically used. -// - -#include - -namespace CxxTest -{ - class StdioPrinter : public StdioFilePrinter - { - public: - StdioPrinter( FILE *o = stdout, const char *preLine = ":", const char *postLine = "" ) : - StdioFilePrinter( o, preLine, postLine ) {} - }; -} - -#endif // __cxxtest__StdioPrinter_h__ diff --git a/cxxtest/cxxtest/TeeListener.h b/cxxtest/cxxtest/TeeListener.h deleted file mode 100644 index 88afdd3ed..000000000 --- a/cxxtest/cxxtest/TeeListener.h +++ /dev/null @@ -1,182 +0,0 @@ -#ifndef __cxxtest__TeeListener_h__ -#define __cxxtest__TeeListener_h__ - -// -// A TeeListener notifies two "reular" TestListeners -// - -#include -#include - -namespace CxxTest -{ - class TeeListener : public TestListener - { - public: - TeeListener() - { - setFirst( _dummy ); - setSecond( _dummy ); - } - - virtual ~TeeListener() - { - } - - void setFirst( TestListener &first ) - { - _first = &first; - } - - void setSecond( TestListener &second ) - { - _second = &second; - } - - void enterWorld( const WorldDescription &d ) - { - _first->enterWorld( d ); - _second->enterWorld( d ); - } - - void enterSuite( const SuiteDescription &d ) - { - _first->enterSuite( d ); - _second->enterSuite( d ); - } - - void enterTest( const TestDescription &d ) - { - _first->enterTest( d ); - _second->enterTest( d ); - } - - void trace( const char *file, unsigned line, const char *expression ) - { - _first->trace( file, line, expression ); - _second->trace( file, line, expression ); - } - - void warning( const char *file, unsigned line, const char *expression ) - { - _first->warning( file, line, expression ); - _second->warning( file, line, expression ); - } - - void failedTest( const char *file, unsigned line, const char *expression ) - { - _first->failedTest( file, line, expression ); - _second->failedTest( file, line, expression ); - } - - void failedAssert( const char *file, unsigned line, const char *expression ) - { - _first->failedAssert( file, line, expression ); - _second->failedAssert( file, line, expression ); - } - - void failedAssertEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - _first->failedAssertEquals( file, line, xStr, yStr, x, y ); - _second->failedAssertEquals( file, line, xStr, yStr, x, y ); - } - - void failedAssertSameData( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *sizeStr, const void *x, - const void *y, unsigned size ) - { - _first->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size ); - _second->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size ); - } - - void failedAssertDelta( const char *file, unsigned line, - const char *xStr, const char *yStr, const char *dStr, - const char *x, const char *y, const char *d ) - { - _first->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d ); - _second->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d ); - } - - void failedAssertDiffers( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *value ) - { - _first->failedAssertDiffers( file, line, xStr, yStr, value ); - _second->failedAssertDiffers( file, line, xStr, yStr, value ); - } - - void failedAssertLessThan( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - _first->failedAssertLessThan( file, line, xStr, yStr, x, y ); - _second->failedAssertLessThan( file, line, xStr, yStr, x, y ); - } - - void failedAssertLessThanEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - _first->failedAssertLessThanEquals( file, line, xStr, yStr, x, y ); - _second->failedAssertLessThanEquals( file, line, xStr, yStr, x, y ); - } - - void failedAssertPredicate( const char *file, unsigned line, - const char *predicate, const char *xStr, const char *x ) - { - _first->failedAssertPredicate( file, line, predicate, xStr, x ); - _second->failedAssertPredicate( file, line, predicate, xStr, x ); - } - - void failedAssertRelation( const char *file, unsigned line, - const char *relation, const char *xStr, const char *yStr, - const char *x, const char *y ) - { - _first->failedAssertRelation( file, line, relation, xStr, yStr, x, y ); - _second->failedAssertRelation( file, line, relation, xStr, yStr, x, y ); - } - - void failedAssertThrows( const char *file, unsigned line, - const char *expression, const char *type, - bool otherThrown ) - { - _first->failedAssertThrows( file, line, expression, type, otherThrown ); - _second->failedAssertThrows( file, line, expression, type, otherThrown ); - } - - void failedAssertThrowsNot( const char *file, unsigned line, - const char *expression ) - { - _first->failedAssertThrowsNot( file, line, expression ); - _second->failedAssertThrowsNot( file, line, expression ); - } - - void leaveTest( const TestDescription &d ) - { - _first->leaveTest(d); - _second->leaveTest(d); - } - - void leaveSuite( const SuiteDescription &d ) - { - _first->leaveSuite(d); - _second->leaveSuite(d); - } - - void leaveWorld( const WorldDescription &d ) - { - _first->leaveWorld(d); - _second->leaveWorld(d); - } - - private: - TestListener *_first, *_second; - TestListener _dummy; - }; -}; - - -#endif // __cxxtest__TeeListener_h__ diff --git a/cxxtest/cxxtest/TestListener.h b/cxxtest/cxxtest/TestListener.h deleted file mode 100644 index 0eeb5234e..000000000 --- a/cxxtest/cxxtest/TestListener.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef __cxxtest__TestListener_h__ -#define __cxxtest__TestListener_h__ - -// -// TestListener is the base class for all "listeners", -// i.e. classes that receive notifications of the -// testing process. -// -// The names of the parameters are in comments to avoid -// "unused parameter" warnings. -// - -#include - -namespace CxxTest -{ - class TestListener - { - public: - TestListener() {} - virtual ~TestListener() {} - - virtual void enterWorld( const WorldDescription & /*desc*/ ) {} - virtual void enterSuite( const SuiteDescription & /*desc*/ ) {} - virtual void enterTest( const TestDescription & /*desc*/ ) {} - virtual void trace( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/ ) {} - virtual void warning( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/ ) {} - virtual void failedTest( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/ ) {} - virtual void failedAssert( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/ ) {} - virtual void failedAssertEquals( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) {} - virtual void failedAssertSameData( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*sizeStr*/, const void * /*x*/, - const void * /*y*/, unsigned /*size*/ ) {} - virtual void failedAssertDelta( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*dStr*/, const char * /*x*/, - const char * /*y*/, const char * /*d*/ ) {} - virtual void failedAssertDiffers( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*value*/ ) {} - virtual void failedAssertLessThan( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) {} - virtual void failedAssertLessThanEquals( const char * /*file*/, unsigned /*line*/, - const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) {} - virtual void failedAssertPredicate( const char * /*file*/, unsigned /*line*/, - const char * /*predicate*/, const char * /*xStr*/, const char * /*x*/ ) {} - virtual void failedAssertRelation( const char * /*file*/, unsigned /*line*/, - const char * /*relation*/, const char * /*xStr*/, const char * /*yStr*/, - const char * /*x*/, const char * /*y*/ ) {} - virtual void failedAssertThrows( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/, const char * /*type*/, - bool /*otherThrown*/ ) {} - virtual void failedAssertThrowsNot( const char * /*file*/, unsigned /*line*/, - const char * /*expression*/ ) {} - virtual void leaveTest( const TestDescription & /*desc*/ ) {} - virtual void leaveSuite( const SuiteDescription & /*desc*/ ) {} - virtual void leaveWorld( const WorldDescription & /*desc*/ ) {} - }; -} - -#endif // __cxxtest__TestListener_h__ diff --git a/cxxtest/cxxtest/TestRunner.h b/cxxtest/cxxtest/TestRunner.h deleted file mode 100644 index 43f0832e2..000000000 --- a/cxxtest/cxxtest/TestRunner.h +++ /dev/null @@ -1,125 +0,0 @@ -#ifndef __cxxtest_TestRunner_h__ -#define __cxxtest_TestRunner_h__ - -// -// TestRunner is the class that runs all the tests. -// To use it, create an object that implements the TestListener -// interface and call TestRunner::runAllTests( myListener ); -// - -#include -#include -#include -#include - -namespace CxxTest -{ - class TestRunner - { - public: - static void runAllTests( TestListener &listener ) - { - tracker().setListener( &listener ); - _TS_TRY { TestRunner().runWorld(); } - _TS_LAST_CATCH( { tracker().failedTest( __FILE__, __LINE__, "Exception thrown from world" ); } ); - tracker().setListener( 0 ); - } - - static void runAllTests( TestListener *listener ) - { - if ( listener ) { - listener->warning( __FILE__, __LINE__, "Deprecated; Use runAllTests( TestListener & )" ); - runAllTests( *listener ); - } - } - - private: - void runWorld() - { - RealWorldDescription wd; - WorldGuard sg; - - tracker().enterWorld( wd ); - if ( wd.setUp() ) { - for ( SuiteDescription *sd = wd.firstSuite(); sd; sd = sd->next() ) - if ( sd->active() ) - runSuite( *sd ); - - wd.tearDown(); - } - tracker().leaveWorld( wd ); - } - - void runSuite( SuiteDescription &sd ) - { - StateGuard sg; - - tracker().enterSuite( sd ); - if ( sd.setUp() ) { - for ( TestDescription *td = sd.firstTest(); td; td = td->next() ) - if ( td->active() ) - runTest( *td ); - - sd.tearDown(); - } - tracker().leaveSuite( sd ); - } - - void runTest( TestDescription &td ) - { - StateGuard sg; - - tracker().enterTest( td ); - if ( td.setUp() ) { - td.run(); - td.tearDown(); - } - tracker().leaveTest( td ); - } - - class StateGuard - { -#ifdef _CXXTEST_HAVE_EH - bool _abortTestOnFail; -#endif // _CXXTEST_HAVE_EH - unsigned _maxDumpSize; - - public: - StateGuard() - { -#ifdef _CXXTEST_HAVE_EH - _abortTestOnFail = abortTestOnFail(); -#endif // _CXXTEST_HAVE_EH - _maxDumpSize = maxDumpSize(); - } - - ~StateGuard() - { -#ifdef _CXXTEST_HAVE_EH - setAbortTestOnFail( _abortTestOnFail ); -#endif // _CXXTEST_HAVE_EH - setMaxDumpSize( _maxDumpSize ); - } - }; - - class WorldGuard : public StateGuard - { - public: - WorldGuard() : StateGuard() - { -#ifdef _CXXTEST_HAVE_EH - setAbortTestOnFail( CXXTEST_DEFAULT_ABORT ); -#endif // _CXXTEST_HAVE_EH - setMaxDumpSize( CXXTEST_MAX_DUMP_SIZE ); - } - }; - }; - - // - // For --no-static-init - // - void initialize(); -}; - - -#endif // __cxxtest_TestRunner_h__ diff --git a/cxxtest/cxxtest/TestSuite.cpp b/cxxtest/cxxtest/TestSuite.cpp deleted file mode 100644 index bc14c2cd8..000000000 --- a/cxxtest/cxxtest/TestSuite.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#ifndef __cxxtest__TestSuite_cpp__ -#define __cxxtest__TestSuite_cpp__ - -#include - -namespace CxxTest -{ - // - // TestSuite members - // - TestSuite::~TestSuite() {} - void TestSuite::setUp() {} - void TestSuite::tearDown() {} - - // - // Test-aborting stuff - // - static bool currentAbortTestOnFail = false; - - bool abortTestOnFail() - { - return currentAbortTestOnFail; - } - - void setAbortTestOnFail( bool value ) - { - currentAbortTestOnFail = value; - } - - void doAbortTest() - { -# if defined(_CXXTEST_HAVE_EH) - if ( currentAbortTestOnFail ) - throw AbortTest(); -# endif // _CXXTEST_HAVE_EH - } - - // - // Max dump size - // - static unsigned currentMaxDumpSize = CXXTEST_MAX_DUMP_SIZE; - - unsigned maxDumpSize() - { - return currentMaxDumpSize; - } - - void setMaxDumpSize( unsigned value ) - { - currentMaxDumpSize = value; - } - - // - // Some non-template functions - // - void doTrace( const char *file, unsigned line, const char *message ) - { - tracker().trace( file, line, message ); - } - - void doWarn( const char *file, unsigned line, const char *message ) - { - tracker().warning( file, line, message ); - } - - void doFailTest( const char *file, unsigned line, const char *message ) - { - tracker().failedTest( file, line, message ); - TS_ABORT(); - } - - void doFailAssert( const char *file, unsigned line, - const char *expression, const char *message ) - { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssert( file, line, expression ); - TS_ABORT(); - } - - bool sameData( const void *x, const void *y, unsigned size ) - { - if ( size == 0 ) - return true; - - if ( x == y ) - return true; - - if ( !x || !y ) - return false; - - const char *cx = (const char *)x; - const char *cy = (const char *)y; - while ( size -- ) - if ( *cx++ != *cy++ ) - return false; - - return true; - } - - void doAssertSameData( const char *file, unsigned line, - const char *xExpr, const void *x, - const char *yExpr, const void *y, - const char *sizeExpr, unsigned size, - const char *message ) - { - if ( !sameData( x, y, size ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertSameData( file, line, xExpr, yExpr, sizeExpr, x, y, size ); - TS_ABORT(); - } - } - - void doFailAssertThrows( const char *file, unsigned line, - const char *expr, const char *type, - bool otherThrown, - const char *message ) - { - if ( message ) - tracker().failedTest( file, line, message ); - - tracker().failedAssertThrows( file, line, expr, type, otherThrown ); - TS_ABORT(); - } - - void doFailAssertThrowsNot( const char *file, unsigned line, - const char *expression, const char *message ) - { - if ( message ) - tracker().failedTest( file, line, message ); - - tracker().failedAssertThrowsNot( file, line, expression ); - TS_ABORT(); - } -}; - -#endif // __cxxtest__TestSuite_cpp__ diff --git a/cxxtest/cxxtest/TestSuite.h b/cxxtest/cxxtest/TestSuite.h deleted file mode 100644 index fc5a206a7..000000000 --- a/cxxtest/cxxtest/TestSuite.h +++ /dev/null @@ -1,512 +0,0 @@ -#ifndef __cxxtest__TestSuite_h__ -#define __cxxtest__TestSuite_h__ - -// -// class TestSuite is the base class for all test suites. -// To define a test suite, derive from this class and add -// member functions called void test*(); -// - -#include -#include -#include -#include - -#ifdef _CXXTEST_HAVE_STD -# include -#endif // _CXXTEST_HAVE_STD - -namespace CxxTest -{ - class TestSuite - { - public: - virtual ~TestSuite(); - virtual void setUp(); - virtual void tearDown(); - }; - - class AbortTest {}; - void doAbortTest(); -# define TS_ABORT() CxxTest::doAbortTest() - - bool abortTestOnFail(); - void setAbortTestOnFail( bool value = CXXTEST_DEFAULT_ABORT ); - - unsigned maxDumpSize(); - void setMaxDumpSize( unsigned value = CXXTEST_MAX_DUMP_SIZE ); - - void doTrace( const char *file, unsigned line, const char *message ); - void doWarn( const char *file, unsigned line, const char *message ); - void doFailTest( const char *file, unsigned line, const char *message ); - void doFailAssert( const char *file, unsigned line, const char *expression, const char *message ); - - template - bool equals( X x, Y y ) - { - return (x == y); - } - - template - void doAssertEquals( const char *file, unsigned line, - const char *xExpr, X x, - const char *yExpr, Y y, - const char *message ) - { - if ( !equals( x, y ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertEquals( file, line, xExpr, yExpr, TS_AS_STRING(x), TS_AS_STRING(y) ); - TS_ABORT(); - } - } - - void doAssertSameData( const char *file, unsigned line, - const char *xExpr, const void *x, - const char *yExpr, const void *y, - const char *sizeExpr, unsigned size, - const char *message ); - - template - bool differs( X x, Y y ) - { - return !(x == y); - } - - template - void doAssertDiffers( const char *file, unsigned line, - const char *xExpr, X x, - const char *yExpr, Y y, - const char *message ) - { - if ( !differs( x, y ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertDiffers( file, line, xExpr, yExpr, TS_AS_STRING(x) ); - TS_ABORT(); - } - } - - template - bool lessThan( X x, Y y ) - { - return (x < y); - } - - template - void doAssertLessThan( const char *file, unsigned line, - const char *xExpr, X x, - const char *yExpr, Y y, - const char *message ) - { - if ( !lessThan(x, y) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertLessThan( file, line, xExpr, yExpr, TS_AS_STRING(x), TS_AS_STRING(y) ); - TS_ABORT(); - } - } - - template - bool lessThanEquals( X x, Y y ) - { - return (x <= y); - } - - template - void doAssertLessThanEquals( const char *file, unsigned line, - const char *xExpr, X x, - const char *yExpr, Y y, - const char *message ) - { - if ( !lessThanEquals( x, y ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertLessThanEquals( file, line, xExpr, yExpr, TS_AS_STRING(x), TS_AS_STRING(y) ); - TS_ABORT(); - } - } - - template - void doAssertPredicate( const char *file, unsigned line, - const char *pExpr, const P &p, - const char *xExpr, X x, - const char *message ) - { - if ( !p( x ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertPredicate( file, line, pExpr, xExpr, TS_AS_STRING(x) ); - TS_ABORT(); - } - } - - template - void doAssertRelation( const char *file, unsigned line, - const char *rExpr, const R &r, - const char *xExpr, X x, - const char *yExpr, Y y, - const char *message ) - { - if ( !r( x, y ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - tracker().failedAssertRelation( file, line, rExpr, xExpr, yExpr, TS_AS_STRING(x), TS_AS_STRING(y) ); - TS_ABORT(); - } - } - - template - bool delta( X x, Y y, D d ) - { - return ((y >= x - d) && (y <= x + d)); - } - - template - void doAssertDelta( const char *file, unsigned line, - const char *xExpr, X x, - const char *yExpr, Y y, - const char *dExpr, D d, - const char *message ) - { - if ( !delta( x, y, d ) ) { - if ( message ) - tracker().failedTest( file, line, message ); - - tracker().failedAssertDelta( file, line, xExpr, yExpr, dExpr, - TS_AS_STRING(x), TS_AS_STRING(y), TS_AS_STRING(d) ); - TS_ABORT(); - } - } - - void doFailAssertThrows( const char *file, unsigned line, - const char *expr, const char *type, - bool otherThrown, - const char *message ); - - void doFailAssertThrowsNot( const char *file, unsigned line, - const char *expression, const char *message ); - -# ifdef _CXXTEST_HAVE_EH -# define _TS_TRY try -# define _TS_CATCH_TYPE(t, b) catch t b -# define _TS_CATCH_ABORT(b) _TS_CATCH_TYPE( (const CxxTest::AbortTest &), b ) -# define _TS_LAST_CATCH(b) _TS_CATCH_TYPE( (...), b ) -# define _TSM_LAST_CATCH(f,l,m) _TS_LAST_CATCH( { (CxxTest::tracker()).failedTest(f,l,m); } ) -# ifdef _CXXTEST_HAVE_STD -# define ___TSM_CATCH(f,l,m) \ - catch(const std::exception &e) { (CxxTest::tracker()).failedTest(f,l,e.what()); } \ - _TSM_LAST_CATCH(f,l,m) -# else // !_CXXTEST_HAVE_STD -# define ___TSM_CATCH(f,l,m) _TSM_LAST_CATCH(f,l,m) -# endif // _CXXTEST_HAVE_STD -# define __TSM_CATCH(f,l,m) \ - _TS_CATCH_ABORT( { throw; } ) \ - ___TSM_CATCH(f,l,m) -# define __TS_CATCH(f,l) __TSM_CATCH(f,l,"Unhandled exception") -# define _TS_CATCH __TS_CATCH(__FILE__,__LINE__) -# else // !_CXXTEST_HAVE_EH -# define _TS_TRY -# define ___TSM_CATCH(f,l,m) -# define __TSM_CATCH(f,l,m) -# define __TS_CATCH(f,l) -# define _TS_CATCH -# define _TS_CATCH_TYPE(t, b) -# define _TS_LAST_CATCH(b) -# define _TS_CATCH_ABORT(b) -# endif // _CXXTEST_HAVE_EH - - // TS_TRACE -# define _TS_TRACE(f,l,e) CxxTest::doTrace( (f), (l), TS_AS_STRING(e) ) -# define TS_TRACE(e) _TS_TRACE( __FILE__, __LINE__, e ) - - // TS_WARN -# define _TS_WARN(f,l,e) CxxTest::doWarn( (f), (l), TS_AS_STRING(e) ) -# define TS_WARN(e) _TS_WARN( __FILE__, __LINE__, e ) - - // TS_FAIL -# define _TS_FAIL(f,l,e) CxxTest::doFailTest( (f), (l), TS_AS_STRING(e) ) -# define TS_FAIL(e) _TS_FAIL( __FILE__, __LINE__, e ) - - // TS_ASSERT -# define ___ETS_ASSERT(f,l,e,m) { if ( !(e) ) CxxTest::doFailAssert( (f), (l), #e, (m) ); } -# define ___TS_ASSERT(f,l,e,m) { _TS_TRY { ___ETS_ASSERT(f,l,e,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT(f,l,e) ___ETS_ASSERT(f,l,e,0) -# define _TS_ASSERT(f,l,e) ___TS_ASSERT(f,l,e,0) - -# define ETS_ASSERT(e) _ETS_ASSERT(__FILE__,__LINE__,e) -# define TS_ASSERT(e) _TS_ASSERT(__FILE__,__LINE__,e) - -# define _ETSM_ASSERT(f,l,m,e) ___ETS_ASSERT(f,l,e,TS_AS_STRING(m) ) -# define _TSM_ASSERT(f,l,m,e) ___TS_ASSERT(f,l,e,TS_AS_STRING(m) ) - -# define ETSM_ASSERT(m,e) _ETSM_ASSERT(__FILE__,__LINE__,m,e) -# define TSM_ASSERT(m,e) _TSM_ASSERT(__FILE__,__LINE__,m,e) - - // TS_ASSERT_EQUALS -# define ___ETS_ASSERT_EQUALS(f,l,x,y,m) CxxTest::doAssertEquals( (f), (l), #x, (x), #y, (y), (m) ) -# define ___TS_ASSERT_EQUALS(f,l,x,y,m) { _TS_TRY { ___ETS_ASSERT_EQUALS(f,l,x,y,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_EQUALS(f,l,x,y) ___ETS_ASSERT_EQUALS(f,l,x,y,0) -# define _TS_ASSERT_EQUALS(f,l,x,y) ___TS_ASSERT_EQUALS(f,l,x,y,0) - -# define ETS_ASSERT_EQUALS(x,y) _ETS_ASSERT_EQUALS(__FILE__,__LINE__,x,y) -# define TS_ASSERT_EQUALS(x,y) _TS_ASSERT_EQUALS(__FILE__,__LINE__,x,y) - -# define _ETSM_ASSERT_EQUALS(f,l,m,x,y) ___ETS_ASSERT_EQUALS(f,l,x,y,TS_AS_STRING(m)) -# define _TSM_ASSERT_EQUALS(f,l,m,x,y) ___TS_ASSERT_EQUALS(f,l,x,y,TS_AS_STRING(m)) - -# define ETSM_ASSERT_EQUALS(m,x,y) _ETSM_ASSERT_EQUALS(__FILE__,__LINE__,m,x,y) -# define TSM_ASSERT_EQUALS(m,x,y) _TSM_ASSERT_EQUALS(__FILE__,__LINE__,m,x,y) - - // TS_ASSERT_SAME_DATA -# define ___ETS_ASSERT_SAME_DATA(f,l,x,y,s,m) CxxTest::doAssertSameData( (f), (l), #x, (x), #y, (y), #s, (s), (m) ) -# define ___TS_ASSERT_SAME_DATA(f,l,x,y,s,m) { _TS_TRY { ___ETS_ASSERT_SAME_DATA(f,l,x,y,s,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_SAME_DATA(f,l,x,y,s) ___ETS_ASSERT_SAME_DATA(f,l,x,y,s,0) -# define _TS_ASSERT_SAME_DATA(f,l,x,y,s) ___TS_ASSERT_SAME_DATA(f,l,x,y,s,0) - -# define ETS_ASSERT_SAME_DATA(x,y,s) _ETS_ASSERT_SAME_DATA(__FILE__,__LINE__,x,y,s) -# define TS_ASSERT_SAME_DATA(x,y,s) _TS_ASSERT_SAME_DATA(__FILE__,__LINE__,x,y,s) - -# define _ETSM_ASSERT_SAME_DATA(f,l,m,x,y,s) ___ETS_ASSERT_SAME_DATA(f,l,x,y,s,TS_AS_STRING(m)) -# define _TSM_ASSERT_SAME_DATA(f,l,m,x,y,s) ___TS_ASSERT_SAME_DATA(f,l,x,y,s,TS_AS_STRING(m)) - -# define ETSM_ASSERT_SAME_DATA(m,x,y,s) _ETSM_ASSERT_SAME_DATA(__FILE__,__LINE__,m,x,y,s) -# define TSM_ASSERT_SAME_DATA(m,x,y,s) _TSM_ASSERT_SAME_DATA(__FILE__,__LINE__,m,x,y,s) - - // TS_ASSERT_DIFFERS -# define ___ETS_ASSERT_DIFFERS(f,l,x,y,m) CxxTest::doAssertDiffers( (f), (l), #x, (x), #y, (y), (m) ) -# define ___TS_ASSERT_DIFFERS(f,l,x,y,m) { _TS_TRY { ___ETS_ASSERT_DIFFERS(f,l,x,y,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_DIFFERS(f,l,x,y) ___ETS_ASSERT_DIFFERS(f,l,x,y,0) -# define _TS_ASSERT_DIFFERS(f,l,x,y) ___TS_ASSERT_DIFFERS(f,l,x,y,0) - -# define ETS_ASSERT_DIFFERS(x,y) _ETS_ASSERT_DIFFERS(__FILE__,__LINE__,x,y) -# define TS_ASSERT_DIFFERS(x,y) _TS_ASSERT_DIFFERS(__FILE__,__LINE__,x,y) - -# define _ETSM_ASSERT_DIFFERS(f,l,m,x,y) ___ETS_ASSERT_DIFFERS(f,l,x,y,TS_AS_STRING(m)) -# define _TSM_ASSERT_DIFFERS(f,l,m,x,y) ___TS_ASSERT_DIFFERS(f,l,x,y,TS_AS_STRING(m)) - -# define ETSM_ASSERT_DIFFERS(m,x,y) _ETSM_ASSERT_DIFFERS(__FILE__,__LINE__,m,x,y) -# define TSM_ASSERT_DIFFERS(m,x,y) _TSM_ASSERT_DIFFERS(__FILE__,__LINE__,m,x,y) - - // TS_ASSERT_LESS_THAN -# define ___ETS_ASSERT_LESS_THAN(f,l,x,y,m) CxxTest::doAssertLessThan( (f), (l), #x, (x), #y, (y), (m) ) -# define ___TS_ASSERT_LESS_THAN(f,l,x,y,m) { _TS_TRY { ___ETS_ASSERT_LESS_THAN(f,l,x,y,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_LESS_THAN(f,l,x,y) ___ETS_ASSERT_LESS_THAN(f,l,x,y,0) -# define _TS_ASSERT_LESS_THAN(f,l,x,y) ___TS_ASSERT_LESS_THAN(f,l,x,y,0) - -# define ETS_ASSERT_LESS_THAN(x,y) _ETS_ASSERT_LESS_THAN(__FILE__,__LINE__,x,y) -# define TS_ASSERT_LESS_THAN(x,y) _TS_ASSERT_LESS_THAN(__FILE__,__LINE__,x,y) - -# define _ETSM_ASSERT_LESS_THAN(f,l,m,x,y) ___ETS_ASSERT_LESS_THAN(f,l,x,y,TS_AS_STRING(m)) -# define _TSM_ASSERT_LESS_THAN(f,l,m,x,y) ___TS_ASSERT_LESS_THAN(f,l,x,y,TS_AS_STRING(m)) - -# define ETSM_ASSERT_LESS_THAN(m,x,y) _ETSM_ASSERT_LESS_THAN(__FILE__,__LINE__,m,x,y) -# define TSM_ASSERT_LESS_THAN(m,x,y) _TSM_ASSERT_LESS_THAN(__FILE__,__LINE__,m,x,y) - - // TS_ASSERT_LESS_THAN_EQUALS -# define ___ETS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,m) \ - CxxTest::doAssertLessThanEquals( (f), (l), #x, (x), #y, (y), (m) ) -# define ___TS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,m) \ - { _TS_TRY { ___ETS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_LESS_THAN_EQUALS(f,l,x,y) ___ETS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,0) -# define _TS_ASSERT_LESS_THAN_EQUALS(f,l,x,y) ___TS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,0) - -# define ETS_ASSERT_LESS_THAN_EQUALS(x,y) _ETS_ASSERT_LESS_THAN_EQUALS(__FILE__,__LINE__,x,y) -# define TS_ASSERT_LESS_THAN_EQUALS(x,y) _TS_ASSERT_LESS_THAN_EQUALS(__FILE__,__LINE__,x,y) - -# define _ETSM_ASSERT_LESS_THAN_EQUALS(f,l,m,x,y) ___ETS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,TS_AS_STRING(m)) -# define _TSM_ASSERT_LESS_THAN_EQUALS(f,l,m,x,y) ___TS_ASSERT_LESS_THAN_EQUALS(f,l,x,y,TS_AS_STRING(m)) - -# define ETSM_ASSERT_LESS_THAN_EQUALS(m,x,y) _ETSM_ASSERT_LESS_THAN_EQUALS(__FILE__,__LINE__,m,x,y) -# define TSM_ASSERT_LESS_THAN_EQUALS(m,x,y) _TSM_ASSERT_LESS_THAN_EQUALS(__FILE__,__LINE__,m,x,y) - - // TS_ASSERT_PREDICATE -# define ___ETS_ASSERT_PREDICATE(f,l,p,x,m) \ - CxxTest::doAssertPredicate( (f), (l), #p, p(), #x, (x), (m) ) -# define ___TS_ASSERT_PREDICATE(f,l,p,x,m) \ - { _TS_TRY { ___ETS_ASSERT_PREDICATE(f,l,p,x,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_PREDICATE(f,l,p,x) ___ETS_ASSERT_PREDICATE(f,l,p,x,0) -# define _TS_ASSERT_PREDICATE(f,l,p,x) ___TS_ASSERT_PREDICATE(f,l,p,x,0) - -# define ETS_ASSERT_PREDICATE(p,x) _ETS_ASSERT_PREDICATE(__FILE__,__LINE__,p,x) -# define TS_ASSERT_PREDICATE(p,x) _TS_ASSERT_PREDICATE(__FILE__,__LINE__,p,x) - -# define _ETSM_ASSERT_PREDICATE(f,l,m,p,x) ___ETS_ASSERT_PREDICATE(f,l,p,x,TS_AS_STRING(m)) -# define _TSM_ASSERT_PREDICATE(f,l,m,p,x) ___TS_ASSERT_PREDICATE(f,l,p,x,TS_AS_STRING(m)) - -# define ETSM_ASSERT_PREDICATE(m,p,x) _ETSM_ASSERT_PREDICATE(__FILE__,__LINE__,m,p,x) -# define TSM_ASSERT_PREDICATE(m,p,x) _TSM_ASSERT_PREDICATE(__FILE__,__LINE__,m,p,x) - - // TS_ASSERT_RELATION -# define ___ETS_ASSERT_RELATION(f,l,r,x,y,m) \ - CxxTest::doAssertRelation( (f), (l), #r, r(), #x, (x), #y, (y), (m) ) -# define ___TS_ASSERT_RELATION(f,l,r,x,y,m) \ - { _TS_TRY { ___ETS_ASSERT_RELATION(f,l,r,x,y,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_RELATION(f,l,r,x,y) ___ETS_ASSERT_RELATION(f,l,r,x,y,0) -# define _TS_ASSERT_RELATION(f,l,r,x,y) ___TS_ASSERT_RELATION(f,l,r,x,y,0) - -# define ETS_ASSERT_RELATION(r,x,y) _ETS_ASSERT_RELATION(__FILE__,__LINE__,r,x,y) -# define TS_ASSERT_RELATION(r,x,y) _TS_ASSERT_RELATION(__FILE__,__LINE__,r,x,y) - -# define _ETSM_ASSERT_RELATION(f,l,m,r,x,y) ___ETS_ASSERT_RELATION(f,l,r,x,y,TS_AS_STRING(m)) -# define _TSM_ASSERT_RELATION(f,l,m,r,x,y) ___TS_ASSERT_RELATION(f,l,r,x,y,TS_AS_STRING(m)) - -# define ETSM_ASSERT_RELATION(m,r,x,y) _ETSM_ASSERT_RELATION(__FILE__,__LINE__,m,r,x,y) -# define TSM_ASSERT_RELATION(m,r,x,y) _TSM_ASSERT_RELATION(__FILE__,__LINE__,m,r,x,y) - - // TS_ASSERT_DELTA -# define ___ETS_ASSERT_DELTA(f,l,x,y,d,m) CxxTest::doAssertDelta( (f), (l), #x, (x), #y, (y), #d, (d), (m) ) -# define ___TS_ASSERT_DELTA(f,l,x,y,d,m) { _TS_TRY { ___ETS_ASSERT_DELTA(f,l,x,y,d,m); } __TS_CATCH(f,l) } - -# define _ETS_ASSERT_DELTA(f,l,x,y,d) ___ETS_ASSERT_DELTA(f,l,x,y,d,0) -# define _TS_ASSERT_DELTA(f,l,x,y,d) ___TS_ASSERT_DELTA(f,l,x,y,d,0) - -# define ETS_ASSERT_DELTA(x,y,d) _ETS_ASSERT_DELTA(__FILE__,__LINE__,x,y,d) -# define TS_ASSERT_DELTA(x,y,d) _TS_ASSERT_DELTA(__FILE__,__LINE__,x,y,d) - -# define _ETSM_ASSERT_DELTA(f,l,m,x,y,d) ___ETS_ASSERT_DELTA(f,l,x,y,d,TS_AS_STRING(m)) -# define _TSM_ASSERT_DELTA(f,l,m,x,y,d) ___TS_ASSERT_DELTA(f,l,x,y,d,TS_AS_STRING(m)) - -# define ETSM_ASSERT_DELTA(m,x,y,d) _ETSM_ASSERT_DELTA(__FILE__,__LINE__,m,x,y,d) -# define TSM_ASSERT_DELTA(m,x,y,d) _TSM_ASSERT_DELTA(__FILE__,__LINE__,m,x,y,d) - - // TS_ASSERT_THROWS -# define ___TS_ASSERT_THROWS(f,l,e,t,m) { \ - bool _ts_threw_expected = false, _ts_threw_else = false; \ - _TS_TRY { e; } \ - _TS_CATCH_TYPE( (t), { _ts_threw_expected = true; } ) \ - _TS_CATCH_ABORT( { throw; } ) \ - _TS_LAST_CATCH( { _ts_threw_else = true; } ) \ - if ( !_ts_threw_expected ) { CxxTest::doFailAssertThrows( (f), (l), #e, #t, _ts_threw_else, (m) ); } } - -# define _TS_ASSERT_THROWS(f,l,e,t) ___TS_ASSERT_THROWS(f,l,e,t,0) -# define TS_ASSERT_THROWS(e,t) _TS_ASSERT_THROWS(__FILE__,__LINE__,e,t) - -# define _TSM_ASSERT_THROWS(f,l,m,e,t) ___TS_ASSERT_THROWS(f,l,e,t,TS_AS_STRING(m)) -# define TSM_ASSERT_THROWS(m,e,t) _TSM_ASSERT_THROWS(__FILE__,__LINE__,m,e,t) - - // TS_ASSERT_THROWS_ASSERT -# define ___TS_ASSERT_THROWS_ASSERT(f,l,e,t,a,m) { \ - bool _ts_threw_expected = false, _ts_threw_else = false; \ - _TS_TRY { e; } \ - _TS_CATCH_TYPE( (t), { a; _ts_threw_expected = true; } ) \ - _TS_CATCH_ABORT( { throw; } ) \ - _TS_LAST_CATCH( { _ts_threw_else = true; } ) \ - if ( !_ts_threw_expected ) { CxxTest::doFailAssertThrows( (f), (l), #e, #t, _ts_threw_else, (m) ); } } - -# define _TS_ASSERT_THROWS_ASSERT(f,l,e,t,a) ___TS_ASSERT_THROWS_ASSERT(f,l,e,t,a,0) -# define TS_ASSERT_THROWS_ASSERT(e,t,a) _TS_ASSERT_THROWS_ASSERT(__FILE__,__LINE__,e,t,a) - -# define _TSM_ASSERT_THROWS_ASSERT(f,l,m,e,t,a) ___TS_ASSERT_THROWS_ASSERT(f,l,e,t,a,TS_AS_STRING(m)) -# define TSM_ASSERT_THROWS_ASSERT(m,e,t,a) _TSM_ASSERT_THROWS_ASSERT(__FILE__,__LINE__,m,e,t,a) - - // TS_ASSERT_THROWS_EQUALS -# define TS_ASSERT_THROWS_EQUALS(e,t,x,y) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_EQUALS(x,y)) -# define TSM_ASSERT_THROWS_EQUALS(m,e,t,x,y) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_EQUALS(m,x,y)) - - // TS_ASSERT_THROWS_DIFFERS -# define TS_ASSERT_THROWS_DIFFERS(e,t,x,y) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_DIFFERS(x,y)) -# define TSM_ASSERT_THROWS_DIFFERS(m,e,t,x,y) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_DIFFERS(m,x,y)) - - // TS_ASSERT_THROWS_DELTA -# define TS_ASSERT_THROWS_DELTA(e,t,x,y,d) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_DELTA(x,y,d)) -# define TSM_ASSERT_THROWS_DELTA(m,e,t,x,y,d) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_DELTA(m,x,y,d)) - - // TS_ASSERT_THROWS_SAME_DATA -# define TS_ASSERT_THROWS_SAME_DATA(e,t,x,y,s) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_SAME_DATA(x,y,s)) -# define TSM_ASSERT_THROWS_SAME_DATA(m,e,t,x,y,s) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_SAME_DATA(m,x,y,s)) - - // TS_ASSERT_THROWS_LESS_THAN -# define TS_ASSERT_THROWS_LESS_THAN(e,t,x,y) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_LESS_THAN(x,y)) -# define TSM_ASSERT_THROWS_LESS_THAN(m,e,t,x,y) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_LESS_THAN(m,x,y)) - - // TS_ASSERT_THROWS_LESS_THAN_EQUALS -# define TS_ASSERT_THROWS_LESS_THAN_EQUALS(e,t,x,y) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_LESS_THAN_EQUALS(x,y)) -# define TSM_ASSERT_THROWS_LESS_THAN_EQUALS(m,e,t,x,y) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_LESS_THAN_EQUALS(m,x,y)) - - // TS_ASSERT_THROWS_PREDICATE -# define TS_ASSERT_THROWS_PREDICATE(e,t,p,v) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_PREDICATE(p,v)) -# define TSM_ASSERT_THROWS_PREDICATE(m,e,t,p,v) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_PREDICATE(m,p,v)) - - // TS_ASSERT_THROWS_RELATION -# define TS_ASSERT_THROWS_RELATION(e,t,r,x,y) TS_ASSERT_THROWS_ASSERT(e,t,TS_ASSERT_RELATION(r,x,y)) -# define TSM_ASSERT_THROWS_RELATION(m,e,t,r,x,y) TSM_ASSERT_THROWS_ASSERT(m,e,t,TSM_ASSERT_RELATION(m,r,x,y)) - - // TS_ASSERT_THROWS_ANYTHING -# define ___TS_ASSERT_THROWS_ANYTHING(f,l,e,m) { \ - bool _ts_threw = false; \ - _TS_TRY { e; } \ - _TS_LAST_CATCH( { _ts_threw = true; } ) \ - if ( !_ts_threw ) { CxxTest::doFailAssertThrows( (f), (l), #e, "...", false, (m) ); } } - -# define _TS_ASSERT_THROWS_ANYTHING(f,l,e) ___TS_ASSERT_THROWS_ANYTHING(f,l,e,0) -# define TS_ASSERT_THROWS_ANYTHING(e) _TS_ASSERT_THROWS_ANYTHING(__FILE__, __LINE__, e) - -# define _TSM_ASSERT_THROWS_ANYTHING(f,l,m,e) ___TS_ASSERT_THROWS_ANYTHING(f,l,e,TS_AS_STRING(m)) -# define TSM_ASSERT_THROWS_ANYTHING(m,e) _TSM_ASSERT_THROWS_ANYTHING(__FILE__,__LINE__,m,e) - - // TS_ASSERT_THROWS_NOTHING -# define ___TS_ASSERT_THROWS_NOTHING(f,l,e,m) { \ - _TS_TRY { e; } \ - _TS_CATCH_ABORT( { throw; } ) \ - _TS_LAST_CATCH( { CxxTest::doFailAssertThrowsNot( (f), (l), #e, (m) ); } ) } - -# define _TS_ASSERT_THROWS_NOTHING(f,l,e) ___TS_ASSERT_THROWS_NOTHING(f,l,e,0) -# define TS_ASSERT_THROWS_NOTHING(e) _TS_ASSERT_THROWS_NOTHING(__FILE__,__LINE__,e) - -# define _TSM_ASSERT_THROWS_NOTHING(f,l,m,e) ___TS_ASSERT_THROWS_NOTHING(f,l,e,TS_AS_STRING(m)) -# define TSM_ASSERT_THROWS_NOTHING(m,e) _TSM_ASSERT_THROWS_NOTHING(__FILE__,__LINE__,m,e) - - - // - // This takes care of "signed <-> unsigned" warnings - // -# define CXXTEST_COMPARISONS(CXXTEST_X, CXXTEST_Y, CXXTEST_T) \ - inline bool equals( CXXTEST_X x, CXXTEST_Y y ) { return (((CXXTEST_T)x) == ((CXXTEST_T)y)); } \ - inline bool equals( CXXTEST_Y y, CXXTEST_X x ) { return (((CXXTEST_T)y) == ((CXXTEST_T)x)); } \ - inline bool differs( CXXTEST_X x, CXXTEST_Y y ) { return (((CXXTEST_T)x) != ((CXXTEST_T)y)); } \ - inline bool differs( CXXTEST_Y y, CXXTEST_X x ) { return (((CXXTEST_T)y) != ((CXXTEST_T)x)); } \ - inline bool lessThan( CXXTEST_X x, CXXTEST_Y y ) { return (((CXXTEST_T)x) < ((CXXTEST_T)y)); } \ - inline bool lessThan( CXXTEST_Y y, CXXTEST_X x ) { return (((CXXTEST_T)y) < ((CXXTEST_T)x)); } \ - inline bool lessThanEquals( CXXTEST_X x, CXXTEST_Y y ) { return (((CXXTEST_T)x) <= ((CXXTEST_T)y)); } \ - inline bool lessThanEquals( CXXTEST_Y y, CXXTEST_X x ) { return (((CXXTEST_T)y) <= ((CXXTEST_T)x)); } - -# define CXXTEST_INTEGRAL(CXXTEST_T) \ - CXXTEST_COMPARISONS( signed CXXTEST_T, unsigned CXXTEST_T, unsigned CXXTEST_T ) - - CXXTEST_INTEGRAL( char ) - CXXTEST_INTEGRAL( short ) - CXXTEST_INTEGRAL( int ) - CXXTEST_INTEGRAL( long ) -# ifdef _CXXTEST_LONGLONG - CXXTEST_INTEGRAL( _CXXTEST_LONGLONG ) -# endif // _CXXTEST_LONGLONG - -# define CXXTEST_SMALL_BIG(CXXTEST_SMALL, CXXTEST_BIG) \ - CXXTEST_COMPARISONS( signed CXXTEST_SMALL, unsigned CXXTEST_BIG, unsigned CXXTEST_BIG ) \ - CXXTEST_COMPARISONS( signed CXXTEST_BIG, unsigned CXXTEST_SMALL, unsigned CXXTEST_BIG ) - - CXXTEST_SMALL_BIG( char, short ) - CXXTEST_SMALL_BIG( char, int ) - CXXTEST_SMALL_BIG( short, int ) - CXXTEST_SMALL_BIG( char, long ) - CXXTEST_SMALL_BIG( short, long ) - CXXTEST_SMALL_BIG( int, long ) - -# ifdef _CXXTEST_LONGLONG - CXXTEST_SMALL_BIG( char, _CXXTEST_LONGLONG ) - CXXTEST_SMALL_BIG( short, _CXXTEST_LONGLONG ) - CXXTEST_SMALL_BIG( int, _CXXTEST_LONGLONG ) - CXXTEST_SMALL_BIG( long, _CXXTEST_LONGLONG ) -# endif // _CXXTEST_LONGLONG -} - -#endif // __cxxtest__TestSuite_h__ diff --git a/cxxtest/cxxtest/TestTracker.cpp b/cxxtest/cxxtest/TestTracker.cpp deleted file mode 100644 index f3ce78188..000000000 --- a/cxxtest/cxxtest/TestTracker.cpp +++ /dev/null @@ -1,248 +0,0 @@ -#ifndef __cxxtest__TestTracker_cpp__ -#define __cxxtest__TestTracker_cpp__ - -#include - -namespace CxxTest -{ - bool TestTracker::_created = false; - - TestTracker::TestTracker() - { - if ( !_created ) { - initialize(); - _created = true; - } - } - - TestTracker::~TestTracker() - { - } - - TestTracker & TestTracker::tracker() - { - static TestTracker theTracker; - return theTracker; - } - - void TestTracker::initialize() - { - _warnings = 0; - _failedTests = 0; - _testFailedAsserts = 0; - _suiteFailedTests = 0; - _failedSuites = 0; - setListener( 0 ); - _world = 0; - _suite = 0; - _test = 0; - } - - const TestDescription *TestTracker::fixTest( const TestDescription *d ) const - { - return d ? d : &dummyTest(); - } - - const SuiteDescription *TestTracker::fixSuite( const SuiteDescription *d ) const - { - return d ? d : &dummySuite(); - } - - const WorldDescription *TestTracker::fixWorld( const WorldDescription *d ) const - { - return d ? d : &dummyWorld(); - } - - const TestDescription &TestTracker::dummyTest() const - { - return dummySuite().testDescription(0); - } - - const SuiteDescription &TestTracker::dummySuite() const - { - return dummyWorld().suiteDescription(0); - } - - const WorldDescription &TestTracker::dummyWorld() const - { - return _dummyWorld; - } - - void TestTracker::setListener( TestListener *l ) - { - _l = l ? l : &_dummyListener; - } - - void TestTracker::enterWorld( const WorldDescription &wd ) - { - setWorld( &wd ); - _warnings = _failedTests = _testFailedAsserts = _suiteFailedTests = _failedSuites = 0; - _l->enterWorld( wd ); - } - - void TestTracker::enterSuite( const SuiteDescription &sd ) - { - setSuite( &sd ); - _testFailedAsserts = _suiteFailedTests = 0; - _l->enterSuite(sd); - } - - void TestTracker::enterTest( const TestDescription &td ) - { - setTest( &td ); - _testFailedAsserts = false; - _l->enterTest(td); - } - - void TestTracker::leaveTest( const TestDescription &td ) - { - _l->leaveTest( td ); - setTest( 0 ); - } - - void TestTracker::leaveSuite( const SuiteDescription &sd ) - { - _l->leaveSuite( sd ); - setSuite( 0 ); - } - - void TestTracker::leaveWorld( const WorldDescription &wd ) - { - _l->leaveWorld( wd ); - setWorld( 0 ); - } - - void TestTracker::trace( const char *file, unsigned line, const char *expression ) - { - _l->trace( file, line, expression ); - } - - void TestTracker::warning( const char *file, unsigned line, const char *expression ) - { - countWarning(); - _l->warning( file, line, expression ); - } - - void TestTracker::failedTest( const char *file, unsigned line, const char *expression ) - { - countFailure(); - _l->failedTest( file, line, expression ); - } - - void TestTracker::failedAssert( const char *file, unsigned line, const char *expression ) - { - countFailure(); - _l->failedAssert( file, line, expression ); - } - - void TestTracker::failedAssertEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - countFailure(); - _l->failedAssertEquals( file, line, xStr, yStr, x, y ); - } - - void TestTracker::failedAssertSameData( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *sizeStr, const void *x, - const void *y, unsigned size ) - { - countFailure(); - _l->failedAssertSameData( file, line, xStr, yStr, sizeStr, x, y, size ); - } - - void TestTracker::failedAssertDelta( const char *file, unsigned line, - const char *xStr, const char *yStr, const char *dStr, - const char *x, const char *y, const char *d ) - { - countFailure(); - _l->failedAssertDelta( file, line, xStr, yStr, dStr, x, y, d ); - } - - void TestTracker::failedAssertDiffers( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *value ) - { - countFailure(); - _l->failedAssertDiffers( file, line, xStr, yStr, value ); - } - - void TestTracker::failedAssertLessThan( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - countFailure(); - _l->failedAssertLessThan( file, line, xStr, yStr, x, y ); - } - - void TestTracker::failedAssertLessThanEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ) - { - countFailure(); - _l->failedAssertLessThanEquals( file, line, xStr, yStr, x, y ); - } - - void TestTracker::failedAssertPredicate( const char *file, unsigned line, - const char *predicate, const char *xStr, const char *x ) - { - countFailure(); - _l->failedAssertPredicate( file, line, predicate, xStr, x ); - } - - void TestTracker::failedAssertRelation( const char *file, unsigned line, - const char *relation, const char *xStr, const char *yStr, - const char *x, const char *y ) - { - countFailure(); - _l->failedAssertRelation( file, line, relation, xStr, yStr, x, y ); - } - - void TestTracker::failedAssertThrows( const char *file, unsigned line, - const char *expression, const char *type, - bool otherThrown ) - { - countFailure(); - _l->failedAssertThrows( file, line, expression, type, otherThrown ); - } - - void TestTracker::failedAssertThrowsNot( const char *file, unsigned line, const char *expression ) - { - countFailure(); - _l->failedAssertThrowsNot( file, line, expression ); - } - - void TestTracker::setWorld( const WorldDescription *w ) - { - _world = fixWorld( w ); - setSuite( 0 ); - } - - void TestTracker::setSuite( const SuiteDescription *s ) - { - _suite = fixSuite( s ); - setTest( 0 ); - } - - void TestTracker::setTest( const TestDescription *t ) - { - _test = fixTest( t ); - } - - void TestTracker::countWarning() - { - ++ _warnings; - } - - void TestTracker::countFailure() - { - if ( ++ _testFailedAsserts == 1 ) { - ++ _failedTests; - if ( ++ _suiteFailedTests == 1 ) - ++ _failedSuites; - } - } -}; - -#endif // __cxxtest__TestTracker_cpp__ diff --git a/cxxtest/cxxtest/TestTracker.h b/cxxtest/cxxtest/TestTracker.h deleted file mode 100644 index c85abff14..000000000 --- a/cxxtest/cxxtest/TestTracker.h +++ /dev/null @@ -1,114 +0,0 @@ -#ifndef __cxxtest__TestTracker_h__ -#define __cxxtest__TestTracker_h__ - -// -// The TestTracker tracks running tests -// The actual work is done in CountingListenerProxy, -// but this way avoids cyclic references TestListener<->CountingListenerProxy -// - -#include -#include - -namespace CxxTest -{ - class TestListener; - - class TestTracker : public TestListener - { - public: - virtual ~TestTracker(); - - static TestTracker &tracker(); - - const TestDescription *fixTest( const TestDescription *d ) const; - const SuiteDescription *fixSuite( const SuiteDescription *d ) const; - const WorldDescription *fixWorld( const WorldDescription *d ) const; - - const TestDescription &test() const { return *_test; } - const SuiteDescription &suite() const { return *_suite; } - const WorldDescription &world() const { return *_world; } - - bool testFailed() const { return (testFailedAsserts() > 0); } - bool suiteFailed() const { return (suiteFailedTests() > 0); } - bool worldFailed() const { return (failedSuites() > 0); } - - unsigned warnings() const { return _warnings; } - unsigned failedTests() const { return _failedTests; } - unsigned testFailedAsserts() const { return _testFailedAsserts; } - unsigned suiteFailedTests() const { return _suiteFailedTests; } - unsigned failedSuites() const { return _failedSuites; } - - void enterWorld( const WorldDescription &wd ); - void enterSuite( const SuiteDescription &sd ); - void enterTest( const TestDescription &td ); - void leaveTest( const TestDescription &td ); - void leaveSuite( const SuiteDescription &sd ); - void leaveWorld( const WorldDescription &wd ); - void trace( const char *file, unsigned line, const char *expression ); - void warning( const char *file, unsigned line, const char *expression ); - void failedTest( const char *file, unsigned line, const char *expression ); - void failedAssert( const char *file, unsigned line, const char *expression ); - void failedAssertEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ); - void failedAssertSameData( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *sizeStr, const void *x, - const void *y, unsigned size ); - void failedAssertDelta( const char *file, unsigned line, - const char *xStr, const char *yStr, const char *dStr, - const char *x, const char *y, const char *d ); - void failedAssertDiffers( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *value ); - void failedAssertLessThan( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ); - void failedAssertLessThanEquals( const char *file, unsigned line, - const char *xStr, const char *yStr, - const char *x, const char *y ); - void failedAssertPredicate( const char *file, unsigned line, - const char *predicate, const char *xStr, const char *x ); - void failedAssertRelation( const char *file, unsigned line, - const char *relation, const char *xStr, const char *yStr, - const char *x, const char *y ); - void failedAssertThrows( const char *file, unsigned line, - const char *expression, const char *type, - bool otherThrown ); - void failedAssertThrowsNot( const char *file, unsigned line, const char *expression ); - - private: - TestTracker( const TestTracker & ); - TestTracker &operator=( const TestTracker & ); - - static bool _created; - TestListener _dummyListener; - DummyWorldDescription _dummyWorld; - unsigned _warnings, _failedTests, _testFailedAsserts, _suiteFailedTests, _failedSuites; - TestListener *_l; - const WorldDescription *_world; - const SuiteDescription *_suite; - const TestDescription *_test; - - const TestDescription &dummyTest() const; - const SuiteDescription &dummySuite() const; - const WorldDescription &dummyWorld() const; - - void setWorld( const WorldDescription *w ); - void setSuite( const SuiteDescription *s ); - void setTest( const TestDescription *t ); - void countWarning(); - void countFailure(); - - friend class TestRunner; - - TestTracker(); - void initialize(); - void setListener( TestListener *l ); - }; - - inline TestTracker &tracker() { return TestTracker::tracker(); } -}; - -#endif // __cxxtest__TestTracker_h__ diff --git a/cxxtest/cxxtest/ValueTraits.cpp b/cxxtest/cxxtest/ValueTraits.cpp deleted file mode 100644 index 7d29ada9d..000000000 --- a/cxxtest/cxxtest/ValueTraits.cpp +++ /dev/null @@ -1,140 +0,0 @@ -#ifndef __cxxtest__ValueTraits_cpp__ -#define __cxxtest__ValueTraits_cpp__ - -#include - -namespace CxxTest -{ - // - // Non-inline functions from ValueTraits.h - // - - char digitToChar( unsigned digit ) - { - if ( digit < 10 ) - return (char)('0' + digit); - if ( digit <= 10 + 'Z' - 'A' ) - return (char)('A' + digit - 10); - return '?'; - } - - const char *byteToHex( unsigned char byte ) - { - static char asHex[3]; - asHex[0] = digitToChar( byte >> 4 ); - asHex[1] = digitToChar( byte & 0x0F ); - asHex[2] = '\0'; - return asHex; - } - - char *copyString( char *dst, const char *src ) - { - while ( (*dst = *src) != '\0' ) { - ++ dst; - ++ src; - } - return dst; - } - - bool stringsEqual( const char *s1, const char *s2 ) - { - char c; - while ( (c = *s1++) == *s2++ ) - if ( c == '\0' ) - return true; - return false; - } - - char *charToString( unsigned long c, char *s ) - { - switch( c ) { - case '\\': return copyString( s, "\\\\" ); - case '\"': return copyString( s, "\\\"" ); - case '\'': return copyString( s, "\\\'" ); - case '\0': return copyString( s, "\\0" ); - case '\a': return copyString( s, "\\a" ); - case '\b': return copyString( s, "\\b" ); - case '\n': return copyString( s, "\\n" ); - case '\r': return copyString( s, "\\r" ); - case '\t': return copyString( s, "\\t" ); - } - if ( c >= 32 && c <= 127 ) { - s[0] = (char)c; - s[1] = '\0'; - return s + 1; - } - else { - s[0] = '\\'; - s[1] = 'x'; - if ( c < 0x10 ) { - s[2] = '0'; - ++ s; - } - return numberToString( c, s + 2, 16UL ); - } - } - - char *charToString( char c, char *s ) - { - return charToString( (unsigned long)(unsigned char)c, s ); - } - - char *bytesToString( const unsigned char *bytes, unsigned numBytes, unsigned maxBytes, char *s ) - { - bool truncate = (numBytes > maxBytes); - if ( truncate ) - numBytes = maxBytes; - - s = copyString( s, "{ " ); - for ( unsigned i = 0; i < numBytes; ++ i, ++ bytes ) - s = copyString( copyString( s, byteToHex( *bytes ) ), " " ); - if ( truncate ) - s = copyString( s, "..." ); - return copyString( s, " }" ); - } - -#ifndef CXXTEST_USER_VALUE_TRAITS - unsigned ValueTraits::requiredDigitsOnLeft( double t ) - { - unsigned digits = 1; - for ( t = (t < 0.0) ? -t : t; t > 1.0; t /= BASE ) - ++ digits; - return digits; - } - - char *ValueTraits::doNegative( double &t ) - { - if ( t >= 0 ) - return _asString; - _asString[0] = '-'; - t = -t; - return _asString + 1; - } - - void ValueTraits::hugeNumber( double t ) - { - char *s = doNegative( t ); - s = doubleToString( t, s, 0, 1 ); - s = copyString( s, "." ); - s = doubleToString( t, s, 1, DIGITS_ON_RIGHT ); - s = copyString( s, "E" ); - s = numberToString( requiredDigitsOnLeft( t ) - 1, s ); - } - - void ValueTraits::normalNumber( double t ) - { - char *s = doNegative( t ); - s = doubleToString( t, s ); - s = copyString( s, "." ); - for ( unsigned i = 0; i < DIGITS_ON_RIGHT; ++ i ) - s = numberToString( (unsigned)(t *= BASE) % BASE, s ); - } - - char *ValueTraits::doubleToString( double t, char *s, unsigned skip, unsigned max ) - { - return numberToString( t, s, BASE, skip, max ); - } -#endif // !CXXTEST_USER_VALUE_TRAITS -}; - -#endif // __cxxtest__ValueTraits_cpp__ diff --git a/cxxtest/cxxtest/ValueTraits.h b/cxxtest/cxxtest/ValueTraits.h deleted file mode 100644 index 71145ada7..000000000 --- a/cxxtest/cxxtest/ValueTraits.h +++ /dev/null @@ -1,377 +0,0 @@ -#ifndef __cxxtest__ValueTraits_h__ -#define __cxxtest__ValueTraits_h__ - -// -// ValueTraits are used by CxxTest to convert arbitrary -// values used in TS_ASSERT_EQUALS() to a string representation. -// -// This header file contains value traits for builtin integral types. -// To declare value traits for new types you should instantiate the class -// ValueTraits. -// - -#include - -#ifdef _CXXTEST_OLD_TEMPLATE_SYNTAX -# define CXXTEST_TEMPLATE_INSTANTIATION -#else // !_CXXTEST_OLD_TEMPLATE_SYNTAX -# define CXXTEST_TEMPLATE_INSTANTIATION template<> -#endif // _CXXTEST_OLD_TEMPLATE_SYNTAX - -namespace CxxTest -{ - // - // This is how we use the value traits - // -# define TS_AS_STRING(x) CxxTest::traits(x).asString() - - // - // Char representation of a digit - // - char digitToChar( unsigned digit ); - - // - // Convert byte value to hex digits - // Returns pointer to internal buffer - // - const char *byteToHex( unsigned char byte ); - - // - // Convert byte values to string - // Returns one past the copied data - // - char *bytesToString( const unsigned char *bytes, unsigned numBytes, unsigned maxBytes, char *s ); - - // - // Copy a string. - // Returns one past the end of the destination string - // Remember -- we can't use the standard library! - // - char *copyString( char *dst, const char *src ); - - // - // Compare two strings. - // Remember -- we can't use the standard library! - // - bool stringsEqual( const char *s1, const char *s2 ); - - // - // Represent a character value as a string - // Returns one past the end of the string - // This will be the actual char if printable or '\xXXXX' otherwise - // - char *charToString( unsigned long c, char *s ); - - // - // Prevent problems with negative (signed char)s - // - char *charToString( char c, char *s ); - - // - // The default ValueTraits class dumps up to 8 bytes as hex values - // - template - class ValueTraits - { - enum { MAX_BYTES = 8 }; - char _asString[sizeof("{ ") + sizeof("XX ") * MAX_BYTES + sizeof("... }")]; - - public: - ValueTraits( const T &t ) { bytesToString( (const unsigned char *)&t, sizeof(T), MAX_BYTES, _asString ); } - const char *asString( void ) const { return _asString; } - }; - - // - // traits( T t ) - // Creates an object of type ValueTraits - // - template - inline ValueTraits traits( T t ) - { - return ValueTraits( t ); - } - - // - // You can duplicate the implementation of an existing ValueTraits - // -# define CXXTEST_COPY_TRAITS(CXXTEST_NEW_CLASS, CXXTEST_OLD_CLASS) \ - CXXTEST_TEMPLATE_INSTANTIATION \ - class ValueTraits< CXXTEST_NEW_CLASS > \ - { \ - ValueTraits< CXXTEST_OLD_CLASS > _old; \ - public: \ - ValueTraits( CXXTEST_NEW_CLASS n ) : _old( (CXXTEST_OLD_CLASS)n ) {} \ - const char *asString( void ) const { return _old.asString(); } \ - } - - // - // Certain compilers need separate declarations for T and const T - // -# ifdef _CXXTEST_NO_COPY_CONST -# define CXXTEST_COPY_CONST_TRAITS(CXXTEST_CLASS) -# else // !_CXXTEST_NO_COPY_CONST -# define CXXTEST_COPY_CONST_TRAITS(CXXTEST_CLASS) CXXTEST_COPY_TRAITS(CXXTEST_CLASS, const CXXTEST_CLASS) -# endif // _CXXTEST_NO_COPY_CONST - - // - // Avoid compiler warnings about unsigned types always >= 0 - // - template inline bool negative( N n ) { return n < 0; } - template inline N abs( N n ) { return negative(n) ? -n : n; } - -# define CXXTEST_NON_NEGATIVE(Type) \ - CXXTEST_TEMPLATE_INSTANTIATION \ - inline bool negative( Type ) { return false; } \ - CXXTEST_TEMPLATE_INSTANTIATION \ - inline Type abs( Type value ) { return value; } - - CXXTEST_NON_NEGATIVE( bool ) - CXXTEST_NON_NEGATIVE( unsigned char ) - CXXTEST_NON_NEGATIVE( unsigned short int ) - CXXTEST_NON_NEGATIVE( unsigned int ) - CXXTEST_NON_NEGATIVE( unsigned long int ) -# ifdef _CXXTEST_LONGLONG - CXXTEST_NON_NEGATIVE( unsigned _CXXTEST_LONGLONG ) -# endif // _CXXTEST_LONGLONG - - // - // Represent (integral) number as a string - // Returns one past the end of the string - // Remember -- we can't use the standard library! - // - template - char *numberToString( N n, char *s, - N base = 10, - unsigned skipDigits = 0, - unsigned maxDigits = (unsigned)-1 ) - { - if ( negative(n) ) { - *s++ = '-'; - n = abs(n); - } - - N digit = 1; - while ( digit <= (n / base) ) - digit *= base; - N digitValue; - for ( ; digit >= 1 && skipDigits; n -= digit * digitValue, digit /= base, -- skipDigits ) - digitValue = (unsigned)(n / digit); - for ( ; digit >= 1 && maxDigits; n -= digit * digitValue, digit /= base, -- maxDigits ) - *s++ = digitToChar( (unsigned)(digitValue = (unsigned)(n / digit)) ); - - *s = '\0'; - return s; - } - - // - // All the specific ValueTraits follow. - // You can #define CXXTEST_USER_VALUE_TRAITS if you don't want them - // - -#ifndef CXXTEST_USER_VALUE_TRAITS - // - // ValueTraits: const char * const & - // This is used for printing strings, as in TS_FAIL( "Message" ) - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - ValueTraits &operator=( const ValueTraits & ); - const char *_asString; - - public: - ValueTraits( const char * const &value ) : _asString( value ) {} - ValueTraits( const ValueTraits &other ) : _asString( other._asString ) {} - const char *asString( void ) const { return _asString; } - }; - - CXXTEST_COPY_TRAITS( const char *, const char * const & ); - CXXTEST_COPY_TRAITS( char *, const char * const & ); - - // - // ValueTraits: bool - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - bool _value; - - public: - ValueTraits( const bool value ) : _value( value ) {} - const char *asString( void ) const { return _value ? "true" : "false"; } - }; - - CXXTEST_COPY_CONST_TRAITS( bool ); - -# ifdef _CXXTEST_LONGLONG - // - // ValueTraits: signed long long - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - typedef _CXXTEST_LONGLONG T; - char _asString[2 + 3 * sizeof(T)]; - public: - ValueTraits( T t ) { numberToString( t, _asString ); } - const char *asString( void ) const { return _asString; } - }; - - CXXTEST_COPY_CONST_TRAITS( signed _CXXTEST_LONGLONG ); - - // - // ValueTraits: unsigned long long - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - typedef unsigned _CXXTEST_LONGLONG T; - char _asString[1 + 3 * sizeof(T)]; - public: - ValueTraits( T t ) { numberToString( t, _asString ); } - const char *asString( void ) const { return _asString; } - }; - - CXXTEST_COPY_CONST_TRAITS( unsigned _CXXTEST_LONGLONG ); -# endif // _CXXTEST_LONGLONG - - // - // ValueTraits: signed long - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - typedef signed long int T; - char _asString[2 + 3 * sizeof(T)]; - public: - ValueTraits( T t ) { numberToString( t, _asString ); } - const char *asString( void ) const { return _asString; } - }; - - CXXTEST_COPY_CONST_TRAITS( signed long int ); - - // - // ValueTraits: unsigned long - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - typedef unsigned long int T; - char _asString[1 + 3 * sizeof(T)]; - public: - ValueTraits( T t ) { numberToString( t, _asString ); } - const char *asString( void ) const { return _asString; } - }; - - CXXTEST_COPY_CONST_TRAITS( unsigned long int ); - - // - // All decimals are the same as the long version - // - - CXXTEST_COPY_TRAITS( const signed int, const signed long int ); - CXXTEST_COPY_TRAITS( const unsigned int, const unsigned long int ); - CXXTEST_COPY_TRAITS( const signed short int, const signed long int ); - CXXTEST_COPY_TRAITS( const unsigned short int, const unsigned long int ); - CXXTEST_COPY_TRAITS( const unsigned char, const unsigned long int ); - - CXXTEST_COPY_CONST_TRAITS( signed int ); - CXXTEST_COPY_CONST_TRAITS( unsigned int ); - CXXTEST_COPY_CONST_TRAITS( signed short int ); - CXXTEST_COPY_CONST_TRAITS( unsigned short int ); - CXXTEST_COPY_CONST_TRAITS( unsigned char ); - - // - // ValueTraits: char - // Returns 'x' for printable chars, '\x??' for others - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - char _asString[sizeof("'\\xXX'")]; - public: - ValueTraits( char c ) { copyString( charToString( c, copyString( _asString, "'" ) ), "'" ); } - const char *asString( void ) const { return _asString; } - }; - - CXXTEST_COPY_CONST_TRAITS( char ); - - // - // ValueTraits: signed char - // Same as char, some compilers need it - // - CXXTEST_COPY_TRAITS( const signed char, const char ); - CXXTEST_COPY_CONST_TRAITS( signed char ); - - // - // ValueTraits: double - // - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - public: - ValueTraits( double t ) - { - ( requiredDigitsOnLeft( t ) > MAX_DIGITS_ON_LEFT ) ? - hugeNumber( t ) : - normalNumber( t ); - } - - const char *asString( void ) const { return _asString; } - - private: - enum { MAX_DIGITS_ON_LEFT = 24, DIGITS_ON_RIGHT = 4, BASE = 10 }; - char _asString[1 + MAX_DIGITS_ON_LEFT + 1 + DIGITS_ON_RIGHT + 1]; - - static unsigned requiredDigitsOnLeft( double t ); - char *doNegative( double &t ); - void hugeNumber( double t ); - void normalNumber( double t ); - char *doubleToString( double t, char *s, unsigned skip = 0, unsigned max = (unsigned)-1 ); - }; - - CXXTEST_COPY_CONST_TRAITS( double ); - - // - // ValueTraits: float - // - CXXTEST_COPY_TRAITS( const float, const double ); - CXXTEST_COPY_CONST_TRAITS( float ); -#endif // !CXXTEST_USER_VALUE_TRAITS -}; - -#ifdef _CXXTEST_HAVE_STD -# include -#endif // _CXXTEST_HAVE_STD - -// -// CXXTEST_ENUM_TRAITS -// -#define CXXTEST_ENUM_TRAITS( TYPE, VALUES ) \ - namespace CxxTest \ - { \ - CXXTEST_TEMPLATE_INSTANTIATION \ - class ValueTraits \ - { \ - TYPE _value; \ - char _fallback[sizeof("(" #TYPE ")") + 3 * sizeof(TYPE)]; \ - public: \ - ValueTraits( TYPE value ) { \ - _value = value; \ - numberToString( _value, copyString( _fallback, "(" #TYPE ")" ) ); \ - } \ - const char *asString( void ) const \ - { \ - switch ( _value ) \ - { \ - VALUES \ - default: return _fallback; \ - } \ - } \ - }; \ - } - -#define CXXTEST_ENUM_MEMBER( MEMBER ) \ - case MEMBER: return #MEMBER; - -#endif // __cxxtest__ValueTraits_h__ diff --git a/cxxtest/cxxtest/Win32Gui.h b/cxxtest/cxxtest/Win32Gui.h deleted file mode 100644 index 6b3e7583a..000000000 --- a/cxxtest/cxxtest/Win32Gui.h +++ /dev/null @@ -1,531 +0,0 @@ -#ifndef __cxxtest__Win32Gui_h__ -#define __cxxtest__Win32Gui_h__ - -// -// The Win32Gui displays a simple progress bar using the Win32 API. -// -// It accepts the following command line options: -// -minimized Start minimized, pop up on error -// -keep Don't close the window at the end -// -title TITLE Set the window caption -// -// If both -minimized and -keep are specified, GUI will only keep the -// window if it's in focus. -// -// N.B. If you're wondering why this class doesn't use any standard -// library or STL ( would have been nice) it's because it only -// uses "straight" Win32 API. -// - -#include - -#include -#include - -namespace CxxTest -{ - class Win32Gui : public GuiListener - { - public: - void enterGui( int &argc, char **argv ) - { - parseCommandLine( argc, argv ); - } - - void enterWorld( const WorldDescription &wd ) - { - getTotalTests( wd ); - _testsDone = 0; - startGuiThread(); - } - - void guiEnterSuite( const char *suiteName ) - { - showSuiteName( suiteName ); - reset( _suiteStart ); - } - - void guiEnterTest( const char *suiteName, const char *testName ) - { - ++ _testsDone; - setTestCaption( suiteName, testName ); - showTestName( testName ); - showTestsDone(); - progressBarMessage( PBM_STEPIT ); - reset( _testStart ); - } - - void yellowBar() - { - setColor( 255, 255, 0 ); - setIcon( IDI_WARNING ); - getTotalTests(); - } - - void redBar() - { - if ( _startMinimized ) - showMainWindow( SW_SHOWNORMAL ); - setColor( 255, 0, 0 ); - setIcon( IDI_ERROR ); - getTotalTests(); - } - - void leaveGui() - { - if ( keep() ) - { - showSummary(); - WaitForSingleObject( _gui, INFINITE ); - } - DestroyWindow( _mainWindow ); - } - - private: - const char *_title; - bool _startMinimized, _keep; - HANDLE _gui; - WNDCLASSEX _windowClass; - HWND _mainWindow, _progressBar, _statusBar; - HANDLE _canStartTests; - unsigned _numTotalTests, _testsDone; - char _strTotalTests[WorldDescription::MAX_STRLEN_TOTAL_TESTS]; - enum { - STATUS_SUITE_NAME, STATUS_SUITE_TIME, - STATUS_TEST_NAME, STATUS_TEST_TIME, - STATUS_TESTS_DONE, STATUS_WORLD_TIME, - STATUS_TOTAL_PARTS - }; - int _statusWidths[STATUS_TOTAL_PARTS]; - unsigned _statusOffsets[STATUS_TOTAL_PARTS]; - unsigned _statusTotal; - char _statusTestsDone[sizeof("1000000000 of (100%)") + WorldDescription::MAX_STRLEN_TOTAL_TESTS]; - DWORD _worldStart, _suiteStart, _testStart; - char _timeString[sizeof("00:00:00")]; - - void parseCommandLine( int argc, char **argv ) - { - _startMinimized = _keep = false; - _title = argv[0]; - - for ( int i = 1; i < argc; ++ i ) - { - if ( !lstrcmpA( argv[i], "-minimized" ) ) - _startMinimized = true; - else if ( !lstrcmpA( argv[i], "-keep" ) ) - _keep = true; - else if ( !lstrcmpA( argv[i], "-title" ) && (i + 1 < argc) ) - _title = argv[++i]; - } - } - - void getTotalTests() - { - getTotalTests( tracker().world() ); - } - - void getTotalTests( const WorldDescription &wd ) - { - _numTotalTests = wd.numTotalTests(); - wd.strTotalTests( _strTotalTests ); - } - - void startGuiThread() - { - _canStartTests = CreateEvent( NULL, TRUE, FALSE, NULL ); - DWORD threadId; - _gui = CreateThread( NULL, 0, &(Win32Gui::guiThread), (LPVOID)this, 0, &threadId ); - WaitForSingleObject( _canStartTests, INFINITE ); - } - - static DWORD WINAPI guiThread( LPVOID parameter ) - { - ((Win32Gui *)parameter)->gui(); - return 0; - } - - void gui() - { - registerWindowClass(); - createMainWindow(); - initCommonControls(); - createProgressBar(); - createStatusBar(); - centerMainWindow(); - showMainWindow(); - startTimer(); - startTests(); - - messageLoop(); - } - - void registerWindowClass() - { - _windowClass.cbSize = sizeof(_windowClass); - _windowClass.style = CS_HREDRAW | CS_VREDRAW; - _windowClass.lpfnWndProc = &(Win32Gui::windowProcedure); - _windowClass.cbClsExtra = 0; - _windowClass.cbWndExtra = sizeof(LONG); - _windowClass.hInstance = (HINSTANCE)NULL; - _windowClass.hIcon = (HICON)NULL; - _windowClass.hCursor = (HCURSOR)NULL; - _windowClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - _windowClass.lpszMenuName = NULL; - _windowClass.lpszClassName = TEXT("CxxTest Window Class"); - _windowClass.hIconSm = (HICON)NULL; - - RegisterClassEx( &_windowClass ); - } - - void createMainWindow() - { - _mainWindow = createWindow( _windowClass.lpszClassName, WS_OVERLAPPEDWINDOW ); - } - - void initCommonControls() - { - HMODULE dll = LoadLibraryA( "comctl32.dll" ); - if ( !dll ) - return; - - typedef void (WINAPI *FUNC)( void ); - FUNC func = (FUNC)GetProcAddress( dll, "InitCommonControls" ); - if ( !func ) - return; - - func(); - } - - void createProgressBar() - { - _progressBar = createWindow( PROGRESS_CLASS, WS_CHILD | WS_VISIBLE | PBS_SMOOTH, _mainWindow ); - -#ifdef PBM_SETRANGE32 - progressBarMessage( PBM_SETRANGE32, 0, _numTotalTests ); -#else // No PBM_SETRANGE32, use PBM_SETRANGE - progressBarMessage( PBM_SETRANGE, 0, MAKELPARAM( 0, (WORD)_numTotalTests ) ); -#endif // PBM_SETRANGE32 - progressBarMessage( PBM_SETPOS, 0 ); - progressBarMessage( PBM_SETSTEP, 1 ); - greenBar(); - UpdateWindow( _progressBar ); - } - - void createStatusBar() - { - _statusBar = createWindow( STATUSCLASSNAME, WS_CHILD | WS_VISIBLE, _mainWindow ); - setRatios( 4, 1, 3, 1, 3, 1 ); - } - - void setRatios( unsigned suiteNameRatio, unsigned suiteTimeRatio, - unsigned testNameRatio, unsigned testTimeRatio, - unsigned testsDoneRatio, unsigned worldTimeRatio ) - { - _statusTotal = 0; - _statusOffsets[STATUS_SUITE_NAME] = (_statusTotal += suiteNameRatio); - _statusOffsets[STATUS_SUITE_TIME] = (_statusTotal += suiteTimeRatio); - _statusOffsets[STATUS_TEST_NAME] = (_statusTotal += testNameRatio); - _statusOffsets[STATUS_TEST_TIME] = (_statusTotal += testTimeRatio); - _statusOffsets[STATUS_TESTS_DONE] = (_statusTotal += testsDoneRatio); - _statusOffsets[STATUS_WORLD_TIME] = (_statusTotal += worldTimeRatio); - } - - HWND createWindow( LPCTSTR className, DWORD style, HWND parent = (HWND)NULL ) - { - return CreateWindow( className, NULL, style, 0, 0, 0, 0, parent, - (HMENU)NULL, (HINSTANCE)NULL, (LPVOID)this ); - } - - void progressBarMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ) - { - SendMessage( _progressBar, message, wParam, lParam ); - } - - void centerMainWindow() - { - RECT screen; - getScreenArea( screen ); - - LONG screenWidth = screen.right - screen.left; - LONG screenHeight = screen.bottom - screen.top; - - LONG xCenter = (screen.right + screen.left) / 2; - LONG yCenter = (screen.bottom + screen.top) / 2; - - LONG windowWidth = (screenWidth * 4) / 5; - LONG windowHeight = screenHeight / 10; - LONG minimumHeight = 2 * (GetSystemMetrics( SM_CYCAPTION ) + GetSystemMetrics( SM_CYFRAME )); - if ( windowHeight < minimumHeight ) - windowHeight = minimumHeight; - - SetWindowPos( _mainWindow, HWND_TOP, - xCenter - (windowWidth / 2), yCenter - (windowHeight / 2), - windowWidth, windowHeight, 0 ); - } - - void getScreenArea( RECT &area ) - { - if ( !getScreenAreaWithoutTaskbar( area ) ) - getWholeScreenArea( area ); - } - - bool getScreenAreaWithoutTaskbar( RECT &area ) - { - return (SystemParametersInfo( SPI_GETWORKAREA, sizeof(RECT), &area, 0 ) != 0); - } - - void getWholeScreenArea( RECT &area ) - { - area.left = area.top = 0; - area.right = GetSystemMetrics( SM_CXSCREEN ); - area.bottom = GetSystemMetrics( SM_CYSCREEN ); - } - - void showMainWindow() - { - showMainWindow( _startMinimized ? SW_MINIMIZE : SW_SHOWNORMAL ); - UpdateWindow( _mainWindow ); - } - - void showMainWindow( int mode ) - { - ShowWindow( _mainWindow, mode ); - } - - enum { TIMER_ID = 1, TIMER_DELAY = 1000 }; - - void startTimer() - { - reset( _worldStart ); - reset( _suiteStart ); - reset( _testStart ); - SetTimer( _mainWindow, TIMER_ID, TIMER_DELAY, 0 ); - } - - void reset( DWORD &tick ) - { - tick = GetTickCount(); - } - - void startTests() - { - SetEvent( _canStartTests ); - } - - void messageLoop() - { - MSG message; - while ( BOOL haveMessage = GetMessage( &message, NULL, 0, 0 ) ) - if ( haveMessage != -1 ) - DispatchMessage( &message ); - } - - static LRESULT CALLBACK windowProcedure( HWND window, UINT message, WPARAM wParam, LPARAM lParam ) - { - if ( message == WM_CREATE ) - setUp( window, (LPCREATESTRUCT)lParam ); - - Win32Gui *that = (Win32Gui *)GetWindowLong( window, GWL_USERDATA ); - return that->handle( window, message, wParam, lParam ); - } - - static void setUp( HWND window, LPCREATESTRUCT create ) - { - SetWindowLong( window, GWL_USERDATA, (LONG)create->lpCreateParams ); - } - - LRESULT handle( HWND window, UINT message, WPARAM wParam, LPARAM lParam ) - { - switch ( message ) - { - case WM_SIZE: resizeControls(); break; - - case WM_TIMER: updateTime(); break; - - case WM_CLOSE: - case WM_DESTROY: - case WM_QUIT: - ExitProcess( 0 ); - - default: return DefWindowProc( window, message, wParam, lParam ); - } - return 0; - } - - void resizeControls() - { - RECT r; - GetClientRect( _mainWindow, &r ); - LONG width = r.right - r.left; - LONG height = r.bottom - r.top; - - GetClientRect( _statusBar, &r ); - LONG statusHeight = r.bottom - r.top; - LONG resizeGripWidth = statusHeight; - LONG progressHeight = height - statusHeight; - - SetWindowPos( _progressBar, HWND_TOP, 0, 0, width, progressHeight, 0 ); - SetWindowPos( _statusBar, HWND_TOP, 0, progressHeight, width, statusHeight, 0 ); - setStatusParts( width - resizeGripWidth ); - } - - void setStatusParts( LONG width ) - { - for ( unsigned i = 0; i < STATUS_TOTAL_PARTS; ++ i ) - _statusWidths[i] = (width * _statusOffsets[i]) / _statusTotal; - - statusBarMessage( SB_SETPARTS, STATUS_TOTAL_PARTS, _statusWidths ); - } - - void statusBarMessage( UINT message, WPARAM wParam = 0, const void *lParam = 0 ) - { - SendMessage( _statusBar, message, wParam, (LPARAM)lParam ); - } - - void greenBar() - { - setColor( 0, 255, 0 ); - setIcon( IDI_INFORMATION ); - } - -#ifdef PBM_SETBARCOLOR - void setColor( BYTE red, BYTE green, BYTE blue ) - { - progressBarMessage( PBM_SETBARCOLOR, 0, RGB( red, green, blue ) ); - } -#else // !PBM_SETBARCOLOR - void setColor( BYTE, BYTE, BYTE ) - { - } -#endif // PBM_SETBARCOLOR - - void setIcon( LPCTSTR icon ) - { - SendMessage( _mainWindow, WM_SETICON, ICON_BIG, (LPARAM)loadStandardIcon( icon ) ); - } - - HICON loadStandardIcon( LPCTSTR icon ) - { - return LoadIcon( (HINSTANCE)NULL, icon ); - } - - void setTestCaption( const char *suiteName, const char *testName ) - { - setCaption( suiteName, "::", testName, "()" ); - } - - void setCaption( const char *a = "", const char *b = "", const char *c = "", const char *d = "" ) - { - unsigned length = lstrlenA( _title ) + sizeof( " - " ) + - lstrlenA( a ) + lstrlenA( b ) + lstrlenA( c ) + lstrlenA( d ); - char *name = allocate( length ); - lstrcpyA( name, _title ); - lstrcatA( name, " - " ); - lstrcatA( name, a ); - lstrcatA( name, b ); - lstrcatA( name, c ); - lstrcatA( name, d ); - SetWindowTextA( _mainWindow, name ); - deallocate( name ); - } - - void showSuiteName( const char *suiteName ) - { - setStatusPart( STATUS_SUITE_NAME, suiteName ); - } - - void showTestName( const char *testName ) - { - setStatusPart( STATUS_TEST_NAME, testName ); - } - - void showTestsDone() - { - wsprintfA( _statusTestsDone, "%u of %s (%u%%)", - _testsDone, _strTotalTests, - (_testsDone * 100) / _numTotalTests ); - setStatusPart( STATUS_TESTS_DONE, _statusTestsDone ); - } - - void updateTime() - { - setStatusTime( STATUS_WORLD_TIME, _worldStart ); - setStatusTime( STATUS_SUITE_TIME, _suiteStart ); - setStatusTime( STATUS_TEST_TIME, _testStart ); - } - - void setStatusTime( unsigned part, DWORD start ) - { - unsigned total = (GetTickCount() - start) / 1000; - unsigned hours = total / 3600; - unsigned minutes = (total / 60) % 60; - unsigned seconds = total % 60; - - if ( hours ) - wsprintfA( _timeString, "%u:%02u:%02u", hours, minutes, seconds ); - else - wsprintfA( _timeString, "%02u:%02u", minutes, seconds ); - - setStatusPart( part, _timeString ); - } - - bool keep() - { - if ( !_keep ) - return false; - if ( !_startMinimized ) - return true; - return (_mainWindow == GetForegroundWindow()); - } - - void showSummary() - { - stopTimer(); - setSummaryStatusBar(); - setSummaryCaption(); - } - - void setStatusPart( unsigned part, const char *text ) - { - statusBarMessage( SB_SETTEXTA, part, text ); - } - - void stopTimer() - { - KillTimer( _mainWindow, TIMER_ID ); - setStatusTime( STATUS_WORLD_TIME, _worldStart ); - } - - void setSummaryStatusBar() - { - setRatios( 0, 0, 0, 0, 1, 1 ); - resizeControls(); - - const char *tests = (_numTotalTests == 1) ? "test" : "tests"; - if ( tracker().failedTests() ) - wsprintfA( _statusTestsDone, "Failed %u of %s %s", - tracker().failedTests(), _strTotalTests, tests ); - else - wsprintfA( _statusTestsDone, "%s %s passed", _strTotalTests, tests ); - - setStatusPart( STATUS_TESTS_DONE, _statusTestsDone ); - } - - void setSummaryCaption() - { - setCaption( _statusTestsDone ); - } - - char *allocate( unsigned length ) - { - return (char *)HeapAlloc( GetProcessHeap(), 0, length ); - } - - void deallocate( char *data ) - { - HeapFree( GetProcessHeap(), 0, data ); - } - }; -}; - -#endif // __cxxtest__Win32Gui_h__ diff --git a/cxxtest/cxxtest/X11Gui.h b/cxxtest/cxxtest/X11Gui.h deleted file mode 100644 index f14431d94..000000000 --- a/cxxtest/cxxtest/X11Gui.h +++ /dev/null @@ -1,327 +0,0 @@ -#ifndef __cxxtest__X11Gui_h__ -#define __cxxtest__X11Gui_h__ - -// -// X11Gui displays a simple progress bar using X11 -// -// It accepts the following command-line arguments: -// -title - Sets the application title -// -fn or -font <font> - Sets the font -// -bg or -background <color> - Sets the background color (default=Grey) -// -fg or -foreground <color> - Sets the text color (default=Black) -// -green/-yellow/-red <color> - Sets the colors of the bar -// - -#include <cxxtest/Gui.h> - -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -namespace CxxTest -{ - class X11Gui : public GuiListener - { - public: - void enterGui( int &argc, char **argv ) - { - parseCommandLine( argc, argv ); - } - - void enterWorld( const WorldDescription &wd ) - { - openDisplay(); - if ( _display ) { - createColors(); - createWindow(); - createGc(); - createFont(); - centerWindow(); - initializeEvents(); - initializeBar( wd ); - processEvents(); - } - } - - void guiEnterTest( const char *suiteName, const char *testName ) - { - if ( _display ) { - ++ _testsDone; - setWindowName( suiteName, testName ); - redraw(); - } - } - - void yellowBar() - { - if ( _display ) { - _barColor = getColor( _yellowName ); - getTotalTests(); - processEvents(); - } - } - - void redBar() - { - if ( _display ) { - _barColor = getColor( _redName ); - getTotalTests(); - processEvents(); - } - } - - void leaveGui() - { - if ( _display ) { - freeFontInfo(); - destroyGc(); - destroyWindow(); - closeDisplay(); - } - } - - private: - const char *_programName; - Display *_display; - Window _window; - unsigned _numTotalTests, _testsDone; - char _strTotalTests[WorldDescription::MAX_STRLEN_TOTAL_TESTS]; - const char *_foregroundName, *_backgroundName; - const char *_greenName, *_yellowName, *_redName; - unsigned long _foreground, _background, _barColor; - int _width, _height; - GC _gc; - const char *_fontName; - XID _fontId; - XFontStruct *_fontInfo; - int _textHeight, _textDescent; - long _eventMask; - Colormap _colormap; - - void parseCommandLine( int &argc, char **argv ) - { - _programName = argv[0]; - - _fontName = 0; - _foregroundName = "Black"; - _backgroundName = "Grey"; - _greenName = "Green"; - _yellowName = "Yellow"; - _redName = "Red"; - - for ( int i = 1; i + 1 < argc; ++ i ) { - if ( !strcmp( argv[i], "-title" ) ) - _programName = argv[++ i]; - else if ( !strcmp( argv[i], "-fn" ) || !strcmp( argv[i], "-font" ) ) - _fontName = argv[++ i]; - else if ( !strcmp( argv[i], "-fg" ) || !strcmp( argv[i], "-foreground" ) ) - _foregroundName = argv[++ i]; - else if ( !strcmp( argv[i], "-bg" ) || !strcmp( argv[i], "-background" ) ) - _backgroundName = argv[++ i]; - else if ( !strcmp( argv[i], "-green" ) ) - _greenName = argv[++ i]; - else if ( !strcmp( argv[i], "-yellow" ) ) - _yellowName = argv[++ i]; - else if ( !strcmp( argv[i], "-red" ) ) - _redName = argv[++ i]; - } - } - - void openDisplay() - { - _display = XOpenDisplay( NULL ); - } - - void createColors() - { - _colormap = DefaultColormap( _display, 0 ); - _foreground = getColor( _foregroundName ); - _background = getColor( _backgroundName ); - } - - unsigned long getColor( const char *colorName ) - { - XColor color; - XParseColor( _display, _colormap, colorName, &color ); - XAllocColor( _display, _colormap, &color ); - return color.pixel; - } - - void createWindow() - { - _window = XCreateSimpleWindow( _display, RootWindow( _display, 0 ), 0, 0, 1, 1, 0, 0, _background ); - } - - void createGc() - { - _gc = XCreateGC( _display, _window, 0, 0 ); - } - - void createFont() - { - if ( !loadFont() ) - useDefaultFont(); - getFontInfo(); - _textHeight = _fontInfo->ascent + _fontInfo->descent; - _textDescent = _fontInfo->descent; - } - - bool loadFont() - { - if ( !_fontName ) - return false; - _fontId = XLoadFont( _display, _fontName ); - return (XSetFont( _display, _gc, _fontId ) == Success); - } - - void useDefaultFont() - { - _fontId = XGContextFromGC( _gc ); - } - - void getFontInfo() - { - _fontInfo = XQueryFont( _display, _fontId ); - } - - void freeFontInfo() - { - XFreeFontInfo( NULL, _fontInfo, 1 ); - } - - void initializeEvents() - { - _eventMask = ExposureMask; - XSelectInput( _display, _window, _eventMask ); - } - - void initializeBar( const WorldDescription &wd ) - { - getTotalTests( wd ); - _testsDone = 0; - _barColor = getColor( _greenName ); - } - - void getTotalTests() - { - getTotalTests( tracker().world() ); - } - - void getTotalTests( const WorldDescription &wd ) - { - _numTotalTests = wd.numTotalTests(); - wd.strTotalTests( _strTotalTests ); - } - - void centerWindow() - { - XMapWindow( _display, _window ); - - Screen *screen = XDefaultScreenOfDisplay( _display ); - int screenWidth = WidthOfScreen( screen ); - int screenHeight = HeightOfScreen( screen ); - int xCenter = screenWidth / 2; - int yCenter = screenHeight / 2; - - _width = (screenWidth * 4) / 5; - _height = screenHeight / 14; - - XMoveResizeWindow( _display, _window, xCenter - (_width / 2), yCenter - (_height / 2), _width, _height ); - } - - void processEvents() - { - redraw(); - - XEvent event; - while( XCheckMaskEvent( _display, _eventMask, &event ) ) - redraw(); - } - - void setWindowName( const char *suiteName, const char *testName ) - { - unsigned length = strlen( _programName ) + strlen( suiteName ) + strlen( testName ) + sizeof( " - ::()" ); - char *name = (char *)malloc( length ); - sprintf( name, "%s - %s::%s()", _programName, suiteName, testName ); - XSetStandardProperties( _display, _window, name, 0, 0, 0, 0, 0 ); - free( name ); - } - - void redraw() - { - getWindowSize(); - drawSolidBar(); - drawDividers(); - drawPercentage(); - flush(); - } - - void getWindowSize() - { - XWindowAttributes attributes; - XGetWindowAttributes( _display, _window, &attributes ); - _width = attributes.width; - _height = attributes.height; - } - - void drawSolidBar() - { - unsigned barWidth = (_width * _testsDone) / _numTotalTests; - - XSetForeground( _display, _gc, _barColor ); - XFillRectangle( _display, _window, _gc, 0, 0, barWidth, _height ); - - XSetForeground( _display, _gc, _background ); - XFillRectangle( _display, _window, _gc, barWidth, 0, _width + 1 - barWidth, _height ); - } - - void drawDividers() - { - if(_width / _numTotalTests < 5) - return; - for ( unsigned i = 1; i < _testsDone; ++ i ) { - int x = (_width * i) / _numTotalTests; - XDrawLine( _display, _window, _gc, x, 0, x, _height); - } - } - - void drawPercentage() - { - XSetForeground( _display, _gc, _foreground ); - - char str[sizeof("1000000000 of ") + sizeof(_strTotalTests) + sizeof(" (100%)")]; - sprintf( str, "%u of %s (%u%%)", _testsDone, _strTotalTests, (_testsDone * 100) / _numTotalTests ); - unsigned len = strlen( str ); - - int textWidth = XTextWidth( _fontInfo, str, len ); - - XDrawString( _display, _window, _gc, - (_width - textWidth) / 2, ((_height + _textHeight) / 2) - _textDescent, - str, len ); - } - - void flush() - { - XFlush( _display ); - } - - void destroyGc() - { - XFreeGC( _display, _gc ); - } - - void destroyWindow() - { - XDestroyWindow( _display, _window ); - } - - void closeDisplay() - { - XCloseDisplay( _display ); - } - }; -}; - -#endif //__cxxtest__X11Gui_h__ diff --git a/cxxtest/cxxtest/YesNoRunner.h b/cxxtest/cxxtest/YesNoRunner.h deleted file mode 100644 index e7b83b6bb..000000000 --- a/cxxtest/cxxtest/YesNoRunner.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __cxxtest__YesNoRunner_h__ -#define __cxxtest__YesNoRunner_h__ - -// -// The YesNoRunner is a simple TestListener that -// just returns true iff all tests passed. -// - -#include <cxxtest/TestRunner.h> -#include <cxxtest/TestListener.h> - -namespace CxxTest -{ - class YesNoRunner : public TestListener - { - public: - YesNoRunner() - { - } - - int run() - { - TestRunner::runAllTests( *this ); - return tracker().failedTests(); - } - }; -} - -#endif // __cxxtest__YesNoRunner_h__ diff --git a/cxxtest/cxxtestgen.pl b/cxxtest/cxxtestgen.pl deleted file mode 100755 index 378b0a38e..000000000 --- a/cxxtest/cxxtestgen.pl +++ /dev/null @@ -1,551 +0,0 @@ -#!/usr/bin/perl -w -use strict; -use Getopt::Long; - -sub usage() { - print STDERR "Usage: $0 [OPTIONS] <input file(s)>\n"; - print STDERR "Generate test source file for CxxTest.\n"; - print STDERR "\n"; - print STDERR " -v, --version Write CxxTest version\n"; - print STDERR " -o, --output=NAME Write output to file NAME\n"; - print STDERR " --runner=CLASS Create a main() function that runs CxxTest::CLASS\n"; - print STDERR " --gui=CLASS Like --runner, with GUI component\n"; - print STDERR " --error-printer Same as --runner=ErrorPrinter\n"; - print STDERR " --abort-on-fail Abort tests on failed asserts (like xUnit)\n"; - print STDERR " --have-std Use standard library (even if not found in tests)\n"; - print STDERR " --no-std Don't use standard library (even if found in tests)\n"; - print STDERR " --have-eh Use exception handling (even if not found in tests)\n"; - print STDERR " --no-eh Don't use exception handling (even if found in tests)\n"; - print STDERR " --longlong=[TYPE] Use TYPE as `long long' (defaut = long long)\n"; - print STDERR " --template=TEMPLATE Use TEMPLATE file to generate the test runner\n"; - print STDERR " --include=HEADER Include \"HEADER\" in test runner before other headers\n"; - print STDERR " --root Write CxxTest globals\n"; - print STDERR " --part Don't write CxxTest globals\n"; - print STDERR " --no-static-init Don't rely on static initialization\n"; - exit -1; -} - -main(); - -sub main { - parseCommandline(); - scanInputFiles(); - writeOutput(); -} - -# -# Handling the command line -# - -my ($output, $runner, $gui, $template, $abortOnFail, $haveEh, $noEh, $haveStd, $noStd); -my ($root, $part, $noStaticInit, $longlong, $factor); -my @headers = (); - -sub parseCommandline() { - @ARGV = expandWildcards(@ARGV); - GetOptions( 'version' => \&printVersion, - 'output=s' => \$output, - 'template=s' => \$template, - 'runner=s' => \$runner, - 'gui=s', => \$gui, - 'error-printer' => sub { $runner = 'ErrorPrinter'; $haveStd = 1; }, - 'abort-on-fail' => \$abortOnFail, - 'have-eh' => \$haveEh, - 'no-eh' => \$noEh, - 'have-std' => \$haveStd, - 'no-std' => \$noStd, - 'include=s' => \@headers, - 'root' => \$root, - 'part' => \$part, - 'no-static-init' => \$noStaticInit, - 'factor' => \$factor, - 'longlong:s' => \$longlong - ) or usage(); - scalar @ARGV or $root or usage(); - - if ( defined($noStaticInit) && (defined($root) || defined($part)) ) { - die "--no-static-init cannot be used with --root/--part\n"; - } - - if ( $gui && !$runner ) { - $runner = 'StdioPrinter'; - } - - if ( defined($longlong) && !$longlong ) { - $longlong = 'long long'; - } - - foreach my $header (@headers) { - if ( !($header =~ m/^["<].*[>"]$/) ) { - $header = "\"$header\""; - } - } -} - -sub printVersion() { - print "This is CxxTest version 3.10.1.\n"; - exit 0; -} - -sub expandWildcards() { - my @result = (); - while( my $fn = shift @_ ) { - push @result, glob($fn); - } - return @result; -} - -# -# Reading the input files and scanning for test cases -# - -my (@suites, $suite, $test, $inBlock); -my $numTotalTests = 0; - -sub scanInputFiles() { - foreach my $file (@ARGV) { - scanInputFile( $file ); - } - scalar @suites or $root or die("No tests defined\n"); -} - -sub scanInputFile($) { - my ($file) = @_; - open FILE, "<$file" or die("Cannot open input file \"$file\"\n"); - - my $line; - while (defined($line = <FILE>)) { - scanLineForExceptionHandling( $line ); - scanLineForStandardLibrary( $line ); - - scanLineForSuiteStart( $file, $., $line ); - - if ( $suite ) { - if ( lineBelongsToSuite( $suite, $., $line ) ) { - scanLineForTest( $., $line ); - scanLineForCreate( $., $line ); - scanLineForDestroy( $., $line ); - } - } - } - closeSuite(); - close FILE; -} - -sub lineBelongsToSuite($$$) { - my ($suite, $lineNo, $line) = @_; - if ( !$suite->{'generated'} ) { - return 1; - } - - if ( !$inBlock ) { - $inBlock = lineStartsBlock( $line ); - } - if ( $inBlock ) { - addLineToBlock( $suite->{'file'}, $lineNo, $line ); - } - return $inBlock; -} - -sub scanLineForExceptionHandling($) { - my ($line) = @_; - if ( $line =~ m/\b(try|throw|catch|TSM?_ASSERT_THROWS[A-Z_]*)\b/ ) { - addExceptionHandling(); - } -} - -sub scanLineForStandardLibrary($) { - my ($line) = @_; - if ( $line =~ m/\b(std\s*::|CXXTEST_STD|using\s+namespace\s+std\b|^\s*\#\s*include\s+<[a-z0-9]+>)/ ) { - addStandardLibrary(); - } -} - -sub scanLineForSuiteStart($$$) { - my ($fileName, $lineNo, $line) = @_; - if ( $line =~ m/\bclass\s+(\w+)\s*:\s*public\s+((::)?\s*CxxTest\s*::\s*)?TestSuite\b/ ) { - startSuite( $1, $fileName, $lineNo, 0 ); - } - if ( $line =~ m/\bCXXTEST_SUITE\s*\(\s*(\w*)\s*\)/ ) { - print "$fileName:$lineNo: Warning: Inline test suites are deprecated.\n"; - startSuite( $1, $fileName, $lineNo, 1 ); - } -} - -sub startSuite($$$$) { - my ($name, $file, $line, $generated) = @_; - closeSuite(); - $suite = { 'name' => $name, - 'file' => $file, - 'line' => $line, - 'generated' => $generated, - 'create' => 0, - 'destroy' => 0, - 'tests' => [], - 'lines' => [] }; -} - -sub lineStartsBlock($) { - my ($line) = @_; - return $line =~ m/\bCXXTEST_CODE\s*\(/; -} - -sub scanLineForTest($$) { - my ($lineNo, $line) = @_; - if ( $line =~ m/^([^\/]|\/[^\/])*\bvoid\s+([Tt]est\w+)\s*\(\s*(void)?\s*\)/ ) { - addTest( $2, $lineNo ); - } -} - -sub addTest($$$) { - my ($name, $line) = @_; - $test = { 'name' => $name, - 'line' => $line }; - push @{suiteTests()}, $test; -} - -sub addLineToBlock($$$) { - my ($fileName, $lineNo, $line) = @_; - $line = fixBlockLine( $fileName, $lineNo, $line ); - $line =~ s/^.*\{\{//; - my $end = ($line =~ s/\}\}.*//s); - push @{$suite->{'lines'}}, $line; - if ( $end ) { - $inBlock = 0; - } -} - -sub fixBlockLine($$$) { - my ($fileName, $lineNo, $line) = @_; - my $fileLine = cstr($fileName) . "," . $lineNo; - $line =~ s/\b(E?TSM?_(ASSERT[A-Z_]*|FAIL))\s*\(/_$1($fileLine,/g; - return $line; -} - -sub scanLineForCreate($$) { - my ($lineNo, $line) = @_; - if ( $line =~ m/\bstatic\s+\w+\s*\*\s*createSuite\s*\(\s*(void)?\s*\)/ ) { - addCreateSuite( $lineNo ); - } -} - -sub scanLineForDestroy($$) { - my ($lineNo, $line) = @_; - if ( $line =~ m/\bstatic\s+void\s+destroySuite\s*\(\s*\w+\s*\*\s*\w*\s*\)/ ) { - addDestroySuite( $lineNo ); - } -} - -sub closeSuite() { - if ( $suite && scalar @{suiteTests()} ) { - verifySuite(); - rememberSuite(); - } - undef $suite; -} - -sub addCreateSuite($) { - $suite->{'createSuite'} = $_[0]; -} - -sub addDestroySuite($) { - $suite->{'destroySuite'} = $_[0]; -} - -sub addExceptionHandling() { - $haveEh = 1 unless defined($noEh); -} - -sub addStandardLibrary() { - $haveStd = 1 unless defined($noStd); -} - -sub verifySuite() { - if (suiteCreateLine() || suiteDestroyLine()) { - die("Suite ", suiteName(), " must have both createSuite() and destroySuite()\n") - unless (suiteCreateLine() && suiteDestroyLine()); - } -} - -sub rememberSuite() { - push @suites, $suite; - $numTotalTests += scalar @{$suite->{'tests'}}; -} - -sub suiteName() { return $suite->{'name'}; } -sub suiteTests() { return $suite->{'tests'}; } -sub suiteCreateLine() { return $suite->{'createSuite'}; } -sub suiteDestroyLine() { return $suite->{'destroySuite'}; } -sub fileName() { return $suite->{'file'}; } -sub fileString() { return cstr(fileName()); } -sub testName() { return $test->{'name'}; } -sub testLine() { return $test->{'line'}; } - -sub suiteObject() { return "suite_".suiteName(); } - -sub cstr($) { - my $file = $_[0]; - $file =~ s/\\/\\\\/g; - return "\"".$file."\""; -} - -# -# Writing the test source file -# - -sub writeOutput() { - $template ? writeTemplateOutput() : writeSimpleOutput(); -} - -sub startOutputFile() { - if ( !standardOutput() ) { - open OUTPUT_FILE,">$output" or die("Cannot create output file \"$output\"\n"); - select OUTPUT_FILE; - } - print "/* Generated file, do not edit */\n\n"; -} - -sub standardOutput() { - return !$output; -} - -sub writeSimpleOutput() { - startOutputFile(); - writePreamble(); - writeMain(); - writeWorld(); -} - -my ($didPreamble, $didWorld); - -sub writeTemplateOutput() { - openTemplateFile(); - startOutputFile(); - my $line; - while (defined($line = <TEMPLATE_FILE>)) { - if ( $line =~ m/^\s*\#\s*include\s*<cxxtest\// ) { - writePreamble(); - print $line; - } elsif ( $line =~ m/^\s*<CxxTest\s+preamble>\s*$/ ) { - writePreamble(); - } elsif ( $line =~ m/^\s*<CxxTest\s+world>\s*$/ ) { - writeWorld(); - } else { - print $line; - } - } -} - -sub openTemplateFile() { - open TEMPLATE_FILE, "<$template" or die("Cannot open template file \"$template\"\n"); -} - -sub writePreamble() { - return if $didPreamble; - print "#ifndef CXXTEST_RUNNING\n"; - print "#define CXXTEST_RUNNING\n"; - print "#endif\n"; - print "\n"; - if ( $haveStd ) { - print "#define _CXXTEST_HAVE_STD\n"; - } - if ( $haveEh ) { - print "#define _CXXTEST_HAVE_EH\n"; - } - if ( $abortOnFail ) { - print "#define _CXXTEST_ABORT_TEST_ON_FAIL\n"; - } - if ( $longlong ) { - print "#define _CXXTEST_LONGLONG $longlong\n"; - } - if ( $factor ) { - print "#define _CXXTEST_FACTOR\n"; - } - foreach my $header (@headers) { - print "#include $header\n"; - } - print "#include <cxxtest/TestListener.h>\n"; - print "#include <cxxtest/TestTracker.h>\n"; - print "#include <cxxtest/TestRunner.h>\n"; - print "#include <cxxtest/RealDescriptions.h>\n"; - print "#include <cxxtest/$runner.h>\n" if $runner; - print "#include <cxxtest/$gui.h>\n" if $gui; - print "\n"; - $didPreamble = 1; -} - -sub writeWorld() { - return if $didWorld; - writePreamble(); - writeSuites(); - ($root or !$part) and writeRoot(); - $noStaticInit and writeInitialize(); - $didWorld = 1; -} - -sub writeSuites() { - foreach (@suites) { - $suite = $_; - writeInclude(fileName()); - if ( $suite->{'generated'} ) { generateSuite(); } - dynamicSuite() ? writeSuitePointer() : writeSuiteObject(); - writeTestList(); - writeSuiteDescription(); - writeTestDescriptions(); - } -} - -sub dynamicSuite() { - return suiteCreateLine(); -} - -my $lastIncluded; - -sub writeInclude($) { - my $file = $_[0]; - return if $lastIncluded && ($file eq $lastIncluded); - print "#include \"$file\"\n\n"; - $lastIncluded = $file; -} - -sub generateSuite() { - print "class ", suiteName(), " : public CxxTest::TestSuite {\n"; - print "public:\n"; - foreach my $line (@{$suite->{'lines'}}) { - print $line; - } - print "};\n\n"; -} - -sub writeTestDescriptionsBase() { - my $class = "TestDescriptionBase_" . suiteName(); - print "class $class : public CxxTest::TestDescription {\n"; - print "public:\n"; - print " const char *file() const { return ", fileString(), "; }\n"; - print " const char *suiteName() const { return \"", suiteName(), "\"; }\n"; - print "};\n\n"; -} - -sub writeSuitePointer() { - if ( $noStaticInit ) { - print "static ", suiteName(), " *", suiteObject(), ";\n\n"; - } else { - print "static ", suiteName(), " *", suiteObject(), " = 0;\n\n"; - } -} - -sub writeSuiteObject() { - print "static ", suiteName(), " ", suiteObject(), ";\n\n"; -} - -sub testList() { - return "Tests_" . suiteName(); -} - -sub writeTestList() { - if ( $noStaticInit ) { - printf "static CxxTest::List %s;\n", testList(); - } else { - printf "static CxxTest::List %s = { 0, 0 };\n", testList(); - } -} - -sub writeTestDescriptions() { - foreach (@{suiteTests()}) { - $test = $_; - writeTestDescription(); - } -} - -sub suiteDescription() { - return "suiteDescription_" . suiteName(); -} - -sub writeTestDescription() { - my $class = "TestDescription_" . suiteName() . "_" . testName(); - printf "static class $class : public CxxTest::RealTestDescription {\n"; - printf "public:\n"; - $noStaticInit or - printf " $class() : CxxTest::RealTestDescription( %s, %s, %s, \"%s\" ) {}\n", - testList(), suiteDescription(), testLine(), testName(); - printf " void runTest() { %s }\n", dynamicSuite() ? dynamicRun() : staticRun(); - printf "} testDescription_%s_%s;\n\n", suiteName(), testName(); -} - -sub dynamicRun() { - return sprintf( "if ( %s ) %s->%s();", suiteObject(), suiteObject(), testName() ); -} - -sub staticRun() { - return sprintf( "%s.%s();", suiteObject(), testName() ); -} - -sub writeSuiteDescription() { - dynamicSuite() ? writeDynamicDescription() : writeStaticDescription(); -} - -sub writeDynamicDescription() { - printf "CxxTest::DynamicSuiteDescription<%s> %s", suiteName(), suiteDescription(); - if ( !$noStaticInit ) { - printf "( %s, %s, \"%s\", %s, %s, %s, %s )", - fileString(), $suite->{'line'}, suiteName(), testList(), - suiteObject(), suiteCreateLine(), suiteDestroyLine(); - } - print ";\n\n"; -} - -sub writeStaticDescription() { - printf "CxxTest::StaticSuiteDescription %s", suiteDescription(); - if ( !$noStaticInit ) { - printf "( %s, %s, \"%s\", %s, %s )", fileString(), $suite->{'line'}, suiteName(), suiteObject(), testList(); - } - print ";\n\n"; -} - -sub writeRoot() { - print "#include <cxxtest/Root.cpp>\n"; -} - -sub writeInitialize() { - print "namespace CxxTest {\n"; - print " void initialize()\n"; - print " {\n"; - foreach (@suites) { - $suite = $_; - printf " %s.initialize();\n", testList(); - if ( dynamicSuite() ) { - printf " %s = 0;\n", suiteObject(); - printf " %s.initialize( %s, %s, \"%s\", %s, %s, %s, %s );\n", - suiteDescription(), fileString(), $suite->{'line'}, suiteName(), testList(), - suiteObject(), suiteCreateLine(), suiteDestroyLine(); - } else { - printf " %s.initialize( %s, %s, \"%s\", %s, %s );\n", - suiteDescription(), fileString(), $suite->{'line'}, suiteName(), suiteObject(), testList(); - } - - foreach (@{suiteTests()}) { - $test = $_; - printf " testDescription_%s_%s.initialize( %s, %s, %s, \"%s\" );\n", - suiteName(), testName(), testList(), suiteDescription(), testLine(), testName(); - } - } - print " }\n"; - print "}\n"; -} - -sub writeMain() { - if ( $gui ) { - print "int main( int argc, char *argv[] ) {\n"; - $noStaticInit && - print " CxxTest::initialize();\n"; - print " return CxxTest::GuiTuiRunner<CxxTest::$gui, CxxTest::$runner>( argc, argv ).run();\n"; - print "}\n"; - } - elsif ( $runner ) { - print "int main() {\n"; - $noStaticInit && - print " CxxTest::initialize();\n"; - print " return CxxTest::$runner().run();\n"; - print "}\n"; - } -} diff --git a/cxxtest/cxxtestgen.py b/cxxtest/cxxtestgen.py deleted file mode 100755 index 831d23ab4..000000000 --- a/cxxtest/cxxtestgen.py +++ /dev/null @@ -1,593 +0,0 @@ -#!/usr/bin/python -'''Usage: %s [OPTIONS] <input file(s)> -Generate test source file for CxxTest. - - -v, --version Write CxxTest version - -o, --output=NAME Write output to file NAME - --runner=CLASS Create a main() function that runs CxxTest::CLASS - --gui=CLASS Like --runner, with GUI component - --error-printer Same as --runner=ErrorPrinter - --abort-on-fail Abort tests on failed asserts (like xUnit) - --have-std Use standard library (even if not found in tests) - --no-std Don\'t use standard library (even if found in tests) - --have-eh Use exception handling (even if not found in tests) - --no-eh Don\'t use exception handling (even if found in tests) - --longlong=[TYPE] Use TYPE (default: long long) as long long - --template=TEMPLATE Use TEMPLATE file to generate the test runner - --include=HEADER Include HEADER in test runner before other headers - --root Write CxxTest globals - --part Don\'t write CxxTest globals - --no-static-init Don\'t rely on static initialization -''' - -import re -import sys -import getopt -import glob -import string - -# Global variables -suites = [] -suite = None -inBlock = 0 - -outputFileName = None -runner = None -gui = None -root = None -part = None -noStaticInit = None -templateFileName = None -headers = [] - -haveExceptionHandling = 0 -noExceptionHandling = 0 -haveStandardLibrary = 0 -noStandardLibrary = 0 -abortOnFail = 0 -factor = 0 -longlong = 0 - -def main(): - '''The main program''' - files = parseCommandline() - scanInputFiles( files ) - writeOutput() - -def usage( problem = None ): - '''Print usage info and exit''' - if problem is None: - print usageString() - sys.exit(0) - else: - sys.stderr.write( usageString() ) - abort( problem ) - -def usageString(): - '''Construct program usage string''' - return __doc__ % sys.argv[0] - -def abort( problem ): - '''Print error message and exit''' - sys.stderr.write( '\n' ) - sys.stderr.write( problem ) - sys.stderr.write( '\n\n' ) - sys.exit(2) - -def parseCommandline(): - '''Analyze command line arguments''' - try: - options, patterns = getopt.getopt( sys.argv[1:], 'o:r:', - ['version', 'output=', 'runner=', 'gui=', - 'error-printer', 'abort-on-fail', 'have-std', 'no-std', - 'have-eh', 'no-eh', 'template=', 'include=', - 'root', 'part', 'no-static-init', 'factor', 'longlong='] ) - except getopt.error, problem: - usage( problem ) - setOptions( options ) - return setFiles( patterns ) - -def setOptions( options ): - '''Set options specified on command line''' - global outputFileName, templateFileName, runner, gui, haveStandardLibrary, factor, longlong - global haveExceptionHandling, noExceptionHandling, abortOnFail, headers, root, part, noStaticInit - for o, a in options: - if o in ('-v', '--version'): - printVersion() - elif o in ('-o', '--output'): - outputFileName = a - elif o == '--template': - templateFileName = a - elif o == '--runner': - runner = a - elif o == '--gui': - gui = a - elif o == '--include': - if not re.match( r'^["<].*[>"]$', a ): - a = ('"%s"' % a) - headers.append( a ) - elif o == '--error-printer': - runner = 'ErrorPrinter' - haveStandardLibrary = 1 - elif o == '--abort-on-fail': - abortOnFail = 1 - elif o == '--have-std': - haveStandardLibrary = 1 - elif o == '--no-std': - noStandardLibrary = 1 - elif o == '--have-eh': - haveExceptionHandling = 1 - elif o == '--no-eh': - noExceptionHandling = 1 - elif o == '--root': - root = 1 - elif o == '--part': - part = 1 - elif o == '--no-static-init': - noStaticInit = 1 - elif o == '--factor': - factor = 1 - elif o == '--longlong': - if a: - longlong = a - else: - longlong = 'long long' - - if noStaticInit and (root or part): - abort( '--no-static-init cannot be used with --root/--part' ) - - if gui and not runner: - runner = 'StdioPrinter' - -def printVersion(): - '''Print CxxTest version and exit''' - sys.stdout.write( "This is CxxTest version 3.10.1.\n" ) - sys.exit(0) - -def setFiles( patterns ): - '''Set input files specified on command line''' - files = expandWildcards( patterns ) - if len(files) is 0 and not root: - usage( "No input files found" ) - return files - -def expandWildcards( patterns ): - '''Expand all wildcards in an array (glob)''' - fileNames = [] - for pathName in patterns: - patternFiles = glob.glob( pathName ) - for fileName in patternFiles: - fileNames.append( fixBackslashes( fileName ) ) - return fileNames - -def fixBackslashes( fileName ): - '''Convert backslashes to slashes in file name''' - return re.sub( r'\\', '/', fileName, 0 ) - -def scanInputFiles(files): - '''Scan all input files for test suites''' - for file in files: - scanInputFile(file) - global suites - if len(suites) is 0 and not root: - abort( 'No tests defined' ) - -def scanInputFile(fileName): - '''Scan single input file for test suites''' - file = open(fileName) - lineNo = 0 - while 1: - line = file.readline() - if not line: - break - lineNo = lineNo + 1 - - scanInputLine( fileName, lineNo, line ) - closeSuite() - file.close() - -def scanInputLine( fileName, lineNo, line ): - '''Scan single input line for interesting stuff''' - scanLineForExceptionHandling( line ) - scanLineForStandardLibrary( line ) - - scanLineForSuiteStart( fileName, lineNo, line ) - - global suite - if suite: - scanLineInsideSuite( suite, lineNo, line ) - -def scanLineInsideSuite( suite, lineNo, line ): - '''Analyze line which is part of a suite''' - global inBlock - if lineBelongsToSuite( suite, lineNo, line ): - scanLineForTest( suite, lineNo, line ) - scanLineForCreate( suite, lineNo, line ) - scanLineForDestroy( suite, lineNo, line ) - -def lineBelongsToSuite( suite, lineNo, line ): - '''Returns whether current line is part of the current suite. - This can be false when we are in a generated suite outside of CXXTEST_CODE() blocks - If the suite is generated, adds the line to the list of lines''' - if not suite['generated']: - return 1 - - global inBlock - if not inBlock: - inBlock = lineStartsBlock( line ) - if inBlock: - inBlock = addLineToBlock( suite, lineNo, line ) - return inBlock - - -std_re = re.compile( r"\b(std\s*::|CXXTEST_STD|using\s+namespace\s+std\b|^\s*\#\s*include\s+<[a-z0-9]+>)" ) -def scanLineForStandardLibrary( line ): - '''Check if current line uses standard library''' - global haveStandardLibrary, noStandardLibrary - if not haveStandardLibrary and std_re.search(line): - if not noStandardLibrary: - haveStandardLibrary = 1 - -exception_re = re.compile( r"\b(throw|try|catch|TSM?_ASSERT_THROWS[A-Z_]*)\b" ) -def scanLineForExceptionHandling( line ): - '''Check if current line uses exception handling''' - global haveExceptionHandling, noExceptionHandling - if not haveExceptionHandling and exception_re.search(line): - if not noExceptionHandling: - haveExceptionHandling = 1 - -suite_re = re.compile( r'\bclass\s+(\w+)\s*:\s*public\s+((::)?\s*CxxTest\s*::\s*)?TestSuite\b' ) -generatedSuite_re = re.compile( r'\bCXXTEST_SUITE\s*\(\s*(\w*)\s*\)' ) -def scanLineForSuiteStart( fileName, lineNo, line ): - '''Check if current line starts a new test suite''' - m = suite_re.search( line ) - if m: - startSuite( m.group(1), fileName, lineNo, 0 ) - m = generatedSuite_re.search( line ) - if m: - sys.stdout.write( "%s:%s: Warning: Inline test suites are deprecated.\n" % (fileName, lineNo) ) - startSuite( m.group(1), fileName, lineNo, 1 ) - -def startSuite( name, file, line, generated ): - '''Start scanning a new suite''' - global suite - closeSuite() - suite = { 'name' : name, - 'file' : file, - 'cfile' : cstr(file), - 'line' : line, - 'generated' : generated, - 'object' : 'suite_%s' % name, - 'dobject' : 'suiteDescription_%s' % name, - 'tlist' : 'Tests_%s' % name, - 'tests' : [], - 'lines' : [] } - -def lineStartsBlock( line ): - '''Check if current line starts a new CXXTEST_CODE() block''' - return re.search( r'\bCXXTEST_CODE\s*\(', line ) is not None - -test_re = re.compile( r'^([^/]|/[^/])*\bvoid\s+([Tt]est\w+)\s*\(\s*(void)?\s*\)' ) -def scanLineForTest( suite, lineNo, line ): - '''Check if current line starts a test''' - m = test_re.search( line ) - if m: - addTest( suite, m.group(2), lineNo ) - -def addTest( suite, name, line ): - '''Add a test function to the current suite''' - test = { 'name' : name, - 'suite' : suite, - 'class' : 'TestDescription_%s_%s' % (suite['name'], name), - 'object' : 'testDescription_%s_%s' % (suite['name'], name), - 'line' : line, - } - suite['tests'].append( test ) - -def addLineToBlock( suite, lineNo, line ): - '''Append the line to the current CXXTEST_CODE() block''' - line = fixBlockLine( suite, lineNo, line ) - line = re.sub( r'^.*\{\{', '', line ) - - e = re.search( r'\}\}', line ) - if e: - line = line[:e.start()] - suite['lines'].append( line ) - return e is None - -def fixBlockLine( suite, lineNo, line): - '''Change all [E]TS_ macros used in a line to _[E]TS_ macros with the correct file/line''' - return re.sub( r'\b(E?TSM?_(ASSERT[A-Z_]*|FAIL))\s*\(', - r'_\1(%s,%s,' % (suite['cfile'], lineNo), - line, 0 ) - -create_re = re.compile( r'\bstatic\s+\w+\s*\*\s*createSuite\s*\(\s*(void)?\s*\)' ) -def scanLineForCreate( suite, lineNo, line ): - '''Check if current line defines a createSuite() function''' - if create_re.search( line ): - addSuiteCreateDestroy( suite, 'create', lineNo ) - -destroy_re = re.compile( r'\bstatic\s+void\s+destroySuite\s*\(\s*\w+\s*\*\s*\w*\s*\)' ) -def scanLineForDestroy( suite, lineNo, line ): - '''Check if current line defines a destroySuite() function''' - if destroy_re.search( line ): - addSuiteCreateDestroy( suite, 'destroy', lineNo ) - -def cstr( str ): - '''Convert a string to its C representation''' - return '"' + string.replace( str, '\\', '\\\\' ) + '"' - - -def addSuiteCreateDestroy( suite, which, line ): - '''Add createSuite()/destroySuite() to current suite''' - if suite.has_key(which): - abort( '%s:%s: %sSuite() already declared' % ( suite['file'], str(line), which ) ) - suite[which] = line - -def closeSuite(): - '''Close current suite and add it to the list if valid''' - global suite - if suite is not None: - if len(suite['tests']) is not 0: - verifySuite(suite) - rememberSuite(suite) - suite = None - -def verifySuite(suite): - '''Verify current suite is legal''' - if suite.has_key('create') and not suite.has_key('destroy'): - abort( '%s:%s: Suite %s has createSuite() but no destroySuite()' % - (suite['file'], suite['create'], suite['name']) ) - if suite.has_key('destroy') and not suite.has_key('create'): - abort( '%s:%s: Suite %s has destroySuite() but no createSuite()' % - (suite['file'], suite['destroy'], suite['name']) ) - -def rememberSuite(suite): - '''Add current suite to list''' - global suites - suites.append( suite ) - -def writeOutput(): - '''Create output file''' - if templateFileName: - writeTemplateOutput() - else: - writeSimpleOutput() - -def writeSimpleOutput(): - '''Create output not based on template''' - output = startOutputFile() - writePreamble( output ) - writeMain( output ) - writeWorld( output ) - output.close() - -include_re = re.compile( r"\s*\#\s*include\s+<cxxtest/" ) -preamble_re = re.compile( r"^\s*<CxxTest\s+preamble>\s*$" ) -world_re = re.compile( r"^\s*<CxxTest\s+world>\s*$" ) -def writeTemplateOutput(): - '''Create output based on template file''' - template = open(templateFileName) - output = startOutputFile() - while 1: - line = template.readline() - if not line: - break; - if include_re.search( line ): - writePreamble( output ) - output.write( line ) - elif preamble_re.search( line ): - writePreamble( output ) - elif world_re.search( line ): - writeWorld( output ) - else: - output.write( line ) - template.close() - output.close() - -def startOutputFile(): - '''Create output file and write header''' - if outputFileName is not None: - output = open( outputFileName, 'w' ) - else: - output = sys.stdout - output.write( "/* Generated file, do not edit */\n\n" ) - return output - -wrotePreamble = 0 -def writePreamble( output ): - '''Write the CxxTest header (#includes and #defines)''' - global wrotePreamble, headers, longlong - if wrotePreamble: return - output.write( "#ifndef CXXTEST_RUNNING\n" ) - output.write( "#define CXXTEST_RUNNING\n" ) - output.write( "#endif\n" ) - output.write( "\n" ) - if haveStandardLibrary: - output.write( "#define _CXXTEST_HAVE_STD\n" ) - if haveExceptionHandling: - output.write( "#define _CXXTEST_HAVE_EH\n" ) - if abortOnFail: - output.write( "#define _CXXTEST_ABORT_TEST_ON_FAIL\n" ) - if longlong: - output.write( "#define _CXXTEST_LONGLONG %s\n" % longlong ) - if factor: - output.write( "#define _CXXTEST_FACTOR\n" ) - for header in headers: - output.write( "#include %s\n" % header ) - output.write( "#include <cxxtest/TestListener.h>\n" ) - output.write( "#include <cxxtest/TestTracker.h>\n" ) - output.write( "#include <cxxtest/TestRunner.h>\n" ) - output.write( "#include <cxxtest/RealDescriptions.h>\n" ) - if runner: - output.write( "#include <cxxtest/%s.h>\n" % runner ) - if gui: - output.write( "#include <cxxtest/%s.h>\n" % gui ) - output.write( "\n" ) - wrotePreamble = 1 - -def writeMain( output ): - '''Write the main() function for the test runner''' - if gui: - output.write( 'int main( int argc, char *argv[] ) {\n' ) - if noStaticInit: - output.write( ' CxxTest::initialize();\n' ) - output.write( ' return CxxTest::GuiTuiRunner<CxxTest::%s, CxxTest::%s>( argc, argv ).run();\n' % (gui, runner) ) - output.write( '}\n' ) - elif runner: - output.write( 'int main() {\n' ) - if noStaticInit: - output.write( ' CxxTest::initialize();\n' ) - output.write( ' return CxxTest::%s().run();\n' % runner ) - output.write( '}\n' ) - -wroteWorld = 0 -def writeWorld( output ): - '''Write the world definitions''' - global wroteWorld, part - if wroteWorld: return - writePreamble( output ) - writeSuites( output ) - if root or not part: - writeRoot( output ) - if noStaticInit: - writeInitialize( output ) - wroteWorld = 1 - -def writeSuites(output): - '''Write all TestDescriptions and SuiteDescriptions''' - for suite in suites: - writeInclude( output, suite['file'] ) - if isGenerated(suite): - generateSuite( output, suite ) - if isDynamic(suite): - writeSuitePointer( output, suite ) - else: - writeSuiteObject( output, suite ) - writeTestList( output, suite ) - writeSuiteDescription( output, suite ) - writeTestDescriptions( output, suite ) - -def isGenerated(suite): - '''Checks whether a suite class should be created''' - return suite['generated'] - -def isDynamic(suite): - '''Checks whether a suite is dynamic''' - return suite.has_key('create') - -lastIncluded = '' -def writeInclude(output, file): - '''Add #include "file" statement''' - global lastIncluded - if file == lastIncluded: return - output.writelines( [ '#include "', file, '"\n\n' ] ) - lastIncluded = file - -def generateSuite( output, suite ): - '''Write a suite declared with CXXTEST_SUITE()''' - output.write( 'class %s : public CxxTest::TestSuite {\n' % suite['name'] ) - output.write( 'public:\n' ) - for line in suite['lines']: - output.write(line) - output.write( '};\n\n' ) - -def writeSuitePointer( output, suite ): - '''Create static suite pointer object for dynamic suites''' - if noStaticInit: - output.write( 'static %s *%s;\n\n' % (suite['name'], suite['object']) ) - else: - output.write( 'static %s *%s = 0;\n\n' % (suite['name'], suite['object']) ) - -def writeSuiteObject( output, suite ): - '''Create static suite object for non-dynamic suites''' - output.writelines( [ "static ", suite['name'], " ", suite['object'], ";\n\n" ] ) - -def writeTestList( output, suite ): - '''Write the head of the test linked list for a suite''' - if noStaticInit: - output.write( 'static CxxTest::List %s;\n' % suite['tlist'] ) - else: - output.write( 'static CxxTest::List %s = { 0, 0 };\n' % suite['tlist'] ) - -def writeTestDescriptions( output, suite ): - '''Write all test descriptions for a suite''' - for test in suite['tests']: - writeTestDescription( output, suite, test ) - -def writeTestDescription( output, suite, test ): - '''Write test description object''' - output.write( 'static class %s : public CxxTest::RealTestDescription {\n' % test['class'] ) - output.write( 'public:\n' ) - if not noStaticInit: - output.write( ' %s() : CxxTest::RealTestDescription( %s, %s, %s, "%s" ) {}\n' % - (test['class'], suite['tlist'], suite['dobject'], test['line'], test['name']) ) - output.write( ' void runTest() { %s }\n' % runBody( suite, test ) ) - output.write( '} %s;\n\n' % test['object'] ) - -def runBody( suite, test ): - '''Body of TestDescription::run()''' - if isDynamic(suite): return dynamicRun( suite, test ) - else: return staticRun( suite, test ) - -def dynamicRun( suite, test ): - '''Body of TestDescription::run() for test in a dynamic suite''' - return 'if ( ' + suite['object'] + ' ) ' + suite['object'] + '->' + test['name'] + '();' - -def staticRun( suite, test ): - '''Body of TestDescription::run() for test in a non-dynamic suite''' - return suite['object'] + '.' + test['name'] + '();' - -def writeSuiteDescription( output, suite ): - '''Write SuiteDescription object''' - if isDynamic( suite ): - writeDynamicDescription( output, suite ) - else: - writeStaticDescription( output, suite ) - -def writeDynamicDescription( output, suite ): - '''Write SuiteDescription for a dynamic suite''' - output.write( 'CxxTest::DynamicSuiteDescription<%s> %s' % (suite['name'], suite['dobject']) ) - if not noStaticInit: - output.write( '( %s, %s, "%s", %s, %s, %s, %s )' % - (suite['cfile'], suite['line'], suite['name'], suite['tlist'], - suite['object'], suite['create'], suite['destroy']) ) - output.write( ';\n\n' ) - -def writeStaticDescription( output, suite ): - '''Write SuiteDescription for a static suite''' - output.write( 'CxxTest::StaticSuiteDescription %s' % suite['dobject'] ) - if not noStaticInit: - output.write( '( %s, %s, "%s", %s, %s )' % - (suite['cfile'], suite['line'], suite['name'], suite['object'], suite['tlist']) ) - output.write( ';\n\n' ) - -def writeRoot(output): - '''Write static members of CxxTest classes''' - output.write( '#include <cxxtest/Root.cpp>\n' ) - -def writeInitialize(output): - '''Write CxxTest::initialize(), which replaces static initialization''' - output.write( 'namespace CxxTest {\n' ) - output.write( ' void initialize()\n' ) - output.write( ' {\n' ) - for suite in suites: - output.write( ' %s.initialize();\n' % suite['tlist'] ) - if isDynamic(suite): - output.write( ' %s = 0;\n' % suite['object'] ) - output.write( ' %s.initialize( %s, %s, "%s", %s, %s, %s, %s );\n' % - (suite['dobject'], suite['cfile'], suite['line'], suite['name'], - suite['tlist'], suite['object'], suite['create'], suite['destroy']) ) - else: - output.write( ' %s.initialize( %s, %s, "%s", %s, %s );\n' % - (suite['dobject'], suite['cfile'], suite['line'], suite['name'], - suite['object'], suite['tlist']) ) - - for test in suite['tests']: - output.write( ' %s.initialize( %s, %s, %s, "%s" );\n' % - (test['object'], suite['tlist'], suite['dobject'], test['line'], test['name']) ) - - output.write( ' }\n' ) - output.write( '}\n' ) - -main() diff --git a/cxxtest/docs/convert.pl b/cxxtest/docs/convert.pl deleted file mode 100644 index 9d83f1c0c..000000000 --- a/cxxtest/docs/convert.pl +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/perl - -die "Usage: $0 <text file> <html file> <TexInfo file>\n" - unless scalar @ARGV == 3; - -my ($text, $html, $texi) = @ARGV; - -open TEXT, "<$text" or die "Cannot open text file \"$text\"\n"; -open HTML, ">$html" or die "Cannot create html file \"$html\"\n"; -open TEXI, ">$texi" or die "Cannot create TexInfo file \"$texi\"\n"; - -print HTML "<html>"; - -sub analyze($) { - my ($line) = @_; - my ($htmlLine, $texiLine) = ($line, $line); - - # command line options - $texiLine =~ s/ (--?[a-z-]*)/ \@option{$1}/g; - $htmlLine =~ s/ (--?[a-z-]*)/ <tt>$1<\/tt>/g; - - # [Class::]function() - $texiLine =~ s/([^A-Za-z])(([A-Z][A-Za-z0-9]*::)?[A-Za-z0-9]+\(\))/$1\@code{$2}/g; - $htmlLine =~ s/([^A-Za-z])(([A-Z][A-Za-z0-9]*::)?[A-Za-z0-9]+\(\))/$1<code>$2<\/code>/g; - - # `file' - $texiLine =~ s/`([A-Za-z.\/]*)'/\@file{$1}/g; - $htmlLine =~ s/`([A-Za-z.\/]*)'/<tt>`$1'<\/tt>/g; - - # TS... - $texiLine =~ s/(^|[^A-Z])(TS[A-Za-z_*()]*)/$1\@code{$2}/g; - $htmlLine =~ s/(^|[^A-Z])(TS[A-Za-z_*()]*)/$1<code>$2<\/code>/g; - - # CXXTEST_ - $texiLine =~ s/(CXXTEST_[A-Z_]*)/\@code{$1}/g; - $htmlLine =~ s/(CXXTEST_[A-Z_]*)/<tt>$1<\/tt>/g; - - return ($htmlLine, $texiLine); -} - -my $line; -my $inRelease = 0; -while ( defined( $line = <TEXT> ) ) { - chomp $line; - if ( $line =~ m/^CxxTest Releases/ ) { - print HTML "<title>CxxTest Releases\n"; - print HTML "

    CxxTest Releases

    \n\n"; - - print TEXI "\@appendix Version history\n"; - print TEXI "\@itemize \@bullet\n"; - } - elsif ( $line =~ m/^(.*):$/ ) { - if ( $inRelease ) { - print HTML "\n\n"; - print TEXI "\@end itemize\n"; - } - - print HTML "

    $1

    \n"; - print HTML "
      \n"; - - print TEXI "\@item\n\@strong{$1}\n"; - print TEXI "\@itemize \@minus\n"; - - $inRelease = 1; - } - elsif ( $line =~ m/^ - (.*)$/ ) { - my ($htmlLine, $texiLine) = analyze($1); - print HTML "
    • $htmlLine
    • \n"; - print TEXI "\@item\n$texiLine\n"; - } -} - -if ( $inRelease ) { - print HTML "
    \n\n"; - print TEXI "\@end itemize\n\n"; -} - -print HTML "\n"; -print TEXI "\@end itemize\n"; - -close TEXT or die "Error closing text file \"$text\"\n"; -close HTML or die "Error closing html file \"$html\"\n"; -close TEXI or die "Error closing TexInfo file \"$texi\"\n"; diff --git a/cxxtest/docs/guide.html b/cxxtest/docs/guide.html deleted file mode 100644 index 01391ddea..000000000 --- a/cxxtest/docs/guide.html +++ /dev/null @@ -1,1960 +0,0 @@ - - -CxxTest User's Guide - - - - - - -

    CxxTest User's Guide

    -Table of contents - -

    1 Introduction

    - -

    CxxTest is a JUnit/CppUnit/xUnit-like framework for C++. - -

    Its advantages over existing alternatives are that it: -

      -
    • Doesn't require RTTI -
    • Doesn't require member template functions -
    • Doesn't require exception handling -
    • Doesn't require any external libraries (including memory management, file/console I/O, graphics libraries) -
    - In other words, CxxTest is designed to be as portable as possible. Its -only requirements are a reasonably modern C++ compiler and either Perl -or Python. However, when advanced features are supported in your -environment, CxxTest can use them, e.g. catch unhandled exceptions and -even display a GUI. - -

    In addition, CxxTest is slightly easier to use than the C++ -alternatives, since you don't need to "register" your tests. It also -features some extras like a richer set of assertions and even support -for a "to do" list (see TS_WARN()). - -

    CxxTest is available under the -GNU Lesser General Public License. - -

    1.1 About this guide

    - -

    This guide is not intended as an introduction to Extreme Progamming -and/or unit testing. It describes the design and usage of CxxTest. - -

    2 Getting started

    - -

    2.1 Getting CxxTest

    - -

    The homepage for CxxTest is http://cxxtest.sourceforge.net. You -can always get the latest release from the SourceForge download page, -here -or here. The latest version -of this guide is available online at -http://cxxtest.sourceforge.net/guide.html. A PDF version is also -available at http://cxxtest.sourceforge.net/guide.pdf. - -

    2.2 Your first test!

    - -

    Here's a simple step-by-step guide: - -

      - -
    1. Tests are organized into "Test Suites". - Test suites are written in header files. - -

      A test suite is a class that inherits from CxxTest::TestSuite. - A test is a public void (void) member function of that class whose name starts with test, - e.g. testDirectoryScanner(), test_cool_feature() and even TestImportantBugFix(). - -

      -          
      -          // MyTestSuite.h
      -          #include <cxxtest/TestSuite.h>
      -          
      -          class MyTestSuite : public CxxTest::TestSuite 
      -          {
      -          public:
      -             void testAddition( void )
      -             {
      -                TS_ASSERT( 1 + 1 > 1 );
      -                TS_ASSERT_EQUALS( 1 + 1, 2 );
      -             }
      -          };
      -          
      -
      - -

    2. After you have your test suites, you use CxxTest to generate a "test runner" source file: - -
      -     # cxxtestgen.pl --error-printer -o runner.cpp MyTestSuite.h
      -     
      - -

      or, for those less fortunate: - -

      -     C:\tmp> perl -w cxxtestgen.pl --error-printer -o runner.cpp MyTestSuite.h
      -     
      - -

    3. You would then simply compile the resulting file: - -
      -     # g++ -o runner runner.cpp
      -     
      - -

      or perhaps - -

      -     C:\tmp> cl -GX -o runner.exe runner.cpp
      -     
      - -

      or maybe even - -

      -     C:\tmp> bcc32 -erunner.exe runner.cpp
      -     
      - -

    4. Finally, you run the tests and enjoy a well tested piece of software: - -
      -     # ./runner
      -     Running 1 test.OK!
      -     
      - -
    - -

    2.3 Your second test

    - -

    Now let's see what failed tests look like. -We will add a failing test to the previous example: - -

    -     
    -     // MyTestSuite.h
    -     #include <cxxtest/TestSuite.h>
    -     
    -     class MyTestSuite : public CxxTest::TestSuite 
    -     {
    -     public:
    -        void testAddition( void )
    -        {
    -           TS_ASSERT( 1 + 1 > 1 );
    -           TS_ASSERT_EQUALS( 1 + 1, 2 );
    -        }
    -     
    -        void testMultiplication( void )
    -        {
    -           TS_ASSERT_EQUALS( 2 * 2, 5 );
    -        }
    -     };
    -     
    -
    - -

    Generate, compile and run the test runner, and you will get this: - -

    -     
    -     # ./runner
    -     Running 2 tests.
    -     MyTestSuite.h:15: Expected (2 * 2 == 5), found (4 != 5)
    -     Failed 1 of 2 tests
    -     Success rate: 50%
    -     
    -
    - -

    Fixing the bug is left as an excercise to the reader. - -

    2.4 Graphical user interface

    - - (v3.0.1) -CxxTest can also display a simple GUI. The way to do this is depends on -your compiler, OS and environment, but try the following pointers: -
      - -
    • Under Windows with Visual C++, run perl cxxtestgen.pl -o runner.cpp ---gui=Win32Gui MyTestSuite.h. - -
    • Under X-Windows, try ./cxxtestgen.pl -o runner.cpp ---gui=X11Gui MyTestSuite. You may need to tell the compiler -where to find X, usually something like g++ -o runner --L/usr/X11R6/lib runner.cpp -lX11. - -
    • If you have Qt installed, try running -cxxtestgen.pl with the option --gui=QtGui. As -always, compile and link the Qt headers and libraries. - -
    - -

    See Graphical user interface and Running the samples for -more information. - -

    3 Really using CxxTest

    - -

    There is much more to CxxTest than seeing if two times two is four. -You should probably take a look at the samples in the CxxTest distribution. -Other than that, here are some more in-depth explanations. - -

    3.1 What can you test

    - -

    Here are the different "assertions" you can use in your tests: - -

    Macro Description Example - -
    TS_FAIL(message) -Fail unconditionally -TS_FAIL("Test not implemented"); - -
    TS_ASSERT(expr) -Verify (expr) is true -TS_ASSERT(messageReceived()); - -
    TS_ASSERT_EQUALS(x, y) -Verify (x==y) -TS_ASSERT_EQUALS(nodeCount(), 14); - -
    TS_ASSERT_SAME_DATA(x, y, size) -Verify two buffers are equal -TS_ASSERT_SAME_DATA(input, output,, size); - -
    TS_ASSERT_DELTA(x, y, d) -Verify (x==y) up to d -TS_ASSERT_DELTA(sqrt(4.0), 2.0, 0.0001); - -
    TS_ASSERT_DIFFERS(x, y) -Verify !(x==y) -TS_ASSERT_DIFFERS(exam.numTook(), exam.numPassed()); - -
    TS_ASSERT_LESS_THAN(x, y) -Verify (x<y) -TS_ASSERT_LESS_THAN(ship.speed(), SPEED_OF_LIGHT); - -
    TS_ASSERT_LESS_THAN_EQUALS(x, y) -Verify (x<=y) -TS_ASSERT_LESS_THAN_EQUALS(requests, items); - -
    TS_ASSERT_PREDICATE(R, x) -Verify P(x) -TS_ASSERT_PREDICATE(SeemsReasonable, salary); - -
    TS_ASSERT_RELATION(R, x, y) -Verify x R y -TS_ASSERT_RELATION(std::greater, salary, average); - -
    TS_ASSERT_THROWS(expr, type) -Verify that (expr) throws a specific type of exception -TS_ASSERT_THROWS(parse(file), Parser::ReadError); - -
    TS_ASSERT_THROWS_EQUALS(expr, arg, x, y) -Verify type and value of what (expr) throws -(See text) - -
    TS_ASSERT_THROWS_ASSERT(expr, arg, assertion) -Verify type and value of what (expr) throws -(See text) - -
    TS_ASSERT_THROWS_ANYTHING(expr) -Verify that (expr) throws an exception -TS_ASSERT_THROWS_ANYTHING(buggy()); - -
    TS_ASSERT_THROWS_NOTHING(expr) -Verify that (expr) doesn't throw anything -TS_ASSERT_THROWS_NOTHING(robust()); - -
    TS_WARN(message) -Print message as a warning -TS_WARN("TODO: Check invalid parameters"); - -
    TS_TRACE(message) -Print message as an informational message -TS_TRACE(errno); - -
    - -

    3.1.1 TS_FAIL

    - -

    - -

    TS_FAIL just fails the test. -It is like an assert(false) with an error message. -For example: - -

    -     
    -     void testSomething( void )
    -     {
    -        TS_FAIL( "I don't know how to test this!" );
    -     }
    -     
    -
    - -

    3.1.2 TS_ASSERT

    - -

    - -

    TS_ASSERT is the basic all-around tester. It works just like the -well-respected assert() macro (which I sincerely hope you know and -use!) An example: - -

    -     
    -     void testSquare( void )
    -     {
    -        MyFileLibrary::createEmptyFile( "test.bin" );
    -        TS_ASSERT( access( "test.bin", 0 ) == 0 );
    -     }
    -     
    -
    - -

    3.1.3 TS_ASSERT_EQUALS

    - -

    - -

    This is the second most useful tester. -As the name hints, it is used to test if two values are equal. - -

    -     
    -     void testSquare( void )
    -     {
    -        TS_ASSERT_EQUALS( square(-5), 25 );
    -     }
    -     
    -
    - -

    3.1.4 TS_ASSERT_SAME_DATA

    - -

    - - (v3.5.1) -This assertion is similar to TS_ASSERT_EQUALS(), except that it -compares the contents of two buffers in memory. If the comparison -fails, the standard runner dumps the contents of both buffers as hex -values. - -

    -     
    -     void testCopyMemory( void )
    -     {
    -        char input[77], output[77];
    -        myCopyMemory( output, input, 77 );
    -        TS_ASSERT_SAME_DATA( input, output, 77 );
    -     }
    -     
    -
    - -

    3.1.5 TS_ASSERT_DELTA

    - -

    - -

    Similar to TS_ASSERT_EQUALS(), this macro -verifies two values are equal up to a delta. -This is basically used for floating-point values. - -

    -     
    -     void testSquareRoot( void )
    -     {
    -        TS_ASSERT_DELTA( squareRoot(4.0), 2.0, 0.00001 );
    -     }
    -     
    -
    - -

    3.1.6 TS_ASSERT_DIFFERS

    - -

    - -

    The opposite of TS_ASSERT_EQUALS(), this macro is used to assert -that two values are not equal. - -

    -     
    -     void testNumberGenerator( void )
    -     {
    -        int first = generateNumber();
    -        int second = generateNumber();
    -        TS_ASSERT_DIFFERS( first, second );
    -     }
    -     
    -
    - -

    3.1.7 TS_ASSERT_LESS_THAN

    - -

    - -

    This macro asserts that the first operand is less than the second. - -

    -     
    -     void testFindLargerNumber( void )
    -     {
    -        TS_ASSERT_LESS_THAN( 23, findLargerNumber(23) );
    -     }
    -     
    -
    - -

    3.1.8 TS_ASSERT_LESS_THAN_EQUALS

    - -

    - - (v3.7.0) -Not surprisingly, this macro asserts that the first operand is less than or equals the second. - -

    -     
    -     void testBufferSize( void )
    -     {
    -        TS_ASSERT_LESS_THAN_EQUALS( bufferSize(), MAX_BUFFER_SIZE );
    -     }
    -     
    -
    - -

    3.1.9 TS_ASSERT_PREDICATE

    - -

    - - (v3.8.2) -This macro can be seen as a generalization of -TS_ASSERT(). It takes as an argument the name of a class, -similar to an STL unary_function, and evaluates -operator(). The advantage this has over -TS_ASSERT() is that you can see the failed value. - -

    -     
    -     class IsPrime
    -     {
    -     public:
    -        bool operator()( unsigned ) const;
    -     };
    -     
    -     // ...
    -     
    -     void testPrimeGenerator( void )
    -     {
    -        TS_ASSERT_PREDICATE( IsPrime, generatePrime() );
    -     }
    -     
    -
    - -

    3.1.10 TS_ASSERT_RELATION

    - -

    - - (v3.8.0) -Closely related to -TS_ASSERT_PREDICATE(), this macro can be seen as a -generalization of TS_ASSERT_EQUALS(), -TS_ASSERT_DIFFERS(), -TS_ASSERT_LESS_THAN() and -TS_ASSERT_LESS_THAN_EQUALS(). It takes as an argument the -name of a class, similar to an STL binary_function, and evaluates -operator(). This can be used to very simply assert comparisons -which are not covered by the builtin macros. - -

    -     
    -     void testGreater( void )
    -     {
    -        TS_ASSERT_RELATION( std::greater<int>, ticketsSold(), 1000 );
    -     }
    -     
    -
    - -

    3.1.11 TS_ASSERT_THROWS and friends

    - -

    - -

    These assertions are used to test whether an expression throws an exception. -TS_ASSERT_THROWS is used when you want to verify the type of exception -thrown, and TS_ASSERT_THROWS_ANYTHING is used to just make sure something -is thrown. As you might have guessed, TS_ASSERT_THROWS_NOTHING asserts -that nothing is thrown. - - (v3.10.0) -TS_ASSERT_THROWS_EQUALS checks the type of the -exception as in TS_ASSERT_THROWS then allows you to compare two -value (one of which will presumably be the caught object). -TS_ASSERT_THROWS_ASSERT is the general case, and allows you to -make any assertion about the thrown value. These macros may seem a -little complicated, but they can be very useful; see below for an -example. - -

    -     
    -     void testFunctionsWhichThrowExceptions( void )
    -     {
    -        TS_ASSERT_THROWS_NOTHING( checkInput(1) );
    -        TS_ASSERT_THROWS( checkInput(-11), std::runtime_error );
    -        TS_ASSERT_THROWS_ANYTHING( thirdPartyFunction() );
    -     
    -        TS_ASSERT_THROWS_EQUALS( validate(), const std::exception &e, 
    -                                 e.what(), "Invalid value" );
    -        TS_ASSERT_THROWS_ASSERT( validate(), const Error &e, 
    -                                 TS_ASSERT_DIFFERS( e.code(), SUCCESS ) );
    -     }
    -     
    -
    - -

    3.1.12 TS_TRACE and TS_WARN

    - -

    - - - (v3.0.1) -TS_WARN just prints out a message, like the -#warning preprocessor directive. I find it very useful for "to -do" items. For example: - -

    -     
    -     void testToDoList( void )
    -     {
    -        TS_WARN( "TODO: Write some tests!" );
    -        TS_WARN( "TODO: Make $$$ fast!" );
    -     }
    -     
    -
    - -

    In the GUI, TS_WARN sets the bar color to yellow (unless it was -already red). - - (v3.9.0) -TS_TRACE is the same, except that it -doesn't change the color of the progress bar. - -

    3.1.13 The ETS_ macros

    - -

    The TS_ macros mentioned above will catch exceptions thrown from tested code -and fail the test, as if you called TS_FAIL(). -Sometimes, however, you may want to catch the exception yourself; when you do, you can -use the ETS_ versions of the macros. - -

    -     
    -     void testInterestingThrower()
    -     {
    -        // Normal way: if an exception is caught we can't examine it
    -        TS_ASSERT_EQUALS( foo(2), 4 );
    -     
    -        // More elaborate way:
    -        try { ETS_ASSERT_EQUALS( foo(2), 4 ); } 
    -        catch( const BadFoo &e ) { TS_FAIL( e.bar() ); }
    -     }
    -     
    -
    - -

    3.1.14 The TSM_ macros

    - -

    Sometimes the default output generated by the ErrorPrinter doesn't give you enough -information. This often happens when you move common test functionality to helper functions -inside the test suite; when an assertion fails, you do not know its origin. - -

    In the example below (which is the file sample/MessageTest.h from the CxxTest distribution), -we need the message feature to know which invocation of checkValue() failed: - -

    -     
    -     class MessageTest : public CxxTest::TestSuite
    -     {
    -     public:
    -        void testValues()
    -        {
    -           checkValue( 0, "My hovercraft" );
    -           checkValue( 1, "is full" );
    -           checkValue( 2, "of eels" );
    -        }
    -     
    -        void checkValue( unsigned value, const char *message )
    -        {
    -           TSM_ASSERT( message, value );
    -           TSM_ASSERT_EQUALS( message, value, value * value );
    -        }
    -     };
    -     
    -
    - -
    3.1.14.1 The ETSM_ macros
    - -

    Note: As with normal asserts, all TSM_ macros have their -non-exception-safe counterparts, the ETSM_ macros. - -

    3.2 Running the samples

    - -

    - -

    CxxTest comes with some samples in the sample/ subdirectory of -the distribution. If you look in that directory, you will see three -Makefiles: Makefile.unix, Makefile.msvc and -Makefile.bcc32 which are for Linux/Unix, MS Visual C++ and -Borland C++, repectively. These files are provided as a starting point, -and some options may need to be tweaked in them for your system. - -

    If you are running under Windows, a good guess would be to run -nmake -fMakefile.msvc run_win32 (you may need to run -VCVARS32.BAT first). Under Linux, make --fMakefile.unix run_x11 should probably work. - -

    3.3 Test fixtures

    - -

    When you have several test cases for the same module, -you often find that all of them start with more or less -the same code--creating objects, files, inputs, etc. -They may all have a common ending, too--cleaning up -the mess you left. - -

    You can (and should) put all this code in a common place by overriding -the virtual functions TestSuite::setUp() and -TestSuite::tearDown(). setUp() will -then be called before each test, and tearDown() -after each test. - -

    -     
    -     class TestFileOps : public CxxTest::TestSuite 
    -     {
    -     public:
    -        void setUp() { mkdir( "playground" ); }
    -        void tearDown() { system( "rm -Rf playground"); }
    -     
    -        void testCreateFile()
    -        {
    -           FileCreator fc( "playground" );
    -           fc.createFile( "test.bin" );
    -           TS_ASSERT_EQUALS( access( "playground/test.bin", 0 ), 0 );
    -        }
    -     };
    -     
    -
    - -

    Note new users: This is probably the single most important -feature to use when your tests become non-trivial. - -

    3.3.1 Test suite level fixtures

    - -

    setUp()/tearDown() are executed around each test case. If -you need a fixture on the test suite level, i.e. something that gets -constructed once before all the tests in the test suite are run, see -Dynamically creating test suites below. - -

    3.4 Integrating with your build environment

    - -

    It's very hard to maintain your tests if you have to generate, compile and run the test runner -manually all the time. -Fortunately, that's why we have build tools! - -

    3.4.1 Overview

    - -

    Let's assume you're developing an application. -What I usually do is the following: -

      -
    • Split the application into a library and a main module that just calls - the library classes. - This way, the test runner will be able to access all your classes through - the library. -
    • Create another application (or target, or project, or whatever) for the test runner. - Make the build tool generate it automatically. -
    • For extra points, make the build tool run the tests automatically. -
    - -

    3.4.2 Actually doing it

    - -

    Unfortunately, there are way too many different build tools and IDE's for me -to give ways to use CxxTest with all of them. - -

    I will try to outline the usage for some cases. - -

    3.4.2.1 Using Makefiles
    - -

    Generating the tests with a makefile is pretty straightforward. -Simply add rules to generate, compile and run the test runner. - -

    -     
    -     all: lib run_tests app
    -     
    -     # Rules to build your targets
    -     lib: ...
    -     
    -     app: ...
    -     
    -     # A rule that runs the unit tests
    -     run_tests: runner
    -             ./runner
    -     
    -     # How to build the test runner
    -     runner: runner.cpp lib
    -             g++ -o $@ $^
    -     
    -     # How to generate the test runner
    -     runner.cpp: SimpleTest.h ComplicatedTest.h
    -              cxxtestgen.pl -o $@ --error-printer $^
    -     
    -
    - -
    3.4.2.2 Using Cons
    - - Cons is a powerful and -versatile make replacement which uses Perl scripts instead of Makefiles. - -

    See sample/Construct in the CxxTest distribution for an example of building CxxTest test runners -with Cons. - -

    3.4.2.3 Using Microsoft Visual Studio
    - -

    I have tried several ways to integrate CxxTest with visual studio, none of -which is perfect. Take a look at sample/msvc in the distribution -to see the best solution I'm aware of. Basically, the workspace has three -projects: - -

      -
    • The project CxxTest_3_Generate runs cxxtestgen. - -
    • The project CxxTest_2_Build compiles the generated file. - -
    • The project CxxTest_1_Run runs the tests. -
    - -

    This method certainly works, and the test results are conveniently -displayed as compilation errors and warnings (for -TS_WARN()). However, there are still a few things missing; -to integrate this approach with your own project, you usually need to -work a little bit and tweak some makefiles and project options. I have -provided a small script in sample/msvc/FixFiles.bat to automate -some of the process. - -

    3.4.2.4 Using Microsoft Windows DDK
    - -

    Unit testing for device drivers?! Why not? -And besides, the build utility can also be used to build -user-mode application. - -

    To use CxxTest with the build utility, -you add the generated tests file as an extra dependency -using the NTBUILDTARGET0 macro and the Makefile.inc -file. - -

    You can see an example of how to do this in the CxxTest distribution -under sample/winddk. - -

    3.5 Graphical user interface

    - -

    - -

    There are currently three GUIs implemented: native Win32, native X11 and -Qt. To use this feature, just specify --gui=X11Gui, ---gui=Win32Gui or --gui=QtGui as a parameter for -cxxtestgen (instead of e.g. --error-printer). A -progress bar is displayed, but the results are still written to standard -output, where they can be processed by your IDE (e.g. Emacs or Visual -Studio). The default behavior of the GUI is to close the window after -the last test. - -

    Note that whatevr GUI you use, you can combine it with the ---runner option to control the formatting of the text output, -e.g. Visual Studio likes it better if you use ---runner=ParenPrinter. - -

    3.5.1 Starting the GUI minimized

    - -

    If you run the generated Win32 or Qt GUIs with the command line --minimized, the test window will start minimized (iconified) -and only pop up if there is an error (the bar turns red). This is useful -if you find the progress bar distracting and only want to check it if -something happens. - -

    3.5.2 Leaving the GUI open

    - -

    The Win32 GUI accepts the -keep which instructs it to leave the -window open after the tests are done. This allows you to see how many -tests failed and how much time it took. - -

    3.5.3 Screenshots!

    - -

    As with any self-respecting GUI application, here are some screenshots for -you to enjoy: - -

      - -
    • Using the Qt GUI on Linux (with the WindowMaker window manager): -
      qt.png
      -

      -

    • Using the Win32 GUI on Windows 98: -
      win32.png
      -

      -

    • Using the X11 GUI (with the venerable TWM): -
      x11.png
      -

      -

    • And of course, no GUI is complete without the ability to mess around with -its appearance: -
      qt2.png
      -

      -

      Ahhh. Nothing like a beautiful user interface. - -

    - -

    4 Advanced topics

    - -

    Topics in this section are more technical, and you probably won't find them -interesting unless you need them. - -

    4.1 Aborting tests after failures

    - -

    Usually, when a TS_ASSERT_* macro fails, CxxTest moves on to the -next line. In many cases, however, this is not the desired behavior. -Consider the following code: - -

    -     
    -     void test_memset()
    -     {
    -        char *buffer = new char[1024];
    -        TS_ASSERT( buffer );
    -        memset( buffer, 0, 1024 ); // But what if buffer == 0?
    -     }
    -     
    -
    - -

    If you have exception handling enabled, you can make CxxTest exit each -test as soon as a failure occurs. To do this, you need to define -CXXTEST_ABORT_TEST_ON_FAIL before including the CxxTest -headers. This can be done using the --abort-on-fail -command-line option or in a template file; see -sample/aborter.tpl in the distribution. Note that if CxxTest -doesn't find evidence of exception handling when scanning your files, -this feature will not work. To overcome this, use the ---have-eh command-line option. - -

    4.1.1 Controlling this behavior at runtime

    - - (v3.8.5) -In some scenarios, you may want some tests to abort on -failed assertions and others to continue. To do this you use the ---abort-on-fail option and call the function -CxxTest::setAbortTestOnFail( bool ) to change the runtime -behavior. This flag is reset (normally, to true) after each -test, but you can set it in your test suite's setUp() function to -modify the behavior for all tests in a suite. - - (v3.9.0) -Note that this behavior is available whenever you have -exception handling (--have-eh or CXXTEST_HAVE_EH); all ---abort-on-fail does is set the default to true. - -

    4.2 Commenting out tests

    - -

    CxxTest does a very simple analysis of the input files, which is sufficient in most cases. -This means, for example, that you can't indent you test code in "weird" ways. - -

    A slight inconvenience arises, however, when you want to comment out -tests. Commenting out the tests using C-style comments or the -preprocessor will not work: - -

    -     
    -     class MyTest : public CxxTest::TestSuite
    -     {
    -     public:
    -     /*
    -        void testCommentedOutStillGetsCalled()
    -        {
    -        }
    -     */
    -     
    -     #if 0
    -        void testMarkedOutStillGetsCalled()
    -        {
    -        }
    -     #endif
    -     };
    -     
    -
    - - (v3.10.0) -If you need to comment out tests, use C++-style -comments. Also, if you just don't want CxxTest to run a specific test -function, you can temporarily change its name, e.g. by prefixing it with -x: - -
    -     
    -     class MyTest : public CxxTest::TestSuite
    -     {
    -     public:
    -     // void testFutureStuff()
    -     // {
    -     // }
    -     
    -        void xtestFutureStuff()
    -        {
    -        }
    -     };
    -     
    -
    - -

    4.3 Comparing equality for your own types

    - -

    You may have noticed that TS_ASSERT_EQUALS() only works for built-in -types. -This is because CxxTest needs a way to compare object and to convert them to strings, -in order to print them should the test fail. - -

    If you do want to use TS_ASSERT_EQUALS() on your own data types, -this is how you do it. - -

    4.3.1 The equality operator

    - -

    First of all, don't forget to implement the equality operator (operator==()) -on your data types! - -

    4.3.2 Value traits

    - -

    Since CxxTest tries not to rely on any external library (including the standard library, -which is not always available), conversion from arbitrary data types to strings -is done using value traits. - -

    For example, to convert an integer to a string, CxxTest does the following actions: -

      -
    • int i = value to convert; -
    • CxxTest::ValueTraits<int> converter(i); -
    • string = converter.asString(); -
    - -

    CxxTest comes with predefined ValueTraits for int, -char, dobule etc. in cxxtest/ValueTraits.h in the -cxxtest-selftest archive. - -

    4.3.3 Unknown types

    - -

    Obviously, CxxTest doesn't "know" about all possible types. -The default ValueTraits class for unknown types dumps up to 8 bytes of the value in hex format. - -

    For example, the following code -

    -     
    -     #include <cxxtest/TestSuite.h>
    -     
    -     class TestMyData : public CxxTest::TestSuite 
    -     {
    -     public:
    -        struct Data
    -        {
    -           char data[3];
    -        };
    -     
    -        void testCompareData()
    -        {
    -           Data x, y;
    -           memset( x.data, 0x12, sizeof(x.data) );
    -           memset( y.data, 0xF6, sizeof(y.data) );
    -           TS_ASSERT_EQUALS( x, y );
    -        }
    -     };
    -     
    -
    - would output -
    -     
    -     Running 1 test.
    -     TestMyData.h:16: Expected (x == y), found ({ 12 12 12 } != { F6 F6 F6 })
    -     Failed 1 of 1 test
    -     Success rate: 0%
    -     
    -
    - -

    4.3.4 Enumeration traits

    - - (v3.10.0) -CxxTest provides a simple way to define value traits for -your enumeration types, which is very handy for things like status -codes. To do this, simply use CXXTEST_VALUE_TRAITS as in the -following example: - -
    -     
    -     enum Status { STATUS_IDLE, STATUS_BUSY, STATUS_ERROR };
    -     
    -     CXXTEST_ENUM_TRAITS( Status,
    -                          CXXTEST_ENUM_MEMBER( STATUS_IDLE )
    -                          CXXTEST_ENUM_MEMBER( STATUS_BUSY )
    -                          CXXTEST_ENUM_MEMBER( STATUS_ERROR ) );
    -     
    -
    - -

    See sample/EnumTraits.h for a working sample. - -

    4.3.5 Defining new value traits

    - -

    Defining value traits for new (non-enumeration) types is easy. All you -need is to define a way to convert an object of your class to a -string. You can use this example as a possible skeleton: - -

    -     
    -     class MyClass 
    -     {
    -        int _value;
    -     
    -     public:
    -        MyClass( int value ) : _value( value ) {}
    -        int value() const { return _value; }
    -     
    -        // CxxTest requires a copy constructor
    -        MyClass( const MyClass &other ) : _value( other._value ) {}
    -     
    -        // If you want to use TS_ASSERT_EQUALS
    -        bool operator== ( const MyClass &other ) const { return _value == other._value; }
    -     
    -        // If you want to use TS_ASSERT_LESS_THAN
    -        bool operator== ( const MyClass &other ) const { return _value < other._value; }
    -     };
    -     
    -     #ifdef CXXTEST_RUNNING
    -     #include <cxxtest/ValueTraits.h>
    -     #include <stdio.h>
    -     
    -     namespace CxxTest 
    -     {
    -        CXXTEST_TEMPLATE_INSTANTIATION
    -        class ValueTraits<MyClass> 
    -        {
    -           char _s[256];
    -     
    -        public:
    -           ValueTraits( const MyClass &m ) { sprintf( _s, "MyClass( %i )", m.value() ); }
    -           const char *asString() const { return _s; }
    -        };
    -     };
    -     #endif // CXXTEST_RUNNING
    -     
    -
    - -
    4.3.5.1 Defining value traits for template classes
    - -

    A simple modification to the above scheme allows you to define value -traits for your template classes. Unfortunately, this syntax (partial -template specialization) is not supported by some popular C++ compilers. -Here is an example: - -

    -     
    -     template<class T>
    -     class TMyClass
    -     {
    -        T _value;
    -     
    -     public:
    -        TMyClass( const T &value ) : _value( value );
    -        const T &value() const { return _value; }
    -     
    -        // CxxTest requires a copy constructor
    -        TMyClass( const TMyClass<T> &other ) : _value( other._value ) {}
    -        
    -        // If you want to use TS_ASSERT_EQUALS
    -        bool operator== ( const TMyClass<T> &other ) const { return _value == other._value; }
    -     };
    -     
    -     #ifdef CXXTEST_RUNNING
    -     #include <cxxtest/ValueTraits.h>
    -     #include <typeinfo>
    -     #include <sstream>
    -     
    -     namespace CxxTest 
    -     {
    -        template<class T>
    -        class ValueTraits< TMyClass<T> > 
    -        {
    -           std::ostringstream _s;
    -     
    -        public:
    -           ValueTraits( const TMyClass<T> &t ) 
    -              { _s << typeid(t).name() << "( " << t.value() << " )"; }
    -           const char *asString() const { return _s.str().c_str(); }
    -        };
    -     };
    -     #endif // CXXTEST_RUNNING
    -     
    -
    - -

    4.3.6 Overriding the default value traits

    - - (v2.8.2) -If you don't like the way CxxTest defines the default ValueTraits, -you can override them by #define-ing CXXTEST_USER_VALUE_TRAITS; -this causes CxxTest to omit the default definitions, and from there on you are -free to implement them as you like. - -

    You can see a sample of this technique in test/UserTraits.tpl in -the cxxtest-selftest archive. - -

    4.4 Global Fixtures

    - - (v3.5.1) -The setUp() and tearDown() functions allow -to to have code executed before and after each test. What if you want -some code to be executed before all tests in all test suites? -Rather than duplicate that code, you can use global fixtures. -These are basically classes that inherit from -CxxTest::GlobalFixture. All objects of such classes are -automatically notified before and after each test case. It is best to -create them as static objects so they get called right from the start. -Look at test/GlobalFixtures.h in the cxxtest-selftest -archive. - -

    Note: Unlike setUp() and tearDown() in -TestSuite, global fixtures should return a bool value to -indicate success/failure. - -

    4.4.1 World fixtures

    - - (v3.8.1) -CxxTest also allows you to specify code which is executed -once at the start of the testing process (and the corresponding cleanup -code). To do this, create (one or more) global fixture objects and -implement setUpWorld()/tearDownWorld(). For an example, -see test/WorldFixtures.h in the cxxtest-selftest archive. - -

    4.5 Mock Objects

    - - (v3.10.0) -Mock Objects are a very useful testing tool, which -consists (in a nutshell) of passing special objects to tested code. For -instance, to test a class that implements some protocol over TCP, you -might have it use an abstract ISocket interface and in the tests -pass it a MockSocket object. This MockSocket object can -then do anything your tests find useful, e.g. keep a log of all data -"sent" to verify later. - -

    So far, so good. But the problem when developing in C/C++ is that your -code probably needs to call global functions which you cannot -override. Just consider any code which uses fopen(), -fwrite() and fclose(). It is not very elegant to have -this code actually create files while being tested. Even more -importantly, you (should) want to test how the code behaves when "bad" -things happen, say when fopen() fails. Although for some cases -you can cause the effects to happen in the test code, this quickly -becomes "hairy" and unmaintainable. - -

    CxxTest solves this problem by allowing you to override any global -function while testing. Here is an outline of how it works, before we -see an actual example: -

      - -
    • For each function you want to override, you use the macro -CXXTEST_MOCK_GLOBAL to "prepare" the function (all is explained -below in excruciating detail). - -
    • In the tested code you do not call the global functions directly; -rather, you access them in the T (for Test) namespace. For -instance, your code needs to call T::fopen() instead of -fopen(). This is the equivalent of using abstract interfaces -instead of concrete classes. - -
    • You link the "real" binary with a source file that implements -T::fopen() by simply calling the original fopen(). - -
    • You link the test binary with a source file that implements -T::fopen() by calling a mock object. - -
    • To test, you should create a class that inherits T::Base_fopen -and implement its fopen() function. Simply by creating an object -of this class, calls made to T::fopen() will be redirected to it. - -
    - -

    This may seem daunting at first, so let us work our way through a simple -example. Say we want to override the well known standard library -function time(). - -

      - -
    • Prepare a header file to be used by both the real and test code. -
      -          
      -          // T/time.h
      -          #include <time.h>
      -          #include <cxxtest/Mock.h>
      -          
      -          CXXTEST_MOCK_GLOBAL( time_t,        /* Return type          */
      -                               time,          /* Name of the function */
      -                               ( time_t *t ), /* Prototype            */
      -                               ( t )          /* Argument list        */ );
      -          
      -
      - -
    • In our tested code, we now include the special header instead of the -system-supplied one, and call T::time() instead of time(). -
      -          
      -          // code.cpp
      -          #include <T/time.h>
      -          
      -          int generateRandomNumber()
      -          {
      -              return T::time( NULL ) * 3;
      -          }
      -          
      -
      - -
    • We also need to create a source file that implements T::time() by -calling the real function. This is extremely easy: just define -CXXTEST_MOCK_REAL_SOURCE_FILE before you include the header file: -
      -          
      -          // real_time.cpp
      -          #define CXXTEST_MOCK_REAL_SOURCE_FILE
      -          #include <T/time.h>
      -          
      -
      - -
    • Before we can start testing, we need a different implementation of -T::time() for our tests. This is just as easy as the previous -one: -
      -          
      -          // mock_time.cpp
      -          #define CXXTEST_MOCK_TEST_SOURCE_FILE
      -          #include <T/time.h>
      -          
      -
      - -
    • Now comes the fun part. In our test code, all we need to do is create a -mock, and the tested code will magically call it: -
      -          
      -          // TestRandom.h
      -          #include <cxxtest/TestSuite.h>
      -          #include <T/time.h>
      -          
      -          class TheTimeIsOne : public T::Base_time
      -          {
      -          public:
      -              time_t time( time_t * ) { return 1; }
      -          };
      -          
      -          class TestRandom : public CxxTest::TestSuite
      -          {
      -          public:
      -              void test_Random()
      -              {
      -                  TheTimeIsOne t;
      -                  TS_ASSERT_EQUALS( generateRandomNumber(), 3 );
      -              }
      -          };
      -          
      -
      - -
    - -

    4.5.1 Actually doing it

    - -

    I know that this might seem a bit heavy at first glance, but once you -start using mock objects you will never go back. The hardest part may -be getting this to work with your build system, which is why I have -written a simple example much like this one in sample/mock, which -uses GNU Make and G++. - -

    4.5.2 Advanced topic with mock functions

    - -
    4.5.2.1 Void functions
    - -

    Void function are a little different, and you use -CXXTEST_MOCK_VOID_GLOBAL to override them. This is identical to -CXXTEST_MOCK_GLOBAL except that it doesn't specify the return -type. Take a look in sample/mock/T/stdlib.h for a demonstation. - -

    4.5.2.2 Calling the real functions while testing
    - -

    From time to time, you might want to let the tested code call the real -functions (while being tested). To do this, you create a special mock -object called e.g. T::Real_time. While an object of this class -is present, calls to T::time() will be redirected to the real -function. - -

    4.5.2.3 When there is no real function
    - -

    Sometimes your code needs to call functions which are not available when -testing. This happens for example when you test driver code using a -user-mode test runner, and you need to call kernel functions. You can -use CxxTest's mock framework to provide testable implementations for the -test code, while maintaing the original functions for the real code. -This you do with CXXTEST_SUPPLY_GLOBAL (and -CXXTEST_SUPPLY_VOID_GLOBAL). For example, say you want to supply -your code with the Win32 kernel function IoCallDriver: -

    -     
    -     CXXTEST_SUPPLY_GLOBAL( NTSTATUS,                /* Return type */
    -                            IoCallDriver,            /* Name        */
    -                            ( PDEVICE_OBJECT Device, /* Prototype   */
    -                              PIRP Irp ),
    -                            ( Device, Irp )          /* How to call */ );
    -     
    -
    - The tested code (your driver) can now call IoCallDriver() -normally (no need for T::), and the test code uses -T::Base_IoCallDriver as with normal mock objects. - -

    Note: Since these macros can also be used to actually declare -the function prototypes (e.g. in the above example you might not be able -to include the real <ntddk.h> from test code), they also have an -extern "C" version which declares the functions with C -linkage. These are CXXTEST_SUPPLY_GLOBAL_C and -CXXTEST_SUPPLY_GLOBAL_VOID_C. - -

    4.5.2.4 Functions in namespaces
    - -

    Sometimes the functions you want to override are not in the global -namespace like time(): they may be global functions in other -namespaces or even static class member functions. The default mock -implementation isn't suitable for these. For them, you can use the -generic CXXTEST_MOCK, which is best explained by example. Say you -have a namespace Files, and you want to override the function -bool Files::FileExists( const String &name ), so that the mock -class will be called T::Base_Files_FileExists and the function to -implement would be fileExists. You would define it thus (of -course, you would normally want the mock class name and member function -to be the same as the real function): -

    -     
    -     CXXTEST_MOCK( Files_FileExists,       /* Suffix of mock class  */
    -                   bool,                   /* Return type           */
    -                   fileExists,             /* Name of mock member   */
    -                   ( const String &name ), /* Prototype             */
    -                   Files::FileExists,      /* Name of real function */
    -                   ( name )                /* Parameter list        */ );
    -     
    -
    - Needless to say, there is also CXXTEST_MOCK_VOID for void functions. - -

    There is also an equivalent version for CXXTEST_SUPPLY_GLOBAL, as -demonstrated by another function from the Win32 DDK: -

    -     
    -     CXXTEST_SUPPLY( AllocateIrp,         /* => T::Base_AllocateIrp */
    -                     PIRP,                /* Return type            */
    -                     allocateIrp,         /* Name of mock member    */
    -                     ( CCHAR StackSize ), /* Prototype              */
    -                     IoAllocateIrp,       /* Name of real function  */
    -                     ( StackSize )        /* Parameter list         */ );
    -     
    -
    - And, with this macro you have CXXTEST_SUPPLY_VOID and of course -CXXTEST_SUPPLY_C and CXXTEST_SUPPLY_VOID_C. - -
    4.5.2.5 Overloaded functions
    - -

    If you have two or more global functions which have the same name, you -cannot create two mock classes with the same name. The solution is to -use the general CXXTEST_MOCK/CXXTEST_MOCK_VOID as above: -just give the two mock classes different names. - -

    4.5.2.6 Changing the mock namespace
    - -

    Finally, if you don't like or for some reason can't use the T:: -namespace for mock functions, you can change it by defining -CXXTEST_MOCK_NAMESPACE. Have fun. - -

    4.6 Test Listeners and Test Runners

    - -

    A TestListener is a class that receives notifications about -the testing process, notably which assertions failed. CxxTest defines -a standard test listener class, ErrorPrinter, which is -responsible for printing the dots and messages seen above. When the -test runners generated in the examples run, they create an -ErrorPrinter and pass it to -TestRunner::runAllTests(). As you might have guessed, this -functions runs all the test you've defined and reports to the -TestListener it was passed. - -

    4.6.1 Other test listeners

    - -

    If you don't like or can't use the ErrorPrinter, you can use -any other test listener. -To do this you have to omit the --error-printer, --runner= -or --gui= switch when generating the tests file. -It is then up to you to write the main() function, using the -test listener of your fancy. - -

    4.6.1.1 The stdio printer
    - -

    If the ErrorPrinter's usage of std::cout clashes -with your environment or is unsupported by your compiler, don't dispair! -You may still be able to use the StdioPrinter, which does the -exact same thing but uses good old printf(). - -

    To use it, invoke cxxtestgen.pl with the --runner=StdioPrinter option. - - (v3.8.5) -Note: cxxtest/StdioPrinter makes -reference to stdout as the default output stream. In some -environments you may have <stdio.h> but not stdout, which -will cause compiler errors. To overcome this problem, use ---runner=StdioFilePrinter, which is exactly the same as ---runner=StdioPrinter, but with no default output stream. - -

    4.6.1.2 The Yes/No runner
    - -

    As an example, CxxTest also provides the simplest possible test listener, -one that just reports if there were any failures. -You can see an example of using this listener in sample/yes_no_runner.cpp. - -

    4.6.1.3 Template files
    - -

    To use you own test runner, or to use the supplied ones in different ways, you can use -CxxTest template files. These are ordinary source files with the embedded "command" -<CxxTest world> which tells cxxtestgen.pl to insert the world definition -at that point. You then specify the template file using the --template option. - -

    See samples/file_printer.tpl for an example. - -

    Note: CxxTest needs to insert certain definitions and -#include directives in the runner file. It normally does that -before the first #include <cxxtest/*.h> found in the template -file. If this behvaior is not what you need, use the "command" -<CxxTest preamble>. See test/preamble.tpl in the -cxxtest-selftest archive for an example of this. - -

    4.7 Dynamically creating test suites

    - -

    -Usually, your test suites are instantiated statically in the tests file, i.e. say you -defined class MyTest : public CxxTest::TestSuite, the generated file will -contain something like static MyTest g_MyTest;. - -

    If, however, your test suite must be created dynamically (it may need a constructor, -for instance), CxxTest doesn't know how to create it unless you tell it how. -You do this by writing two static functions, createSuite() and destroySuite(). - -

    See sample/CreatedTest.h for a demonstration. - -

    4.8 Static initialization

    - - (v3.9.0) -The generated runner source file depends quite -heavily on static initialization of the various "description" object -used to run your tests. If your compiler/linker has a problem with this -approach, use the --no-static-init option. - -

    Appendix A Command line options

    - -

    Here are the different command line options for cxxtestgen: - -

    A.1 --version

    - - (v3.7.1) -Specify --version or -v to see the version of CxxTest you are using. - -

    A.2 --output

    - -

    Specify --output=FILE or -o FILE to determine the output file name. - -

    A.3 --error-printer

    - -

    This option creates a test runner which uses the standard error printer class. - -

    A.4 --runner

    - -

    Specify --runner=CLASS to generate a test -runner that #includes <cxxtest/CLASS.h> and uses -CxxTest::CLASS as the test runner. - -

    The currently available runners are: -

    -
    --runner=ErrorPrinter -
    This is the standard error printer, which formats its output to std::cout. - -
    --runner=ParenPrinter -
    Identical to ErrorPrinter except that it prints line numbers in parantheses. -This is the way Visual Studio expects it. - -
    --runner=StdioPrinter -
    The same as ErrorPrinter except that it uses printf -instead of cout. - -
    --runner=YesNoRunner -
    This runner doesn't produce any output, merely returns a true/false result. - -
    - -

    A.5 --gui

    - -

    Specify --gui=CLASS to generate a test runner that -#includes <cxxtest/CLASS.h> and uses CxxTest::CLASS -to display a graphical user interface. This option can be combined with -the --runner option to determine the text-mode output format. -The default is the standard error printer. - -

    There are three different GUIs: -

    -
    --gui=Win32Gui -
    A native Win32 GUI. It has been tested on Windows 98, 2000 and XP and -should work unmodified on other 32-bit versions of Windows. - -
    --gui=X11Gui -
    A native XLib GUI. This GUI is very spartan and should work on any X server. - -
    --gui=QtGui -
    A GUI that uses the Qt library from Troll. It has been tested with Qt versiond 2.2.1 and 3.0.1. -
    - -

    A.6 --include

    - - (v3.5.1) -If you specify --include=FILE, cxxtestgen will add -#include "FILE" to the runner before including any other header. -This allows you to define things that modify the behavior of CxxTest, -e.g. your own ValueTraits. - -

    Note: If you want the runner to #inculde <FILE>, specify -it on the command line, e.g. --include=<FILE>. You will most -likely need to use shell escapes, e.g. "--include=<FILE>" or ---include=\<FILE\>. - -

    Examples: --include=TestDefs.h or --include=\<GlobalDefs.h\>. - -

    A.7 --template

    - -

    Specify --template=FILE to use FILE as a template file. -This is for cases for which --runner and/or --include -are not enough. One example is the Windows DDK; see -sample/winddk in the distribution. - -

    A.8 --have-eh

    - - (v2.8.4) -cxxtestgen will scan its input files for uses of exception -handling; if found, the TS_ macros will catch exceptions, -allowing the testing to continue. Use --have-eh to tell -cxxtestgen to enable that functionality even if exceptions -are not used in the input files. - -

    A.9 --no-eh

    - - (v3.8.5) -If you want cxxtestgen to ignore what may look as uses of -exception handling in your test files, specify --no-eh. - -

    A.10 --have-std

    - - (v3.10.0) -Same as --have-eh but for the standard library; -basically, if you use this flag, CxxTest will print the values of -std::string. - -

    Note: If you reference the standard library anywhere in your -test files, CxxTest will (usually) recognize it and automatically define -this. - -

    A.11 --no-std

    - - (v3.10.0) -The counterpart to --have-std, this tells -CxxTest to ignore any evidence it finds for the std:: namespace -in your code. Use it if your environment does not support std:: -but cxxtestgen thinks it does. - -

    A.12 --longlong

    - - (v3.6.0) -Specify --longlong=TYPE to have CxxTest recognize TYPE -as "long long" (e.g. --longlong=__int64). If you specify -just --longlong= (no type), CxxTest will use the default type -name of long long. - -

    A.13 --abort-on-fail

    - - (v2.8.2) -This useful option tells CxxTest to abort the current test when any -TS_ASSERT macro has failed. - -

    A.14 --part

    - - (v3.5.1) -This option tells CxxTest now to write the CxxTest globals in the output -file. Use this to link together more than one generated file. - -

    A.15 --root

    - - (v3.5.1) -This is the counterpart of --part; it makes sure that the -Cxxtest globals are written to the output file. If you specify this -option, you can use cxxtestgen without any input files to -create a file that hold only the "root" runner. - -

    A.16 --no-static-init

    - - (v3.9.0) -Use this option if you encounter problems with the static -initializations in the test runner. - -

    Appendix B Controlling the behavior of CxxTest

    - -

    Here are various #defines you can use to modify how CxxTest -works. You will need to #define them before including any -of the CxxTest headers, so use them in a template file or with the ---include option. - -

    B.1 CXXTEST_HAVE_STD

    - -

    This is equivalent to the --have-std option. - -

    B.2 CXXTEST_HAVE_EH

    - -

    This is equivalent to the --have-eh option. - -

    B.3 CXXTEST_ABORT_TEST_ON_FAIL

    - - (v2.8.0) -This is equivalent to the --abort-on-fail option. - -

    B.4 CXXTEST_USER_VALUE_TRAITS

    - -

    This tells CxxTest you wish to define you own ValueTraits. It will only -declare the default traits, which dump up to 8 bytes of the data as hex -values. - -

    B.5 CXXTEST_OLD_TEMPLATE_SYNTAX

    - -

    Some compilers (e.g. Borland C++ 5) don't support the standard way of -instantiating template classes. Use this define to overcome the problem. - -

    B.6 CXXTEST_OLD_STD

    - -

    Again, this is used to support pre-std:: standard libraries. - -

    B.7 CXXTEST_MAX_DUMP_SIZE

    - -

    This sets the standard maximum number of bytes to dump if -TS_ASSERT_SAME_DATA() fails. The default is 0, meaning -no limit. - -

    B.8 CXXTEST_DEFAULT_ABORT

    - -

    This sets the default value of the dynamic "abort on fail" flag. Of -course, this flag is only used when "abort on fail" is enabled. - -

    B.9 CXXTEST_LONGLONG

    - -

    This is equivalent to --longlong. - -

    Appendix C Runtime options

    - -

    The following functions can be called during runtime (i.e. from your -tests) to control the behavior of CxxTest. They are reset to their -default values after each test is executed (more precisely, after -tearDown() is called). Consequently, if you set them in the -setUp() function, they will be valid for the entire test suite. - -

    C.1 setAbortTestOnFail( bool )

    - -

    This only works when you have exception handling. It can be used to -tell CxxTest to temporarily change its behavior. The default value of -the flag is false, true if you set --abort-on-fail, -or CXXTEST_DEFAULT_ABORT if you #define it. - -

    C.2 setMaxDumpSize( unsigned )

    - -

    This temporarily sets the maximum number of bytes to dump if -TS_ASSERT_SAME_DATA() fails. The default is 0, meaning -no limit, or CXXTEST_MAX_DUMP_SIZE if you #define it. - -

    Appendix D Version history

    - -
      -
    • Version 3.10.0 (2004-11-20) -
        -
      • Added mock framework for global functions -
      • Added TS_ASSERT_THROWS_ASSERT and TS_ASSERT_THROWS_EQUALS -
      • Added CXXTEST_ENUM_TRAITS -
      • Improved support for STL classes (vector, map etc.) -
      • Added support for Digital Mars compiler -
      • Reduced root/part compilation time and binary size -
      • Support C++-style commenting of tests -
      -
    • Version 3.9.1 (2004-01-19) -
        -
      • Fixed small bug with runner exit code -
      • Embedded test suites are now deprecated -
      -
    • Version 3.9.0 (2004-01-17) -
        -
      • Added TS_TRACE -
      • Added --no-static-init -
      • CxxTest::setAbortTestOnFail() works even without --abort-on-fail -
      -
    • Version 3.8.5 (2004-01-08) -
        -
      • Added --no-eh -
      • Added CxxTest::setAbortTestOnFail() and CXXTEST_DEFAULT_ABORT -
      • Added CxxTest::setMaxDumpSize() -
      • Added StdioFilePrinter -
      -
    • Version 3.8.4 (2003-12-31) -
        -
      • Split distribution into cxxtest and cxxtest-selftest -
      • Added sample/msvc/FixFiles.bat -
      -
    • Version 3.8.3 (2003-12-24) -
        -
      • Added TS_ASSERT_PREDICATE -
      • Template files can now specify where to insert the preamble -
      • Added a sample Visual Studio workspace in sample/msvc -
      • Can compile in MSVC with warning level 4 -
      • Changed output format slightly -
      -
    • Version 3.8.1 (2003-12-21) -
        -
      • Fixed small bug when using multiple --part files. -
      • Fixed X11 GUI crash when there's no X server. -
      • Added GlobalFixture::setUpWorld()/tearDownWorld() -
      • Added leaveOnly(), activateAllTests() and sample/only.tpl -
      • Should now run without warnings on Sun compiler. -
      -
    • Version 3.8.0 (2003-12-13) -
        -
      • Fixed bug where Root.cpp needed exception handling -
      • Added TS_ASSERT_RELATION -
      • TSM_ macros now also tell you what went wrong -
      • Renamed Win32Gui::free() to avoid clashes -
      • Now compatible with more versions of Borland compiler -
      • Improved the documentation -
      -
    • Version 3.7.1 (2003-09-29) -
        -
      • Added --version -
      • Compiles with even more exotic g++ warnings -
      • Win32 Gui compiles with UNICODE -
      • Should compile on some more platforms (Sun Forte, HP aCC) -
      -
    • Version 3.7.0 (2003-09-20) -
        -
      • Added TS_ASSERT_LESS_THAN_EQUALS -
      • Minor cleanups -
      -
    • Version 3.6.1 (2003-09-15) -
        -
      • Improved QT GUI -
      • Improved portability some more -
      -
    • Version 3.6.0 (2003-09-04) -
        -
      • Added --longlong -
      • Some portability improvements -
      -
    • Version 3.5.1 (2003-09-03) -
        -
      • Major internal rewrite of macros -
      • Added TS_ASSERT_SAME_DATA -
      • Added --include option -
      • Added --part and --root to enable splitting the test runner -
      • Added global fixtures -
      • Enhanced Win32 GUI with timers, -keep and -title -
      • Now compiles with strict warnings -
      -
    • Version 3.1.1 (2003-08-27) -
        -
      • Fixed small bug in TS_ASSERT_THROWS_*() -
      -
    • Version 3.1.0 (2003-08-23) -
        -
      • Default ValueTraits now dumps value as hex bytes -
      • Fixed double invocation bug (e.g. TS_FAIL(functionWithSideEffects())) -
      • TS_ASSERT_THROWS*() are now "abort on fail"-friendly -
      • Win32 GUI now supports Windows 98 and doesn't need comctl32.lib -
      -
    • Version 3.0.1 (2003-08-07) -
        -
      • Added simple GUI for X11, Win32 and Qt -
      • Added TS_WARN() macro -
      • Removed --exit-code -
      • Improved samples -
      • Improved support for older (pre-std::) compilers -
      • Made a PDF version of the User's Guide -
      -
    • Version 2.8.4 (2003-07-21) -
        -
      • Now supports g++-3.3 -
      • Added --have-eh -
      • Fixed bug in numberToString() -
      -
    • Version 2.8.3 (2003-06-30) -
        -
      • Fixed bugs in cxxtestgen.pl -
      • Fixed warning for some compilers in ErrorPrinter/StdioPrinter -
      • Thanks Martin Jost for pointing out these problems! -
      -
    • Version 2.8.2 (2003-06-10) -
        -
      • Fixed bug when using CXXTEST_ABORT_TEST_ON_FAIL without standard library -
      • Added CXXTEST_USER_TRAITS -
      • Added --abort-on-fail -
      -
    • Version 2.8.1 (2003-01-16) -
        -
      • Fixed charToString() for negative chars -
      -
    • Version 2.8.0 (2003-01-13) -
        -
      • Added CXXTEST_ABORT_TEST_ON_FAIL for xUnit-like behaviour -
      • Added sample/winddk -
      • Improved ValueTraits -
      • Improved output formatter -
      • Started version history -
      -
    • Version 2.7.0 (2002-09-29) -
        -
      • Added embedded test suites -
      • Major internal improvements -
      - -
    - -

    - -

    -

    Table of Contents

    - -
    - - - - diff --git a/cxxtest/docs/index.html b/cxxtest/docs/index.html deleted file mode 100644 index 05ac5b3ba..000000000 --- a/cxxtest/docs/index.html +++ /dev/null @@ -1,56 +0,0 @@ - -CxxTest -

    Introduction

    - -

    CxxTest is a JUnit/CppUnit/xUnit-like framework for C++. - -

    Its advantages over existing alternatives are that it: -

      -
    • Doesn't require RTTI -
    • Doesn't require member template functions -
    • Doesn't require exception handling -
    • Doesn't require any external libraries (including memory management, - file/console I/O, graphics libraries) -
    • Is distributed entirely as a set of header files -
    - -

    This makes it extremely portable and usable. - -

    CxxTest is available under the GNU -Lesser General Public License. - -

    See the user's guide for information. -It is also available as a PDF file. - -

    The version history is available here. - -

    Getting CxxTest

    -You can always get the latest release from -here or -here. - -

    There are several files you can download: -

      -
    • cxxtest-version-1.noarch.rpm -
    • cxxtest-version.tar.gz -
    • cxxtest-version.zip -
    • cxxtest-guide-version.pdf (the user's guide) -
    -Note that, since CxxTest consists entirely of header files, -there is no distinction between source and binary distribution. - -

    There are also files called cxxtest-selftest-*: these -are used (usually by me) to test the portability of CxxTest, so you -can probably do without them. - -

    If you just can't wait for the next release, I sometimes upload betas -to here. - -

    Getting started

    -Get the sources and build the samples in the sample subdirectory. - -
    -

    - SourceForge Logo - - diff --git a/cxxtest/docs/qt.png b/cxxtest/docs/qt.png deleted file mode 100644 index 2c9152b4f..000000000 Binary files a/cxxtest/docs/qt.png and /dev/null differ diff --git a/cxxtest/docs/qt2.png b/cxxtest/docs/qt2.png deleted file mode 100644 index 18b4d0449..000000000 Binary files a/cxxtest/docs/qt2.png and /dev/null differ diff --git a/cxxtest/docs/win32.png b/cxxtest/docs/win32.png deleted file mode 100644 index d99ef69c1..000000000 Binary files a/cxxtest/docs/win32.png and /dev/null differ diff --git a/cxxtest/docs/x11.png b/cxxtest/docs/x11.png deleted file mode 100644 index 665bf3e26..000000000 Binary files a/cxxtest/docs/x11.png and /dev/null differ diff --git a/cxxtest/sample/Construct b/cxxtest/sample/Construct deleted file mode 100644 index b8019616a..000000000 --- a/cxxtest/sample/Construct +++ /dev/null @@ -1,64 +0,0 @@ -# -*- Perl -*- - -# -# This file shows how to use CxxTest with Cons -# - -$env = new cons( CXX => ("$^O" eq 'MSWin32') ? 'cl -nologo -GX' : 'c++', - CPPPATH => '..', - CXXTESTGEN => 'perl -w ../cxxtestgen.pl' ); - -@tests = <*.h>; - -# The error printer is the most basic runner -CxxTestErrorPrinter $env 'error_printer', @tests; - -# You can also specify which runner you want to use -CxxTestRunner $env 'stdio_printer', 'StdioPrinter', @tests; - -# For more control, use template files -CxxTestTemplate $env 'file_printer', 'file_printer.tpl', @tests; - -# Or, you can always separate the tests from the runner -CxxTest $env 'tests.cpp', '', @tests; -Program $env 'yes_no_runner', ('yes_no_runner.cpp', 'tests.cpp'); - - -# -# Here is the code used to build these files -# You can use this in your own Construct files -# - -# cons::CxxTest $env $dst, $options, @srcs -# Generates a CxxTest source file, passing the specified options to cxxtestgen -sub cons::CxxTest($$$@) { - my ($env, $dst, $options, @srcs) = @_; - Command $env $dst, @srcs, "%CXXTESTGEN -o %> ${options} %<"; -} - -# cons::CxxTestTemplate $env $dst, $template, @srcs -# Generates and builds a CxxTest runner using a template file -sub cons::CxxTestTemplate($$$@) { - my ($env, $dst, $template, @srcs) = @_; - my $source = "${dst}.cpp"; - CxxTest $env $source, "--template=${template}", ($template, @srcs); - Program $env $dst, $source; -} - -# cons::CxxTestRunner $env $dst, $runner, @srcs -# Generates and builds a CxxTest runner using the --runner option -sub cons::CxxTestRunner($$$@) { - my ($env, $dst, $runner, @srcs) = @_; - my $source = "${dst}.cpp"; - CxxTest $env $source, "--runner=${runner}", @srcs; - Program $env $dst, $source; -} - -# cons::CxxTestErrorPrinter $env $dst, @srcs -# Generates and builds a CxxTest ErrorPrinter -sub cons::CxxTestErrorPrinter($$@) { - my ($env, $dst, @srcs) = @_; - CxxTestRunner $env $dst, 'ErrorPrinter', @srcs; -} - - diff --git a/cxxtest/sample/CreatedTest.h b/cxxtest/sample/CreatedTest.h deleted file mode 100644 index 84e8ae8a4..000000000 --- a/cxxtest/sample/CreatedTest.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef __CREATEDTEST_H -#define __CREATEDTEST_H - -#include -#include -#include - -// -// This test suite shows what to do when your test case -// class cannot be instantiated statically. -// As an example, this test suite requires a non-default constructor. -// - -class CreatedTest : public CxxTest::TestSuite -{ - char *_buffer; -public: - CreatedTest( unsigned size ) : _buffer( new char[size] ) {} - virtual ~CreatedTest() { delete [] _buffer; } - - static CreatedTest *createSuite() { return new CreatedTest( 16 ); } - static void destroySuite( CreatedTest *suite ) { delete suite; } - - void test_nothing() - { - TS_FAIL( "Nothing to test" ); - } -}; - - -#endif // __CREATEDTEST_H diff --git a/cxxtest/sample/DeltaTest.h b/cxxtest/sample/DeltaTest.h deleted file mode 100644 index 7223c3af2..000000000 --- a/cxxtest/sample/DeltaTest.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __DELTATEST_H -#define __DELTATEST_H - -#include -#include - -class DeltaTest : public CxxTest::TestSuite -{ - double _pi, _delta; - -public: - void setUp() - { - _pi = 3.1415926535; - _delta = 0.0001; - } - - void testSine() - { - TS_ASSERT_DELTA( sin(0.0), 0.0, _delta ); - TS_ASSERT_DELTA( sin(_pi / 6), 0.5, _delta ); - TS_ASSERT_DELTA( sin(_pi / 2), 1.0, _delta ); - TS_ASSERT_DELTA( sin(_pi), 0.0, _delta ); - } -}; - -#endif // __DELTATEST_H diff --git a/cxxtest/sample/EnumTraits.h b/cxxtest/sample/EnumTraits.h deleted file mode 100644 index 1a987318f..000000000 --- a/cxxtest/sample/EnumTraits.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// This is a test of CxxTest's ValueTraits for enumerations. -// -#include - -// -// First define your enumeration -// -enum Answer { - Yes, - No, - Maybe, - DontKnow, - DontCare -}; - -// -// Now make CxxTest aware of it -// -CXXTEST_ENUM_TRAITS( Answer, - CXXTEST_ENUM_MEMBER( Yes ) - CXXTEST_ENUM_MEMBER( No ) - CXXTEST_ENUM_MEMBER( Maybe ) - CXXTEST_ENUM_MEMBER( DontKnow ) - CXXTEST_ENUM_MEMBER( DontCare ) ); - -class EnumTraits : public CxxTest::TestSuite -{ -public: - void test_Enum_traits() - { - TS_FAIL( Yes ); - TS_FAIL( No ); - TS_FAIL( Maybe ); - TS_FAIL( DontKnow ); - TS_FAIL( DontCare ); - TS_FAIL( (Answer)1000 ); - } -}; diff --git a/cxxtest/sample/ExceptionTest.h b/cxxtest/sample/ExceptionTest.h deleted file mode 100644 index 68363c874..000000000 --- a/cxxtest/sample/ExceptionTest.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef __EXCEPTIONTEST_H -#define __EXCEPTIONTEST_H - -#include - -// -// This test suite demonstrates the use of TS_ASSERT_THROWS -// - -class ExceptionTest : public CxxTest::TestSuite -{ -public: - void testAssertion( void ) - { - // This assert passes, since throwThis() throws (Number) - TS_ASSERT_THROWS( throwThis(3), const Number & ); - // This assert passes, since throwThis() throws something - TS_ASSERT_THROWS_ANYTHING( throwThis(-30) ); - // This assert fails, since throwThis() doesn't throw char * - TS_ASSERT_THROWS( throwThis(5), const char * ); - // This assert fails since goodFunction() throws nothing - TS_ASSERT_THROWS_ANYTHING( goodFunction(1) ); - // The regular TS_ASSERT macros will catch unhandled exceptions - TS_ASSERT_EQUALS( throwThis(3), 333 ); - // You can assert that a function throws nothing - TS_ASSERT_THROWS_NOTHING( throwThis(-1) ); - // If you want to catch the exceptions yourself, use the ETS_ marcos - try { - ETS_ASSERT_EQUALS( throwThis(3), 333 ); - } catch( const Number & ) { - TS_FAIL( "throwThis(3) failed" ); - } - } - -private: - void goodFunction( int ) - { - } - - class Number - { - public: - Number( int ) {} - }; - - int throwThis( int i ) - { - throw Number( i ); - } -}; - -#endif // __EXCEPTIONTEST_H diff --git a/cxxtest/sample/FixtureTest.h b/cxxtest/sample/FixtureTest.h deleted file mode 100644 index 653c7a14a..000000000 --- a/cxxtest/sample/FixtureTest.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __FIXTURETEST_H -#define __FIXTURETEST_H - -#include -#include - -// -// This test suite shows how to use setUp() and tearDown() -// to initialize data common to all tests. -// setUp()/tearDown() will be called before and after each -// test. -// - -class FixtureTest : public CxxTest::TestSuite -{ - char *_buffer; -public: - void setUp() - { - _buffer = new char[1024]; - } - - void tearDown() - { - delete [] _buffer; - } - - void test_strcpy() - { - strcpy( _buffer, "Hello, world!" ); - TS_ASSERT_EQUALS( _buffer[0], 'H' ); - TS_ASSERT_EQUALS( _buffer[1], 'E' ); - } -}; - - -#endif // __FIXTURETEST_H diff --git a/cxxtest/sample/Makefile.PL b/cxxtest/sample/Makefile.PL deleted file mode 100755 index d29afcc68..000000000 --- a/cxxtest/sample/Makefile.PL +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/perl -# -# This isn't a "real" `Makefile.PL' -# It just copies the correct `Makefile.*' to `Makefile' -# -use strict; -use Getopt::Long; -use File::Copy; - -sub usage() { - die "Usage: $0 [--bcc32]\n"; -} - -my $source; -my $target = 'Makefile'; -my $windows = $ENV{'windir'}; - -GetOptions( 'bcc32' => sub { $source = 'Makefile.bcc32' } ) or usage(); -if ( !defined( $source ) ) { - $source = $windows ? 'Makefile.msvc' : 'Makefile.unix'; -} - -unlink($target); -$windows ? copy($source, $target) : symlink($source, $target); - -print "`Makefile' is now `$source'.\n"; - -# -# Local Variables: -# compile-command: "perl Makefile.PL" -# End: -# diff --git a/cxxtest/sample/Makefile.bcc32 b/cxxtest/sample/Makefile.bcc32 deleted file mode 100644 index 907b98d59..000000000 --- a/cxxtest/sample/Makefile.bcc32 +++ /dev/null @@ -1,94 +0,0 @@ -# -# Makefile for Borland C++ -# Make sure bcc32.exe is in the PATH or change CXXC below -# - -# For the Win32 GUI -#WIN32_FLAGS = user32.lib comctl32.lib - -# For the Qt GUI -#QTDIR = c:\qt -QT_FLAGS = -I$(QTDIR)/include $(QTDIR)/lib/qt.lib - - -TARGETS = error_printer.exe stdio_printer.exe yes_no_runner.exe file_printer.exe aborter.exe only.exe -GUI_TARGETS = win32_runner.exe qt_runner.exe -TESTS = *.h -GUI_TESTS = gui/GreenYellowRed.h $(TESTS) -TESTGEN = perl -w ../cxxtestgen.pl -CXXC = bcc32.exe -w- -I. -I.. - -all: $(TARGETS) - -clean: - del *~ *.o *.obj - del $(TARGETS) - del $(GUI_TARGETS) - del tests.cpp error_printer.cpp stdio_printer.cpp file_printer.cpp aborter.cpp only.cpp - del win32_runner.cpp qt_runner.cpp - -distclean: clean - del Makefile - -run: error_printer.exe - error_printer.exe - -run_win32: win32_runner.exe - win32_runner.exe - -run_qt: qt_runner.exe - qt_runner.exe - -error_printer.cpp: $(TESTS) - $(TESTGEN) -o error_printer.cpp --error-printer $(TESTS) - -stdio_printer.cpp: $(TESTS) - $(TESTGEN) -o stdio_printer.cpp --runner=StdioPrinter $(TESTS) - -file_printer.cpp: file_printer.tpl $(TESTS) - $(TESTGEN) -o file_printer.cpp --template=file_printer.tpl $(TESTS) - -aborter.cpp: aborter.tpl $(TESTS) - $(TESTGEN) -o aborter.cpp --template=aborter.tpl $(TESTS) - -only.cpp: only.tpl $(TESTS) - $(TESTGEN) -o only.cpp --template=only.tpl $(TESTS) - -tests.cpp: $(TESTS) - $(TESTGEN) -o tests.cpp $(TESTS) - -win32_runner.cpp: $(GUI_TESTS) - $(TESTGEN) -o win32_runner.cpp --gui=Win32Gui $(GUI_TESTS) - -qt_runner.cpp: $(GUI_TESTS) - $(TESTGEN) -o qt_runner.cpp --gui=QtGui $(GUI_TESTS) - -error_printer.exe: error_printer.cpp - $(CXXC) -eerror_printer.exe error_printer.cpp - -stdio_printer.exe: stdio_printer.cpp - $(CXXC) -estdio_printer.exe stdio_printer.cpp - -file_printer.exe: file_printer.cpp - $(CXXC) -efile_printer.exe file_printer.cpp - -only.exe: only.cpp - $(CXXC) -eonly.exe only.cpp - -aborter.exe: aborter.cpp - $(CXXC) -eaborter.exe aborter.cpp - -yes_no_runner.exe: yes_no_runner.cpp tests.cpp - $(CXXC) -eyes_no_runner.exe yes_no_runner.cpp tests.cpp - -win32_runner.exe: win32_runner.cpp - $(CXXC) -ewin32_runner.exe win32_runner.cpp $(WIN32_FLAGS) - -qt_runner.exe: qt_runner.cpp - $(CXXC) -o qt_runner.exe qt_runner.cpp $(QT_FLAGS) - -# -# Local Variables: -# compile-command: "make -fMakefile.bcc32" -# End: -# diff --git a/cxxtest/sample/Makefile.msvc b/cxxtest/sample/Makefile.msvc deleted file mode 100644 index 35ce2f9b1..000000000 --- a/cxxtest/sample/Makefile.msvc +++ /dev/null @@ -1,93 +0,0 @@ -# -# Makefile for Microsoft Visual C++ -# Make sure cl.exe is in the PATH (run vcvars.bat) or change CXXC below -# - -# For the Win32 GUI -WIN32_FLAGS = user32.lib - -# For the Qt GUI -# QTDIR = c:\qt -QT_FLAGS = -I$(QTDIR)/include $(QTDIR)/lib/qt.lib - -TARGETS = error_printer.exe stdio_printer.exe yes_no_runner.exe file_printer.exe aborter.exe only.exe -GUI_TARGETS = win32_runner.exe qt_runner.exe -TESTS = *.h -GUI_TESTS = gui/GreenYellowRed.h $(TESTS) -TESTGEN = perl -w ../cxxtestgen.pl -CXXC = cl.exe -GX -W3 -WX -I. -I.. - -all: $(TARGETS) - -clean: - del *~ *.o *.obj - del $(TARGETS) - del $(GUI_TARGETS) - del tests.cpp error_printer.cpp stdio_printer.cpp file_printer.cpp aborter.cpp only.cpp - del win32_runner.cpp qt_runner.cpp - -distclean: clean - del Makefile - -run: error_printer.exe - error_printer.exe - -run_win32: win32_runner.exe - win32_runner.exe - -run_qt: qt_runner.exe - qt_runner.exe - -error_printer.cpp: $(TESTS) - $(TESTGEN) -o error_printer.cpp --error-printer $(TESTS) - -stdio_printer.cpp: $(TESTS) - $(TESTGEN) -o stdio_printer.cpp --runner=StdioPrinter $(TESTS) - -file_printer.cpp: file_printer.tpl $(TESTS) - $(TESTGEN) -o file_printer.cpp --template=file_printer.tpl $(TESTS) - -aborter.cpp: aborter.tpl $(TESTS) - $(TESTGEN) -o aborter.cpp --template=aborter.tpl $(TESTS) - -only.cpp: only.tpl $(TESTS) - $(TESTGEN) -o only.cpp --template=only.tpl $(TESTS) - -tests.cpp: $(TESTS) - $(TESTGEN) -o tests.cpp $(TESTS) - -win32_runner.cpp: $(GUI_TESTS) - $(TESTGEN) -o win32_runner.cpp --gui=Win32Gui $(GUI_TESTS) - -qt_runner.cpp: $(GUI_TESTS) - $(TESTGEN) -o qt_runner.cpp --gui=QtGui $(GUI_TESTS) - -error_printer.exe: error_printer.cpp - $(CXXC) -o error_printer.exe error_printer.cpp - -stdio_printer.exe: stdio_printer.cpp - $(CXXC) -o stdio_printer.exe stdio_printer.cpp - -file_printer.exe: file_printer.cpp - $(CXXC) -o file_printer.exe file_printer.cpp - -only.exe: only.cpp - $(CXXC) -o only.exe only.cpp - -aborter.exe: aborter.cpp - $(CXXC) -o aborter.exe aborter.cpp - -yes_no_runner.exe: yes_no_runner.cpp tests.cpp - $(CXXC) -o yes_no_runner.exe yes_no_runner.cpp tests.cpp - -win32_runner.exe: win32_runner.cpp - $(CXXC) -o win32_runner.exe win32_runner.cpp $(WIN32_FLAGS) - -qt_runner.exe: qt_runner.cpp - $(CXXC) -o qt_runner.exe qt_runner.cpp $(QT_FLAGS) - -# -# Local Variables: -# compile-command: "nmake -fMakefile.msvc" -# End: -# diff --git a/cxxtest/sample/Makefile.unix b/cxxtest/sample/Makefile.unix deleted file mode 100644 index ee52c8f77..000000000 --- a/cxxtest/sample/Makefile.unix +++ /dev/null @@ -1,88 +0,0 @@ -# -# Makefile for UN*X-like systems -# - -# Change this line if you want a different compiler -CXXC = c++ -Wall -W -Werror -I. -I.. - -# If you want to use python, specify USE_PYTHON=1 on the command line -ifdef USE_PYTHON - TESTGEN = ../cxxtestgen.py -else - TESTGEN = ../cxxtestgen.pl -endif - -# For the X11 GUI -X11_FLAGS = -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 - -# For the Qt GUI -#QTDIR = /usr/lib/qt -QTLIB = -lqt-mt -#QTLIB = -lqt -QT_FLAGS = -I$(QTDIR)/include -L$(QTDIR)/lib $(QTLIB) -O2 - -TARGETS = error_printer stdio_printer yes_no_runner file_printer aborter only -GUI_TARGETS = x11_runner qt_runner -TESTS = *.h -GUI_TESTS = gui/GreenYellowRed.h $(TESTS) - -all: $(TARGETS) - -clean: - rm -f *~ *.o *.obj $(TARGETS) $(GUI_TARGETS) - rm -f tests.cpp error_printer.cpp stdio_printer.cpp file_printer.cpp aborter.cpp only.cpp - rm -f x11_runner.cpp qt_runner.cpp - -distclean: clean - rm -f Makefile - -run: error_printer - ./error_printer - -run_x11: x11_runner - ./x11_runner - -run_qt: qt_runner - ./qt_runner - -error_printer.cpp: $(TESTS) - $(TESTGEN) -o $@ --error-printer $(TESTS) - -stdio_printer.cpp: $(TESTS) - $(TESTGEN) -o $@ --runner=StdioPrinter $(TESTS) - -file_printer.cpp: file_printer.tpl $(TESTS) - $(TESTGEN) -o $@ --template=file_printer.tpl $(TESTS) - -aborter.cpp: aborter.tpl $(TESTS) - $(TESTGEN) -o $@ --template=aborter.tpl $(TESTS) - -only.cpp: only.tpl $(TESTS) - $(TESTGEN) -o $@ --template=only.tpl $(TESTS) - -tests.cpp: $(TESTS) - $(TESTGEN) -o $@ $(TESTS) - -x11_runner.cpp: $(GUI_TESTS) - $(TESTGEN) -o $@ --gui=X11Gui $(GUI_TESTS) - -qt_runner.cpp: $(GUI_TESTS) - $(TESTGEN) -o $@ --gui=QtGui $(GUI_TESTS) - -%: %.cpp - $(CXXC) -o $@ $< - -yes_no_runner: yes_no_runner.cpp tests.cpp - $(CXXC) -o $@ $^ - -x11_runner: x11_runner.cpp - $(CXXC) -o $@ $^ $(X11_FLAGS) - -qt_runner: qt_runner.cpp - $(CXXC) -o $@ $^ $(QT_FLAGS) - -# -# Local Variables: -# compile-command: "make -fMakefile.unix" -# End: -# diff --git a/cxxtest/sample/MessageTest.h b/cxxtest/sample/MessageTest.h deleted file mode 100644 index 621289f78..000000000 --- a/cxxtest/sample/MessageTest.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef __MESSAGETEST_H -#define __MESSAGETEST_H - -#include - -// -// The [E]TSM_ macros can be used to print a specified message -// instead of the default one. -// This is useful when you refactor your tests, as shown below -// - -class MessageTest : public CxxTest::TestSuite -{ -public: - void testValues() - { - checkValue( 0, "My hovercraft" ); - checkValue( 1, "is full" ); - checkValue( 2, "of eels" ); - } - - void checkValue( unsigned value, const char *message ) - { - TSM_ASSERT( message, value != 0 ); - TSM_ASSERT_EQUALS( message, value, value * value ); - } -}; - - -#endif // __MESSAGETEST_H diff --git a/cxxtest/sample/SimpleTest.h b/cxxtest/sample/SimpleTest.h deleted file mode 100644 index b3fae12ca..000000000 --- a/cxxtest/sample/SimpleTest.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef __SIMPLETEST_H -#define __SIMPLETEST_H - -#include - -// -// A simple test suite: Just inherit CxxTest::TestSuite and write tests! -// - -class SimpleTest : public CxxTest::TestSuite -{ -public: - void testEquality() - { - TS_ASSERT_EQUALS( 1, 1 ); - TS_ASSERT_EQUALS( 1, 2 ); - TS_ASSERT_EQUALS( 'a', 'A' ); - TS_ASSERT_EQUALS( 1.0, -12345678900000000000000000000000000000000000000000.1234 ); - } - - void testAddition() - { - TS_ASSERT_EQUALS( 1 + 1, 2 ); - TS_ASSERT_EQUALS( 2 + 2, 5 ); - } - - void TestMultiplication() - { - TS_ASSERT_EQUALS( 2 * 2, 4 ); - TS_ASSERT_EQUALS( 4 * 4, 44 ); - TS_ASSERT_DIFFERS( -2 * -2, 4 ); - } - - void testComparison() - { - TS_ASSERT_LESS_THAN( (int)1, (unsigned long)2 ); - TS_ASSERT_LESS_THAN( -1, -2 ); - } - - void testTheWorldIsCrazy() - { - TS_ASSERT_EQUALS( true, false ); - } - - void test_Failure() - { - TS_FAIL( "Not implemented" ); - TS_FAIL( 1569779912 ); - } - - void test_TS_WARN_macro() - { - TS_WARN( "Just a friendly warning" ); - TS_WARN( "Warnings don't abort the test" ); - } -}; - - -#endif // __SIMPLETEST_H diff --git a/cxxtest/sample/TraitsTest.h b/cxxtest/sample/TraitsTest.h deleted file mode 100644 index 14659385d..000000000 --- a/cxxtest/sample/TraitsTest.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef __TRAITSTEST_H -#define __TRAITSTEST_H - -// -// This example shows how to use TS_ASSERT_EQUALS for your own classes -// -#include -#include - -// -// Define your class with operator== -// -#include -#include - -class Pet -{ - char _name[128]; -public: - Pet( const char *petName ) { strcpy( _name, petName ); } - - const char *name() const { return _name; } - - bool operator== ( const Pet &other ) const - { - return !strcmp( name(), other.name() ); - } -}; - -// -// Instantiate CxxTest::ValueTraits<*your class*> -// Note: Most compilers do not require that you define both -// ValueTraits and ValueTraits, but some do. -// -namespace CxxTest -{ - CXXTEST_TEMPLATE_INSTANTIATION - class ValueTraits - { - char _asString[256]; - - public: - ValueTraits( const Pet &pet ) { sprintf( _asString, "Pet(\"%s\")", pet.name() ); } - const char *asString() const { return _asString; } - }; - - CXXTEST_COPY_CONST_TRAITS( Pet ); -} - -// -// Here's how it works -// -class TestFunky : public CxxTest::TestSuite -{ -public: - void testPets() - { - Pet pet1("dog"), pet2("cat"); - TS_ASSERT_EQUALS( pet1, pet2 ); - Pet cat("cat"), gato("cat"); - TS_ASSERT_DIFFERS( cat, gato ); -#ifdef _CXXTEST_HAVE_STD - typedef CXXTEST_STD(string) String; - TS_ASSERT_EQUALS( String("Hello"), String("World!") ); -#endif // _CXXTEST_HAVE_STD - } -}; - -#endif // __TRAITSTEST_H diff --git a/cxxtest/sample/aborter.tpl b/cxxtest/sample/aborter.tpl deleted file mode 100644 index 14fc50d2c..000000000 --- a/cxxtest/sample/aborter.tpl +++ /dev/null @@ -1,16 +0,0 @@ -// -*- C++ -*- -// This template file demonstrates the use of CXXTEST_ABORT_TEST_ON_FAIL -// - -#define CXXTEST_HAVE_STD -#define CXXTEST_ABORT_TEST_ON_FAIL -#include - -int main() -{ - return CxxTest::ErrorPrinter().run(); -} - -// The CxxTest "world" - - diff --git a/cxxtest/sample/file_printer.tpl b/cxxtest/sample/file_printer.tpl deleted file mode 100644 index a9627d6d0..000000000 --- a/cxxtest/sample/file_printer.tpl +++ /dev/null @@ -1,22 +0,0 @@ -// -*- C++ -*- -// This is a sample of a custom test runner -// using CxxTest template files. -// This prints the output to a file given on the command line. -// - -#include -#include - -int main( int argc, char *argv[] ) -{ - if ( argc != 2 ) { - fprintf( stderr, "Usage: %s \n", argv[0] ); - return -1; - } - - return CxxTest::StdioPrinter( fopen( argv[1], "w" ) ).run(); -} - -// The CxxTest "world" - - diff --git a/cxxtest/sample/gui/GreenYellowRed.h b/cxxtest/sample/gui/GreenYellowRed.h deleted file mode 100644 index 446b23345..000000000 --- a/cxxtest/sample/gui/GreenYellowRed.h +++ /dev/null @@ -1,57 +0,0 @@ -#include - -#ifdef _WIN32 -# include -# define CXXTEST_SAMPLE_GUI_WAIT() Sleep( 1000 ) -#else // !_WIN32 - extern "C" unsigned sleep( unsigned seconds ); -# define CXXTEST_SAMPLE_GUI_WAIT() sleep( 1 ) -#endif // _WIN32 - -class GreenYellowRed : public CxxTest::TestSuite -{ -public: - void wait() - { - CXXTEST_SAMPLE_GUI_WAIT(); - } - - void test_Start_green() - { - wait(); - } - - void test_Green_again() - { - TS_TRACE( "Still green" ); - wait(); - } - - void test_Now_yellow() - { - TS_WARN( "Yellow" ); - wait(); - } - - void test_Cannot_go_back() - { - wait(); - } - - void test_Finally_red() - { - TS_FAIL( "Red" ); - wait(); - } - - void test_Cannot_go_back_to_yellow() - { - TS_WARN( "Yellow?" ); - wait(); - } - - void test_Cannot_go_back_to_green() - { - wait(); - } -}; diff --git a/cxxtest/sample/mock/Dice.cpp b/cxxtest/sample/mock/Dice.cpp deleted file mode 100644 index 161b80fa2..000000000 --- a/cxxtest/sample/mock/Dice.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "Dice.h" - -Dice::Dice() -{ - T::srand( T::time( 0 ) ); -} - -unsigned Dice::roll() -{ - return (T::rand() % 6) + 1; -} - - diff --git a/cxxtest/sample/mock/Dice.h b/cxxtest/sample/mock/Dice.h deleted file mode 100644 index 94271417e..000000000 --- a/cxxtest/sample/mock/Dice.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __DICE_H -#define __DICE_H - -class Dice -{ -public: - Dice(); - - unsigned roll(); -}; - -#endif // __DICE_H - diff --git a/cxxtest/sample/mock/Makefile b/cxxtest/sample/mock/Makefile deleted file mode 100644 index 709b7cbe9..000000000 --- a/cxxtest/sample/mock/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -all: roll run - -clean: - rm -f *~ *.o roll test test.cpp - -CXXTEST = ../.. -CCFLAGS = -I. -I$(CXXTEST) - -roll: roll.o Dice.o real_stdlib.o - g++ -o $@ $^ - -run: test - ./test - -test: test.o Dice.o mock_stdlib.o - g++ -o $@ $^ - -.cpp.o: - g++ -c -o $@ $(CCFLAGS) $< - -test.cpp: TestDice.h - $(CXXTEST)/cxxtestgen.pl -o $@ --error-printer $< diff --git a/cxxtest/sample/mock/MockStdlib.h b/cxxtest/sample/mock/MockStdlib.h deleted file mode 100644 index aee62bafe..000000000 --- a/cxxtest/sample/mock/MockStdlib.h +++ /dev/null @@ -1,31 +0,0 @@ -#include - -class MockStdlib : - public T::Base_srand, - public T::Base_rand, - public T::Base_time -{ -public: - unsigned lastSeed; - - void srand( unsigned seed ) - { - lastSeed = seed; - } - - int nextRand; - - int rand() - { - return nextRand; - } - - time_t nextTime; - - time_t time( time_t *t ) - { - if ( t ) - *t = nextTime; - return nextTime; - } -}; diff --git a/cxxtest/sample/mock/T/stdlib.h b/cxxtest/sample/mock/T/stdlib.h deleted file mode 100644 index 30306ba22..000000000 --- a/cxxtest/sample/mock/T/stdlib.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef __T__STDLIB_H -#define __T__STDLIB_H - -#include -#include - -#include - -CXXTEST_MOCK_VOID_GLOBAL( srand, ( unsigned seed ), ( seed ) ); -CXXTEST_MOCK_GLOBAL( int, rand, ( void ), () ); -CXXTEST_MOCK_GLOBAL( time_t, time, ( time_t *t ), ( t ) ); - -#endif // __T__STDLIB_H diff --git a/cxxtest/sample/mock/TestDice.h b/cxxtest/sample/mock/TestDice.h deleted file mode 100644 index 35b3b7eec..000000000 --- a/cxxtest/sample/mock/TestDice.h +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include "Dice.h" -#include "MockStdlib.h" - -class TestDice : public CxxTest::TestSuite -{ -public: - MockStdlib *stdlib; - - void setUp() - { - TS_ASSERT( stdlib = new MockStdlib ); - } - - void tearDown() - { - delete stdlib; - } - - void test_Randomize_uses_time() - { - stdlib->nextTime = 12345; - Dice dice; - TS_ASSERT_EQUALS( stdlib->lastSeed, 12345 ); - } - - void test_Roll() - { - Dice dice; - - stdlib->nextRand = 0; - TS_ASSERT_EQUALS( dice.roll(), 1 ); - - stdlib->nextRand = 2; - TS_ASSERT_EQUALS( dice.roll(), 3 ); - - stdlib->nextRand = 5; - TS_ASSERT_EQUALS( dice.roll(), 6 ); - - stdlib->nextRand = 7; - TS_ASSERT_EQUALS( dice.roll(), 2 ); - } - - void test_Temporary_override_of_one_mock_function() - { - Dice dice; - - stdlib->nextRand = 2; - TS_ASSERT_EQUALS( dice.roll(), 3 ); - - class Five : public T::Base_rand { int rand() { return 5; } }; - - Five *five = new Five; - TS_ASSERT_EQUALS( dice.roll(), 6 ); - TS_ASSERT_EQUALS( dice.roll(), 6 ); - TS_ASSERT_EQUALS( dice.roll(), 6 ); - delete five; - - stdlib->nextRand = 1; - TS_ASSERT_EQUALS( dice.roll(), 2 ); - } -}; diff --git a/cxxtest/sample/mock/mock_stdlib.cpp b/cxxtest/sample/mock/mock_stdlib.cpp deleted file mode 100644 index 148a044d2..000000000 --- a/cxxtest/sample/mock/mock_stdlib.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#define CXXTEST_MOCK_TEST_SOURCE_FILE -#include diff --git a/cxxtest/sample/mock/real_stdlib.cpp b/cxxtest/sample/mock/real_stdlib.cpp deleted file mode 100644 index db02f3a15..000000000 --- a/cxxtest/sample/mock/real_stdlib.cpp +++ /dev/null @@ -1,2 +0,0 @@ -#define CXXTEST_MOCK_REAL_SOURCE_FILE -#include diff --git a/cxxtest/sample/mock/roll.cpp b/cxxtest/sample/mock/roll.cpp deleted file mode 100644 index 20ea967af..000000000 --- a/cxxtest/sample/mock/roll.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include -#include "Dice.h" - -int main() -{ - Dice dice; - printf( "First roll: %u\n", dice.roll() ); - printf( "Second roll: %u\n", dice.roll() ); - - return 0; -} diff --git a/cxxtest/sample/msvc/CxxTest_1_Run.dsp b/cxxtest/sample/msvc/CxxTest_1_Run.dsp deleted file mode 100644 index 6bc00e7f4..000000000 --- a/cxxtest/sample/msvc/CxxTest_1_Run.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="CxxTest_1_Run" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) External Target" 0x0106 - -CFG=CxxTest_1_Run - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_1_Run.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_1_Run.mak" CFG="CxxTest_1_Run - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "CxxTest_1_Run - Win32 Release" (based on "Win32 (x86) External Target") -!MESSAGE "CxxTest_1_Run - Win32 Debug" (based on "Win32 (x86) External Target") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" - -!IF "$(CFG)" == "CxxTest_1_Run - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Cmd_Line "NMAKE /f CxxTest_1_Run.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "CxxTest_1_Run.exe" -# PROP BASE Bsc_Name "CxxTest_1_Run.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Cmd_Line "nmake DIR=Release run" -# PROP Rebuild_Opt "/a" -# PROP Target_File "Release\run.log" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "CxxTest_1_Run - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Cmd_Line "NMAKE /f CxxTest_1_Run.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "CxxTest_1_Run.exe" -# PROP BASE Bsc_Name "CxxTest_1_Run.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Cmd_Line "nmake DIR=Debug run" -# PROP Rebuild_Opt "/a" -# PROP Target_File "Debug\run.log" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "CxxTest_1_Run - Win32 Release" -# Name "CxxTest_1_Run - Win32 Debug" - -!IF "$(CFG)" == "CxxTest_1_Run - Win32 Release" - -!ELSEIF "$(CFG)" == "CxxTest_1_Run - Win32 Debug" - -!ENDIF - -# Begin Source File - -SOURCE=.\Makefile -# End Source File -# Begin Source File - -SOURCE=.\ReadMe.txt -# End Source File -# End Target -# End Project diff --git a/cxxtest/sample/msvc/CxxTest_2_Build.dsp b/cxxtest/sample/msvc/CxxTest_2_Build.dsp deleted file mode 100644 index 04727fd33..000000000 --- a/cxxtest/sample/msvc/CxxTest_2_Build.dsp +++ /dev/null @@ -1,94 +0,0 @@ -# Microsoft Developer Studio Project File - Name="CxxTest_2_Build" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=CxxTest_2_Build - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_2_Build.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_2_Build.mak" CFG="CxxTest_2_Build - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "CxxTest_2_Build - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "CxxTest_2_Build - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "CxxTest_2_Build - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "..\.." /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/runner.exe" - -!ELSEIF "$(CFG)" == "CxxTest_2_Build - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\.." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x40d /d "_DEBUG" -# ADD RSC /l 0x40d /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/runner.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "CxxTest_2_Build - Win32 Release" -# Name "CxxTest_2_Build - Win32 Debug" -# Begin Source File - -SOURCE=.\ReadMe.txt -# End Source File -# Begin Source File - -SOURCE=.\runner.cpp -# End Source File -# End Target -# End Project diff --git a/cxxtest/sample/msvc/CxxTest_3_Generate.dsp b/cxxtest/sample/msvc/CxxTest_3_Generate.dsp deleted file mode 100644 index 5bbad94ce..000000000 --- a/cxxtest/sample/msvc/CxxTest_3_Generate.dsp +++ /dev/null @@ -1,93 +0,0 @@ -# Microsoft Developer Studio Project File - Name="CxxTest_3_Generate" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) External Target" 0x0106 - -CFG=CxxTest_3_Generate - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_3_Generate.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_3_Generate.mak" CFG="CxxTest_3_Generate - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "CxxTest_3_Generate - Win32 Release" (based on "Win32 (x86) External Target") -!MESSAGE "CxxTest_3_Generate - Win32 Debug" (based on "Win32 (x86) External Target") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" - -!IF "$(CFG)" == "CxxTest_3_Generate - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Cmd_Line "NMAKE /f CxxTest_3_Generate.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "CxxTest_3_Generate.exe" -# PROP BASE Bsc_Name "CxxTest_3_Generate.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Cmd_Line "nmake runner.cpp" -# PROP Rebuild_Opt "/a" -# PROP Target_File "runner.cpp" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ELSEIF "$(CFG)" == "CxxTest_3_Generate - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Cmd_Line "NMAKE /f CxxTest_3_Generate.mak" -# PROP BASE Rebuild_Opt "/a" -# PROP BASE Target_File "CxxTest_3_Generate.exe" -# PROP BASE Bsc_Name "CxxTest_3_Generate.bsc" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Cmd_Line "nmake runner.cpp" -# PROP Rebuild_Opt "/a" -# PROP Target_File "runner.cpp" -# PROP Bsc_Name "" -# PROP Target_Dir "" - -!ENDIF - -# Begin Target - -# Name "CxxTest_3_Generate - Win32 Release" -# Name "CxxTest_3_Generate - Win32 Debug" - -!IF "$(CFG)" == "CxxTest_3_Generate - Win32 Release" - -!ELSEIF "$(CFG)" == "CxxTest_3_Generate - Win32 Debug" - -!ENDIF - -# Begin Source File - -SOURCE=.\Makefile -# End Source File -# Begin Source File - -SOURCE=.\ReadMe.txt -# End Source File -# End Target -# End Project diff --git a/cxxtest/sample/msvc/CxxTest_Workspace.dsw b/cxxtest/sample/msvc/CxxTest_Workspace.dsw deleted file mode 100644 index 5dbf84190..000000000 --- a/cxxtest/sample/msvc/CxxTest_Workspace.dsw +++ /dev/null @@ -1,59 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "CxxTest_1_Run"=.\CxxTest_1_Run.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name CxxTest_2_Build - End Project Dependency -}}} - -############################################################################### - -Project: "CxxTest_2_Build"=.\CxxTest_2_Build.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name CxxTest_3_Generate - End Project Dependency -}}} - -############################################################################### - -Project: "CxxTest_3_Generate"=.\CxxTest_3_Generate.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/cxxtest/sample/msvc/FixFiles.bat b/cxxtest/sample/msvc/FixFiles.bat deleted file mode 100644 index fb14a6c49..000000000 --- a/cxxtest/sample/msvc/FixFiles.bat +++ /dev/null @@ -1,212 +0,0 @@ -@rem = '--*-Perl-*-- -@echo off -if "%OS%" == "Windows_NT" goto WinNT -perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9 -goto endofperl -:WinNT -perl -x -S %0 %* -if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl -if %errorlevel% == 9009 echo You do not have Perl in your PATH. -if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul -goto endofperl -@rem '; -#!/usr/bin/perl -w -#line 15 -use strict; -use English; -use Getopt::Long; - -$OUTPUT_AUTOFLUSH = 1; - -sub usage() { - print STDERR "Usage: $0 \n\n"; - print STDERR "Fix Makefile and CxxTest_2_Build.dsp for your setup.\n\n"; - print STDERR " --cxxtest=DIR Assume CxxTest is installed in DIR (default: '..\\..')\n"; - print STDERR " --tests=SPEC Use SPEC for the test files (default: '../gui/*.h ../*.h')\n\n"; - print STDERR "You must specify at least one option.\n"; - exit -1; -} - -my ($cxxtest, $tests); -my ($Makefile, $CxxTest_2_Build); - -sub main { - parseCommandline(); - fixFiles(); -} - -sub parseCommandline() { - GetOptions( 'cxxtest=s' => \$cxxtest, - 'tests=s' => \$tests, - ) or usage(); - - usage() unless (defined($cxxtest) || defined($tests)); - $cxxtest = '..\\..' unless defined($cxxtest); - $tests = '../gui/*.h ../*.h' unless defined($tests); -} - -sub fixFiles() { - fixFile( $Makefile, 'Makefile' ); - fixFile( $CxxTest_2_Build, 'CxxTest_2_Build.dsp' ); -} - -sub fixFile($$) { - my ($data, $output) = @_; - - print "$output..."; - - $data =~ s//$tests/g; - $data =~ s//$cxxtest/g; - - open OUTPUT, ">$output" or die "Cannot create output file \"$output\"\n"; - print OUTPUT $data; - close OUTPUT; - - print "OK\n"; -} - -$Makefile = -'# Where to look for the tests -TESTS = - -# Where the CxxTest distribution is unpacked -CXXTESTDIR = - -# Check CXXTESTDIR -!if !exist($(CXXTESTDIR)\cxxtestgen.pl) -!error Please fix CXXTESTDIR -!endif - -# cxxtestgen needs Perl or Python -!if defined(PERL) -CXXTESTGEN = $(PERL) $(CXXTESTDIR)/cxxtestgen.pl -!elseif defined(PYTHON) -CXXTESTGEN = $(PYTHON) $(CXXTESTDIR)/cxxtestgen.py -!else -!error You must define PERL or PYTHON -!endif - -# The arguments to pass to cxxtestgen -# - ParenPrinter is the way MSVC likes its compilation errors -# - --have-eh/--abort-on-fail are nice when you have them -CXXTESTGEN_FLAGS = --gui=Win32Gui --runner=ParenPrinter --have-eh --abort-on-fail - -# How to generate the test runner, "runner.cpp" -runner.cpp: $(TESTS) - $(CXXTESTGEN) $(CXXTESTGEN_FLAGS) -o $@ $(TESTS) - -# Command-line arguments to the runner -RUNNER_FLAGS = -title "CxxTest Runner" - -# How to run the tests, which should be in DIR\runner.exe -run: $(DIR)\runner.exe - $(DIR)\runner.exe $(RUNNER_FLAGS) -'; - -$CxxTest_2_Build = -'# Microsoft Developer Studio Project File - Name="CxxTest_2_Build" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=CxxTest_2_Build - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_2_Build.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "CxxTest_2_Build.mak" CFG="CxxTest_2_Build - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "CxxTest_2_Build - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "CxxTest_2_Build - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "CxxTest_2_Build - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x40d /d "NDEBUG" -# ADD RSC /l 0x40d /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /out:"Release/runner.exe" - -!ELSEIF "$(CFG)" == "CxxTest_2_Build - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x40d /d "_DEBUG" -# ADD RSC /l 0x40d /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/runner.exe" /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "CxxTest_2_Build - Win32 Release" -# Name "CxxTest_2_Build - Win32 Debug" -# Begin Source File - -SOURCE=.\ReadMe.txt -# End Source File -# Begin Source File - -SOURCE=.\runner.cpp -# End Source File -# End Target -# End Project -'; - -main(); - -__END__ -:endofperl - -rem -rem Local Variables: -rem compile-command: "perl FixFiles.bat" -rem End: -rem diff --git a/cxxtest/sample/msvc/Makefile b/cxxtest/sample/msvc/Makefile deleted file mode 100644 index 606004d4c..000000000 --- a/cxxtest/sample/msvc/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -# Where to look for the tests -TESTS = ..\gui\*.h ..\*.h - -# Where the CxxTest distribution is unpacked -CXXTESTDIR = ..\.. - -# Check CXXTESTDIR -!if !exist($(CXXTESTDIR)\cxxtestgen.pl) -!error Please fix CXXTESTDIR -!endif - -# cxxtestgen needs Perl or Python -!if defined(PERL) -CXXTESTGEN = $(PERL) $(CXXTESTDIR)/cxxtestgen.pl -!elseif defined(PYTHON) -CXXTESTGEN = $(PYTHON) $(CXXTESTDIR)/cxxtestgen.py -!else -!error You must define PERL or PYTHON -!endif - -# The arguments to pass to cxxtestgen -# - ParenPrinter is the way MSVC likes its compilation errors -# - --have-eh/--abort-on-fail are nice when you have them -CXXTESTGEN_FLAGS = \ - --gui=Win32Gui \ - --runner=ParenPrinter \ - --have-eh \ - --abort-on-fail - -# How to generate the test runner, `runner.cpp' -runner.cpp: $(TESTS) - $(CXXTESTGEN) $(CXXTESTGEN_FLAGS) -o $@ $(TESTS) - -# How to run the tests, which should be in DIR\runner.exe -run: $(DIR)\runner.exe - $(DIR)\runner.exe diff --git a/cxxtest/sample/msvc/ReadMe.txt b/cxxtest/sample/msvc/ReadMe.txt deleted file mode 100644 index 816fce45b..000000000 --- a/cxxtest/sample/msvc/ReadMe.txt +++ /dev/null @@ -1,30 +0,0 @@ -Sample files for Visual Studio -============================== - -There are three projects in this workspace: - - - CxxTest_3_Generate runs cxxtestgen to create runner.cpp - - CxxTest_2_Build compiles the generated file - - CxxTest_1_Run runs the compiled binary - -Whenever you build this workspace, the tests are run, and any failed assertions -are displayed as compilation errors (you can browse them using F4). - -Note that to run this sample, you need first to create an environment -variable PERL or PYTHON, e.g. PERL=c:\perl\bin\perl.exe - - -To use these .dsp and .dsw files in your own project, run FixFiles.bat -to adjust them to where you've placed CxxTest and your own tests. - -If you want to use just the .dsp files in your own workspace, don't -forget to: - - - Set up the dependencies (CxxTest_3_Generate depends on - CxxTest_2_Build which depends on CxxTest_1_Run) - - - Add your own include paths, libraries etc. to the CxxTest_2_Build project - - -NOTE: I haven't used "Post-Build Step" to run the tests because I -wanted the tests to be executed even if nothing has changed. diff --git a/cxxtest/sample/only.tpl b/cxxtest/sample/only.tpl deleted file mode 100644 index b2a7277cf..000000000 --- a/cxxtest/sample/only.tpl +++ /dev/null @@ -1,33 +0,0 @@ -// -*- C++ -*- -#include -#include - -int main( int argc, char *argv[] ) -{ - if ( argc < 2 || argc > 3 ) { - fprintf( stderr, "Usage: only []\n\n" ); - fprintf( stderr, "Available tests:\n" ); - CxxTest::RealWorldDescription wd; - for ( CxxTest::SuiteDescription *sd = wd.firstSuite(); sd; sd = sd->next() ) - for ( CxxTest::TestDescription *td = sd->firstTest(); td; td = td->next() ) - fprintf( stderr, " - %s::%s()\n", sd->suiteName(), td->testName() ); - return 1; - } - - const char *suiteName = argv[1]; - const char *testName = (argc > 2) ? argv[2] : 0; - if ( !CxxTest::leaveOnly( suiteName, testName ) ) { - if ( testName ) - fprintf( stderr, "Cannot find %s::%s()\n", argv[1], argv[2] ); - else - fprintf( stderr, "Cannot find class %s\n", argv[1] ); - return 2; - } - - return CxxTest::StdioPrinter().run(); -} - - -// The CxxTest "world" - - diff --git a/cxxtest/sample/parts/Makefile.unix b/cxxtest/sample/parts/Makefile.unix deleted file mode 100644 index 5e6ae4e43..000000000 --- a/cxxtest/sample/parts/Makefile.unix +++ /dev/null @@ -1,39 +0,0 @@ -# -# (GNU) Makefile for UN*X-like systems -# This makefile shows how to make a different runner for each test -# - -.PHONY: all clean - -all: run - -clean: - rm -f *~ *.cpp *.o runner - -CXXTESTDIR = ../.. -CXXTESTGEN = $(CXXTESTDIR)/cxxtestgen.pl -CXXTESTFLAGS = --have-eh --abort-on-fail - -TESTS = $(wildcard ../*Test.h) -OBJS = runner.o $(TESTS:../%.h=%.o) - -run: runner - ./runner - -runner: $(OBJS) - c++ -o $@ $^ - -%.o: %.cpp - c++ -c -o $@ -I $(CXXTESTDIR) -I .. $^ - -%.cpp: ../%.h - $(CXXTESTGEN) $(CXXTESTFLAGS) --part -o $@ $^ - -runner.cpp: - $(CXXTESTGEN) $(CXXTESTFLAGS) --root --error-printer -o $@ - -# -# Local Variables: -# compile-command: "make -fMakefile.unix" -# End: -# diff --git a/cxxtest/sample/winddk/Makefile b/cxxtest/sample/winddk/Makefile deleted file mode 100644 index 8bf25333e..000000000 --- a/cxxtest/sample/winddk/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -# Standard DDK Makefile -!include $(NTMAKEENV)\makefile.def diff --git a/cxxtest/sample/winddk/Makefile.inc b/cxxtest/sample/winddk/Makefile.inc deleted file mode 100644 index edc6f8c8c..000000000 --- a/cxxtest/sample/winddk/Makefile.inc +++ /dev/null @@ -1,15 +0,0 @@ -# -*- Makefile -*- - -# -# Tell the DDK how to generate RunTests.cpp from RunTests.tpl and the tests -# - -PERL=perl -PYTHON=python -CXXTESTGEN=$(PERL) $(CXXTESTDIR)/cxxtestgen.pl -#CXXTESTGEN=$(PYTHON) $(CXXTESTDIR)/cxxtestgen.py - -TEST_SUITES=$(SUITESDIR)/*.h - -RunTests.cpp: RunTests.tpl $(TEST_SUITES) - $(CXXTESTGEN) -o $@ --template=RunTests.tpl $(TEST_SUITES) diff --git a/cxxtest/sample/winddk/RunTests.tpl b/cxxtest/sample/winddk/RunTests.tpl deleted file mode 100644 index 917f14b4d..000000000 --- a/cxxtest/sample/winddk/RunTests.tpl +++ /dev/null @@ -1,13 +0,0 @@ -// -*- C++ -*- - -// -// The DDK doesn't handle too well -// -#include - -int __cdecl main() -{ - return CxxTest::StdioPrinter().run(); -} - - diff --git a/cxxtest/sample/winddk/SOURCES b/cxxtest/sample/winddk/SOURCES deleted file mode 100644 index dae014888..000000000 --- a/cxxtest/sample/winddk/SOURCES +++ /dev/null @@ -1,46 +0,0 @@ -# -*- Makefile -*- - -# -# Build this sample with the Windows DDK (XP or later) -# -SUITESDIR=.. -CXXTESTDIR=../.. - -# -# Build a user-mode application -# -TARGETNAME=RunTests -TARGETPATH=. -TARGETTYPE=PROGRAM - -# -# Make it a console-mode app -# -UMTYPE=console - -# -# Add CxxTest and tests directory to include path -# -INCLUDES=$(SUITESDIR);$(CXXTESTDIR) - -# -# Enable exception handling and standard library -# -USE_NATIVE_EH=1 -LINKER_FLAGS=$(LINKER_FLAGS) -IGNORE:4099 -386_WARNING_LEVEL=-W3 -WX -wd4290 - -TARGETLIBS=\ - $(CRT_LIB_PATH)\libcp.lib \ - $(CRT_LIB_PATH)\libc.lib - -# -# Only one source file -- the generated test runner -# -SOURCES=RunTests.cpp - -# -# This line tells the build utility to process Makefile.inc -# -NTTARGETFILE0=RunTests.cpp - diff --git a/cxxtest/sample/yes_no_runner.cpp b/cxxtest/sample/yes_no_runner.cpp deleted file mode 100644 index c32b94cd5..000000000 --- a/cxxtest/sample/yes_no_runner.cpp +++ /dev/null @@ -1,11 +0,0 @@ -// -// A sample program that uses class YesNoRunner to run all the tests -// and find out if all pass. -// - -#include - -int main() -{ - return CxxTest::YesNoRunner().run(); -} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4ba738635..9928f9694 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -112,7 +112,6 @@ set(sp_SRC sp-glyph.h sp-gradient-reference.h sp-gradient-spread.h - sp-gradient-test.h sp-gradient-units.h sp-gradient-vector.h sp-gradient.h @@ -160,7 +159,6 @@ set(sp_SRC sp-star.h sp-stop.h sp-string.h - sp-style-elem-test.h sp-style-elem.h sp-switch.h sp-symbol.h @@ -278,7 +276,6 @@ set(inkscape_SRC MultiPrinter.h PylogFormatter.h TRPIFormatter.h - attributes-test.h attributes.h axis-manip.h bad-uri-exception.h @@ -287,7 +284,6 @@ set(inkscape_SRC cms-color-types.h cms-system.h color-profile-cms-fns.h - color-profile-test.h color-profile.h color-rgba.h color.h @@ -302,7 +298,6 @@ set(inkscape_SRC desktop-style.h desktop.h device-manager.h - dir-util-test.h dir-util.h document-private.h document-subset.h @@ -312,7 +307,6 @@ set(inkscape_SRC enums.h event-log.h event.h - extract-uri-test.h extract-uri.h file.h fill-or-stroke.h @@ -343,26 +337,22 @@ set(inkscape_SRC line-snapper.h macros.h main-cmdlineact.h - marker-test.h media.h menus-skeleton.h message-context.h message-stack.h message.h - mod360-test.h mod360.h number-opt-number.h object-hierarchy.h object-set.h object-snapper.h - object-test.h path-chemistry.h path-prefix.h persp3d-reference.h persp3d.h perspective-line.h preferences-skeleton.h - preferences-test.h preferences.h prefix.h print.h @@ -374,7 +364,6 @@ set(inkscape_SRC removeoverlap.h require-config.h resource-manager.h - round-test.h round.h rubberband.h satisfied-guide-cns.h @@ -398,13 +387,11 @@ set(inkscape_SRC strneq.h style-enums.h style-internal.h - style-test.h style.h svg-profile.h svg-view-widget.h svg-view.h syseq.h - test-helpers.h text-chemistry.h text-editing.h text-tag-attributes.h @@ -413,10 +400,8 @@ set(inkscape_SRC undo-stack-observer.h unicoderange.h uri-references.h - uri-test.h uri.h vanishing-point.h - verbs-test.h verbs.h version.h ) diff --git a/src/attributes-test.h b/src/attributes-test.h deleted file mode 100644 index bfb67064b..000000000 --- a/src/attributes-test.h +++ /dev/null @@ -1,611 +0,0 @@ - -#ifndef SEEN_ATTRIBUTES_TEST_H -#define SEEN_ATTRIBUTES_TEST_H - -#include - -#include -#include -#include -#include "attributes.h" -#include "streq.h" - -class AttributesTest : public CxxTest::TestSuite -{ -public: - - AttributesTest() - { - } - virtual ~AttributesTest() {} - -// createSuite and destroySuite get us per-suite setup and teardown -// without us having to worry about static initialization order, etc. - static AttributesTest *createSuite() { return new AttributesTest(); } - static void destroySuite( AttributesTest *suite ) { delete suite; } - - - void testAttributes() - { -/* Extracted mechanically from http://www.w3.org/TR/SVG11/attindex.html: - - tidy -wrap 999 -asxml < attindex.html 2>/dev/null | - tr -d \\n | - sed 's,,@,g' | - tr @ \\n | - sed 's,.*,,;s,^,,;1,/^%/d;/^%/d;s,^, {",;s/$/", false},/' | - uniq - - attindex.html lacks attributeName, begin, additive, font, marker; - I've added these manually. - - SVG 2: white-space, shape-inside, shape-outside, shape-padding, shape-margin - SVG 2: text-decoration-fill, text-decoration-stroke - SVG 2: solid-color, solid-opacity - SVG 2: Hatches and Meshes, radial gradient 'fr' - CSS 3: text-orientation - CSS 3: font-variant-xxx, font-feature-settings -*/ -struct {char const *attr; bool supported;} const all_attrs[] = { - {"attributeName", true}, - {"begin", true}, - {"additive", true}, - {"font", true}, - {"-inkscape-font-specification", true}, // TODO look into this attribute's name - {"marker", true}, - {"line-height", true}, - - {"accent-height", true}, - {"accumulate", true}, - {"alignment-baseline", true}, - {"alphabetic", true}, - {"amplitude", true}, - {"animate", false}, - {"arabic-form", true}, - {"ascent", true}, - {"attributeType", true}, - {"azimuth", true}, - {"baseFrequency", true}, - {"baseline-shift", true}, - {"baseProfile", false}, - {"bbox", true}, - {"bias", true}, - {"by", true}, - {"calcMode", true}, - {"cap-height", true}, - {"class", false}, - {"clip", true}, - {"clip-path", true}, - {"clip-rule", true}, - {"clipPathUnits", true}, - {"color", true}, - {"color-interpolation", true}, - {"color-interpolation-filters", true}, - {"color-profile", true}, - {"color-rendering", true}, - {"contentScriptType", false}, - {"contentStyleType", false}, - {"cursor", true}, - {"cx", true}, - {"cy", true}, - {"d", true}, - {"descent", true}, - {"diffuseConstant", true}, - {"direction", true}, - {"display", true}, - {"divisor", true}, - {"dominant-baseline", true}, - {"dur", true}, - {"dx", true}, - {"dy", true}, - {"edgeMode", true}, - {"elevation", true}, - {"enable-background", true}, - {"end", true}, - {"exponent", true}, - {"externalResourcesRequired", false}, - {"fill", true}, - {"fill-opacity", true}, - {"fill-rule", true}, - {"filter", true}, - {"filterRes", true}, - {"filterUnits", true}, - {"flood-color", true}, - {"flood-opacity", true}, - {"font-family", true}, - {"font-feature-settings", true}, - {"font-size", true}, - {"font-size-adjust", true}, - {"font-stretch", true}, - {"font-style", true}, - {"font-variant", true}, - {"font-variant-ligatures", true}, - {"font-variant-position", true}, - {"font-variant-caps", true}, - {"font-variant-numeric", true}, - {"font-variant-east-asian", true}, - {"font-variant-alternates", true}, - {"font-weight", true}, - {"format", false}, - {"from", true}, - {"fx", true}, - {"fy", true}, - {"fr", true}, - {"g1", true}, - {"g2", true}, - {"glyph-name", true}, - {"glyph-orientation-horizontal", true}, - {"glyph-orientation-vertical", true}, - {"glyphRef", false}, - {"gradientTransform", true}, - {"gradientUnits", true}, - {"hanging", true}, - {"height", true}, - {"horiz-adv-x", true}, - {"horiz-origin-x", true}, - {"horiz-origin-y", true}, - {"ideographic", true}, - {"image-rendering", true}, - {"in", true}, - {"in2", true}, - {"intercept", true}, - {"isolation", true}, - {"k", true}, - {"k1", true}, - {"k2", true}, - {"k3", true}, - {"k4", true}, - {"kernelMatrix", true}, - {"kernelUnitLength", true}, - {"kerning", true}, - {"keyPoints", false}, - {"keySplines", true}, - {"keyTimes", true}, - {"lang", true}, - {"lengthAdjust", true}, - {"letter-spacing", true}, - {"lighting-color", true}, - {"limitingConeAngle", true}, - {"local", true}, - {"marker-end", true}, - {"marker-mid", true}, - {"marker-start", true}, - {"markerHeight", true}, - {"markerUnits", true}, - {"markerWidth", true}, - {"mask", true}, - {"maskContentUnits", true}, - {"maskUnits", true}, - {"mathematical", true}, - {"max", true}, - {"media", false}, - {"method", false}, - {"min", true}, - {"mix-blend-mode", true}, - {"mode", true}, - {"name", true}, - {"numOctaves", true}, - {"offset", true}, - {"onabort", false}, - {"onactivate", false}, - {"onbegin", false}, - {"onclick", false}, - {"onend", false}, - {"onerror", false}, - {"onfocusin", false}, - {"onfocusout", false}, - {"onload", true}, - {"onmousedown", false}, - {"onmousemove", false}, - {"onmouseout", false}, - {"onmouseover", false}, - {"onmouseup", false}, - {"onrepeat", false}, - {"onresize", false}, - {"onscroll", false}, - {"onunload", false}, - {"onzoom", false}, - {"opacity", true}, - {"operator", true}, - {"order", true}, - {"orient", true}, - {"orientation", true}, - {"origin", false}, - {"overflow", true}, - {"overline-position", true}, - {"overline-thickness", true}, - {"paint-order", true}, - {"panose-1", true}, - {"path", true}, - {"pathLength", false}, - {"patternContentUnits", true}, - {"patternTransform", true}, - {"patternUnits", true}, - {"pointer-events", true}, - {"points", true}, - {"pointsAtX", true}, - {"pointsAtY", true}, - {"pointsAtZ", true}, - {"preserveAlpha", true}, - {"preserveAspectRatio", true}, - {"primitiveUnits", true}, - {"r", true}, - {"radius", true}, - {"refX", true}, - {"refY", true}, - {"rendering-intent", true}, - {"repeatCount", true}, - {"repeatDur", true}, - {"requiredFeatures", true}, - {"requiredExtensions", true}, - {"restart", true}, - {"result", true}, - {"rotate", true}, - {"rx", true}, - {"ry", true}, - {"scale", true}, - {"seed", true}, - {"shape-inside", true}, - {"shape-margin", true}, - {"shape-outside", true}, - {"shape-padding", true}, - {"shape-rendering", true}, - {"slope", true}, - {"spacing", false}, - {"specularConstant", true}, - {"specularExponent", true}, - {"spreadMethod", true}, - {"startOffset", true}, - {"stdDeviation", true}, - {"stemh", true}, - {"stemv", true}, - {"stitchTiles", true}, - {"stop-color", true}, - {"stop-opacity", true}, - {"strikethrough-position", true}, - {"strikethrough-thickness", true}, - {"stroke", true}, - {"stroke-dasharray", true}, - {"stroke-dashoffset", true}, - {"stroke-linecap", true}, - {"stroke-linejoin", true}, - {"stroke-miterlimit", true}, - {"stroke-opacity", true}, - {"stroke-width", true}, - {"style", true}, - {"surfaceScale", true}, - {"systemLanguage", true}, - {"tableValues", true}, - {"target", true}, - {"targetX", true}, - {"targetY", true}, - {"text-align", true}, - {"text-anchor", true}, - {"text-decoration", true}, - {"text-decoration-line", true}, - {"text-decoration-style", true}, - {"text-decoration-color", true}, - {"text-decoration-fill", true}, - {"text-decoration-stroke", true}, - {"text-indent", true}, - {"text-rendering", true}, - {"text-transform", true}, - {"textLength", true}, - {"title", false}, - {"to", true}, - {"transform", true}, - {"type", true}, - {"u1", true}, - {"u2", true}, - {"underline-position", true}, - {"underline-thickness", true}, - {"unicode", true}, - {"unicode-bidi", true}, - {"unicode-range", true}, - {"units-per-em", true}, - {"v-alphabetic", true}, - {"v-hanging", true}, - {"v-ideographic", true}, - {"v-mathematical", true}, - {"values", true}, - {"version", true}, - {"vert-adv-y", true}, - {"vert-origin-x", true}, - {"vert-origin-y", true}, - {"viewBox", true}, - {"viewTarget", false}, - {"visibility", true}, - {"white-space", true}, - {"width", true}, - {"widths", true}, - {"word-spacing", true}, - {"writing-mode", true}, - {"text-orientation", true}, - {"x", true}, - {"x-height", true}, - {"x1", true}, - {"x2", true}, - {"xChannelSelector", true}, - {"xlink:actuate", true}, - {"xlink:arcrole", true}, - {"xlink:href", true}, - {"xlink:role", true}, - {"xlink:show", true}, - {"xlink:title", true}, - {"xlink:type", true}, - {"xml:base", false}, - {"xml:space", true}, - {"xmlns", false}, - {"xmlns:xlink", false}, - {"y", true}, - {"y1", true}, - {"y2", true}, - {"yChannelSelector", true}, - {"z", true}, - {"zoomAndPan", false}, - - /* Extra attributes. */ - {"id", true}, - {"sodipodi:docname", true}, - {"sodipodi:insensitive", true}, - {"sodipodi:type", true}, - {"inkscape:collect", true}, - {"inkscape:document-units", true}, - {"inkscape:label", true}, - {"inkscape:groupmode", true}, - {"inkscape:version", true}, - {"inkscape:object-paths", true}, - - {"inkscape:original-d", true}, - {"inkscape:pageopacity", true}, - {"inkscape:pageshadow", true}, - {"inkscape:path-effect", true}, - - // SPItem - {"inkscape:transform-center-x", true}, - {"inkscape:transform-center-y", true}, - {"inkscape:highlight-color", true}, - - // Measure tool - {"inkscape:measure-start", true}, - {"inkscape:measure-end", true}, - - // Spray tool - {"inkscape:spray-origin", true}, - - // Connector tool - {"inkscape:connector-type", true}, - {"inkscape:connection-start", true}, - {"inkscape:connection-end", true}, - {"inkscape:connection-points", true}, - {"inkscape:connection-start-point", true}, - {"inkscape:connection-end-point", true}, - {"inkscape:connector-curvature", true}, - {"inkscape:connector-avoid", true}, - {"inkscape:connector-spacing", true}, - - // Ellipse, Spiral, Star - {"sodipodi:cx", true}, - {"sodipodi:cy", true}, - {"sodipodi:rx", true}, - {"sodipodi:ry", true}, - - // Box tool - {"inkscape:perspectiveID", true}, - {"inkscape:corner0", true}, - {"inkscape:corner7", true}, - {"inkscape:box3dsidetype", true}, - {"inkscape:persp3d", true}, - {"inkscape:vp_x", true}, - {"inkscape:vp_y", true}, - {"inkscape:vp_z", true}, - {"inkscape:persp3d-origin", true}, - - // Star tool - {"sodipodi:start", true}, - {"sodipodi:end", true}, - {"sodipodi:open", true}, - {"sodipodi:sides", true}, - {"sodipodi:r1", true}, - {"sodipodi:r2", true}, - {"sodipodi:arg1", true}, - {"sodipodi:arg2", true}, - {"inkscape:flatsided", true}, - {"inkscape:rounded", true}, - {"inkscape:randomized", true}, - {"sodipodi:expansion", true}, - {"sodipodi:revolution", true}, - {"sodipodi:radius", true}, - {"sodipodi:argument", true}, - {"sodipodi:t0", true}, - {"sodipodi:original", true}, - {"inkscape:original", true}, - {"inkscape:href", true}, - {"inkscape:radius", true}, - {"sodipodi:role", true}, - {"sodipodi:linespacing", true}, - {"inkscape:srcNoMarkup", true}, - {"inkscape:srcPango", true}, - {"inkscape:dstShape", true}, - {"inkscape:dstPath", true}, - {"inkscape:dstBox", true}, - {"inkscape:dstColumn", true}, - {"inkscape:excludeShape", true}, - {"inkscape:layoutOptions", true}, - {"osb:paint", true}, - - /* SPSolidColor" */ - {"solid-color", true}, - {"solid-opacity", true}, - - /* SPMeshPatch */ - {"tensor", true}, - - /* SPHash */ - {"hatchUnits", true}, - {"hatchContentUnits", true}, - {"hatchTransform", true}, - {"pitch", true}, - - /* SPNamedView */ - {"fit-margin-top", true}, - {"fit-margin-left", true}, - {"fit-margin-right", true}, - {"fit-margin-bottom", true}, - {"units", true}, - {"viewonly", true}, - {"showgrid", true}, -// {"gridtype", true}, - {"showguides", true}, -// {"inkscape:lockguides", false}, //not sure about uncomment - {"gridtolerance", true}, - {"guidetolerance", true}, - {"objecttolerance", true}, -/* {"gridoriginx", true}, - {"gridoriginy", true}, - {"gridspacingx", true}, - {"gridspacingy", true}, - {"gridanglex", true}, - {"gridanglez", true}, - {"gridcolor", true}, - {"gridopacity", true}, - {"gridempcolor", true}, - {"gridempopacity", true}, - {"gridempspacing", true}, */ - {"guidecolor", true}, - {"guideopacity", true}, - {"guidehicolor", true}, - {"guidehiopacity", true}, - {"showborder", true}, - {"inkscape:showpageshadow", true}, - {"borderlayer", true}, - {"bordercolor", true}, - {"borderopacity", true}, - {"pagecolor", true}, - - {"inkscape:zoom", true}, - {"inkscape:cx", true}, - {"inkscape:cy", true}, - {"inkscape:window-width", true}, - {"inkscape:window-height", true}, - {"inkscape:window-x", true}, - {"inkscape:window-y", true}, - {"inkscape:window-maximized", true}, - {"inkscape:current-layer", true}, - {"inkscape:pagecheckerboard", true}, - - /* SPGuide */ - {"position", true}, - {"inkscape:color", true}, - {"inkscape:lockguides", true}, - {"inkscape:locked", true}, - - /* Snapping */ - {"inkscape:snap-perpendicular", true}, - {"inkscape:snap-tangential", true}, - {"inkscape:snap-path-clip", true}, - {"inkscape:snap-path-mask", true}, - {"inkscape:object-nodes", true}, - {"inkscape:bbox-paths", true}, - {"inkscape:bbox-nodes", true}, - {"inkscape:snap-page", true}, - {"inkscape:snap-global", true}, - {"inkscape:snap-bbox", true}, - {"inkscape:snap-nodes", true}, - {"inkscape:snap-others", true}, - {"inkscape:snap-from-guide", true}, - {"inkscape:snap-center", true}, - {"inkscape:snap-smooth-nodes", true}, - {"inkscape:snap-midpoints", true}, - {"inkscape:snap-object-midpoints", true}, - {"inkscape:snap-text-baseline", true}, - {"inkscape:snap-bbox-edge-midpoints", true}, - {"inkscape:snap-bbox-midpoints", true}, - {"inkscape:snap-grids", true}, - {"inkscape:snap-to-guides", true}, - {"inkscape:snap-intersection-paths", true}, - - /* SPTag */ - {"inkscape:expanded", true} -}; - - - - std::vector ids; - ids.reserve(256); - - for (unsigned i = 0; i < G_N_ELEMENTS(all_attrs); ++i) { - char const *const attr_str = all_attrs[i].attr; - unsigned const id = sp_attribute_lookup(attr_str); - bool const recognized(id); - TSM_ASSERT_EQUALS( std::string(all_attrs[i].attr), recognized, all_attrs[i].supported ); - if (recognized) { - if (ids.size() <= id) { - ids.resize(id + 1); - } - TS_ASSERT(!ids[id]); - ids[id] = true; - - unsigned char const *reverse_ustr = sp_attribute_name(id); - char const *reverse_str = reinterpret_cast(reverse_ustr); - TS_ASSERT(streq(reverse_str, attr_str)); - } - } - - /* Test for any attributes that this test program doesn't know about. - * - * If any are found, then: - * - * If it is in the `inkscape:' namespace then simply add it to all_attrs with - * `true' as the second field (`supported'). - * - * If it is in the `sodipodi:' namespace then check the spelling against sodipodi - * sources. If you don't have sodipodi sources, then don't add it: leave to someone - * else. - * - * Otherwise, it's probably a bug: ~all SVG 1.1 attributes should already be - * in the all_attrs table. However, the comment above all_attrs does mention - * some things missing from attindex.html, so there may be more. Check the SVG - * spec. Another possibility is that the attribute is new in SVG 1.2. In this case, - * check the spelling against the [draft] SVG 1.2 spec before adding to all_attrs. - * (If you can't be bothered checking the spec, then don't update all_attrs.) - * - * If the attribute isn't in either SVG 1.1 or 1.2 then it's probably a mistake - * for it not to be in the inkscape namespace. (Not sure about attributes used only - * on elements in the inkscape namespace though.) - * - * In any case, make sure that the attribute's source is documented accordingly. - */ - bool found = false; - unsigned const n_ids = ids.size(); - for (unsigned id = 1; id < n_ids; ++id) { - if (!ids[id]) { - gchar* tmp = g_strdup_printf( "Attribute string with enum %d {%s} not handled", id, sp_attribute_name(id) ); - TS_WARN( std::string((const char*)tmp) ); - g_free( tmp ); - found = true; - } - } - TS_ASSERT(!found); - - for ( unsigned int index = 1; index < n_ids; index++ ) { - guchar const* name = sp_attribute_name(index); - unsigned int postLookup = sp_attribute_lookup( reinterpret_cast(name) ); - TSM_ASSERT_EQUALS( std::string("Enum round-trip through string {") + (char const*)name + "} failed.", index, postLookup ); - } - - } -}; - -#endif // SEEN_ATTRIBUTES_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/color-profile-test.h b/src/color-profile-test.h deleted file mode 100644 index 4276eb774..000000000 --- a/src/color-profile-test.h +++ /dev/null @@ -1,150 +0,0 @@ - -#ifndef SEEN_COLOR_PROFILE_TEST_H -#define SEEN_COLOR_PROFILE_TEST_H - -#include -#include - -#include "test-helpers.h" - - -#include "color-profile.h" -#include "cms-system.h" - -class ColorProfileTest : public CxxTest::TestSuite -{ -public: - SPDocument* _doc; - - ColorProfileTest() : - _doc(0) - { - } - - virtual ~ColorProfileTest() - { - if ( _doc ) - { - _doc->doUnref(); - } - } - - static void createSuiteSubclass( ColorProfileTest*& dst ) - { - Inkscape::ColorProfile *prof = new Inkscape::ColorProfile(); - if ( prof ) { - if ( prof->rendering_intent == (guint)Inkscape::RENDERING_INTENT_UNKNOWN ) { - TS_ASSERT_EQUALS( prof->rendering_intent, (guint)Inkscape::RENDERING_INTENT_UNKNOWN ); - dst = new ColorProfileTest(); - } - delete prof; - } - } - -// createSuite and destroySuite get us per-suite setup and teardown -// without us having to worry about static initialization order, etc. - static ColorProfileTest *createSuite() - { - ColorProfileTest* suite = Inkscape::createSuiteAndDocument( createSuiteSubclass ); - return suite; - } - - static void destroySuite( ColorProfileTest *suite ) - { - delete suite; - } - - // --------------------------------------------------------------- - // --------------------------------------------------------------- - // --------------------------------------------------------------- - - void testSetRenderingIntent() - { - struct { - gchar const *attr; - guint intVal; - } - const cases[] = { - {"auto", (guint)Inkscape::RENDERING_INTENT_AUTO}, - {"perceptual", (guint)Inkscape::RENDERING_INTENT_PERCEPTUAL}, - {"relative-colorimetric", (guint)Inkscape::RENDERING_INTENT_RELATIVE_COLORIMETRIC}, - {"saturation", (guint)Inkscape::RENDERING_INTENT_SATURATION}, - {"absolute-colorimetric", (guint)Inkscape::RENDERING_INTENT_ABSOLUTE_COLORIMETRIC}, - {"something-else", (guint)Inkscape::RENDERING_INTENT_UNKNOWN}, - {"auto2", (guint)Inkscape::RENDERING_INTENT_UNKNOWN}, - }; - - Inkscape::ColorProfile *prof = new Inkscape::ColorProfile(); - TS_ASSERT( prof ); - SP_OBJECT(prof)->document = _doc; - - for ( size_t i = 0; i < G_N_ELEMENTS( cases ); i++ ) { - std::string descr(cases[i].attr); - SP_OBJECT(prof)->setKeyValue( SP_ATTR_RENDERING_INTENT, cases[i].attr); - TSM_ASSERT_EQUALS( descr, prof->rendering_intent, (guint)cases[i].intVal ); - } - - delete prof; - } - - void testSetLocal() - { - gchar const* cases[] = { - "local", - "something", - }; - - Inkscape::ColorProfile *prof = new Inkscape::ColorProfile(); - TS_ASSERT( prof ); - SP_OBJECT(prof)->document = _doc; - - for ( size_t i = 0; i < G_N_ELEMENTS( cases ); i++ ) { - SP_OBJECT(prof)->setKeyValue( SP_ATTR_LOCAL, cases[i]); - TS_ASSERT( prof->local ); - if ( prof->local ) { - TS_ASSERT_EQUALS( std::string(prof->local), std::string(cases[i]) ); - } - } - SP_OBJECT(prof)->setKeyValue( SP_ATTR_LOCAL, NULL); - TS_ASSERT_EQUALS( prof->local, (gchar*)0 ); - - delete prof; - } - - void testSetName() - { - gchar const* cases[] = { - "name", - "something", - }; - - Inkscape::ColorProfile *prof = new Inkscape::ColorProfile(); - TS_ASSERT( prof ); - SP_OBJECT(prof)->document = _doc; - - for ( size_t i = 0; i < G_N_ELEMENTS( cases ); i++ ) { - SP_OBJECT(prof)->setKeyValue( SP_ATTR_NAME, cases[i]); - TS_ASSERT( prof->name ); - if ( prof->name ) { - TS_ASSERT_EQUALS( std::string(prof->name), std::string(cases[i]) ); - } - } - SP_OBJECT(prof)->setKeyValue( SP_ATTR_NAME, NULL); - TS_ASSERT_EQUALS( prof->name, (gchar*)0 ); - - delete prof; - } -}; - -#endif // SEEN_COLOR_PROFILE_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/cxxtest-template.tpl b/src/cxxtest-template.tpl deleted file mode 100644 index df20bebfd..000000000 --- a/src/cxxtest-template.tpl +++ /dev/null @@ -1,13 +0,0 @@ -// -*- C++ -*- -// - -#include "MultiPrinter.h" - -int main( int argc, char *argv[] ) -{ - (void)argc; - return CxxTest::MultiPrinter( argv[0] ).run(); -} - -// The CxxTest "world" - diff --git a/src/dir-util-test.h b/src/dir-util-test.h deleted file mode 100644 index 735f0174e..000000000 --- a/src/dir-util-test.h +++ /dev/null @@ -1,56 +0,0 @@ - -#ifndef SEEN_DIR_UTIL_TEST_H -#define SEEN_DIR_UTIL_TEST_H - -#include - -#include "dir-util.h" - -class DirUtilTest : public CxxTest::TestSuite -{ -public: - void testBase() - { - char const* cases[][3] = { -#if defined(WIN32) || defined(__WIN32__) - {"\\foo\\bar", "\\foo", "bar"}, - {"\\foo\\barney", "\\foo\\bar", "\\foo\\barney"}, - {"\\foo\\bar\\baz", "\\foo\\", "bar\\baz"}, - {"\\foo\\bar\\baz", "\\", "foo\\bar\\baz"}, - {"\\foo\\bar\\baz", "\\foo\\qux", "\\foo\\bar\\baz"}, -#else - {"/foo/bar", "/foo", "bar"}, - {"/foo/barney", "/foo/bar", "/foo/barney"}, - {"/foo/bar/baz", "/foo/", "bar/baz"}, - {"/foo/bar/baz", "/", "foo/bar/baz"}, - {"/foo/bar/baz", "/foo/qux", "/foo/bar/baz"}, -#endif - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) - { - if ( cases[i][0] && cases[i][1] ) { // std::string can't use null. - std::string result = sp_relative_path_from_path( cases[i][0], cases[i][1] ); - TS_ASSERT( !result.empty() ); - if ( !result.empty() ) - { - TS_ASSERT_EQUALS( result, std::string(cases[i][2]) ); - } - } - } - } - -}; - -#endif // SEEN_DIR_UTIL_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/extract-uri-test.h b/src/extract-uri-test.h deleted file mode 100644 index e795960a9..000000000 --- a/src/extract-uri-test.h +++ /dev/null @@ -1,88 +0,0 @@ - -#ifndef SEEN_EXTRACT_URI_TEST_H -#define SEEN_EXTRACT_URI_TEST_H - -#include - -#include "extract-uri.h" - -class ExtractURITest : public CxxTest::TestSuite -{ -public: - void checkOne( char const* str, char const* expected ) - { - gchar* result = extract_uri( str ); - TS_ASSERT_EQUALS( ( result == NULL ), ( expected == NULL ) ); - if ( result && expected ) { - TS_ASSERT_EQUALS( std::string(result), std::string(expected) ); - } else if ( result ) { - TS_FAIL( std::string("Expected null, found (") + result + ")" ); - } else if ( expected ) { - TS_FAIL( std::string("Expected (") + expected + "), found null" ); - } - g_free( result ); - } - - void testBase() - { - char const* cases[][2] = { - { "url(#foo)", "#foo" }, - { "url foo ", NULL }, - { "url", NULL }, - { "url ", NULL }, - { "url()", NULL }, - { "url ( ) ", NULL }, - { "url foo bar ", NULL }, - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) - { - checkOne( cases[i][0], cases[i][1] ); - } - } - - void testWithTrailing() - { - char const* cases[][2] = { - { "url(#foo) bar", "#foo" }, - { "url() bar", NULL }, - { "url ( ) bar ", NULL } - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) - { - checkOne( cases[i][0], cases[i][1] ); - } - } - - void testQuoted() - { - char const* cases[][2] = { - { "url('#foo')", "#foo" }, - { "url(\"#foo\")", "#foo" }, - { "url('#f o o')", "#f o o" }, - { "url(\"#f o o\")", "#f o o" }, - { "url('#fo\"o')", "#fo\"o" }, - { "url(\"#fo'o\")", "#fo'o" }, - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) - { - checkOne( cases[i][0], cases[i][1] ); - } - } - -}; - -#endif // SEEN_EXTRACT_URI_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/marker-test.h b/src/marker-test.h deleted file mode 100644 index bf7e1040a..000000000 --- a/src/marker-test.h +++ /dev/null @@ -1,39 +0,0 @@ -/** @file - * @brief Unit tests for SVG marker handling - */ -/* Authors: - * Johan Engelen - * - * This file is released into the public domain. - */ - -#include - -#include "sp-marker-loc.h" - -class MarkerTest : public CxxTest::TestSuite -{ -public: - - void testMarkerLoc() - { - // code depends on these *exact* values, so check them here. - TS_ASSERT_EQUALS(SP_MARKER_LOC, 0); - TS_ASSERT_EQUALS(SP_MARKER_LOC_START, 1); - TS_ASSERT_EQUALS(SP_MARKER_LOC_MID, 2); - TS_ASSERT_EQUALS(SP_MARKER_LOC_END, 3); - TS_ASSERT_EQUALS(SP_MARKER_LOC_QTY, 4); - } - -}; - -/* - 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:fileencoding=utf-8:textwidth=99 : diff --git a/src/mod360-test.h b/src/mod360-test.h deleted file mode 100644 index 932361eb3..000000000 --- a/src/mod360-test.h +++ /dev/null @@ -1,56 +0,0 @@ - -#ifndef SEEN_MOD_360_TEST_H -#define SEEN_MOD_360_TEST_H - -#include -#include <2geom/math-utils.h> -#include "mod360.h" - - -class Mod360Test : public CxxTest::TestSuite -{ -public: - static double inf() { return INFINITY; } - static double nan() { return ((double)INFINITY) - ((double)INFINITY); } - - void testMod360() - { - double cases[][2] = { - {0, 0}, - {10, 10}, - {360, 0}, - {361, 1}, - {-1, 359}, - {-359, 1}, - {-360, -0}, - {-361, 359}, - {inf(), 0}, - {-inf(), 0}, - {nan(), 0}, - {720, 0}, - {-721, 359}, - {-1000, 80} - }; - - for ( unsigned i = 0; i < G_N_ELEMENTS(cases); i++ ) { - double result = mod360( cases[i][0] ); - TS_ASSERT_EQUALS( cases[i][1], result ); - } - } - -}; - - -#endif // SEEN_MOD_360_TEST_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:fileencoding=utf-8:textwidth=99 : - diff --git a/src/object-test.h b/src/object-test.h deleted file mode 100644 index 0af823684..000000000 --- a/src/object-test.h +++ /dev/null @@ -1,234 +0,0 @@ -#ifndef SEEN_OBJECT_TEST_H -#define SEEN_OBJECT_TEST_H - -#include -#include -#include -#include -#include - -#include "document.h" -#include "sp-item-group.h" -#include "sp-object.h" -#include "sp-path.h" -#include "sp-root.h" -#include "xml/document.h" -#include "xml/node.h" - -class ObjectTest : public CxxTest::TestSuite -{ -public: - virtual ~ObjectTest() {} - - static ObjectTest *createSuite() { return new ObjectTest(); } - static void destroySuite(ObjectTest *suite) { delete suite; } - - void testObjects() - { - clock_t begin, end; - // Sample document - // svg:svg - // svg:defs - // svg:path - // svg:linearGradient - // svg:stop - // svg:filter - // svg:feGaussianBlur (feel free to implement for other filters) - // svg:clipPath - // svg:rect - // svg:g - // svg:use - // svg:circle - // svg:ellipse - // svg:text - // svg:polygon - // svg:polyline - // svg:image - // svg:line - - char const *docString = - "\n" - "\n" - "SVG test\n" - "\n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - " \n" - "\n" - - "\n" - " \n" - " \n" - " \n" - " TEST\n" - " \n" - " \n" - " \n" - " \n" - "\n" - "\n"; - - begin = clock(); - SPDocument *doc = SPDocument::createNewDocFromMem(docString, strlen(docString), false); - end = clock(); - - assert(doc != NULL); // cannot continue if doc is null, abort! - assert(doc->getRoot() != NULL); - - SPRoot *root = doc->getRoot(); - assert(root->getRepr() != NULL); - assert(root->hasChildren()); - - std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to construct the test document\n"; - - SPPath *path = dynamic_cast(doc->getObjectById("P")); - testClones(path); - - SPGroup *group = dynamic_cast(doc->getObjectById("G")); - testGrouping(group); - - // Test parent behavior - SPObject *child = root->firstChild(); - assert(child != NULL); - TS_ASSERT(child->parent == root); - TS_ASSERT(child->document == doc); - TS_ASSERT(root->isAncestorOf(child)); - - // Test list behavior - SPObject *next = child->getNext(); - SPObject *prev = next; - TS_ASSERT(next->getPrev() == child); - prev = next; - next = next->getNext(); - while (next != NULL) { - // Walk the list - TS_ASSERT(next->getPrev() == prev); - prev = next; - next = next->getNext(); - } - - // Test hrefcount - TS_ASSERT(path->isReferenced()); - } - - void testClones(SPPath *path) - { - clock_t begin, end; - - assert(path != NULL); - - // Since we don't yet have any clean way to do this (FIXME), we'll abuse the XML tree a bit. - Inkscape::XML::Node *node = path->getRepr(); - assert(node != NULL); - - Inkscape::XML::Document *xml_doc = node->document(); - - Inkscape::XML::Node *parent = node->parent(); - assert(parent != NULL); - - TS_TRACE("Benchmarking clones..."); - const size_t num_clones = 10000; - - std::string href(std::string("#") + std::string(path->getId())); - std::vector clones(num_clones, NULL); - - begin = clock(); - // Create num_clones clones of this path and stick them in the document - for (size_t i = 0; i < num_clones; ++i) { - Inkscape::XML::Node *clone = xml_doc->createElement("svg:use"); - Inkscape::GC::release(clone); - clone->setAttribute("xlink:href", href.c_str()); - parent->addChild(clone, node); - clones[i] = clone; - } - end = clock(); - - std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to write " << num_clones << " clones of a path\n"; - - begin = clock(); - // Remove those clones - for (size_t i = num_clones - 1; i >= 1; --i) { - parent->removeChild(clones[i]); - } - end = clock(); - - std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to remove " << num_clones << " clones of a path\n"; - } - - void testGrouping(SPGroup *group) - { - clock_t begin, end; - - assert(group != NULL); - - // Since we don't yet have any clean way to do this (FIXME), we'll abuse the XML tree a bit. - Inkscape::XML::Node *node = group->getRepr(); - assert(node != NULL); - - Inkscape::XML::Document *xml_doc = node->document(); - - TS_TRACE("Benchmarking groups..."); - const size_t num_elements = 10000; - - Inkscape::XML::Node *new_group = xml_doc->createElement("svg:g"); - Inkscape::GC::release(new_group); - node->addChild(new_group, NULL); - - std::vector elements(num_elements, NULL); - - begin = clock(); - for (size_t i = 0; i < num_elements; ++i) { - Inkscape::XML::Node *circle = xml_doc->createElement("svg:circle"); - Inkscape::GC::release(circle); - circle->setAttribute("cx", "2048"); - circle->setAttribute("cy", "1024"); - circle->setAttribute("r", "1.5"); - new_group->addChild(circle, NULL); - elements[i] = circle; - } - end = clock(); - - std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to write " << num_elements << " elements into a group\n"; - - SPGroup *n_group = dynamic_cast(group->get_child_by_repr(new_group)); - assert(n_group != NULL); - - begin = clock(); - std::vector ch; - sp_item_group_ungroup(n_group, ch, false); - end = clock(); - - std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to ungroup a with " << num_elements << " elements\n"; - std::cout << " Note: sp_item_group_ungroup_handle_clones() is responsible\n for most of the time as it is linear in number of elements\n which results in quadratic behavior for ungrouping." << std::endl; - - begin = clock(); - // Remove those elements - for (size_t i = num_elements - 1; i >= 1; --i) { - elements[i]->parent()->removeChild(elements[i]); - } - end = clock(); - - std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to remove " << num_elements << " elements\n"; - } -}; -#endif // SEEN_OBJECT_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/preferences-test.h b/src/preferences-test.h deleted file mode 100644 index 92cb14247..000000000 --- a/src/preferences-test.h +++ /dev/null @@ -1,136 +0,0 @@ -/** @file - * @brief Unit tests for the Preferences object - */ -/* Authors: - * Krzysztof KosiÅ„ski - * - * This file is released into the public domain. - */ - -#include -#include "preferences.h" - -#include - -// test observer -class TestObserver : public Inkscape::Preferences::Observer { -public: - TestObserver(Glib::ustring const &path) : - Inkscape::Preferences::Observer(path), - value(0) {} - - virtual void notify(Inkscape::Preferences::Entry const &val) - { - value = val.getInt(); - } - int value; -}; - -class PreferencesTest : public CxxTest::TestSuite { -public: - void setUp() { - prefs = Inkscape::Preferences::get(); - } - void tearDown() { - prefs = NULL; - Inkscape::Preferences::unload(); - } - - void testStartingState() - { - TS_ASSERT_DIFFERS(prefs, static_cast(0)); - TS_ASSERT_EQUALS(prefs->isWritable(), true); - } - - void testOverwrite() - { - prefs->setInt("/test/intvalue", 123); - prefs->setInt("/test/intvalue", 321); - TS_ASSERT_EQUALS(prefs->getInt("/test/intvalue"), 321); - } - - void testDefaultReturn() - { - TS_ASSERT_EQUALS(prefs->getInt("/this/path/does/not/exist", 123), 123); - } - - void testLimitedReturn() - { - prefs->setInt("/test/intvalue", 1000); - - // simple case - TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 0, 500), 123); - // the below may seem quirky but this behaviour is intended - TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 1001, 5000), 123); - // corner cases - TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 0, 1000), 1000); - TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 1000, 5000), 1000); - } - - void testKeyObserverNotification() - { - Glib::ustring const path = "/some/random/path"; - TestObserver obs("/some/random"); - obs.value = 1; - prefs->setInt(path, 5); - TS_ASSERT_EQUALS(obs.value, 1); // no notifications sent before adding - - prefs->addObserver(obs); - prefs->setInt(path, 10); - TS_ASSERT_EQUALS(obs.value, 10); - prefs->setInt("/some/other/random/path", 10); - TS_ASSERT_EQUALS(obs.value, 10); // value should not change - - prefs->removeObserver(obs); - prefs->setInt(path, 15); - TS_ASSERT_EQUALS(obs.value, 10); // no notifications sent after removal - } - - void testEntryObserverNotification() - { - Glib::ustring const path = "/some/random/path"; - TestObserver obs(path); - obs.value = 1; - prefs->setInt(path, 5); - TS_ASSERT_EQUALS(obs.value, 1); // no notifications sent before adding - - prefs->addObserver(obs); - prefs->setInt(path, 10); - TS_ASSERT_EQUALS(obs.value, 10); - - // test that filtering works properly - prefs->setInt("/some/random/value", 1234); - TS_ASSERT_EQUALS(obs.value, 10); - prefs->setInt("/some/randomvalue", 1234); - TS_ASSERT_EQUALS(obs.value, 10); - prefs->setInt("/some/random/path2", 1234); - TS_ASSERT_EQUALS(obs.value, 10); - - prefs->removeObserver(obs); - prefs->setInt(path, 15); - TS_ASSERT_EQUALS(obs.value, 10); // no notifications sent after removal - } - - void testPreferencesEntryMethods() - { - prefs->setInt("/test/prefentry", 100); - Inkscape::Preferences::Entry val = prefs->getEntry("/test/prefentry"); - TS_ASSERT(val.isValid()); - TS_ASSERT_EQUALS(val.getPath(), "/test/prefentry"); - TS_ASSERT_EQUALS(val.getEntryName(), "prefentry"); - TS_ASSERT_EQUALS(val.getInt(), 100); - } -private: - Inkscape::Preferences *prefs; -}; - -/* - 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:fileencoding=utf-8:textwidth=99 : diff --git a/src/round-test.h b/src/round-test.h deleted file mode 100644 index 8e9ca69e0..000000000 --- a/src/round-test.h +++ /dev/null @@ -1,91 +0,0 @@ - -#ifndef SEEN_ROUND_TEST_H -#define SEEN_ROUND_TEST_H - -#include - -#include -#include - -class RoundTest : public CxxTest::TestSuite -{ -public: - struct Case { - double arg0; - double ret; - }; - - std::vector nonneg_round_cases; - std::vector nonpos_round_cases; - - RoundTest() : - TestSuite() - { - Case cases[] = { - { 5.0, 5.0 }, - { 0.0, 0.0 }, - { 5.4, 5.0 }, - { 5.6, 6.0 }, - { 1e-7, 0.0 }, - { 1e7 + .49, 1e7 }, - { 1e7 + .51, 1e7 + 1 }, - { 1e12 + .49, 1e12 }, - { 1e12 + .51, 1e12 + 1 }, - { 1e40, 1e40 } - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) - { - nonneg_round_cases.push_back( cases[i] ); - - Case tmp = {-nonneg_round_cases[i].arg0, -nonneg_round_cases[i].ret}; - nonpos_round_cases.push_back( tmp ); - } - } - - virtual ~RoundTest() - { - } - - static RoundTest *createSuite() { return new RoundTest(); } - static void destroySuite( RoundTest *suite ) { delete suite; } - -// ------------------------------------------------------------------------- -// ------------------------------------------------------------------------- - - - - void testNonNegRound() - { - for ( size_t i = 0; i < nonneg_round_cases.size(); i++ ) - { - double result = Inkscape::round( nonneg_round_cases[i].arg0 ); - TS_ASSERT_EQUALS( result, nonneg_round_cases[i].ret ); - } - } - - void testNonPosRoung() - { - for ( size_t i = 0; i < nonpos_round_cases.size(); i++ ) - { - double result = Inkscape::round( nonpos_round_cases[i].arg0 ); - TS_ASSERT_EQUALS( result, nonpos_round_cases[i].ret ); - } - } - -}; - - -#endif // SEEN_ROUND_TEST_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:fileencoding=utf-8:textwidth=99 : - diff --git a/src/sp-gradient-test.h b/src/sp-gradient-test.h deleted file mode 100644 index 578d0c5c0..000000000 --- a/src/sp-gradient-test.h +++ /dev/null @@ -1,161 +0,0 @@ -#ifndef SEEN_SP_GRADIENT_TEST_H -#define SEEN_SP_GRADIENT_TEST_H - -#include "document-using-test.h" - - -#include "sp-gradient.h" -#include "svg/svg.h" -#include "xml/repr.h" -#include <2geom/transforms.h> -#include "helper/geom.h" - -class SPGradientTest : public DocumentUsingTest -{ -public: - SPDocument* _doc; - - SPGradientTest() : - _doc(0) - { - } - - virtual ~SPGradientTest() - { - if ( _doc ) - { - _doc->doUnref(); - } - } - - static void createSuiteSubclass( SPGradientTest *& dst ) - { - SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); - if ( gr ) { - UTEST_ASSERT(gr->gradientTransform.isIdentity()); - UTEST_ASSERT(gr->gradientTransform == Geom::identity()); - g_object_unref(gr); - - dst = new SPGradientTest(); - } - } - - static SPGradientTest *createSuite() - { - return Inkscape::createSuiteAndDocument( createSuiteSubclass ); - } - - static void destroySuite( SPGradientTest *suite ) { delete suite; } - -// ------------------------------------------------------------------------- -// ------------------------------------------------------------------------- - - void testSetGradientTransform() - { - SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); - SP_OBJECT(gr)->document = _doc; - - SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "translate(5, 8)"); - TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Affine(Geom::Translate(5, 8)) ); - - SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, ""); - TS_ASSERT_EQUALS( gr->gradientTransform, Geom::identity() ); - - SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "rotate(90)"); - TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Affine(rotate_degrees(90)) ); - - g_object_unref(gr); - } - - - void testWrite() - { - SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); - SP_OBJECT(gr)->document = _doc; - - SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "matrix(0, 1, -1, 0, 0, 0)"); - Inkscape::XML::Document *xml_doc = _doc->getReprDoc(); - Inkscape::XML::Node *repr = xml_doc->createElement("svg:radialGradient"); - SP_OBJECT(gr)->updateRepr(repr, SP_OBJECT_WRITE_ALL); - { - gchar const *tr = repr->attribute("gradientTransform"); - Geom::Affine svd; - bool const valid = sp_svg_transform_read(tr, &svd); - TS_ASSERT( valid ); - TS_ASSERT_EQUALS( svd, Geom::Affine(rotate_degrees(90)) ); - } - - g_object_unref(gr); - } - - - void testGetG2dGetGs2dSetGs2d() - { - SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); - SP_OBJECT(gr)->document = _doc; - Geom::Affine const grXform(2, 1, - 1, 3, - 4, 6); - gr->gradientTransform = grXform; - Geom::Rect const unit_rect(Geom::Point(0, 0), Geom::Point(1, 1)); - { - Geom::Affine const g2d(sp_gradient_get_g2d_matrix(gr, Geom::identity(), unit_rect)); - Geom::Affine const gs2d(sp_gradient_get_gs2d_matrix(gr, Geom::identity(), unit_rect)); - TS_ASSERT_EQUALS( g2d, Geom::identity() ); - TS_ASSERT( Geom::are_near(gs2d, gr->gradientTransform * g2d, 1e-12) ); - - sp_gradient_set_gs2d_matrix(gr, Geom::identity(), unit_rect, gs2d); - TS_ASSERT( Geom::are_near(gr->gradientTransform, grXform, 1e-12) ); - } - - gr->gradientTransform = grXform; - Geom::Affine const funny(2, 3, - 4, 5, - 6, 7); - { - Geom::Affine const g2d(sp_gradient_get_g2d_matrix(gr, funny, unit_rect)); - Geom::Affine const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, unit_rect)); - TS_ASSERT_EQUALS( g2d, funny ); - TS_ASSERT( Geom::are_near(gs2d, gr->gradientTransform * g2d, 1e-12) ); - - sp_gradient_set_gs2d_matrix(gr, funny, unit_rect, gs2d); - TS_ASSERT( Geom::are_near(gr->gradientTransform, grXform, 1e-12) ); - } - - gr->gradientTransform = grXform; - Geom::Rect const larger_rect(Geom::Point(5, 6), Geom::Point(8, 10)); - { - Geom::Affine const g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect)); - Geom::Affine const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect)); - TS_ASSERT_EQUALS( g2d, Geom::Affine(3, 0, - 0, 4, - 5, 6) * funny ); - TS_ASSERT( Geom::are_near(gs2d, gr->gradientTransform * g2d, 1e-12) ); - - sp_gradient_set_gs2d_matrix(gr, funny, larger_rect, gs2d); - TS_ASSERT( Geom::are_near(gr->gradientTransform, grXform, 1e-12) ); - - SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTUNITS, "userSpaceOnUse"); - Geom::Affine const user_g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect)); - Geom::Affine const user_gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect)); - TS_ASSERT_EQUALS( user_g2d, funny ); - TS_ASSERT( Geom::are_near(user_gs2d, gr->gradientTransform * user_g2d, 1e-12) ); - } - g_object_unref(gr); - } - -}; - - -#endif // SEEN_SP_GRADIENT_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/sp-style-elem-test.h b/src/sp-style-elem-test.h deleted file mode 100644 index 6f65a48ea..000000000 --- a/src/sp-style-elem-test.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef SEEN_SP_STYLE_ELEM_TEST_H -#define SEEN_SP_STYLE_ELEM_TEST_H - -#include - -#include "test-helpers.h" - -#include "sp-style-elem.h" -#include "xml/repr.h" - -class SPStyleElemTest : public CxxTest::TestSuite -{ -public: - SPDocument* _doc; - - SPStyleElemTest() : - _doc(0) - { - } - - virtual ~SPStyleElemTest() - { - if ( _doc ) - { - _doc->doUnref(); - } - } - - static void createSuiteSubclass( SPStyleElemTest *& dst ) - { - SPStyleElem *style_elem = new SPStyleElem(); - - if ( style_elem ) { - TS_ASSERT(!style_elem->is_css); - TS_ASSERT(style_elem->media.print); - TS_ASSERT(style_elem->media.screen); - delete style_elem; - - dst = new SPStyleElemTest(); - } - } - - static SPStyleElemTest *createSuite() - { - return Inkscape::createSuiteAndDocument( createSuiteSubclass ); - } - - static void destroySuite( SPStyleElemTest *suite ) { delete suite; } - -// ------------------------------------------------------------------------- -// ------------------------------------------------------------------------- - - - void testSetType() - { - SPStyleElem *style_elem = new SPStyleElem(); - SP_OBJECT(style_elem)->document = _doc; - - SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "something unrecognized"); - TS_ASSERT( !style_elem->is_css ); - - SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/css"); - TS_ASSERT( style_elem->is_css ); - - SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "atext/css"); - TS_ASSERT( !style_elem->is_css ); - - SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/cssx"); - TS_ASSERT( !style_elem->is_css ); - - delete style_elem; - } - - void testWrite() - { - TS_ASSERT( _doc ); - TS_ASSERT( _doc->getReprDoc() ); - if ( !_doc->getReprDoc() ) { - return; // evil early return - } - - SPStyleElem *style_elem = new SPStyleElem(); - SP_OBJECT(style_elem)->document = _doc; - - SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/css"); - Inkscape::XML::Node *repr = _doc->getReprDoc()->createElement("svg:style"); - SP_OBJECT(style_elem)->updateRepr(_doc->getReprDoc(), repr, SP_OBJECT_WRITE_ALL); - { - gchar const *typ = repr->attribute("type"); - TS_ASSERT( typ != NULL ); - if ( typ ) - { - TS_ASSERT_EQUALS( std::string(typ), std::string("text/css") ); - } - } - - delete style_elem; - } - - void testBuild() - { - TS_ASSERT( _doc ); - TS_ASSERT( _doc->getReprDoc() ); - if ( !_doc->getReprDoc() ) { - return; // evil early return - } - - SPStyleElem *style_elem = new SPStyleElem(); - Inkscape::XML::Node *const repr = _doc->getReprDoc()->createElement("svg:style"); - repr->setAttribute("type", "text/css"); - style_elem->invoke_build( _doc, repr, false); - TS_ASSERT( style_elem->is_css ); - TS_ASSERT( style_elem->media.print ); - TS_ASSERT( style_elem->media.screen ); - - /* Some checks relevant to the read_content test below. */ - { - g_assert(_doc->style_cascade); - CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(_doc->style_cascade, ORIGIN_AUTHOR); - g_assert(stylesheet); - g_assert(stylesheet->statements == NULL); - } - - delete style_elem; - Inkscape::GC::release(repr); - } - - void testReadContent() - { - TS_ASSERT( _doc ); - TS_ASSERT( _doc->getReprDoc() ); - if ( !_doc->getReprDoc() ) { - return; // evil early return - } - - SPStyleElem *style_elem = new SPStyleElem(); - Inkscape::XML::Node *const repr = _doc->getReprDoc()->createElement("svg:style"); - repr->setAttribute("type", "text/css"); - Inkscape::XML::Node *const content_repr = _doc->getReprDoc()->createTextNode(".myclass { }"); - repr->addChild(content_repr, NULL); - style_elem->invoke_build(_doc, repr, false); - TS_ASSERT( style_elem->is_css ); - TS_ASSERT( _doc->style_cascade ); - CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(_doc->style_cascade, ORIGIN_AUTHOR); - TS_ASSERT(stylesheet != NULL); - TS_ASSERT(stylesheet->statements != NULL); - - delete style_elem; - Inkscape::GC::release(repr); - } - -}; - - -#endif // SEEN_SP_STYLE_ELEM_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/style-test.h b/src/style-test.h deleted file mode 100644 index c6bb665e0..000000000 --- a/src/style-test.h +++ /dev/null @@ -1,537 +0,0 @@ -#ifndef SEEN_STYLE_TEST_H -#define SEEN_STYLE_TEST_H - -#include - -#include "test-helpers.h" - -#include "style.h" - -class StyleTest : public CxxTest::TestSuite -{ -public: - SPDocument* _doc; - - StyleTest() : - _doc(0) - { - } - - virtual ~StyleTest() - { - if ( _doc ) - { - _doc->doUnref(); - _doc = 0; - } - } - - static void createSuiteSubclass( StyleTest*& dst ) - { - dst = new StyleTest(); - } - -// createSuite and destroySuite get us per-suite setup and teardown -// without us having to worry about static initialization order, etc. - static StyleTest *createSuite() - { - StyleTest* suite = Inkscape::createSuiteAndDocument( createSuiteSubclass ); - return suite; - } - - static void destroySuite( StyleTest *suite ) - { - delete suite; - } - - // --------------------------------------------------------------- - // --------------------------------------------------------------- - // --------------------------------------------------------------- - - // Reading and writing style string - void testOne() - { - struct TestCase { - TestCase(gchar const* src, gchar const* dst = 0, gchar const* uri = 0) : src(src), dst(dst), uri(uri) {} - gchar const* src; - gchar const* dst; - gchar const* uri; - }; - - TestCase cases[] = { - TestCase("fill:none"), - TestCase("fill:currentColor"), - TestCase("fill:#ff00ff"), - - TestCase("fill:rgb(100%, 0%, 100%)", "fill:#ff00ff"), - // TODO - fix this to preserve the string - TestCase("fill:url(#painter) rgb(100%, 0%, 100%)", - "fill:url(#painter) #ff00ff", "#painter"), - - TestCase("fill:rgb(255, 0, 255)", "fill:#ff00ff"), - // TODO - fix this to preserve the string - TestCase("fill:url(#painter) rgb(255, 0, 255)", - "fill:url(#painter) #ff00ff", "#painter"), - - -// TestCase("fill:#ff00ff icc-color(colorChange, 0.1, 0.5, 0.1)"), - - TestCase("fill:url(#painter)", 0, "#painter"), - TestCase("fill:url(#painter) none", 0, "#painter"), - TestCase("fill:url(#painter) currentColor", 0, "#painter"), - TestCase("fill:url(#painter) #ff00ff", 0, "#painter"), -// TestCase("fill:url(#painter) rgb(100%, 0%, 100%)", 0, "#painter"), -// TestCase("fill:url(#painter) rgb(255, 0, 255)", 0, "#painter"), - - TestCase("fill:url(#painter) #ff00ff icc-color(colorChange, 0.1, 0.5, 0.1)", 0, "#painter"), - -// TestCase("fill:url(#painter) inherit", 0, "#painter"), - TestCase("fill:inherit"), - -// General tests (in general order of appearance in sp_style_read), SPIPaint tested above - TestCase("visibility:hidden"), // SPIEnum - TestCase("visibility:collapse"), - TestCase("visibility:visible"), - TestCase("display:none"), // SPIEnum - TestCase("overflow:visible"), // SPIEnum - TestCase("overflow:auto"), // SPIEnum - - TestCase("color:#ff0000"), - TestCase("color:blue", "color:#0000ff"), - // TestCase("color:currentColor"), SVG 1.1 does not allow color value 'currentColor' - - // Font shorthand - TestCase("font:bold 12px Arial", - "font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:normal;font-family:Arial"), - TestCase("font:bold 12px/24px 'Times New Roman'", - "font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:24px;font-family:\'Times New Roman\'"), - // From CSS 3 Fonts (examples): - TestCase("font: 12pt/15pt sans-serif", - "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:15pt;font-family:sans-serif"), - TestCase("font: 80% sans-serif", - "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80%;line-height:normal;font-family:sans-serif"), - TestCase("font: x-large/110% 'new century schoolbook', serif", - "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:x-large;line-height:110%;font-family:\'new century schoolbook\', serif"), - TestCase("font: bold italic large Palatino, serif", - "font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:large;line-height:normal;font-family:Palatino, serif"), - TestCase("font: normal small-caps 120%/120% fantasy", - "font-style:normal;font-variant:small-caps;font-weight:normal;font-stretch:normal;font-size:120%;line-height:120%;font-family:fantasy"), - TestCase("font: condensed oblique 12pt 'Helvetica Neue', serif;", - "font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:16px;line-height:normal;font-family:\'Helvetica Neue\', serif"), - - TestCase("font-family:sans-serif"), // SPIString, text_private - TestCase("font-family:Arial"), - // TestCase("font-variant:normal;font-stretch:normal;-inkscape-font-specification:Nimbus Roman No9 L Bold Italic"), - - // Needs to be fixed (quotes should be around each font-family): - TestCase("font-family:Georgia, 'Minion Web'","font-family:Georgia, \'Minion Web\'"), - TestCase("font-size:12", "font-size:12px"), // SPIFontSize - TestCase("font-size:12px"), - TestCase("font-size:12pt", "font-size:16px"), - TestCase("font-size:medium"), - TestCase("font-size:smaller"), - TestCase("font-style:italic"), // SPIEnum - TestCase("font-variant:small-caps"), // SPIEnum - TestCase("font-weight:100"), // SPIEnum - TestCase("font-weight:normal"), - TestCase("font-weight:bolder"), - TestCase("font-stretch:condensed"), // SPIEnum - - TestCase("font-variant-ligatures:none"), // SPILigatures - TestCase("font-variant-ligatures:normal"), - TestCase("font-variant-ligatures:no-common-ligatures"), - TestCase("font-variant-ligatures:discretionary-ligatures"), - TestCase("font-variant-ligatures:historical-ligatures"), - TestCase("font-variant-ligatures:no-contextual"), - TestCase("font-variant-ligatures:common-ligatures", "font-variant-ligatures:normal"), - TestCase("font-variant-ligatures:contextual", "font-variant-ligatures:normal"), - TestCase("font-variant-ligatures:no-common-ligatures historical-ligatures"), - TestCase("font-variant-ligatures:historical-ligatures no-contextual"), - TestCase("font-variant-position:normal"), - TestCase("font-variant-position:sub"), - TestCase("font-variant-position:super"), - TestCase("font-variant-caps:normal"), - TestCase("font-variant-caps:small-caps"), - TestCase("font-variant-caps:all-small-caps"), - TestCase("font-variant-numeric:normal"), - TestCase("font-variant-numeric:lining-nums"), - TestCase("font-variant-numeric:oldstyle-nums"), - TestCase("font-variant-numeric:proportional-nums"), - TestCase("font-variant-numeric:tabular-nums"), - TestCase("font-variant-numeric:diagonal-fractions"), - TestCase("font-variant-numeric:stacked-fractions"), - TestCase("font-variant-numeric:ordinal"), - TestCase("font-variant-numeric:slashed-zero"), - TestCase("font-variant-numeric:tabular-nums slashed-zero"), - TestCase("font-variant-numeric:tabular-nums proportional-nums", "font-variant-numeric:proportional-nums"), - - // Should be moved down - TestCase("text-indent:12em"), // SPILength? - TestCase("text-align:center"), // SPIEnum - - // SPITextDecoration - // The default value for 'text-decoration-color' is 'currentColor', but - // we cannot set the default to that value yet. (We need to switch - // SPIPaint to SPIColor and then add the ability to set default.) - // TestCase("text-decoration: underline", - // "text-decoration: underline;text-decoration-line: underline;text-decoration-color:currentColor"), - // TestCase("text-decoration: overline underline", - // "text-decoration: underline overline;text-decoration-line: underline overline;text-decoration-color:currentColor"), - - TestCase("text-decoration: underline wavy #0000ff", - "text-decoration: underline;text-decoration-line: underline;text-decoration-style:wavy;text-decoration-color:#0000ff"), - TestCase("text-decoration: double overline underline #ff0000", - "text-decoration: underline overline;text-decoration-line: underline overline;text-decoration-style:double;text-decoration-color:#ff0000"), - - // SPITextDecorationLine - TestCase("text-decoration-line: underline", - "text-decoration: underline;text-decoration-line: underline"), - - // SPITextDecorationStyle - TestCase("text-decoration-style:solid"), - TestCase("text-decoration-style:dotted"), - - // SPITextDecorationColor - TestCase("text-decoration-color:#ff00ff"), - - // Should be moved up - TestCase("line-height:24px"), // SPILengthOrNormal - TestCase("line-height:1.5"), - TestCase("letter-spacing:2px"), // SPILengthOrNormal - TestCase("word-spacing:2px"), // SPILengthOrNormal - TestCase("word-spacing:normal"), - TestCase("text-transform:lowercase"), // SPIEnum - // ... - TestCase("baseline-shift:baseline"), // SPIBaselineShift - TestCase("baseline-shift:sub"), - TestCase("baseline-shift:12.5%"), - TestCase("baseline-shift:2px"), - - TestCase("opacity:0.1"), // SPIScale24 - // ... - TestCase("stroke-width:2px"), // SPILength - TestCase("stroke-linecap:round"), // SPIEnum - TestCase("stroke-linejoin:round"), // SPIEnum - TestCase("stroke-miterlimit:4"), // SPIFloat - TestCase("marker:url(#Arrow)"), // SPIString - TestCase("marker-start:url(#Arrow)"), - TestCase("marker-mid:url(#Arrow)"), - TestCase("marker-end:url(#Arrow)"), - TestCase("stroke-opacity:0.5"), // SPIScale24 - TestCase("stroke-dasharray:0, 1, 0, 1"), // SPIDashArray - TestCase("stroke-dasharray:0 1 0 1","stroke-dasharray:0, 1, 0, 1"), - TestCase("stroke-dasharray:0 1 2 3","stroke-dasharray:0, 1, 2, 3"), - TestCase("stroke-dashoffset:13"), // SPILength - TestCase("stroke-dashoffset:10px"), - // ... - //TestCase("filter:url(#myfilter)"), // SPIFilter segfault in read - TestCase("filter:inherit"), - - TestCase("opacity:0.1;fill:#ff0000;stroke:#0000ff;stroke-width:2px"), - TestCase("opacity:0.1;fill:#ff0000;stroke:#0000ff;stroke-width:2px;stroke-dasharray:1, 2, 3, 4;stroke-dashoffset:15"), - - -#ifdef WITH_SVG2 - TestCase("paint-order:stroke"), // SPIPaintOrder - TestCase("paint-order:normal"), - TestCase("paint-order: markers stroke fill", "paint-order:markers stroke fill"), - -#endif - TestCase(0) - }; - - for ( gint i = 0; cases[i].src; i++ ) { - // std::cout << "Test one: " << i << std::endl; - SPStyle style(_doc); - style.mergeString( cases[i].src ); - if ( cases[i].uri ) { - TSM_ASSERT( cases[i].src, style.fill.value.href ); - if ( style.fill.value.href ) { - TS_ASSERT_EQUALS( style.fill.value.href->getURI()->toString(), std::string(cases[i].uri) ); - } - } else { - TS_ASSERT( !style.fill.value.href || !style.fill.value.href->getObject() ); - } - - std::string str0_set = style.write(SP_STYLE_FLAG_IFSET ); - - if ( cases[i].dst ) { - // std::cout << " " << str0_set << " " << std::string(cases[i].dst) << std::endl; - TS_ASSERT_EQUALS( str0_set, std::string(cases[i].dst) ); - } else { - // std::cout << " " << str0_set << " " << std::string(cases[i].src) << std::endl; - TS_ASSERT_EQUALS( str0_set, std::string(cases[i].src) ); - } - } - } - - // Testing operator== - void testTwo() - { - struct TestCase { - TestCase(gchar const* src, gchar const* dst, bool match) : - src(src), dst(dst), match(match) {} - gchar const* src; - gchar const* dst; - bool match; - }; - - TestCase cases[] = { - - // SPIFloat - TestCase("stroke-miterlimit:4", "stroke-miterlimit:4", true ), - TestCase("stroke-miterlimit:4", "stroke-miterlimit:2", false), - TestCase("stroke-miterlimit:4", "", true ), // Default - - // SPIScale24 - TestCase("opacity:0.3", "opacity:0.3", true ), - TestCase("opacity:0.3", "opacity:0.6", false), - TestCase("opacity:1.0", "", true ), // Default - - // SPILength - TestCase("text-indent:3", "text-indent:3", true ), - TestCase("text-indent:6", "text-indent:3", false), - TestCase("text-indent:6px", "text-indent:3", false), - TestCase("text-indent:1px", "text-indent:12pc", false), - TestCase("text-indent:2ex", "text-indent:2ex", false), - - // SPILengthOrNormal - TestCase("letter-spacing:normal", "letter-spacing:normal", true ), - TestCase("letter-spacing:2", "letter-spacing:normal", false), - TestCase("letter-spacing:normal", "letter-spacing:2", false), - TestCase("letter-spacing:5px", "letter-spacing:5px", true ), - TestCase("letter-spacing:10px", "letter-spacing:5px", false), - TestCase("letter-spacing:10em", "letter-spacing:10em", false), - - // SPIEnum - TestCase("text-anchor:start", "text-anchor:start", true ), - TestCase("text-anchor:start", "text-anchor:middle", false), - TestCase("text-anchor:start", "", true ), // Default - TestCase("text-anchor:start", "text-anchor:junk", true ), // Bad value - - TestCase("font-weight:normal", "font-weight:400", true ), - TestCase("font-weight:bold", "font-weight:700", true ), - - - // SPIString and SPIFontString - TestCase("font-family:Arial", "font-family:Arial", true ), - TestCase("font-family:A B", "font-family:A B", true ), - TestCase("font-family:A B", "font-family:A C", false), - // Default is not set by class... value is NULL which cannot be compared - // TestCase("font-family:sans-serif", "", true ), // Default - - // SPIColor - TestCase("color:blue", "color:blue", true ), - TestCase("color:blue", "color:red", false), - TestCase("color:red", "color:#ff0000", true ), - - // SPIPaint - TestCase("fill:blue", "fill:blue", true ), - TestCase("fill:blue", "fill:red", false), - TestCase("fill:currentColor", "fill:currentColor", true ), - TestCase("fill:url(#xxx)", "fill:url(#xxx)", true ), - // Needs URL defined as in test 1 - //TestCase("fill:url(#xxx)", "fill:url(#yyy)", false), - - // SPIPaintOrder - TestCase("paint-order:markers", "paint-order:markers", true ), - TestCase("paint-order:markers", "paint-order:stroke", false), - //TestCase("paint-order:fill stroke markers", "", true ), // Default - TestCase("paint-order:normal", "paint-order:normal", true ), - //TestCase("paint-order:fill stroke markers", "paint-order:normal", true ), - - // SPIDashArray - TestCase("stroke-dasharray:0 1 2 3","stroke-dasharray:0 1 2 3",true ), - TestCase("stroke-dasharray:0 1", "stroke-dasharray:0 2", false), - - // SPIFilter - - // SPIFontSize - TestCase("font-size:12px", "font-size:12px", true ), - TestCase("font-size:12px", "font-size:24px", false), - TestCase("font-size:12ex", "font-size:24ex", false), - TestCase("font-size:medium", "font-size:medium", true ), - TestCase("font-size:medium", "font-size:large", false), - - // SPIBaselineShift - TestCase("baseline-shift:baseline", "baseline-shift:baseline", true ), - TestCase("baseline-shift:sub", "baseline-shift:sub", true ), - TestCase("baseline-shift:sub", "baseline-shift:super", false), - TestCase("baseline-shift:baseline", "baseline-shift:sub", false), - TestCase("baseline-shift:10px", "baseline-shift:10px", true ), - TestCase("baseline-shift:10px", "baseline-shift:12px", false), - - - // SPITextDecorationLine - TestCase("text-decoration-line:underline", "text-decoration-line:underline", true ), - TestCase("text-decoration-line:underline", "text-decoration-line:overline", false), - TestCase("text-decoration-line:underline overline", "text-decoration-line:underline overline", true ), - TestCase("text-decoration-line:none", "", true ), // Default - - - // SPITextDecorationStyle - TestCase("text-decoration-style:solid", "text-decoration-style:solid", true ), - TestCase("text-decoration-style:dotted", "text-decoration-style:solid", false), - TestCase("text-decoration-style:solid", "", true ), // Default - - // SPITextDecoration - TestCase("text-decoration:underline", "text-decoration:underline", true ), - TestCase("text-decoration:underline", "text-decoration:overline", false), - TestCase("text-decoration:underline overline","text-decoration:underline overline",true ), - TestCase("text-decoration:overline underline","text-decoration:underline overline",true ), - // TestCase("text-decoration:none", "text-decoration-color:currentColor", true ), // Default - - - // Terminate - TestCase(0,0,0) - }; - for ( gint i = 0; cases[i].src; i++ ) { - // std::cout << "Test two: " << i << std::endl; - SPStyle style_src(_doc); - SPStyle style_dst(_doc); - - style_src.mergeString( cases[i].src ); - style_dst.mergeString( cases[i].dst ); - - // std::cout << "Test:" << std::endl; - // std::cout << " C: |" << cases[i].src << "| |" << cases[i].dst << "|" << std::endl; - // std::cout << " S: |" << style_src.write( SP_STYLE_FLAG_IFSET, NULL ) << "| |" - // << style_dst.write( SP_STYLE_FLAG_IFSET, NULL ) << "|" < - -#include "document.h" -#include "inkscape.h" - - -// Dummy functions to keep linker happy -#if !defined(DUMMY_MAIN_TEST_CALLS_SEEN) -#define DUMMY_MAIN_TEST_CALLS_SEEN -int sp_main_gui (int, char const**) { return 0; } -int sp_main_console (int, char const**) { return 0; } -#endif // DUMMY_MAIN_TEST_CALLS_SEEN - -namespace Inkscape -{ - -template -T* createSuiteAndDocument( void (*fun)(T*&) ) -{ - T* suite = 0; - -#if !GLIB_CHECK_VERSION(2,36,0) - g_type_init(); -#endif - - Inkscape::GC::init(); - if ( !Inkscape::Application::exists() ) - { - // Create the global inkscape object. - Inkscape::Application::create("", false); - } - - SPDocument* tmp = SPDocument::createNewDoc( NULL, TRUE, true ); - if ( tmp ) { - fun( suite ); - if ( suite ) - { - suite->_doc = tmp; - } - else - { - tmp->doUnref(); - } - } - - return suite; -} - -} // namespace Inkscape - -#endif // SEEN_TEST_HELPERS_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/uri-test.h b/src/uri-test.h deleted file mode 100644 index 2a4cdab46..000000000 --- a/src/uri-test.h +++ /dev/null @@ -1,90 +0,0 @@ - -#ifndef SEEN_URI_TEST_H -#define SEEN_URI_TEST_H -/* - * Test uri.h - * - * Written to aid with refactoring the uri handling to support fullPath - * and data URIs and also cover code which wasn't before tested. - * - * Copyright 2014 (c) BasisTech Boston - * - */ -#include - -#include "uri.h" - -using Inkscape::URI; - -class URITest : public CxxTest::TestSuite -{ -public: - void stringTest( std::string result, std::string expected ) - { - if ( !result.empty() && !expected.empty() ) { - TS_ASSERT_EQUALS( result, expected ); - } else if ( result.empty() && !expected.empty() ) { - TS_FAIL( std::string("Expected (") + expected + "), found null" ); - } else if ( !result.empty() && expected.empty() ) { - TS_FAIL( std::string("Expected null, found (") + result + ")" ); - } - } - - std::string ValueOrEmpty(const char* s) { - return s == NULL ? std::string() : s; - } - - void toStringTest( std::string uri, std::string expected ) { - stringTest( URI(uri.c_str()).toString(), expected ); - } - void pathTest( std::string uri, std::string expected ) { - stringTest( ValueOrEmpty(URI(uri.c_str()).getPath()), expected ); - } - - void testToString() - { - char const* cases[][2] = { - { "foo", "foo" }, - { "#foo", "#foo" }, - { "blah.svg#h", "blah.svg#h" }, - //{ "data:data", "data:data" }, - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) { - toStringTest( std::string(cases[i][0]), std::string(cases[i][1]) ); - } - } - - void testPath() - { - char const* cases[][2] = { - { "foo.svg", "foo.svg" }, - { "foo.svg#bar", "foo.svg" }, - { "#bar", NULL }, - { "data:data", NULL }, - }; - - for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) { - pathTest( ValueOrEmpty(cases[i][0]), ValueOrEmpty(cases[i][1]) ); - } - } - void testFullPath() { - std::ofstream fhl("/tmp/cxxtest-uri.svg", std::ofstream::out); - stringTest( URI("cxxtest-uri.svg").getFullPath("/tmp"), std::string("/tmp/cxxtest-uri.svg") ); - stringTest( URI("cxxtest-uri.svg").getFullPath("/usr/../tmp"), std::string("/tmp/cxxtest-uri.svg") ); - } - -}; - -#endif // SEEN_URI_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/verbs-test.h b/src/verbs-test.h deleted file mode 100644 index 04a0b80c0..000000000 --- a/src/verbs-test.h +++ /dev/null @@ -1,86 +0,0 @@ - - -#include - -#include "verbs.h" - -class VerbsTest : public CxxTest::TestSuite -{ -public: - - class TestHook : public Inkscape::Verb { - public: - static int getInternalTableSize() { return _getBaseListSize(); } - - private: - TestHook(); - }; - - void testEnumLength() - { - TS_ASSERT_DIFFERS( 0, static_cast(SP_VERB_LAST) ); - TS_ASSERT_EQUALS( static_cast(SP_VERB_LAST) + 1, TestHook::getInternalTableSize() ); - } - - void testEnumFixed() - { - TS_ASSERT_EQUALS( 0, static_cast(SP_VERB_INVALID) ); - TS_ASSERT_EQUALS( 1, static_cast(SP_VERB_NONE) ); - - TS_ASSERT_DIFFERS( 0, static_cast(SP_VERB_LAST) ); - TS_ASSERT_DIFFERS( 1, static_cast(SP_VERB_LAST) ); - } - - void testFetch() - { - for ( int i = 0; i < static_cast(SP_VERB_LAST); i++ ) - { - char tmp[16]; - snprintf( tmp, sizeof(tmp), "Verb# %d", i ); - tmp[sizeof(tmp)-1] = 0; - std::string descr(tmp); - - Inkscape::Verb* verb = Inkscape::Verb::get(i); - TSM_ASSERT( descr, verb ); - if ( verb ) - { - TSM_ASSERT_EQUALS( descr, verb->get_code(), static_cast(i) ); - - if ( i != static_cast(SP_VERB_INVALID) ) - { - TSM_ASSERT( descr, verb->get_id() ); - TSM_ASSERT( descr, verb->get_name() ); - - Inkscape::Verb* bounced = verb->getbyid( verb->get_id() ); - // TODO - put this back once verbs are fixed - //TSM_ASSERT( descr, bounced ); - if ( bounced ) - { - TSM_ASSERT_EQUALS( descr, bounced->get_code(), static_cast(i) ); - } - else - { - TS_FAIL( std::string("Unable to getbyid() for ") + descr + std::string(" ID: '") + std::string(verb->get_id()) + std::string("'") ); - } - } - else - { - TSM_ASSERT( std::string("SP_VERB_INVALID"), !verb->get_id() ); - TSM_ASSERT( std::string("SP_VERB_INVALID"), !verb->get_name() ); - } - } - } - } - -}; - -/* - 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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/extract-uri-test.h b/testfiles/src/cxxtests-to-migrate/extract-uri-test.h new file mode 100644 index 000000000..e795960a9 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/extract-uri-test.h @@ -0,0 +1,88 @@ + +#ifndef SEEN_EXTRACT_URI_TEST_H +#define SEEN_EXTRACT_URI_TEST_H + +#include + +#include "extract-uri.h" + +class ExtractURITest : public CxxTest::TestSuite +{ +public: + void checkOne( char const* str, char const* expected ) + { + gchar* result = extract_uri( str ); + TS_ASSERT_EQUALS( ( result == NULL ), ( expected == NULL ) ); + if ( result && expected ) { + TS_ASSERT_EQUALS( std::string(result), std::string(expected) ); + } else if ( result ) { + TS_FAIL( std::string("Expected null, found (") + result + ")" ); + } else if ( expected ) { + TS_FAIL( std::string("Expected (") + expected + "), found null" ); + } + g_free( result ); + } + + void testBase() + { + char const* cases[][2] = { + { "url(#foo)", "#foo" }, + { "url foo ", NULL }, + { "url", NULL }, + { "url ", NULL }, + { "url()", NULL }, + { "url ( ) ", NULL }, + { "url foo bar ", NULL }, + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) + { + checkOne( cases[i][0], cases[i][1] ); + } + } + + void testWithTrailing() + { + char const* cases[][2] = { + { "url(#foo) bar", "#foo" }, + { "url() bar", NULL }, + { "url ( ) bar ", NULL } + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) + { + checkOne( cases[i][0], cases[i][1] ); + } + } + + void testQuoted() + { + char const* cases[][2] = { + { "url('#foo')", "#foo" }, + { "url(\"#foo\")", "#foo" }, + { "url('#f o o')", "#f o o" }, + { "url(\"#f o o\")", "#f o o" }, + { "url('#fo\"o')", "#fo\"o" }, + { "url(\"#fo'o\")", "#fo'o" }, + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) + { + checkOne( cases[i][0], cases[i][1] ); + } + } + +}; + +#endif // SEEN_EXTRACT_URI_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/marker-test.h b/testfiles/src/cxxtests-to-migrate/marker-test.h new file mode 100644 index 000000000..bf7e1040a --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/marker-test.h @@ -0,0 +1,39 @@ +/** @file + * @brief Unit tests for SVG marker handling + */ +/* Authors: + * Johan Engelen + * + * This file is released into the public domain. + */ + +#include + +#include "sp-marker-loc.h" + +class MarkerTest : public CxxTest::TestSuite +{ +public: + + void testMarkerLoc() + { + // code depends on these *exact* values, so check them here. + TS_ASSERT_EQUALS(SP_MARKER_LOC, 0); + TS_ASSERT_EQUALS(SP_MARKER_LOC_START, 1); + TS_ASSERT_EQUALS(SP_MARKER_LOC_MID, 2); + TS_ASSERT_EQUALS(SP_MARKER_LOC_END, 3); + TS_ASSERT_EQUALS(SP_MARKER_LOC_QTY, 4); + } + +}; + +/* + 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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/mod360-test.h b/testfiles/src/cxxtests-to-migrate/mod360-test.h new file mode 100644 index 000000000..932361eb3 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/mod360-test.h @@ -0,0 +1,56 @@ + +#ifndef SEEN_MOD_360_TEST_H +#define SEEN_MOD_360_TEST_H + +#include +#include <2geom/math-utils.h> +#include "mod360.h" + + +class Mod360Test : public CxxTest::TestSuite +{ +public: + static double inf() { return INFINITY; } + static double nan() { return ((double)INFINITY) - ((double)INFINITY); } + + void testMod360() + { + double cases[][2] = { + {0, 0}, + {10, 10}, + {360, 0}, + {361, 1}, + {-1, 359}, + {-359, 1}, + {-360, -0}, + {-361, 359}, + {inf(), 0}, + {-inf(), 0}, + {nan(), 0}, + {720, 0}, + {-721, 359}, + {-1000, 80} + }; + + for ( unsigned i = 0; i < G_N_ELEMENTS(cases); i++ ) { + double result = mod360( cases[i][0] ); + TS_ASSERT_EQUALS( cases[i][1], result ); + } + } + +}; + + +#endif // SEEN_MOD_360_TEST_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:fileencoding=utf-8:textwidth=99 : + diff --git a/testfiles/src/cxxtests-to-migrate/object-test.h b/testfiles/src/cxxtests-to-migrate/object-test.h new file mode 100644 index 000000000..0af823684 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/object-test.h @@ -0,0 +1,234 @@ +#ifndef SEEN_OBJECT_TEST_H +#define SEEN_OBJECT_TEST_H + +#include +#include +#include +#include +#include + +#include "document.h" +#include "sp-item-group.h" +#include "sp-object.h" +#include "sp-path.h" +#include "sp-root.h" +#include "xml/document.h" +#include "xml/node.h" + +class ObjectTest : public CxxTest::TestSuite +{ +public: + virtual ~ObjectTest() {} + + static ObjectTest *createSuite() { return new ObjectTest(); } + static void destroySuite(ObjectTest *suite) { delete suite; } + + void testObjects() + { + clock_t begin, end; + // Sample document + // svg:svg + // svg:defs + // svg:path + // svg:linearGradient + // svg:stop + // svg:filter + // svg:feGaussianBlur (feel free to implement for other filters) + // svg:clipPath + // svg:rect + // svg:g + // svg:use + // svg:circle + // svg:ellipse + // svg:text + // svg:polygon + // svg:polyline + // svg:image + // svg:line + + char const *docString = + "\n" + "\n" + "SVG test\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + "\n" + + "\n" + " \n" + " \n" + " \n" + " TEST\n" + " \n" + " \n" + " \n" + " \n" + "\n" + "\n"; + + begin = clock(); + SPDocument *doc = SPDocument::createNewDocFromMem(docString, strlen(docString), false); + end = clock(); + + assert(doc != NULL); // cannot continue if doc is null, abort! + assert(doc->getRoot() != NULL); + + SPRoot *root = doc->getRoot(); + assert(root->getRepr() != NULL); + assert(root->hasChildren()); + + std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to construct the test document\n"; + + SPPath *path = dynamic_cast(doc->getObjectById("P")); + testClones(path); + + SPGroup *group = dynamic_cast(doc->getObjectById("G")); + testGrouping(group); + + // Test parent behavior + SPObject *child = root->firstChild(); + assert(child != NULL); + TS_ASSERT(child->parent == root); + TS_ASSERT(child->document == doc); + TS_ASSERT(root->isAncestorOf(child)); + + // Test list behavior + SPObject *next = child->getNext(); + SPObject *prev = next; + TS_ASSERT(next->getPrev() == child); + prev = next; + next = next->getNext(); + while (next != NULL) { + // Walk the list + TS_ASSERT(next->getPrev() == prev); + prev = next; + next = next->getNext(); + } + + // Test hrefcount + TS_ASSERT(path->isReferenced()); + } + + void testClones(SPPath *path) + { + clock_t begin, end; + + assert(path != NULL); + + // Since we don't yet have any clean way to do this (FIXME), we'll abuse the XML tree a bit. + Inkscape::XML::Node *node = path->getRepr(); + assert(node != NULL); + + Inkscape::XML::Document *xml_doc = node->document(); + + Inkscape::XML::Node *parent = node->parent(); + assert(parent != NULL); + + TS_TRACE("Benchmarking clones..."); + const size_t num_clones = 10000; + + std::string href(std::string("#") + std::string(path->getId())); + std::vector clones(num_clones, NULL); + + begin = clock(); + // Create num_clones clones of this path and stick them in the document + for (size_t i = 0; i < num_clones; ++i) { + Inkscape::XML::Node *clone = xml_doc->createElement("svg:use"); + Inkscape::GC::release(clone); + clone->setAttribute("xlink:href", href.c_str()); + parent->addChild(clone, node); + clones[i] = clone; + } + end = clock(); + + std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to write " << num_clones << " clones of a path\n"; + + begin = clock(); + // Remove those clones + for (size_t i = num_clones - 1; i >= 1; --i) { + parent->removeChild(clones[i]); + } + end = clock(); + + std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to remove " << num_clones << " clones of a path\n"; + } + + void testGrouping(SPGroup *group) + { + clock_t begin, end; + + assert(group != NULL); + + // Since we don't yet have any clean way to do this (FIXME), we'll abuse the XML tree a bit. + Inkscape::XML::Node *node = group->getRepr(); + assert(node != NULL); + + Inkscape::XML::Document *xml_doc = node->document(); + + TS_TRACE("Benchmarking groups..."); + const size_t num_elements = 10000; + + Inkscape::XML::Node *new_group = xml_doc->createElement("svg:g"); + Inkscape::GC::release(new_group); + node->addChild(new_group, NULL); + + std::vector elements(num_elements, NULL); + + begin = clock(); + for (size_t i = 0; i < num_elements; ++i) { + Inkscape::XML::Node *circle = xml_doc->createElement("svg:circle"); + Inkscape::GC::release(circle); + circle->setAttribute("cx", "2048"); + circle->setAttribute("cy", "1024"); + circle->setAttribute("r", "1.5"); + new_group->addChild(circle, NULL); + elements[i] = circle; + } + end = clock(); + + std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to write " << num_elements << " elements into a group\n"; + + SPGroup *n_group = dynamic_cast(group->get_child_by_repr(new_group)); + assert(n_group != NULL); + + begin = clock(); + std::vector ch; + sp_item_group_ungroup(n_group, ch, false); + end = clock(); + + std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to ungroup a with " << num_elements << " elements\n"; + std::cout << " Note: sp_item_group_ungroup_handle_clones() is responsible\n for most of the time as it is linear in number of elements\n which results in quadratic behavior for ungrouping." << std::endl; + + begin = clock(); + // Remove those elements + for (size_t i = num_elements - 1; i >= 1; --i) { + elements[i]->parent()->removeChild(elements[i]); + } + end = clock(); + + std::cout << "Took " << double(end - begin) / double(CLOCKS_PER_SEC) << " seconds to remove " << num_elements << " elements\n"; + } +}; +#endif // SEEN_OBJECT_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/preferences-test.h b/testfiles/src/cxxtests-to-migrate/preferences-test.h new file mode 100644 index 000000000..92cb14247 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/preferences-test.h @@ -0,0 +1,136 @@ +/** @file + * @brief Unit tests for the Preferences object + */ +/* Authors: + * Krzysztof KosiÅ„ski + * + * This file is released into the public domain. + */ + +#include +#include "preferences.h" + +#include + +// test observer +class TestObserver : public Inkscape::Preferences::Observer { +public: + TestObserver(Glib::ustring const &path) : + Inkscape::Preferences::Observer(path), + value(0) {} + + virtual void notify(Inkscape::Preferences::Entry const &val) + { + value = val.getInt(); + } + int value; +}; + +class PreferencesTest : public CxxTest::TestSuite { +public: + void setUp() { + prefs = Inkscape::Preferences::get(); + } + void tearDown() { + prefs = NULL; + Inkscape::Preferences::unload(); + } + + void testStartingState() + { + TS_ASSERT_DIFFERS(prefs, static_cast(0)); + TS_ASSERT_EQUALS(prefs->isWritable(), true); + } + + void testOverwrite() + { + prefs->setInt("/test/intvalue", 123); + prefs->setInt("/test/intvalue", 321); + TS_ASSERT_EQUALS(prefs->getInt("/test/intvalue"), 321); + } + + void testDefaultReturn() + { + TS_ASSERT_EQUALS(prefs->getInt("/this/path/does/not/exist", 123), 123); + } + + void testLimitedReturn() + { + prefs->setInt("/test/intvalue", 1000); + + // simple case + TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 0, 500), 123); + // the below may seem quirky but this behaviour is intended + TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 1001, 5000), 123); + // corner cases + TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 0, 1000), 1000); + TS_ASSERT_EQUALS(prefs->getIntLimited("/test/intvalue", 123, 1000, 5000), 1000); + } + + void testKeyObserverNotification() + { + Glib::ustring const path = "/some/random/path"; + TestObserver obs("/some/random"); + obs.value = 1; + prefs->setInt(path, 5); + TS_ASSERT_EQUALS(obs.value, 1); // no notifications sent before adding + + prefs->addObserver(obs); + prefs->setInt(path, 10); + TS_ASSERT_EQUALS(obs.value, 10); + prefs->setInt("/some/other/random/path", 10); + TS_ASSERT_EQUALS(obs.value, 10); // value should not change + + prefs->removeObserver(obs); + prefs->setInt(path, 15); + TS_ASSERT_EQUALS(obs.value, 10); // no notifications sent after removal + } + + void testEntryObserverNotification() + { + Glib::ustring const path = "/some/random/path"; + TestObserver obs(path); + obs.value = 1; + prefs->setInt(path, 5); + TS_ASSERT_EQUALS(obs.value, 1); // no notifications sent before adding + + prefs->addObserver(obs); + prefs->setInt(path, 10); + TS_ASSERT_EQUALS(obs.value, 10); + + // test that filtering works properly + prefs->setInt("/some/random/value", 1234); + TS_ASSERT_EQUALS(obs.value, 10); + prefs->setInt("/some/randomvalue", 1234); + TS_ASSERT_EQUALS(obs.value, 10); + prefs->setInt("/some/random/path2", 1234); + TS_ASSERT_EQUALS(obs.value, 10); + + prefs->removeObserver(obs); + prefs->setInt(path, 15); + TS_ASSERT_EQUALS(obs.value, 10); // no notifications sent after removal + } + + void testPreferencesEntryMethods() + { + prefs->setInt("/test/prefentry", 100); + Inkscape::Preferences::Entry val = prefs->getEntry("/test/prefentry"); + TS_ASSERT(val.isValid()); + TS_ASSERT_EQUALS(val.getPath(), "/test/prefentry"); + TS_ASSERT_EQUALS(val.getEntryName(), "prefentry"); + TS_ASSERT_EQUALS(val.getInt(), 100); + } +private: + Inkscape::Preferences *prefs; +}; + +/* + 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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/round-test.h b/testfiles/src/cxxtests-to-migrate/round-test.h new file mode 100644 index 000000000..8e9ca69e0 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/round-test.h @@ -0,0 +1,91 @@ + +#ifndef SEEN_ROUND_TEST_H +#define SEEN_ROUND_TEST_H + +#include + +#include +#include + +class RoundTest : public CxxTest::TestSuite +{ +public: + struct Case { + double arg0; + double ret; + }; + + std::vector nonneg_round_cases; + std::vector nonpos_round_cases; + + RoundTest() : + TestSuite() + { + Case cases[] = { + { 5.0, 5.0 }, + { 0.0, 0.0 }, + { 5.4, 5.0 }, + { 5.6, 6.0 }, + { 1e-7, 0.0 }, + { 1e7 + .49, 1e7 }, + { 1e7 + .51, 1e7 + 1 }, + { 1e12 + .49, 1e12 }, + { 1e12 + .51, 1e12 + 1 }, + { 1e40, 1e40 } + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) + { + nonneg_round_cases.push_back( cases[i] ); + + Case tmp = {-nonneg_round_cases[i].arg0, -nonneg_round_cases[i].ret}; + nonpos_round_cases.push_back( tmp ); + } + } + + virtual ~RoundTest() + { + } + + static RoundTest *createSuite() { return new RoundTest(); } + static void destroySuite( RoundTest *suite ) { delete suite; } + +// ------------------------------------------------------------------------- +// ------------------------------------------------------------------------- + + + + void testNonNegRound() + { + for ( size_t i = 0; i < nonneg_round_cases.size(); i++ ) + { + double result = Inkscape::round( nonneg_round_cases[i].arg0 ); + TS_ASSERT_EQUALS( result, nonneg_round_cases[i].ret ); + } + } + + void testNonPosRoung() + { + for ( size_t i = 0; i < nonpos_round_cases.size(); i++ ) + { + double result = Inkscape::round( nonpos_round_cases[i].arg0 ); + TS_ASSERT_EQUALS( result, nonpos_round_cases[i].ret ); + } + } + +}; + + +#endif // SEEN_ROUND_TEST_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:fileencoding=utf-8:textwidth=99 : + diff --git a/testfiles/src/cxxtests-to-migrate/sp-gradient-test.h b/testfiles/src/cxxtests-to-migrate/sp-gradient-test.h new file mode 100644 index 000000000..578d0c5c0 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/sp-gradient-test.h @@ -0,0 +1,161 @@ +#ifndef SEEN_SP_GRADIENT_TEST_H +#define SEEN_SP_GRADIENT_TEST_H + +#include "document-using-test.h" + + +#include "sp-gradient.h" +#include "svg/svg.h" +#include "xml/repr.h" +#include <2geom/transforms.h> +#include "helper/geom.h" + +class SPGradientTest : public DocumentUsingTest +{ +public: + SPDocument* _doc; + + SPGradientTest() : + _doc(0) + { + } + + virtual ~SPGradientTest() + { + if ( _doc ) + { + _doc->doUnref(); + } + } + + static void createSuiteSubclass( SPGradientTest *& dst ) + { + SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); + if ( gr ) { + UTEST_ASSERT(gr->gradientTransform.isIdentity()); + UTEST_ASSERT(gr->gradientTransform == Geom::identity()); + g_object_unref(gr); + + dst = new SPGradientTest(); + } + } + + static SPGradientTest *createSuite() + { + return Inkscape::createSuiteAndDocument( createSuiteSubclass ); + } + + static void destroySuite( SPGradientTest *suite ) { delete suite; } + +// ------------------------------------------------------------------------- +// ------------------------------------------------------------------------- + + void testSetGradientTransform() + { + SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); + SP_OBJECT(gr)->document = _doc; + + SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "translate(5, 8)"); + TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Affine(Geom::Translate(5, 8)) ); + + SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, ""); + TS_ASSERT_EQUALS( gr->gradientTransform, Geom::identity() ); + + SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "rotate(90)"); + TS_ASSERT_EQUALS( gr->gradientTransform, Geom::Affine(rotate_degrees(90)) ); + + g_object_unref(gr); + } + + + void testWrite() + { + SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); + SP_OBJECT(gr)->document = _doc; + + SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTTRANSFORM, "matrix(0, 1, -1, 0, 0, 0)"); + Inkscape::XML::Document *xml_doc = _doc->getReprDoc(); + Inkscape::XML::Node *repr = xml_doc->createElement("svg:radialGradient"); + SP_OBJECT(gr)->updateRepr(repr, SP_OBJECT_WRITE_ALL); + { + gchar const *tr = repr->attribute("gradientTransform"); + Geom::Affine svd; + bool const valid = sp_svg_transform_read(tr, &svd); + TS_ASSERT( valid ); + TS_ASSERT_EQUALS( svd, Geom::Affine(rotate_degrees(90)) ); + } + + g_object_unref(gr); + } + + + void testGetG2dGetGs2dSetGs2d() + { + SPGradient *gr = static_cast(g_object_new(SP_TYPE_GRADIENT, NULL)); + SP_OBJECT(gr)->document = _doc; + Geom::Affine const grXform(2, 1, + 1, 3, + 4, 6); + gr->gradientTransform = grXform; + Geom::Rect const unit_rect(Geom::Point(0, 0), Geom::Point(1, 1)); + { + Geom::Affine const g2d(sp_gradient_get_g2d_matrix(gr, Geom::identity(), unit_rect)); + Geom::Affine const gs2d(sp_gradient_get_gs2d_matrix(gr, Geom::identity(), unit_rect)); + TS_ASSERT_EQUALS( g2d, Geom::identity() ); + TS_ASSERT( Geom::are_near(gs2d, gr->gradientTransform * g2d, 1e-12) ); + + sp_gradient_set_gs2d_matrix(gr, Geom::identity(), unit_rect, gs2d); + TS_ASSERT( Geom::are_near(gr->gradientTransform, grXform, 1e-12) ); + } + + gr->gradientTransform = grXform; + Geom::Affine const funny(2, 3, + 4, 5, + 6, 7); + { + Geom::Affine const g2d(sp_gradient_get_g2d_matrix(gr, funny, unit_rect)); + Geom::Affine const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, unit_rect)); + TS_ASSERT_EQUALS( g2d, funny ); + TS_ASSERT( Geom::are_near(gs2d, gr->gradientTransform * g2d, 1e-12) ); + + sp_gradient_set_gs2d_matrix(gr, funny, unit_rect, gs2d); + TS_ASSERT( Geom::are_near(gr->gradientTransform, grXform, 1e-12) ); + } + + gr->gradientTransform = grXform; + Geom::Rect const larger_rect(Geom::Point(5, 6), Geom::Point(8, 10)); + { + Geom::Affine const g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect)); + Geom::Affine const gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect)); + TS_ASSERT_EQUALS( g2d, Geom::Affine(3, 0, + 0, 4, + 5, 6) * funny ); + TS_ASSERT( Geom::are_near(gs2d, gr->gradientTransform * g2d, 1e-12) ); + + sp_gradient_set_gs2d_matrix(gr, funny, larger_rect, gs2d); + TS_ASSERT( Geom::are_near(gr->gradientTransform, grXform, 1e-12) ); + + SP_OBJECT(gr)->setKeyValue( SP_ATTR_GRADIENTUNITS, "userSpaceOnUse"); + Geom::Affine const user_g2d(sp_gradient_get_g2d_matrix(gr, funny, larger_rect)); + Geom::Affine const user_gs2d(sp_gradient_get_gs2d_matrix(gr, funny, larger_rect)); + TS_ASSERT_EQUALS( user_g2d, funny ); + TS_ASSERT( Geom::are_near(user_gs2d, gr->gradientTransform * user_g2d, 1e-12) ); + } + g_object_unref(gr); + } + +}; + + +#endif // SEEN_SP_GRADIENT_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/sp-style-elem-test.h b/testfiles/src/cxxtests-to-migrate/sp-style-elem-test.h new file mode 100644 index 000000000..6f65a48ea --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/sp-style-elem-test.h @@ -0,0 +1,166 @@ +#ifndef SEEN_SP_STYLE_ELEM_TEST_H +#define SEEN_SP_STYLE_ELEM_TEST_H + +#include + +#include "test-helpers.h" + +#include "sp-style-elem.h" +#include "xml/repr.h" + +class SPStyleElemTest : public CxxTest::TestSuite +{ +public: + SPDocument* _doc; + + SPStyleElemTest() : + _doc(0) + { + } + + virtual ~SPStyleElemTest() + { + if ( _doc ) + { + _doc->doUnref(); + } + } + + static void createSuiteSubclass( SPStyleElemTest *& dst ) + { + SPStyleElem *style_elem = new SPStyleElem(); + + if ( style_elem ) { + TS_ASSERT(!style_elem->is_css); + TS_ASSERT(style_elem->media.print); + TS_ASSERT(style_elem->media.screen); + delete style_elem; + + dst = new SPStyleElemTest(); + } + } + + static SPStyleElemTest *createSuite() + { + return Inkscape::createSuiteAndDocument( createSuiteSubclass ); + } + + static void destroySuite( SPStyleElemTest *suite ) { delete suite; } + +// ------------------------------------------------------------------------- +// ------------------------------------------------------------------------- + + + void testSetType() + { + SPStyleElem *style_elem = new SPStyleElem(); + SP_OBJECT(style_elem)->document = _doc; + + SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "something unrecognized"); + TS_ASSERT( !style_elem->is_css ); + + SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/css"); + TS_ASSERT( style_elem->is_css ); + + SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "atext/css"); + TS_ASSERT( !style_elem->is_css ); + + SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/cssx"); + TS_ASSERT( !style_elem->is_css ); + + delete style_elem; + } + + void testWrite() + { + TS_ASSERT( _doc ); + TS_ASSERT( _doc->getReprDoc() ); + if ( !_doc->getReprDoc() ) { + return; // evil early return + } + + SPStyleElem *style_elem = new SPStyleElem(); + SP_OBJECT(style_elem)->document = _doc; + + SP_OBJECT(style_elem)->setKeyValue( SP_ATTR_TYPE, "text/css"); + Inkscape::XML::Node *repr = _doc->getReprDoc()->createElement("svg:style"); + SP_OBJECT(style_elem)->updateRepr(_doc->getReprDoc(), repr, SP_OBJECT_WRITE_ALL); + { + gchar const *typ = repr->attribute("type"); + TS_ASSERT( typ != NULL ); + if ( typ ) + { + TS_ASSERT_EQUALS( std::string(typ), std::string("text/css") ); + } + } + + delete style_elem; + } + + void testBuild() + { + TS_ASSERT( _doc ); + TS_ASSERT( _doc->getReprDoc() ); + if ( !_doc->getReprDoc() ) { + return; // evil early return + } + + SPStyleElem *style_elem = new SPStyleElem(); + Inkscape::XML::Node *const repr = _doc->getReprDoc()->createElement("svg:style"); + repr->setAttribute("type", "text/css"); + style_elem->invoke_build( _doc, repr, false); + TS_ASSERT( style_elem->is_css ); + TS_ASSERT( style_elem->media.print ); + TS_ASSERT( style_elem->media.screen ); + + /* Some checks relevant to the read_content test below. */ + { + g_assert(_doc->style_cascade); + CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(_doc->style_cascade, ORIGIN_AUTHOR); + g_assert(stylesheet); + g_assert(stylesheet->statements == NULL); + } + + delete style_elem; + Inkscape::GC::release(repr); + } + + void testReadContent() + { + TS_ASSERT( _doc ); + TS_ASSERT( _doc->getReprDoc() ); + if ( !_doc->getReprDoc() ) { + return; // evil early return + } + + SPStyleElem *style_elem = new SPStyleElem(); + Inkscape::XML::Node *const repr = _doc->getReprDoc()->createElement("svg:style"); + repr->setAttribute("type", "text/css"); + Inkscape::XML::Node *const content_repr = _doc->getReprDoc()->createTextNode(".myclass { }"); + repr->addChild(content_repr, NULL); + style_elem->invoke_build(_doc, repr, false); + TS_ASSERT( style_elem->is_css ); + TS_ASSERT( _doc->style_cascade ); + CRStyleSheet const *const stylesheet = cr_cascade_get_sheet(_doc->style_cascade, ORIGIN_AUTHOR); + TS_ASSERT(stylesheet != NULL); + TS_ASSERT(stylesheet->statements != NULL); + + delete style_elem; + Inkscape::GC::release(repr); + } + +}; + + +#endif // SEEN_SP_STYLE_ELEM_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/style-test.h b/testfiles/src/cxxtests-to-migrate/style-test.h new file mode 100644 index 000000000..c6bb665e0 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/style-test.h @@ -0,0 +1,537 @@ +#ifndef SEEN_STYLE_TEST_H +#define SEEN_STYLE_TEST_H + +#include + +#include "test-helpers.h" + +#include "style.h" + +class StyleTest : public CxxTest::TestSuite +{ +public: + SPDocument* _doc; + + StyleTest() : + _doc(0) + { + } + + virtual ~StyleTest() + { + if ( _doc ) + { + _doc->doUnref(); + _doc = 0; + } + } + + static void createSuiteSubclass( StyleTest*& dst ) + { + dst = new StyleTest(); + } + +// createSuite and destroySuite get us per-suite setup and teardown +// without us having to worry about static initialization order, etc. + static StyleTest *createSuite() + { + StyleTest* suite = Inkscape::createSuiteAndDocument( createSuiteSubclass ); + return suite; + } + + static void destroySuite( StyleTest *suite ) + { + delete suite; + } + + // --------------------------------------------------------------- + // --------------------------------------------------------------- + // --------------------------------------------------------------- + + // Reading and writing style string + void testOne() + { + struct TestCase { + TestCase(gchar const* src, gchar const* dst = 0, gchar const* uri = 0) : src(src), dst(dst), uri(uri) {} + gchar const* src; + gchar const* dst; + gchar const* uri; + }; + + TestCase cases[] = { + TestCase("fill:none"), + TestCase("fill:currentColor"), + TestCase("fill:#ff00ff"), + + TestCase("fill:rgb(100%, 0%, 100%)", "fill:#ff00ff"), + // TODO - fix this to preserve the string + TestCase("fill:url(#painter) rgb(100%, 0%, 100%)", + "fill:url(#painter) #ff00ff", "#painter"), + + TestCase("fill:rgb(255, 0, 255)", "fill:#ff00ff"), + // TODO - fix this to preserve the string + TestCase("fill:url(#painter) rgb(255, 0, 255)", + "fill:url(#painter) #ff00ff", "#painter"), + + +// TestCase("fill:#ff00ff icc-color(colorChange, 0.1, 0.5, 0.1)"), + + TestCase("fill:url(#painter)", 0, "#painter"), + TestCase("fill:url(#painter) none", 0, "#painter"), + TestCase("fill:url(#painter) currentColor", 0, "#painter"), + TestCase("fill:url(#painter) #ff00ff", 0, "#painter"), +// TestCase("fill:url(#painter) rgb(100%, 0%, 100%)", 0, "#painter"), +// TestCase("fill:url(#painter) rgb(255, 0, 255)", 0, "#painter"), + + TestCase("fill:url(#painter) #ff00ff icc-color(colorChange, 0.1, 0.5, 0.1)", 0, "#painter"), + +// TestCase("fill:url(#painter) inherit", 0, "#painter"), + TestCase("fill:inherit"), + +// General tests (in general order of appearance in sp_style_read), SPIPaint tested above + TestCase("visibility:hidden"), // SPIEnum + TestCase("visibility:collapse"), + TestCase("visibility:visible"), + TestCase("display:none"), // SPIEnum + TestCase("overflow:visible"), // SPIEnum + TestCase("overflow:auto"), // SPIEnum + + TestCase("color:#ff0000"), + TestCase("color:blue", "color:#0000ff"), + // TestCase("color:currentColor"), SVG 1.1 does not allow color value 'currentColor' + + // Font shorthand + TestCase("font:bold 12px Arial", + "font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:normal;font-family:Arial"), + TestCase("font:bold 12px/24px 'Times New Roman'", + "font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:24px;font-family:\'Times New Roman\'"), + // From CSS 3 Fonts (examples): + TestCase("font: 12pt/15pt sans-serif", + "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:15pt;font-family:sans-serif"), + TestCase("font: 80% sans-serif", + "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:80%;line-height:normal;font-family:sans-serif"), + TestCase("font: x-large/110% 'new century schoolbook', serif", + "font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:x-large;line-height:110%;font-family:\'new century schoolbook\', serif"), + TestCase("font: bold italic large Palatino, serif", + "font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:large;line-height:normal;font-family:Palatino, serif"), + TestCase("font: normal small-caps 120%/120% fantasy", + "font-style:normal;font-variant:small-caps;font-weight:normal;font-stretch:normal;font-size:120%;line-height:120%;font-family:fantasy"), + TestCase("font: condensed oblique 12pt 'Helvetica Neue', serif;", + "font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:condensed;font-size:16px;line-height:normal;font-family:\'Helvetica Neue\', serif"), + + TestCase("font-family:sans-serif"), // SPIString, text_private + TestCase("font-family:Arial"), + // TestCase("font-variant:normal;font-stretch:normal;-inkscape-font-specification:Nimbus Roman No9 L Bold Italic"), + + // Needs to be fixed (quotes should be around each font-family): + TestCase("font-family:Georgia, 'Minion Web'","font-family:Georgia, \'Minion Web\'"), + TestCase("font-size:12", "font-size:12px"), // SPIFontSize + TestCase("font-size:12px"), + TestCase("font-size:12pt", "font-size:16px"), + TestCase("font-size:medium"), + TestCase("font-size:smaller"), + TestCase("font-style:italic"), // SPIEnum + TestCase("font-variant:small-caps"), // SPIEnum + TestCase("font-weight:100"), // SPIEnum + TestCase("font-weight:normal"), + TestCase("font-weight:bolder"), + TestCase("font-stretch:condensed"), // SPIEnum + + TestCase("font-variant-ligatures:none"), // SPILigatures + TestCase("font-variant-ligatures:normal"), + TestCase("font-variant-ligatures:no-common-ligatures"), + TestCase("font-variant-ligatures:discretionary-ligatures"), + TestCase("font-variant-ligatures:historical-ligatures"), + TestCase("font-variant-ligatures:no-contextual"), + TestCase("font-variant-ligatures:common-ligatures", "font-variant-ligatures:normal"), + TestCase("font-variant-ligatures:contextual", "font-variant-ligatures:normal"), + TestCase("font-variant-ligatures:no-common-ligatures historical-ligatures"), + TestCase("font-variant-ligatures:historical-ligatures no-contextual"), + TestCase("font-variant-position:normal"), + TestCase("font-variant-position:sub"), + TestCase("font-variant-position:super"), + TestCase("font-variant-caps:normal"), + TestCase("font-variant-caps:small-caps"), + TestCase("font-variant-caps:all-small-caps"), + TestCase("font-variant-numeric:normal"), + TestCase("font-variant-numeric:lining-nums"), + TestCase("font-variant-numeric:oldstyle-nums"), + TestCase("font-variant-numeric:proportional-nums"), + TestCase("font-variant-numeric:tabular-nums"), + TestCase("font-variant-numeric:diagonal-fractions"), + TestCase("font-variant-numeric:stacked-fractions"), + TestCase("font-variant-numeric:ordinal"), + TestCase("font-variant-numeric:slashed-zero"), + TestCase("font-variant-numeric:tabular-nums slashed-zero"), + TestCase("font-variant-numeric:tabular-nums proportional-nums", "font-variant-numeric:proportional-nums"), + + // Should be moved down + TestCase("text-indent:12em"), // SPILength? + TestCase("text-align:center"), // SPIEnum + + // SPITextDecoration + // The default value for 'text-decoration-color' is 'currentColor', but + // we cannot set the default to that value yet. (We need to switch + // SPIPaint to SPIColor and then add the ability to set default.) + // TestCase("text-decoration: underline", + // "text-decoration: underline;text-decoration-line: underline;text-decoration-color:currentColor"), + // TestCase("text-decoration: overline underline", + // "text-decoration: underline overline;text-decoration-line: underline overline;text-decoration-color:currentColor"), + + TestCase("text-decoration: underline wavy #0000ff", + "text-decoration: underline;text-decoration-line: underline;text-decoration-style:wavy;text-decoration-color:#0000ff"), + TestCase("text-decoration: double overline underline #ff0000", + "text-decoration: underline overline;text-decoration-line: underline overline;text-decoration-style:double;text-decoration-color:#ff0000"), + + // SPITextDecorationLine + TestCase("text-decoration-line: underline", + "text-decoration: underline;text-decoration-line: underline"), + + // SPITextDecorationStyle + TestCase("text-decoration-style:solid"), + TestCase("text-decoration-style:dotted"), + + // SPITextDecorationColor + TestCase("text-decoration-color:#ff00ff"), + + // Should be moved up + TestCase("line-height:24px"), // SPILengthOrNormal + TestCase("line-height:1.5"), + TestCase("letter-spacing:2px"), // SPILengthOrNormal + TestCase("word-spacing:2px"), // SPILengthOrNormal + TestCase("word-spacing:normal"), + TestCase("text-transform:lowercase"), // SPIEnum + // ... + TestCase("baseline-shift:baseline"), // SPIBaselineShift + TestCase("baseline-shift:sub"), + TestCase("baseline-shift:12.5%"), + TestCase("baseline-shift:2px"), + + TestCase("opacity:0.1"), // SPIScale24 + // ... + TestCase("stroke-width:2px"), // SPILength + TestCase("stroke-linecap:round"), // SPIEnum + TestCase("stroke-linejoin:round"), // SPIEnum + TestCase("stroke-miterlimit:4"), // SPIFloat + TestCase("marker:url(#Arrow)"), // SPIString + TestCase("marker-start:url(#Arrow)"), + TestCase("marker-mid:url(#Arrow)"), + TestCase("marker-end:url(#Arrow)"), + TestCase("stroke-opacity:0.5"), // SPIScale24 + TestCase("stroke-dasharray:0, 1, 0, 1"), // SPIDashArray + TestCase("stroke-dasharray:0 1 0 1","stroke-dasharray:0, 1, 0, 1"), + TestCase("stroke-dasharray:0 1 2 3","stroke-dasharray:0, 1, 2, 3"), + TestCase("stroke-dashoffset:13"), // SPILength + TestCase("stroke-dashoffset:10px"), + // ... + //TestCase("filter:url(#myfilter)"), // SPIFilter segfault in read + TestCase("filter:inherit"), + + TestCase("opacity:0.1;fill:#ff0000;stroke:#0000ff;stroke-width:2px"), + TestCase("opacity:0.1;fill:#ff0000;stroke:#0000ff;stroke-width:2px;stroke-dasharray:1, 2, 3, 4;stroke-dashoffset:15"), + + +#ifdef WITH_SVG2 + TestCase("paint-order:stroke"), // SPIPaintOrder + TestCase("paint-order:normal"), + TestCase("paint-order: markers stroke fill", "paint-order:markers stroke fill"), + +#endif + TestCase(0) + }; + + for ( gint i = 0; cases[i].src; i++ ) { + // std::cout << "Test one: " << i << std::endl; + SPStyle style(_doc); + style.mergeString( cases[i].src ); + if ( cases[i].uri ) { + TSM_ASSERT( cases[i].src, style.fill.value.href ); + if ( style.fill.value.href ) { + TS_ASSERT_EQUALS( style.fill.value.href->getURI()->toString(), std::string(cases[i].uri) ); + } + } else { + TS_ASSERT( !style.fill.value.href || !style.fill.value.href->getObject() ); + } + + std::string str0_set = style.write(SP_STYLE_FLAG_IFSET ); + + if ( cases[i].dst ) { + // std::cout << " " << str0_set << " " << std::string(cases[i].dst) << std::endl; + TS_ASSERT_EQUALS( str0_set, std::string(cases[i].dst) ); + } else { + // std::cout << " " << str0_set << " " << std::string(cases[i].src) << std::endl; + TS_ASSERT_EQUALS( str0_set, std::string(cases[i].src) ); + } + } + } + + // Testing operator== + void testTwo() + { + struct TestCase { + TestCase(gchar const* src, gchar const* dst, bool match) : + src(src), dst(dst), match(match) {} + gchar const* src; + gchar const* dst; + bool match; + }; + + TestCase cases[] = { + + // SPIFloat + TestCase("stroke-miterlimit:4", "stroke-miterlimit:4", true ), + TestCase("stroke-miterlimit:4", "stroke-miterlimit:2", false), + TestCase("stroke-miterlimit:4", "", true ), // Default + + // SPIScale24 + TestCase("opacity:0.3", "opacity:0.3", true ), + TestCase("opacity:0.3", "opacity:0.6", false), + TestCase("opacity:1.0", "", true ), // Default + + // SPILength + TestCase("text-indent:3", "text-indent:3", true ), + TestCase("text-indent:6", "text-indent:3", false), + TestCase("text-indent:6px", "text-indent:3", false), + TestCase("text-indent:1px", "text-indent:12pc", false), + TestCase("text-indent:2ex", "text-indent:2ex", false), + + // SPILengthOrNormal + TestCase("letter-spacing:normal", "letter-spacing:normal", true ), + TestCase("letter-spacing:2", "letter-spacing:normal", false), + TestCase("letter-spacing:normal", "letter-spacing:2", false), + TestCase("letter-spacing:5px", "letter-spacing:5px", true ), + TestCase("letter-spacing:10px", "letter-spacing:5px", false), + TestCase("letter-spacing:10em", "letter-spacing:10em", false), + + // SPIEnum + TestCase("text-anchor:start", "text-anchor:start", true ), + TestCase("text-anchor:start", "text-anchor:middle", false), + TestCase("text-anchor:start", "", true ), // Default + TestCase("text-anchor:start", "text-anchor:junk", true ), // Bad value + + TestCase("font-weight:normal", "font-weight:400", true ), + TestCase("font-weight:bold", "font-weight:700", true ), + + + // SPIString and SPIFontString + TestCase("font-family:Arial", "font-family:Arial", true ), + TestCase("font-family:A B", "font-family:A B", true ), + TestCase("font-family:A B", "font-family:A C", false), + // Default is not set by class... value is NULL which cannot be compared + // TestCase("font-family:sans-serif", "", true ), // Default + + // SPIColor + TestCase("color:blue", "color:blue", true ), + TestCase("color:blue", "color:red", false), + TestCase("color:red", "color:#ff0000", true ), + + // SPIPaint + TestCase("fill:blue", "fill:blue", true ), + TestCase("fill:blue", "fill:red", false), + TestCase("fill:currentColor", "fill:currentColor", true ), + TestCase("fill:url(#xxx)", "fill:url(#xxx)", true ), + // Needs URL defined as in test 1 + //TestCase("fill:url(#xxx)", "fill:url(#yyy)", false), + + // SPIPaintOrder + TestCase("paint-order:markers", "paint-order:markers", true ), + TestCase("paint-order:markers", "paint-order:stroke", false), + //TestCase("paint-order:fill stroke markers", "", true ), // Default + TestCase("paint-order:normal", "paint-order:normal", true ), + //TestCase("paint-order:fill stroke markers", "paint-order:normal", true ), + + // SPIDashArray + TestCase("stroke-dasharray:0 1 2 3","stroke-dasharray:0 1 2 3",true ), + TestCase("stroke-dasharray:0 1", "stroke-dasharray:0 2", false), + + // SPIFilter + + // SPIFontSize + TestCase("font-size:12px", "font-size:12px", true ), + TestCase("font-size:12px", "font-size:24px", false), + TestCase("font-size:12ex", "font-size:24ex", false), + TestCase("font-size:medium", "font-size:medium", true ), + TestCase("font-size:medium", "font-size:large", false), + + // SPIBaselineShift + TestCase("baseline-shift:baseline", "baseline-shift:baseline", true ), + TestCase("baseline-shift:sub", "baseline-shift:sub", true ), + TestCase("baseline-shift:sub", "baseline-shift:super", false), + TestCase("baseline-shift:baseline", "baseline-shift:sub", false), + TestCase("baseline-shift:10px", "baseline-shift:10px", true ), + TestCase("baseline-shift:10px", "baseline-shift:12px", false), + + + // SPITextDecorationLine + TestCase("text-decoration-line:underline", "text-decoration-line:underline", true ), + TestCase("text-decoration-line:underline", "text-decoration-line:overline", false), + TestCase("text-decoration-line:underline overline", "text-decoration-line:underline overline", true ), + TestCase("text-decoration-line:none", "", true ), // Default + + + // SPITextDecorationStyle + TestCase("text-decoration-style:solid", "text-decoration-style:solid", true ), + TestCase("text-decoration-style:dotted", "text-decoration-style:solid", false), + TestCase("text-decoration-style:solid", "", true ), // Default + + // SPITextDecoration + TestCase("text-decoration:underline", "text-decoration:underline", true ), + TestCase("text-decoration:underline", "text-decoration:overline", false), + TestCase("text-decoration:underline overline","text-decoration:underline overline",true ), + TestCase("text-decoration:overline underline","text-decoration:underline overline",true ), + // TestCase("text-decoration:none", "text-decoration-color:currentColor", true ), // Default + + + // Terminate + TestCase(0,0,0) + }; + for ( gint i = 0; cases[i].src; i++ ) { + // std::cout << "Test two: " << i << std::endl; + SPStyle style_src(_doc); + SPStyle style_dst(_doc); + + style_src.mergeString( cases[i].src ); + style_dst.mergeString( cases[i].dst ); + + // std::cout << "Test:" << std::endl; + // std::cout << " C: |" << cases[i].src << "| |" << cases[i].dst << "|" << std::endl; + // std::cout << " S: |" << style_src.write( SP_STYLE_FLAG_IFSET, NULL ) << "| |" + // << style_dst.write( SP_STYLE_FLAG_IFSET, NULL ) << "|" < + +#include "document.h" +#include "inkscape.h" + + +// Dummy functions to keep linker happy +#if !defined(DUMMY_MAIN_TEST_CALLS_SEEN) +#define DUMMY_MAIN_TEST_CALLS_SEEN +int sp_main_gui (int, char const**) { return 0; } +int sp_main_console (int, char const**) { return 0; } +#endif // DUMMY_MAIN_TEST_CALLS_SEEN + +namespace Inkscape +{ + +template +T* createSuiteAndDocument( void (*fun)(T*&) ) +{ + T* suite = 0; + +#if !GLIB_CHECK_VERSION(2,36,0) + g_type_init(); +#endif + + Inkscape::GC::init(); + if ( !Inkscape::Application::exists() ) + { + // Create the global inkscape object. + Inkscape::Application::create("", false); + } + + SPDocument* tmp = SPDocument::createNewDoc( NULL, TRUE, true ); + if ( tmp ) { + fun( suite ); + if ( suite ) + { + suite->_doc = tmp; + } + else + { + tmp->doUnref(); + } + } + + return suite; +} + +} // namespace Inkscape + +#endif // SEEN_TEST_HELPERS_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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/uri-test.h b/testfiles/src/cxxtests-to-migrate/uri-test.h new file mode 100644 index 000000000..2a4cdab46 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/uri-test.h @@ -0,0 +1,90 @@ + +#ifndef SEEN_URI_TEST_H +#define SEEN_URI_TEST_H +/* + * Test uri.h + * + * Written to aid with refactoring the uri handling to support fullPath + * and data URIs and also cover code which wasn't before tested. + * + * Copyright 2014 (c) BasisTech Boston + * + */ +#include + +#include "uri.h" + +using Inkscape::URI; + +class URITest : public CxxTest::TestSuite +{ +public: + void stringTest( std::string result, std::string expected ) + { + if ( !result.empty() && !expected.empty() ) { + TS_ASSERT_EQUALS( result, expected ); + } else if ( result.empty() && !expected.empty() ) { + TS_FAIL( std::string("Expected (") + expected + "), found null" ); + } else if ( !result.empty() && expected.empty() ) { + TS_FAIL( std::string("Expected null, found (") + result + ")" ); + } + } + + std::string ValueOrEmpty(const char* s) { + return s == NULL ? std::string() : s; + } + + void toStringTest( std::string uri, std::string expected ) { + stringTest( URI(uri.c_str()).toString(), expected ); + } + void pathTest( std::string uri, std::string expected ) { + stringTest( ValueOrEmpty(URI(uri.c_str()).getPath()), expected ); + } + + void testToString() + { + char const* cases[][2] = { + { "foo", "foo" }, + { "#foo", "#foo" }, + { "blah.svg#h", "blah.svg#h" }, + //{ "data:data", "data:data" }, + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) { + toStringTest( std::string(cases[i][0]), std::string(cases[i][1]) ); + } + } + + void testPath() + { + char const* cases[][2] = { + { "foo.svg", "foo.svg" }, + { "foo.svg#bar", "foo.svg" }, + { "#bar", NULL }, + { "data:data", NULL }, + }; + + for ( size_t i = 0; i < G_N_ELEMENTS(cases); i++ ) { + pathTest( ValueOrEmpty(cases[i][0]), ValueOrEmpty(cases[i][1]) ); + } + } + void testFullPath() { + std::ofstream fhl("/tmp/cxxtest-uri.svg", std::ofstream::out); + stringTest( URI("cxxtest-uri.svg").getFullPath("/tmp"), std::string("/tmp/cxxtest-uri.svg") ); + stringTest( URI("cxxtest-uri.svg").getFullPath("/usr/../tmp"), std::string("/tmp/cxxtest-uri.svg") ); + } + +}; + +#endif // SEEN_URI_TEST_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:fileencoding=utf-8:textwidth=99 : diff --git a/testfiles/src/cxxtests-to-migrate/verbs-test.h b/testfiles/src/cxxtests-to-migrate/verbs-test.h new file mode 100644 index 000000000..04a0b80c0 --- /dev/null +++ b/testfiles/src/cxxtests-to-migrate/verbs-test.h @@ -0,0 +1,86 @@ + + +#include + +#include "verbs.h" + +class VerbsTest : public CxxTest::TestSuite +{ +public: + + class TestHook : public Inkscape::Verb { + public: + static int getInternalTableSize() { return _getBaseListSize(); } + + private: + TestHook(); + }; + + void testEnumLength() + { + TS_ASSERT_DIFFERS( 0, static_cast(SP_VERB_LAST) ); + TS_ASSERT_EQUALS( static_cast(SP_VERB_LAST) + 1, TestHook::getInternalTableSize() ); + } + + void testEnumFixed() + { + TS_ASSERT_EQUALS( 0, static_cast(SP_VERB_INVALID) ); + TS_ASSERT_EQUALS( 1, static_cast(SP_VERB_NONE) ); + + TS_ASSERT_DIFFERS( 0, static_cast(SP_VERB_LAST) ); + TS_ASSERT_DIFFERS( 1, static_cast(SP_VERB_LAST) ); + } + + void testFetch() + { + for ( int i = 0; i < static_cast(SP_VERB_LAST); i++ ) + { + char tmp[16]; + snprintf( tmp, sizeof(tmp), "Verb# %d", i ); + tmp[sizeof(tmp)-1] = 0; + std::string descr(tmp); + + Inkscape::Verb* verb = Inkscape::Verb::get(i); + TSM_ASSERT( descr, verb ); + if ( verb ) + { + TSM_ASSERT_EQUALS( descr, verb->get_code(), static_cast(i) ); + + if ( i != static_cast(SP_VERB_INVALID) ) + { + TSM_ASSERT( descr, verb->get_id() ); + TSM_ASSERT( descr, verb->get_name() ); + + Inkscape::Verb* bounced = verb->getbyid( verb->get_id() ); + // TODO - put this back once verbs are fixed + //TSM_ASSERT( descr, bounced ); + if ( bounced ) + { + TSM_ASSERT_EQUALS( descr, bounced->get_code(), static_cast(i) ); + } + else + { + TS_FAIL( std::string("Unable to getbyid() for ") + descr + std::string(" ID: '") + std::string(verb->get_id()) + std::string("'") ); + } + } + else + { + TSM_ASSERT( std::string("SP_VERB_INVALID"), !verb->get_id() ); + TSM_ASSERT( std::string("SP_VERB_INVALID"), !verb->get_name() ); + } + } + } + } + +}; + +/* + 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:fileencoding=utf-8:textwidth=99 : -- cgit v1.2.3 From 0fb25eebd29911c6b0c3515f0cdc86a8dde373a6 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Thu, 1 Sep 2016 14:02:12 +0200 Subject: Fix font style handling for non-system fonts. Gets rid of some Pango-CRITICAL and Gtk_CRITICAL warnings. (bzr r15097) --- src/libnrtype/FontFactory.cpp | 6 ++++++ src/libnrtype/font-lister.cpp | 14 ++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/libnrtype/FontFactory.cpp b/src/libnrtype/FontFactory.cpp index 1fbdce036..6865e923e 100644 --- a/src/libnrtype/FontFactory.cpp +++ b/src/libnrtype/FontFactory.cpp @@ -295,6 +295,7 @@ void font_factory::GetUIFamilies(std::vector& out) const char* displayName = pango_font_family_get_name(families[currentFamily]); if (displayName == 0 || *displayName == '\0') { + std::cerr << "font_factory::GetUIFamilies: Missing displayName! " << std::endl; continue; } sorted.push_back(std::make_pair(families[currentFamily], displayName)); @@ -313,6 +314,10 @@ GList* font_factory::GetUIStyles(PangoFontFamily * in) // Gather the styles for this family PangoFontFace** faces = NULL; int numFaces = 0; + if (in == NULL) { + std::cerr << "font_factory::GetUIStyles(): PangoFontFamily is NULL" << std::endl; + return ret; + } pango_font_family_list_faces(in, &faces, &numFaces); for (int currentFace = 0; currentFace < numFaces; currentFace++) { @@ -322,6 +327,7 @@ GList* font_factory::GetUIStyles(PangoFontFamily * in) const gchar* displayName = pango_font_face_get_face_name(faces[currentFace]); // std::cout << "Display Name: " << displayName << std::endl; if (displayName == NULL || *displayName == '\0') { + std::cerr << "font_factory::GetUIStyles: Missing displayName! " << std::endl; continue; } diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp index 4deae821a..48fcf2a22 100644 --- a/src/libnrtype/font-lister.cpp +++ b/src/libnrtype/font-lister.cpp @@ -135,6 +135,8 @@ void FontLister::ensureRowStyles(GtkTreeModel* model, GtkTreeIter const* iterato if (!row[FontList.styles]) { if (row[FontList.pango_family]) { row[FontList.styles] = font_factory::Default()->GetUIStyles(row[FontList.pango_family]); + } else { + row[FontList.styles] = default_styles; } } } @@ -177,6 +179,7 @@ void FontLister::insert_font_family(Glib::ustring new_family) (*treeModelIter)[FontList.family] = new_family; (*treeModelIter)[FontList.styles] = styles; (*treeModelIter)[FontList.onSystem] = false; + (*treeModelIter)[FontList.pango_family] = NULL; } void FontLister::update_font_list(SPDocument *document) @@ -256,7 +259,8 @@ void FontLister::update_font_list(SPDocument *document) Gtk::TreeModel::iterator treeModelIter = font_list_store->prepend(); (*treeModelIter)[FontList.family] = reinterpret_cast(g_strdup((*i).c_str())); (*treeModelIter)[FontList.styles] = styles; - (*treeModelIter)[FontList.onSystem] = false; + (*treeModelIter)[FontList.onSystem] = false; // false if document font + (*treeModelIter)[FontList.pango_family] = NULL; // CHECK ME (set to pango_family if on system?) } @@ -993,7 +997,7 @@ Glib::ustring FontLister::get_best_style_match(Glib::ustring family, Glib::ustri } catch (...) { - //std::cout << " ERROR: can't find family: " << family << std::endl; + std::cerr << "FontLister::get_best_style_match(): can't find family: " << family << std::endl; return (target_style); } @@ -1002,10 +1006,12 @@ Glib::ustring FontLister::get_best_style_match(Glib::ustring family, Glib::ustri //font_description_dump( target ); - if (!row[FontList.styles]) { + GList *styles = default_styles; + if (row[FontList.onSystem] && !row[FontList.styles]) { row[FontList.styles] = font_factory::Default()->GetUIStyles(row[FontList.pango_family]); + styles = row[FontList.styles]; } - GList *styles = row[FontList.styles]; + for (GList *l = styles; l; l = l->next) { Glib::ustring fontspec = family + ", " + ((StyleNames *)l->data)->CssName; PangoFontDescription *candidate = pango_font_description_from_string(fontspec.c_str()); -- cgit v1.2.3 From 161c3be0a1bb7f1cda9116152dea7e3819617fa7 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Thu, 1 Sep 2016 14:14:19 +0200 Subject: Comment out line-height setting code in Text and Font dialog as it does not yet handle absolute units. (bzr r15098) --- src/ui/dialog/text-edit.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/ui/dialog/text-edit.cpp b/src/ui/dialog/text-edit.cpp index 9efbcf6a8..a38085c85 100644 --- a/src/ui/dialog/text-edit.cpp +++ b/src/ui/dialog/text-edit.cpp @@ -105,6 +105,7 @@ TextEdit::TextEdit() layout_hbox.pack_start(text_sep, false, false, 10); /* Line Spacing */ + /* Commented out as this does not handle non-percentage values GtkWidget *px = sp_icon_new( Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("text_line_spacing") ); layout_hbox.pack_start(*Gtk::manage(Glib::wrap(px)), false, false); @@ -121,6 +122,7 @@ TextEdit::TextEdit() layout_hbox.pack_start(*Gtk::manage(Glib::wrap(spacing_combo)), false, false); layout_frame.set_padding(4,4,4,4); layout_frame.add(layout_hbox); + */ // Text start Offset { @@ -196,7 +198,7 @@ TextEdit::TextEdit() /* Signal handlers */ g_signal_connect ( G_OBJECT (fontsel), "font_set", G_CALLBACK (onFontChange), this ); - g_signal_connect ( G_OBJECT (spacing_combo), "changed", G_CALLBACK (onLineSpacingChange), this ); + // g_signal_connect ( G_OBJECT (spacing_combo), "changed", G_CALLBACK (onLineSpacingChange), this ); g_signal_connect ( G_OBJECT (text_buffer), "changed", G_CALLBACK (onTextChange), this ); g_signal_connect(startOffset, "changed", G_CALLBACK(onStartOffsetChange), this); setasdefault_button.signal_clicked().connect(sigc::mem_fun(*this, &TextEdit::onSetDefault)); @@ -362,6 +364,7 @@ void TextEdit::onReadSelection ( gboolean dostyle, gboolean /*docontent*/ ) text_vertical.set_active(); } + /* double height; if (query.line_height.normal) height = Inkscape::Text::Layout::LINE_HEIGHT_NORMAL; else if (query.line_height.unit == SP_CSS_UNIT_PERCENT) @@ -371,6 +374,7 @@ void TextEdit::onReadSelection ( gboolean dostyle, gboolean /*docontent*/ ) gtk_entry_set_text ((GtkEntry *) gtk_bin_get_child ((GtkBin *) spacing_combo), sstr); g_free(sstr); + */ // Update font variant widget //int result_variants = @@ -506,8 +510,8 @@ SPCSSAttr *TextEdit::fillTextStyle () } // Note that SVG 1.1 does not support line-height but we use it. - const gchar *sstr = gtk_combo_box_text_get_active_text ((GtkComboBoxText *) spacing_combo); - sp_repr_css_set_property (css, "line-height", sstr); + // const gchar *sstr = gtk_combo_box_text_get_active_text ((GtkComboBoxText *) spacing_combo); + // sp_repr_css_set_property (css, "line-height", sstr); // Font variants vari_vbox.fill_css( css ); -- cgit v1.2.3 From a796d4f9aafacf8a177c36cf50881366e450b817 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Thu, 1 Sep 2016 15:10:48 +0200 Subject: Make GTK3 width of Text and Font dialog more reasonable. (bzr r15099) --- src/widgets/font-selector.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp index 4822020be..f400de89c 100644 --- a/src/widgets/font-selector.cpp +++ b/src/widgets/font-selector.cpp @@ -110,8 +110,8 @@ static void sp_font_selector_set_size_tooltip(SPFontSelector *fsel) */ static void sp_font_selector_init(SPFontSelector *fsel) { - gtk_box_set_homogeneous(GTK_BOX(fsel), TRUE); - gtk_box_set_spacing(GTK_BOX(fsel), 4); + //gtk_box_set_homogeneous(GTK_BOX(fsel), TRUE); + //gtk_box_set_spacing(GTK_BOX(fsel), 4); /* Family frame */ GtkWidget *f = gtk_frame_new(_("Font family")); @@ -133,6 +133,7 @@ static void sp_font_selector_init(SPFontSelector *fsel) GtkTreeViewColumn *column = gtk_tree_view_column_new (); GtkCellRenderer *cell = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, cell, FALSE); + gtk_tree_view_column_set_fixed_width (column, 200); gtk_tree_view_column_set_attributes (column, cell, "text", 0, NULL); gtk_tree_view_column_set_cell_data_func (column, cell, GtkTreeCellDataFunc (font_lister_cell_data_func), @@ -171,7 +172,7 @@ static void sp_font_selector_init(SPFontSelector *fsel) /* Style frame */ f = gtk_frame_new(C_("Font selector", "Style")); gtk_widget_show(f); - gtk_box_pack_start(GTK_BOX (fsel), f, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX (fsel), f, FALSE, TRUE, 0); auto vb = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); gtk_box_set_homogeneous(GTK_BOX(vb), FALSE); -- cgit v1.2.3 From 31bb43ed5a135c1a65eadb30dd81b0de59bf2569 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Fri, 2 Sep 2016 21:32:55 +0200 Subject: Bug fixes to stroke to path pointed by CR (bzr r15100) --- src/splivarot.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/splivarot.cpp b/src/splivarot.cpp index 7a5df4c97..6b9fd5f83 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -1197,6 +1197,8 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy) { bool did = false; Inkscape::Selection *selection = desktop->getSelection(); + SPDocument * doc = desktop->getDocument(); + Inkscape::XML::Document *xml_doc = doc->getReprDoc(); SPLPEItem *lpeitem = SP_LPE_ITEM(item); if (lpeitem) { lpeitem->removeAllPathEffects(true); @@ -1422,8 +1424,6 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy) } if (SP_IS_SHAPE(item)) { - SPDocument * doc = desktop->getDocument(); - Inkscape::XML::Document *xml_doc = doc->getReprDoc(); Inkscape::XML::Node *g_repr = xml_doc->createElement("svg:g"); // add the group to the parent @@ -1435,7 +1435,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy) Inkscape::XML::Node *fill = NULL; if (!legacy) { gchar const *f_val = sp_repr_css_property(ncsf, "fill", NULL); - if (f_val) { + if( !item->style->fill.noneSet ){ fill = xml_doc->createElement("svg:path"); sp_repr_css_change(fill, ncsf, "style"); @@ -1637,14 +1637,21 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy) if( fill || stroke || markers ) { did = true; } + Inkscape::XML::Node *out = NULL; if (!fill && !markers) { - g_repr = stroke; - } - if (!fill && !stroke) { - g_repr = markers; - } - if (!markers && !stroke) { - g_repr = fill; + out = stroke; + parent->mergeFrom(g_repr, ""); + parent->removeChild(g_repr); + } else if (!fill && !stroke) { + out = markers; + parent->mergeFrom(g_repr, ""); + parent->removeChild(g_repr); + } else if (!markers && !stroke) { + out = fill; + parent->mergeFrom(g_repr, ""); + parent->removeChild(g_repr); + } else { + out = g_repr; } //bug lp:1290573 : completely destroy the old object first @@ -1653,7 +1660,7 @@ sp_item_path_outline(SPItem *item, SPDesktop *desktop, bool legacy) if( selection->includes(item) ){ selection->remove(item); item->deleteObject(false); - selection->add(g_repr); + selection->add(out); } else { item->deleteObject(false); } -- cgit v1.2.3 From bfd3776928695c2e2ffd7b05a3ac0490f813b97b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 3 Sep 2016 13:23:06 +1000 Subject: Update CMake checker Report stale ignore files (bzr r15101) --- CMakeScripts/cmake_consistency_check.py | 212 ++++++++++++++++++-------------- 1 file changed, 123 insertions(+), 89 deletions(-) diff --git a/CMakeScripts/cmake_consistency_check.py b/CMakeScripts/cmake_consistency_check.py index 53026910e..64419936b 100755 --- a/CMakeScripts/cmake_consistency_check.py +++ b/CMakeScripts/cmake_consistency_check.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # $Id: cmake_consistency_check.py 38869 2011-07-31 03:15:37Z campbellbarton $ # ***** BEGIN GPL LICENSE BLOCK ***** @@ -23,13 +23,22 @@ # -from cmake_consistency_check_config import IGNORE, UTF8_CHECK, SOURCE_DIR +import sys +if not sys.version.startswith("3"): + print("\nPython3.x needed, found %s.\nAborting!\n" % + sys.version.partition(" ")[0]) + sys.exit(1) + +from cmake_consistency_check_config import ( + IGNORE, + UTF8_CHECK, + SOURCE_DIR, +) + import os from os.path import join, dirname, normpath, splitext -print("Scanning:", SOURCE_DIR) - global_h = set() global_c = set() global_refs = {} @@ -53,7 +62,7 @@ def replace_line(f, i, text, keep_indent=True): def source_list(path, filename_check=None): for dirpath, dirnames, filenames in os.walk(path): - # skip '.svn' + # skip '.bzr' if dirpath.startswith("."): continue @@ -70,12 +79,12 @@ def is_cmake(filename): def is_c_header(filename): ext = splitext(filename)[1] - return (ext in (".h", ".hpp", ".hxx")) + return (ext in {".h", ".hpp", ".hxx", ".hh"}) def is_c(filename): ext = splitext(filename)[1] - return (ext in (".c", ".cpp", ".cxx", ".m", ".mm", ".rc")) + return (ext in {".c", ".cpp", ".cxx", ".m", ".mm", ".rc", ".cc", ".inl"}) def is_c_any(filename): @@ -87,13 +96,16 @@ def cmake_get_src(f): sources_h = [] sources_c = [] - filen = open(f, "r") + filen = open(f, "r", encoding="utf8") it = iter(filen) found = False i = 0 # print(f) def is_definition(l, f, i, name): + if l.startswith("unset("): + return False + if ('set(%s' % name) in l or ('set(' in l and l.endswith(name)): if len(l.split()) > 1: raise Exception("strict formatting not kept 'set(%s*' %s:%d" % (name, f, i)) @@ -146,6 +158,7 @@ def cmake_get_src(f): # replace dirs l = l.replace("${CMAKE_CURRENT_SOURCE_DIR}", cmake_base) + l = l.strip('"') if not l: pass @@ -166,13 +179,21 @@ def cmake_get_src(f): elif is_c(new_file): sources_c.append(new_file) global_refs.setdefault(new_file, []).append((f, i)) - elif l in ("PARENT_SCOPE", ): + elif l in {"PARENT_SCOPE", }: # cmake var, ignore pass elif new_file.endswith(".list"): pass elif new_file.endswith(".def"): pass + elif new_file.endswith(".cl"): # opencl + pass + elif new_file.endswith(".cu"): # cuda + pass + elif new_file.endswith(".osl"): # open shading language + pass + elif new_file.endswith(".glsl"): + pass else: raise Exception("unknown file type - not c or h %s -> %s" % (f, new_file)) @@ -183,11 +204,11 @@ def cmake_get_src(f): if new_path_rel != l: print("overly relative path:\n %s:%d\n %s\n %s" % (f, i, l, new_path_rel)) - ## Save time. just replace the line + # # Save time. just replace the line # replace_line(f, i - 1, new_path_rel) else: - raise Exception("non existant include %s:%d -> %s" % (f, i, new_file)) + raise Exception("non existent include %s:%d -> %s" % (f, i, new_file)) # print(new_file) @@ -208,90 +229,103 @@ def cmake_get_src(f): ''' # reset - sources_h[:] = [] - sources_c[:] = [] + del sources_h[:] + del sources_c[:] filen.close() -for cmake in source_list(SOURCE_DIR, is_cmake): - cmake_get_src(cmake) - - -def is_ignore(f): - for ig in IGNORE: +def is_ignore(f, ignore_used): + for index, ig in enumerate(IGNORE): if ig in f: + ignore_used[index] = True return True return False -# First do stupid check, do these files exist? -print("\nChecking for missing references:") -is_err = False -errs = [] -for f in (global_h | global_c): - if f.endswith("dna.c"): - continue - - if not os.path.exists(f): - refs = global_refs[f] - if refs: - for cf, i in refs: - errs.append((cf, i)) - else: - raise Exception("CMake referenecs missing, internal error, aborting!") - is_err = True - -errs.sort() -errs.reverse() -for cf, i in errs: - print("%s:%d" % (cf, i)) - # Write a 'sed' script, useful if we get a lot of these - # print("sed '%dd' '%s' > '%s.tmp' ; mv '%s.tmp' '%s'" % (i, cf, cf, cf, cf)) - - -if is_err: - raise Exception("CMake referenecs missing files, aborting!") -del is_err -del errs - -# now check on files not accounted for. -print("\nC/C++ Files CMake doesnt know about...") -for cf in sorted(source_list(SOURCE_DIR, is_c)): - if not is_ignore(cf): - if cf not in global_c: - print("missing_c: ", cf) - - # check if automake builds a corrasponding .o file. - ''' - if cf in global_c: - out1 = os.path.splitext(cf)[0] + ".o" - out2 = os.path.splitext(cf)[0] + ".Po" - out2_dir, out2_file = out2 = os.path.split(out2) - out2 = os.path.join(out2_dir, ".deps", out2_file) - if not os.path.exists(out1) and not os.path.exists(out2): - print("bad_c: ", cf) - ''' - -print("\nC/C++ Headers CMake doesnt know about...") -for hf in sorted(source_list(SOURCE_DIR, is_c_header)): - if not is_ignore(hf): - if hf not in global_h: - print("missing_h: ", hf) - -if UTF8_CHECK: - # test encoding - import traceback - for files in (global_c, global_h): - for f in sorted(files): - if os.path.exists(f): - # ignore outside of our source tree - if "extern" not in f: - i = 1 - try: - for l in open(f, "r", encoding="utf8"): - i += 1 - except: - print("Non utf8: %s:%d" % (f, i)) - if i > 1: - traceback.print_exc() +def main(): + + print("Scanning:", SOURCE_DIR) + + for cmake in source_list(SOURCE_DIR, is_cmake): + cmake_get_src(cmake) + + # First do stupid check, do these files exist? + print("\nChecking for missing references:") + is_err = False + errs = [] + for f in (global_h | global_c): + + if not os.path.exists(f): + refs = global_refs[f] + if refs: + for cf, i in refs: + errs.append((cf, i)) + else: + raise Exception("CMake referenecs missing, internal error, aborting!") + is_err = True + + errs.sort() + errs.reverse() + for cf, i in errs: + print("%s:%d" % (cf, i)) + # Write a 'sed' script, useful if we get a lot of these + # print("sed '%dd' '%s' > '%s.tmp' ; mv '%s.tmp' '%s'" % (i, cf, cf, cf, cf)) + + if is_err: + raise Exception("CMake referenecs missing files, aborting!") + del is_err + del errs + + ignore_used = [False] * len(IGNORE) + + # now check on files not accounted for. + print("\nC/C++ Files CMake doesnt know about...") + for cf in sorted(source_list(SOURCE_DIR, is_c)): + if not is_ignore(cf, ignore_used): + if cf not in global_c: + print("missing_c: ", cf) + + # check if automake builds a corrasponding .o file. + ''' + if cf in global_c: + out1 = os.path.splitext(cf)[0] + ".o" + out2 = os.path.splitext(cf)[0] + ".Po" + out2_dir, out2_file = out2 = os.path.split(out2) + out2 = os.path.join(out2_dir, ".deps", out2_file) + if not os.path.exists(out1) and not os.path.exists(out2): + print("bad_c: ", cf) + ''' + + print("\nC/C++ Headers CMake doesnt know about...") + for hf in sorted(source_list(SOURCE_DIR, is_c_header)): + if not is_ignore(hf, ignore_used): + if hf not in global_h: + print("missing_h: ", hf) + + if UTF8_CHECK: + # test encoding + import traceback + for files in (global_c, global_h): + for f in sorted(files): + if os.path.exists(f): + # ignore outside of our source tree + if "extern" not in f: + i = 1 + try: + for l in open(f, "r", encoding="utf8"): + i += 1 + except UnicodeDecodeError: + print("Non utf8: %s:%d" % (f, i)) + if i > 1: + traceback.print_exc() + + # Check ignores aren't stale + print("\nCheck for unused 'IGNORE' paths...") + for index, ig in enumerate(IGNORE): + if not ignore_used[index]: + print("unused ignore: %r" % ig) + + +if __name__ == "__main__": + main() -- cgit v1.2.3 From 15986c2286dbc36f42de43e3cb98aad9fc0f16c7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 3 Sep 2016 13:24:49 +1000 Subject: CMake: add missing headers (bzr r15102) --- src/2geom/CMakeLists.txt | 8 ++++- src/ui/CMakeLists.txt | 4 ++- src/widgets/CMakeLists.txt | 88 ++++++++++++++++++++++------------------------ 3 files changed, 53 insertions(+), 47 deletions(-) diff --git a/src/2geom/CMakeLists.txt b/src/2geom/CMakeLists.txt index 97b47b630..aa51d51bd 100644 --- a/src/2geom/CMakeLists.txt +++ b/src/2geom/CMakeLists.txt @@ -60,13 +60,16 @@ set(2geom_SRC bezier-to-sbasis.h bezier-utils.h bezier.h + cairo-path-sink.h choose.h circle.h + circulator.h concepts.h conic_section_clipper.h conic_section_clipper_cr.h conic_section_clipper_impl.h conicsec.h + convex-hull.h coord.h crossing.h curve.h @@ -82,10 +85,13 @@ set(2geom_SRC int-interval.h int-point.h int-rect.h + intersection-graph.h + intersection.h interval.h line.h linear.h math-utils.h + nearest-time.h ord.h path-intersection.h path-sink.h @@ -106,8 +112,8 @@ set(2geom_SRC solver.h svg-path-parser.h svg-path-writer.h - sweeper.h sweep-bounds.h + sweeper.h toposweep.h transforms.h utils.h diff --git a/src/ui/CMakeLists.txt b/src/ui/CMakeLists.txt index edcc41cd2..9e641edc3 100644 --- a/src/ui/CMakeLists.txt +++ b/src/ui/CMakeLists.txt @@ -246,6 +246,7 @@ set(ui_SRC dialog/template-widget.h dialog/text-edit.h dialog/tile.h + dialog/tracedialog.h dialog/transformation.h dialog/undo-history.h dialog/xml-tree.h @@ -273,14 +274,15 @@ set(ui_SRC tools/dropper-tool.h tools/dynamic-base.h tools/eraser-tool.h + tools/flood-tool.h tools/freehand-base.h tools/gradient-tool.h tools/lpe-tool.h tools/measure-tool.h tools/mesh-tool.h tools/node-tool.h - tools/pencil-tool.h tools/pen-tool.h + tools/pencil-tool.h tools/rect-tool.h tools/select-tool.h tools/spiral-tool.h diff --git a/src/widgets/CMakeLists.txt b/src/widgets/CMakeLists.txt index b2071af4e..c87fa1500 100644 --- a/src/widgets/CMakeLists.txt +++ b/src/widgets/CMakeLists.txt @@ -1,32 +1,20 @@ add_subdirectory(gimp) set(widgets_SRC - button.cpp arc-toolbar.cpp box3d-toolbar.cpp + button.cpp calligraphy-toolbar.cpp connector-toolbar.cpp - dropper-toolbar.cpp - eraser-toolbar.cpp - lpe-toolbar.cpp - measure-toolbar.cpp - mesh-toolbar.cpp - node-toolbar.cpp - pencil-toolbar.cpp - rect-toolbar.cpp - spiral-toolbar.cpp - spray-toolbar.cpp - star-toolbar.cpp - text-toolbar.cpp - tweak-toolbar.cpp - zoom-toolbar.cpp dash-selector.cpp desktop-widget.cpp + dropper-toolbar.cpp eek-preview.cpp + ege-adjustment-action.cpp + ege-output-action.cpp ege-paint-def.cpp - ege-adjustment-action.cpp - ege-output-action.cpp - ege-select-one-action.cpp + ege-select-one-action.cpp + eraser-toolbar.cpp fill-style.cpp font-selector.cpp gradient-image.cpp @@ -40,7 +28,13 @@ set(widgets_SRC ink-radio-action.cpp ink-toggle-action.cpp ink-tool-menu-action.cpp + lpe-toolbar.cpp + measure-toolbar.cpp + mesh-toolbar.cpp + node-toolbar.cpp paint-selector.cpp + pencil-toolbar.cpp + rect-toolbar.cpp select-toolbar.cpp sp-attribute-widget.cpp sp-color-selector.cpp @@ -49,41 +43,35 @@ set(widgets_SRC sp-xmlview-content.cpp sp-xmlview-tree.cpp spinbutton-events.cpp + spiral-toolbar.cpp + spray-toolbar.cpp spw-utilities.cpp + star-toolbar.cpp stroke-marker-selector.cpp stroke-style.cpp swatch-selector.cpp + text-toolbar.cpp toolbox.cpp + tweak-toolbar.cpp + zoom-toolbar.cpp # ------- # Headers - button.h arc-toolbar.h box3d-toolbar.h + button.h calligraphy-toolbar.h connector-toolbar.h - dropper-toolbar.h - eraser-toolbar.h - lpe-toolbar.h - measure-toolbar.h - mesh-toolbar.h - node-toolbar.h - pencil-toolbar.h - rect-toolbar.h - spiral-toolbar.h - spray-toolbar.h - star-toolbar.h - text-toolbar.h - tweak-toolbar.h - zoom-toolbar.h dash-selector.h desktop-widget.h + dropper-toolbar.h eek-preview.h + ege-adjustment-action.h + ege-output-action.h ege-paint-def.h - ege-adjustment-action.h - ege-output-action.h - ege-select-one-action.h + ege-select-one-action.h + eraser-toolbar.h fill-n-stroke-factory.h fill-style.h font-selector.h @@ -93,12 +81,18 @@ set(widgets_SRC gradient-vector.h icon.h image-menu-item.h - ink-action.h - ink-comboboxentry-action.h + ink-action.h + ink-comboboxentry-action.h ink-radio-action.h - ink-toggle-action.h - ink-tool-menu-action.h + ink-toggle-action.h + ink-tool-menu-action.h + lpe-toolbar.h + measure-toolbar.h + mesh-toolbar.h + node-toolbar.h paint-selector.h + pencil-toolbar.h + rect-toolbar.h select-toolbar.h sp-attribute-widget.h sp-color-selector.h @@ -107,25 +101,29 @@ set(widgets_SRC sp-xmlview-content.h sp-xmlview-tree.h spinbutton-events.h + spiral-toolbar.h + spray-toolbar.h spw-utilities.h + star-toolbar.h stroke-marker-selector.h stroke-style.h swatch-selector.h + text-toolbar.h toolbox.h + tweak-toolbar.h widget-sizes.h + zoom-toolbar.h ) # add_inkscape_lib(widgets_LIB "${widgets_SRC}") add_inkscape_source("${widgets_SRC}") -set ( widgets_paintbucket_SRC - paintbucket-toolbar.cpp - paintbucket-toolbar.h +set(widgets_paintbucket_SRC + paintbucket-toolbar.cpp + paintbucket-toolbar.h ) if ("${HAVE_POTRACE}") add_inkscape_source("${widgets_paintbucket_SRC}") endif() - - -- cgit v1.2.3 From 16cf6039cb46b426eb6005ed8e9ae710fa0c9bed Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 4 Sep 2016 11:22:09 +0200 Subject: Fix some chrash when apply LPE: ej- sometimes Gear (bzr r15103) --- src/sp-lpe-item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp index 85df070b8..4719f98d0 100644 --- a/src/sp-lpe-item.cpp +++ b/src/sp-lpe-item.cpp @@ -460,7 +460,7 @@ void SPLPEItem::addPathEffect(std::string value, bool reset) if (SP_ACTIVE_DESKTOP ) { Inkscape::UI::Tools::ToolBase *ec = SP_ACTIVE_DESKTOP->event_context; if (INK_IS_NODE_TOOL(ec)) { - tools_switch(SP_ACTIVE_DESKTOP, TOOLS_LPETOOL); //mhh + tools_switch(SP_ACTIVE_DESKTOP, TOOLS_SELECT); //mhh tools_switch(SP_ACTIVE_DESKTOP, TOOLS_NODES); } } -- cgit v1.2.3 From 0711d958cefd7acfa36b8d2f7e556afd95c04941 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 4 Sep 2016 17:28:07 +0200 Subject: Fix bug#744612 Fixed bugs: - https://launchpad.net/bugs/744612 (bzr r15104) --- src/live_effects/lpe-gears.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/live_effects/lpe-gears.cpp b/src/live_effects/lpe-gears.cpp index 307fab6fd..fc5327257 100644 --- a/src/live_effects/lpe-gears.cpp +++ b/src/live_effects/lpe-gears.cpp @@ -248,6 +248,9 @@ LPEGears::doEffect_path (Geom::PathVector const &path_in) path_out.push_back( gear->path()); for (++it; it != gearpath.end() ; ++it) { + if (are_near((*it).initialPoint(), (*it).finalPoint())) { + continue; + } // iterate through Geom::Curve in path_in Gear* gearnew = new Gear(gear->spawn( (*it).finalPoint() )); path_out.push_back( gearnew->path() ); -- cgit v1.2.3 From 707c97e59e42f890e1f70ed8c92614db105cf7e0 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 5 Sep 2016 08:11:03 +0200 Subject: Bug#744612. Add minimun radius value to minimize hangs Fixed bugs: - https://launchpad.net/bugs/744612 (bzr r15105) --- src/live_effects/lpe-gears.cpp | 17 +++++++++++------ src/live_effects/lpe-gears.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/live_effects/lpe-gears.cpp b/src/live_effects/lpe-gears.cpp index fc5327257..1d5398aa5 100644 --- a/src/live_effects/lpe-gears.cpp +++ b/src/live_effects/lpe-gears.cpp @@ -207,7 +207,8 @@ namespace LivePathEffect { LPEGears::LPEGears(LivePathEffectObject *lpeobject) : Effect(lpeobject), teeth(_("_Teeth:"), _("The number of teeth"), "teeth", &wr, this, 10), - phi(_("_Phi:"), _("Tooth pressure angle (typically 20-25 deg). The ratio of teeth not in contact."), "phi", &wr, this, 5) + phi(_("_Phi:"), _("Tooth pressure angle (typically 20-25 deg). The ratio of teeth not in contact."), "phi", &wr, this, 5), + min_radius(_("Min Radius:"), _("Minimun radius, low balues can slow"), "min_radius", &wr, this, 5.0) { /* Tooth pressure angle: The angle between the tooth profile and a perpendicular to the pitch * circle, usually at the point where the pitch circle meets the tooth profile. Standard angles @@ -218,8 +219,10 @@ LPEGears::LPEGears(LivePathEffectObject *lpeobject) : teeth.param_make_integer(); teeth.param_set_range(3, 1e10); - registerParameter( dynamic_cast(&teeth) ); - registerParameter( dynamic_cast(&phi) ); + min_radius.param_set_range(0.01, 9999.0); + registerParameter(&teeth); + registerParameter(&phi); + registerParameter(&min_radius); } LPEGears::~LPEGears() @@ -242,11 +245,13 @@ LPEGears::doEffect_path (Geom::PathVector const &path_in) gear->angle(atan2((*it).initialPoint() - gear_centre)); ++it; - if ( it == gearpath.end() ) return path_out; - gear->pitch_radius(Geom::distance(gear_centre, (*it).finalPoint())); + if ( it == gearpath.end() ) return path_out; + double radius = Geom::distance(gear_centre, (*it).finalPoint()); + radius = radius < min_radius?min_radius:radius; + gear->pitch_radius(radius); path_out.push_back( gear->path()); - + for (++it; it != gearpath.end() ; ++it) { if (are_near((*it).initialPoint(), (*it).finalPoint())) { continue; diff --git a/src/live_effects/lpe-gears.h b/src/live_effects/lpe-gears.h index 5dd6dd239..57b49d2b5 100644 --- a/src/live_effects/lpe-gears.h +++ b/src/live_effects/lpe-gears.h @@ -27,6 +27,7 @@ public: private: ScalarParam teeth; ScalarParam phi; + ScalarParam min_radius; LPEGears(const LPEGears&); LPEGears& operator=(const LPEGears&); -- cgit v1.2.3 From 4bcca9f2bf8e89d1589833112a51d5db45225037 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 5 Sep 2016 14:56:53 +0200 Subject: Save new 'x' and 'y' attribute values when 'line-height' changed. Partial fix for bug #1590141. (bzr r15106) --- src/widgets/text-toolbar.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 0160bcac7..0ce2db4b2 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -567,6 +567,15 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl ) if(modmade) { DocumentUndo::maybeDone(SP_ACTIVE_DESKTOP->getDocument(), "ttb:line-height", SP_VERB_NONE, _("Text: Change line-height")); + // Call to Document::maybeDone() causes rebuild of text layout (with all proper style + // cascading, etc.). For multi-line text with sodipodi::role="line", we must explicitly + // save new 'x' and 'y' attribute values by calling updateRepr(). + // Partial fix for bug #1590141. + for(auto i=itemlist.begin();i!=itemlist.end(); ++i){ + if (SP_IS_TEXT (*i)) { + (*i)->updateRepr(); + } + } } // If no selected objects, set default. -- cgit v1.2.3 From e9d7e78e43ccfe0feda34998d31d921138232da6 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 5 Sep 2016 15:44:11 +0200 Subject: Fix history handling for previous commit. (bzr r15107) --- src/widgets/text-toolbar.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/widgets/text-toolbar.cpp b/src/widgets/text-toolbar.cpp index 0ce2db4b2..4b22c8d7e 100644 --- a/src/widgets/text-toolbar.cpp +++ b/src/widgets/text-toolbar.cpp @@ -565,17 +565,18 @@ static void sp_text_lineheight_value_changed( GtkAdjustment *adj, GObject *tbl ) // Save for undo if(modmade) { - DocumentUndo::maybeDone(SP_ACTIVE_DESKTOP->getDocument(), "ttb:line-height", SP_VERB_NONE, - _("Text: Change line-height")); - // Call to Document::maybeDone() causes rebuild of text layout (with all proper style + // Call ensureUpToDate() causes rebuild of text layout (with all proper style // cascading, etc.). For multi-line text with sodipodi::role="line", we must explicitly // save new 'x' and 'y' attribute values by calling updateRepr(). // Partial fix for bug #1590141. + desktop->getDocument()->ensureUpToDate(); for(auto i=itemlist.begin();i!=itemlist.end(); ++i){ if (SP_IS_TEXT (*i)) { (*i)->updateRepr(); } } + DocumentUndo::maybeDone(SP_ACTIVE_DESKTOP->getDocument(), "ttb:line-height", SP_VERB_NONE, + _("Text: Change line-height")); } // If no selected objects, set default. -- cgit v1.2.3 From 32e9ba119663b9d5800392ba34700053eaaa7f90 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 6 Sep 2016 12:37:35 +0200 Subject: Improve pattern rendering with large pattern transform. Partial fix for bug #1465753. (bzr r15108) --- src/sp-pattern.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp index 77fa9034d..9d6296a0d 100644 --- a/src/sp-pattern.cpp +++ b/src/sp-pattern.cpp @@ -670,10 +670,20 @@ cairo_pattern_t *SPPattern::pattern_new(cairo_t *base_ct, Geom::OptRect const &b dc.paint(opacity); // apply opacity } - cairo_pattern_t *cp = cairo_pattern_create_for_surface(pattern_surface.raw()); // Apply transformation to user space. Also compensate for oversampling. - ink_cairo_pattern_set_matrix(cp, ps2user.inverse() * pattern_surface.drawingTransform()); + Geom::Affine raw_transform = ps2user.inverse() * pattern_surface.drawingTransform(); + + // Cairo doesn't like large values of x0 and y0. We can replace x0 and y0 by equivalent + // values close to zero (since one tile on a grid is the same as another it doesn't + // matter which tile is used as the base tile). + int w = one_tile[Geom::X].extent(); + int h = one_tile[Geom::Y].extent(); + int m = raw_transform[4] / w; + int n = raw_transform[5] / h; + raw_transform *= Geom::Translate( -m*w, -n*h ); + cairo_pattern_t *cp = cairo_pattern_create_for_surface(pattern_surface.raw()); + ink_cairo_pattern_set_matrix(cp, raw_transform); cairo_pattern_set_extend(cp, CAIRO_EXTEND_REPEAT); return cp; -- cgit v1.2.3 From 1c5f5f06cff3fd162208e4e59c3b937cc7790f04 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Fri, 9 Sep 2016 14:09:07 +0200 Subject: Fix bug: #1621213 in Pattern Along Path LPE Fixed bugs: - https://launchpad.net/bugs/1621213 (bzr r15110) --- src/live_effects/lpe-patternalongpath.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/live_effects/lpe-patternalongpath.cpp b/src/live_effects/lpe-patternalongpath.cpp index 0814ce0da..f90ac2b70 100644 --- a/src/live_effects/lpe-patternalongpath.cpp +++ b/src/live_effects/lpe-patternalongpath.cpp @@ -11,6 +11,7 @@ #include <2geom/bezier-to-sbasis.h> #include "knotholder.h" +#include using std::vector; @@ -195,12 +196,12 @@ LPEPatternAlongPath::doEffect_pwd2 (Geom::Piecewise > con case PAPCT_REPEATED_STRETCHED: // if uskeleton is closed: if(path_i.segs.front().at0() == path_i.segs.back().at1()){ - nbCopies = static_cast(std::floor((uskeleton.domain().extent() - toffset)/(pattBndsX->extent()+xspace))); + nbCopies = std::max(1, static_cast(std::floor((uskeleton.domain().extent() - toffset)/(pattBndsX->extent()+xspace)))); pattBndsX = Interval(pattBndsX->min(),pattBndsX->max()+xspace); scaling = (uskeleton.domain().extent() - toffset)/(((double)nbCopies)*pattBndsX->extent()); // if not closed: no space at the end }else{ - nbCopies = static_cast(std::floor((uskeleton.domain().extent() - toffset + xspace)/(pattBndsX->extent()+xspace))); + nbCopies = std::max(1, static_cast(std::floor((uskeleton.domain().extent() - toffset + xspace)/(pattBndsX->extent()+xspace)))); pattBndsX = Interval(pattBndsX->min(),pattBndsX->max()+xspace); scaling = (uskeleton.domain().extent() - toffset)/(((double)nbCopies)*pattBndsX->extent() - xspace); } -- cgit v1.2.3 From d16ce258120800e84bfca5c3c687c25177a3137c Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 11 Sep 2016 12:10:44 +0200 Subject: Fix bugs: #1621234 and #172137 Fixed bugs: - https://launchpad.net/bugs/172137 - https://launchpad.net/bugs/1621234 (bzr r15111) --- src/live_effects/lpe-bendpath.cpp | 14 ++++------- src/live_effects/lpe-bendpath.h | 2 +- src/live_effects/lpe-patternalongpath.cpp | 21 ++++++++--------- src/live_effects/lpe-patternalongpath.h | 1 - src/ui/tools/freehand-base.cpp | 39 ++++++++++++++++--------------- 5 files changed, 36 insertions(+), 41 deletions(-) diff --git a/src/live_effects/lpe-bendpath.cpp b/src/live_effects/lpe-bendpath.cpp index 2ba1e32b4..c24d38d7b 100644 --- a/src/live_effects/lpe-bendpath.cpp +++ b/src/live_effects/lpe-bendpath.cpp @@ -67,7 +67,6 @@ LPEBendPath::LPEBendPath(LivePathEffectObject *lpeobject) : _provides_knotholder_entities = true; apply_to_clippath_and_mask = true; concatenate_before_pwd2 = true; - _prop_scale_store = prop_scale; } LPEBendPath::~LPEBendPath() @@ -81,9 +80,6 @@ LPEBendPath::doBeforeEffect (SPLPEItem const* lpeitem) // get the item bounding box original_bbox(lpeitem); original_height = boundingbox_Y.max() - boundingbox_Y.min(); - if(_prop_scale_store != prop_scale) { - prop_scale.param_set_value(_prop_scale_store); - } } Geom::Piecewise > @@ -124,9 +120,9 @@ LPEBendPath::doEffect_pwd2 (Geom::Piecewise > const & pwd } if ( scale_y_rel.get_value() ) { - y*=(scaling*_prop_scale_store); + y*=(scaling*prop_scale); } else { - if (_prop_scale_store != 1.0) y *= _prop_scale_store; + if (prop_scale != 1.0) y *= prop_scale; } Piecewise > output = compose(uskeleton,x) + y*compose(n,x); @@ -188,9 +184,9 @@ KnotHolderEntityWidthBendPath::knot_set(Geom::Point const &p, Geom::Point const& Geom::Point knot_pos = this->knot->pos * item->i2dt_affine().inverse(); Geom::Coord nearest_to_ray = ray.nearestTime(knot_pos); if(nearest_to_ray == 0){ - lpe->_prop_scale_store = -Geom::distance(s , ptA)/(lpe->original_height/2.0); + lpe->prop_scale.param_set_value(-Geom::distance(s , ptA)/(lpe->original_height/2.0)); } else { - lpe->_prop_scale_store = Geom::distance(s , ptA)/(lpe->original_height/2.0); + lpe->prop_scale.param_set_value(Geom::distance(s , ptA)/(lpe->original_height/2.0)); } sp_lpe_item_update_patheffect (SP_LPE_ITEM(item), false, true); @@ -211,7 +207,7 @@ KnotHolderEntityWidthBendPath::knot_get() const ray.setPoints(ptA,(*cubic)[1]); } ray.setAngle(ray.angle() + Geom::rad_from_deg(90)); - Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->_prop_scale_store) + ptA; + Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA; bp_helper_path.clear(); Geom::Path hp(result_point); diff --git a/src/live_effects/lpe-bendpath.h b/src/live_effects/lpe-bendpath.h index 36789bb15..eeda86a5e 100644 --- a/src/live_effects/lpe-bendpath.h +++ b/src/live_effects/lpe-bendpath.h @@ -58,7 +58,7 @@ private: BoolParam vertical_pattern; Geom::Piecewise > uskeleton; Geom::Piecewise > n; - double _prop_scale_store; + void on_pattern_pasted(); LPEBendPath(const LPEBendPath&); diff --git a/src/live_effects/lpe-patternalongpath.cpp b/src/live_effects/lpe-patternalongpath.cpp index f90ac2b70..0785da235 100644 --- a/src/live_effects/lpe-patternalongpath.cpp +++ b/src/live_effects/lpe-patternalongpath.cpp @@ -96,7 +96,7 @@ LPEPatternAlongPath::LPEPatternAlongPath(LivePathEffectObject *lpeobject) : prop_scale.param_set_increments(0.01, 0.10); _provides_knotholder_entities = true; - _prop_scale_store = prop_scale; + } LPEPatternAlongPath::~LPEPatternAlongPath() @@ -112,9 +112,6 @@ LPEPatternAlongPath::doBeforeEffect (SPLPEItem const* lpeitem) if (bbox) { original_height = (*bbox)[Geom::Y].max() - (*bbox)[Geom::Y].min(); } - if(_prop_scale_store != prop_scale) { - prop_scale.param_set_value(_prop_scale_store); - } } Geom::Piecewise > @@ -217,9 +214,9 @@ LPEPatternAlongPath::doEffect_pwd2 (Geom::Piecewise > con x*=scaling; } if ( scale_y_rel.get_value() ) { - y*=(scaling*_prop_scale_store); + y*=(scaling*prop_scale); } else { - if (_prop_scale_store != 1.0) y *= _prop_scale_store; + if (prop_scale != 1.0) y *= prop_scale; } x += toffset; @@ -257,10 +254,12 @@ LPEPatternAlongPath::transform_multiply(Geom::Affine const& postmul, bool set) Inkscape::Preferences *prefs = Inkscape::Preferences::get(); bool transform_stroke = prefs ? prefs->getBool("/options/transform/stroke", true) : true; if (transform_stroke && !scale_y_rel) { - prop_scale.param_set_value(_prop_scale_store * ((postmul.expansionX() + postmul.expansionY()) / 2)); - } + prop_scale.param_set_value(prop_scale * ((postmul.expansionX() + postmul.expansionY()) / 2)); + prop_scale.write_to_SVG(); + } if (postmul.isTranslation()) { pattern.param_transform_multiply(postmul, set); + pattern.write_to_SVG(); } sp_lpe_item_update_patheffect (sp_lpe_item, false, true); } @@ -303,9 +302,9 @@ KnotHolderEntityWidthPatternAlongPath::knot_set(Geom::Point const &p, Geom::Poin Geom::Point knot_pos = this->knot->pos * item->i2dt_affine().inverse(); Geom::Coord nearest_to_ray = ray.nearestTime(knot_pos); if(nearest_to_ray == 0){ - lpe->_prop_scale_store = -Geom::distance(s , ptA)/(lpe->original_height/2.0); + lpe->prop_scale.param_set_value(-Geom::distance(s , ptA)/(lpe->original_height/2.0)); } else { - lpe->_prop_scale_store = Geom::distance(s , ptA)/(lpe->original_height/2.0); + lpe->prop_scale.param_set_value(Geom::distance(s , ptA)/(lpe->original_height/2.0)); } } @@ -329,7 +328,7 @@ KnotHolderEntityWidthPatternAlongPath::knot_get() const ray.setPoints(ptA, (*cubic)[1]); } ray.setAngle(ray.angle() + Geom::rad_from_deg(90)); - Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->_prop_scale_store) + ptA; + Geom::Point result_point = Geom::Point::polar(ray.angle(), (lpe->original_height/2.0) * lpe->prop_scale) + ptA; pap_helper_path.clear(); Geom::Path hp(result_point); diff --git a/src/live_effects/lpe-patternalongpath.h b/src/live_effects/lpe-patternalongpath.h index eedf4c172..3d7fc02bc 100644 --- a/src/live_effects/lpe-patternalongpath.h +++ b/src/live_effects/lpe-patternalongpath.h @@ -61,7 +61,6 @@ private: BoolParam prop_units; BoolParam vertical_pattern; ScalarParam fuse_tolerance; - double _prop_scale_store; void on_pattern_pasted(); LPEPatternAlongPath(const LPEPatternAlongPath&); diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index 7382c37ea..e42336113 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -212,19 +212,10 @@ static void spdc_paste_curve_as_freehand_shape(Geom::PathVector const &newpath, Effect::createAndApply(PATTERN_ALONG_PATH, dc->desktop->doc(), item); Effect* lpe = SP_LPE_ITEM(item)->getCurrentLPE(); static_cast(lpe)->pattern.set_new_value(newpath,true); - - // write pattern along path parameters: - lpe->getRepr()->setAttribute("copytype", "single_stretched"); - lpe->getRepr()->setAttribute("fuse_tolerance", "0"); - lpe->getRepr()->setAttribute("is_visible", "true"); - lpe->getRepr()->setAttribute("normal_offset", "0"); - lpe->getRepr()->setAttribute("prop_scale", "1"); - lpe->getRepr()->setAttribute("prop_units", "false"); - lpe->getRepr()->setAttribute("scale_y_rel", "false"); - lpe->getRepr()->setAttribute("spacing", "0"); - lpe->getRepr()->setAttribute("tang_offset", "0"); - lpe->getRepr()->setAttribute("vertical_pattern", "false"); - + double scale_doc = 1 / dc->desktop->doc()->getDocumentScale()[0]; + Inkscape::SVGOStringStream os; + os << scale_doc; + lpe->getRepr()->setAttribute("prop_scale", os.str().c_str()); } static void spdc_apply_powerstroke_shape(const std::vector & points, FreehandBase *dc, SPItem *item) @@ -341,7 +332,7 @@ static void spdc_check_for_and_apply_waiting_LPE(FreehandBase *dc, SPItem *item, // "triangle in" std::vector points(1); points[0] = Geom::Point(0., swidth/2); - points[0] *= i2anc_affine(static_cast(item->parent), NULL).inverse(); + //points[0] *= i2anc_affine(static_cast(item->parent), NULL).inverse(); spdc_apply_powerstroke_shape(points, dc, item); shape_applied = true; @@ -353,7 +344,7 @@ static void spdc_check_for_and_apply_waiting_LPE(FreehandBase *dc, SPItem *item, guint curve_length = curve->get_segment_count(); std::vector points(1); points[0] = Geom::Point(0, swidth/2); - points[0] *= i2anc_affine(static_cast(item->parent), NULL).inverse(); + //points[0] *= i2anc_affine(static_cast(item->parent), NULL).inverse(); points[0][Geom::X] = (double)curve_length; spdc_apply_powerstroke_shape(points, dc, item); @@ -791,16 +782,26 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) if (!dc->white_item) { // Attach repr + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + shapeType shape_selected = (shapeType)prefs->getInt(tool_name(dc) + "/shape", 0); SPItem *item = SP_ITEM(desktop->currentLayer()->appendChildRepr(repr)); - - spdc_check_for_and_apply_waiting_LPE(dc, item, c); - if(previous_shape_type != BEND_CLIPBOARD){ - dc->selection->set(repr); + //Bend needs the transforms applied after, Other effects best before + if((previous_shape_type == BEND_CLIPBOARD && shape_selected == LAST_APPLIED) || + shape_selected == BEND_CLIPBOARD) + { + spdc_check_for_and_apply_waiting_LPE(dc, item, c); + previous_shape_type == BEND_CLIPBOARD; } Inkscape::GC::release(repr); item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); item->updateRepr(); item->doWriteTransform(item->getRepr(), item->transform, NULL, true); + if((previous_shape_type != BEND_CLIPBOARD || shape_selected != LAST_APPLIED) && + shape_selected != BEND_CLIPBOARD) + { + spdc_check_for_and_apply_waiting_LPE(dc, item, c); + dc->selection->set(repr); + } if(previous_shape_type == BEND_CLIPBOARD){ repr->parent()->removeChild(repr); } -- cgit v1.2.3 From c4bd2a99c8d32c8051a2a36aa5ff4594cacdc195 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sun, 11 Sep 2016 12:57:01 +0200 Subject: Fix compiler warning (bzr r15112) --- src/ui/tools/freehand-base.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/tools/freehand-base.cpp b/src/ui/tools/freehand-base.cpp index e42336113..067035b97 100644 --- a/src/ui/tools/freehand-base.cpp +++ b/src/ui/tools/freehand-base.cpp @@ -790,7 +790,7 @@ static void spdc_flush_white(FreehandBase *dc, SPCurve *gc) shape_selected == BEND_CLIPBOARD) { spdc_check_for_and_apply_waiting_LPE(dc, item, c); - previous_shape_type == BEND_CLIPBOARD; + previous_shape_type = BEND_CLIPBOARD; } Inkscape::GC::release(repr); item->transform = SP_ITEM(desktop->currentLayer())->i2doc_affine().inverse(); -- cgit v1.2.3 From 6dfb9fc73995304495bb3c6954337a9c092dcf61 Mon Sep 17 00:00:00 2001 From: Eduard Braun Date: Sun, 11 Sep 2016 19:45:53 +0200 Subject: cmake: fix "make install" to actually produce a runnable distribution on Windows (bzr r15113) --- CMakeScripts/Install.cmake | 84 +++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 46 deletions(-) diff --git a/CMakeScripts/Install.cmake b/CMakeScripts/Install.cmake index ff6784fa7..f20979742 100644 --- a/CMakeScripts/Install.cmake +++ b/CMakeScripts/Install.cmake @@ -1,4 +1,4 @@ -if(UNIX) +if(UNIX) #The install directive for the binaries and libraries are found in src/CMakeList.txt install(FILES ${CMAKE_BINARY_DIR}/inkscape.desktop @@ -11,7 +11,7 @@ if(WIN32) ${EXECUTABLE_OUTPUT_PATH}/inkview.exe DESTINATION ${CMAKE_INSTALL_PREFIX} ) - + install(PROGRAMS ${EXECUTABLE_OUTPUT_PATH}/inkscape_com.exe DESTINATION ${CMAKE_INSTALL_PREFIX} @@ -22,8 +22,7 @@ if(WIN32) ${LIBRARY_OUTPUT_PATH}/libinkscape_base.dll DESTINATION ${CMAKE_INSTALL_PREFIX} ) - - # devlibs and mingw dlls + install(FILES AUTHORS COPYING @@ -34,7 +33,9 @@ if(WIN32) GPL3.txt LGPL2.1.txt DESTINATION ${CMAKE_INSTALL_PREFIX}) - + + # devlibs and mingw dlls + # There are differences in the devlibs for 64-Bit and 32-Bit build environments. if(HAVE_MINGW64) install(FILES @@ -49,9 +50,11 @@ if(WIN32) ${DEVLIBS_BIN}/libatk-1.0-0.dll ${DEVLIBS_BIN}/libatkmm-1.6-1.dll ${DEVLIBS_BIN}/libcairo-2.dll + ${DEVLIBS_BIN}/libcairo-gobject-2.dll ${DEVLIBS_BIN}/libcairomm-1.0-1.dll ${DEVLIBS_BIN}/libcdr-0.1.dll ${DEVLIBS_BIN}/libcurl-4.dll + ${DEVLIBS_BIN}/libepoxy-0.dll ${DEVLIBS_BIN}/libexif-12.dll ${DEVLIBS_BIN}/libexpat-1.dll ${DEVLIBS_BIN}/libexslt-0.dll @@ -59,9 +62,10 @@ if(WIN32) ${DEVLIBS_BIN}/libfontconfig-1.dll ${DEVLIBS_BIN}/libfreetype-6.dll ${DEVLIBS_BIN}/libgc-1.dll - ${DEVLIBS_BIN}/libgdk-win32-2.0-0.dll + ${DEVLIBS_BIN}/libgdk-3-0.dll ${DEVLIBS_BIN}/libgdk_pixbuf-2.0-0.dll - ${DEVLIBS_BIN}/libgdkmm-2.4-1.dll + ${DEVLIBS_BIN}/libgdkmm-3.0-1.dll + ${DEVLIBS_BIN}/libgdl-3-5.dll ${DEVLIBS_BIN}/libgio-2.0-0.dll ${DEVLIBS_BIN}/libgiomm-2.4-1.dll ${DEVLIBS_BIN}/libglib-2.0-0.dll @@ -71,8 +75,8 @@ if(WIN32) ${DEVLIBS_BIN}/libgsl-19.dll ${DEVLIBS_BIN}/libgslcblas-0.dll ${DEVLIBS_BIN}/libgthread-2.0-0.dll - ${DEVLIBS_BIN}/libgtk-win32-2.0-0.dll - ${DEVLIBS_BIN}/libgtkmm-2.4-1.dll + ${DEVLIBS_BIN}/libgtk-3-0.dll + ${DEVLIBS_BIN}/libgtkmm-3.0-1.dll ${DEVLIBS_BIN}/libharfbuzz-0.dll ${DEVLIBS_BIN}/libiconv-2.dll ${DEVLIBS_BIN}/libintl-8.dll @@ -103,7 +107,7 @@ if(WIN32) ${MINGW_BIN}/libstdc++-6.dll ${MINGW_BIN}/libwinpthread-1.dll ${MINGW_BIN}/libgcc_s_seh-1.dll - ${MINGW_BIN}/libgomp-1.dll + ${MINGW_BIN}/libgomp-1.dll DESTINATION ${CMAKE_INSTALL_PREFIX}) else() install(FILES @@ -170,7 +174,7 @@ if(WIN32) ${DEVLIBS_BIN}/pthreadGC2.dll ${DEVLIBS_BIN}/zlib1.dll ${MINGW_BIN}/mingwm10.dll - ${MINGW_BIN}/libgomp-1.dll + ${MINGW_BIN}/libgomp-1.dll DESTINATION ${CMAKE_INSTALL_PREFIX}) endif() @@ -188,43 +192,46 @@ if(WIN32) plugins share DESTINATION ${CMAKE_INSTALL_PREFIX} - PATTERN Adwaita EXCLUDE # NOTE: The theme is not used on Windows. PATTERN hicolor/index.theme EXCLUDE # NOTE: Empty index.theme in hicolor icon theme causes SIGSEGV. PATTERN CMakeLists.txt EXCLUDE PATTERN *.am EXCLUDE) - + + install(DIRECTORY ${DEVLIBS_PATH}/share/icons/Adwaita + DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons) + install(DIRECTORY ${DEVLIBS_PATH}/share/themes DESTINATION ${CMAKE_INSTALL_PREFIX}/share) - + install(DIRECTORY ${DEVLIBS_PATH}/share/locale - DESTINATION ${CMAKE_INSTALL_PREFIX}/share) - + DESTINATION ${CMAKE_INSTALL_PREFIX}/share + PATTERN "*gtk20.mo" EXCLUDE) + install(DIRECTORY ${DEVLIBS_PATH}/share/poppler DESTINATION ${CMAKE_INSTALL_PREFIX}/share) - + install(DIRECTORY ${DEVLIBS_PATH}/etc/fonts DESTINATION ${CMAKE_INSTALL_PREFIX}/etc) - - install(DIRECTORY ${DEVLIBS_PATH}/etc/gtk-2.0 - DESTINATION ${CMAKE_INSTALL_PREFIX}/etc) - - # GTK 2.0 - install(DIRECTORY ${DEVLIBS_LIB}/gtk-2.0 + + # GTK 3.0 + install(DIRECTORY ${DEVLIBS_LIB}/gtk-3.0 DESTINATION ${CMAKE_INSTALL_PREFIX}/lib FILES_MATCHING PATTERN "*.dll" PATTERN "*.cache") + install(DIRECTORY ${DEVLIBS_PATH}/etc/gtk-3.0 + DESTINATION ${CMAKE_INSTALL_PREFIX}/etc) + install(DIRECTORY ${DEVLIBS_LIB}/gdk-pixbuf-2.0 DESTINATION ${CMAKE_INSTALL_PREFIX}/lib FILES_MATCHING PATTERN "*.dll" PATTERN "*.cache") - + # Aspell dictionaries install(DIRECTORY ${DEVLIBS_LIB}/aspell-0.60 DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) - + # Necessary to run extensions on windows if it is not in the path if (HAVE_MINGW64) install(FILES @@ -237,31 +244,16 @@ if(WIN32) ${DEVLIBS_BIN}/gspawn-win32-helper-console.exe DESTINATION ${CMAKE_INSTALL_PREFIX}) endif() - + # Perl install(FILES ${DEVLIBS_PATH}/perl/bin/perl58.dll DESTINATION ${CMAKE_INSTALL_PREFIX}) # Python - install(FILES - ${DEVLIBS_PATH}/python/python.exe - ${DEVLIBS_PATH}/python/pythonw.exe - DESTINATION ${CMAKE_INSTALL_PREFIX}/python) - - if(HAVE_MINGW64) - install(FILES - ${DEVLIBS_PATH}/python/python27.dll - DESTINATION ${CMAKE_INSTALL_PREFIX}/python) - else() - install(FILES - ${DEVLIBS_PATH}/python/python26.dll - DESTINATION ${CMAKE_INSTALL_PREFIX}/python) - endif() - - install(DIRECTORY ${DEVLIBS_PATH}/python/lib - DESTINATION ${CMAKE_INSTALL_PREFIX}/python) - - install(DIRECTORY ${DEVLIBS_PATH}/python/dlls - DESTINATION ${CMAKE_INSTALL_PREFIX}/python) + install(DIRECTORY ${DEVLIBS_PATH}/python + DESTINATION ${CMAKE_INSTALL_PREFIX} + PATTERN "python/include" EXCLUDE + PATTERN "python/libs" EXCLUDE + PATTERN "*.pyc" EXCLUDE) endif() \ No newline at end of file -- cgit v1.2.3 From 812258dc01faa6b26534a2aa5d7536b4cb892c01 Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Mon, 12 Sep 2016 12:28:31 +0200 Subject: Fixed out of range pointers Fixed bugs: - https://launchpad.net/bugs/1620253 (bzr r15114) --- src/sp-item.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/sp-item.cpp b/src/sp-item.cpp index 0ba74f9fd..e03b715c0 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -317,8 +317,11 @@ void SPItem::lowerOne() { auto next_lower = find_last_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item); if (next_lower != parent->children.iterator_to(*this)) { - next_lower--; - Inkscape::XML::Node *ref = next_lower->getRepr(); + Inkscape::XML::Node *ref = nullptr; + if (next_lower != parent->children.begin()) { + next_lower--; + ref = next_lower->getRepr(); + } getRepr()->parent()->changeOrder(getRepr(), ref); } } @@ -326,8 +329,11 @@ void SPItem::lowerOne() { void SPItem::lowerToBottom() { auto bottom = std::find_if(parent->children.begin(), parent->children.iterator_to(*this), &is_item); if (bottom != parent->children.iterator_to(*this)) { - bottom--; - Inkscape::XML::Node *ref = bottom->getRepr() ; + Inkscape::XML::Node *ref = nullptr; + if (bottom != parent->children.begin()) { + bottom--; + ref = bottom->getRepr(); + } parent->getRepr()->changeOrder(getRepr(), ref); } } -- cgit v1.2.3 From e6c42440be65e6fba181babc94ecde6b68b2119d Mon Sep 17 00:00:00 2001 From: firashanife Date: Tue, 13 Sep 2016 17:34:43 +0200 Subject: [Bug #1574561] Italian translation update. Fixed bugs: - https://launchpad.net/bugs/1574561 (bzr r15115) --- po/it.po | 2671 +++++++++++++++++++------------------------------------------- 1 file changed, 812 insertions(+), 1859 deletions(-) diff --git a/po/it.po b/po/it.po index 4b0abbf46..1f060fc47 100644 --- a/po/it.po +++ b/po/it.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Inkscape 0.92\n" "Report-Msgid-Bugs-To: inkscape-devel@lists.sourceforge.net\n" -"POT-Creation-Date: 2016-07-17 21:43+0200\n" +"POT-Creation-Date: 2016-06-08 09:06+0200\n" "PO-Revision-Date: 2016-06-10 15:31+0100\n" "Last-Translator: Firas Hanife \n" "Language-Team: \n" @@ -700,8 +700,7 @@ msgstr "Buco nero" #: ../share/filters/filters.svg.h:279 ../share/filters/filters.svg.h:835 #: ../share/filters/filters.svg.h:839 ../share/filters/filters.svg.h:843 #: ../src/extension/internal/filter/morphology.h:76 -#: ../src/extension/internal/filter/morphology.h:203 -#: ../src/filter-enums.cpp:32 +#: ../src/extension/internal/filter/morphology.h:203 ../src/filter-enums.cpp:32 msgid "Morphology" msgstr "Morfologia" @@ -3385,1037 +3384,1037 @@ msgstr "Tessuto (bitmap)" msgid "Old paint (bitmap)" msgstr "Dipinto antico (bitmap)" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:2 msgctxt "Symbol" -msgid "United States National Park Service Map Symbols" -msgstr "Simboli mappa parchi nazionali Stati Uniti" +msgid "AIGA Symbol Signs" +msgstr "Segni simboli AIGA" +#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:3 ../share/symbols/symbols.h:4 +#: ../share/symbols/symbols.h:281 ../share/symbols/symbols.h:282 msgctxt "Symbol" -msgid "Airport" -msgstr "Aereoporto" +msgid "Telephone" +msgstr "Telefono" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:5 ../share/symbols/symbols.h:6 msgctxt "Symbol" -msgid "Amphitheatre" -msgstr "Anfiteatro" +msgid "Mail" +msgstr "Posta" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:7 ../share/symbols/symbols.h:8 msgctxt "Symbol" -msgid "Bicycle Trail" -msgstr "Pista ciclabile" +msgid "Currency Exchange" +msgstr "Cambiavalute" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:9 ../share/symbols/symbols.h:10 msgctxt "Symbol" -msgid "Boat Launch" -msgstr "Rampa di alaggio barca" +msgid "Currency Exchange - Euro" +msgstr "Cambiavalute - Euro" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:11 ../share/symbols/symbols.h:12 msgctxt "Symbol" -msgid "Boat Tour" -msgstr "Viaggio in barca" +msgid "Cashier" +msgstr "Cassiere" +#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:13 ../share/symbols/symbols.h:14 +#: ../share/symbols/symbols.h:213 ../share/symbols/symbols.h:214 msgctxt "Symbol" -msgid "Bus Stop" -msgstr "Fermata dell'autobus" +msgid "First Aid" +msgstr "Primo soccorso" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:15 ../share/symbols/symbols.h:16 msgctxt "Symbol" -msgid "Campfire" -msgstr "Fuoco da campo" +msgid "Lost and Found" +msgstr "Oggetti smarriti" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:17 ../share/symbols/symbols.h:18 msgctxt "Symbol" -msgid "Campground" -msgstr "Campeggio" +msgid "Coat Check" +msgstr "Guardaroba" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:19 ../share/symbols/symbols.h:20 msgctxt "Symbol" -msgid "CanoeAccess" -msgstr "Accesso canoa" +msgid "Baggage Lockers" +msgstr "Armadietti per bagaglio" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:21 ../share/symbols/symbols.h:22 msgctxt "Symbol" -msgid "Crosscountry Ski Trail" -msgstr "Pista di sci di fondo" +msgid "Escalator" +msgstr "Scala mobile" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:23 ../share/symbols/symbols.h:24 msgctxt "Symbol" -msgid "Downhill Skiing" -msgstr "Discesa libera" +msgid "Escalator Down" +msgstr "Scala mobile giù" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:25 ../share/symbols/symbols.h:26 msgctxt "Symbol" -msgid "Drinking Water" -msgstr "Acqua potabile" +msgid "Escalator Up" +msgstr "Scala mobile su" -#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:27 ../share/symbols/symbols.h:28 -#: ../share/symbols/symbols.h:172 ../share/symbols/symbols.h:173 msgctxt "Symbol" -msgid "First Aid" -msgstr "Primo soccorso" +msgid "Stairs" +msgstr "Scale" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:29 ../share/symbols/symbols.h:30 msgctxt "Symbol" -msgid "Fishing" -msgstr "Pesca" +msgid "Stairs Down" +msgstr "Scale giù" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:31 ../share/symbols/symbols.h:32 msgctxt "Symbol" -msgid "Food Service" -msgstr "Servizio di ristorazione" +msgid "Stairs Up" +msgstr "Scale su" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:33 ../share/symbols/symbols.h:34 msgctxt "Symbol" -msgid "Four Wheel Drive Road" -msgstr "Strada per veicoli a quattro ruote motrici" +msgid "Elevator" +msgstr "Ascensore" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:35 ../share/symbols/symbols.h:36 msgctxt "Symbol" -msgid "Gas Station" -msgstr "Distributore di benzina" +msgid "Toilets - Men" +msgstr "Servizi - Uomo" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:37 ../share/symbols/symbols.h:38 msgctxt "Symbol" -msgid "Golfing" -msgstr "Golf" +msgid "Toilets - Women" +msgstr "Servizi - Donna" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:39 ../share/symbols/symbols.h:40 msgctxt "Symbol" -msgid "Horseback Riding" -msgstr "Equitazione" +msgid "Toilets" +msgstr "Servizi" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:41 ../share/symbols/symbols.h:42 msgctxt "Symbol" -msgid "Hospital" -msgstr "Ospedale" +msgid "Nursery" +msgstr "Asilo nido" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:43 ../share/symbols/symbols.h:44 msgctxt "Symbol" -msgid "Ice Skating" -msgstr "Pattinaggio sul ghiaccio" +msgid "Drinking Fountain" +msgstr "Fontanella" -#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:45 ../share/symbols/symbols.h:46 -#: ../share/symbols/symbols.h:206 ../share/symbols/symbols.h:207 msgctxt "Symbol" -msgid "Information" -msgstr "Informazioni" +msgid "Waiting Room" +msgstr "Sala di attesa" +#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:47 ../share/symbols/symbols.h:48 +#: ../share/symbols/symbols.h:231 ../share/symbols/symbols.h:232 msgctxt "Symbol" -msgid "Litter Receptacle" -msgstr "Cestino dei rifiuti" +msgid "Information" +msgstr "Informazioni" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:49 ../share/symbols/symbols.h:50 msgctxt "Symbol" -msgid "Lodging" -msgstr "Alloggio" +msgid "Hotel Information" +msgstr "Informazioni hotel" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:51 ../share/symbols/symbols.h:52 msgctxt "Symbol" -msgid "Marina" -msgstr "Marina" +msgid "Air Transportation" +msgstr "Trasporto aereo" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:53 ../share/symbols/symbols.h:54 msgctxt "Symbol" -msgid "Motorbike Trail" -msgstr "Sentiero motocicli" +msgid "Heliport" +msgstr "Eliporto" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:55 ../share/symbols/symbols.h:56 msgctxt "Symbol" -msgid "Radiator Water" -msgstr "Acqua radiatore" +msgid "Taxi" +msgstr "Taxi" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:57 ../share/symbols/symbols.h:58 msgctxt "Symbol" -msgid "Recycling" -msgstr "Riciclaggio" +msgid "Bus" +msgstr "Autobus" -#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:59 ../share/symbols/symbols.h:60 -#: ../share/symbols/symbols.h:258 ../share/symbols/symbols.h:259 msgctxt "Symbol" -msgid "Parking" -msgstr "Parcheggio" +msgid "Ground Transportation" +msgstr "Trasporto via terra" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:61 ../share/symbols/symbols.h:62 msgctxt "Symbol" -msgid "Pets On Leash" -msgstr "Animali al guinzaglio" +msgid "Rail Transportation" +msgstr "Trasporto ferroviario" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:63 ../share/symbols/symbols.h:64 msgctxt "Symbol" -msgid "Picnic Area" -msgstr "Area picnic" +msgid "Water Transportation" +msgstr "Trasporto via mare" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:65 ../share/symbols/symbols.h:66 msgctxt "Symbol" -msgid "Post Office" -msgstr "Ufficio postale" +msgid "Car Rental" +msgstr "Autonoleggio" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:67 ../share/symbols/symbols.h:68 msgctxt "Symbol" -msgid "Ranger Station" -msgstr "Stazione dei ranger" +msgid "Restaurant" +msgstr "Ristorante" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:69 ../share/symbols/symbols.h:70 msgctxt "Symbol" -msgid "RV Campground" -msgstr "Campeggio camper" +msgid "Coffeeshop" +msgstr "Caffè" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:71 ../share/symbols/symbols.h:72 msgctxt "Symbol" -msgid "Restrooms" -msgstr "Servizi" +msgid "Bar" +msgstr "Bar" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:73 ../share/symbols/symbols.h:74 msgctxt "Symbol" -msgid "Sailing" -msgstr "Vela" +msgid "Shops" +msgstr "Negozi" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:75 ../share/symbols/symbols.h:76 msgctxt "Symbol" -msgid "Sanitary Disposal Station" -msgstr "Stazione di smaltimento sanitario" +msgid "Barber Shop - Beauty Salon" +msgstr "Barbiere - Salone di bellezza" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:77 ../share/symbols/symbols.h:78 msgctxt "Symbol" -msgid "Scuba Diving" -msgstr "Immersione subacquea" +msgid "Barber Shop" +msgstr "Barbiere" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:79 ../share/symbols/symbols.h:80 msgctxt "Symbol" -msgid "Self Guided Trail" -msgstr "Sentiero guidato" +msgid "Beauty Salon" +msgstr "Salone di bellezza" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:81 ../share/symbols/symbols.h:82 msgctxt "Symbol" -msgid "Shelter" -msgstr "Rifugio" +msgid "Ticket Purchase" +msgstr "Acquisto biglietti" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:83 ../share/symbols/symbols.h:84 msgctxt "Symbol" -msgid "Showers" -msgstr "Docce" +msgid "Baggage Check In" +msgstr "Check in bagagli" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:85 ../share/symbols/symbols.h:86 msgctxt "Symbol" -msgid "Sledding" -msgstr "Slitta" +msgid "Baggage Claim" +msgstr "Ritiro bagagli" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:87 ../share/symbols/symbols.h:88 msgctxt "Symbol" -msgid "SnowmobileTrail" -msgstr "Sentiero motoslitta" +msgid "Customs" +msgstr "Dogana" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:89 ../share/symbols/symbols.h:90 msgctxt "Symbol" -msgid "Stable" -msgstr "Stalla" +msgid "Immigration" +msgstr "Immigrazione" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:91 ../share/symbols/symbols.h:92 msgctxt "Symbol" -msgid "Store" -msgstr "Negozio" +msgid "Departing Flights" +msgstr "Voli in partenza" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:93 ../share/symbols/symbols.h:94 msgctxt "Symbol" -msgid "Swimming" -msgstr "Nuoto" +msgid "Arriving Flights" +msgstr "Voli in arrivo" -#. Symbols: ./MapSymbolsNPS.svg #. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:95 ../share/symbols/symbols.h:96 -#: ../share/symbols/symbols.h:162 ../share/symbols/symbols.h:163 msgctxt "Symbol" -msgid "Telephone" -msgstr "Telefono" +msgid "Smoking" +msgstr "Fumare" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:97 ../share/symbols/symbols.h:98 msgctxt "Symbol" -msgid "Emergency Telephone" -msgstr "Telefono di emergenza" +msgid "No Smoking" +msgstr "Vietato fumare" +#. Symbols: ./AigaSymbols.svg #. Symbols: ./MapSymbolsNPS.svg #: ../share/symbols/symbols.h:99 ../share/symbols/symbols.h:100 +#: ../share/symbols/symbols.h:245 ../share/symbols/symbols.h:246 msgctxt "Symbol" -msgid "Trailhead" -msgstr "Sentiero" +msgid "Parking" +msgstr "Parcheggio" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:101 ../share/symbols/symbols.h:102 msgctxt "Symbol" -msgid "Wheelchair Accessible" -msgstr "Accessibile alle sedie a rotelle" +msgid "No Parking" +msgstr "Divieto di parcheggio" -#. Symbols: ./MapSymbolsNPS.svg +#. Symbols: ./AigaSymbols.svg #: ../share/symbols/symbols.h:103 ../share/symbols/symbols.h:104 msgctxt "Symbol" -msgid "Wind Surfing" -msgstr "Windsurf" +msgid "No Dogs" +msgstr "Divieto per i cani" -#. Symbols: ./MapSymbolsNPS.svg -#: ../share/symbols/symbols.h:105 +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:105 ../share/symbols/symbols.h:106 msgctxt "Symbol" -msgid "Blank" -msgstr "Bianco" +msgid "No Entry" +msgstr "Divieto di ingresso" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:107 ../share/symbols/symbols.h:108 +msgctxt "Symbol" +msgid "Exit" +msgstr "Uscita" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:109 ../share/symbols/symbols.h:110 +msgctxt "Symbol" +msgid "Fire Extinguisher" +msgstr "Estintore" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:111 ../share/symbols/symbols.h:112 +msgctxt "Symbol" +msgid "Right Arrow" +msgstr "Freccia destra" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:113 ../share/symbols/symbols.h:114 +msgctxt "Symbol" +msgid "Forward and Right Arrow" +msgstr "Freccia avanti e destra" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:115 ../share/symbols/symbols.h:116 +msgctxt "Symbol" +msgid "Up Arrow" +msgstr "Freccia su" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:117 ../share/symbols/symbols.h:118 +msgctxt "Symbol" +msgid "Forward and Left Arrow" +msgstr "Freccia avanti e sinistra" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:119 ../share/symbols/symbols.h:120 +msgctxt "Symbol" +msgid "Left Arrow" +msgstr "Freccia sinistra" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:121 ../share/symbols/symbols.h:122 +msgctxt "Symbol" +msgid "Left and Down Arrow" +msgstr "Freccia sinistra e giù" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:123 ../share/symbols/symbols.h:124 +msgctxt "Symbol" +msgid "Down Arrow" +msgstr "Freccia giù" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:125 ../share/symbols/symbols.h:126 +msgctxt "Symbol" +msgid "Right and Down Arrow" +msgstr "Freccia destra e giù" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:127 ../share/symbols/symbols.h:128 +msgctxt "Symbol" +msgid "NPS Wheelchair Accessible - 1996" +msgstr "NPS Accessibile alle sedie a rotelle - 1996" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:129 ../share/symbols/symbols.h:130 +msgctxt "Symbol" +msgid "NPS Wheelchair Accessible" +msgstr "NPS Accessibile alle sedie a rotelle" + +#. Symbols: ./AigaSymbols.svg +#: ../share/symbols/symbols.h:131 ../share/symbols/symbols.h:132 +msgctxt "Symbol" +msgid "New Wheelchair Accessible" +msgstr "Nuovo Accessibile alle sedie a rotelle" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:133 +msgctxt "Symbol" +msgid "Word Balloons" +msgstr "Nuvolette" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:134 +msgctxt "Symbol" +msgid "Thought Balloon" +msgstr "Nuvoletta di pensiero" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:135 +msgctxt "Symbol" +msgid "Dream Speaking" +msgstr "Discorso sognante" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:136 +msgctxt "Symbol" +msgid "Rounded Balloon" +msgstr "Nuvoletta arrotondata" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:137 +msgctxt "Symbol" +msgid "Squared Balloon" +msgstr "Nuvoletta squadrata" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:138 +msgctxt "Symbol" +msgid "Over the Phone" +msgstr "Al telefono" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:139 +msgctxt "Symbol" +msgid "Hip Balloon" +msgstr "Nuvoletta sfiancata" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:140 +msgctxt "Symbol" +msgid "Circle Balloon" +msgstr "Nuvoletta rotonda" + +#. Symbols: ./BalloonSymbols.svg +#: ../share/symbols/symbols.h:141 +msgctxt "Symbol" +msgid "Exclaim Balloon" +msgstr "Nuvoletta di esclamazione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:106 +#: ../share/symbols/symbols.h:142 msgctxt "Symbol" msgid "Flow Chart Shapes" msgstr "Diagramma di flusso" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:107 +#: ../share/symbols/symbols.h:143 msgctxt "Symbol" msgid "Process" msgstr "Processo" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:108 +#: ../share/symbols/symbols.h:144 msgctxt "Symbol" msgid "Input/Output" msgstr "Input/Output" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:109 +#: ../share/symbols/symbols.h:145 msgctxt "Symbol" msgid "Document" msgstr "Documento" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:110 +#: ../share/symbols/symbols.h:146 msgctxt "Symbol" msgid "Manual Operation" msgstr "Operazione manuale" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:111 +#: ../share/symbols/symbols.h:147 msgctxt "Symbol" msgid "Preparation" msgstr "Preparazione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:112 +#: ../share/symbols/symbols.h:148 msgctxt "Symbol" msgid "Merge" msgstr "Fusione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:113 +#: ../share/symbols/symbols.h:149 msgctxt "Symbol" msgid "Decision" msgstr "Decisione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:114 +#: ../share/symbols/symbols.h:150 msgctxt "Symbol" msgid "Magnetic Tape" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:115 +#: ../share/symbols/symbols.h:151 #, fuzzy msgctxt "Symbol" msgid "Display" msgstr "Modalità visualizzazione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:116 +#: ../share/symbols/symbols.h:152 msgctxt "Symbol" msgid "Auxiliary Operation" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:117 +#: ../share/symbols/symbols.h:153 msgctxt "Symbol" msgid "Manual Input" msgstr "Input manuale" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:118 +#: ../share/symbols/symbols.h:154 msgctxt "Symbol" msgid "Extract" msgstr "Estrai" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:119 +#: ../share/symbols/symbols.h:155 msgctxt "Symbol" msgid "Terminal/Interrupt" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:120 +#: ../share/symbols/symbols.h:156 msgctxt "Symbol" msgid "Punched Card" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:121 +#: ../share/symbols/symbols.h:157 #, fuzzy msgctxt "Symbol" msgid "Punch Tape" msgstr "Buca" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:122 +#: ../share/symbols/symbols.h:158 msgctxt "Symbol" msgid "Online Storage" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:123 +#: ../share/symbols/symbols.h:159 msgctxt "Symbol" msgid "Keying" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:124 +#: ../share/symbols/symbols.h:160 msgctxt "Symbol" msgid "Sort" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:125 +#: ../share/symbols/symbols.h:161 msgctxt "Symbol" msgid "Connector" msgstr "Connettore" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:126 +#: ../share/symbols/symbols.h:162 #, fuzzy msgctxt "Symbol" msgid "Off-Page Connector" msgstr "Connettore" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:127 +#: ../share/symbols/symbols.h:163 msgctxt "Symbol" msgid "Transmittal Tape" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:128 +#: ../share/symbols/symbols.h:164 msgctxt "Symbol" msgid "Communication Link" msgstr "Collegamento di comunicazione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:129 +#: ../share/symbols/symbols.h:165 #, fuzzy msgctxt "Symbol" msgid "Collate" msgstr "Modula" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:130 +#: ../share/symbols/symbols.h:166 msgctxt "Symbol" msgid "Comment/Annotation" msgstr "Commento/Annotazione" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:131 +#: ../share/symbols/symbols.h:167 msgctxt "Symbol" msgid "Core" msgstr "Nucleo" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:132 +#: ../share/symbols/symbols.h:168 msgctxt "Symbol" msgid "Predefined Process" msgstr "Processo predefinito" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:133 +#: ../share/symbols/symbols.h:169 msgctxt "Symbol" msgid "Magnetic Disk (Database)" msgstr "Disco magnetico (Database)" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:134 +#: ../share/symbols/symbols.h:170 msgctxt "Symbol" msgid "Magnetic Drum (Direct Access)" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:135 +#: ../share/symbols/symbols.h:171 msgctxt "Symbol" msgid "Offline Storage" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:136 +#: ../share/symbols/symbols.h:172 msgctxt "Symbol" msgid "Logical Or" msgstr "Or logico" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:137 +#: ../share/symbols/symbols.h:173 msgctxt "Symbol" msgid "Logical And" msgstr "And logico" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:138 +#: ../share/symbols/symbols.h:174 msgctxt "Symbol" msgid "Delay" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:139 +#: ../share/symbols/symbols.h:175 msgctxt "Symbol" msgid "Loop Limit Begin" msgstr "" #. Symbols: ./FlowSymbols.svg -#: ../share/symbols/symbols.h:140 +#: ../share/symbols/symbols.h:176 msgctxt "Symbol" msgid "Loop Limit End" msgstr "" -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:141 -msgctxt "Symbol" -msgid "Word Balloons" -msgstr "Nuvolette" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:142 -msgctxt "Symbol" -msgid "Thought Balloon" -msgstr "Nuvoletta di pensiero" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:143 -msgctxt "Symbol" -msgid "Dream Speaking" -msgstr "Discorso sognante" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:144 -msgctxt "Symbol" -msgid "Rounded Balloon" -msgstr "Nuvoletta arrotondata" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:145 -msgctxt "Symbol" -msgid "Squared Balloon" -msgstr "Nuvoletta squadrata" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:146 -msgctxt "Symbol" -msgid "Over the Phone" -msgstr "Al telefono" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:147 -msgctxt "Symbol" -msgid "Hip Balloon" -msgstr "Nuvoletta sfiancata" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:148 -msgctxt "Symbol" -msgid "Circle Balloon" -msgstr "Nuvoletta rotonda" - -#. Symbols: ./BalloonSymbols.svg -#: ../share/symbols/symbols.h:149 -msgctxt "Symbol" -msgid "Exclaim Balloon" -msgstr "Nuvoletta di esclamazione" - #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:150 +#: ../share/symbols/symbols.h:177 msgctxt "Symbol" msgid "Logic Symbols" msgstr "Simboli logici" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:151 +#: ../share/symbols/symbols.h:178 msgctxt "Symbol" msgid "Xnor Gate" msgstr "Xnor Gate" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:152 +#: ../share/symbols/symbols.h:179 msgctxt "Symbol" msgid "Xor Gate" msgstr "Xor Gate" #. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:153 +#: ../share/symbols/symbols.h:180 msgctxt "Symbol" msgid "Nor Gate" msgstr "Nor Gate" -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:154 -msgctxt "Symbol" -msgid "Or Gate" -msgstr "Or Gate" - -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:155 -msgctxt "Symbol" -msgid "Nand Gate" -msgstr "Nand Gate" - -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:156 -msgctxt "Symbol" -msgid "And Gate" -msgstr "And Gate" - -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:157 -msgctxt "Symbol" -msgid "Buffer" -msgstr "Buffer" - -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:158 -msgctxt "Symbol" -msgid "Not Gate" -msgstr "Not Gate" - -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:159 -msgctxt "Symbol" -msgid "Buffer Small" -msgstr "Buffer piccolo" - -#. Symbols: ./LogicSymbols.svg -#: ../share/symbols/symbols.h:160 -msgctxt "Symbol" -msgid "Not Gate Small" -msgstr "Not Gate piccolo" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:161 -msgctxt "Symbol" -msgid "AIGA Symbol Signs" -msgstr "Segni simboli AIGA" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:164 ../share/symbols/symbols.h:165 -msgctxt "Symbol" -msgid "Mail" -msgstr "Posta" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:166 ../share/symbols/symbols.h:167 -msgctxt "Symbol" -msgid "Currency Exchange" -msgstr "Cambiavalute" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:168 ../share/symbols/symbols.h:169 -msgctxt "Symbol" -msgid "Currency Exchange - Euro" -msgstr "Cambiavalute - Euro" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:170 ../share/symbols/symbols.h:171 -msgctxt "Symbol" -msgid "Cashier" -msgstr "Cassiere" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:174 ../share/symbols/symbols.h:175 -msgctxt "Symbol" -msgid "Lost and Found" -msgstr "Oggetti smarriti" - -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:176 ../share/symbols/symbols.h:177 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:181 msgctxt "Symbol" -msgid "Coat Check" -msgstr "Guardaroba" +msgid "Or Gate" +msgstr "Or Gate" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:178 ../share/symbols/symbols.h:179 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:182 msgctxt "Symbol" -msgid "Baggage Lockers" -msgstr "Armadietti per bagaglio" +msgid "Nand Gate" +msgstr "Nand Gate" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:180 ../share/symbols/symbols.h:181 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:183 msgctxt "Symbol" -msgid "Escalator" -msgstr "Scala mobile" +msgid "And Gate" +msgstr "And Gate" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:182 ../share/symbols/symbols.h:183 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:184 msgctxt "Symbol" -msgid "Escalator Down" -msgstr "Scala mobile giù" +msgid "Buffer" +msgstr "Buffer" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:184 ../share/symbols/symbols.h:185 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:185 msgctxt "Symbol" -msgid "Escalator Up" -msgstr "Scala mobile su" +msgid "Not Gate" +msgstr "Not Gate" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:186 ../share/symbols/symbols.h:187 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:186 msgctxt "Symbol" -msgid "Stairs" -msgstr "Scale" +msgid "Buffer Small" +msgstr "Buffer piccolo" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:188 ../share/symbols/symbols.h:189 +#. Symbols: ./LogicSymbols.svg +#: ../share/symbols/symbols.h:187 msgctxt "Symbol" -msgid "Stairs Down" -msgstr "Scale giù" +msgid "Not Gate Small" +msgstr "Not Gate piccolo" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:190 ../share/symbols/symbols.h:191 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:188 msgctxt "Symbol" -msgid "Stairs Up" -msgstr "Scale su" +msgid "United States National Park Service Map Symbols" +msgstr "Simboli mappa parchi nazionali Stati Uniti" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:192 ../share/symbols/symbols.h:193 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:189 ../share/symbols/symbols.h:190 msgctxt "Symbol" -msgid "Elevator" -msgstr "Ascensore" +msgid "Airport" +msgstr "Aereoporto" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:194 ../share/symbols/symbols.h:195 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:191 ../share/symbols/symbols.h:192 msgctxt "Symbol" -msgid "Toilets - Men" -msgstr "Servizi - Uomo" +msgid "Amphitheatre" +msgstr "Anfiteatro" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:196 ../share/symbols/symbols.h:197 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:193 ../share/symbols/symbols.h:194 msgctxt "Symbol" -msgid "Toilets - Women" -msgstr "Servizi - Donna" +msgid "Bicycle Trail" +msgstr "Pista ciclabile" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:198 ../share/symbols/symbols.h:199 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:195 ../share/symbols/symbols.h:196 msgctxt "Symbol" -msgid "Toilets" -msgstr "Servizi" +msgid "Boat Launch" +msgstr "Rampa di alaggio barca" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:200 ../share/symbols/symbols.h:201 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:197 ../share/symbols/symbols.h:198 msgctxt "Symbol" -msgid "Nursery" -msgstr "Asilo nido" +msgid "Boat Tour" +msgstr "Viaggio in barca" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:202 ../share/symbols/symbols.h:203 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:199 ../share/symbols/symbols.h:200 msgctxt "Symbol" -msgid "Drinking Fountain" -msgstr "Fontanella" +msgid "Bus Stop" +msgstr "Fermata dell'autobus" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:204 ../share/symbols/symbols.h:205 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:201 ../share/symbols/symbols.h:202 msgctxt "Symbol" -msgid "Waiting Room" -msgstr "Sala di attesa" +msgid "Campfire" +msgstr "Fuoco da campo" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:208 ../share/symbols/symbols.h:209 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:203 ../share/symbols/symbols.h:204 msgctxt "Symbol" -msgid "Hotel Information" -msgstr "Informazioni hotel" +msgid "Campground" +msgstr "Campeggio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:210 ../share/symbols/symbols.h:211 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:205 ../share/symbols/symbols.h:206 msgctxt "Symbol" -msgid "Air Transportation" -msgstr "Trasporto aereo" +msgid "CanoeAccess" +msgstr "Accesso canoa" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:212 ../share/symbols/symbols.h:213 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:207 ../share/symbols/symbols.h:208 msgctxt "Symbol" -msgid "Heliport" -msgstr "Eliporto" +msgid "Crosscountry Ski Trail" +msgstr "Pista di sci di fondo" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:214 ../share/symbols/symbols.h:215 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:209 ../share/symbols/symbols.h:210 msgctxt "Symbol" -msgid "Taxi" -msgstr "Taxi" +msgid "Downhill Skiing" +msgstr "Discesa libera" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:216 ../share/symbols/symbols.h:217 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:211 ../share/symbols/symbols.h:212 msgctxt "Symbol" -msgid "Bus" -msgstr "Autobus" +msgid "Drinking Water" +msgstr "Acqua potabile" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:218 ../share/symbols/symbols.h:219 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:215 ../share/symbols/symbols.h:216 msgctxt "Symbol" -msgid "Ground Transportation" -msgstr "Trasporto via terra" +msgid "Fishing" +msgstr "Pesca" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:220 ../share/symbols/symbols.h:221 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:217 ../share/symbols/symbols.h:218 msgctxt "Symbol" -msgid "Rail Transportation" -msgstr "Trasporto ferroviario" +msgid "Food Service" +msgstr "Servizio di ristorazione" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:222 ../share/symbols/symbols.h:223 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:219 ../share/symbols/symbols.h:220 msgctxt "Symbol" -msgid "Water Transportation" -msgstr "Trasporto via mare" +msgid "Four Wheel Drive Road" +msgstr "Strada per veicoli a quattro ruote motrici" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:224 ../share/symbols/symbols.h:225 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:221 ../share/symbols/symbols.h:222 msgctxt "Symbol" -msgid "Car Rental" -msgstr "Autonoleggio" +msgid "Gas Station" +msgstr "Distributore di benzina" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:226 ../share/symbols/symbols.h:227 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:223 ../share/symbols/symbols.h:224 msgctxt "Symbol" -msgid "Restaurant" -msgstr "Ristorante" +msgid "Golfing" +msgstr "Golf" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:228 ../share/symbols/symbols.h:229 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:225 ../share/symbols/symbols.h:226 msgctxt "Symbol" -msgid "Coffeeshop" -msgstr "Caffè" +msgid "Horseback Riding" +msgstr "Equitazione" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:230 ../share/symbols/symbols.h:231 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:227 ../share/symbols/symbols.h:228 msgctxt "Symbol" -msgid "Bar" -msgstr "Bar" +msgid "Hospital" +msgstr "Ospedale" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:232 ../share/symbols/symbols.h:233 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:229 ../share/symbols/symbols.h:230 msgctxt "Symbol" -msgid "Shops" -msgstr "Negozi" +msgid "Ice Skating" +msgstr "Pattinaggio sul ghiaccio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:234 ../share/symbols/symbols.h:235 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:233 ../share/symbols/symbols.h:234 msgctxt "Symbol" -msgid "Barber Shop - Beauty Salon" -msgstr "Barbiere - Salone di bellezza" +msgid "Litter Receptacle" +msgstr "Cestino dei rifiuti" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:236 ../share/symbols/symbols.h:237 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:235 ../share/symbols/symbols.h:236 msgctxt "Symbol" -msgid "Barber Shop" -msgstr "Barbiere" +msgid "Lodging" +msgstr "Alloggio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:238 ../share/symbols/symbols.h:239 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:237 ../share/symbols/symbols.h:238 msgctxt "Symbol" -msgid "Beauty Salon" -msgstr "Salone di bellezza" +msgid "Marina" +msgstr "Marina" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:240 ../share/symbols/symbols.h:241 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:239 ../share/symbols/symbols.h:240 msgctxt "Symbol" -msgid "Ticket Purchase" -msgstr "Acquisto biglietti" +msgid "Motorbike Trail" +msgstr "Sentiero motocicli" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:242 ../share/symbols/symbols.h:243 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:241 ../share/symbols/symbols.h:242 msgctxt "Symbol" -msgid "Baggage Check In" -msgstr "Check in bagagli" +msgid "Radiator Water" +msgstr "Acqua radiatore" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:244 ../share/symbols/symbols.h:245 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:243 ../share/symbols/symbols.h:244 msgctxt "Symbol" -msgid "Baggage Claim" -msgstr "Ritiro bagagli" +msgid "Recycling" +msgstr "Riciclaggio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:246 ../share/symbols/symbols.h:247 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:247 ../share/symbols/symbols.h:248 msgctxt "Symbol" -msgid "Customs" -msgstr "Dogana" +msgid "Pets On Leash" +msgstr "Animali al guinzaglio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:248 ../share/symbols/symbols.h:249 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:249 ../share/symbols/symbols.h:250 msgctxt "Symbol" -msgid "Immigration" -msgstr "Immigrazione" +msgid "Picnic Area" +msgstr "Area picnic" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:250 ../share/symbols/symbols.h:251 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:251 ../share/symbols/symbols.h:252 msgctxt "Symbol" -msgid "Departing Flights" -msgstr "Voli in partenza" +msgid "Post Office" +msgstr "Ufficio postale" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:252 ../share/symbols/symbols.h:253 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:253 ../share/symbols/symbols.h:254 msgctxt "Symbol" -msgid "Arriving Flights" -msgstr "Voli in arrivo" +msgid "Ranger Station" +msgstr "Stazione dei ranger" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:254 ../share/symbols/symbols.h:255 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:255 ../share/symbols/symbols.h:256 msgctxt "Symbol" -msgid "Smoking" -msgstr "Fumare" +msgid "RV Campground" +msgstr "Campeggio camper" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:256 ../share/symbols/symbols.h:257 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:257 ../share/symbols/symbols.h:258 msgctxt "Symbol" -msgid "No Smoking" -msgstr "Vietato fumare" +msgid "Restrooms" +msgstr "Servizi" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:260 ../share/symbols/symbols.h:261 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:259 ../share/symbols/symbols.h:260 msgctxt "Symbol" -msgid "No Parking" -msgstr "Divieto di parcheggio" +msgid "Sailing" +msgstr "Vela" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:262 ../share/symbols/symbols.h:263 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:261 ../share/symbols/symbols.h:262 msgctxt "Symbol" -msgid "No Dogs" -msgstr "Divieto per i cani" +msgid "Sanitary Disposal Station" +msgstr "Stazione di smaltimento sanitario" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:264 ../share/symbols/symbols.h:265 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:263 ../share/symbols/symbols.h:264 msgctxt "Symbol" -msgid "No Entry" -msgstr "Divieto di ingresso" +msgid "Scuba Diving" +msgstr "Immersione subacquea" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:266 ../share/symbols/symbols.h:267 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:265 ../share/symbols/symbols.h:266 msgctxt "Symbol" -msgid "Exit" -msgstr "Uscita" +msgid "Self Guided Trail" +msgstr "Sentiero guidato" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:268 ../share/symbols/symbols.h:269 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:267 ../share/symbols/symbols.h:268 msgctxt "Symbol" -msgid "Fire Extinguisher" -msgstr "Estintore" +msgid "Shelter" +msgstr "Rifugio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:270 ../share/symbols/symbols.h:271 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:269 ../share/symbols/symbols.h:270 msgctxt "Symbol" -msgid "Right Arrow" -msgstr "Freccia destra" +msgid "Showers" +msgstr "Docce" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:272 ../share/symbols/symbols.h:273 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:271 ../share/symbols/symbols.h:272 msgctxt "Symbol" -msgid "Forward and Right Arrow" -msgstr "Freccia avanti e destra" +msgid "Sledding" +msgstr "Slitta" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:274 ../share/symbols/symbols.h:275 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:273 ../share/symbols/symbols.h:274 msgctxt "Symbol" -msgid "Up Arrow" -msgstr "Freccia su" +msgid "SnowmobileTrail" +msgstr "Sentiero motoslitta" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:276 ../share/symbols/symbols.h:277 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:275 ../share/symbols/symbols.h:276 msgctxt "Symbol" -msgid "Forward and Left Arrow" -msgstr "Freccia avanti e sinistra" +msgid "Stable" +msgstr "Stalla" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:278 ../share/symbols/symbols.h:279 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:277 ../share/symbols/symbols.h:278 msgctxt "Symbol" -msgid "Left Arrow" -msgstr "Freccia sinistra" +msgid "Store" +msgstr "Negozio" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:280 ../share/symbols/symbols.h:281 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:279 ../share/symbols/symbols.h:280 msgctxt "Symbol" -msgid "Left and Down Arrow" -msgstr "Freccia sinistra e giù" +msgid "Swimming" +msgstr "Nuoto" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:282 ../share/symbols/symbols.h:283 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:283 ../share/symbols/symbols.h:284 msgctxt "Symbol" -msgid "Down Arrow" -msgstr "Freccia giù" +msgid "Emergency Telephone" +msgstr "Telefono di emergenza" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:284 ../share/symbols/symbols.h:285 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:285 ../share/symbols/symbols.h:286 msgctxt "Symbol" -msgid "Right and Down Arrow" -msgstr "Freccia destra e giù" +msgid "Trailhead" +msgstr "Sentiero" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:286 ../share/symbols/symbols.h:287 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:287 ../share/symbols/symbols.h:288 msgctxt "Symbol" -msgid "NPS Wheelchair Accessible - 1996" -msgstr "NPS Accessibile alle sedie a rotelle - 1996" +msgid "Wheelchair Accessible" +msgstr "Accessibile alle sedie a rotelle" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:288 ../share/symbols/symbols.h:289 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:289 ../share/symbols/symbols.h:290 msgctxt "Symbol" -msgid "NPS Wheelchair Accessible" -msgstr "NPS Accessibile alle sedie a rotelle" +msgid "Wind Surfing" +msgstr "Windsurf" -#. Symbols: ./AigaSymbols.svg -#: ../share/symbols/symbols.h:290 ../share/symbols/symbols.h:291 +#. Symbols: ./MapSymbolsNPS.svg +#: ../share/symbols/symbols.h:291 msgctxt "Symbol" -msgid "New Wheelchair Accessible" -msgstr "Nuovo Accessibile alle sedie a rotelle" +msgid "Blank" +msgstr "Bianco" #: ../share/templates/templates.h:1 msgid "CD Label 120mmx120mm " @@ -4471,16 +4470,16 @@ msgstr "guide tipografia tipografico canvas" msgid "3D Box" msgstr "Solido 3D" -#: ../src/color-profile.cpp:860 +#: ../src/color-profile.cpp:856 #, c-format msgid "Color profiles directory (%s) is unavailable." msgstr "La cartella dei profili colore (%s) non è disponibile." -#: ../src/color-profile.cpp:932 ../src/color-profile.cpp:949 +#: ../src/color-profile.cpp:928 ../src/color-profile.cpp:945 msgid "(invalid UTF-8 string)" msgstr "(stringa UTF-8 non valida)" -#: ../src/color-profile.cpp:934 +#: ../src/color-profile.cpp:930 msgctxt "Profile name" msgid "None" msgstr "Nessuno" @@ -4508,7 +4507,7 @@ msgstr "Muovi guida" #: ../src/desktop-events.cpp:507 ../src/desktop-events.cpp:567 #: ../src/ui/dialog/guides.cpp:147 msgid "Delete guide" -msgstr "Cancella guida" +msgstr "Elimina guida" #: ../src/desktop-events.cpp:547 #, c-format @@ -4892,21 +4891,21 @@ msgstr "Multiplo spaziatura griglia" msgid " to " msgstr " a " -#: ../src/document.cpp:526 +#: ../src/document.cpp:531 #, c-format msgid "New document %d" msgstr "Nuovo documento %d" -#: ../src/document.cpp:531 +#: ../src/document.cpp:536 #, c-format msgid "Memory document %d" msgstr "Documento memoria %d" -#: ../src/document.cpp:560 +#: ../src/document.cpp:565 msgid "Memory document %1" msgstr "Documento memoria %1" -#: ../src/document.cpp:859 +#: ../src/document.cpp:864 #, c-format msgid "Unnamed document %d" msgstr "Documento senza nome %d" @@ -5105,8 +5104,7 @@ msgstr "Soglia adattiva" #: ../src/ui/widget/page-sizer.cpp:249 #: ../src/widgets/calligraphy-toolbar.cpp:430 #: ../src/widgets/eraser-toolbar.cpp:154 ../src/widgets/spray-toolbar.cpp:297 -#: ../src/widgets/tweak-toolbar.cpp:128 -#: ../share/extensions/foldablebox.inx.h:2 +#: ../src/widgets/tweak-toolbar.cpp:128 ../share/extensions/foldablebox.inx.h:2 msgid "Width:" msgstr "Larghezza:" @@ -5683,7 +5681,7 @@ msgstr "Soglia" #: ../src/extension/internal/bitmap/threshold.cpp:40 #: ../src/extension/internal/bitmap/unsharpmask.cpp:46 -#: ../src/widgets/paintbucket-toolbar.cpp:148 +#: ../src/widgets/paintbucket-toolbar.cpp:147 msgid "Threshold:" msgstr "Soglia:" @@ -6567,15 +6565,13 @@ msgid "Transparency type:" msgstr "Tipo trasparenza:" #: ../src/extension/internal/filter/bumps.h:353 -#: ../src/extension/internal/filter/morphology.h:176 -#: ../src/filter-enums.cpp:91 +#: ../src/extension/internal/filter/morphology.h:176 ../src/filter-enums.cpp:91 msgid "Atop" msgstr "In cima" #: ../src/extension/internal/filter/bumps.h:354 #: ../src/extension/internal/filter/distort.h:70 -#: ../src/extension/internal/filter/morphology.h:174 -#: ../src/filter-enums.cpp:89 +#: ../src/extension/internal/filter/morphology.h:174 ../src/filter-enums.cpp:89 msgid "In" msgstr "In" @@ -6736,7 +6732,7 @@ msgstr "Discreto" #: ../src/extension/internal/filter/color.h:505 ../src/filter-enums.cpp:113 #: ../src/live_effects/lpe-interpolate_points.cpp:25 -#: ../src/live_effects/lpe-powerstroke.cpp:134 +#: ../src/live_effects/lpe-powerstroke.cpp:133 msgid "Linear" msgstr "Lineare" @@ -7091,8 +7087,7 @@ msgid "Felt Feather" msgstr "Piuma" #: ../src/extension/internal/filter/distort.h:71 -#: ../src/extension/internal/filter/morphology.h:175 -#: ../src/filter-enums.cpp:90 +#: ../src/extension/internal/filter/morphology.h:175 ../src/filter-enums.cpp:90 msgid "Out" msgstr "Out" @@ -7288,13 +7283,11 @@ msgstr "Nascondi immagine" msgid "Composite type:" msgstr "Tipo composizione:" -#: ../src/extension/internal/filter/morphology.h:173 -#: ../src/filter-enums.cpp:88 +#: ../src/extension/internal/filter/morphology.h:173 ../src/filter-enums.cpp:88 msgid "Over" msgstr "Sovrapposizione" -#: ../src/extension/internal/filter/morphology.h:177 -#: ../src/filter-enums.cpp:92 +#: ../src/extension/internal/filter/morphology.h:177 ../src/filter-enums.cpp:92 msgid "XOR" msgstr "XOR" @@ -7368,8 +7361,8 @@ msgstr "Riempimento rumoroso" #: ../src/ui/dialog/tracedialog.cpp:747 #: ../share/extensions/color_HSL_adjust.inx.h:2 #: ../share/extensions/color_custom.inx.h:2 -#: ../share/extensions/color_randomize.inx.h:2 -#: ../share/extensions/dots.inx.h:2 ../share/extensions/dxf_input.inx.h:2 +#: ../share/extensions/color_randomize.inx.h:2 ../share/extensions/dots.inx.h:2 +#: ../share/extensions/dxf_input.inx.h:2 #: ../share/extensions/dxf_outlines.inx.h:2 #: ../share/extensions/gcodetools_area.inx.h:29 #: ../share/extensions/gcodetools_engraving.inx.h:7 @@ -7969,15 +7962,13 @@ msgstr "Spostamento verticale:" #: ../src/extension/internal/grid.cpp:209 #: ../src/ui/dialog/inkscape-preferences.cpp:1532 #: ../share/extensions/draw_from_triangle.inx.h:58 -#: ../share/extensions/eqtexsvg.inx.h:4 -#: ../share/extensions/foldablebox.inx.h:9 +#: ../share/extensions/eqtexsvg.inx.h:4 ../share/extensions/foldablebox.inx.h:9 #: ../share/extensions/funcplot.inx.h:38 #: ../share/extensions/grid_cartesian.inx.h:23 #: ../share/extensions/grid_isometric.inx.h:11 #: ../share/extensions/grid_polar.inx.h:22 #: ../share/extensions/guides_creator.inx.h:25 -#: ../share/extensions/hershey.inx.h:52 -#: ../share/extensions/layout_nup.inx.h:35 +#: ../share/extensions/hershey.inx.h:52 ../share/extensions/layout_nup.inx.h:35 #: ../share/extensions/lindenmayer.inx.h:34 #: ../share/extensions/nicechart.inx.h:45 #: ../share/extensions/param_curves.inx.h:30 @@ -8097,12 +8088,15 @@ msgid "Poppler/Cairo import" msgstr "Importa con Poppler/Cairo" #: ../src/extension/internal/pdfinput/pdf-input.cpp:135 -#, fuzzy msgid "" "Import via external library. Text consists of groups containing cloned " "glyphs where each glyph is a path. Images are stored internally. Meshes " "cause entire document to be rendered as a raster image." -msgstr "Importa con una libreria esterna" +msgstr "" +"Importa con una libreria esterna. Il testo è formato da gruppi contenenti " +"glifi ognuno dei quali è un tracciato. Le immagine sono salvate " +"internamente. La presenza di mesh fa si che il documento venga renderizzato " +"come immagine raster." #: ../src/extension/internal/pdfinput/pdf-input.cpp:136 msgid "Internal import" @@ -8114,6 +8108,9 @@ msgid "" "white space is missing. Meshes are converted to tiles, the number depends on " "the precision set below." msgstr "" +"Importa con una libreria interna (derivata da Poppler). Il testo importato è " +"salvato come testo senza spazi bianchi. Le mesh sono convertite con la " +"precisione impostata in basso." #: ../src/extension/internal/pdfinput/pdf-input.cpp:148 msgid "rough" @@ -8328,8 +8325,7 @@ msgid "Map all fill patterns to standard WMF hatches" msgstr "" #: ../src/extension/internal/wmf-inout.cpp:3208 -#: ../share/extensions/wmf_input.inx.h:2 -#: ../share/extensions/wmf_output.inx.h:2 +#: ../share/extensions/wmf_input.inx.h:2 ../share/extensions/wmf_output.inx.h:2 msgid "Windows Metafile (*.wmf)" msgstr "Windows Metafile (*.wmf)" @@ -8367,52 +8363,53 @@ msgstr "" msgid "default.svg" msgstr "default.it.svg" -#: ../src/file.cpp:338 +#: ../src/file.cpp:332 msgid "Broken links have been changed to point to existing files." msgstr "" +"I collegamenti persi sono stati cambiati per corrispondere a file esistenti." -#: ../src/file.cpp:349 ../src/file.cpp:1292 +#: ../src/file.cpp:343 ../src/file.cpp:1278 #, c-format msgid "Failed to load the requested file %s" msgstr "Impossibile caricare il file %s" -#: ../src/file.cpp:375 +#: ../src/file.cpp:369 msgid "Document not saved yet. Cannot revert." msgstr "Documento non ancora salvato. Impossibile ricaricarlo." -#: ../src/file.cpp:381 +#: ../src/file.cpp:375 msgid "Changes will be lost! Are you sure you want to reload document %1?" msgstr "" "Le modifiche andranno perdute! Sicuri di voler ricaricare il documento %1?" -#: ../src/file.cpp:407 +#: ../src/file.cpp:401 msgid "Document reverted." msgstr "Documento ricaricato." -#: ../src/file.cpp:409 +#: ../src/file.cpp:403 msgid "Document not reverted." msgstr "Documento non ricaricato." -#: ../src/file.cpp:559 +#: ../src/file.cpp:553 msgid "Select file to open" msgstr "Seleziona il file da aprire" -#: ../src/file.cpp:641 +#: ../src/file.cpp:635 msgid "Clean up document" msgstr "Pulisci documento" -#: ../src/file.cpp:648 +#: ../src/file.cpp:642 #, c-format msgid "Removed %i unused definition in <defs>." msgid_plural "Removed %i unused definitions in <defs>." msgstr[0] "Rimossa %i definizione inutilizzata in <defs>." msgstr[1] "Rimosse %i definizioni inutilizzate in <defs>." -#: ../src/file.cpp:653 +#: ../src/file.cpp:647 msgid "No unused definitions in <defs>." msgstr "Nessuna definizione inutilizzata in <defs>." -#: ../src/file.cpp:687 +#: ../src/file.cpp:679 #, c-format msgid "" "No Inkscape extension found to save document (%s). This may have been " @@ -8422,66 +8419,66 @@ msgstr "" "(%s). Ciò potrebbe esser stato causato da un'estensione del nome del file " "sconosciuta." -#: ../src/file.cpp:688 ../src/file.cpp:698 ../src/file.cpp:707 -#: ../src/file.cpp:714 ../src/file.cpp:720 +#: ../src/file.cpp:680 ../src/file.cpp:688 ../src/file.cpp:696 +#: ../src/file.cpp:702 ../src/file.cpp:707 msgid "Document not saved." msgstr "Documento non salvato." -#: ../src/file.cpp:697 +#: ../src/file.cpp:687 #, c-format msgid "" "File %s is write protected. Please remove write protection and try again." msgstr "" "Il file %s è protetto dalla scrittura. Rimuovere la protezione e riprovare." -#: ../src/file.cpp:706 +#: ../src/file.cpp:695 #, c-format msgid "File %s could not be saved." msgstr "Impossibile salvare il file %s." -#: ../src/file.cpp:739 ../src/file.cpp:741 +#: ../src/file.cpp:725 ../src/file.cpp:727 msgid "Document saved." msgstr "Documento salvato." #. We are saving for the first time; create a unique default filename -#: ../src/file.cpp:884 ../src/file.cpp:1451 +#: ../src/file.cpp:870 ../src/file.cpp:1437 msgid "drawing" msgstr "disegno" -#: ../src/file.cpp:889 +#: ../src/file.cpp:875 msgid "drawing-%1" msgstr "disegno-%1" -#: ../src/file.cpp:906 +#: ../src/file.cpp:892 msgid "Select file to save a copy to" msgstr "Seleziona il file in cui salvare una copia" -#: ../src/file.cpp:908 +#: ../src/file.cpp:894 msgid "Select file to save to" msgstr "Seleziona il file da salvare" -#: ../src/file.cpp:1013 ../src/file.cpp:1015 +#: ../src/file.cpp:999 ../src/file.cpp:1001 msgid "No changes need to be saved." msgstr "Nessuna modifica da salvare." -#: ../src/file.cpp:1034 +#: ../src/file.cpp:1020 msgid "Saving document..." msgstr "Salvataggio del documento..." -#: ../src/file.cpp:1289 ../src/ui/dialog/inkscape-preferences.cpp:1505 +#: ../src/file.cpp:1275 ../src/ui/dialog/inkscape-preferences.cpp:1505 #: ../src/ui/dialog/ocaldialogs.cpp:1244 msgid "Import" msgstr "Importa" -#: ../src/file.cpp:1339 +#: ../src/file.cpp:1325 msgid "Select file to import" msgstr "Seleziona il file da importare" -#: ../src/file.cpp:1472 +#: ../src/file.cpp:1458 msgid "Select file to export to" msgstr "Seleziona il file su cui esportare" -#: ../src/file.cpp:1725 +#: ../src/file.cpp:1711 msgid "Import Clip Art" msgstr "Importa Clip Art" @@ -8602,8 +8599,7 @@ msgstr "Ruota luminosità" msgid "Luminance to Alpha" msgstr "Da luminanza a trasparenza" -#: ../src/filter-enums.cpp:87 -#: ../share/extensions/jessyInk_mouseHandler.inx.h:3 +#: ../src/filter-enums.cpp:87 ../share/extensions/jessyInk_mouseHandler.inx.h:3 #: ../share/extensions/jessyInk_transitions.inx.h:7 #: ../share/extensions/measure.inx.h:20 ../share/extensions/nicechart.inx.h:33 msgid "Default" @@ -8927,8 +8923,7 @@ msgstr "Riduce a icona questo pannello" msgid "Close this dock" msgstr "Chiude questo pannello" -#: ../src/libgdl/gdl-dock-item-grip.c:723 -#: ../src/libgdl/gdl-dock-tablabel.c:125 +#: ../src/libgdl/gdl-dock-item-grip.c:723 ../src/libgdl/gdl-dock-tablabel.c:125 msgid "Controlling dock item" msgstr "Pannello atto al controllo" @@ -9096,8 +9091,7 @@ msgstr "L'indice della pagina attuale" #: ../src/libgdl/gdl-dock-object.c:125 #: ../src/live_effects/parameter/originalpatharray.cpp:82 #: ../src/ui/dialog/inkscape-preferences.cpp:1566 -#: ../src/ui/widget/page-sizer.cpp:285 -#: ../src/widgets/gradient-selector.cpp:150 +#: ../src/ui/widget/page-sizer.cpp:285 ../src/widgets/gradient-selector.cpp:150 #: ../src/widgets/sp-xmlview-attr-list.cpp:49 msgid "Name" msgstr "Nome" @@ -9326,7 +9320,7 @@ msgstr "Cerchio (tramite centro e raggio)" #: ../src/live_effects/effect.cpp:102 msgid "Circle by 3 points" -msgstr "Cerchio da 3 punti" +msgstr "Cerchio per 3 punti" #: ../src/live_effects/effect.cpp:103 msgid "Dynamic stroke" @@ -9453,9 +9447,8 @@ msgid "Interpolate points" msgstr "Interpola punti" #: ../src/live_effects/effect.cpp:140 -#, fuzzy msgid "Transform by 2 points" -msgstr "Trasforma gradienti" +msgstr "Trasforma per 2 punti" #: ../src/live_effects/effect.cpp:141 #: ../src/live_effects/lpe-show_handles.cpp:26 @@ -9467,9 +9460,8 @@ msgid "BSpline" msgstr "BSpline" #: ../src/live_effects/effect.cpp:144 -#, fuzzy msgid "Join type" -msgstr "Tipo linea:" +msgstr "Collegamento nodi" #: ../src/live_effects/effect.cpp:145 #, fuzzy @@ -9499,9 +9491,8 @@ msgid "Fill between many" msgstr "" #: ../src/live_effects/effect.cpp:152 -#, fuzzy msgid "Ellipse by 5 points" -msgstr "Cerchio da 3 punti" +msgstr "Ellisse per 5 punti" #: ../src/live_effects/effect.cpp:153 msgid "Bounding Box" @@ -9528,12 +9519,12 @@ msgstr "Nessun effetto" msgid "Please specify a parameter path for the LPE '%s' with %d mouse clicks" msgstr "Specificare un tracciato parametro per l'effetto '%s' con %d clic" -#: ../src/live_effects/effect.cpp:766 +#: ../src/live_effects/effect.cpp:765 #, c-format msgid "Editing parameter %s." msgstr "Modifica del parametro %s." -#: ../src/live_effects/effect.cpp:771 +#: ../src/live_effects/effect.cpp:770 msgid "None of the applied path effect's parameters can be edited on-canvas." msgstr "" "Nessuno dei parametri dell'effetto su tracciato applicato può essere " @@ -9657,22 +9648,20 @@ msgid "Path from which to take the original path data" msgstr "Tracciato da cui ottenere i dati tracciato originali" #: ../src/live_effects/lpe-bounding-box.cpp:25 -#, fuzzy msgid "Visual Bounds" msgstr "Riquadro visivo" #: ../src/live_effects/lpe-bounding-box.cpp:25 -#, fuzzy msgid "Uses the visual bounding box" -msgstr "Riquadro visivo" +msgstr "Usa il riquadro visivo" #: ../src/live_effects/lpe-bspline.cpp:30 msgid "Steps with CTRL:" -msgstr "" +msgstr "Passi con CTRL:" #: ../src/live_effects/lpe-bspline.cpp:30 msgid "Change number of steps with CTRL pressed" -msgstr "" +msgstr "Modifica il numero di passi delle maniglie con CTRL premuto" #: ../src/live_effects/lpe-bspline.cpp:31 #: ../src/live_effects/lpe-simplify.cpp:33 @@ -9689,47 +9678,40 @@ msgstr "_Dimensione maniglia:" #: ../src/live_effects/lpe-bspline.cpp:32 msgid "Apply changes if weight = 0%" -msgstr "" +msgstr "Applica modifica se peso = 0%" #: ../src/live_effects/lpe-bspline.cpp:33 msgid "Apply changes if weight > 0%" -msgstr "" +msgstr "Applica modifiche se peso > 0%" #: ../src/live_effects/lpe-bspline.cpp:34 #: ../src/live_effects/lpe-fillet-chamfer.cpp:56 -#, fuzzy msgid "Change only selected nodes" -msgstr "Unisce i nodi finali selezionati" +msgstr "Modifica solo i nodi selezionati" #: ../src/live_effects/lpe-bspline.cpp:35 -#, fuzzy msgid "Change weight %:" -msgstr "Altezza della maiuscola:" +msgstr "Modifica peso %:" #: ../src/live_effects/lpe-bspline.cpp:35 -#, fuzzy msgid "Change weight percent of the effect" -msgstr "Cambia offset del passaggio del gradiente" +msgstr "Modifica la percentuale di peso dell'effetto" #: ../src/live_effects/lpe-bspline.cpp:99 -#, fuzzy msgid "Default weight" -msgstr "Titolo predefinito" +msgstr "Peso predefinito" #: ../src/live_effects/lpe-bspline.cpp:104 -#, fuzzy msgid "Make cusp" -msgstr "Crea stella" +msgstr "Rendi spigoloso" #: ../src/live_effects/lpe-bspline.cpp:148 -#, fuzzy msgid "Change to default weight" -msgstr "Crea maglia predefinita" +msgstr "Modifica il peso al valore predefinito" #: ../src/live_effects/lpe-bspline.cpp:154 -#, fuzzy msgid "Change to 0 weight" -msgstr "Modifica larghezza contorno" +msgstr "Modifica il peso a 0" #: ../src/live_effects/lpe-bspline.cpp:160 #: ../src/live_effects/lpe-fillet-chamfer.cpp:240 @@ -10109,32 +10091,32 @@ msgstr "" "posizione dei nodi del tracciato di sostegno." #: ../src/live_effects/lpe-interpolate_points.cpp:26 -#: ../src/live_effects/lpe-powerstroke.cpp:135 +#: ../src/live_effects/lpe-powerstroke.cpp:134 msgid "CubicBezierFit" msgstr "CubicBezierFit" #: ../src/live_effects/lpe-interpolate_points.cpp:27 -#: ../src/live_effects/lpe-powerstroke.cpp:136 +#: ../src/live_effects/lpe-powerstroke.cpp:135 msgid "CubicBezierJohan" msgstr "CubicBezierJohan" #: ../src/live_effects/lpe-interpolate_points.cpp:28 -#: ../src/live_effects/lpe-powerstroke.cpp:137 +#: ../src/live_effects/lpe-powerstroke.cpp:136 msgid "SpiroInterpolator" msgstr "SpiroInterpolator" #: ../src/live_effects/lpe-interpolate_points.cpp:29 -#: ../src/live_effects/lpe-powerstroke.cpp:138 +#: ../src/live_effects/lpe-powerstroke.cpp:137 msgid "Centripetal Catmull-Rom" -msgstr "" +msgstr "Centripetal Catmull-Rom" #: ../src/live_effects/lpe-interpolate_points.cpp:37 -#: ../src/live_effects/lpe-powerstroke.cpp:180 +#: ../src/live_effects/lpe-powerstroke.cpp:179 msgid "Interpolator type:" msgstr "Tipo interpolazione:" #: ../src/live_effects/lpe-interpolate_points.cpp:38 -#: ../src/live_effects/lpe-powerstroke.cpp:180 +#: ../src/live_effects/lpe-powerstroke.cpp:179 msgid "" "Determines which kind of interpolator will be used to interpolate between " "stroke width along the path" @@ -10143,21 +10125,21 @@ msgstr "" "larghezza del contorno lungo il tracciato" #: ../src/live_effects/lpe-jointype.cpp:31 -#: ../src/live_effects/lpe-powerstroke.cpp:167 +#: ../src/live_effects/lpe-powerstroke.cpp:166 #: ../src/live_effects/lpe-taperstroke.cpp:63 msgid "Beveled" msgstr "Tagliati" #: ../src/live_effects/lpe-jointype.cpp:32 #: ../src/live_effects/lpe-jointype.cpp:43 -#: ../src/live_effects/lpe-powerstroke.cpp:168 +#: ../src/live_effects/lpe-powerstroke.cpp:167 #: ../src/live_effects/lpe-taperstroke.cpp:64 #: ../src/widgets/star-toolbar.cpp:534 msgid "Rounded" msgstr "Arrotondati" #: ../src/live_effects/lpe-jointype.cpp:33 -#: ../src/live_effects/lpe-powerstroke.cpp:171 +#: ../src/live_effects/lpe-powerstroke.cpp:170 #: ../src/live_effects/lpe-taperstroke.cpp:65 msgid "Miter" msgstr "Vivi" @@ -10169,91 +10151,83 @@ msgstr "Spigolosità:" #. {LINEJOIN_EXTRP_MITER, N_("Extrapolated"), "extrapolated"}, // disabled because doesn't work well #: ../src/live_effects/lpe-jointype.cpp:35 -#: ../src/live_effects/lpe-powerstroke.cpp:170 +#: ../src/live_effects/lpe-powerstroke.cpp:169 msgid "Extrapolated arc" msgstr "Arco estrapolato" #: ../src/live_effects/lpe-jointype.cpp:36 -#, fuzzy msgid "Extrapolated arc Alt1" -msgstr "Arco estrapolato" +msgstr "Arco estrapolato Alt1" #: ../src/live_effects/lpe-jointype.cpp:37 -#, fuzzy msgid "Extrapolated arc Alt2" -msgstr "Arco estrapolato" +msgstr "Arco estrapolato Alt2" #: ../src/live_effects/lpe-jointype.cpp:38 -#, fuzzy msgid "Extrapolated arc Alt3" -msgstr "Arco estrapolato" +msgstr "Arco estrapolato Alt3" #: ../src/live_effects/lpe-jointype.cpp:42 -#: ../src/live_effects/lpe-powerstroke.cpp:150 +#: ../src/live_effects/lpe-powerstroke.cpp:149 msgid "Butt" msgstr "Geometrica" #: ../src/live_effects/lpe-jointype.cpp:44 -#: ../src/live_effects/lpe-powerstroke.cpp:151 +#: ../src/live_effects/lpe-powerstroke.cpp:150 msgid "Square" msgstr "Quadrata" #: ../src/live_effects/lpe-jointype.cpp:45 -#: ../src/live_effects/lpe-powerstroke.cpp:153 +#: ../src/live_effects/lpe-powerstroke.cpp:152 msgid "Peak" msgstr "Punta" #: ../src/live_effects/lpe-jointype.cpp:54 -#, fuzzy msgid "Thickness of the stroke" -msgstr "Spessore: al lato inferiore:" +msgstr "Larghezza della linea" #: ../src/live_effects/lpe-jointype.cpp:55 -#, fuzzy msgid "Line cap" -msgstr "Lineare" +msgstr "Estremità linea" #: ../src/live_effects/lpe-jointype.cpp:55 -#, fuzzy msgid "The end shape of the stroke" -msgstr "Orientazione del righello" +msgstr "La forma degli estremi della linea" #. Join type #. TRANSLATORS: The line join style specifies the shape to be used at the #. corners of paths. It can be "miter", "round" or "bevel". #: ../src/live_effects/lpe-jointype.cpp:56 -#: ../src/live_effects/lpe-powerstroke.cpp:183 +#: ../src/live_effects/lpe-powerstroke.cpp:182 #: ../src/widgets/stroke-style.cpp:288 msgid "Join:" msgstr "Spigoli:" #: ../src/live_effects/lpe-jointype.cpp:56 -#: ../src/live_effects/lpe-powerstroke.cpp:183 +#: ../src/live_effects/lpe-powerstroke.cpp:182 msgid "Determines the shape of the path's corners" msgstr "Determina la forma degli spigoli del tracciato" #. start_lean(_("Start path lean"), _("Start path lean"), "start_lean", &wr, this, 0.), #. end_lean(_("End path lean"), _("End path lean"), "end_lean", &wr, this, 0.), #: ../src/live_effects/lpe-jointype.cpp:59 -#: ../src/live_effects/lpe-powerstroke.cpp:184 +#: ../src/live_effects/lpe-powerstroke.cpp:183 #: ../src/live_effects/lpe-taperstroke.cpp:78 msgid "Miter limit:" msgstr "Spigolosità:" #: ../src/live_effects/lpe-jointype.cpp:59 -#, fuzzy msgid "Maximum length of the miter join (in units of stroke width)" msgstr "" "Lunghezza massima dello spigolo (in unità della larghezza del contorno)" #: ../src/live_effects/lpe-jointype.cpp:60 -#, fuzzy msgid "Force miter" -msgstr "Forza" +msgstr "Forza spigolo" #: ../src/live_effects/lpe-jointype.cpp:60 msgid "Overrides the miter limit and forces a join." -msgstr "" +msgstr "Sovrascrive la lunghezza massima dello spigolo e lo forza." #. initialise your parameters here: #: ../src/live_effects/lpe-knot.cpp:350 @@ -10767,43 +10741,43 @@ msgstr "" msgid "Handles:" msgstr "Maniglie:" -#: ../src/live_effects/lpe-powerstroke.cpp:133 +#: ../src/live_effects/lpe-powerstroke.cpp:132 msgid "CubicBezierSmooth" msgstr "CubicBezierSmooth" -#: ../src/live_effects/lpe-powerstroke.cpp:152 +#: ../src/live_effects/lpe-powerstroke.cpp:151 #: ../share/extensions/gcodetools_prepare_path_for_plasma.inx.h:13 msgid "Round" msgstr "Arrotondata" -#: ../src/live_effects/lpe-powerstroke.cpp:154 +#: ../src/live_effects/lpe-powerstroke.cpp:153 msgid "Zero width" msgstr "Larghezza zero" -#: ../src/live_effects/lpe-powerstroke.cpp:172 +#: ../src/live_effects/lpe-powerstroke.cpp:171 #: ../src/widgets/pencil-toolbar.cpp:112 msgid "Spiro" msgstr "Spiro" -#: ../src/live_effects/lpe-powerstroke.cpp:178 +#: ../src/live_effects/lpe-powerstroke.cpp:177 msgid "Offset points" msgstr "Punti proiezione" -#: ../src/live_effects/lpe-powerstroke.cpp:179 +#: ../src/live_effects/lpe-powerstroke.cpp:178 msgid "Sort points" msgstr "Ordina punti" -#: ../src/live_effects/lpe-powerstroke.cpp:179 +#: ../src/live_effects/lpe-powerstroke.cpp:178 msgid "Sort offset points according to their time value along the curve" msgstr "" "Ordina i punti della proiezione secondo la loro posizione lungo la curva" -#: ../src/live_effects/lpe-powerstroke.cpp:181 +#: ../src/live_effects/lpe-powerstroke.cpp:180 #: ../share/extensions/fractalize.inx.h:3 msgid "Smoothness:" msgstr "Curvatura:" -#: ../src/live_effects/lpe-powerstroke.cpp:181 +#: ../src/live_effects/lpe-powerstroke.cpp:180 msgid "" "Sets the smoothness for the CubicBezierJohan interpolator; 0 = linear " "interpolation, 1 = smooth" @@ -10811,25 +10785,25 @@ msgstr "" "Imposta la curvatura per l'interpolazione CubicBezierJohan; 0 = lineare, 1 = " "morbida" -#: ../src/live_effects/lpe-powerstroke.cpp:182 +#: ../src/live_effects/lpe-powerstroke.cpp:181 msgid "Start cap:" msgstr "Estremità iniziale:" -#: ../src/live_effects/lpe-powerstroke.cpp:182 +#: ../src/live_effects/lpe-powerstroke.cpp:181 msgid "Determines the shape of the path's start" msgstr "Determina la forma dell'estremità iniziale del tracciato" -#: ../src/live_effects/lpe-powerstroke.cpp:184 +#: ../src/live_effects/lpe-powerstroke.cpp:183 #: ../src/widgets/stroke-style.cpp:335 msgid "Maximum length of the miter (in units of stroke width)" msgstr "" "Lunghezza massima dello spigolo (in unità della larghezza del contorno)" -#: ../src/live_effects/lpe-powerstroke.cpp:185 +#: ../src/live_effects/lpe-powerstroke.cpp:184 msgid "End cap:" msgstr "Estremità finale:" -#: ../src/live_effects/lpe-powerstroke.cpp:185 +#: ../src/live_effects/lpe-powerstroke.cpp:184 msgid "Determines the shape of the path's end" msgstr "Determina la forma dell'estremità finale del tracciato" @@ -11156,13 +11130,13 @@ msgstr "Nessuno" #: ../src/live_effects/lpe-ruler.cpp:33 #: ../src/live_effects/lpe-transform_2pts.cpp:37 -#: ../src/ui/tools/measure-tool.cpp:755 ../src/widgets/arc-toolbar.cpp:319 +#: ../src/ui/tools/measure-tool.cpp:756 ../src/widgets/arc-toolbar.cpp:319 msgid "Start" msgstr "Inizio" #: ../src/live_effects/lpe-ruler.cpp:34 #: ../src/live_effects/lpe-transform_2pts.cpp:38 -#: ../src/ui/tools/measure-tool.cpp:756 ../src/widgets/arc-toolbar.cpp:332 +#: ../src/ui/tools/measure-tool.cpp:757 ../src/widgets/arc-toolbar.cpp:332 msgid "End" msgstr "Fine" @@ -11174,8 +11148,7 @@ msgstr "Distanza _tacche:" msgid "Distance between successive ruler marks" msgstr "Distanza tra le tacche del righello" -#: ../src/live_effects/lpe-ruler.cpp:42 -#: ../share/extensions/foldablebox.inx.h:7 +#: ../src/live_effects/lpe-ruler.cpp:42 ../share/extensions/foldablebox.inx.h:7 #: ../share/extensions/interp_att_g.inx.h:9 #: ../share/extensions/layout_nup.inx.h:3 #: ../share/extensions/printing_marks.inx.h:11 @@ -11265,6 +11238,8 @@ msgid "" "The \"show handles\" path effect will remove any custom style on the object " "you are applying it to. If this is not what you want, click Cancel." msgstr "" +"L'effetto su tracciato \"Mostra maniglie\" rimuove qualsiasi stile " +"personalizzato a esso applicato. Per evitare ciò, premere Annulla." #: ../src/live_effects/lpe-simplify.cpp:30 #, fuzzy @@ -11282,9 +11257,8 @@ msgid "Roughly threshold:" msgstr "Soglia:" #: ../src/live_effects/lpe-simplify.cpp:32 -#, fuzzy msgid "Smooth angles:" -msgstr "Curvatura:" +msgstr "Smussa angoli:" #: ../src/live_effects/lpe-simplify.cpp:32 msgid "Max degree difference on handles to perform a smooth" @@ -11540,64 +11514,52 @@ msgid "From original width" msgstr "Clona tracciato originale" #: ../src/live_effects/lpe-transform_2pts.cpp:33 -#, fuzzy msgid "Lock length" -msgstr "Lunghezza" +msgstr "Blocca lunghezza" #: ../src/live_effects/lpe-transform_2pts.cpp:33 -#, fuzzy msgid "Lock length to current distance" -msgstr "Blocca o sblocca il livello attuale" +msgstr "Blocca la lunghezza alla distanza attuale" #: ../src/live_effects/lpe-transform_2pts.cpp:34 -#, fuzzy msgid "Lock angle" -msgstr "Angolo del cono" +msgstr "Blocca angolo" #: ../src/live_effects/lpe-transform_2pts.cpp:35 -#, fuzzy msgid "Flip horizontal" msgstr "Rifletti orizzontalmente" #: ../src/live_effects/lpe-transform_2pts.cpp:36 -#, fuzzy msgid "Flip vertical" msgstr "Rifletti verticalmente" #: ../src/live_effects/lpe-transform_2pts.cpp:37 -#, fuzzy msgid "Start point" -msgstr "Ordina punti" +msgstr "Punto iniziale" #: ../src/live_effects/lpe-transform_2pts.cpp:38 -#, fuzzy msgid "End point" -msgstr "Variazione punto finale" +msgstr "Punto finale" #: ../src/live_effects/lpe-transform_2pts.cpp:39 -#, fuzzy msgid "Stretch" -msgstr "Forza" +msgstr "Espansione" #: ../src/live_effects/lpe-transform_2pts.cpp:39 -#, fuzzy msgid "Stretch the result" -msgstr "Risoluzione predefinita per l'esportazione" +msgstr "Espande il risultato" #: ../src/live_effects/lpe-transform_2pts.cpp:40 -#, fuzzy msgid "Offset from knots" -msgstr "Punti proiezione" +msgstr "Spostamento dai punti" #: ../src/live_effects/lpe-transform_2pts.cpp:41 -#, fuzzy msgid "First Knot" -msgstr "Primo soccorso" +msgstr "Primo nodo" #: ../src/live_effects/lpe-transform_2pts.cpp:42 -#, fuzzy msgid "Last Knot" -msgstr "Nodo" +msgstr "Ultimo nodo" #: ../src/live_effects/lpe-transform_2pts.cpp:43 #, fuzzy @@ -11730,14 +11692,13 @@ msgstr "Inverti" #: ../src/live_effects/parameter/originalpatharray.cpp:130 #: ../src/live_effects/parameter/originalpatharray.cpp:315 -#: ../src/live_effects/parameter/path.cpp:508 +#: ../src/live_effects/parameter/path.cpp:486 msgid "Link path parameter to path" msgstr "Lega il parametro del tracciato al parametro" #: ../src/live_effects/parameter/originalpatharray.cpp:167 -#, fuzzy msgid "Remove Path" -msgstr "_Rimuovi dal tracciato" +msgstr "Rimuovi tracciato" #: ../src/live_effects/parameter/originalpatharray.cpp:179 #: ../src/ui/dialog/objects.cpp:1854 @@ -11750,37 +11711,34 @@ msgid "Move Up" msgstr "Sposta in alto" #: ../src/live_effects/parameter/originalpatharray.cpp:231 -#, fuzzy msgid "Move path up" -msgstr "Muovi motivi" +msgstr "Sposta tracciato in alto" #: ../src/live_effects/parameter/originalpatharray.cpp:261 -#, fuzzy msgid "Move path down" -msgstr "Sposta in basso effetto su tracciato" +msgstr "Sposta tracciato in basso" #: ../src/live_effects/parameter/originalpatharray.cpp:279 -#, fuzzy msgid "Remove path" -msgstr "Muovi motivi" +msgstr "Rimuovi tracciato" -#: ../src/live_effects/parameter/path.cpp:184 +#: ../src/live_effects/parameter/path.cpp:170 msgid "Edit on-canvas" msgstr "Modifica sul disegno" -#: ../src/live_effects/parameter/path.cpp:194 +#: ../src/live_effects/parameter/path.cpp:180 msgid "Copy path" msgstr "Copia tracciato" -#: ../src/live_effects/parameter/path.cpp:204 +#: ../src/live_effects/parameter/path.cpp:190 msgid "Paste path" msgstr "Incolla tracciato" -#: ../src/live_effects/parameter/path.cpp:214 +#: ../src/live_effects/parameter/path.cpp:200 msgid "Link to path on clipboard" msgstr "Collega a tracciato negli appunti" -#: ../src/live_effects/parameter/path.cpp:476 +#: ../src/live_effects/parameter/path.cpp:454 msgid "Paste path parameter" msgstr "Incolla parametri tracciato" @@ -11866,13 +11824,12 @@ msgid "Export document to a PNG file" msgstr "Esporta il documento come file PNG" #: ../src/main.cpp:330 -#, fuzzy msgid "" "Resolution for exporting to bitmap and for rasterization of filters in PS/" "EPS/PDF (default 96)" msgstr "" -"Risoluzione per esportare in bitmap e per la resa dei filtri in PS/EPS/PDF " -"(predefinito 90)" +"Risoluzione per esportare in bitmap e per la rasterizzazione dei filtri in " +"PS/EPS/PDF (predefinito 96)" #: ../src/main.cpp:331 ../src/ui/widget/rendering-options.cpp:37 msgid "DPI" @@ -11987,13 +11944,12 @@ msgid "Export document to an EPS file" msgstr "Esporta il documento come file EPS" #: ../src/main.cpp:412 -#, fuzzy msgid "" "Choose the PostScript Level used to export. Possible choices are 2 and 3 " "(the default)" msgstr "" "Scegli il livello PostScript usato per l'esportazione. Le scelte possibili " -"sono 2 (predefinito) e 3" +"sono 2 e 3 (predefinito)" #: ../src/main.cpp:414 msgid "PS Level" @@ -12594,8 +12550,7 @@ msgstr "Niente da eliminare." #: ../src/widgets/eraser-toolbar.cpp:120 #: ../src/widgets/gradient-toolbar.cpp:1181 #: ../src/widgets/gradient-toolbar.cpp:1195 -#: ../src/widgets/gradient-toolbar.cpp:1209 -#: ../src/widgets/node-toolbar.cpp:401 +#: ../src/widgets/gradient-toolbar.cpp:1209 ../src/widgets/node-toolbar.cpp:401 msgid "Delete" msgstr "Elimina" @@ -12641,7 +12596,7 @@ msgstr "Seleziona un gruppo da dividere." msgid "No groups to ungroup in the selection." msgstr "Nessun gruppo nella selezione da dividere." -#: ../src/selection-chemistry.cpp:901 ../src/sp-item-group.cpp:652 +#: ../src/selection-chemistry.cpp:901 ../src/sp-item-group.cpp:550 #: ../src/ui/dialog/objects.cpp:1916 msgid "Ungroup" msgstr "Dividi" @@ -12893,9 +12848,8 @@ msgstr "" "L'oggetto che si vuole selezionare non è visibile (è in <defs>)" #: ../src/selection-chemistry.cpp:2912 -#, fuzzy msgid "Select path(s) to fill." -msgstr "Seleziona il tracciato da semplificare." +msgstr "Seleziona il tracciato da riempire." #: ../src/selection-chemistry.cpp:2930 msgid "Select object(s) to convert to marker." @@ -13333,40 +13287,40 @@ msgstr "[riferimento errato]: %s" msgid "%d × %d: %s" msgstr "%d × %d: %s" -#: ../src/sp-item-group.cpp:311 ../src/ui/dialog/objects.cpp:1915 +#: ../src/sp-item-group.cpp:307 ../src/ui/dialog/objects.cpp:1915 msgid "Group" msgstr "Gruppo" -#: ../src/sp-item-group.cpp:317 ../src/sp-switch.cpp:69 +#: ../src/sp-item-group.cpp:313 ../src/sp-switch.cpp:69 #, c-format msgid "of %d object" msgstr "di %d oggetto" -#: ../src/sp-item-group.cpp:317 ../src/sp-switch.cpp:69 +#: ../src/sp-item-group.cpp:313 ../src/sp-switch.cpp:69 #, c-format msgid "of %d objects" msgstr "di %d oggetti" -#: ../src/sp-item.cpp:1030 ../src/verbs.cpp:213 +#: ../src/sp-item.cpp:1031 ../src/verbs.cpp:213 msgid "Object" msgstr "Oggetto" -#: ../src/sp-item.cpp:1042 +#: ../src/sp-item.cpp:1043 #, c-format msgid "%s; clipped" msgstr "%s; con fissaggio" -#: ../src/sp-item.cpp:1048 +#: ../src/sp-item.cpp:1049 #, c-format msgid "%s; masked" msgstr "%s; con maschera" -#: ../src/sp-item.cpp:1058 +#: ../src/sp-item.cpp:1059 #, c-format msgid "%s; filtered (%s)" msgstr "%s; con filtro (%s)" -#: ../src/sp-item.cpp:1060 +#: ../src/sp-item.cpp:1061 #, c-format msgid "%s; filtered" msgstr "%s; con filtro" @@ -13476,8 +13430,8 @@ msgstr "" #: ../src/sp-text.cpp:361 ../src/verbs.cpp:347 #: ../share/extensions/lorem_ipsum.inx.h:8 -#: ../share/extensions/replace_font.inx.h:11 -#: ../share/extensions/split.inx.h:10 ../share/extensions/text_braille.inx.h:2 +#: ../share/extensions/replace_font.inx.h:11 ../share/extensions/split.inx.h:10 +#: ../share/extensions/text_braille.inx.h:2 #: ../share/extensions/text_extract.inx.h:14 #: ../share/extensions/text_flipcase.inx.h:2 #: ../share/extensions/text_lowercase.inx.h:2 @@ -15223,8 +15177,7 @@ msgstr "_Rimuovi" msgid "Remove selected grid." msgstr "Rimuove la griglia selezionata." -#: ../src/ui/dialog/document-properties.cpp:162 -#: ../src/widgets/toolbox.cpp:1903 +#: ../src/ui/dialog/document-properties.cpp:162 ../src/widgets/toolbox.cpp:1903 msgid "Guides" msgstr "Guide" @@ -15664,8 +15617,7 @@ msgstr "Informazioni" #: ../share/extensions/jitternodes.inx.h:12 #: ../share/extensions/layout_nup.inx.h:24 #: ../share/extensions/lindenmayer.inx.h:13 -#: ../share/extensions/lorem_ipsum.inx.h:6 -#: ../share/extensions/measure.inx.h:33 +#: ../share/extensions/lorem_ipsum.inx.h:6 ../share/extensions/measure.inx.h:33 #: ../share/extensions/pathalongpath.inx.h:16 #: ../share/extensions/pathscatter.inx.h:18 #: ../share/extensions/restack.inx.h:25 ../share/extensions/split.inx.h:8 @@ -19673,7 +19625,7 @@ msgstr "Preserva il canale K nelle trasformazioni CMYK -> CMYK" #: ../src/ui/dialog/inkscape-preferences.cpp:1091 #: ../src/ui/widget/color-icc-selector.cpp:394 -#: ../src/ui/widget/color-icc-selector.cpp:700 +#: ../src/ui/widget/color-icc-selector.cpp:699 msgid "" msgstr "" @@ -20949,8 +20901,7 @@ msgstr "" msgid "Y tilt" msgstr "" -#: ../src/ui/dialog/input.cpp:1616 -#: ../src/ui/widget/color-wheel-selector.cpp:29 +#: ../src/ui/dialog/input.cpp:1616 ../src/ui/widget/color-wheel-selector.cpp:29 msgid "Wheel" msgstr "Ruota" @@ -21767,18 +21718,15 @@ msgstr "Algoritmo Kopf-Lischinski" msgid "Output" msgstr "Output" -#: ../src/ui/dialog/pixelartdialog.cpp:297 -#: ../src/ui/dialog/tracedialog.cpp:814 +#: ../src/ui/dialog/pixelartdialog.cpp:297 ../src/ui/dialog/tracedialog.cpp:814 msgid "Reset all settings to defaults" msgstr "Reimposta tutti i valori ai predefiniti" -#: ../src/ui/dialog/pixelartdialog.cpp:302 -#: ../src/ui/dialog/tracedialog.cpp:819 +#: ../src/ui/dialog/pixelartdialog.cpp:302 ../src/ui/dialog/tracedialog.cpp:819 msgid "Abort a trace in progress" msgstr "Annulla una vettorizzazione in corso" -#: ../src/ui/dialog/pixelartdialog.cpp:306 -#: ../src/ui/dialog/tracedialog.cpp:823 +#: ../src/ui/dialog/pixelartdialog.cpp:306 ../src/ui/dialog/tracedialog.cpp:823 msgid "Execute the trace" msgstr "Esegue la vettorizzazione" @@ -22157,8 +22105,7 @@ msgid "Preview Text:" msgstr "Anteprima testo:" #: ../src/ui/dialog/swatches.cpp:202 ../src/ui/tools/gradient-tool.cpp:360 -#: ../src/ui/tools/gradient-tool.cpp:458 -#: ../src/widgets/gradient-vector.cpp:801 +#: ../src/ui/tools/gradient-tool.cpp:458 ../src/widgets/gradient-vector.cpp:801 msgid "Add gradient stop" msgstr "Aggiungi passaggio del gradiente" @@ -22285,7 +22232,8 @@ msgid "Set as _default" msgstr "Imposta come _predefinito" #: ../src/ui/dialog/text-edit.cpp:87 -msgid "AaBbCcIiPpQq12369$Û’Û’?.;/()" +#, fuzzy +msgid "AaBbCcIiPpQq12369$€¢?.;/()" msgstr "AaBbCcIiPpQq12369$€¢?.;/()" #. Align buttons @@ -23591,8 +23539,7 @@ msgid "Rotate handle" msgstr "Ruota maniglia" #. We need to call MPM's method because it could have been our last node -#: ../src/ui/tool/path-manipulator.cpp:1555 -#: ../src/widgets/node-toolbar.cpp:397 +#: ../src/ui/tool/path-manipulator.cpp:1555 ../src/widgets/node-toolbar.cpp:397 msgid "Delete node" msgstr "Cancella nodo" @@ -24123,24 +24070,24 @@ msgstr "" "b> per riempire al tocco" #. We hit green anchor, closing Green-Blue-Red -#: ../src/ui/tools/freehand-base.cpp:657 +#: ../src/ui/tools/freehand-base.cpp:677 msgid "Path is closed." msgstr "Il tracciato è chiuso." #. We hit bot start and end of single curve, closing paths -#: ../src/ui/tools/freehand-base.cpp:672 +#: ../src/ui/tools/freehand-base.cpp:692 msgid "Closing path." msgstr "Chiusura tracciato." -#: ../src/ui/tools/freehand-base.cpp:811 +#: ../src/ui/tools/freehand-base.cpp:831 msgid "Draw path" msgstr "Disegna tracciato" -#: ../src/ui/tools/freehand-base.cpp:964 +#: ../src/ui/tools/freehand-base.cpp:984 msgid "Creating single dot" msgstr "Creazione singolo punto" -#: ../src/ui/tools/freehand-base.cpp:965 +#: ../src/ui/tools/freehand-base.cpp:985 msgid "Create single dot" msgstr "Crea singolo punto" @@ -24252,31 +24199,31 @@ msgid "Measure end, Shift+Click for position dialog" msgstr "" "Fine misurazione, Maiusc+Clic per aprire la finestra di posizionamento" -#: ../src/ui/tools/measure-tool.cpp:746 ../share/extensions/measure.inx.h:2 +#: ../src/ui/tools/measure-tool.cpp:747 ../share/extensions/measure.inx.h:2 msgid "Measure" msgstr "Misura" -#: ../src/ui/tools/measure-tool.cpp:751 +#: ../src/ui/tools/measure-tool.cpp:752 msgid "Base" msgstr "" -#: ../src/ui/tools/measure-tool.cpp:760 +#: ../src/ui/tools/measure-tool.cpp:761 msgid "Add guides from measure tool" msgstr "Aggiungi guide dallo strumento di misurazione" -#: ../src/ui/tools/measure-tool.cpp:780 +#: ../src/ui/tools/measure-tool.cpp:781 msgid "Keep last measure on the canvas, for reference" msgstr "Mantieni ultima misura fantasma sullo spazio di lavoro" -#: ../src/ui/tools/measure-tool.cpp:800 +#: ../src/ui/tools/measure-tool.cpp:801 msgid "Convert measure to items" msgstr "Converti misura in oggetto" -#: ../src/ui/tools/measure-tool.cpp:838 +#: ../src/ui/tools/measure-tool.cpp:839 msgid "Add global measure line" msgstr "Aggiungi misurazione complessiva" -#: ../src/ui/tools/measure-tool.cpp:1289 ../src/ui/tools/measure-tool.cpp:1291 +#: ../src/ui/tools/measure-tool.cpp:1290 ../src/ui/tools/measure-tool.cpp:1292 #, c-format msgid "Crossing %lu" msgstr "Intersezione %lu" @@ -24604,12 +24551,12 @@ msgstr "" msgid "Create rectangle" msgstr "Crea rettangolo" -#: ../src/ui/tools/select-tool.cpp:155 +#: ../src/ui/tools/select-tool.cpp:156 msgid "Click selection to toggle scale/rotation handles" msgstr "" "Clicca la selezione per alternare le maniglie di ridimensionamento/rotazione" -#: ../src/ui/tools/select-tool.cpp:156 +#: ../src/ui/tools/select-tool.cpp:157 msgid "" "No objects selected. Click, Shift+click, Alt+scroll mouse on top of objects, " "or drag around objects to select." @@ -24617,15 +24564,15 @@ msgstr "" "Nessun oggetto selezionato. Clicca, Maiusc+Clic, Alt+scorrimento mouse sugli " "oggetti, o trascina attorno agli oggetti per selezionare." -#: ../src/ui/tools/select-tool.cpp:209 +#: ../src/ui/tools/select-tool.cpp:210 msgid "Move canceled." msgstr "Spostamento cancellato." -#: ../src/ui/tools/select-tool.cpp:217 +#: ../src/ui/tools/select-tool.cpp:218 msgid "Selection canceled." msgstr "Selezione cancellata." -#: ../src/ui/tools/select-tool.cpp:645 +#: ../src/ui/tools/select-tool.cpp:638 msgid "" "Draw over objects to select them; release Alt to switch to " "rubberband selection" @@ -24633,7 +24580,7 @@ msgstr "" "Disegna sugli oggetti per selezionarli; rilascia Alt per " "passare alla selezione ad elastico" -#: ../src/ui/tools/select-tool.cpp:647 +#: ../src/ui/tools/select-tool.cpp:640 msgid "" "Drag around objects to select them; press Alt to switch to " "touch selection" @@ -24641,19 +24588,19 @@ msgstr "" "Trascina attorno agli oggetti per selezionarli; premi Alt per " "passare alla selezione col tocco" -#: ../src/ui/tools/select-tool.cpp:888 +#: ../src/ui/tools/select-tool.cpp:921 msgid "Ctrl: click to select in groups; drag to move hor/vert" msgstr "" "Ctrl: clicca per selezionare nei gruppi, trascina per muovere in " "orizzontale o verticale" -#: ../src/ui/tools/select-tool.cpp:889 +#: ../src/ui/tools/select-tool.cpp:922 msgid "Shift: click to toggle select; drag for rubberband selection" msgstr "" "Maiusc: clicca per commutare la selezione, trascina per usare la " "selezione ad elastico" -#: ../src/ui/tools/select-tool.cpp:890 +#: ../src/ui/tools/select-tool.cpp:923 msgid "" "Alt: click to select under; scroll mouse-wheel to cycle-select; drag " "to move selected or select by touch" @@ -24661,7 +24608,7 @@ msgstr "" "Alt: clicca per selezionare sotto, scorri con il mouse per " "selezionare in ciclo, trascina per muovere la selezione o seleziona col tocco" -#: ../src/ui/tools/select-tool.cpp:1098 +#: ../src/ui/tools/select-tool.cpp:1131 msgid "Selected object is not a group. Cannot enter." msgstr "L'oggetto selezionato non è un gruppo, impossibile entrarvi." @@ -24920,7 +24867,7 @@ msgstr[1] "" msgid "Type text" msgstr "Inserimento testo" -#: ../src/ui/tools/tool-base.cpp:705 +#: ../src/ui/tools/tool-base.cpp:700 msgid "Space+mouse move to pan canvas" msgstr "Spazio+spostamento puntatore per muovere l'area di lavoro" @@ -25209,28 +25156,24 @@ msgid "Ligatures" msgstr "Legature" #: ../src/ui/widget/font-variants.cpp:39 -#, fuzzy msgctxt "Font variant" msgid "Common" -msgstr "Oggetti comuni" +msgstr "Standard" #: ../src/ui/widget/font-variants.cpp:40 -#, fuzzy msgctxt "Font variant" msgid "Discretionary" -msgstr "Direzione" +msgstr "Discrezionali" #: ../src/ui/widget/font-variants.cpp:41 -#, fuzzy msgctxt "Font variant" msgid "Historical" -msgstr "Lezioni" +msgstr "Storiche" #: ../src/ui/widget/font-variants.cpp:42 -#, fuzzy msgctxt "Font variant" msgid "Contextual" -msgstr "Contesto" +msgstr "Contestuali" #: ../src/ui/widget/font-variants.cpp:44 msgctxt "Font variant" @@ -25261,13 +25204,13 @@ msgstr "Maiuscole" #, fuzzy msgctxt "Font variant" msgid "Small" -msgstr "Piccole" +msgstr "Maiuscoletto" #: ../src/ui/widget/font-variants.cpp:52 #, fuzzy msgctxt "Font variant" msgid "All small" -msgstr "Tutte piccole" +msgstr "Tutto maiuscoletto" #: ../src/ui/widget/font-variants.cpp:53 msgctxt "Font variant" @@ -25320,7 +25263,7 @@ msgstr "Proporzionale" #: ../src/ui/widget/font-variants.cpp:63 msgctxt "Font variant" msgid "Tabular" -msgstr "Tabellare" +msgstr "Tabulare" #: ../src/ui/widget/font-variants.cpp:64 msgctxt "Font variant" @@ -25345,7 +25288,7 @@ msgstr "Frazioni predefinite" #: ../src/ui/widget/font-variants.cpp:68 msgctxt "Font variant" msgid "Ordinal" -msgstr "" +msgstr "Ordinali" #: ../src/ui/widget/font-variants.cpp:69 msgctxt "Font variant" @@ -25365,19 +25308,19 @@ msgstr "" #: ../src/ui/widget/font-variants.cpp:85 msgid "Common ligatures. On by default. OpenType tables: 'liga', 'clig'" -msgstr "" +msgstr "Legature standard. Attive di default. OpenType table: 'liga', 'clig'" #: ../src/ui/widget/font-variants.cpp:87 msgid "Discretionary ligatures. Off by default. OpenType table: 'dlig'" -msgstr "" +msgstr "Legature discrezionali. Disattivate di default. OpenType table: 'dlig'" #: ../src/ui/widget/font-variants.cpp:89 msgid "Historical ligatures. Off by default. OpenType table: 'hlig'" -msgstr "" +msgstr "Legature storiche. Disattivate di default. OpenType table: 'hlig'" #: ../src/ui/widget/font-variants.cpp:91 msgid "Contextual forms. On by default. OpenType table: 'calt'" -msgstr "" +msgstr "Legature contestuali. Attive di default. OpenType table: 'calt'" #. Position ---------------------------------- #. Add tooltips @@ -25473,7 +25416,7 @@ msgstr "Frazioni impilate. OpenType table: 'afrc'" #: ../src/ui/widget/font-variants.cpp:189 msgid "Ordinals (raised 'th', etc.). OpenType table: 'ordn'" -msgstr "" +msgstr "Ordinali (a, o all'apice e simili). OpenType table: 'ordn'" #: ../src/ui/widget/font-variants.cpp:190 msgid "Slashed zeros. OpenType table: 'zero'" @@ -29484,33 +29427,27 @@ msgstr "radiale" msgid "Create radial (elliptic or circular) gradient" msgstr "Crea un gradiente radiale (ellittico o circolare)" -#: ../src/widgets/gradient-toolbar.cpp:1044 -#: ../src/widgets/mesh-toolbar.cpp:387 +#: ../src/widgets/gradient-toolbar.cpp:1044 ../src/widgets/mesh-toolbar.cpp:387 msgid "New:" msgstr "Nuovo:" -#: ../src/widgets/gradient-toolbar.cpp:1067 -#: ../src/widgets/mesh-toolbar.cpp:410 +#: ../src/widgets/gradient-toolbar.cpp:1067 ../src/widgets/mesh-toolbar.cpp:410 msgid "fill" msgstr "riempimento" -#: ../src/widgets/gradient-toolbar.cpp:1067 -#: ../src/widgets/mesh-toolbar.cpp:410 +#: ../src/widgets/gradient-toolbar.cpp:1067 ../src/widgets/mesh-toolbar.cpp:410 msgid "Create gradient in the fill" msgstr "Crea gradiente per il riempimento" -#: ../src/widgets/gradient-toolbar.cpp:1071 -#: ../src/widgets/mesh-toolbar.cpp:414 +#: ../src/widgets/gradient-toolbar.cpp:1071 ../src/widgets/mesh-toolbar.cpp:414 msgid "stroke" msgstr "contorno" -#: ../src/widgets/gradient-toolbar.cpp:1071 -#: ../src/widgets/mesh-toolbar.cpp:414 +#: ../src/widgets/gradient-toolbar.cpp:1071 ../src/widgets/mesh-toolbar.cpp:414 msgid "Create gradient in the stroke" msgstr "Crea gradiente per il contorno" -#: ../src/widgets/gradient-toolbar.cpp:1074 -#: ../src/widgets/mesh-toolbar.cpp:417 +#: ../src/widgets/gradient-toolbar.cpp:1074 ../src/widgets/mesh-toolbar.cpp:417 msgid "on:" msgstr "su:" @@ -29610,8 +29547,7 @@ msgstr "Collega gradienti" msgid "Link gradients to change all related gradients" msgstr "Collega i gradienti per modificare tutti i gradienti correlati" -#: ../src/widgets/gradient-vector.cpp:317 -#: ../src/widgets/paint-selector.cpp:965 +#: ../src/widgets/gradient-vector.cpp:317 ../src/widgets/paint-selector.cpp:965 #: ../src/widgets/stroke-marker-selector.cpp:154 msgid "No document selected" msgstr "Nessun documento selezionato" @@ -29735,7 +29671,7 @@ msgstr "Visualizza informazioni di misura per gli elementi selezionati" #. Add the units menu. #: ../src/widgets/lpe-toolbar.cpp:387 ../src/widgets/node-toolbar.cpp:613 -#: ../src/widgets/paintbucket-toolbar.cpp:168 +#: ../src/widgets/paintbucket-toolbar.cpp:167 #: ../src/widgets/rect-toolbar.cpp:378 ../src/widgets/select-toolbar.cpp:530 #: ../src/widgets/text-toolbar.cpp:1876 msgid "Units" @@ -30296,19 +30232,19 @@ msgstr "Motivo" msgid "Swatch fill" msgstr "Campione" -#: ../src/widgets/paintbucket-toolbar.cpp:135 +#: ../src/widgets/paintbucket-toolbar.cpp:134 msgid "Fill by" msgstr "Riempi con" -#: ../src/widgets/paintbucket-toolbar.cpp:136 +#: ../src/widgets/paintbucket-toolbar.cpp:135 msgid "Fill by:" msgstr "Riempi con:" -#: ../src/widgets/paintbucket-toolbar.cpp:148 +#: ../src/widgets/paintbucket-toolbar.cpp:147 msgid "Fill Threshold" msgstr "Soglia riempimento" -#: ../src/widgets/paintbucket-toolbar.cpp:149 +#: ../src/widgets/paintbucket-toolbar.cpp:148 msgid "" "The maximum allowed difference between the clicked pixel and the neighboring " "pixels to be counted in the fill" @@ -30316,36 +30252,36 @@ msgstr "" "La differenza massima consentita tra il pixel cliccato e i pixel vicini da " "contare per il riempimento" -#: ../src/widgets/paintbucket-toolbar.cpp:176 +#: ../src/widgets/paintbucket-toolbar.cpp:175 msgid "Grow/shrink by" msgstr "Intrudi/Estrudi di" -#: ../src/widgets/paintbucket-toolbar.cpp:176 +#: ../src/widgets/paintbucket-toolbar.cpp:175 msgid "Grow/shrink by:" msgstr "Intrudi/Estrudi di:" -#: ../src/widgets/paintbucket-toolbar.cpp:177 +#: ../src/widgets/paintbucket-toolbar.cpp:176 msgid "" "The amount to grow (positive) or shrink (negative) the created fill path" msgstr "" "Di quanto estrudere (valore positivo) o intrudere (valore negativo) il " "riempimento creato" -#: ../src/widgets/paintbucket-toolbar.cpp:200 +#: ../src/widgets/paintbucket-toolbar.cpp:199 msgid "Close gaps" msgstr "Area cuscinetto" -#: ../src/widgets/paintbucket-toolbar.cpp:201 +#: ../src/widgets/paintbucket-toolbar.cpp:200 msgid "Close gaps:" msgstr "Area cuscinetto:" -#: ../src/widgets/paintbucket-toolbar.cpp:212 +#: ../src/widgets/paintbucket-toolbar.cpp:211 #: ../src/widgets/pencil-toolbar.cpp:396 ../src/widgets/spiral-toolbar.cpp:285 #: ../src/widgets/star-toolbar.cpp:564 msgid "Defaults" msgstr "Predefiniti" -#: ../src/widgets/paintbucket-toolbar.cpp:213 +#: ../src/widgets/paintbucket-toolbar.cpp:212 msgid "" "Reset paint bucket parameters to defaults (use Inkscape Preferences > Tools " "to change defaults)" @@ -32032,17 +31968,21 @@ msgstr "Seleziona un oggetto." msgid "Unable to process this object. Try changing it into a path first." msgstr "Impossibile elaborare questo oggetto. Convertirlo prima in tracciato." +#. report to the Inkscape console using errormsg #: ../share/extensions/draw_from_triangle.py:179 -msgid "Side Length 'a' (" -msgstr "Lunghezza lato 'a' (" +#, fuzzy +msgid "Side Length 'a' (px): " +msgstr "Lunghezza lato a (px):" #: ../share/extensions/draw_from_triangle.py:180 -msgid "Side Length 'b' (" -msgstr "Lunghezza lato 'b' (" +#, fuzzy +msgid "Side Length 'b' (px): " +msgstr "Lunghezza lato b (px):" #: ../share/extensions/draw_from_triangle.py:181 -msgid "Side Length 'c' (" -msgstr "Lunghezza lato 'c' (" +#, fuzzy +msgid "Side Length 'c' (px): " +msgstr "Lunghezza lato c (px):" #: ../share/extensions/draw_from_triangle.py:182 msgid "Angle 'A' (radians): " @@ -32061,8 +32001,8 @@ msgid "Semiperimeter (px): " msgstr "Semiperimetro (px): " #: ../share/extensions/draw_from_triangle.py:186 -msgid "Area (" -msgstr "Area (" +msgid "Area (px^2): " +msgstr "Area (px^2): " #: ../share/extensions/dxf_input.py:530 #, python-format @@ -32688,8 +32628,7 @@ msgid "Area is zero, cannot calculate Center of Mass" msgstr "" #: ../share/extensions/pathalongpath.py:207 -#: ../share/extensions/pathscatter.py:226 -#: ../share/extensions/perspective.py:50 +#: ../share/extensions/pathscatter.py:226 ../share/extensions/perspective.py:50 msgid "This extension requires two selected paths." msgstr "Questa estensione richiede che vengan selezionati due tracciati." @@ -32722,8 +32661,7 @@ msgstr "" "derivati Debian questo può essere fatto col comando `sudo apt-get install " "python-numpy`." -#: ../share/extensions/perspective.py:58 -#: ../share/extensions/summersnight.py:49 +#: ../share/extensions/perspective.py:58 ../share/extensions/summersnight.py:49 #, python-format msgid "" "The first selected object is of type '%s'.\n" @@ -32732,16 +32670,14 @@ msgstr "" "Il primo elemento selezionato è del tipo '%s'.\n" "Provare prima il procedimento Tracciato->Da oggetto a tracciato." -#: ../share/extensions/perspective.py:65 -#: ../share/extensions/summersnight.py:57 +#: ../share/extensions/perspective.py:65 ../share/extensions/summersnight.py:57 msgid "" "This extension requires that the second selected path be four nodes long." msgstr "" "Questa estensione richiede che il secondo tracciato selezionato sia lungo " "esattamente quattro nodi." -#: ../share/extensions/perspective.py:91 -#: ../share/extensions/summersnight.py:90 +#: ../share/extensions/perspective.py:91 ../share/extensions/summersnight.py:90 msgid "" "The second selected object is a group, not a path.\n" "Try using the procedure Object->Ungroup." @@ -32749,8 +32685,7 @@ msgstr "" "Il secondo elemento selezionato è un gruppo, non un tracciato.\n" "Provare prima il procedimento Oggetto->Dividi." -#: ../share/extensions/perspective.py:93 -#: ../share/extensions/summersnight.py:92 +#: ../share/extensions/perspective.py:93 ../share/extensions/summersnight.py:92 msgid "" "The second selected object is not a path.\n" "Try using the procedure Path->Object to Path." @@ -32758,8 +32693,7 @@ msgstr "" "Il secondo elemento selezionato non è un tracciato.\n" "Provare prima il procedimento Tracciato->Da oggetto a tracciato." -#: ../share/extensions/perspective.py:96 -#: ../share/extensions/summersnight.py:95 +#: ../share/extensions/perspective.py:96 ../share/extensions/summersnight.py:95 msgid "" "The first selected object is not a path.\n" "Try using the procedure Path->Object to Path." @@ -35531,28 +35465,24 @@ msgid "" msgstr "" #: ../share/extensions/hpgl_input.inx.h:3 -#: ../share/extensions/hpgl_output.inx.h:4 -#: ../share/extensions/plotter.inx.h:32 +#: ../share/extensions/hpgl_output.inx.h:4 ../share/extensions/plotter.inx.h:32 msgid "Resolution X (dpi):" msgstr "Risoluzione X (dpi):" #: ../share/extensions/hpgl_input.inx.h:4 -#: ../share/extensions/hpgl_output.inx.h:5 -#: ../share/extensions/plotter.inx.h:33 +#: ../share/extensions/hpgl_output.inx.h:5 ../share/extensions/plotter.inx.h:33 msgid "" "The amount of steps the plotter moves if it moves for 1 inch on the X axis " "(Default: 1016.0)" msgstr "" #: ../share/extensions/hpgl_input.inx.h:5 -#: ../share/extensions/hpgl_output.inx.h:6 -#: ../share/extensions/plotter.inx.h:34 +#: ../share/extensions/hpgl_output.inx.h:6 ../share/extensions/plotter.inx.h:34 msgid "Resolution Y (dpi):" msgstr "Risoluzione Y (dpi):" #: ../share/extensions/hpgl_input.inx.h:6 -#: ../share/extensions/hpgl_output.inx.h:7 -#: ../share/extensions/plotter.inx.h:35 +#: ../share/extensions/hpgl_output.inx.h:7 ../share/extensions/plotter.inx.h:35 msgid "" "The amount of steps the plotter moves if it moves for 1 inch on the Y axis " "(Default: 1016.0)" @@ -35587,20 +35517,17 @@ msgid "" "serial connection." msgstr "" -#: ../share/extensions/hpgl_output.inx.h:3 -#: ../share/extensions/plotter.inx.h:31 +#: ../share/extensions/hpgl_output.inx.h:3 ../share/extensions/plotter.inx.h:31 #, fuzzy msgid "Plotter Settings " msgstr "Impostazioni importazione PDF" -#: ../share/extensions/hpgl_output.inx.h:8 -#: ../share/extensions/plotter.inx.h:36 +#: ../share/extensions/hpgl_output.inx.h:8 ../share/extensions/plotter.inx.h:36 #, fuzzy msgid "Pen number:" msgstr "Angolo de" -#: ../share/extensions/hpgl_output.inx.h:9 -#: ../share/extensions/plotter.inx.h:37 +#: ../share/extensions/hpgl_output.inx.h:9 ../share/extensions/plotter.inx.h:37 msgid "The number of the pen (tool) to use (Standard: '1')" msgstr "" @@ -35943,14 +35870,12 @@ msgstr "Duplica nodi finale" msgid "Interpolate style" msgstr "Stile d'interpolazione" -#: ../share/extensions/interp.inx.h:7 -#: ../share/extensions/interp_att_g.inx.h:10 +#: ../share/extensions/interp.inx.h:7 ../share/extensions/interp_att_g.inx.h:10 #, fuzzy msgid "Use Z-order" msgstr "Bordo rialzato" -#: ../share/extensions/interp.inx.h:8 -#: ../share/extensions/interp_att_g.inx.h:11 +#: ../share/extensions/interp.inx.h:8 ../share/extensions/interp_att_g.inx.h:11 msgid "Workaround for reversed selection order in Live Preview cycles" msgstr "" @@ -37618,8 +37543,7 @@ msgstr "" msgid "AutoCAD Plot Input" msgstr "Input AutoCAD Plot" -#: ../share/extensions/plt_input.inx.h:2 -#: ../share/extensions/plt_output.inx.h:2 +#: ../share/extensions/plt_input.inx.h:2 ../share/extensions/plt_output.inx.h:2 msgid "HP Graphics Language Plot file [AutoCAD] (*.plt)" msgstr "File HP Graphics Language Plot [AutoCAD] (*.plt)" @@ -38551,8 +38475,7 @@ msgstr "Discendente:" msgid "sK1 vector graphics files input" msgstr "Input file grafico vettoriale sK1" -#: ../share/extensions/sk1_input.inx.h:2 -#: ../share/extensions/sk1_output.inx.h:2 +#: ../share/extensions/sk1_input.inx.h:2 ../share/extensions/sk1_output.inx.h:2 msgid "sK1 vector graphics files (*.sk1)" msgstr "File grafico vettoriale sK1 (*.sk1)" @@ -39540,13 +39463,11 @@ msgstr "Inclinazione (gradi):" msgid "Hide lines behind the sphere" msgstr "Nascondi linee dietro alla sfera" -#: ../share/extensions/wmf_input.inx.h:1 -#: ../share/extensions/wmf_output.inx.h:1 +#: ../share/extensions/wmf_input.inx.h:1 ../share/extensions/wmf_output.inx.h:1 msgid "Windows Metafile Input" msgstr "Input Windows Metafile" -#: ../share/extensions/wmf_input.inx.h:3 -#: ../share/extensions/wmf_output.inx.h:3 +#: ../share/extensions/wmf_input.inx.h:3 ../share/extensions/wmf_output.inx.h:3 msgid "A popular graphics file format for clipart" msgstr "Un formato grafico molto diffuso per clipart" @@ -39554,9 +39475,6 @@ msgstr "Un formato grafico molto diffuso per clipart" msgid "XAML Input" msgstr "Input XAML" -#~ msgid "Area (px^2): " -#~ msgstr "Area (px^2): " - #~ msgid "" #~ "The selected object is not a path.\n" #~ "Try using the procedure Path->Object to Path." @@ -39618,15 +39536,6 @@ msgstr "Input XAML" #~ msgid "Use automatic scaling to size A4" #~ msgstr "Usa ridimensionamento automatico ad A4" -#~ msgid "Empty Page" -#~ msgstr "Pagina vuota" - -#~ msgid "http://wiki.inkscape.org/wiki/index.php/FAQ" -#~ msgstr "http://wiki.inkscape.org/wiki/index.php/itFAQ" - -#~ msgid "Text Orientation: " -#~ msgstr "Orientamento testo: " - #~ msgid "Angle [with Fixed Angle option only] (°):" #~ msgstr "Angolo [solo con Angolo fisso] (°):" @@ -39643,10 +39552,6 @@ msgstr "Input XAML" #~ msgid "Vertical Point:" #~ msgstr "Punto verticale:" -#, fuzzy -#~ msgid "Ids" -#~ msgstr "_Id" - #~ msgid "You need to install the UniConvertor software.\n" #~ msgstr "È necessario installare il programma UniConvertor.\n" @@ -39657,474 +39562,6 @@ msgstr "Input XAML" #~ "Converte sempre le unità di dimensione del testo sopra elencate in pixel " #~ "(px) prima di salvare il file" -#~ msgctxt "Symbol" -#~ msgid "Map Symbols" -#~ msgstr "Simboli mappa" - -#~ msgctxt "Symbol" -#~ msgid "Bed and Breakfast" -#~ msgstr "Bed and Breakfast" - -#~ msgctxt "Symbol" -#~ msgid "Youth Hostel" -#~ msgstr "Ostello per la Gioventù" - -#~ msgctxt "Symbol" -#~ msgid "Motel" -#~ msgstr "Motel" - -#~ msgctxt "Symbol" -#~ msgid "Hotel" -#~ msgstr "Hotel" - -#~ msgctxt "Symbol" -#~ msgid "Hostel" -#~ msgstr "Ostello" - -#~ msgctxt "Symbol" -#~ msgid "Chalet" -#~ msgstr "Chalet" - -#~ msgctxt "Symbol" -#~ msgid "Caravan Park" -#~ msgstr "Campeggio per roulotte" - -#~ msgctxt "Symbol" -#~ msgid "Alpine Hut" -#~ msgstr "Rifugio alpino" - -#~ msgctxt "Symbol" -#~ msgid "Bench or Park" -#~ msgstr "Panca o Parco" - -#~ msgctxt "Symbol" -#~ msgid "Playground" -#~ msgstr "Parco giochi" - -#~ msgctxt "Symbol" -#~ msgid "Fountain" -#~ msgstr "Fontana" - -#~ msgctxt "Symbol" -#~ msgid "Library" -#~ msgstr "Biblioteca" - -#~ msgctxt "Symbol" -#~ msgid "Town Hall" -#~ msgstr "Municipio" - -#~ msgctxt "Symbol" -#~ msgid "Court" -#~ msgstr "Tribunale" - -#~ msgctxt "Symbol" -#~ msgid "Fire Station / House" -#~ msgstr "Caserma dei pompieri" - -#~ msgctxt "Symbol" -#~ msgid "Police Station" -#~ msgstr "Stazione di polizia" - -#~ msgctxt "Symbol" -#~ msgid "Prison" -#~ msgstr "Prison" - -#~ msgctxt "Symbol" -#~ msgid "Public Building" -#~ msgstr "Edificio pubblico" - -#~ msgctxt "Symbol" -#~ msgid "Survey Point" -#~ msgstr "Punto di osservazione" - -#~ msgctxt "Symbol" -#~ msgid "Toll Booth" -#~ msgstr "Casello" - -#~ msgctxt "Symbol" -#~ msgid "Lift Gate" -#~ msgstr "Sponda montacarichi" - -#~ msgctxt "Symbol" -#~ msgid "Steps" -#~ msgstr "Scalini" - -#~ msgctxt "Symbol" -#~ msgid "Stile" -#~ msgstr "Scaletta" - -#~ msgctxt "Symbol" -#~ msgid "Kissing Gate" -#~ msgstr "Cancello per il bestiame" - -#~ msgctxt "Symbol" -#~ msgid "Gate" -#~ msgstr "Cancello" - -#~ msgctxt "Symbol" -#~ msgid "Entrance" -#~ msgstr "Entrata" - -#~ msgctxt "Symbol" -#~ msgid "Cycle Barrier" -#~ msgstr "Barriere biciclette" - -#~ msgctxt "Symbol" -#~ msgid "Cattle Grid" -#~ msgstr "Grata che impedisce il passaggio di bestiame" - -#~ msgctxt "Symbol" -#~ msgid "Bollard" -#~ msgstr "Colonnina/Bitta" - -#~ msgctxt "Symbol" -#~ msgid "University" -#~ msgstr "Università" - -#~ msgctxt "Symbol" -#~ msgid "High/Secondary School" -#~ msgstr "Scuola superiore" - -#~ msgctxt "Symbol" -#~ msgid "School" -#~ msgstr "Scuola" - -#~ msgctxt "Symbol" -#~ msgid "Kindergarten" -#~ msgstr "Scuola materna" - -#~ msgctxt "Symbol" -#~ msgid "Pub" -#~ msgstr "Pub" - -#~ msgctxt "Symbol" -#~ msgid "Desserts/Cakes Shop" -#~ msgstr "Pasticceria" - -#~ msgctxt "Symbol" -#~ msgid "Fast Food" -#~ msgstr "Fast food" - -#~ msgctxt "Symbol" -#~ msgid "Public Tap/Water" -#~ msgstr "Acqua pubblica" - -#~ msgctxt "Symbol" -#~ msgid "Cafe" -#~ msgstr "Caffè" - -#~ msgctxt "Symbol" -#~ msgid "Beer Garden" -#~ msgstr "Degustazione birra" - -#~ msgctxt "Symbol" -#~ msgid "Wine Bar" -#~ msgstr "Enoteca" - -#~ msgctxt "Symbol" -#~ msgid "Opticians/Eye Doctors" -#~ msgstr "Ottico" - -#~ msgctxt "Symbol" -#~ msgid "Dentist" -#~ msgstr "Dentista" - -#~ msgctxt "Symbol" -#~ msgid "Veterinarian" -#~ msgstr "Veterinario" - -#~ msgctxt "Symbol" -#~ msgid "Drugs Dispensary" -#~ msgstr "Dispensario farmaci" - -#~ msgctxt "Symbol" -#~ msgid "Pharmacy" -#~ msgstr "Farmacia" - -#~ msgctxt "Symbol" -#~ msgid "Accident & Emergency" -#~ msgstr "Pronto soccorso" - -#~ msgctxt "Symbol" -#~ msgid "Doctors" -#~ msgstr "Medici" - -#~ msgctxt "Symbol" -#~ msgid "Scrub Land" -#~ msgstr "Arbusteto" - -#~ msgctxt "Symbol" -#~ msgid "Swamp" -#~ msgstr "Palude" - -#~ msgctxt "Symbol" -#~ msgid "Hills" -#~ msgstr "Colline" - -#~ msgctxt "Symbol" -#~ msgid "Grass Land" -#~ msgstr "Prato" - -#~ msgctxt "Symbol" -#~ msgid "Deciduous Forest" -#~ msgstr "Bosco di latifoglie" - -#~ msgctxt "Symbol" -#~ msgid "Mixed Forest" -#~ msgstr "Bosco misto" - -#~ msgctxt "Symbol" -#~ msgid "Coniferous Forest" -#~ msgstr "Bosco di conifere" - -#~ msgctxt "Symbol" -#~ msgid "Church or Place of Worship" -#~ msgstr "Chiesa o luogo di preghiera" - -#~ msgctxt "Symbol" -#~ msgid "Bank" -#~ msgstr "Banca" - -#~ msgctxt "Symbol" -#~ msgid "Power Lines" -#~ msgstr "Linee elettriche" - -#~ msgctxt "Symbol" -#~ msgid "Watch Tower" -#~ msgstr "Torre di guardia" - -#~ msgctxt "Symbol" -#~ msgid "Transmitter" -#~ msgstr "Trasmettitore" - -#~ msgctxt "Symbol" -#~ msgid "Village" -#~ msgstr "Paese" - -#~ msgctxt "Symbol" -#~ msgid "Town" -#~ msgstr "Città" - -#~ msgctxt "Symbol" -#~ msgid "Hamlet" -#~ msgstr "Frazione" - -#~ msgctxt "Symbol" -#~ msgid "City" -#~ msgstr "Città" - -#~ msgctxt "Symbol" -#~ msgid "Peak" -#~ msgstr "Cima" - -#~ msgctxt "Symbol" -#~ msgid "Mountain Pass" -#~ msgstr "Passo di montagna" - -#~ msgctxt "Symbol" -#~ msgid "Mine" -#~ msgstr "Miniera" - -#~ msgctxt "Symbol" -#~ msgid "Military Complex" -#~ msgstr "Complesso militare" - -#~ msgctxt "Symbol" -#~ msgid "Embassy" -#~ msgstr "Ambasciata" - -#~ msgctxt "Symbol" -#~ msgid "Toy Shop" -#~ msgstr "Negozio di giocattoli" - -#~ msgctxt "Symbol" -#~ msgid "Supermarket" -#~ msgstr "Supermercato" - -#~ msgctxt "Symbol" -#~ msgid "Jewlers" -#~ msgstr "Gioielliere" - -#~ msgctxt "Symbol" -#~ msgid "Hairdressers" -#~ msgstr "Parrucchiere" - -#~ msgctxt "Symbol" -#~ msgid "Greengrocer" -#~ msgstr "Fruttivendolo" - -#~ msgctxt "Symbol" -#~ msgid "Gift Shop" -#~ msgstr "Negozio di articoli da regalo" - -#~ msgctxt "Symbol" -#~ msgid "Garden Center" -#~ msgstr "Vivaio" - -#~ msgctxt "Symbol" -#~ msgid "Florist" -#~ msgstr "Fioraio" - -#~ msgctxt "Symbol" -#~ msgid "Real Estate" -#~ msgstr "Agenzia immobiliare" - -#~ msgctxt "Symbol" -#~ msgid "Hardware / DIY" -#~ msgstr "Attrezzi/Fai da te" - -#~ msgctxt "Symbol" -#~ msgid "Shop" -#~ msgstr "Negozio" - -#~ msgctxt "Symbol" -#~ msgid "Confectioner" -#~ msgstr "Pasticciere" - -#~ msgctxt "Symbol" -#~ msgid "Computer Shop" -#~ msgstr "Negozio di computer" - -#~ msgctxt "Symbol" -#~ msgid "Clothing" -#~ msgstr "Abbigliamento" - -#~ msgctxt "Symbol" -#~ msgid "Mechanic" -#~ msgstr "Meccanico" - -#~ msgctxt "Symbol" -#~ msgid "Car Dealer" -#~ msgstr "Rivenditore di auto" - -#~ msgctxt "Symbol" -#~ msgid "Butcher" -#~ msgstr "Macellaio" - -#~ msgctxt "Symbol" -#~ msgid "Meat Shop" -#~ msgstr "Macelleria" - -#~ msgctxt "Symbol" -#~ msgid "Baker" -#~ msgstr "Fornaio" - -#~ msgctxt "Symbol" -#~ msgid "Off License / Liquor Store" -#~ msgstr "Negozio di bevande alcoliche" - -#~ msgctxt "Symbol" -#~ msgid "Tennis" -#~ msgstr "Tennis" - -#~ msgctxt "Symbol" -#~ msgid "Outdoor Pool" -#~ msgstr "Piscina scoperta" - -#~ msgctxt "Symbol" -#~ msgid "Indoor Pool" -#~ msgstr "Piscina coperta" - -#~ msgctxt "Symbol" -#~ msgid "Skiing" -#~ msgstr "Sci" - -#~ msgctxt "Symbol" -#~ msgid "Leisure Center" -#~ msgstr "Centro ricreativo" - -#~ msgctxt "Symbol" -#~ msgid "Equine Sports" -#~ msgstr "Equitazione" - -#~ msgctxt "Symbol" -#~ msgid "Rock Climbing" -#~ msgstr "Arrampicata" - -#~ msgctxt "Symbol" -#~ msgid "Gym" -#~ msgstr "Palestra" - -#~ msgctxt "Symbol" -#~ msgid "Archery" -#~ msgstr "Tiro con l'arco" - -#~ msgctxt "Symbol" -#~ msgid "Zoo" -#~ msgstr "Zoo" - -#~ msgctxt "Symbol" -#~ msgid "Wreck" -#~ msgstr "Relitto" - -#~ msgctxt "Symbol" -#~ msgid "Water Wheel" -#~ msgstr "Mulino ad acqua" - -#~ msgctxt "Symbol" -#~ msgid "Point of Interest" -#~ msgstr "Luogo d'interesse" - -#~ msgctxt "Symbol" -#~ msgid "Theater" -#~ msgstr "Teatro" - -#~ msgctxt "Symbol" -#~ msgid "Monument" -#~ msgstr "Monumento" - -#~ msgctxt "Symbol" -#~ msgid "Beach" -#~ msgstr "Spiaggia" - -#~ msgctxt "Symbol" -#~ msgid "Battle Location" -#~ msgstr "Posizione di battaglia" - -#~ msgctxt "Symbol" -#~ msgid "Archaeology / Ruins" -#~ msgstr "Archeologia/Rovine" - -#~ msgctxt "Symbol" -#~ msgid "Walking" -#~ msgstr "Camminare" - -#~ msgctxt "Symbol" -#~ msgid "Train" -#~ msgstr "Treno" - -#~ msgctxt "Symbol" -#~ msgid "Underground Rail" -#~ msgstr "Ferrovia sotterranea" - -#~ msgctxt "Symbol" -#~ msgid "Bike Rental" -#~ msgstr "Noleggio di biciclette" - -#~ msgctxt "Symbol" -#~ msgid "Carpool" -#~ msgstr "Car pooling" - -#~ msgctxt "Symbol" -#~ msgid "Flood Gate" -#~ msgstr "Paratia" - -#~ msgctxt "Symbol" -#~ msgid "Shipping" -#~ msgstr "Imbarcazioni" - -#~ msgctxt "Symbol" -#~ msgid "Disabled Parking" -#~ msgstr "Parcheggio disabili" - -#~ msgctxt "Symbol" -#~ msgid "Paid Parking" -#~ msgstr "Parcheggio a pagamento" - -#~ msgctxt "Symbol" -#~ msgid "Bike Parking" -#~ msgstr "Parcheggio biciclette" - #~ msgid "<no name found>" #~ msgstr "<nessun nome trovato>" @@ -40196,26 +39633,6 @@ msgstr "Input XAML" #~ msgid "Select objects matching all of the fields you filled in" #~ msgstr "Cerca oggetti corrispondenti a tutti i campi spuntati" -#, fuzzy -#~ msgid "Lightness:" -#~ msgstr "Luminosità" - -#, fuzzy -#~ msgid "Level:" -#~ msgstr "Livello" - -#, fuzzy -#~ msgid "Composite:" -#~ msgstr "Composto" - -#, fuzzy -#~ msgid "Glow:" -#~ msgstr "Alone" - -#, fuzzy -#~ msgid "Link or embed image:" -#~ msgstr "Incorpora immagini" - #~ msgid "drawing-%d%s" #~ msgstr "disegno-%d%s" @@ -40307,27 +39724,9 @@ msgstr "Input XAML" #~ msgstr[0] "%i oggetto di %i tipi" #~ msgstr[1] "%i oggetti di %i tipi" -#~ msgid "Link to %s" -#~ msgstr "Collegamento a %s" - -#~ msgid "Ellipse" -#~ msgstr "Ellisse" - -#~ msgid "Circle" -#~ msgstr "Cerchio" - -#~ msgid "Segment" -#~ msgstr "Segmento" - -#~ msgid "Arc" -#~ msgstr "Arco" - #~ msgid "Image with bad reference: %s" #~ msgstr "Immagine con un descrittore sbagliato: %s" -#~ msgid "Line" -#~ msgstr "Linea" - #~ msgid "Linked offset, %s by %f pt" #~ msgstr "Proiezione collegata, %s di %f pt" @@ -40339,14 +39738,6 @@ msgstr "Input XAML" #~ msgstr[0] "Tracciato (%i nodo, effetto su tracciato: %s)" #~ msgstr[1] "Tracciato (%i nodi, effetto su tracciato: %s)" -#~ msgid "Path (%i node)" -#~ msgid_plural "Path (%i nodes)" -#~ msgstr[0] "Tracciato (%i nodo)" -#~ msgstr[1] "Tracciato (%i nodi)" - -#~ msgid "Rectangle" -#~ msgstr "Rettangolo" - #~ msgid "Polygon with %d vertex" #~ msgid_plural "Polygon with %d vertices" #~ msgstr[0] "Poligono con %d vertice" @@ -40403,27 +39794,6 @@ msgstr "Input XAML" #~ msgid "Oversample bitmaps:" #~ msgstr "Sovracampionamento bitmap:" -#~ msgid "_Execute Javascript" -#~ msgstr "_Esegui Javascript" - -#~ msgid "_Execute Python" -#~ msgstr "_Esegui Python" - -#~ msgid "_Execute Ruby" -#~ msgstr "_Esegui Ruby" - -#~ msgid "Errors" -#~ msgstr "Errori" - -#~ msgid "Align:" -#~ msgstr "Allineamento:" - -#~ msgid "O:%.3g" -#~ msgstr "O:%.3g" - -#~ msgid "O:.%d" -#~ msgstr "O:.%d" - #~ msgid "_Export Bitmap..." #~ msgstr "_Esporta bitmap..." @@ -40532,65 +39902,11 @@ msgstr "Input XAML" #~ msgid "Text Input" #~ msgstr "Input testo" -#, fuzzy -#~ msgid "Dark mode" -#~ msgstr "Rilievo scuro" - #~ msgid "The directory where autosaves will be written" #~ msgstr "Cartella in cui scrivere i salvataggi automatici" -#~ msgid "_Description" -#~ msgstr "_Descrizione" - -#~ msgid "Bitmap size" -#~ msgstr "Dimensione bitmap" - -#~ msgid "Export area is drawing" -#~ msgstr "L'area esportata è il disegno" - -#~ msgid "Export area is page" -#~ msgstr "L'area esportata è la pagina" - -#~ msgid "%s%s. %s." -#~ msgstr "%s%s. %s." - -#~ msgid "Back_ground:" -#~ msgstr "Sfo_ndo:" - #~ msgid "Color Management" #~ msgstr "Gestione del colore" - -#~ msgid "Add" -#~ msgstr "Aggiungi" - -#, fuzzy -#~ msgid "Re_place:" -#~ msgstr "Rimpiazza:" - -#, fuzzy -#~ msgid "S_election" -#~ msgstr "Selezione" - -#, fuzzy -#~ msgid "Attribute _Name" -#~ msgstr "Nome attributo" - -#, fuzzy -#~ msgid "Attribute _Value" -#~ msgstr "Valore attributo" - -#, fuzzy -#~ msgid "objects" -#~ msgstr "Oggetti" - -#, fuzzy -#~ msgid "found" -#~ msgstr "Arrotondamento" - -#, fuzzy -#~ msgid "Text Replace" -#~ msgstr "Rimpiazza" - #~ msgid "Major grid line emphasizing" #~ msgstr "Rilievo delle linee principali della griglia" @@ -40650,24 +39966,6 @@ msgstr "Input XAML" #~ "Permette agli elementi del master di espandere i loro contenitori nella " #~ "direzione voluta" -#~ msgid "Mouse" -#~ msgstr "Mouse" - -#~ msgid "User data: " -#~ msgstr "Dati utente:" - -#~ msgid "System config: " -#~ msgstr "Configurazione sistema:" - -#~ msgid "PIXMAP: " -#~ msgstr "PIXMAP: " - -#~ msgid "DATA: " -#~ msgstr "DATI:" - -#~ msgid "UI: " -#~ msgstr "UI:" - #~ msgid "General system information" #~ msgstr "Informazioni generali sul sistema" @@ -41064,14 +40362,6 @@ msgstr "Input XAML" #~ msgid "White, blurred drop glow" #~ msgstr "Alone proiettato, bianco e sfuocato" -#, fuzzy -#~ msgid "Y frequency:" -#~ msgstr "Frequenza base:" - -#, fuzzy -#~ msgid "Transluscent" -#~ msgstr "Traslucido" - #, fuzzy #~ msgid "To spray a path by pushing, select it and drag over it." #~ msgstr "" @@ -41091,12 +40381,6 @@ msgstr "Input XAML" #~ "«aggancia agli angoli dei riquadri»; l'area di azione dell'aggancio sarà " #~ "ristretta alle vicinanze del cursore)" -#~ msgid "Angle (degrees):" -#~ msgstr "Angolo (gradi):" - -#~ msgid "Print Previe_w" -#~ msgstr "Anteprima di stam_pa" - #~ msgid "Preview document printout" #~ msgstr "Mostra l'anteprima del documento" @@ -41212,15 +40496,6 @@ msgstr "Input XAML" #~ msgid "Year (0 for current)" #~ msgstr "Anno (0 per l'attuale)" -#~ msgid "clonetiler|H" -#~ msgstr "H" - -#~ msgid "clonetiler|S" -#~ msgstr "S" - -#~ msgid "clonetiler|L" -#~ msgstr "L" - #~ msgid "find|Clones" #~ msgstr "Cloni" @@ -41366,63 +40641,6 @@ msgstr "Input XAML" #~ msgid "Switch to print colors preview mode" #~ msgstr "Passa alla modalità di visualizzazione normale" -#~ msgid "fontselector|Style" -#~ msgstr "Stile" - -#, fuzzy -#~ msgid "select toolbar|X position" -#~ msgstr "Posizione X" - -#, fuzzy -#~ msgid "select toolbar|X" -#~ msgstr "X" - -#, fuzzy -#~ msgid "select toolbar|Y position" -#~ msgstr "Posizione Y" - -#, fuzzy -#~ msgid "select toolbar|Y" -#~ msgstr "Y" - -#, fuzzy -#~ msgid "select toolbar|Width" -#~ msgstr "Larghezza" - -#, fuzzy -#~ msgid "select toolbar|W" -#~ msgstr "W" - -#, fuzzy -#~ msgid "select toolbar|Height" -#~ msgstr "Altezza" - -#, fuzzy -#~ msgid "select toolbar|H" -#~ msgstr "H" - -#~ msgid "_Y" -#~ msgstr "_Y" - -#~ msgid "StrokeWidth|Width:" -#~ msgstr "Larghezza:" - -#, fuzzy -#~ msgid "Task" -#~ msgstr "Masc_hera" - -#, fuzzy -#~ msgid "Task:" -#~ msgstr "Masc_hera" - -#, fuzzy -#~ msgid "Radius [px]" -#~ msgstr "Raggio / px" - -#, fuzzy -#~ msgid "Rotation [deg]" -#~ msgstr "Rotazione (gradi)" - #~ msgid "Refresh the icons" #~ msgstr "Aggiorna le icone" @@ -41585,18 +40803,6 @@ msgstr "Input XAML" #~ msgid "Adjust the rotation angle" #~ msgstr "Modifica l'angolo di rotazione" -#, fuzzy -#~ msgid "Elliptic Pen" -#~ msgstr "Ellisse" - -#, fuzzy -#~ msgid "Sharp" -#~ msgstr "Nitidezza" - -#, fuzzy -#~ msgid "Choose pen type" -#~ msgstr "Cambia tipo di segmento" - #~ msgid "Maximal stroke width" #~ msgstr "Larghezza massima del contorno" @@ -41606,32 +40812,12 @@ msgstr "Input XAML" #~ msgid "Min/Max width ratio" #~ msgstr "Rapporto min/max larghezza" -#, fuzzy -#~ msgid "Choose start capping type" -#~ msgstr "Cambia tipo di segmento" - -#, fuzzy -#~ msgid "Choose end capping type" -#~ msgstr "Cambia tipo di segmento" - -#, fuzzy -#~ msgid "Grow for" -#~ msgstr "Modalità accrescimento" - #~ msgid "Make the stroke thiner near it's start" #~ msgstr "Rende il contorno più sottile vicino all'inizio" #~ msgid "Make the stroke thiner near it's end" #~ msgstr "Rende il contorno più sottile vicino alla fine" -#, fuzzy -#~ msgid "Round ends" -#~ msgstr "Arrotondamento" - -#, fuzzy -#~ msgid "Strokes end with a round end" -#~ msgstr "Metallo pressato con bordi incurvati" - #~ msgid "Control handle 9" #~ msgstr "Maniglia di controllo 9" @@ -41646,30 +40832,6 @@ msgstr "Input XAML" #~ msgid "Line which serves as 'mirror' for the reflection" #~ msgstr "Linea da usare come \"specchio\" per la riflessione" -#, fuzzy -#~ msgid "Specifies the left end of the parallel" -#~ msgstr "Determina il colore della sorgente luminosa." - -#, fuzzy -#~ msgid "Adjust the \"left\" end of the parallel" -#~ msgstr "Modifica i passaggi del gradiente" - -#, fuzzy -#~ msgid "Adjust the \"right\" end of the parallel" -#~ msgstr "Modifica i passaggi del gradiente" - -#, fuzzy -#~ msgid "Print unit after path length" -#~ msgstr "Larghezza in unità di lunghezza" - -#, fuzzy -#~ msgid "Adjust the bisector's \"left\" end" -#~ msgstr "Modifica i passaggi del gradiente" - -#, fuzzy -#~ msgid "Adjust the bisector's \"right\" end" -#~ msgstr "Modifica i passaggi del gradiente" - #~ msgid "Scale factor in x direction" #~ msgstr "Fattore di ridimensionamento nella direzione x" @@ -41747,48 +40909,12 @@ msgstr "Input XAML" #~ msgid "Active session file:" #~ msgstr "File sessione attiva:" -#~ msgid "Close file" -#~ msgstr "Chiudi file" - #~ msgid "Rewind" #~ msgstr "Riavvolgi" #~ msgid "Go back one change" #~ msgstr "indietro di una modifica" -#~ msgid "Pause" -#~ msgstr "Pausa" - -#~ msgid "Go forward one change" -#~ msgstr "Avanti di una modifica" - -#~ msgid "Play" -#~ msgstr "Play" - -#~ msgid "Open session file" -#~ msgstr "Apri file sessione" - -#~ msgid "_Use SSL" -#~ msgstr "_Usa SSL" - -#~ msgid "_Register" -#~ msgstr "_Registra" - -#~ msgid "_Server:" -#~ msgstr "_Server:" - -#~ msgid "_Username:" -#~ msgstr "Nome _utente:" - -#~ msgid "_Password:" -#~ msgstr "_Password:" - -#~ msgid "P_ort:" -#~ msgstr "P_orta:" - -#~ msgid "Connect" -#~ msgstr "Connetti" - #~ msgid "Establishing connection to Jabber server %1" #~ msgstr "Connessione in corso al server jabber %1" @@ -42067,12 +41193,6 @@ msgstr "Input XAML" #~ msgid "Document exported..." #~ msgstr "Documento esportato..." -#~ msgid "Username:" -#~ msgstr "Nome utente:" - -#~ msgid "Password:" -#~ msgstr "Password:" - #~ msgid "Export To Open Clip Art Library" #~ msgstr "Esporta Open Clip Art" @@ -42081,34 +41201,6 @@ msgstr "Input XAML" #~ msgid "Light z-Position" #~ msgstr "Posizione z dell'illuminazione" - -#~ msgid "Scaling Factor" -#~ msgstr "Fattore di ridimensionamento" - -#, fuzzy -#~ msgid "polyhedron|Show:" -#~ msgstr "Poliedro 3D" - -#, fuzzy -#~ msgid "restack|Bottom" -#~ msgstr "Fondo" - -#, fuzzy -#~ msgid "restack|Left" -#~ msgstr "Reimpila" - -#, fuzzy -#~ msgid "restack|Middle" -#~ msgstr "Metà" - -#, fuzzy -#~ msgid "restack|Right" -#~ msgstr "Reimpila" - -#, fuzzy -#~ msgid "restack|Top" -#~ msgstr "Reimpila" - #~ msgid "The second path must be exactly four nodes long." #~ msgstr "Il secondo tracciato deve essere lungo esattamente quattro nodi." @@ -42130,21 +41222,6 @@ msgstr "Input XAML" #~ msgid "Interruption width" #~ msgstr "larghezza interruzione" -#~ msgid "AI 8.0 Output" -#~ msgstr "Output AI 8.0" - -#~ msgid "Adobe Illustrator 8.0 (*.ai)" -#~ msgstr "Adobe Illustrator 8.0 (*.ai)" - -#~ msgid "Write Adobe Illustrator 8.0 (Postscript-based)" -#~ msgstr "Scrivi Adobe Illustrator 8.0 (basato su Postscript)" - -#~ msgid "EPSI Output" -#~ msgstr "Output EPSI" - -#~ msgid "Encapsulated Postscript Interchange (*.epsi)" -#~ msgstr "Encapsulated Postscript Interchange (*.epsi)" - #~ msgid "Encapsulated Postscript with a thumbnail" #~ msgstr "Encapsulated Postscript con anteprima" @@ -42166,15 +41243,6 @@ msgstr "Input XAML" #~ msgid "Export area is whole canvas" #~ msgstr "L'area esportata è l'intera tela" -#~ msgid "Export canvas" -#~ msgstr "Esporta tela" - -#~ msgid "AutoCAD DXF (*.dxf)" -#~ msgstr "AutoCAD DXF (*.dxf)" - -#~ msgid "HSL bubbles" -#~ msgstr "Bolle HSL" - #~ msgid "" #~ "Highly flexible bubbles effect depending on color hue saturation and " #~ "luminance" @@ -42210,9 +41278,6 @@ msgstr "Input XAML" #~ msgid "Seed" #~ msgstr "Seme" -#~ msgid "draw-geometry-inactive" -#~ msgstr "draw-geometry-inactive" - #~ msgid "Organization" #~ msgstr "Organizzazione" @@ -42234,17 +41299,6 @@ msgstr "Input XAML" #~ msgid "Median Filter" #~ msgstr "Filtro mediano" -#, fuzzy -#~ msgid "Snap to intersections of a grid with a guide" -#~ msgstr "Aggancio alle intersezioni di" - -#~ msgid "Embed All Images" -#~ msgstr "Incorpora tutte le immagini" - -#, fuzzy -#~ msgid "Major Y Division Spacing" -#~ msgstr "Spaziatura orizzontale" - #~ msgid "Kernel Array" #~ msgstr "Vettore centrale" @@ -42254,18 +41308,9 @@ msgstr "Input XAML" #~ msgid "Cairo PDF Output" #~ msgstr "Output Cairo PDF" -#~ msgid "PDF via Cairo (*.pdf)" -#~ msgstr "PDF via Cairo (*.pdf)" - -#~ msgid "PDF File" -#~ msgstr "File PDF" - #~ msgid "Cairo PS Output" #~ msgstr "Output Cairo PS" -#~ msgid "PostScript via Cairo (*.ps)" -#~ msgstr "PostScript via Cairo (*.ps)" - #~ msgid "Encapsulated Postscript Output" #~ msgstr "Encapsulated Postscript Output" @@ -42313,9 +41358,6 @@ msgstr "Input XAML" #~ "Usare '> filename' per stampare su file.\n" #~ "Usare '| prog arg...' per mandare in pipe ad un programma." -#~ msgid "PDF Print" -#~ msgstr "Stampa PDF" - #~ msgid "Print using PostScript operators" #~ msgstr "Stampa usando gli operatori PostScript" @@ -42364,10 +41406,6 @@ msgstr "Input XAML" #~ "Inkscape verrà eseguito con i menù predefiniti.\n" #~ "I nuovi menù non verranno salvati." -#, fuzzy -#~ msgid "Change LPE point parameter" -#~ msgstr "Modifica parametri del punto" - #~ msgid "Embed fonts on export (Type 1 only) (EPS)" #~ msgstr "Includi font all'esportazione (solo Type 1) (EPS)" @@ -42520,13 +41558,6 @@ msgstr "Input XAML" #~ "dxf2svg potrebbe essere fornito da Inkscape, ma è reperibile anche presso " #~ "http://dxf-svg-convert.sourceforge.net/" -#, fuzzy -#~ msgid "Report Normal Vector Information" -#~ msgstr "Informazioni sull'uso della memoria" - -#~ msgid "Postscript (*.ps)" -#~ msgstr "Postscript (*.ps)" - #~ msgid "" #~ "Cannot set %s: Another element with value %s already exists!" #~ msgstr "" @@ -42638,9 +41669,6 @@ msgstr "Input XAML" #~ msgid "Preferred resolution (dpi) of bitmaps" #~ msgstr "Risoluzione preferita (dpi) delle bitmap" -#~ msgid "PLACEHOLDER, DO NOT TRANSLATE" -#~ msgstr "PLACEHOLDER, DO NOT TRANSLATE" - #~ msgid "" #~ "Toggles whether the dialog stays for multiple executions or disappears " #~ "after one" @@ -42661,9 +41689,6 @@ msgstr "Input XAML" #~ "Maiusc per separare il fuocoCentro e fuoco del " #~ "gradiente radiale; trascinare con Maiusc per separare il fuoco" -#~ msgid "???" -#~ msgstr "???" - #, fuzzy #~ msgid "" #~ "0 out of %i node selected. Click, Shift+click%i of %i node selected in %i of %i subpaths. " -#~ "%s.%i of %i nodes selected in %i of %i " -#~ "subpaths. %s." -#~ msgstr "%i di %i nodo selezionato; %s. %s." - #~ msgid "Snap at specified d_istance" #~ msgstr "Aggancia alla d_istanza specificata" @@ -42694,74 +41712,12 @@ msgstr "Input XAML" #~ msgid "Snap at specified distan_ce" #~ msgstr "Aggancia alla distanza spe_cificata" -#~ msgid "These values will be used as default metadata for new documents" -#~ msgstr "" -#~ "Questi valori verranno usati come metadati predefiniti per i nuovi " -#~ "documenti" - -#~ msgid "Subject:" -#~ msgstr "Oggetto:" - -#~ msgid "Contributor:" -#~ msgstr "Contributori:" - -#~ msgid "Default Metadata" -#~ msgstr "Metadati predefiniti" - -#~ msgid "Creative Commons By 3.0" -#~ msgstr "Creative Commons By 3.0" - -#~ msgid "Creative Commons By Sa 3.0" -#~ msgstr "Creative Commons By Sa 3.0" - -#~ msgid "Creative Commons By Nd 3.0" -#~ msgstr "Creative Commons By Nd 3.0" - -#~ msgid "Creative Commons By Nc 3.0" -#~ msgstr "Creative Commons By Nc 3.0" - -#~ msgid "Creative Commons By Nc Sa 3.0" -#~ msgstr "Creative Commons By Nc Sa 3.0" - -#~ msgid "Creative Commons By Nc Nd 3.0" -#~ msgstr "Creative Commons By Nc Nd 3.0" - -#~ msgid "Default Licensing for new documents:" -#~ msgstr "Licenza predefinita per i nuovi documenti:" - -#~ msgid "All Rights Reserved" -#~ msgstr "Tutti i diritti riservati" - -#~ msgid "Creative Commons: Attribution" -#~ msgstr "Creative Commons: Attribution" - -#~ msgid "Creative Commons: Attribution-ShareAlike" -#~ msgstr "Creative Commons: Attribution-ShareAlike" - -#~ msgid "Creative Commons: Attribution-NoDerivatives" -#~ msgstr "Creative Commons: Attribution-NoDerivatives" - -#~ msgid "Creative Commons: Attribution-NonCommercial" -#~ msgstr "Creative Commons: Attribution-NonCommercial" - -#~ msgid "Creative Commons: Attribution-NonCommercial-ShareAlike" -#~ msgstr "Creative Commons: Attribution-NonCommercial-ShareAlike" - -#~ msgid "Creative Commons: Attribution-NonCommercial-NoDerivatives" -#~ msgstr "Creative Commons: Attribution-NonCommercial-NoDerivatives" - -#~ msgid "Free Art License" -#~ msgstr "Licenza Free Art" - #~ msgid "3D Box: Toggle VP" #~ msgstr "Solido 3D: attiva punto di fuga" #~ msgid "Angle of infinite vanishing point in X direction" #~ msgstr "Angolo del punto di fuga all'infinito sulla direzione X" -#~ msgid "Angle Y" -#~ msgstr "Angolo Y" - #~ msgid "Angle of infinite vanishing point in Y direction" #~ msgstr "Angolo del punto di fuga all'infinito sulla direzione Y" @@ -42819,8 +41775,5 @@ msgstr "Input XAML" #~ msgid "Enables application of the display using an ICC profile." #~ msgstr "Abilita la calibrazione del display usando un profilo ICC." -#~ msgid "Gradients" -#~ msgstr "Gradienti" - #~ msgid "Vertical kerning" #~ msgstr "Trasformazione verticale" -- cgit v1.2.3 From 4a6c4b8cbe4a68d172c0eeb333c23bcf19b2f3ff Mon Sep 17 00:00:00 2001 From: ohtsuka-yoshio Date: Wed, 14 Sep 2016 17:39:02 +0200 Subject: [Bug #459914] Non-ascii (ja) charactors aren't displayed properly in Handle to grid intersection. Fixed bugs: - https://launchpad.net/bugs/459914 (bzr r15116) --- src/display/canvas-text.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/display/canvas-text.cpp b/src/display/canvas-text.cpp index 7c019caf5..efef018e6 100644 --- a/src/display/canvas-text.cpp +++ b/src/display/canvas-text.cpp @@ -84,6 +84,7 @@ sp_canvastext_render (SPCanvasItem *item, SPCanvasBuf *buf) if (!buf->ct) return; + cairo_select_font_face(buf->ct, "sans-serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(buf->ct, cl->fontsize); if (cl->background){ @@ -138,6 +139,7 @@ sp_canvastext_update (SPCanvasItem *item, Geom::Affine const &affine, unsigned i cairo_surface_t *tmp_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); cairo_t* tmp_buf = cairo_create(tmp_surface); + cairo_select_font_face(tmp_buf, "sans-serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_set_font_size(tmp_buf, cl->fontsize); cairo_text_extents_t extents; cairo_text_extents(tmp_buf, cl->text, &extents); -- cgit v1.2.3 From c9aa88a1d57173cdcee7c35a78c82ba2adf54b32 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 16 Sep 2016 00:13:50 +0200 Subject: Duplicating text along path and its path relinks to the new path (if the prefs option is set) Fixed bugs: - https://launchpad.net/bugs/312116 (bzr r15117) --- src/selection-chemistry.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 37a0e42e1..7606fc477 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -497,6 +497,8 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat const gchar *id = old_ids[i]; SPObject *old_clone = doc->getObjectById(id); SPUse *use = dynamic_cast(old_clone); + SPOffset *offset = dynamic_cast(old_clone); + SPText *text = dynamic_cast(old_clone); if (use) { SPItem *orig = use->get_original(); if (!orig) // orphaned @@ -510,14 +512,20 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat new_clone->requestDisplayUpdate(SP_OBJECT_MODIFIED_FLAG); } } - } else { - SPOffset *offset = dynamic_cast(old_clone); - if (offset) { - for (guint j = 0; j < old_ids.size(); j++) { - gchar *source_href = offset->sourceHref; - if (source_href && source_href[0]=='#' && !strcmp(source_href+1, old_ids[j])) { - doc->getObjectById(new_ids[i])->getRepr()->setAttribute("xlink:href", Glib::ustring("#") + new_ids[j]); - } + } else if (offset) { + gchar *source_href = offset->sourceHref; + for (guint j = 0; j < old_ids.size(); j++) { + if (source_href && source_href[0]=='#' && !strcmp(source_href+1, old_ids[j])) { + doc->getObjectById(new_ids[i])->getRepr()->setAttribute("xlink:href", Glib::ustring("#") + new_ids[j]); + } + } + } else if (text) { + SPTextPath *textpath = dynamic_cast(text->firstChild()); + if (!textpath) continue; + const gchar *source_href = sp_textpath_get_path_item(textpath)->getId(); + for (guint j = 0; j < old_ids.size(); j++) { + if (!strcmp(source_href, old_ids[j])) { + textpath->getRepr()->setAttribute("xlink:href", Glib::ustring("#") + new_ids[j]); } } } -- cgit v1.2.3 From 8ed02c48e6b56a5ea1f204a7938ee20a3da2a65a Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 16 Sep 2016 00:31:44 +0200 Subject: Fix minor problem in previous commit Fixed bugs: - https://launchpad.net/bugs/312116 (bzr r15118) --- src/selection-chemistry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp index 7606fc477..834f82edc 100644 --- a/src/selection-chemistry.cpp +++ b/src/selection-chemistry.cpp @@ -525,7 +525,7 @@ void sp_selection_duplicate(SPDesktop *desktop, bool suppressDone, bool duplicat const gchar *source_href = sp_textpath_get_path_item(textpath)->getId(); for (guint j = 0; j < old_ids.size(); j++) { if (!strcmp(source_href, old_ids[j])) { - textpath->getRepr()->setAttribute("xlink:href", Glib::ustring("#") + new_ids[j]); + doc->getObjectById(new_ids[i])->firstChild()->getRepr()->setAttribute("xlink:href", Glib::ustring("#") + new_ids[j]); } } } -- cgit v1.2.3 From c2056bd9ce3f1150252db333e0a512ab3c4a08dd Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Fri, 16 Sep 2016 00:37:40 +0200 Subject: adds a layer to put things in when opening raster files Fixed bugs: - https://launchpad.net/bugs/394503 (bzr r15119) --- src/extension/internal/gdkpixbuf-input.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/extension/internal/gdkpixbuf-input.cpp b/src/extension/internal/gdkpixbuf-input.cpp index b30c67a4d..e0dc90981 100644 --- a/src/extension/internal/gdkpixbuf-input.cpp +++ b/src/extension/internal/gdkpixbuf-input.cpp @@ -134,8 +134,13 @@ GdkpixbufInput::open(Inkscape::Extension::Input *mod, char const *uri) } // Add it to the current layer - doc->getRoot()->appendChildRepr(image_node); + Inkscape::XML::Node *layer_node = xml_doc->createElement("svg:g"); + layer_node->setAttribute("inkscape:groupmode", "layer"); + layer_node->setAttribute("inkscape:label", "Image"); + doc->getRoot()->appendChildRepr(layer_node); + layer_node->appendChild(image_node); Inkscape::GC::release(image_node); + Inkscape::GC::release(layer_node); fit_canvas_to_drawing(doc); // Set viewBox if it doesn't exist -- cgit v1.2.3 From 1e866635c997ac0f77c2ee4a798f185061ab0d4c Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 20 Sep 2016 12:51:47 +0200 Subject: Fix typo (font-variant-east_asian -> font-variant-east-asian). (bzr r15120) --- src/style.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style.cpp b/src/style.cpp index e51733cf0..930e271ad 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -110,7 +110,7 @@ SPStyle::SPStyle(SPDocument *document_in, SPObject *object_in) : font_variant_caps( "font-variant-caps", enum_font_variant_caps, SP_CSS_FONT_VARIANT_CAPS_NORMAL ), font_variant_numeric( "font-variant-numeric", enum_font_variant_numeric ), font_variant_alternates("font-variant-alternates", enum_font_variant_alternates, SP_CSS_FONT_VARIANT_ALTERNATES_NORMAL ), - font_variant_east_asian("font-variant-east_asian", enum_font_variant_east_asian, SP_CSS_FONT_VARIANT_EAST_ASIAN_NORMAL ), + font_variant_east_asian("font-variant-east-asian", enum_font_variant_east_asian, SP_CSS_FONT_VARIANT_EAST_ASIAN_NORMAL ), font_feature_settings( "font-feature-settings", "normal" ), // Text related properties -- cgit v1.2.3 From e3f9123ad143adc30ab486c5e9eb5728b3858dd2 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 20 Sep 2016 13:10:36 +0200 Subject: Update CSS tables (font-variants, etc.). (bzr r15121) --- share/attributes/css_defaults | 20 +++++++++++++- share/attributes/cssprops | 20 +++++++++++++- share/attributes/genMapDataCSS.pl | 57 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 94 insertions(+), 3 deletions(-) diff --git a/share/attributes/css_defaults b/share/attributes/css_defaults index 396c8a2d9..ff9b39b6d 100644 --- a/share/attributes/css_defaults +++ b/share/attributes/css_defaults @@ -46,6 +46,8 @@ "font-family" - "NO_DEFAULT" - "yes" +"font-feature-settings" - "normal" - "yes" + "font-size" - "medium" - "yes, the computed value is inherited" "font-size-adjust" - "none" - "yes" @@ -56,6 +58,18 @@ "font-variant" - "normal" - "yes" +"font-variant-alternates" - "normal" - "yes" + +"font-variant-caps" - "normal" - "yes" + +"font-variant-east-asian" - "normal" - "yes" + +"font-variant-ligatures" - "normal" - "yes" + +"font-variant-numeric" - "normal" - "yes" + +"font-variant-position" - "normal" - "yes" + "font-weight" - "normal" - "yes" "glyph-orientation-horizontal" - "0deg" - "yes" @@ -110,7 +124,7 @@ "solid-color" - "#000000" - "no" -"solid-opacity" - "1.0" - "no" +"solid-opacity" - "1" - "no" "stop-color" - "black" - "no" @@ -148,10 +162,14 @@ "text-decoration-style" - "solid" - "no" +"text-indent" - "0" - "yes" + "text-orientation" - "mixed" - "yes" "text-rendering" - "auto" - "yes" +"text-transform" - "none" - "yes" + "title" - "NO DEFAULT" - "no" "transform" - "none" - "no" diff --git a/share/attributes/cssprops b/share/attributes/cssprops index 1b7776284..fb7397c4e 100644 --- a/share/attributes/cssprops +++ b/share/attributes/cssprops @@ -46,6 +46,8 @@ "font-family" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"font-feature-settings" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + "font-size" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "font-size-adjust" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" @@ -54,7 +56,19 @@ "font-style" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"font-variant" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"font-variant" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-alternates" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-caps" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-east-asian" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-ligatures" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-numeric" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-position" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "font-weight" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" @@ -148,10 +162,14 @@ "text-decoration-style" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan" +"text-indent" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + "text-orientation" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "text-rendering" - "text","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"text-transform" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + "title" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","g" "transform" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" diff --git a/share/attributes/genMapDataCSS.pl b/share/attributes/genMapDataCSS.pl index c025a68ec..46b0dd120 100755 --- a/share/attributes/genMapDataCSS.pl +++ b/share/attributes/genMapDataCSS.pl @@ -207,7 +207,7 @@ $properties{ "solid-color" }->{inherit} = "no"; push @{$properties{ "solid-opacity" }->{elements}}, @container_elements; push @{$properties{ "solid-opacity" }->{elements}}, @graphics_elements; -$properties{ "solid-opacity" }->{default} = "1.0"; +$properties{ "solid-opacity" }->{default} = "1"; $properties{ "solid-opacity" }->{inherit} = "no"; push @{$properties{ "white-space" }->{elements}}, @container_elements; @@ -232,6 +232,18 @@ $properties{ "shape-margin" }->{default} = "0"; $properties{ "shape-margin" }->{inherit} = "no"; +#CSS Text Level 3 +push @{$properties{ "text-indent" }->{elements}}, @container_elements; +push @{$properties{ "text-indent" }->{elements}}, @text_content_elements; +$properties{ "text-indent" }->{default} = "0"; +$properties{ "text-indent" }->{inherit} = "yes"; + +push @{$properties{ "text-transform" }->{elements}}, @container_elements; +push @{$properties{ "text-transform" }->{elements}}, @text_content_elements; +$properties{ "text-transform" }->{default} = "none"; +$properties{ "text-transform" }->{inherit} = "yes"; + + # CSS Text Decoration push @{$properties{ "text-decoration-line" }->{elements}}, @container_elements; push @{$properties{ "text-decoration-line" }->{elements}}, @text_content_elements; @@ -258,6 +270,49 @@ push @{$properties{ "text-decoration-stroke" }->{elements}}, @text_content_eleme $properties{ "text-decoration-stroke" }->{default} = "NO_DEFAULT"; $properties{ "text-decoration-stroke" }->{inherit} = "no"; + +# CSS Fonts +push @{$properties{ "font-variant-ligatures" }->{elements}}, @container_elements; +push @{$properties{ "font-variant-ligatures" }->{elements}}, @text_content_elements; +$properties{ "font-variant-ligatures" }->{default} = "normal"; +$properties{ "font-variant-ligatures" }->{inherit} = "yes"; + +push @{$properties{ "font-variant-position" }->{elements}}, @container_elements; +push @{$properties{ "font-variant-position" }->{elements}}, @text_content_elements; +$properties{ "font-variant-position" }->{default} = "normal"; +$properties{ "font-variant-position" }->{inherit} = "yes"; + +push @{$properties{ "font-variant-caps" }->{elements}}, @container_elements; +push @{$properties{ "font-variant-caps" }->{elements}}, @text_content_elements; +$properties{ "font-variant-caps" }->{default} = "normal"; +$properties{ "font-variant-caps" }->{inherit} = "yes"; + +push @{$properties{ "font-variant-numeric" }->{elements}}, @container_elements; +push @{$properties{ "font-variant-numeric" }->{elements}}, @text_content_elements; +$properties{ "font-variant-numeric" }->{default} = "normal"; +$properties{ "font-variant-numeric" }->{inherit} = "yes"; + +push @{$properties{ "font-variant-alternates" }->{elements}}, @container_elements; +push @{$properties{ "font-variant-alternates" }->{elements}}, @text_content_elements; +$properties{ "font-variant-alternates" }->{default} = "normal"; +$properties{ "font-variant-alternates" }->{inherit} = "yes"; + +push @{$properties{ "font-variant-east-asian" }->{elements}}, @container_elements; +push @{$properties{ "font-variant-east-asian" }->{elements}}, @text_content_elements; +$properties{ "font-variant-east-asian" }->{default} = "normal"; +$properties{ "font-variant-east-asian" }->{inherit} = "yes"; + +push @{$properties{ "font-variant" }->{elements}}, @container_elements; +push @{$properties{ "font-variant" }->{elements}}, @text_content_elements; +$properties{ "font-variant" }->{default} = "normal"; +$properties{ "font-variant" }->{inherit} = "yes"; + +push @{$properties{ "font-feature-settings" }->{elements}}, @container_elements; +push @{$properties{ "font-feature-settings" }->{elements}}, @text_content_elements; +$properties{ "font-feature-settings" }->{default} = "normal"; +$properties{ "font-feature-settings" }->{inherit} = "yes"; + + # CSS Writing Modes push @{$properties{ "text-orientation" }->{elements}}, @container_elements; push @{$properties{ "text-orientation" }->{elements}}, @text_content_elements; -- cgit v1.2.3 From d48547bafeeaf93e805fac07208a457ef8162a2a Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 20 Sep 2016 13:18:06 +0200 Subject: Add new function that removes properties with default values from SPCSSAttr. (bzr r15122) --- src/attribute-rel-util.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/attribute-rel-util.h | 5 +++++ 2 files changed, 41 insertions(+) diff --git a/src/attribute-rel-util.cpp b/src/attribute-rel-util.cpp index cf1140219..5e770d4ae 100644 --- a/src/attribute-rel-util.cpp +++ b/src/attribute-rel-util.cpp @@ -262,6 +262,42 @@ void sp_attribute_clean_style(Node* repr, SPCSSAttr *css, unsigned int flags) { } +/** + * Remove CSS style properties with default values. + */ +void sp_attribute_purge_default_style(SPCSSAttr *css, unsigned int flags) { + + g_return_if_fail (css != NULL); + + // Loop over all properties in "style" node, keeping track of which to delete. + std::set toDelete; + for ( List iter = css->attributeList() ; iter ; ++iter ) { + + gchar const * property = g_quark_to_string(iter->key); + gchar const * value = iter->value; + + // If property value is same as default mark for deletion. + if ( SPAttributeRelCSS::findIfDefault( property, value ) ) { + + if ( flags & SP_ATTR_CLEAN_DEFAULT_WARN ) { + g_warning( "Preferences CSS Style property: \"%s\" with default value (%s) not needed.", + property, value ); + } + if ( flags & SP_ATTR_CLEAN_DEFAULT_REMOVE ) { + toDelete.insert( property ); + } + continue; + } + + } // End loop over style properties + + // Delete unneeded style properties. Do this at the end so as to not perturb List iterator. + for( std::set::const_iterator iter_d = toDelete.begin(); iter_d != toDelete.end(); ++iter_d ) { + sp_repr_css_set_property( css, (*iter_d).c_str(), NULL ); + } + +} + /** * Check one attribute on an element */ diff --git a/src/attribute-rel-util.h b/src/attribute-rel-util.h index 604987779..b8b1f6875 100644 --- a/src/attribute-rel-util.h +++ b/src/attribute-rel-util.h @@ -67,6 +67,11 @@ Glib::ustring sp_attribute_clean_style(Node *repr, gchar const *string, unsigned */ void sp_attribute_clean_style(Node* repr, SPCSSAttr *css, unsigned int flags); +/** + * Remove CSS style properties with default values. + */ +void sp_attribute_purge_default_style(SPCSSAttr *css, unsigned int flags); + /** * Check one attribute on an element */ -- cgit v1.2.3 From 3e00389a40816c12b9b35e3061a752295387aad9 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 20 Sep 2016 13:19:44 +0200 Subject: Remove properties with default values from 'style' entries in users preferences.xml file. This prevents 'style' entries from becoming full of unnecessary properties. (bzr r15123) --- src/preferences.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/preferences.cpp b/src/preferences.cpp index 988604a14..4d522a1d8 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -24,6 +24,7 @@ #include "xml/node-iterators.h" #include "xml/attribute-record.h" #include "util/units.h" +#include "attribute-rel-util.h" #define PREFERENCES_FILE_NAME "preferences.xml" @@ -495,6 +496,7 @@ void Preferences::mergeStyle(Glib::ustring const &pref_path, SPCSSAttr *style) { SPCSSAttr *current = getStyle(pref_path); sp_repr_css_merge(current, style); + sp_attribute_purge_default_style(current, SP_ATTR_CLEAN_DEFAULT_REMOVE); Glib::ustring css_str; sp_repr_css_write_string(current, css_str); _setRawValue(pref_path, css_str); -- cgit v1.2.3 From efef5e86d229e8fe2022d6178f3da02b17ab7896 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Fri, 23 Sep 2016 23:47:26 +0200 Subject: Fix bug pointed in inkscape devel by Miguel Lopez and CR. Caution now rotate copies and perspective envelope store in a better way the dropdown widgets -enums- (bzr r15124) --- src/live_effects/lpe-mirror_symmetry.cpp | 17 ++++++++++------- src/live_effects/lpe-perspective-envelope.cpp | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index a7459faed..69bfaab9a 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -25,11 +25,11 @@ namespace Inkscape { namespace LivePathEffect { static const Util::EnumData ModeTypeData[MT_END] = { - { MT_V, N_("Vertical Page Center"), "Vertical Page Center, use select tool to move item instead line" }, - { MT_H, N_("Horizontal Page Center"), "Horizontal Page Center, use select tool to move item instead line" }, - { MT_FREE, N_("Free from reflection line"), "Free from path" }, - { MT_X, N_("X from middle knot"), "X from middle knot" }, - { MT_Y, N_("Y from middle knot"), "Y from middle knot" } + { MT_V, N_("Vertical Page Center"), "vertical" }, + { MT_H, N_("Horizontal Page Center"), "horizontale" }, + { MT_FREE, N_("Free from reflection line"), "free" }, + { MT_X, N_("X from middle knot"), "X" }, + { MT_Y, N_("Y from middle knot"), "Y" } }; static const Util::EnumDataConverter MTConverter(ModeTypeData, MT_END); @@ -178,6 +178,9 @@ LPEMirrorSymmetry::doEffect_path (Geom::PathVector const & path_in) Geom::Translate m1(point_a[0], point_a[1]); double hyp = Geom::distance(point_a, point_b); + if (hyp == 0) { + hyp = 0.000001; + } double c = (point_b[0] - point_a[0]) / hyp; // cos(alpha) double s = (point_b[1] - point_a[1]) / hyp; // sin(alpha) @@ -292,8 +295,8 @@ LPEMirrorSymmetry::doEffect_path (Geom::PathVector const & path_in) } if (!fuse_paths || discard_orig_path) { - for (int i = 0; i < static_cast(path_in.size()); ++i) { - path_out.push_back(path_in[i] * m); + for (size_t i = 0; i < original_pathv.size(); ++i) { + path_out.push_back(original_pathv[i] * m); } } diff --git a/src/live_effects/lpe-perspective-envelope.cpp b/src/live_effects/lpe-perspective-envelope.cpp index 8a6a95f2e..6a6b59519 100644 --- a/src/live_effects/lpe-perspective-envelope.cpp +++ b/src/live_effects/lpe-perspective-envelope.cpp @@ -31,8 +31,8 @@ enum DeformationType { }; static const Util::EnumData DeformationTypeData[] = { - {DEFORMATION_PERSPECTIVE , N_("Perspective"), "Perspective"}, - {DEFORMATION_ENVELOPE , N_("Envelope deformation"), "Envelope deformation"} + {DEFORMATION_PERSPECTIVE , N_("Perspective"), "perspective"}, + {DEFORMATION_ENVELOPE , N_("Envelope deformation"), "envelope_deformation"} }; static const Util::EnumDataConverter DeformationTypeConverter(DeformationTypeData, sizeof(DeformationTypeData)/sizeof(*DeformationTypeData)); -- cgit v1.2.3 From c1a2006fd8f82aace5415027f6d94e137d990875 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 24 Sep 2016 09:51:04 +0200 Subject: Code improvements on mirror symmetry (bzr r15125) --- src/live_effects/lpe-mirror_symmetry.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index 69bfaab9a..a9fb36626 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -178,13 +178,13 @@ LPEMirrorSymmetry::doEffect_path (Geom::PathVector const & path_in) Geom::Translate m1(point_a[0], point_a[1]); double hyp = Geom::distance(point_a, point_b); - if (hyp == 0) { - hyp = 0.000001; + double cos = 0; + double sen = 0; + if (hyp > 0) { + cos = (point_b[0] - point_a[0]) / hyp; + sen = (point_b[1] - point_a[1]) / hyp; } - double c = (point_b[0] - point_a[0]) / hyp; // cos(alpha) - double s = (point_b[1] - point_a[1]) / hyp; // sin(alpha) - - Geom::Affine m2(c, -s, s, c, 0.0, 0.0); + Geom::Affine m2(cos, -sen, sen, cos, 0.0, 0.0); Geom::Scale sca(1.0, -1.0); Geom::Affine m = m1.inverse() * m2; -- cgit v1.2.3 From 77adf166cf949efcd02d1b19225fc788a3479186 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 24 Sep 2016 10:00:43 +0200 Subject: Typo fix for name var (bzr r15126) --- src/live_effects/lpe-mirror_symmetry.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index a9fb36626..afb7e2230 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -179,12 +179,12 @@ LPEMirrorSymmetry::doEffect_path (Geom::PathVector const & path_in) Geom::Translate m1(point_a[0], point_a[1]); double hyp = Geom::distance(point_a, point_b); double cos = 0; - double sen = 0; + double sin = 0; if (hyp > 0) { cos = (point_b[0] - point_a[0]) / hyp; - sen = (point_b[1] - point_a[1]) / hyp; + sin = (point_b[1] - point_a[1]) / hyp; } - Geom::Affine m2(cos, -sen, sen, cos, 0.0, 0.0); + Geom::Affine m2(cos, -sin, sin, cos, 0.0, 0.0); Geom::Scale sca(1.0, -1.0); Geom::Affine m = m1.inverse() * m2; -- cgit v1.2.3 From 47dfdcc650d9faaec121088fac69aa69d54299c3 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 24 Sep 2016 12:21:14 +0200 Subject: Fix bug 1627202 on mirror symmetry wrong results on transforms Fixed bugs: - https://launchpad.net/bugs/1627202 (bzr r15127) --- src/live_effects/lpe-mirror_symmetry.cpp | 14 +++++++++++++- src/live_effects/lpe-mirror_symmetry.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index afb7e2230..fc13415fd 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -87,7 +87,7 @@ void LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem) { using namespace Geom; - + original_bbox(lpeitem); Point point_a(boundingbox_X.max(), boundingbox_Y.min()); Point point_b(boundingbox_X.max(), boundingbox_Y.max()); Point point_c(boundingbox_X.max(), boundingbox_Y.middle()); @@ -144,6 +144,18 @@ LPEMirrorSymmetry::doBeforeEffect (SPLPEItem const* lpeitem) previous_center = center_point; } +void +LPEMirrorSymmetry::transform_multiply(Geom::Affine const& postmul, bool set) +{ + center_point *= postmul; + previous_center = center_point; + // cycle through all parameters. Most parameters will not need transformation, but path and point params do. + for (std::vector::iterator it = param_vector.begin(); it != param_vector.end(); ++it) { + Parameter * param = *it; + param->param_transform_multiply(postmul, set); + } +} + void LPEMirrorSymmetry::doOnApply (SPLPEItem const* lpeitem) { diff --git a/src/live_effects/lpe-mirror_symmetry.h b/src/live_effects/lpe-mirror_symmetry.h index 9e5b4d628..7ec4029e0 100644 --- a/src/live_effects/lpe-mirror_symmetry.h +++ b/src/live_effects/lpe-mirror_symmetry.h @@ -46,6 +46,7 @@ public: virtual ~LPEMirrorSymmetry(); virtual void doOnApply (SPLPEItem const* lpeitem); virtual void doBeforeEffect (SPLPEItem const* lpeitem); + virtual void transform_multiply(Geom::Affine const& postmul, bool set); virtual Geom::PathVector doEffect_path (Geom::PathVector const & path_in); /* the knotholder entity classes must be declared friends */ friend class MS::KnotHolderEntityCenterMirrorSymmetry; -- cgit v1.2.3 From 0033661a27b63f5438c008ec91232cf8ba45567c Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Sat, 24 Sep 2016 13:10:59 +0200 Subject: Get rid of Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion 'g_utf8_validate (text, len, NULL)' failed error. (bzr r15128) --- src/ui/dialog/xml-tree.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/dialog/xml-tree.cpp b/src/ui/dialog/xml-tree.cpp index eae33ff83..d05c52531 100644 --- a/src/ui/dialog/xml-tree.cpp +++ b/src/ui/dialog/xml-tree.cpp @@ -790,7 +790,8 @@ void XmlTree::on_attr_row_changed(SPXMLViewAttrList *attributes, const gchar * n void XmlTree::on_attr_unselect_row_clear_text() { attr_name.set_text(""); - attr_value.get_buffer()->set_text("", 0); + // Set text with empty Glib::ustring + attr_value.get_buffer()->set_text( Glib::ustring() ); } void XmlTree::onNameChanged() -- cgit v1.2.3 From 8cf7cf4a53027f31865afec8e6c4233bf8487ccb Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Sat, 24 Sep 2016 21:19:24 +0200 Subject: Fix a typo bug (bzr r15129) --- src/live_effects/lpe-mirror_symmetry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/live_effects/lpe-mirror_symmetry.cpp b/src/live_effects/lpe-mirror_symmetry.cpp index fc13415fd..4deb29d8f 100644 --- a/src/live_effects/lpe-mirror_symmetry.cpp +++ b/src/live_effects/lpe-mirror_symmetry.cpp @@ -26,7 +26,7 @@ namespace LivePathEffect { static const Util::EnumData ModeTypeData[MT_END] = { { MT_V, N_("Vertical Page Center"), "vertical" }, - { MT_H, N_("Horizontal Page Center"), "horizontale" }, + { MT_H, N_("Horizontal Page Center"), "horizontal" }, { MT_FREE, N_("Free from reflection line"), "free" }, { MT_X, N_("X from middle knot"), "X" }, { MT_Y, N_("Y from middle knot"), "Y" } -- cgit v1.2.3 From 254ebce199dee2763f0afbb115b014691d49a5ae Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sun, 25 Sep 2016 17:27:11 +0200 Subject: Changed order of selection items Fixed bugs: - https://launchpad.net/bugs/1627250 (bzr r15130) --- src/ui/dialog/align-and-distribute.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/dialog/align-and-distribute.cpp b/src/ui/dialog/align-and-distribute.cpp index ed9ec3b0a..7ba6df978 100644 --- a/src/ui/dialog/align-and-distribute.cpp +++ b/src/ui/dialog/align-and-distribute.cpp @@ -134,10 +134,10 @@ void ActionAlign::do_action(SPDesktop *desktop, int index) switch (AlignTarget(prefs->getInt("/dialogs/align/align-to", 6))) { case LAST: - focus = SP_ITEM(*selected.begin()); + focus = SP_ITEM(*--(selected.end())); break; case FIRST: - focus = SP_ITEM(*--(selected.end())); + focus = SP_ITEM(*selected.begin()); break; case BIGGEST: focus = selection->largestItem(horiz); -- cgit v1.2.3 From ee2e7c9c9907008de656773b98e1239a7f1af2a9 Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Sun, 25 Sep 2016 23:59:45 +0200 Subject: Exposes to the user additional PNG settings: Interlacing, grayscale, bit depth, alpha, compression level, PNG pHYs dpi. Fixed bugs: - https://launchpad.net/bugs/170650 (bzr r15131) --- src/display/cairo-utils.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++ src/display/cairo-utils.h | 2 ++ src/helper/png-write.cpp | 77 ++++++++++++++++++++++++---------------- src/helper/png-write.h | 6 ++-- src/ui/dialog/export.cpp | 61 +++++++++++++++++++++++++++++--- src/ui/dialog/export.h | 14 ++++++++ 6 files changed, 208 insertions(+), 38 deletions(-) diff --git a/src/display/cairo-utils.cpp b/src/display/cairo-utils.cpp index 24a75de4c..a7625f4a1 100644 --- a/src/display/cairo-utils.cpp +++ b/src/display/cairo-utils.cpp @@ -13,6 +13,7 @@ #endif #include "display/cairo-utils.h" +#include #include #include @@ -1321,6 +1322,91 @@ guint32 argb32_from_rgba(guint32 in) return px; } + +/** + * Converts a pixbuf to a PNG data structure. + * For 8-but RGBA png, this is like copying. + * + */ +const guchar* pixbuf_to_png(guchar const**rows, guchar* px, int num_rows, int num_cols, int stride, int color_type, int bit_depth) +{ + int n_fields = 1 + (color_type&2) + (color_type&4)/4; + const guchar* new_data = (const guchar*)malloc((n_fields * bit_depth * num_rows * num_cols)/8 + 64); + char* ptr = (char*) new_data; + int pad=0; //used when we write image data smaller than one byte (for instance in black and white images where 1px = 1bit) + for(int row = 0; row < num_rows; ++row){ + rows[row] = (const guchar*)ptr; + for(int col = 0; col < num_cols; ++col){ + guint32 *pixel = reinterpret_cast(px + row*stride)+col; +#if G_BYTE_ORDER == G_LITTLE_ENDIAN + //this part should probably be rewritten as (a tested, working) big endian, using htons() and ntohs() + guint64 a = (*pixel & 0xff000000) >> 24; + guint64 b = (*pixel & 0x00ff0000) >> 16; + guint64 g = (*pixel & 0x0000ff00) >> 8; + guint64 r = (*pixel & 0x000000ff); + + //one of possible rgb to greyscale formulas. This one is called "luminance, "luminosity" or "luma" + guint16 gray = (guint16)((guint32)((0.2126*(r<<24) + 0.7152*(g<<24) + 0.0722*(b<<24)))>>16); + + if (!pad) *((guint64*)ptr)=0; + if (color_type & 2) { //RGB + // for 8bit->16bit transition, I take the FF -> FFFF convention (multiplication by 0x101). + // If you prefer FF -> FF00 (multiplication by 0x100), remove the <<8, <<24, <<40 and <<56 + if (color_type & 4) { //RGBA + if (bit_depth==8) + *((guint32*)ptr) = *pixel; + else + *((guint64*)ptr) = (guint64)((a<<56)+(a<<48)+(b<<40)+(b<<32)+(g<<24)+(g<<16)+(r<<8)+(r)); + } + else{ //no alpha + if(bit_depth==8) + *((guint32*)ptr) = ((*pixel)<<8)>>8; + else + *((guint64*)ptr) = (guint64)((b<<40)+(b<<32)+(g<<24)+(g<<16)+(r<<8)+r); + } + } else { //Grayscale + if(bit_depth==16) + *(guint16*)ptr= ((gray & 0xff00)>>8) + ((gray &0x00ff)<<8); + else *((guint16*)ptr) += guint16(((gray >> (16-bit_depth))<gobj())); + table->attach(interlacing,0,0,1,1); + table->attach(bitdepth_label,0,1,1,1); + table->attach(bitdepth_cb,1,1,1,1); + table->attach(zlib_label,0,2,1,1); + table->attach(zlib_compression,1,2,1,1); + table->attach(phys_label,0,3,1,1); + table->attach(pHYs_sb,1,3,1,1); + table->show(); + /* Main dialog */ Gtk::Box *contents = _getContents(); contents->set_spacing(0); @@ -329,6 +363,7 @@ Export::Export (void) : contents->pack_start(hide_box); contents->pack_end(button_box, false, 0); contents->pack_end(_prog, Gtk::PACK_EXPAND_WIDGET); + contents->pack_end(expander, FALSE, FALSE,0); /* Signal handlers */ filename_entry.signal_changed().connect( sigc::mem_fun(*this, &Export::onFilenameModified) ); @@ -943,6 +978,18 @@ void Export::onExport () bool exportSuccessful = false; bool hide = hide_export.get_active (); + + // Advanced parameters + bool do_interlace = (interlacing.get_active()); + float pHYs = 0; + int zlib = zlib_compression.get_active_row_number() ; + const char* const modes_list[]={"Gray_1", "Gray_2","Gray_4","Gray_8","Gray_16","RGB_8","RGB_16","GrayAlpha_8","GrayAlpha_16","RGBA_8","RGBA_16"}; + int colortypes[] = {0,0,0,0,0,2,2,4,4,6,6}; //keep in sync with modes_list in Export constructor. values are from libpng doc. + int bitdepths[] = {1,2,4,8,16,8,16,8,16,8,16}; + int color_type = colortypes[bitdepth_cb.get_active_row_number()] ; + int bit_depth = bitdepths[bitdepth_cb.get_active_row_number()] ; + + if (batch_export.get_active ()) { // Batch export of selected objects @@ -987,6 +1034,7 @@ void Export::onExport () if (dpi == 0.0) { dpi = getValue(xdpi_adj); } + pHYs = (pHYs_adj->get_value() > 0.01) ? pHYs_adj->get_value() : dpi; Geom::OptRect area = item->desktopVisualBounds(); if (area) { @@ -1003,11 +1051,12 @@ void Export::onExport () std::vector x; std::vector selected(desktop->getSelection()->items().begin(), desktop->getSelection()->items().end()); if (!sp_export_png_file (doc, path.c_str(), - *area, width, height, dpi, dpi, + *area, width, height, pHYs, pHYs, nv->pagecolor, onProgressCallback, (void*)prog_dlg, TRUE, // overwrite without asking - hide ? selected : x + hide ? selected : x, + do_interlace, color_type, bit_depth, zlib )) { gchar * error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile); @@ -1049,6 +1098,7 @@ void Export::onExport () float const y1 = getValuePx(y1_adj); float const xdpi = getValue(xdpi_adj); float const ydpi = getValue(ydpi_adj); + pHYs = (pHYs_adj->get_value() > 0.01) ? pHYs_adj->get_value() : xdpi; unsigned long int const width = int(getValue(bmwidth_adj) + 0.5); unsigned long int const height = int(getValue(bmheight_adj) + 0.5); @@ -1094,12 +1144,13 @@ void Export::onExport () std::vector x; std::vector selected(desktop->getSelection()->items().begin(), desktop->getSelection()->items().end()); ExportResult status = sp_export_png_file(desktop->getDocument(), path.c_str(), - Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)), width, height, xdpi, ydpi, + Geom::Rect(Geom::Point(x0, y0), Geom::Point(x1, y1)), width, height, pHYs, pHYs, //previously xdpi, ydpi. nv->pagecolor, onProgressCallback, (void*)prog_dlg, FALSE, - hide ? selected : x - ); + hide ? selected : x, + do_interlace, color_type, bit_depth, zlib + ); if (status == EXPORT_ERROR) { gchar * safeFile = Inkscape::IO::sanitizeString(path.c_str()); gchar * error = g_strdup_printf(_("Could not export to filename %s.\n"), safeFile); diff --git a/src/ui/dialog/export.h b/src/ui/dialog/export.h index a1c44714b..84e1c2362 100644 --- a/src/ui/dialog/export.h +++ b/src/ui/dialog/export.h @@ -13,6 +13,9 @@ #define SP_EXPORT_H #include +#include +#include +#include #include "ui/dialog/desktop-tracker.h" #include "ui/widget/panel.h" @@ -314,6 +317,17 @@ private: Inkscape::UI::Widget::CheckButton closeWhenDone; + /* Advanced */ + Gtk::Expander expander; + Inkscape::UI::Widget::CheckButton interlacing; + Gtk::Label bitdepth_label; + Gtk::ComboBoxText bitdepth_cb; + Gtk::Label zlib_label; + Gtk::ComboBoxText zlib_compression; + Gtk::Label phys_label; + Glib::RefPtr pHYs_adj; + Gtk::SpinButton pHYs_sb; + /* Export Button widgets */ Gtk::HBox button_box; Gtk::Button export_button; -- cgit v1.2.3 From efc66f4403df7128ef6ca2ac98893b477abff9bf Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Mon, 26 Sep 2016 00:50:43 +0200 Subject: minor fix (+ satisfy build bots (?)) (bzr r15132) --- src/helper/png-write.cpp | 10 +++------- src/ui/dialog/export.cpp | 7 ++++--- src/ui/dialog/export.h | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/helper/png-write.cpp b/src/helper/png-write.cpp index f270dcc95..2433e2777 100644 --- a/src/helper/png-write.cpp +++ b/src/helper/png-write.cpp @@ -359,14 +359,10 @@ sp_export_get_rows(guchar const **rows, void **to_free, int row, int num_rows, v // it's identical to the GdkPixbuf format. convert_pixels_argb32_to_pixbuf(px, ebp->width, num_rows, stride); - *to_free = px; - // If a custom bit depth or color type is asked, then convert rgb to grayscale, etc. - if(color_type !=6 || bit_depth != 8){ - const guchar* new_data = pixbuf_to_png(rows, px, num_rows, ebp->width, stride, color_type, bit_depth); - *to_free = (void*) new_data; - free(px); - } + const guchar* new_data = pixbuf_to_png(rows, px, num_rows, ebp->width, stride, color_type, bit_depth); + *to_free = (void*) new_data; + free(px); return num_rows; } diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp index 248714a1b..64a5d9866 100644 --- a/src/ui/dialog/export.cpp +++ b/src/ui/dialog/export.cpp @@ -150,7 +150,8 @@ Export::Export (void) : bitdepth_cb(), zlib_label(_("Compression")), zlib_compression(), - phys_label(_("pHYs dpi")), + pHYs_label(_("pHYs dpi")), + pHYs_sb(pHYs_adj, 1.0, 2), hide_box(false, 5), hide_export(_("Hide a_ll except selected"), _("In the exported image, hide all objects except those that are selected")), closeWhenDone(_("Close when complete"), _("Once the export completes, close this dialog")), @@ -340,7 +341,7 @@ Export::Export (void) : zlib_compression.append(zlist[i]); zlib_compression.set_active_text("Z_DEFAULT_COMPRESSION"); pHYs_adj = Gtk::Adjustment::create(0, 0, 100000, 0.1, 1.0, 0); - pHYs_sb = Gtk::SpinButton(pHYs_adj, 1.0, 2); + pHYs_sb.set_adjustment(pHYs_adj); pHYs_sb.set_width_chars(7); pHYs_sb.set_tooltip_text( _("Will force-set the physical dpi for the png file. Set this to 72 if you're planning to work on your png with Photoshop") ); zlib_compression.set_hexpand(); @@ -351,7 +352,7 @@ Export::Export (void) : table->attach(bitdepth_cb,1,1,1,1); table->attach(zlib_label,0,2,1,1); table->attach(zlib_compression,1,2,1,1); - table->attach(phys_label,0,3,1,1); + table->attach(pHYs_label,0,3,1,1); table->attach(pHYs_sb,1,3,1,1); table->show(); diff --git a/src/ui/dialog/export.h b/src/ui/dialog/export.h index 84e1c2362..112f42312 100644 --- a/src/ui/dialog/export.h +++ b/src/ui/dialog/export.h @@ -324,7 +324,7 @@ private: Gtk::ComboBoxText bitdepth_cb; Gtk::Label zlib_label; Gtk::ComboBoxText zlib_compression; - Gtk::Label phys_label; + Gtk::Label pHYs_label; Glib::RefPtr pHYs_adj; Gtk::SpinButton pHYs_sb; -- cgit v1.2.3 From 7d4ed3c86099e3326c33f6202efec74b3e109756 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 26 Sep 2016 12:18:39 +0200 Subject: Fix Gtk type error, code cleanup, and documentation. (bzr r15133) --- src/ui/tools/gradient-tool.cpp | 1 + src/ui/tools/mesh-tool.cpp | 18 +++++++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp index a084a8fd9..16df225e0 100644 --- a/src/ui/tools/gradient-tool.cpp +++ b/src/ui/tools/gradient-tool.cpp @@ -871,6 +871,7 @@ bool GradientTool::root_handler(GdkEvent* event) { return ret; } +// Creates a new linear or radial gradient. static void sp_gradient_drag(GradientTool &rc, Geom::Point const pt, guint /*state*/, guint32 etime) { SPDesktop *desktop = SP_EVENT_CONTEXT(&rc)->desktop; diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index f2cf8c4a2..168e26b4c 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -265,14 +265,18 @@ sp_mesh_context_select_prev (ToolBase *event_context) Returns true if mouse cursor over mesh edge. */ static bool -sp_mesh_context_is_over_line (MeshTool *rc, SPItem *item, Geom::Point event_p) +sp_mesh_context_is_over_line (MeshTool *rc, SPCtrlLine *line, Geom::Point event_p) { + if (!SP_IS_CTRLCURVE(line) ) { + return false; + } + SPDesktop *desktop = SP_EVENT_CONTEXT (rc)->desktop; //Translate mouse point into proper coord system rc->mousepoint_doc = desktop->w2d(event_p); - SPCtrlCurve *curve = SP_CTRLCURVE(item); + SPCtrlCurve *curve = SP_CTRLCURVE(line); Geom::BezierCurveN<3> b( curve->p0, curve->p1, curve->p2, curve->p3 ); Geom::Coord coord = b.nearestTime( rc->mousepoint_doc ); // Coord == double Geom::Point nearest = b( coord ); @@ -425,6 +429,7 @@ sp_mesh_context_corner_operation (MeshTool *rc, MeshCornerOperation operation ) /** Handles all keyboard and mouse input for meshs. +Note: node/handle events are take care of elsewhere. */ bool MeshTool::root_handler(GdkEvent* event) { static bool dragging; @@ -458,8 +463,7 @@ bool MeshTool::root_handler(GdkEvent* event) { if (! drag->lines.empty()) { for (std::vector::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); ++l) { - line = (SPCtrlCurve*) (*l); - over_line |= sp_mesh_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y)); + over_line |= sp_mesh_context_is_over_line (this, *l, Geom::Point(event->motion.x, event->motion.y)); } } @@ -594,7 +598,7 @@ bool MeshTool::root_handler(GdkEvent* event) { if (!drag->lines.empty()) { for (std::vector::const_iterator l = drag->lines.begin(); l != drag->lines.end() ; ++l) { - over_line |= sp_mesh_context_is_over_line (this, (SPItem*)(*l), Geom::Point(event->motion.x, event->motion.y)); + over_line |= sp_mesh_context_is_over_line (this, *l, Geom::Point(event->motion.x, event->motion.y)); } } @@ -625,8 +629,7 @@ bool MeshTool::root_handler(GdkEvent* event) { if (!drag->lines.empty()) { for (std::vector::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); ++l) { - line = (SPCtrlLine*)(*l); - over_line = sp_mesh_context_is_over_line (this, (SPItem*) line, Geom::Point(event->motion.x, event->motion.y)); + over_line = sp_mesh_context_is_over_line (this, *l, Geom::Point(event->motion.x, event->motion.y)); if (over_line) { break; @@ -925,6 +928,7 @@ bool MeshTool::root_handler(GdkEvent* event) { return ret; } +// Creates a new mesh gradient. static void sp_mesh_end_drag(MeshTool &rc) { SPDesktop *desktop = SP_EVENT_CONTEXT(&rc)->desktop; Inkscape::Selection *selection = desktop->getSelection(); -- cgit v1.2.3 From 4d7f1b7e727b6896ca880eacc531772d4da28bde Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 26 Sep 2016 13:25:52 +0200 Subject: Add tracing code. (bzr r15134) --- src/sp-object.cpp | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/sp-object.h | 2 + 2 files changed, 131 insertions(+) diff --git a/src/sp-object.cpp b/src/sp-object.cpp index 0cd7b371e..da4367d5b 100644 --- a/src/sp-object.cpp +++ b/src/sp-object.cpp @@ -61,6 +61,10 @@ using std::strstr; # define debug(f, a...) /* */ #endif +// Define to enable indented tracing of SPObject. +//#define OBJECT_TRACE +unsigned SPObject::indent_level = 0; + guint update_in_progress = 0; // guard against update-during-update Inkscape::XML::NodeEventVector object_event_vector = { @@ -182,6 +186,10 @@ void SPObject::update(SPCtx* /*ctx*/, unsigned int /*flags*/) { } void SPObject::modified(unsigned int /*flags*/) { +#ifdef OBJECT_TRACE + objectTrace( "SPObject::modified (default) (empty function)" ); + objectTrace( "SPObject::modified (default)", false ); +#endif //throw; } @@ -640,6 +648,10 @@ void SPObject::order_changed(Inkscape::XML::Node *child, Inkscape::XML::Node * / } void SPObject::build(SPDocument *document, Inkscape::XML::Node *repr) { + +#ifdef OBJECT_TRACE + objectTrace( "SPObject::build" ); +#endif SPObject* object = this; /* Nothing specific here */ @@ -665,10 +677,17 @@ void SPObject::build(SPDocument *document, Inkscape::XML::Node *repr) { sp_object_unref(child, NULL); child->invoke_build(document, rchild, object->cloned); } + +#ifdef OBJECT_TRACE + objectTrace( "SPObject::build", false ); +#endif } void SPObject::invoke_build(SPDocument *document, Inkscape::XML::Node *repr, unsigned int cloned) { +#ifdef OBJECT_TRACE + objectTrace( "SPObject::invoke_build" ); +#endif debug("id=%p, typename=%s", this, g_type_name_from_instance((GTypeInstance*)this)); //g_assert(object != NULL); @@ -728,6 +747,10 @@ void SPObject::invoke_build(SPDocument *document, Inkscape::XML::Node *repr, uns /* Signalling (should be connected AFTER processing derived methods */ sp_repr_add_listener(repr, &object_event_vector, this); + +#ifdef OBJECT_TRACE + objectTrace( "SPObject::invoke_build", false ); +#endif } int SPObject::getIntAttribute(char const *key, int def) @@ -835,6 +858,13 @@ void SPObject::repr_order_changed(Inkscape::XML::Node * /*repr*/, Inkscape::XML: } void SPObject::set(unsigned int key, gchar const* value) { + +#ifdef OBJECT_TRACE + std::stringstream temp; + temp << "SPObject::set: " << key << " " << (value?value:"null"); + objectTrace( temp.str() ); +#endif + g_assert(key != SP_ATTR_INVALID); SPObject* object = this; @@ -918,6 +948,9 @@ void SPObject::set(unsigned int key, gchar const* value) { default: break; } +#ifdef OBJECT_TRACE + objectTrace( "SPObject::set", false ); +#endif } void SPObject::setKeyValue(unsigned int key, gchar const *value) @@ -982,6 +1015,10 @@ static gchar const *sp_xml_get_space_string(unsigned int space) } Inkscape::XML::Node* SPObject::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { +#ifdef OBJECT_TRACE + objectTrace( "SPObject::write" ); +#endif + if (!repr && (flags & SP_OBJECT_WRITE_BUILD)) { repr = this->getRepr()->duplicate(doc); if (!( flags & SP_OBJECT_WRITE_EXT )) { @@ -1050,38 +1087,68 @@ Inkscape::XML::Node* SPObject::write(Inkscape::XML::Document *doc, Inkscape::XML sp_style_unset_property_attrs (this); } +#ifdef OBJECT_TRACE + objectTrace( "SPObject::write", false ); +#endif return repr; } Inkscape::XML::Node * SPObject::updateRepr(unsigned int flags) { +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateRepr 1" ); +#endif + if ( !cloned ) { Inkscape::XML::Node *repr = getRepr(); if (repr) { +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateRepr 1", false ); +#endif return updateRepr(repr->document(), repr, flags); } else { g_critical("Attempt to update non-existent repr"); +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateRepr 1", false ); +#endif return NULL; } } else { /* cloned objects have no repr */ +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateRepr 1", false ); +#endif return NULL; } } Inkscape::XML::Node * SPObject::updateRepr(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, unsigned int flags) { +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateRepr 2" ); +#endif + g_assert(doc != NULL); if (cloned) { /* cloned objects have no repr */ +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateRepr 2", false ); +#endif return NULL; } if (!(flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = getRepr(); } + +#ifdef OBJECT_TRACE + Inkscape::XML::Node *node = write(doc, repr, flags); + objectTrace( "SPObject::updateRepr 2", false ); + return node; +#else return this->write(doc, repr, flags); +#endif } @@ -1101,6 +1168,10 @@ void SPObject::requestDisplayUpdate(unsigned int flags) g_return_if_fail((flags & SP_OBJECT_MODIFIED_FLAG) || (flags & SP_OBJECT_CHILD_MODIFIED_FLAG)); g_return_if_fail(!((flags & SP_OBJECT_MODIFIED_FLAG) && (flags & SP_OBJECT_CHILD_MODIFIED_FLAG))); +#ifdef OBJECT_TRACE + objectTrace( "SPObject::requestDisplayUpdate" ); +#endif + bool already_propagated = (!(this->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))); this->uflags |= flags; @@ -1115,12 +1186,21 @@ void SPObject::requestDisplayUpdate(unsigned int flags) document->requestModified(); } } + +#ifdef OBJECT_TRACE + objectTrace( "SPObject::requestDisplayUpdate", false ); +#endif + } void SPObject::updateDisplay(SPCtx *ctx, unsigned int flags) { g_return_if_fail(!(flags & ~SP_OBJECT_MODIFIED_CASCADE)); +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateDisplay" ); +#endif + update_in_progress ++; #ifdef SP_OBJECT_DEBUG_CASCADE @@ -1161,6 +1241,10 @@ void SPObject::updateDisplay(SPCtx *ctx, unsigned int flags) } update_in_progress --; + +#ifdef OBJECT_TRACE + objectTrace( "SPObject::updateDisplay", false ); +#endif } void SPObject::requestModified(unsigned int flags) @@ -1173,6 +1257,10 @@ void SPObject::requestModified(unsigned int flags) g_return_if_fail((flags & SP_OBJECT_MODIFIED_FLAG) || (flags & SP_OBJECT_CHILD_MODIFIED_FLAG)); g_return_if_fail(!((flags & SP_OBJECT_MODIFIED_FLAG) && (flags & SP_OBJECT_CHILD_MODIFIED_FLAG))); +#ifdef OBJECT_TRACE + objectTrace( "SPObject::requestModified" ); +#endif + bool already_propagated = (!(this->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))); this->mflags |= flags; @@ -1187,6 +1275,9 @@ void SPObject::requestModified(unsigned int flags) document->requestModified(); } } +#ifdef OBJECT_TRACE + objectTrace( "SPObject::requestModified", false ); +#endif } void SPObject::emitModified(unsigned int flags) @@ -1194,6 +1285,10 @@ void SPObject::emitModified(unsigned int flags) /* only the MODIFIED_CASCADE flag is legal here */ g_return_if_fail(!(flags & ~SP_OBJECT_MODIFIED_CASCADE)); +#ifdef OBJECT_TRACE + objectTrace( "SPObject::emitModified", true, flags ); +#endif + #ifdef SP_OBJECT_DEBUG_CASCADE g_print("Modified %s:%s %x %x %x\n", g_type_name_from_instance((GTypeInstance *) this), getId(), flags, this->uflags, this->mflags); #endif @@ -1210,6 +1305,10 @@ void SPObject::emitModified(unsigned int flags) _modified_signal.emit(this, flags); sp_object_unref(this); + +#ifdef OBJECT_TRACE + objectTrace( "SPObject::emitModified", false ); +#endif } gchar const *SPObject::getTagName(SPException *ex) const @@ -1248,10 +1347,12 @@ void SPObject::setAttribute(gchar const *key, gchar const *value, SPException *e //XML Tree being used here. getRepr()->setAttribute(key, value, false); } + void SPObject::setAttribute(char const *key, Glib::ustring const &value, SPException *ex) { setAttribute(key, value.empty() ? NULL : value.c_str(), ex); } + void SPObject::setAttribute(Glib::ustring const &key, Glib::ustring const &value, SPException *ex) { setAttribute( key.empty() ? NULL : key.c_str(), @@ -1536,6 +1637,34 @@ void SPObject::recursivePrintTree( unsigned level ) } } +// Function to allow tracing of program flow through SPObject and derived classes. +// To trace function, add at entrance ('in' = true) and exit of function ('in' = false). +void SPObject::objectTrace( std::string text, bool in, unsigned flags ) { + if( in ) { + for (unsigned i = 0; i < indent_level; ++i) { + std::cout << " "; + } + std::cout << text << ":" + << " entrance: " + << (id?id:"null") + << " uflags: " << uflags + << " mflags: " << mflags + << " flags: " << flags << std::endl; + ++indent_level; + } else { + --indent_level; + for (unsigned i = 0; i < indent_level; ++i) { + std::cout << " "; + } + std::cout << text << ":" + << " exit: " + << (id?id:"null") + << " uflags: " << uflags + << " mflags: " << mflags + << " flags: " << flags << std::endl; + } +} + /* Local Variables: mode:c++ diff --git a/src/sp-object.h b/src/sp-object.h index 1c6212664..ac3d0c851 100644 --- a/src/sp-object.h +++ b/src/sp-object.h @@ -861,6 +861,8 @@ public: virtual void read_content(); void recursivePrintTree(unsigned level = 0); // For debugging + static unsigned indent_level; + void objectTrace( std::string, bool in=true, unsigned flags=0 ); }; -- cgit v1.2.3 From f273f14eb1b54861f1b3a7eb622cb481ee33cec9 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 26 Sep 2016 13:26:47 +0200 Subject: Fix undo/redo for mesh gradients. (bzr r15135) --- src/gradient-chemistry.cpp | 12 +++-- src/gradient-drag.cpp | 16 +++---- src/gradient-drag.h | 2 +- src/sp-gradient.cpp | 86 +++++++++++++++------------------ src/sp-item.cpp | 5 ++ src/sp-mesh-array.cpp | 115 ++++++++++++++++++++++++++++++++++++++------- src/sp-mesh-array.h | 11 +++-- src/sp-mesh-patch.cpp | 31 ++++++++++-- src/sp-mesh-patch.h | 11 +++-- src/sp-mesh-row.cpp | 31 +++++++++++- src/sp-mesh-row.h | 11 +++-- src/sp-mesh.cpp | 39 +++++++++++++-- src/sp-rect.cpp | 36 ++++++++++++++ src/sp-stop.cpp | 1 + 14 files changed, 310 insertions(+), 97 deletions(-) diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 4521d72fd..28fdda483 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -271,7 +271,7 @@ static SPGradient *sp_gradient_fork_private_if_necessary(SPGradient *gr, SPGradi repr_new->setAttribute("x2", repr->attribute("x2")); repr_new->setAttribute("y2", repr->attribute("y2")); } else { - std::cout << "sp_gradient_fork_private_if_necessary: mesh not implemented" << std::endl; + std::cerr << "sp_gradient_fork_private_if_necessary: mesh not implemented" << std::endl; } return gr_new; @@ -861,6 +861,7 @@ void sp_item_gradient_stop_set_style(SPItem *item, GrPointType point_type, guint switch (point_type) { case POINT_MG_CORNER: { + // Update mesh array (which is not updated automatically when stop is changed?) gchar const* color_str = sp_repr_css_property( stop, "stop-color", NULL ); if( color_str ) { SPColor color( 0 ); @@ -880,9 +881,14 @@ void sp_item_gradient_stop_set_style(SPItem *item, GrPointType point_type, guint mg->array.corners[ point_i ]->opacity = opacity; changed = true; } + // Update stop if( changed ) { - gradient->requestModified(SP_OBJECT_MODIFIED_FLAG); - mg->array.write( mg ); + SPStop *stopi = mg->array.corners[ point_i ]->stop; + if (stopi) { + sp_repr_css_change(stopi->getRepr(), stop, "style"); + } else { + std::cerr << "sp_item_gradient_stop_set_style: null stopi" << std::endl; + } } break; } diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 5b91bdc9f..7bc302e61 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -901,7 +901,7 @@ static void gr_knot_moved_handler(SPKnot *knot, Geom::Point const &ppointer, gui dragger->point = p; dragger->fireDraggables (false, scale_radial); dragger->updateDependencies(false); - dragger->updateHandles( p_old, MG_NODE_NO_SCALE ); + dragger->moveMeshHandles( p_old, MG_NODE_NO_SCALE ); } } @@ -1076,7 +1076,7 @@ static void gr_knot_ungrabbed_handler(SPKnot *knot, unsigned int state, gpointer } else { dragger->fireDraggables (true); } - dragger->updateHandles( dragger->point_original, MG_NODE_NO_SCALE ); + dragger->moveMeshHandles( dragger->point_original, MG_NODE_NO_SCALE ); for (std::set::const_iterator it = dragger->parent->selected.begin(); it != dragger->parent->selected.end() ; ++it ) { if (*it == dragger) @@ -1306,9 +1306,8 @@ bool GrDragger::mayMerge(GrDraggable *da2) * Ooops, needs to be reimplemented. */ void -GrDragger::updateHandles ( Geom::Point pc_old, MeshNodeOperation op ) +GrDragger::moveMeshHandles ( Geom::Point pc_old, MeshNodeOperation op ) { - // This routine might more properly be in mesh-context.cpp but moving knots is // handled here rather than there. @@ -1946,6 +1945,7 @@ void GrDrag::addDraggersLinear(SPLinearGradient *lg, SPItem *item, Inkscape::Pai */ void GrDrag::addDraggersMesh(SPMesh *mg, SPItem *item, Inkscape::PaintTarget fill_or_stroke) { + mg->ensureArray(); std::vector< std::vector< SPMeshNode* > > nodes = mg->array.nodes; // Show/hide mesh on fill/stroke. This doesn't work at the moment... and prevents node color updating. @@ -1963,7 +1963,7 @@ void GrDrag::addDraggersMesh(SPMesh *mg, SPItem *item, Inkscape::PaintTarget fil // Make sure we have at least one patch defined. if( mg->array.patch_rows() == 0 || mg->array.patch_columns() == 0 ) { - std::cout << "Empty Mesh, No Draggers to Add" << std::endl; + std::cerr << "Empty Mesh, No Draggers to Add" << std::endl; return; } @@ -2018,14 +2018,14 @@ void GrDrag::addDraggersMesh(SPMesh *mg, SPItem *item, Inkscape::PaintTarget fil } default: - std::cout << "Bad Mesh draggable type" << std::endl; + std::cerr << "Bad Mesh draggable type" << std::endl; break; } } } } - mg->array.drag_valid = true; + mg->array.draggers_valid = true; } /** @@ -2348,7 +2348,7 @@ void GrDrag::selected_move(double x, double y, bool write_repr, bool scale_radia d->knot->moveto(d->point); d->fireDraggables (write_repr, scale_radial); - d->updateHandles( p_old, MG_NODE_NO_SCALE ); + d->moveMeshHandles( p_old, MG_NODE_NO_SCALE ); d->updateDependencies(write_repr); } } diff --git a/src/gradient-drag.h b/src/gradient-drag.h index b07f748a7..9737af0bf 100644 --- a/src/gradient-drag.h +++ b/src/gradient-drag.h @@ -105,7 +105,7 @@ struct GrDragger { void updateDependencies(bool write_repr); /* Update handles/tensors when mesh corner moved */ - void updateHandles( Geom::Point pc_old, MeshNodeOperation op ); + void moveMeshHandles( Geom::Point pc_old, MeshNodeOperation op ); bool mayMerge(GrDragger *other); bool mayMerge(GrDraggable *da2); diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index f24e25ab1..5c0fdfe2b 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -22,6 +22,7 @@ */ #define noSP_GRADIENT_VERBOSE +//#define OBJECT_TRACE #include #include @@ -228,7 +229,7 @@ SPGradient::SPGradient() : SPPaintServer(), units(), state(2), vector() { - this->has_patches = 0; + this->has_patches = 0; this->ref = new SPGradientReference(this); this->ref->changedSignal().connect(sigc::bind(sigc::ptr_fun(SPGradient::gradientRefChanged), this)); @@ -318,6 +319,12 @@ void SPGradient::release() */ void SPGradient::set(unsigned key, gchar const *value) { +#ifdef OBJECT_TRACE + std::stringstream temp; + temp << "SPGradient::set: " << key << " " << (value?value:"null"); + objectTrace( temp.str() ); +#endif + switch (key) { case SP_ATTR_GRADIENTUNITS: if (value) { @@ -409,6 +416,10 @@ void SPGradient::set(unsigned key, gchar const *value) SPPaintServer::set(key, value); break; } + +#ifdef OBJECT_TRACE + objectTrace( "SPGradient::set", false ); +#endif } /** @@ -498,29 +509,24 @@ void SPGradient::remove_child(Inkscape::XML::Node *child) */ void SPGradient::modified(guint flags) { +#ifdef OBJECT_TRACE + objectTrace( "SPGradient::modified" ); +#endif + if (flags & SP_OBJECT_CHILD_MODIFIED_FLAG) { - // CPPIFY - // This comparison has never worked (i. e. always evaluated to false), - // the right value would have been SP_TYPE_MESH - //if( this->get_type() != SP_GRADIENT_TYPE_MESH ) { -// if (!SP_IS_MESH(this)) { -// this->invalidateVector(); -// } else { -// this->invalidateArray(); -// } - this->invalidateVector(); + if (SP_IS_MESH(this)) { + this->invalidateArray(); + } else { + this->invalidateVector(); + } } if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - // CPPIFY - // see above - //if( this->get_type() != SP_GRADIENT_TYPE_MESH ) { -// if (!SP_IS_MESH(this)) { -// this->ensureVector(); -// } else { -// this->ensureArray(); -// } - this->ensureVector(); + if (SP_IS_MESH(this)) { + this->ensureArray(); + } else { + this->ensureVector(); + } } if (flags & SP_OBJECT_MODIFIED_FLAG) flags |= SP_OBJECT_PARENT_MODIFIED_FLAG; @@ -546,6 +552,10 @@ void SPGradient::modified(guint flags) sp_object_unref(child); } + +#ifdef OBJECT_TRACE + objectTrace( "SPGradient::modified", false ); +#endif } SPStop* SPGradient::getFirstStop() @@ -576,6 +586,10 @@ int SPGradient::getStopCount() const */ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { +#ifdef OBJECT_TRACE + objectTrace( "SPGradient::write" ); +#endif + SPPaintServer::write(xml_doc, repr, flags); if (flags & SP_OBJECT_WRITE_BUILD) { @@ -646,6 +660,9 @@ Inkscape::XML::Node *SPGradient::write(Inkscape::XML::Document *xml_doc, Inkscap repr->setAttribute( "osb:paint", 0 ); } +#ifdef OBJECT_TRACE + objectTrace( "SPGradient::write", false ); +#endif return repr; } @@ -898,7 +915,7 @@ bool SPGradient::invalidateArray() if (array.built) { array.built = false; - array.clear(); + // array.clear(); ret = true; } @@ -1014,33 +1031,6 @@ void SPGradient::rebuildArray() } array.read( SP_MESH( this ) ); - - has_patches = false; - for (auto& ro: children) { - if (SP_IS_MESHROW(&ro)) { - has_patches = true; - // std::cout << " Has Patches" << std::endl; - break; - } - } - - // MESH_FIXME: TO PROPERLY COPY - SPGradient *reffed = ref->getObject(); - if ( !hasPatches() && reffed ) { - std::cout << "SPGradient::rebuildArray(): reffed array NOT IMPLEMENTED!!!" << std::endl; - /* Copy array from referenced gradient */ - array.built = true; // Prevent infinite recursion. - reffed->ensureArray(); - // if (!reffed->array.nodes.empty()) { - // array.built = reffed->array.built; - // for( uint i = 0; i < reffed->array.nodes.size(); ++i ) { - // array.nodes[i].assign(reffed->array.nodes[i].begin(), reffed->array.nodes[i].end()); - - // // FILL ME - // } - // return; - // } - } } Geom::Affine diff --git a/src/sp-item.cpp b/src/sp-item.cpp index e03b715c0..d161562fd 100644 --- a/src/sp-item.cpp +++ b/src/sp-item.cpp @@ -59,6 +59,7 @@ #define noSP_ITEM_DEBUG_IDLE +//#define OBJECT_TRACE static SPItemView* sp_item_view_list_remove(SPItemView *list, SPItemView *view); @@ -691,6 +692,10 @@ void SPItem::update(SPCtx* ctx, guint flags) { void SPItem::modified(unsigned int /*flags*/) { +#ifdef OBJECT_TRACE + objectTrace( "SPItem::modified" ); + objectTrace( "SPItem::modified", false ); +#endif } Inkscape::XML::Node* SPItem::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp index 0dd89ac96..41a95a41a 100644 --- a/src/sp-mesh-array.cpp +++ b/src/sp-mesh-array.cpp @@ -574,6 +574,59 @@ void SPMeshPatchI::setOpacity( guint i, gdouble opacity ) { }; +/** + Return stop pointer for corner of patch. +*/ +SPStop* SPMeshPatchI::getStopPtr( guint i ) { + + assert( i < 4 ); + + SPStop* stop = nullptr; + switch ( i ) { + case 0: + stop = (*nodes)[ row ][ col ]->stop; + break; + case 1: + stop = (*nodes)[ row ][ col+3 ]->stop; + break; + case 2: + stop = (*nodes)[ row+3 ][ col+3 ]->stop; + break; + case 3: + stop = (*nodes)[ row+3 ][ col ]->stop; + break; + } + + return stop; +}; + + +/** + Set stop pointer for corner of patch. +*/ +void SPMeshPatchI::setStopPtr( guint i, SPStop* stop ) { + + assert( i < 4 ); + + switch ( i ) { + case 0: + (*nodes)[ row ][ col ]->stop = stop; + break; + case 1: + (*nodes)[ row ][ col+3 ]->stop = stop; + break; + case 2: + (*nodes)[ row+3 ][ col+3 ]->stop = stop; + break; + case 3: + (*nodes)[ row+3 ][ col ]->stop = stop; + break; + + } + +}; + + SPMeshNodeArray::SPMeshNodeArray( SPMesh *mg ) { read( mg ); @@ -586,7 +639,7 @@ SPMeshNodeArray::SPMeshNodeArray( const SPMeshNodeArray& rhs ) { built = false; mg = NULL; - drag_valid = false; + draggers_valid = false; nodes = rhs.nodes; // This only copies the pointers but it does size the vector of vectors. @@ -607,7 +660,7 @@ SPMeshNodeArray& SPMeshNodeArray::operator=( const SPMeshNodeArray& rhs ) { built = false; mg = NULL; - drag_valid = false; + draggers_valid = false; nodes = rhs.nodes; // This only copies the pointers but it does size the vector of vectors. @@ -620,12 +673,34 @@ SPMeshNodeArray& SPMeshNodeArray::operator=( const SPMeshNodeArray& rhs ) { return *this; }; - -void SPMeshNodeArray::read( SPMesh *mg_in ) { +// Fill array with data from mesh objects. +// Returns true of array's dimensions unchanged. +bool SPMeshNodeArray::read( SPMesh *mg_in ) { mg = mg_in; - clear(); + // Count rows and columns, if unchanged reuse array to keep draggers valid. + unsigned cols = 0; + unsigned rows = 0; + for (auto& ro: mg->children) { + if (SP_IS_MESHROW(&ro)) { + ++rows; + if (rows == 1 ) { + for (auto& po: ro.children) { + if (SP_IS_MESHPATCH(&po)) { + ++cols; + } + } + } + } + } + bool same_size = true; + if (cols != patch_columns() || rows != patch_rows() ) { + // Draggers will be invalidated. + same_size = false; + clear(); + draggers_valid = false; + } Geom::Point current_p( mg->x.computed, mg->y.computed ); // std::cout << "SPMeshNodeArray::read: p: " << current_p << std::endl; @@ -701,7 +776,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { dp = Geom::Point( x, y ); new_patch.setPoint( istop, 3, current_p + dp ); } else { - std::cout << "Failed to read l" << std::endl; + std::cerr << "Failed to read l" << std::endl; } } // To facilitate some side operations, set handles to 1/3 and @@ -723,7 +798,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { p = Geom::Point( x, y ); new_patch.setPoint( istop, 3, p ); } else { - std::cout << "Failed to read L" << std::endl; + std::cerr << "Failed to read L" << std::endl; } } // To facilitate some side operations, set handles to 1/3 and @@ -743,7 +818,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { p += current_p; new_patch.setPoint( istop, i, p ); } else { - std::cout << "Failed to read c: " << i << std::endl; + std::cerr << "Failed to read c: " << i << std::endl; } } break; @@ -756,13 +831,13 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { p = Geom::Point( x, y ); new_patch.setPoint( istop, i, p ); } else { - std::cout << "Failed to read C: " << i << std::endl; + std::cerr << "Failed to read C: " << i << std::endl; } } break; default: // should not reach - std::cout << "Path Error: unhandled path type: " << path_type << std::endl; + std::cerr << "Path Error: unhandled path type: " << path_type << std::endl; } current_p = new_patch.getPoint( istop, 3 ); @@ -774,6 +849,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { double opacity = stop->opacity; new_patch.setColor( istop, color ); new_patch.setOpacity( istop, opacity ); + new_patch.setStopPtr( istop, stop ); } } @@ -797,7 +873,7 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { if( !os.fail() ) { new_patch.setTensorPoint( i, new_patch.getPoint( i, 0 ) + Geom::Point( x, y ) ); } else { - std::cout << "Failed to read p: " << i << std::endl; + std::cerr << "Failed to read p: " << i << std::endl; break; } } @@ -830,9 +906,9 @@ void SPMeshNodeArray::read( SPMesh *mg_in ) { // std::cout << "SPMeshNodeArray::Read: result:" << std::endl; // print(); - drag_valid = false; built = true; + return same_size; }; /** @@ -967,10 +1043,10 @@ void SPMeshNodeArray::write( SPMesh *mg ) { break; case 'z': case 'Z': - std::cout << "sp_mesh_repr_write: bad path type" << path_type << std::endl; + std::cout << "SPMeshNodeArray::write(): bad path type" << path_type << std::endl; break; default: - std::cout << "sp_mesh_repr_write: unhandled path type" << path_type << std::endl; + std::cout << "SPMeshNodeArray::write(): unhandled path type" << path_type << std::endl; } stop->setAttribute("path", is.str().c_str()); // std::cout << "SPMeshNodeArray::write: path: " << is.str().c_str() << std::endl; @@ -1415,6 +1491,7 @@ void SPMeshNodeArray::print() { << " Node edge: " << nodes[i][j]->node_edge << " Set: " << nodes[i][j]->set << " Path type: " << nodes[i][j]->path_type + << " Stop: " << nodes[i][j]->stop << std::endl; } else { std::cout << "Error: missing mesh node." << std::endl; @@ -1776,7 +1853,9 @@ guint SPMeshNodeArray::patch_rows() { Number of patch columns. */ guint SPMeshNodeArray::patch_columns() { - + if (nodes.empty()) { + return 0; + } return nodes[0].size()/3; } @@ -2345,7 +2424,11 @@ guint SPMeshNodeArray::color_pick( std::vector icorners, SPItem* item ) { */ void SPMeshNodeArray::update_handles( guint corner, std::vector< guint > /*selected*/, Geom::Point p_old, MeshNodeOperation /*op*/ ) { - assert( drag_valid ); + if (!draggers_valid) { + std::cerr << "SPMeshNodeArray::update_handles: Draggers not valid!" << std::endl; + return; + } + // assert( draggers_valid ); // std::cout << "SPMeshNodeArray::update_handles: " // << " corner: " << corner diff --git a/src/sp-mesh-array.h b/src/sp-mesh-array.h index b078b221e..eb01304a2 100644 --- a/src/sp-mesh-array.h +++ b/src/sp-mesh-array.h @@ -85,6 +85,7 @@ enum MeshNodeOperation { MG_NODE_SCALE_HANDLE }; +class SPStop; class SPMeshNode { public: @@ -95,6 +96,7 @@ public: draggable = -1; path_type = 'u'; opacity = 0.0; + stop = nullptr; } NodeType node_type; unsigned int node_edge; @@ -104,6 +106,7 @@ public: char path_type; SPColor color; double opacity; + SPStop *stop; // Stop corresponding to node. }; @@ -133,6 +136,8 @@ public: void setColor( unsigned int i, SPColor c ); double getOpacity( unsigned int i ); void setOpacity( unsigned int i, double o ); + SPStop* getStopPtr( unsigned int i ); + void setStopPtr( unsigned int i, SPStop* ); }; class SPMesh; @@ -147,7 +152,7 @@ public: public: // Draggables to nodes - bool drag_valid; + bool draggers_valid; std::vector< SPMeshNode* > corners; std::vector< SPMeshNode* > handles; std::vector< SPMeshNode* > tensors; @@ -156,7 +161,7 @@ public: friend class SPMeshPatchI; - SPMeshNodeArray() { built = false; mg = NULL; drag_valid = false; }; + SPMeshNodeArray() { built = false; mg = NULL; draggers_valid = false; }; SPMeshNodeArray( SPMesh *mg ); SPMeshNodeArray( const SPMeshNodeArray& rhs ); SPMeshNodeArray& operator=(const SPMeshNodeArray& rhs); @@ -164,7 +169,7 @@ public: ~SPMeshNodeArray() { clear(); }; bool built; - void read( SPMesh *mg ); + bool read( SPMesh *mg ); void write( SPMesh *mg ); void create( SPMesh *mg, SPItem *item, Geom::OptRect bbox ); void clear(); diff --git a/src/sp-mesh-patch.cpp b/src/sp-mesh-patch.cpp index 9727ffef6..9a173a8db 100644 --- a/src/sp-mesh-patch.cpp +++ b/src/sp-mesh-patch.cpp @@ -57,7 +57,6 @@ SPMeshpatch* SPMeshpatch::getPrevMeshpatch() /* * Mesh Patch */ - SPMeshpatch::SPMeshpatch() : SPObject() { this->tensor_string = NULL; } @@ -74,7 +73,6 @@ void SPMeshpatch::build(SPDocument* doc, Inkscape::XML::Node* repr) { /** * Virtual build: set meshpatch attributes from its associated XML node. */ - void SPMeshpatch::set(unsigned int key, const gchar* value) { switch (key) { case SP_ATTR_TENSOR: { @@ -91,9 +89,36 @@ void SPMeshpatch::set(unsigned int key, const gchar* value) { } /** - * Virtual set: set attribute to value. + * modified */ +void SPMeshpatch::modified(unsigned int flags) { + flags &= SP_OBJECT_MODIFIED_CASCADE; + GSList *l = NULL; + + for (auto& child: children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); + } + + l = g_slist_reverse(l); + + while (l) { + SPObject *child = SP_OBJECT(l->data); + l = g_slist_remove(l, child); + + if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + child->emitModified(flags); + } + + sp_object_unref(child); + } +} + + +/** + * Virtual set: set attribute to value. + */ Inkscape::XML::Node* SPMeshpatch::write(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:meshpatch"); diff --git a/src/sp-mesh-patch.h b/src/sp-mesh-patch.h index 88d6325c3..e018b81ea 100644 --- a/src/sp-mesh-patch.h +++ b/src/sp-mesh-patch.h @@ -21,8 +21,8 @@ /** Gradient Meshpatch. */ class SPMeshpatch : public SPObject { public: - SPMeshpatch(); - virtual ~SPMeshpatch(); + SPMeshpatch(); + virtual ~SPMeshpatch(); SPMeshpatch* getNextMeshpatch(); SPMeshpatch* getPrevMeshpatch(); @@ -31,9 +31,10 @@ public: //SVGLength ty[4]; // Tensor points protected: - virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); - virtual void set(unsigned int key, const char* value); - virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags); + virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); + virtual void set(unsigned int key, const char* value); + virtual void modified(unsigned int flags); + virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags); }; #endif /* !SEEN_SP_MESHPATCH_H */ diff --git a/src/sp-mesh-row.cpp b/src/sp-mesh-row.cpp index 90173da8c..5ac349c27 100644 --- a/src/sp-mesh-row.cpp +++ b/src/sp-mesh-row.cpp @@ -65,17 +65,44 @@ void SPMeshrow::build(SPDocument* doc, Inkscape::XML::Node* repr) { SPObject::build(doc, repr); } + /** * Virtual build: set meshrow attributes from its associated XML node. */ - void SPMeshrow::set(unsigned int /*key*/, const gchar* /*value*/) { } /** - * Virtual set: set attribute to value. + * modified */ +void SPMeshrow::modified(unsigned int flags) { + flags &= SP_OBJECT_MODIFIED_CASCADE; + GSList *l = NULL; + + for (auto& child: children) { + sp_object_ref(&child); + l = g_slist_prepend(l, &child); + } + + l = g_slist_reverse(l); + + while (l) { + SPObject *child = SP_OBJECT(l->data); + l = g_slist_remove(l, child); + + if (flags || (child->mflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) { + child->emitModified(flags); + } + + sp_object_unref(child); + } +} + + +/** + * Virtual set: set attribute to value. + */ Inkscape::XML::Node* SPMeshrow::write(Inkscape::XML::Document* xml_doc, Inkscape::XML::Node* repr, guint flags) { if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:meshrow"); diff --git a/src/sp-mesh-row.h b/src/sp-mesh-row.h index ffb3efa6b..40335e2b9 100644 --- a/src/sp-mesh-row.h +++ b/src/sp-mesh-row.h @@ -19,16 +19,17 @@ /** Gradient Meshrow. */ class SPMeshrow : public SPObject { public: - SPMeshrow(); - virtual ~SPMeshrow(); + SPMeshrow(); + virtual ~SPMeshrow(); SPMeshrow* getNextMeshrow(); SPMeshrow* getPrevMeshrow(); protected: - virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); - virtual void set(unsigned int key, const char* value); - virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags); + virtual void build(SPDocument* doc, Inkscape::XML::Node* repr); + virtual void set(unsigned int key, const char* value); + virtual void modified(unsigned int flags); + virtual Inkscape::XML::Node* write(Inkscape::XML::Document* doc, Inkscape::XML::Node* repr, unsigned int flags); }; #endif /* !SEEN_SP_MESHROW_H */ diff --git a/src/sp-mesh.cpp b/src/sp-mesh.cpp index 5a6f2bd8e..1cdb2f1cc 100644 --- a/src/sp-mesh.cpp +++ b/src/sp-mesh.cpp @@ -9,16 +9,34 @@ * Mesh Gradient */ //#define MESH_DEBUG +//#define OBJECT_TRACE + SPMesh::SPMesh() : SPGradient(), type( SP_MESH_TYPE_COONS ), type_set(false) { +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::SPMesh" ); +#endif + // Start coordinate of mesh this->x.unset(SVGLength::NONE, 0.0, 0.0); this->y.unset(SVGLength::NONE, 0.0, 0.0); + +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::SPMesh", false ); +#endif } SPMesh::~SPMesh() { +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::~SPMesh (empty function)" ); + objectTrace( "SPMesh::~SPMesh", false ); +#endif } void SPMesh::build(SPDocument *document, Inkscape::XML::Node *repr) { +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::build" ); +#endif + SPGradient::build(document, repr); // Start coordinate of mesh @@ -26,10 +44,18 @@ void SPMesh::build(SPDocument *document, Inkscape::XML::Node *repr) { this->readAttr( "y" ); this->readAttr( "type" ); + +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::build", false ); +#endif } void SPMesh::set(unsigned key, gchar const *value) { +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::set" ); +#endif + switch (key) { case SP_ATTR_X: if (!this->x.read(value)) { @@ -70,14 +96,18 @@ void SPMesh::set(unsigned key, gchar const *value) { SPGradient::set(key, value); break; } + +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::set", false ); +#endif } /** * Write mesh gradient attributes to associated repr. */ Inkscape::XML::Node* SPMesh::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { -#ifdef MESH_DEBUG - std::cout << "sp_mesh_write() ***************************" << std::endl; +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::write", false ); #endif if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { @@ -108,6 +138,9 @@ Inkscape::XML::Node* SPMesh::write(Inkscape::XML::Document *xml_doc, Inkscape::X SPGradient::write(xml_doc, repr, flags); +#ifdef OBJECT_TRACE + objectTrace( "SPMesh::write", false ); +#endif return repr; } @@ -132,7 +165,7 @@ cairo_pattern_t* SPMesh::pattern_new(cairo_t * /*ct*/, using Geom::Y; #ifdef MESH_DEBUG - std::cout << "sp_mesh_create_pattern: (" << bbox->x0 << "," << bbox->y0 << ") (" << bbox->x1 << "," << bbox->y1 << ") " << opacity << std::endl; + std::cout << "sp_mesh_create_pattern: " << (*bbox) << " " << opacity << std::endl; #endif this->ensureArray(); diff --git a/src/sp-rect.cpp b/src/sp-rect.cpp index 40107096f..88dad5354 100644 --- a/src/sp-rect.cpp +++ b/src/sp-rect.cpp @@ -28,6 +28,7 @@ #define noRECT_VERBOSE +//#define OBJECT_TRACE SPRect::SPRect() : SPShape() { } @@ -36,6 +37,10 @@ SPRect::~SPRect() { } void SPRect::build(SPDocument* doc, Inkscape::XML::Node* repr) { +#ifdef OBJECT_TRACE + objectTrace( "SPRect::build" ); +#endif + SPShape::build(doc, repr); this->readAttr("x"); @@ -44,9 +49,20 @@ void SPRect::build(SPDocument* doc, Inkscape::XML::Node* repr) { this->readAttr("height"); this->readAttr("rx"); this->readAttr("ry"); + +#ifdef OBJECT_TRACE + objectTrace( "SPRect::build", false ); +#endif } void SPRect::set(unsigned key, gchar const *value) { + +#ifdef OBJECT_TRACE + std::stringstream temp; + temp << "SPRect::set: " << key << " " << (value?value:"null"); + objectTrace( temp.str() ); +#endif + /* fixme: We need real error processing some time */ // We must update the SVGLengths immediately or nodes may be misplaced after they are moved. @@ -104,9 +120,17 @@ void SPRect::set(unsigned key, gchar const *value) { SPShape::set(key, value); break; } +#ifdef OBJECT_TRACE + objectTrace( "SPRect::set", false ); +#endif } void SPRect::update(SPCtx* ctx, unsigned int flags) { + +#ifdef OBJECT_TRACE + objectTrace( "SPRect::update", true, flags ); +#endif + if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) { SPItemCtx const *ictx = reinterpret_cast(ctx); @@ -127,9 +151,17 @@ void SPRect::update(SPCtx* ctx, unsigned int flags) { } SPShape::update(ctx, flags); +#ifdef OBJECT_TRACE + objectTrace( "SPRect::update", false, flags ); +#endif } Inkscape::XML::Node * SPRect::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { + +#ifdef OBJECT_TRACE + objectTrace( "SPRect::write", true, flags ); +#endif + if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { repr = xml_doc->createElement("svg:rect"); } @@ -151,6 +183,10 @@ Inkscape::XML::Node * SPRect::write(Inkscape::XML::Document *xml_doc, Inkscape:: this->set_shape(); // evaluate SPCurve SPShape::write(xml_doc, repr, flags); +#ifdef OBJECT_TRACE + objectTrace( "SPRect::write", false, flags ); +#endif + return repr; } diff --git a/src/sp-stop.cpp b/src/sp-stop.cpp index d31946b94..58746c951 100644 --- a/src/sp-stop.cpp +++ b/src/sp-stop.cpp @@ -114,6 +114,7 @@ void SPStop::set(unsigned int key, const gchar* value) { // std::cout << "Got Curve" << std::endl; //curve->unref(); //} + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } break; } -- cgit v1.2.3 From f2dd0550fc1a2d4deac985d28055f305b3ad7f64 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 26 Sep 2016 14:21:26 +0200 Subject: Remove unused variable. (bzr r15136) --- src/ui/tools/mesh-tool.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index 168e26b4c..763685a0c 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -459,7 +459,6 @@ bool MeshTool::root_handler(GdkEvent* event) { if ( event->button.button == 1 ) { // Are we over a mesh line? bool over_line = false; - SPCtrlCurve *line = NULL; if (! drag->lines.empty()) { for (std::vector::const_iterator l = drag->lines.begin(); l != drag->lines.end() && (!over_line); ++l) { -- cgit v1.2.3 From f9ec83dbb254701f39d3b7a30c0bacb5eaae9ee9 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 27 Sep 2016 10:51:26 +0200 Subject: Rename to per SVG 2 CR specificiation. Note: has been repurposed to be a special shape that tightly wraps a mesh gradient. (bzr r15137) --- src/CMakeLists.txt | 4 +- src/extension/internal/cairo-render-context.cpp | 6 +- src/gradient-chemistry.cpp | 22 +- src/gradient-drag.cpp | 34 +-- src/gradient-drag.h | 4 +- src/sp-factory.cpp | 27 ++- src/sp-gradient.cpp | 24 +- src/sp-gradient.h | 2 - src/sp-mesh-array.cpp | 10 +- src/sp-mesh-array.h | 12 +- src/sp-mesh-gradient.cpp | 277 +++++++++++++++++++++++ src/sp-mesh-gradient.h | 43 ++++ src/sp-mesh.cpp | 284 ------------------------ src/sp-mesh.h | 43 ---- src/ui/tools/mesh-tool.cpp | 16 +- src/ui/widget/selected-style.cpp | 4 +- src/widgets/mesh-toolbar.cpp | 24 +- src/widgets/paint-selector.cpp | 4 +- 18 files changed, 423 insertions(+), 417 deletions(-) create mode 100644 src/sp-mesh-gradient.cpp create mode 100644 src/sp-mesh-gradient.h delete mode 100644 src/sp-mesh.cpp delete mode 100644 src/sp-mesh.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9928f9694..3c4f28aa8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -44,9 +44,9 @@ set(sp_SRC sp-marker.cpp sp-mask.cpp sp-mesh-array.cpp + sp-mesh-gradient.cpp sp-mesh-patch.cpp sp-mesh-row.cpp - sp-mesh.cpp sp-metadata.cpp sp-missing-glyph.cpp sp-namedview.cpp @@ -134,9 +134,9 @@ set(sp_SRC sp-marker.h sp-mask.h sp-mesh-array.h + sp-mesh-gradient.h sp-mesh-patch.h sp-mesh-row.h - sp-mesh.h sp-metadata.h sp-missing-glyph.h sp-namedview.h diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index 1310bb343..e65752c84 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -42,7 +42,7 @@ #include "sp-hatch.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-pattern.h" #include "sp-mask.h" #include "sp-clippath.h" @@ -1257,8 +1257,8 @@ CairoRenderContext::_createPatternForPaintServer(SPPaintServer const *const pain sp_color_get_rgb_floatv(&rg->vector.stops[i].color, rgb); cairo_pattern_add_color_stop_rgba(pattern, rg->vector.stops[i].offset, rgb[0], rgb[1], rgb[2], rg->vector.stops[i].opacity * alpha); } - } else if (SP_IS_MESH (paintserver)) { - SPMesh *mg = SP_MESH(paintserver); + } else if (SP_IS_MESHGRADIENT (paintserver)) { + SPMeshGradient *mg = SP_MESHGRADIENT(paintserver); pattern = mg->pattern_new(_cr, pbox, 1.0); } else if (SP_IS_PATTERN (paintserver)) { diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 28fdda483..061fadbaa 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -39,7 +39,7 @@ #include "sp-gradient-reference.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-stop.h" #include "gradient-drag.h" #include "gradient-chemistry.h" @@ -147,7 +147,7 @@ static SPGradient *sp_gradient_get_private_normalized(SPDocument *document, SPGr repr = xml_doc->createElement("svg:radialGradient"); } else { // Rows/patches added in sp_gradient_reset_to_userspace for new meshes. - repr = xml_doc->createElement("svg:mesh"); + repr = xml_doc->createElement("svg:meshgradient"); } // privates are garbage-collectable @@ -409,7 +409,7 @@ SPGradient *sp_gradient_reset_to_userspace(SPGradient *gr, SPItem *item) // IN SPMeshNodeArray::create() //sp_repr_set_svg_double(repr, "x", bbox->min()[Geom::X]); //sp_repr_set_svg_double(repr, "y", bbox->min()[Geom::Y]); - SPMesh* mg = SP_MESH( gr ); + SPMeshGradient* mg = SP_MESHGRADIENT( gr ); mg->array.create( mg, item, bbox ); } @@ -754,10 +754,10 @@ guint32 sp_item_gradient_stop_query_style(SPItem *item, GrPointType point_type, break; } return 0; - } else if (SP_IS_MESH(gradient)) { + } else if (SP_IS_MESHGRADIENT(gradient)) { // Mesh gradient - SPMesh *mg = SP_MESH(gradient); + SPMeshGradient *mg = SP_MESHGRADIENT(gradient); switch (point_type) { case POINT_MG_CORNER: { @@ -855,7 +855,7 @@ void sp_item_gradient_stop_set_style(SPItem *item, GrPointType point_type, guint } else { // Mesh gradient - SPMesh *mg = SP_MESH(gradient); + SPMeshGradient *mg = SP_MESHGRADIENT(gradient); bool changed = false; switch (point_type) { @@ -1211,8 +1211,8 @@ void sp_item_gradient_set_coords(SPItem *item, GrPointType point_type, guint poi gradient->requestModified(SP_OBJECT_MODIFIED_FLAG); } } - } else if (SP_IS_MESH(gradient)) { - SPMesh *mg = SP_MESH(gradient); + } else if (SP_IS_MESHGRADIENT(gradient)) { + SPMeshGradient *mg = SP_MESHGRADIENT(gradient); //Geom::Affine new_transform; //bool transform_set = false; @@ -1242,7 +1242,7 @@ void sp_item_gradient_set_coords(SPItem *item, GrPointType point_type, guint poi } if( write_repr ) { //std::cout << "Write mesh repr" << std::endl; - sp_mesh_repr_write( mg ); + mg->array.write( mg ); } } @@ -1348,8 +1348,8 @@ Geom::Point getGradientCoords(SPItem *item, GrPointType point_type, guint point_ g_warning( "Bad radial gradient handle type" ); break; } - } else if (SP_IS_MESH(gradient)) { - SPMesh *mg = SP_MESH(gradient); + } else if (SP_IS_MESHGRADIENT(gradient)) { + SPMeshGradient *mg = SP_MESHGRADIENT(gradient); switch (point_type) { case POINT_MG_CORNER: diff --git a/src/gradient-drag.cpp b/src/gradient-drag.cpp index 7bc302e61..eb33bdf9a 100644 --- a/src/gradient-drag.cpp +++ b/src/gradient-drag.cpp @@ -40,7 +40,7 @@ #include "knot.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "gradient-chemistry.h" #include "gradient-drag.h" #include "sp-stop.h" @@ -407,7 +407,7 @@ SPStop *GrDrag::addStopNearPoint(SPItem *item, Geom::Point mouse_p, double toler //r1_knot = false; } } - } else if (SP_IS_MESH(gradient)) { + } else if (SP_IS_MESHGRADIENT(gradient)) { // add_stop_near_point() // Find out which curve pointer is over and use that curve to determine @@ -415,7 +415,7 @@ SPStop *GrDrag::addStopNearPoint(SPItem *item, Geom::Point mouse_p, double toler // This is silly as we already should know which line we are over... // but that information is not saved (sp_gradient_context_is_over_line). - SPMesh *mg = SP_MESH(gradient); + SPMeshGradient *mg = SP_MESHGRADIENT(gradient); Geom::Affine transform = Geom::Affine(mg->gradientTransform)*(Geom::Affine)item->i2dt_affine(); guint rows = mg->array.patch_rows(); @@ -543,7 +543,7 @@ SPStop *GrDrag::addStopNearPoint(SPItem *item, Geom::Point mouse_p, double toler } else { - SPMesh *mg = SP_MESH(gradient); + SPMeshGradient *mg = SP_MESHGRADIENT(gradient); if( divide_row > -1 ) { mg->array.split_row( divide_row, divide_coord ); @@ -552,7 +552,7 @@ SPStop *GrDrag::addStopNearPoint(SPItem *item, Geom::Point mouse_p, double toler } // Update repr - sp_mesh_repr_write( mg ); + mg->array.write( mg ); mg->array.built = false; mg->ensureArray(); // How do we do this? @@ -1339,7 +1339,7 @@ GrDragger::moveMeshHandles ( Geom::Point pc_old, MeshNodeOperation op ) // Must be a mesh gradient SPGradient *gradient = getGradient(draggable->item, draggable->fill_or_stroke); - if ( !SP_IS_MESH( gradient ) ) continue; + if ( !SP_IS_MESHGRADIENT( gradient ) ) continue; selected_corners[ gradient ].push_back( draggable->point_i ); } @@ -1364,8 +1364,8 @@ GrDragger::moveMeshHandles ( Geom::Point pc_old, MeshNodeOperation op ) // Must be a mesh gradient SPGradient *gradient = getGradient(item, fill_or_stroke); - if ( !SP_IS_MESH( gradient ) ) continue; - SPMesh *mg = SP_MESH( gradient ); + if ( !SP_IS_MESHGRADIENT( gradient ) ) continue; + SPMeshGradient *mg = SP_MESHGRADIENT( gradient ); // pc_old is the old corner position in desktop coordinates, we need it in gradient coordinate. gradient = sp_gradient_convert_to_userspace (gradient, item, (fill_or_stroke == Inkscape::FOR_FILL) ? "fill" : "stroke"); @@ -1943,7 +1943,7 @@ void GrDrag::addDraggersLinear(SPLinearGradient *lg, SPItem *item, Inkscape::Pai /** *Add draggers for the mesh gradient mg on item */ -void GrDrag::addDraggersMesh(SPMesh *mg, SPItem *item, Inkscape::PaintTarget fill_or_stroke) +void GrDrag::addDraggersMesh(SPMeshGradient *mg, SPItem *item, Inkscape::PaintTarget fill_or_stroke) { mg->ensureArray(); std::vector< std::vector< SPMeshNode* > > nodes = mg->array.nodes; @@ -2080,8 +2080,8 @@ void GrDrag::updateDraggers() addDraggersLinear( SP_LINEARGRADIENT(server), item, Inkscape::FOR_FILL ); } else if ( SP_IS_RADIALGRADIENT(server) ) { addDraggersRadial( SP_RADIALGRADIENT(server), item, Inkscape::FOR_FILL ); - } else if ( SP_IS_MESH(server) ) { - addDraggersMesh( SP_MESH(server), item, Inkscape::FOR_FILL ); + } else if ( SP_IS_MESHGRADIENT(server) ) { + addDraggersMesh( SP_MESHGRADIENT(server), item, Inkscape::FOR_FILL ); } } } @@ -2096,8 +2096,8 @@ void GrDrag::updateDraggers() addDraggersLinear( SP_LINEARGRADIENT(server), item, Inkscape::FOR_STROKE ); } else if ( SP_IS_RADIALGRADIENT(server) ) { addDraggersRadial( SP_RADIALGRADIENT(server), item, Inkscape::FOR_STROKE ); - } else if ( SP_IS_MESH(server) ) { - addDraggersMesh( SP_MESH(server), item, Inkscape::FOR_STROKE ); + } else if ( SP_IS_MESHGRADIENT(server) ) { + addDraggersMesh( SP_MESHGRADIENT(server), item, Inkscape::FOR_STROKE ); } } } @@ -2151,9 +2151,9 @@ void GrDrag::updateLines() Geom::Point center = getGradientCoords(item, POINT_RG_CENTER, 0, Inkscape::FOR_FILL); addLine(item, center, getGradientCoords(item, POINT_RG_R1, 0, Inkscape::FOR_FILL), Inkscape::FOR_FILL); addLine(item, center, getGradientCoords(item, POINT_RG_R2, 0, Inkscape::FOR_FILL), Inkscape::FOR_FILL); - } else if ( SP_IS_MESH(server) ) { + } else if ( SP_IS_MESHGRADIENT(server) ) { - SPMesh *mg = SP_MESH(server); + SPMeshGradient *mg = SP_MESHGRADIENT(server); guint rows = mg->array.patch_rows(); guint columns = mg->array.patch_columns(); @@ -2213,10 +2213,10 @@ void GrDrag::updateLines() Geom::Point center = getGradientCoords(item, POINT_RG_CENTER, 0, Inkscape::FOR_STROKE); addLine(item, center, getGradientCoords(item, POINT_RG_R1, 0, Inkscape::FOR_STROKE), Inkscape::FOR_STROKE); addLine(item, center, getGradientCoords(item, POINT_RG_R2, 0, Inkscape::FOR_STROKE), Inkscape::FOR_STROKE); - } else if ( SP_IS_MESH(server) ) { + } else if ( SP_IS_MESHGRADIENT(server) ) { // MESH FIXME: TURN ROUTINE INTO FUNCTION AND CALL FOR BOTH FILL AND STROKE. - SPMesh *mg = SP_MESH(server); + SPMeshGradient *mg = SP_MESHGRADIENT(server); guint rows = mg->array.patch_rows(); guint columns = mg->array.patch_columns(); diff --git a/src/gradient-drag.h b/src/gradient-drag.h index 9737af0bf..cf0a35c89 100644 --- a/src/gradient-drag.h +++ b/src/gradient-drag.h @@ -34,7 +34,7 @@ class SPKnot; class SPDesktop; class SPCSSAttr; class SPLinearGradient; -class SPMesh; +class SPMeshGradient; class SPItem; class SPObject; class SPRadialGradient; @@ -209,7 +209,7 @@ private: void addDraggersRadial(SPRadialGradient *rg, SPItem *item, Inkscape::PaintTarget fill_or_stroke); void addDraggersLinear(SPLinearGradient *lg, SPItem *item, Inkscape::PaintTarget fill_or_stroke); - void addDraggersMesh( SPMesh *mg, SPItem *item, Inkscape::PaintTarget fill_or_stroke); + void addDraggersMesh( SPMeshGradient *mg, SPItem *item, Inkscape::PaintTarget fill_or_stroke); bool styleSet( const SPCSSAttr *css ); diff --git a/src/sp-factory.cpp b/src/sp-factory.cpp index 62af684a2..f98291378 100644 --- a/src/sp-factory.cpp +++ b/src/sp-factory.cpp @@ -36,7 +36,7 @@ #include "sp-linear-gradient.h" #include "sp-marker.h" #include "sp-mask.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-mesh-patch.h" #include "sp-mesh-row.h" #include "sp-metadata.h" @@ -154,8 +154,12 @@ SPObject *SPFactory::createObject(std::string const& id) ret = new SPGuide; else if (id == "svg:hatch") ret = new SPHatch; - else if (id == "svg:hatchPath") + else if (id == "svg:hatchpath") ret = new SPHatchPath; + else if (id == "svg:hatchPath") { + std::cerr << "Warning: has been renamed " << std::endl; + ret = new SPHatchPath; + } else if (id == "svg:image") ret = new SPImage; else if (id == "svg:g") @@ -168,8 +172,17 @@ SPObject *SPFactory::createObject(std::string const& id) ret = new SPMarker; else if (id == "svg:mask") ret = new SPMask; - else if (id == "svg:mesh") - ret = new SPMesh; + else if (id == "svg:mesh") { // SVG 2 old + ret = new SPMeshGradient; + std::cerr << "Warning: has been renamed ." << std::endl; + std::cerr << "Warning: has been repurposed as a shape that tightly wraps a ." << std::endl; + } + else if (id == "svg:meshGradient") { // SVG 2 old + ret = new SPMeshGradient; + std::cerr << "Warning: has been renamed " << std::endl; + } + else if (id == "svg:meshgradient") // SVG 2 + ret = new SPMeshGradient; else if (id == "svg:meshpatch") ret = new SPMeshpatch; else if (id == "svg:meshrow") @@ -198,7 +211,11 @@ SPObject *SPFactory::createObject(std::string const& id) ret = new SPRoot; else if (id == "svg:script") ret = new SPScript; - else if (id == "svg:solidColor") + else if (id == "svg:solidColor") { + ret = new SPSolidColor; + std::cerr << "Warning: has been renamed " << std::endl; + } + else if (id == "svg:solidcolor") ret = new SPSolidColor; else if (id == "spiral") ret = new SPSpiral; diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp index 5c0fdfe2b..d3e38485b 100644 --- a/src/sp-gradient.cpp +++ b/src/sp-gradient.cpp @@ -1,6 +1,6 @@ /** \file * SPGradient, SPStop, SPLinearGradient, SPRadialGradient, - * SPMesh, SPMeshRow, SPMeshPatch + * SPMeshGradient, SPMeshRow, SPMeshPatch */ /* * Authors: @@ -44,7 +44,7 @@ #include "sp-gradient-reference.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-mesh-row.h" #include "sp-stop.h" @@ -115,7 +115,7 @@ bool SPGradient::isEquivalent(SPGradient *that) else if ( (SP_IS_LINEARGRADIENT(this) && SP_IS_LINEARGRADIENT(that)) || (SP_IS_RADIALGRADIENT(this) && SP_IS_RADIALGRADIENT(that)) || - (SP_IS_MESH(this) && SP_IS_MESH(that))) { + (SP_IS_MESHGRADIENT(this) && SP_IS_MESHGRADIENT(that))) { if(!this->isAligned(that))break; } else { break; } // this should never happen, some unhandled type of gradient @@ -200,9 +200,9 @@ bool SPGradient::isAligned(SPGradient *that) (sg->fy.computed != tg->fy.computed) ) { break; } } else if( sg->cx._set || sg->cy._set || sg->fx._set || sg->fy._set || sg->r._set ) { break; } // some mix of set and not set // none set? assume aligned and fall through - } else if (SP_IS_MESH(this) && SP_IS_MESH(that)) { - SPMesh *sg=SP_MESH(this); - SPMesh *tg=SP_MESH(that); + } else if (SP_IS_MESHGRADIENT(this) && SP_IS_MESHGRADIENT(that)) { + SPMeshGradient *sg=SP_MESHGRADIENT(this); + SPMeshGradient *tg=SP_MESHGRADIENT(that); if( sg->x._set != !tg->x._set) { break; } if( sg->y._set != !tg->y._set) { break; } @@ -514,7 +514,7 @@ void SPGradient::modified(guint flags) #endif if (flags & SP_OBJECT_CHILD_MODIFIED_FLAG) { - if (SP_IS_MESH(this)) { + if (SP_IS_MESHGRADIENT(this)) { this->invalidateArray(); } else { this->invalidateVector(); @@ -522,7 +522,7 @@ void SPGradient::modified(guint flags) } if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) { - if (SP_IS_MESH(this)) { + if (SP_IS_MESHGRADIENT(this)) { this->ensureArray(); } else { this->ensureVector(); @@ -1025,12 +1025,12 @@ void SPGradient::rebuildArray() { // std::cout << "SPGradient::rebuildArray()" << std::endl; - if( !SP_IS_MESH(this) ) { + if( !SP_IS_MESHGRADIENT(this) ) { g_warning( "SPGradient::rebuildArray() called for non-mesh gradient" ); return; } - array.read( SP_MESH( this ) ); + array.read( SP_MESHGRADIENT( this ) ); } Geom::Affine @@ -1121,9 +1121,7 @@ sp_gradient_create_preview_pattern(SPGradient *gr, double width) { cairo_pattern_t *pat = NULL; - // CPPIFY - //if( gr->get_type() != SP_GRADIENT_TYPE_MESH ) { - if (!SP_IS_MESH(gr)) { + if (!SP_IS_MESHGRADIENT(gr)) { gr->ensureVector(); pat = cairo_pattern_create_linear(0, 0, width, 0); diff --git a/src/sp-gradient.h b/src/sp-gradient.h index ab45d6f08..7348bb5ca 100644 --- a/src/sp-gradient.h +++ b/src/sp-gradient.h @@ -210,8 +210,6 @@ sp_gradient_pattern_common_setup(cairo_pattern_t *cp, void sp_gradient_repr_write_vector(SPGradient *gr); void sp_gradient_repr_clear_vector(SPGradient *gr); -void sp_mesh_repr_write(SPMesh *mg); - cairo_pattern_t *sp_gradient_create_preview_pattern(SPGradient *gradient, double width); /** Transforms to/from gradient position space in given environment */ diff --git a/src/sp-mesh-array.cpp b/src/sp-mesh-array.cpp index 41a95a41a..c47c338de 100644 --- a/src/sp-mesh-array.cpp +++ b/src/sp-mesh-array.cpp @@ -46,7 +46,7 @@ #include "document.h" #include "sp-root.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-mesh-array.h" #include "sp-mesh-row.h" #include "sp-mesh-patch.h" @@ -627,7 +627,7 @@ void SPMeshPatchI::setStopPtr( guint i, SPStop* stop ) { }; -SPMeshNodeArray::SPMeshNodeArray( SPMesh *mg ) { +SPMeshNodeArray::SPMeshNodeArray( SPMeshGradient *mg ) { read( mg ); @@ -675,7 +675,7 @@ SPMeshNodeArray& SPMeshNodeArray::operator=( const SPMeshNodeArray& rhs ) { // Fill array with data from mesh objects. // Returns true of array's dimensions unchanged. -bool SPMeshNodeArray::read( SPMesh *mg_in ) { +bool SPMeshNodeArray::read( SPMeshGradient *mg_in ) { mg = mg_in; @@ -914,7 +914,7 @@ bool SPMeshNodeArray::read( SPMesh *mg_in ) { /** Write repr using our array. */ -void SPMeshNodeArray::write( SPMesh *mg ) { +void SPMeshNodeArray::write( SPMeshGradient *mg ) { // std::cout << "SPMeshNodeArray::write: entrance:" << std::endl; // print(); @@ -1115,7 +1115,7 @@ static SPColor default_color( SPItem *item ) { /** Create a default mesh. */ -void SPMeshNodeArray::create( SPMesh *mg, SPItem *item, Geom::OptRect bbox ) { +void SPMeshNodeArray::create( SPMeshGradient *mg, SPItem *item, Geom::OptRect bbox ) { // std::cout << "SPMeshNodeArray::create: Entrance" << std::endl; diff --git a/src/sp-mesh-array.h b/src/sp-mesh-array.h index eb01304a2..49ee88e53 100644 --- a/src/sp-mesh-array.h +++ b/src/sp-mesh-array.h @@ -140,14 +140,14 @@ public: void setStopPtr( unsigned int i, SPStop* ); }; -class SPMesh; +class SPMeshGradient; // An array of mesh nodes. class SPMeshNodeArray { // Should be private public: - SPMesh *mg; + SPMeshGradient *mg; std::vector< std::vector< SPMeshNode* > > nodes; public: @@ -162,16 +162,16 @@ public: friend class SPMeshPatchI; SPMeshNodeArray() { built = false; mg = NULL; draggers_valid = false; }; - SPMeshNodeArray( SPMesh *mg ); + SPMeshNodeArray( SPMeshGradient *mg ); SPMeshNodeArray( const SPMeshNodeArray& rhs ); SPMeshNodeArray& operator=(const SPMeshNodeArray& rhs); ~SPMeshNodeArray() { clear(); }; bool built; - bool read( SPMesh *mg ); - void write( SPMesh *mg ); - void create( SPMesh *mg, SPItem *item, Geom::OptRect bbox ); + bool read( SPMeshGradient *mg ); + void write( SPMeshGradient *mg ); + void create( SPMeshGradient *mg, SPItem *item, Geom::OptRect bbox ); void clear(); void print(); diff --git a/src/sp-mesh-gradient.cpp b/src/sp-mesh-gradient.cpp new file mode 100644 index 000000000..572131c60 --- /dev/null +++ b/src/sp-mesh-gradient.cpp @@ -0,0 +1,277 @@ +#include + +#include "attributes.h" +#include "display/cairo-utils.h" + +#include "sp-mesh-gradient.h" + +/* + * Mesh Gradient + */ +//#define MESH_DEBUG +//#define OBJECT_TRACE + +SPMeshGradient::SPMeshGradient() : SPGradient(), type( SP_MESH_TYPE_COONS ), type_set(false) { +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::SPMeshGradient" ); +#endif + + // Start coordinate of mesh + this->x.unset(SVGLength::NONE, 0.0, 0.0); + this->y.unset(SVGLength::NONE, 0.0, 0.0); + +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::SPMeshGradient", false ); +#endif +} + +SPMeshGradient::~SPMeshGradient() { +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::~SPMeshGradient (empty function)" ); + objectTrace( "SPMeshGradient::~SPMeshGradient", false ); +#endif +} + +void SPMeshGradient::build(SPDocument *document, Inkscape::XML::Node *repr) { +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::build" ); +#endif + + SPGradient::build(document, repr); + + // Start coordinate of meshgradient + this->readAttr( "x" ); + this->readAttr( "y" ); + + this->readAttr( "type" ); + +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::build", false ); +#endif +} + + +void SPMeshGradient::set(unsigned key, gchar const *value) { +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::set" ); +#endif + + switch (key) { + case SP_ATTR_X: + if (!this->x.read(value)) { + this->x.unset(SVGLength::NONE, 0.0, 0.0); + } + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; + + case SP_ATTR_Y: + if (!this->y.read(value)) { + this->y.unset(SVGLength::NONE, 0.0, 0.0); + } + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; + + case SP_ATTR_TYPE: + if (value) { + if (!strcmp(value, "coons")) { + this->type = SP_MESH_TYPE_COONS; + } else if (!strcmp(value, "bicubic")) { + this->type = SP_MESH_TYPE_BICUBIC; + } else { + std::cerr << "SPMeshGradient::set(): invalid value " << value << std::endl; + } + this->type_set = TRUE; + } else { + // std::cout << "SPMeshGradient::set() No value " << std::endl; + this->type = SP_MESH_TYPE_COONS; + this->type_set = FALSE; + } + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); + break; + + default: + SPGradient::set(key, value); + break; + } + +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::set", false ); +#endif +} + +/** + * Write mesh gradient attributes to associated repr. + */ +Inkscape::XML::Node* SPMeshGradient::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::write", false ); +#endif + + if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { + repr = xml_doc->createElement("svg:meshgradient"); + } + + if ((flags & SP_OBJECT_WRITE_ALL) || this->x._set) { + sp_repr_set_svg_double(repr, "x", this->x.computed); + } + + if ((flags & SP_OBJECT_WRITE_ALL) || this->y._set) { + sp_repr_set_svg_double(repr, "y", this->y.computed); + } + + if ((flags & SP_OBJECT_WRITE_ALL) || this->type_set) { + switch (this->type) { + case SP_MESH_TYPE_COONS: + repr->setAttribute("type", "coons"); + break; + case SP_MESH_TYPE_BICUBIC: + repr->setAttribute("type", "bicubic"); + break; + default: + // Do nothing + break; + } + } + + SPGradient::write(xml_doc, repr, flags); + +#ifdef OBJECT_TRACE + objectTrace( "SPMeshGradient::write", false ); +#endif + return repr; +} + +cairo_pattern_t* SPMeshGradient::pattern_new(cairo_t * /*ct*/, +#if defined(MESH_DEBUG) || (CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 4)) + Geom::OptRect const &bbox, + double opacity +#else + Geom::OptRect const & /*bbox*/, + double /*opacity*/ +#endif + ) +{ + using Geom::X; + using Geom::Y; + +#ifdef MESH_DEBUG + std::cout << "sp_meshgradient_create_pattern: " << (*bbox) << " " << opacity << std::endl; +#endif + + this->ensureArray(); + + cairo_pattern_t *cp = NULL; + +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 4) + SPMeshNodeArray* my_array = &array; + + if( type_set ) { + switch (type) { + case SP_MESH_TYPE_COONS: + // std::cout << "SPMeshGradient::pattern_new: Coons" << std::endl; + break; + case SP_MESH_TYPE_BICUBIC: + array.bicubic( &array_smoothed, type ); + my_array = &array_smoothed; + break; + } + } + + cp = cairo_pattern_create_mesh(); + + for( unsigned int i = 0; i < my_array->patch_rows(); ++i ) { + for( unsigned int j = 0; j < my_array->patch_columns(); ++j ) { + + SPMeshPatchI patch( &(my_array->nodes), i, j ); + + cairo_mesh_pattern_begin_patch( cp ); + cairo_mesh_pattern_move_to( cp, patch.getPoint( 0, 0 )[X], patch.getPoint( 0, 0 )[Y] ); + + for( unsigned int k = 0; k < 4; ++k ) { +#ifdef DEBUG_MESH + std::cout << i << " " << j << " " + << patch.getPathType( k ) << " ("; + for( int p = 0; p < 4; ++p ) { + std::cout << patch.getPoint( k, p ); + } + std::cout << ") " + << patch.getColor( k ).toString() << std::endl; +#endif + + switch ( patch.getPathType( k ) ) { + case 'l': + case 'L': + case 'z': + case 'Z': + cairo_mesh_pattern_line_to( cp, + patch.getPoint( k, 3 )[X], + patch.getPoint( k, 3 )[Y] ); + break; + case 'c': + case 'C': + { + std::vector< Geom::Point > pts = patch.getPointsForSide( k ); + cairo_mesh_pattern_curve_to( cp, + pts[1][X], pts[1][Y], + pts[2][X], pts[2][Y], + pts[3][X], pts[3][Y] ); + break; + } + default: + // Shouldn't happen + std::cout << "sp_mesh_create_pattern: path error" << std::endl; + } + + if( patch.tensorIsSet(k) ) { + // Tensor point defined relative to corner. + Geom::Point t = patch.getTensorPoint(k); + cairo_mesh_pattern_set_control_point( cp, k, t[X], t[Y] ); + //std::cout << " sp_mesh_create_pattern: tensor " << k + // << " set to " << t << "." << std::endl; + } else { + // Geom::Point t = patch.coonsTensorPoint(k); + //std::cout << " sp_mesh_create_pattern: tensor " << k + // << " calculated as " << t << "." <gradientTransform; + if (this->getUnits() == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) { + Geom::Affine bbox2user(bbox->width(), 0, 0, bbox->height(), bbox->left(), bbox->top()); + gs2user *= bbox2user; + } + ink_cairo_pattern_set_matrix(cp, gs2user.inverse()); + +#else + static bool shown = false; + if( !shown ) { + std::cout << "sp_mesh_create_pattern: needs cairo >= 1.11.4, using " + << cairo_version_string() << std::endl; + shown = true; + } +#endif + + /* + cairo_pattern_t *cp = cairo_pattern_create_radial( + rg->fx.computed, rg->fy.computed, 0, + rg->cx.computed, rg->cy.computed, rg->r.computed); + sp_gradient_pattern_common_setup(cp, gr, bbox, opacity); + */ + + return cp; +} diff --git a/src/sp-mesh-gradient.h b/src/sp-mesh-gradient.h new file mode 100644 index 000000000..a221554a3 --- /dev/null +++ b/src/sp-mesh-gradient.h @@ -0,0 +1,43 @@ +#ifndef SP_MESH_GRADIENT_H +#define SP_MESH_GRADIENT_H + +/** \file + * SPMeshGradient: SVG implementation. + */ + +#include "svg/svg-length.h" +#include "sp-gradient.h" + +#define SP_MESHGRADIENT(obj) (dynamic_cast((SPObject*)obj)) +#define SP_IS_MESHGRADIENT(obj) (dynamic_cast((SPObject*)obj) != NULL) + +/** Mesh gradient. */ +class SPMeshGradient : public SPGradient { +public: + SPMeshGradient(); + virtual ~SPMeshGradient(); + + SVGLength x; // Upper left corner of meshgradient + SVGLength y; // Upper right corner of mesh + SPMeshType type; + bool type_set; + virtual cairo_pattern_t* pattern_new(cairo_t *ct, Geom::OptRect const &bbox, double opacity); + +protected: + virtual void build(SPDocument *document, Inkscape::XML::Node *repr); + virtual void set(unsigned key, char const *value); + virtual Inkscape::XML::Node* write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, unsigned int flags); +}; + +#endif /* !SP_MESH_GRADIENT_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/sp-mesh.cpp b/src/sp-mesh.cpp deleted file mode 100644 index 1cdb2f1cc..000000000 --- a/src/sp-mesh.cpp +++ /dev/null @@ -1,284 +0,0 @@ -#include - -#include "attributes.h" -#include "display/cairo-utils.h" - -#include "sp-mesh.h" - -/* - * Mesh Gradient - */ -//#define MESH_DEBUG -//#define OBJECT_TRACE - -SPMesh::SPMesh() : SPGradient(), type( SP_MESH_TYPE_COONS ), type_set(false) { -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::SPMesh" ); -#endif - - // Start coordinate of mesh - this->x.unset(SVGLength::NONE, 0.0, 0.0); - this->y.unset(SVGLength::NONE, 0.0, 0.0); - -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::SPMesh", false ); -#endif -} - -SPMesh::~SPMesh() { -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::~SPMesh (empty function)" ); - objectTrace( "SPMesh::~SPMesh", false ); -#endif -} - -void SPMesh::build(SPDocument *document, Inkscape::XML::Node *repr) { -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::build" ); -#endif - - SPGradient::build(document, repr); - - // Start coordinate of mesh - this->readAttr( "x" ); - this->readAttr( "y" ); - - this->readAttr( "type" ); - -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::build", false ); -#endif -} - - -void SPMesh::set(unsigned key, gchar const *value) { -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::set" ); -#endif - - switch (key) { - case SP_ATTR_X: - if (!this->x.read(value)) { - this->x.unset(SVGLength::NONE, 0.0, 0.0); - } - - this->requestModified(SP_OBJECT_MODIFIED_FLAG); - break; - - case SP_ATTR_Y: - if (!this->y.read(value)) { - this->y.unset(SVGLength::NONE, 0.0, 0.0); - } - - this->requestModified(SP_OBJECT_MODIFIED_FLAG); - break; - - case SP_ATTR_TYPE: - if (value) { - if (!strcmp(value, "coons")) { - this->type = SP_MESH_TYPE_COONS; - } else if (!strcmp(value, "bicubic")) { - this->type = SP_MESH_TYPE_BICUBIC; - } else { - std::cerr << "SPMesh::set(): invalid value " << value << std::endl; - } - this->type_set = TRUE; - } else { - // std::cout << "SPMesh::set() No value " << std::endl; - this->type = SP_MESH_TYPE_COONS; - this->type_set = FALSE; - } - - this->requestModified(SP_OBJECT_MODIFIED_FLAG); - break; - - default: - SPGradient::set(key, value); - break; - } - -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::set", false ); -#endif -} - -/** - * Write mesh gradient attributes to associated repr. - */ -Inkscape::XML::Node* SPMesh::write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, guint flags) { -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::write", false ); -#endif - - if ((flags & SP_OBJECT_WRITE_BUILD) && !repr) { - repr = xml_doc->createElement("svg:mesh"); - } - - if ((flags & SP_OBJECT_WRITE_ALL) || this->x._set) { - sp_repr_set_svg_double(repr, "x", this->x.computed); - } - - if ((flags & SP_OBJECT_WRITE_ALL) || this->y._set) { - sp_repr_set_svg_double(repr, "y", this->y.computed); - } - - if ((flags & SP_OBJECT_WRITE_ALL) || this->type_set) { - switch (this->type) { - case SP_MESH_TYPE_COONS: - repr->setAttribute("type", "coons"); - break; - case SP_MESH_TYPE_BICUBIC: - repr->setAttribute("type", "bicubic"); - break; - default: - // Do nothing - break; - } - } - - SPGradient::write(xml_doc, repr, flags); - -#ifdef OBJECT_TRACE - objectTrace( "SPMesh::write", false ); -#endif - return repr; -} - -void -sp_mesh_repr_write(SPMesh *mg) -{ - mg->array.write( mg ); -} - - -cairo_pattern_t* SPMesh::pattern_new(cairo_t * /*ct*/, -#if defined(MESH_DEBUG) || (CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 4)) - Geom::OptRect const &bbox, - double opacity -#else - Geom::OptRect const & /*bbox*/, - double /*opacity*/ -#endif - ) -{ - using Geom::X; - using Geom::Y; - -#ifdef MESH_DEBUG - std::cout << "sp_mesh_create_pattern: " << (*bbox) << " " << opacity << std::endl; -#endif - - this->ensureArray(); - - cairo_pattern_t *cp = NULL; - -#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 11, 4) - SPMeshNodeArray* my_array = &array; - - if( type_set ) { - switch (type) { - case SP_MESH_TYPE_COONS: - // std::cout << "SPMesh::pattern_new: Coons" << std::endl; - break; - case SP_MESH_TYPE_BICUBIC: - array.bicubic( &array_smoothed, type ); - my_array = &array_smoothed; - break; - } - } - - cp = cairo_pattern_create_mesh(); - - for( unsigned int i = 0; i < my_array->patch_rows(); ++i ) { - for( unsigned int j = 0; j < my_array->patch_columns(); ++j ) { - - SPMeshPatchI patch( &(my_array->nodes), i, j ); - - cairo_mesh_pattern_begin_patch( cp ); - cairo_mesh_pattern_move_to( cp, patch.getPoint( 0, 0 )[X], patch.getPoint( 0, 0 )[Y] ); - - for( unsigned int k = 0; k < 4; ++k ) { -#ifdef DEBUG_MESH - std::cout << i << " " << j << " " - << patch.getPathType( k ) << " ("; - for( int p = 0; p < 4; ++p ) { - std::cout << patch.getPoint( k, p ); - } - std::cout << ") " - << patch.getColor( k ).toString() << std::endl; -#endif - - switch ( patch.getPathType( k ) ) { - case 'l': - case 'L': - case 'z': - case 'Z': - cairo_mesh_pattern_line_to( cp, - patch.getPoint( k, 3 )[X], - patch.getPoint( k, 3 )[Y] ); - break; - case 'c': - case 'C': - { - std::vector< Geom::Point > pts = patch.getPointsForSide( k ); - cairo_mesh_pattern_curve_to( cp, - pts[1][X], pts[1][Y], - pts[2][X], pts[2][Y], - pts[3][X], pts[3][Y] ); - break; - } - default: - // Shouldn't happen - std::cout << "sp_mesh_create_pattern: path error" << std::endl; - } - - if( patch.tensorIsSet(k) ) { - // Tensor point defined relative to corner. - Geom::Point t = patch.getTensorPoint(k); - cairo_mesh_pattern_set_control_point( cp, k, t[X], t[Y] ); - //std::cout << " sp_mesh_create_pattern: tensor " << k - // << " set to " << t << "." << std::endl; - } else { - // Geom::Point t = patch.coonsTensorPoint(k); - //std::cout << " sp_mesh_create_pattern: tensor " << k - // << " calculated as " << t << "." <gradientTransform; - if (this->getUnits() == SP_GRADIENT_UNITS_OBJECTBOUNDINGBOX) { - Geom::Affine bbox2user(bbox->width(), 0, 0, bbox->height(), bbox->left(), bbox->top()); - gs2user *= bbox2user; - } - ink_cairo_pattern_set_matrix(cp, gs2user.inverse()); - -#else - static bool shown = false; - if( !shown ) { - std::cout << "sp_mesh_create_pattern: needs cairo >= 1.11.4, using " - << cairo_version_string() << std::endl; - shown = true; - } -#endif - - /* - cairo_pattern_t *cp = cairo_pattern_create_radial( - rg->fx.computed, rg->fy.computed, 0, - rg->cx.computed, rg->cy.computed, rg->r.computed); - sp_gradient_pattern_common_setup(cp, gr, bbox, opacity); - */ - - return cp; -} diff --git a/src/sp-mesh.h b/src/sp-mesh.h deleted file mode 100644 index 6f992d034..000000000 --- a/src/sp-mesh.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef SP_MESH_H -#define SP_MESH_H - -/** \file - * SPMesh: SVG implementation. - */ - -#include "svg/svg-length.h" -#include "sp-gradient.h" - -#define SP_MESH(obj) (dynamic_cast((SPObject*)obj)) -#define SP_IS_MESH(obj) (dynamic_cast((SPObject*)obj) != NULL) - -/** Mesh gradient. */ -class SPMesh : public SPGradient { -public: - SPMesh(); - virtual ~SPMesh(); - - SVGLength x; // Upper left corner of mesh - SVGLength y; // Upper right corner of mesh - SPMeshType type; - bool type_set; - virtual cairo_pattern_t* pattern_new(cairo_t *ct, Geom::OptRect const &bbox, double opacity); - -protected: - virtual void build(SPDocument *document, Inkscape::XML::Node *repr); - virtual void set(unsigned key, char const *value); - virtual Inkscape::XML::Node* write(Inkscape::XML::Document *xml_doc, Inkscape::XML::Node *repr, unsigned int flags); -}; - -#endif /* !SP_MESH_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:fileencoding=utf-8:textwidth=99 : diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp index 763685a0c..aac8239f3 100644 --- a/src/ui/tools/mesh-tool.cpp +++ b/src/ui/tools/mesh-tool.cpp @@ -47,7 +47,7 @@ // Mesh specific #include "ui/tools/mesh-tool.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "display/sp-ctrlcurve.h" using Inkscape::DocumentUndo; @@ -161,9 +161,9 @@ void MeshTool::selection_changed(Inkscape::Selection* /*sel*/) { // if (style && (style->fill.isPaintserver())) { // SPPaintServer *server = item->style->getFillPaintServer(); - // if ( SP_IS_MESH(server) ) { + // if ( SP_IS_MESHGRADIENT(server) ) { - // SPMesh *mg = SP_MESH(server); + // SPMeshGradient *mg = SP_MESHGRADIENT(server); // guint rows = 0;//mg->array.patches.size(); // for ( guint i = 0; i < rows; ++i ) { @@ -330,8 +330,8 @@ sp_mesh_context_corner_operation (MeshTool *rc, MeshCornerOperation operation ) SPDocument *doc = NULL; GrDrag *drag = rc->_grdrag; - std::map > points; - std::map items; + std::map > points; + std::map items; // Get list of selected draggers for each mesh. // For all selected draggers @@ -345,7 +345,7 @@ sp_mesh_context_corner_operation (MeshTool *rc, MeshCornerOperation operation ) if( d->point_type != POINT_MG_CORNER ) continue; // Find the gradient - SPMesh *gradient = SP_MESH( getGradient (d->item, d->fill_or_stroke) ); + SPMeshGradient *gradient = SP_MESHGRADIENT( getGradient (d->item, d->fill_or_stroke) ); // Collect points together for same gradient points[gradient].push_back( d->point_i ); @@ -354,8 +354,8 @@ sp_mesh_context_corner_operation (MeshTool *rc, MeshCornerOperation operation ) } // Loop over meshes. - for( std::map >::const_iterator iter = points.begin(); iter != points.end(); ++iter) { - SPMesh *mg = SP_MESH( iter->first ); + for( std::map >::const_iterator iter = points.begin(); iter != points.end(); ++iter) { + SPMeshGradient *mg = SP_MESHGRADIENT( iter->first ); if( iter->second.size() > 0 ) { guint noperation = 0; switch (operation) { diff --git a/src/ui/widget/selected-style.cpp b/src/ui/widget/selected-style.cpp index fd83a62c9..301a3b2e0 100644 --- a/src/ui/widget/selected-style.cpp +++ b/src/ui/widget/selected-style.cpp @@ -25,7 +25,7 @@ #include "sp-namedview.h" #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-pattern.h" #include "ui/dialog/dialog-manager.h" #include "ui/dialog/fill-and-stroke.h" @@ -1010,7 +1010,7 @@ SelectedStyle::update() place->set_tooltip_text(__rgradient[i]); _mode[i] = SS_RGRADIENT; #ifdef WITH_MESH - } else if (SP_IS_MESH(server)) { + } else if (SP_IS_MESHGRADIENT(server)) { SPGradient *vector = SP_GRADIENT(server)->getVector(); sp_gradient_image_set_gradient(SP_GRADIENT_IMAGE(_gradient_preview_m[i]), vector); place->add(_gradient_box_m[i]); diff --git a/src/widgets/mesh-toolbar.cpp b/src/widgets/mesh-toolbar.cpp index fb540b5f5..0e689fee0 100644 --- a/src/widgets/mesh-toolbar.cpp +++ b/src/widgets/mesh-toolbar.cpp @@ -41,7 +41,7 @@ #include "ui/tools/gradient-tool.h" #include "ui/tools/mesh-tool.h" #include "gradient-drag.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "gradient-chemistry.h" #include "ui/icon-names.h" @@ -70,7 +70,7 @@ static bool blocked = false; * Get the current selection and dragger status from the desktop */ void ms_read_selection( Inkscape::Selection *selection, - SPMesh *&ms_selected, + SPMeshGradient *&ms_selected, bool &ms_selected_multi, SPMeshType &ms_type, bool &ms_type_multi ) @@ -87,9 +87,9 @@ void ms_read_selection( Inkscape::Selection *selection, if (style && (style->fill.isPaintserver())) { SPPaintServer *server = item->style->getFillPaintServer(); - if ( SP_IS_MESH(server) ) { + if ( SP_IS_MESHGRADIENT(server) ) { - SPMesh *gradient = SP_MESH(server); // ->getVector(); + SPMeshGradient *gradient = SP_MESHGRADIENT(server); // ->getVector(); SPMeshType type = gradient->type; if (gradient != ms_selected) { @@ -112,9 +112,9 @@ void ms_read_selection( Inkscape::Selection *selection, if (style && (style->stroke.isPaintserver())) { SPPaintServer *server = item->style->getStrokePaintServer(); - if ( SP_IS_MESH(server) ) { + if ( SP_IS_MESHGRADIENT(server) ) { - SPMesh *gradient = SP_MESH(server); // ->getVector(); + SPMeshGradient *gradient = SP_MESHGRADIENT(server); // ->getVector(); SPMeshType type = gradient->type; if (gradient != ms_selected) { @@ -164,7 +164,7 @@ static void ms_tb_selection_changed(Inkscape::Selection * /*selection*/, gpointe // // Hide/show handles? // } - SPMesh *ms_selected = 0; + SPMeshGradient *ms_selected = 0; SPMeshType ms_type = SP_MESH_TYPE_COONS; bool ms_selected_multi = false; bool ms_type_multi = false; @@ -203,9 +203,9 @@ static void ms_defs_modified(SPObject * /*defs*/, guint /*flags*/, GObject *widg ms_tb_selection_changed(NULL, widget); } -void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMesh *&ms_selected) +void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMeshGradient *&ms_selected) { - SPMesh *gradient = 0; + SPMeshGradient *gradient = 0; auto itemlist= selection->items(); for(auto i=itemlist.begin();i!=itemlist.end();++i){ @@ -220,8 +220,8 @@ void ms_get_dt_selected_gradient(Inkscape::Selection *selection, SPMesh *&ms_sel server = item->style->getStrokePaintServer(); } - if ( SP_IS_MESH(server) ) { - gradient = SP_MESH(server); + if ( SP_IS_MESHGRADIENT(server) ) { + gradient = SP_MESHGRADIENT(server); } } @@ -295,7 +295,7 @@ static void ms_type_changed(EgeSelectOneAction *act, GtkWidget *widget) SPDesktop *desktop = static_cast(g_object_get_data(G_OBJECT(widget), "desktop")); Inkscape::Selection *selection = desktop->getSelection(); - SPMesh *gradient = 0; + SPMeshGradient *gradient = 0; ms_get_dt_selected_gradient(selection, gradient); if (gradient) { diff --git a/src/widgets/paint-selector.cpp b/src/widgets/paint-selector.cpp index 01118f337..ddac90730 100644 --- a/src/widgets/paint-selector.cpp +++ b/src/widgets/paint-selector.cpp @@ -33,7 +33,7 @@ #include "sp-linear-gradient.h" #include "sp-radial-gradient.h" -#include "sp-mesh.h" +#include "sp-mesh-gradient.h" #include "sp-stop.h" /* fixme: Move it from dialogs to here */ #include "gradient-selector.h" @@ -1221,7 +1221,7 @@ SPPaintSelector::Mode SPPaintSelector::getModeForStyle(SPStyle const & style, Fi } else if (SP_IS_RADIALGRADIENT(server)) { mode = MODE_GRADIENT_RADIAL; #ifdef WITH_MESH - } else if (SP_IS_MESH(server)) { + } else if (SP_IS_MESHGRADIENT(server)) { mode = MODE_GRADIENT_MESH; #endif } else if (SP_IS_PATTERN(server)) { -- cgit v1.2.3 From 9d75fc514859a51b63344ab77e85e75740bf524a Mon Sep 17 00:00:00 2001 From: Marc Jeanmougin Date: Tue, 27 Sep 2016 12:05:22 +0200 Subject: fix tabs in src/main-cmdlineact (bzr r15138) --- src/main-cmdlineact.cpp | 117 +++++++++++++++++++++++++----------------------- src/main-cmdlineact.h | 12 ++--- 2 files changed, 68 insertions(+), 61 deletions(-) diff --git a/src/main-cmdlineact.cpp b/src/main-cmdlineact.cpp index c1b756ad5..a23c036a0 100644 --- a/src/main-cmdlineact.cpp +++ b/src/main-cmdlineact.cpp @@ -23,74 +23,81 @@ namespace Inkscape { std::list CmdLineAction::_list; -CmdLineAction::CmdLineAction (bool isVerb, gchar const * arg) : _isVerb(isVerb), _arg(NULL) { - if (arg != NULL) { - _arg = g_strdup(arg); - } +CmdLineAction::CmdLineAction(bool isVerb, gchar const *arg) : _isVerb(isVerb), _arg(NULL) +{ + if (arg != NULL) { + _arg = g_strdup(arg); + } - _list.insert(_list.end(), this); + _list.insert(_list.end(), this); - return; + return; } -CmdLineAction::~CmdLineAction () { - if (_arg != NULL) { - g_free(_arg); - } +CmdLineAction::~CmdLineAction() +{ + if (_arg != NULL) { + g_free(_arg); + } } void -CmdLineAction::doIt (ActionContext const & context) { - //printf("Doing: %s\n", _arg); - if (_isVerb) { - Inkscape::Verb * verb = Inkscape::Verb::getbyid(_arg); - if (verb == NULL) { - printf(_("Unable to find verb ID '%s' specified on the command line.\n"), _arg); - return; - } - SPAction * action = verb->get_action(context); - sp_action_perform(action, NULL); - } else { - if (context.getDocument() == NULL || context.getSelection() == NULL) { return; } - - SPDocument * doc = context.getDocument(); - SPObject * obj = doc->getObjectById(_arg); - if (obj == NULL) { - printf(_("Unable to find node ID: '%s'\n"), _arg); - return; - } - - Inkscape::Selection * selection = context.getSelection(); - selection->add(obj); - } - return; +CmdLineAction::doIt(ActionContext const &context) +{ + //printf("Doing: %s\n", _arg); + if (_isVerb) { + Inkscape::Verb *verb = Inkscape::Verb::getbyid(_arg); + if (verb == NULL) { + printf(_("Unable to find verb ID '%s' specified on the command line.\n"), _arg); + return; + } + SPAction *action = verb->get_action(context); + sp_action_perform(action, NULL); + } else { + if (context.getDocument() == NULL || context.getSelection() == NULL) { + return; + } + + SPDocument *doc = context.getDocument(); + SPObject *obj = doc->getObjectById(_arg); + if (obj == NULL) { + printf(_("Unable to find node ID: '%s'\n"), _arg); + return; + } + + Inkscape::Selection *selection = context.getSelection(); + selection->add(obj); + } + return; } bool -CmdLineAction::doList (ActionContext const & context) { - bool hasActions = !_list.empty(); - for (std::list::iterator i = _list.begin(); - i != _list.end(); ++i) { - CmdLineAction * entry = *i; - entry->doIt(context); - } - return hasActions; +CmdLineAction::doList(ActionContext const &context) +{ + bool hasActions = !_list.empty(); + for (std::list::iterator i = _list.begin(); + i != _list.end(); ++i) { + CmdLineAction *entry = *i; + entry->doIt(context); + } + return hasActions; } bool -CmdLineAction::idle (void) { - std::list 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::iterator i = desktops.begin(); - i != desktops.end(); ++i) { - SPDesktop * desktop = *i; - //Inkscape::UI::View::View * view = dynamic_cast(desktop); - doList(ActionContext(desktop)); - } - return false; +CmdLineAction::idle(void) +{ + std::list 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::iterator i = desktops.begin(); + i != desktops.end(); ++i) { + SPDesktop *desktop = *i; + //Inkscape::UI::View::View * view = dynamic_cast(desktop); + doList(ActionContext(desktop)); + } + return false; } } // Inkscape diff --git a/src/main-cmdlineact.h b/src/main-cmdlineact.h index b8ec4403b..171313401 100644 --- a/src/main-cmdlineact.h +++ b/src/main-cmdlineact.h @@ -21,18 +21,18 @@ class ActionContext; class CmdLineAction { bool _isVerb; - char * _arg; + char *_arg; static std::list _list; public: - CmdLineAction (bool isVerb, char const * arg); - virtual ~CmdLineAction (); + CmdLineAction(bool isVerb, char const *arg); + virtual ~CmdLineAction(); - void doIt (ActionContext const & context); + void doIt(ActionContext const &context); /** Return true if any actions were performed */ - static bool doList (ActionContext const & context); - static bool idle (void); + static bool doList(ActionContext const &context); + static bool idle(void); }; } // Inkscape -- cgit v1.2.3 From e458092523bd1e5d77aa8a6675f17b6b0cfe1114 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Thu, 29 Sep 2016 23:08:37 -0400 Subject: Remove the reset on the glyph tangent, it breaks text on path (bug lp:1627523) Fixed bugs: - https://launchpad.net/bugs/1627523 (bzr r15139) --- src/libnrtype/Layout-TNG-Output.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libnrtype/Layout-TNG-Output.cpp b/src/libnrtype/Layout-TNG-Output.cpp index 526319f35..df7adf5b4 100644 --- a/src/libnrtype/Layout-TNG-Output.cpp +++ b/src/libnrtype/Layout-TNG-Output.cpp @@ -742,8 +742,6 @@ void Layout::fitToPathAlign(SVGLength const &startOffset, Path const &path) if (endpoint != startpoint) { tangent = endpoint - startpoint; tangent.normalize(); - } else { - tangent = Geom::Point (0,0); } } g_free(end_otp); -- cgit v1.2.3 From e098320f36aba18034141ce2c3a0f0b9b00ffd47 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Fri, 30 Sep 2016 13:24:43 +0200 Subject: Update attributes list for rename of 'mesh' to 'meshgradient'. (bzr r15140) --- share/attributes/genMapDataSVG.pl | 16 ++++---- share/attributes/svgprops | 84 ++++++++++++++++++++++++--------------- 2 files changed, 59 insertions(+), 41 deletions(-) diff --git a/share/attributes/genMapDataSVG.pl b/share/attributes/genMapDataSVG.pl index 24e760980..68f0bcbdb 100755 --- a/share/attributes/genMapDataSVG.pl +++ b/share/attributes/genMapDataSVG.pl @@ -86,16 +86,16 @@ push @{$attributes{ "transform" }->{elements}}, "flowRoot","flowPara","flowSpan" push @{$attributes{ "fr" }->{elements}}, "radialGradient"; # Mesh gradients -push @{$attributes{ "id" }->{elements}}, "mesh","meshrow","meshpatch"; +push @{$attributes{ "id" }->{elements}}, "meshgradient","mesh","meshrow","meshpatch"; push @{$attributes{ "path" }->{elements}}, "stop"; -push @{$attributes{ "gradientUnits" }->{elements}}, "mesh"; -push @{$attributes{ "gradientTransform" }->{elements}}, "mesh"; +push @{$attributes{ "gradientUnits" }->{elements}}, "meshgradient","mesh"; +push @{$attributes{ "gradientTransform" }->{elements}}, "meshgradient","mesh"; #push @{$attributes{ "transform" }->{elements}}, "mesh"; -push @{$attributes{ "href" }->{elements}}, "mesh"; -push @{$attributes{ "type" }->{elements}}, "mesh"; -push @{$attributes{ "x" }->{elements}}, "mesh"; -push @{$attributes{ "y" }->{elements}}, "mesh"; -push @{$attributes{ "xlink:href" }->{elements}}, "mesh"; +push @{$attributes{ "href" }->{elements}}, "meshgradient","mesh"; +push @{$attributes{ "type" }->{elements}}, "meshgradient","mesh"; +push @{$attributes{ "x" }->{elements}}, "meshgradient","mesh"; +push @{$attributes{ "y" }->{elements}}, "meshgradient","mesh"; +push @{$attributes{ "xlink:href" }->{elements}}, "meshgradient","mesh"; # Hatches push @{$attributes{ "id" }->{elements}}, "hatch","hatchpath"; diff --git a/share/attributes/svgprops b/share/attributes/svgprops index 5df86d68b..810ad5661 100644 --- a/share/attributes/svgprops +++ b/share/attributes/svgprops @@ -106,9 +106,9 @@ "glyphRef" - "altGlyph","glyphRef" -"gradientTransform" - "linearGradient","radialGradient","mesh" +"gradientTransform" - "linearGradient","radialGradient","meshgradient","mesh" -"gradientUnits" - "linearGradient","radialGradient","mesh" +"gradientUnits" - "linearGradient","radialGradient","meshgradient","mesh" "hanging" - "font-face" @@ -124,9 +124,9 @@ "horiz-origin-y" - "font" -"href" - "mesh","hatch" +"href" - "meshgradient","mesh","hatch" -"id" - "a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern","flowRoot","flowPara","flowSpan","flowRect","flowRegion","solidColor","mesh","meshrow","meshpatch","hatch","hatchpath" +"id" - "a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern","flowRoot","flowPara","flowSpan","flowRect","flowRegion","solidColor","meshgradient","mesh","meshrow","meshpatch","hatch","hatchpath" "ideographic" - "font-face" @@ -352,7 +352,7 @@ "transform" - "a","circle","clipPath","defs","ellipse","foreignObject","g","image","line","path","polygon","polyline","rect","switch","text","use","flowRoot","flowPara","flowSpan","hatch" -"type" - "animateTransform","feColorMatrix","feTurbulence","script","style","feFuncA","feFuncB","feFuncG","feFuncR","mesh" +"type" - "animateTransform","feColorMatrix","feTurbulence","script","style","feFuncA","feFuncB","feFuncG","feFuncR","meshgradient","mesh" "u1" - "hkern","vkern" @@ -394,7 +394,7 @@ "widths" - "font-face" -"x" - "altGlyph","cursor","fePointLight","feSpotLight","filter","foreignObject","glyphRef","image","pattern","rect","svg","text","use","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","mask","tref","tspan","mesh" +"x" - "altGlyph","cursor","fePointLight","feSpotLight","filter","foreignObject","glyphRef","image","pattern","rect","svg","text","use","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","mask","tref","tspan","meshgradient","mesh" "x-height" - "font-face" @@ -408,7 +408,7 @@ "xlink:arcrole" - "a","altGlyph","animate","animateColor","animateMotion","animateTransform","color-profile","cursor","feImage","filter","font-face-uri","glyphRef","image","linearGradient","mpath","pattern","radialGradient","script","set","textPath","tref","use" -"xlink:href" - "a","altGlyph","color-profile","cursor","feImage","filter","font-face-uri","glyphRef","image","linearGradient","mpath","pattern","radialGradient","script","textPath","use","animate","animateColor","animateMotion","animateTransform","set","tref","mesh" +"xlink:href" - "a","altGlyph","color-profile","cursor","feImage","filter","font-face-uri","glyphRef","image","linearGradient","mpath","pattern","radialGradient","script","textPath","use","animate","animateColor","animateMotion","animateTransform","set","tref","meshgradient","mesh" "xlink:role" - "a","altGlyph","animate","animateColor","animateMotion","animateTransform","color-profile","cursor","feImage","filter","font-face-uri","glyphRef","image","linearGradient","mpath","pattern","radialGradient","script","set","textPath","tref","use" @@ -424,7 +424,7 @@ "xml:space" - "a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern","flowRoot","flowPara","flowSpan" -"y" - "altGlyph","cursor","fePointLight","feSpotLight","filter","foreignObject","glyphRef","image","pattern","rect","svg","text","use","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","mask","tref","tspan","mesh" +"y" - "altGlyph","cursor","fePointLight","feSpotLight","filter","foreignObject","glyphRef","image","pattern","rect","svg","text","use","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","mask","tref","tspan","meshgradient","mesh" "y1" - "line","linearGradient" @@ -438,31 +438,31 @@ "alignment-baseline" - "tspan","tref","altGlyph","textPath" -"backface-visibility" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"backface-visibility" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "baseline-shift" - "tspan","tref","altGlyph","textPath" "clip" - "svg","symbol","foreignObject","pattern","marker" -"clip-path" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"clip-path" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"clip-rule" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","use","clip-path","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"clip-rule" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","clip-path","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "color" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","path","rect","circle","ellipse","line","polyline","polygon","stop","feFlood","feDiffuseLighting","feSpecularLighting","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"color-interpolation" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","animateColor" +"color-interpolation" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","animateColor" "color-interpolation-filters" - "feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","filter","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "color-profile" - "image","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"color-rendering" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","animateColor" +"color-rendering" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","animateColor" -"cursor" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"cursor" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "direction" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"display" - "svg","g","switch","a","foreignObject","text","tspan","tref","altGlyph","textPath","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"display" - "svg","g","switch","a","foreignObject","text","tspan","tref","altGlyph","textPath","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "dominant-baseline" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan" @@ -474,7 +474,7 @@ "fill-rule" - "path","rect","circle","ellipse","line","polyline","polygon","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"filter" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"filter" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "flood-color" - "feFlood" @@ -484,6 +484,8 @@ "font-family" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"font-feature-settings" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + "font-size" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "font-size-adjust" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" @@ -492,7 +494,19 @@ "font-style" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"font-variant" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"font-variant" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-alternates" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-caps" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-east-asian" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-ligatures" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-numeric" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"font-variant-position" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "font-weight" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" @@ -502,7 +516,7 @@ "image-rendering" - "pattern","image","feImage","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"isolation" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"isolation" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "kerning" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" @@ -520,21 +534,21 @@ "marker-start" - "path","line","polyline","polygon","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"mask" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"mask" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"mix-blend-mode" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"mix-blend-mode" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"opacity" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"opacity" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "overflow" - "svg","symbol","foreignObject","pattern","marker" -"paint-order" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"paint-order" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"perspective" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"perspective" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"perspective-origin" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"perspective-origin" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"pointer-events" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","use","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"pointer-events" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "shape-inside" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan" @@ -546,9 +560,9 @@ "shape-rendering" - "path","rect","circle","ellipse","line","polyline","polygon","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"solid-color" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"solid-color" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"solid-opacity" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"solid-opacity" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "stop-color" - "stop" @@ -586,23 +600,27 @@ "text-decoration-style" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan" +"text-indent" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + "text-orientation" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "text-rendering" - "text","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -"title" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","use","g" +"text-transform" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" + +"title" - "circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","g" -"transform" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"transform" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"transform-box" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"transform-box" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"transform-origin" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"transform-origin" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" -"transform-style" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","use" +"transform-style" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use" "unicode-bidi" - "altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan" -"visibility" - "text","tspan","tref","altGlyph","textPath","a","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" +"visibility" - "text","tspan","tref","altGlyph","textPath","a","circle","ellipse","image","line","path","polygon","polyline","rect","text","flowRoot","use","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" "white-space" - "a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use","altGlyph","textPath","text","tref","tspan","flowRoot","flowPara","flowSpan","a","defs","glyph","g","marker","mask","missing-glyph","pattern","svg","switch","symbol","use" -- cgit v1.2.3 From 7d1184c85c47f1272da5b2ed7816efa685a73e83 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Sat, 1 Oct 2016 17:30:34 -0400 Subject: Add a prune method to saving svg files that removes Adobe's i:pgf tag. Fixed bugs: - https://launchpad.net/bugs/179679 (bzr r15141) --- src/extension/internal/svg.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/extension/internal/svg.cpp b/src/extension/internal/svg.cpp index a94bc2141..9cde90519 100644 --- a/src/extension/internal/svg.cpp +++ b/src/extension/internal/svg.cpp @@ -78,6 +78,28 @@ static void pruneExtendedNamespaces( Inkscape::XML::Node *repr ) } } +/* + * Similar to the above sodipodi and inkscape prune, but used on all documents + * to remove problematic elements (for example Adobe's i:pgf tag) only removes + * known garbage tags. + */ +static void pruneProprietaryGarbage( Inkscape::XML::Node *repr ) +{ + if (repr) { + std::vector nodesRemoved; + for ( Node *child = repr->firstChild(); child; child = child->next() ) { + if((strncmp("i:pgf", child->name(), 5) == 0)) { + nodesRemoved.push_back(child); + g_warning( "An Adobe proprietary tag was found which is known to cause issues. It was removed before saving."); + } else { + pruneProprietaryGarbage(child); + } + } + for ( std::vector::iterator it = nodesRemoved.begin(); it != nodesRemoved.end(); ++it ) { + repr->removeChild(*it); + } + } +} /** \return None @@ -246,6 +268,10 @@ Svg::save(Inkscape::Extension::Output *mod, SPDocument *doc, gchar const *filena || !strcmp (mod->get_id(), SP_MODULE_KEY_OUTPUT_SVG_INKSCAPE) || !strcmp (mod->get_id(), SP_MODULE_KEY_OUTPUT_SVGZ_INKSCAPE)); + // We prune the in-use document and deliberately loose data, because there + // is no known use for this data at the present time. + pruneProprietaryGarbage(rdoc->root()); + if (!exportExtensions) { // We make a duplicate document so we don't prune the in-use document // and loose data. Perhaps the user intends to save as inkscape-svg next. -- cgit v1.2.3 From b6ec8d66b6ba6889217dfb0cbff4fd3c9901acd2 Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Sat, 1 Oct 2016 23:14:55 -0400 Subject: Adjust dock size to minimum width during canvas table size allocation signal. (bzr r15142) --- src/widgets/desktop-widget.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index bd72560c6..55dc82dc0 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -307,12 +307,19 @@ sp_desktop_widget_class_init (SPDesktopWidgetClass *klass) * This adjusts the range of the rulers when the dock container is adjusted * (fixes lp:950552) */ -static void canvas_tbl_size_allocate(GtkWidget * /*widget*/, +static void canvas_tbl_size_allocate(GtkWidget * widget, GdkRectangle * /*allocation*/, gpointer data) { SPDesktopWidget *dtw = SP_DESKTOP_WIDGET(data); sp_desktop_widget_update_rulers(dtw); + + GtkWidget* parent = gtk_widget_get_parent(widget); + if(GTK_IS_PANED(parent)) { + GtkPaned *paned = GTK_PANED(parent); + // Could use gtk paned property 'max-position' here + gtk_paned_set_position(paned, 10000); + } } /** @@ -527,8 +534,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) paned_class->cycle_handle_focus = NULL; } - gtk_widget_set_hexpand(GTK_WIDGET(paned->gobj()), TRUE); - gtk_widget_set_vexpand(GTK_WIDGET(paned->gobj()), TRUE); + paned->set_hexpand(true); + paned->set_vexpand(true); gtk_grid_attach(GTK_GRID(tbl_wrapper), GTK_WIDGET (paned->gobj()), 1, 1, 1, 1); } else { gtk_widget_set_hexpand(GTK_WIDGET(dtw->canvas_tbl), TRUE); -- cgit v1.2.3 From 647462662a4267c58306e49ec841abe92a958cca Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Mon, 3 Oct 2016 15:29:34 +0200 Subject: Prevent a crash if a mesh is defined in bounding box coordinates. (bzr r15144) --- src/gradient-chemistry.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gradient-chemistry.cpp b/src/gradient-chemistry.cpp index 061fadbaa..cf5cda180 100644 --- a/src/gradient-chemistry.cpp +++ b/src/gradient-chemistry.cpp @@ -434,6 +434,11 @@ SPGradient *sp_gradient_convert_to_userspace(SPGradient *gr, SPItem *item, gchar return gr; } + // FIXME Transforming a mesh gradient is more complicated... probably need to add function to SPMeshArray.wq + if ( gr && SP_IS_MESHGRADIENT( gr ) ) { + return gr; + } + // First, fork it if it is shared gr = sp_gradient_fork_private_if_necessary(gr, gr->getVector(), SP_IS_RADIALGRADIENT(gr) ? SP_GRADIENT_TYPE_RADIAL : SP_GRADIENT_TYPE_LINEAR, item); -- cgit v1.2.3 From e1d0c1cb00f84b66b38af6eec563cf60df7ba726 Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Cenoz Date: Mon, 3 Oct 2016 18:08:29 +0200 Subject: Fix a bug on eraser mode when previous clip are shapes not paths (bzr r15145) --- src/ui/tools/eraser-tool.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/ui/tools/eraser-tool.cpp b/src/ui/tools/eraser-tool.cpp index 38c72cac0..12686160b 100644 --- a/src/ui/tools/eraser-tool.cpp +++ b/src/ui/tools/eraser-tool.cpp @@ -766,9 +766,17 @@ void EraserTool::set_to_accumulated() { if (bbox && bbox->intersects(*eraserBbox)) { SPClipPath *clip_path = item->clip_ref->getObject(); if (clip_path) { - SPPath *clip_data = SP_PATH(clip_path->firstChild()); + std::vector selected; + selected.push_back(SP_ITEM(clip_path->firstChild())); + std::vector to_select; + std::vector items(selected); + sp_item_list_to_curves(items, selected, to_select); + Inkscape::XML::Node * clip_data = SP_ITEM(clip_path->firstChild())->getRepr(); + if (!clip_data && !to_select.empty()) { + clip_data = *(to_select.begin()); + } if (clip_data) { - Inkscape::XML::Node *dup_clip = SP_OBJECT(clip_data)->getRepr()->duplicate(xml_doc); + Inkscape::XML::Node *dup_clip = clip_data->duplicate(xml_doc); if (dup_clip) { SPItem * dup_clip_obj = SP_ITEM(item_repr->parent->appendChildRepr(dup_clip)); if (dup_clip_obj) { -- cgit v1.2.3